From e91440628e77bbde7065a40231b776e47f19beb8 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sat, 3 Jul 2021 12:44:21 +0200 Subject: [PATCH] [IRBuilder] Avoid fetching pointer element type in some assertions Specifically the CreateMaskedStore and CreateMaskedScatter APIs. The CreateMaskedLoad and CreateMaskedGather APIs will need an additional type argument. --- llvm/lib/IR/IRBuilder.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/llvm/lib/IR/IRBuilder.cpp b/llvm/lib/IR/IRBuilder.cpp index bcd41a5..47b154c 100644 --- a/llvm/lib/IR/IRBuilder.cpp +++ b/llvm/lib/IR/IRBuilder.cpp @@ -524,8 +524,9 @@ CallInst *IRBuilderBase::CreateMaskedLoad(Value *Ptr, Align Alignment, CallInst *IRBuilderBase::CreateMaskedStore(Value *Val, Value *Ptr, Align Alignment, Value *Mask) { auto *PtrTy = cast(Ptr->getType()); - Type *DataTy = PtrTy->getElementType(); - assert(DataTy->isVectorTy() && "Ptr should point to a vector"); + Type *DataTy = Val->getType(); + assert(DataTy->isVectorTy() && "Val should be a vector"); + assert(PtrTy->isOpaqueOrPointeeTypeMatches(DataTy) && "Wrong element type"); assert(Mask && "Mask should not be all-ones (null)"); Type *OverloadedTypes[] = { DataTy, PtrTy }; Value *Ops[] = {Val, Ptr, getInt32(Alignment.value()), Mask}; @@ -590,9 +591,9 @@ CallInst *IRBuilderBase::CreateMaskedScatter(Value *Data, Value *Ptrs, ElementCount NumElts = PtrsTy->getElementCount(); #ifndef NDEBUG - auto PtrTy = cast(PtrsTy->getElementType()); + auto *PtrTy = cast(PtrsTy->getElementType()); assert(NumElts == DataTy->getElementCount() && - PtrTy->getElementType() == DataTy->getElementType() && + PtrTy->isOpaqueOrPointeeTypeMatches(DataTy->getElementType()) && "Incompatible pointer and data types"); #endif -- 2.7.4