diff --git a/llvm/lib/SYCLLowerIR/LowerWGScope.cpp b/llvm/lib/SYCLLowerIR/LowerWGScope.cpp index 14087420587e3..258ea475b49ac 100644 --- a/llvm/lib/SYCLLowerIR/LowerWGScope.cpp +++ b/llvm/lib/SYCLLowerIR/LowerWGScope.cpp @@ -106,7 +106,7 @@ static constexpr char PFWI_MD[] = "parallel_for_work_item"; static cl::opt Debug("sycl-lower-wg-debug", llvm::cl::Optional, llvm::cl::Hidden, llvm::cl::desc("Debug SYCL work group code lowering"), - llvm::cl::init(10)); + llvm::cl::init(1)); namespace { class SYCLLowerWGScopeLegacyPass : public FunctionPass { @@ -375,6 +375,7 @@ using LocalsSet = SmallPtrSet; static void copyBetweenPrivateAndShadow(Value *L, GlobalVariable *Shadow, IRBuilder<> &Builder, bool Loc2Shadow) { + assert(isa(L->getType())); Type *T = nullptr; MaybeAlign LocAlign(0); @@ -382,18 +383,21 @@ static void copyBetweenPrivateAndShadow(Value *L, GlobalVariable *Shadow, T = AI->getAllocatedType(); LocAlign = MaybeAlign(AI->getAlignment()); } else { - if (cast(L)->hasByValAttr()) { - T = cast(L)->getParamByValType(); - LocAlign = MaybeAlign(cast(L)->getParamAlignment()); + auto Arg = cast(L); + if (Arg->hasByValAttr()) { + T = Arg->getParamByValType(); + LocAlign = MaybeAlign(Arg->getParamAlignment()); } else { - Type *Ty = cast(L)->getType(); + Type *Ty = Arg->getType(); Module &M = *Shadow->getParent(); LocAlign = M.getDataLayout().getValueOrABITypeAlignment( - MaybeAlign(cast(L)->getParamAlignment()), Ty); - T = cast(L)->getType()->getPointerElementType(); + MaybeAlign(Arg->getParamAlignment()), Ty); + T = Arg->getType()->getPointerElementType(); } } + assert(T && "Unexpected type"); + if (T->isAggregateType()) { // TODO: we should use methods which directly return MaybeAlign once such // are added to LLVM for AllocaInst and GlobalVariable