Mercurial > hg > Members > tobaru > cbc > CbC_llvm
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 |