diff --git a/llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp b/llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp --- a/llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp +++ b/llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp @@ -117,7 +117,7 @@ struct CallInfo { uint32_t Kind; uint32_t AccessIndex; - uint32_t RecordAlignment; + Align RecordAlignment; MDNode *Metadata; Value *Base; }; @@ -157,11 +157,11 @@ void replaceWithGEP(std::vector &CallList, uint32_t NumOfZerosIndex, uint32_t DIIndex); bool HasPreserveFieldInfoCall(CallInfoStack &CallStack); - void GetStorageBitRange(DIDerivedType *MemberTy, uint32_t RecordAlignment, + void GetStorageBitRange(DIDerivedType *MemberTy, Align RecordAlignment, uint32_t &StartBitOffset, uint32_t &EndBitOffset); uint32_t GetFieldInfo(uint32_t InfoKind, DICompositeType *CTy, uint32_t AccessIndex, uint32_t PatchImm, - uint32_t RecordAlignment); + Align RecordAlignment); Value *computeBaseAndAccessKey(CallInst *Call, CallInfo &CInfo, std::string &AccessKey, MDNode *&BaseMeta); @@ -250,7 +250,7 @@ CInfo.AccessIndex = getConstant(Call->getArgOperand(2)); CInfo.Base = Call->getArgOperand(0); CInfo.RecordAlignment = - DL->getABITypeAlignment(CInfo.Base->getType()->getPointerElementType()); + DL->getABITypeAlign(CInfo.Base->getType()->getPointerElementType()); return true; } if (GV->getName().startswith("llvm.preserve.union.access.index")) { @@ -261,7 +261,7 @@ CInfo.AccessIndex = getConstant(Call->getArgOperand(1)); CInfo.Base = Call->getArgOperand(0); CInfo.RecordAlignment = - DL->getABITypeAlignment(CInfo.Base->getType()->getPointerElementType()); + DL->getABITypeAlign(CInfo.Base->getType()->getPointerElementType()); return true; } if (GV->getName().startswith("llvm.preserve.struct.access.index")) { @@ -272,7 +272,7 @@ CInfo.AccessIndex = getConstant(Call->getArgOperand(2)); CInfo.Base = Call->getArgOperand(0); CInfo.RecordAlignment = - DL->getABITypeAlignment(CInfo.Base->getType()->getPointerElementType()); + DL->getABITypeAlign(CInfo.Base->getType()->getPointerElementType()); return true; } if (GV->getName().startswith("llvm.bpf.preserve.field.info")) { @@ -522,12 +522,12 @@ /// Get the start and the end of storage offset for \p MemberTy. void BPFAbstractMemberAccess::GetStorageBitRange(DIDerivedType *MemberTy, - uint32_t RecordAlignment, + Align RecordAlignment, uint32_t &StartBitOffset, uint32_t &EndBitOffset) { uint32_t MemberBitSize = MemberTy->getSizeInBits(); uint32_t MemberBitOffset = MemberTy->getOffsetInBits(); - uint32_t AlignBits = RecordAlignment * 8; + uint32_t AlignBits = RecordAlignment.value() * 8; if (RecordAlignment > 8 || MemberBitSize > AlignBits) report_fatal_error("Unsupported field expression for llvm.bpf.preserve.field.info, " "requiring too big alignment"); @@ -543,7 +543,7 @@ DICompositeType *CTy, uint32_t AccessIndex, uint32_t PatchImm, - uint32_t RecordAlignment) { + Align RecordAlignment) { if (InfoKind == BPFCoreSharedInfo::FIELD_EXISTENCE) return 1; @@ -829,11 +829,10 @@ AccessKey += ":" + std::to_string(AccessIndex); MDNode *MDN = CInfo.Metadata; - uint32_t RecordAlignment = CInfo.RecordAlignment; // At this stage, it cannot be pointer type. auto *CTy = cast(stripQualifiers(cast(MDN))); PatchImm = GetFieldInfo(InfoKind, CTy, AccessIndex, PatchImm, - RecordAlignment); + CInfo.RecordAlignment); } // Access key is the