comparison lib/Target/PowerPC/PPCFastISel.cpp @ 100:7d135dc70f03

LLVM 3.9
author Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
date Tue, 26 Jan 2016 22:53:40 +0900
parents afa8332a0e37
children 1172e4bd9c6f
comparison
equal deleted inserted replaced
96:6418606d0ead 100:7d135dc70f03
291 bool PPCFastISel::isValueAvailable(const Value *V) const { 291 bool PPCFastISel::isValueAvailable(const Value *V) const {
292 if (!isa<Instruction>(V)) 292 if (!isa<Instruction>(V))
293 return true; 293 return true;
294 294
295 const auto *I = cast<Instruction>(V); 295 const auto *I = cast<Instruction>(V);
296 if (FuncInfo.MBBMap[I->getParent()] == FuncInfo.MBB) 296 return FuncInfo.MBBMap[I->getParent()] == FuncInfo.MBB;
297 return true;
298
299 return false;
300 } 297 }
301 298
302 // Given a value Obj, create an Address object Addr that represents its 299 // Given a value Obj, create an Address object Addr that represents its
303 // address. Return false if we can't handle it. 300 // address. Return false if we can't handle it.
304 bool PPCFastISel::PPCComputeAddress(const Value *Obj, Address &Addr) { 301 bool PPCFastISel::PPCComputeAddress(const Value *Obj, Address &Addr) {
1970 // Either way, start with the ADDIStocHA: 1967 // Either way, start with the ADDIStocHA:
1971 unsigned HighPartReg = createResultReg(RC); 1968 unsigned HighPartReg = createResultReg(RC);
1972 BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(PPC::ADDIStocHA), 1969 BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(PPC::ADDIStocHA),
1973 HighPartReg).addReg(PPC::X2).addGlobalAddress(GV); 1970 HighPartReg).addReg(PPC::X2).addGlobalAddress(GV);
1974 1971
1975 // If/when switches are implemented, jump tables should be handled 1972 unsigned char GVFlags = PPCSubTarget->classifyGlobalReference(GV);
1976 // on the "if" path here. 1973 if (GVFlags & PPCII::MO_NLP_FLAG) {
1977 if (CModel == CodeModel::Large ||
1978 (GV->getType()->getElementType()->isFunctionTy() &&
1979 !GV->isStrongDefinitionForLinker()) ||
1980 GV->isDeclaration() || GV->hasCommonLinkage() ||
1981 GV->hasAvailableExternallyLinkage())
1982 BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(PPC::LDtocL), 1974 BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(PPC::LDtocL),
1983 DestReg).addGlobalAddress(GV).addReg(HighPartReg); 1975 DestReg).addGlobalAddress(GV).addReg(HighPartReg);
1984 else 1976 } else {
1985 // Otherwise generate the ADDItocL. 1977 // Otherwise generate the ADDItocL.
1986 BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(PPC::ADDItocL), 1978 BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(PPC::ADDItocL),
1987 DestReg).addReg(HighPartReg).addGlobalAddress(GV); 1979 DestReg).addReg(HighPartReg).addGlobalAddress(GV);
1980 }
1988 } 1981 }
1989 1982
1990 return DestReg; 1983 return DestReg;
1991 } 1984 }
1992 1985