diff options
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 14 | ||||
-rw-r--r-- | llvm/lib/CodeGen/LowLevelType.cpp | 23 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MIRParser/MIParser.cpp | 4 |
3 files changed, 21 insertions, 20 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index 40c46d61041..a6aeec4089a 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -56,7 +56,7 @@ unsigned IRTranslator::getOrCreateVReg(const Value &Val) { // we need to concat together to produce the value. assert(Val.getType()->isSized() && "Don't know how to create an empty vreg"); - unsigned VReg = MRI->createGenericVirtualRegister(LLT{*Val.getType(), DL}); + unsigned VReg = MRI->createGenericVirtualRegister(LLT{*Val.getType(), *DL}); ValReg = VReg; if (auto CV = dyn_cast<Constant>(&Val)) { @@ -176,7 +176,7 @@ bool IRTranslator::translateLoad(const User &U) { MachineFunction &MF = MIRBuilder.getMF(); unsigned Res = getOrCreateVReg(LI); unsigned Addr = getOrCreateVReg(*LI.getPointerOperand()); - LLT VTy{*LI.getType(), DL}, PTy{*LI.getPointerOperand()->getType()}; + LLT VTy{*LI.getType(), *DL}, PTy{*LI.getPointerOperand()->getType(), *DL}; MIRBuilder.buildLoad( Res, Addr, @@ -197,8 +197,8 @@ bool IRTranslator::translateStore(const User &U) { MachineFunction &MF = MIRBuilder.getMF(); unsigned Val = getOrCreateVReg(*SI.getValueOperand()); unsigned Addr = getOrCreateVReg(*SI.getPointerOperand()); - LLT VTy{*SI.getValueOperand()->getType(), DL}, - PTy{*SI.getPointerOperand()->getType()}; + LLT VTy{*SI.getValueOperand()->getType(), *DL}, + PTy{*SI.getPointerOperand()->getType(), *DL}; MIRBuilder.buildStore( Val, Addr, @@ -270,7 +270,7 @@ bool IRTranslator::translateSelect(const User &U) { } bool IRTranslator::translateBitCast(const User &U) { - if (LLT{*U.getOperand(0)->getType()} == LLT{*U.getType()}) { + if (LLT{*U.getOperand(0)->getType(), *DL} == LLT{*U.getType(), *DL}) { unsigned &Reg = ValToVReg[&U]; if (Reg) MIRBuilder.buildCopy(Reg, getOrCreateVReg(*U.getOperand(0))); @@ -295,7 +295,7 @@ bool IRTranslator::translateGetElementPtr(const User &U) { Value &Op0 = *U.getOperand(0); unsigned BaseReg = getOrCreateVReg(Op0); - LLT PtrTy(*Op0.getType()); + LLT PtrTy{*Op0.getType(), *DL}; unsigned PtrSize = DL->getPointerSizeInBits(PtrTy.getAddressSpace()); LLT OffsetTy = LLT::scalar(PtrSize); @@ -372,7 +372,7 @@ bool IRTranslator::translateKnownIntrinsic(const CallInst &CI, case Intrinsic::smul_with_overflow: Op = TargetOpcode::G_SMULO; break; } - LLT Ty{*CI.getOperand(0)->getType()}; + LLT Ty{*CI.getOperand(0)->getType(), *DL}; LLT s1 = LLT::scalar(1); unsigned Width = Ty.getSizeInBits(); unsigned Res = MRI->createGenericVirtualRegister(Ty); diff --git a/llvm/lib/CodeGen/LowLevelType.cpp b/llvm/lib/CodeGen/LowLevelType.cpp index b6f82edc78a..819d85aae5b 100644 --- a/llvm/lib/CodeGen/LowLevelType.cpp +++ b/llvm/lib/CodeGen/LowLevelType.cpp @@ -18,32 +18,31 @@ #include "llvm/Support/raw_ostream.h" using namespace llvm; -LLT::LLT(Type &Ty, const DataLayout *DL) { +LLT::LLT(Type &Ty, const DataLayout &DL) { if (auto VTy = dyn_cast<VectorType>(&Ty)) { - SizeOrAddrSpace = VTy->getElementType()->getPrimitiveSizeInBits(); - NumElements = VTy->getNumElements(); - Kind = NumElements == 1 ? Scalar : Vector; + SizeInBits = VTy->getElementType()->getPrimitiveSizeInBits(); + ElementsOrAddrSpace = VTy->getNumElements(); + Kind = ElementsOrAddrSpace == 1 ? Scalar : Vector; } else if (auto PTy = dyn_cast<PointerType>(&Ty)) { Kind = Pointer; - SizeOrAddrSpace = PTy->getAddressSpace(); - NumElements = 1; + SizeInBits = DL.getTypeSizeInBits(&Ty); + ElementsOrAddrSpace = PTy->getAddressSpace(); } else if (Ty.isSized()) { // Aggregates are no different from real scalars as far as GlobalISel is // concerned. Kind = Scalar; - SizeOrAddrSpace = - DL ? DL->getTypeSizeInBits(&Ty) : Ty.getPrimitiveSizeInBits(); - NumElements = 1; - assert(SizeOrAddrSpace != 0 && "invalid zero-sized type"); + SizeInBits = DL.getTypeSizeInBits(&Ty); + ElementsOrAddrSpace = 1; + assert(SizeInBits != 0 && "invalid zero-sized type"); } else { Kind = Unsized; - SizeOrAddrSpace = NumElements = 0; + SizeInBits = ElementsOrAddrSpace = 0; } } void LLT::print(raw_ostream &OS) const { if (isVector()) - OS << "<" << NumElements << " x s" << SizeOrAddrSpace << ">"; + OS << "<" << ElementsOrAddrSpace << " x s" << SizeInBits << ">"; else if (isPointer()) OS << "p" << getAddressSpace(); else if (isSized()) diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp index 2147651c4ef..6fb3d281be0 100644 --- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp +++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp @@ -1048,7 +1048,9 @@ bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) { lex(); return false; } else if (Token.is(MIToken::PointerType)) { - Ty = LLT::pointer(APSInt(Token.range().drop_front()).getZExtValue()); + const DataLayout &DL = MF.getFunction()->getParent()->getDataLayout(); + unsigned AS = APSInt(Token.range().drop_front()).getZExtValue(); + Ty = LLT::pointer(AS, DL.getPointerSizeInBits(AS)); lex(); return false; } |