diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp b/contrib/llvm-project/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp index e60b5eeacdae..fd58ff13788d 100644 --- a/contrib/llvm-project/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp +++ b/contrib/llvm-project/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp @@ -172,8 +172,12 @@ void NVPTXLowerArgs::handleByValParam(Argument *Arg) { Value *ArgInParam = new AddrSpaceCastInst( Arg, PointerType::get(StructType, ADDRESS_SPACE_PARAM), Arg->getName(), FirstInst); + // Be sure to propagate alignment to this load; LLVM doesn't know that NVPTX + // addrspacecast preserves alignment. Since params are constant, this load is + // definitely not volatile. LoadInst *LI = - new LoadInst(StructType, ArgInParam, Arg->getName(), FirstInst); + new LoadInst(StructType, ArgInParam, Arg->getName(), + /*isVolatile=*/false, AllocA->getAlign(), FirstInst); new StoreInst(LI, AllocA, FirstInst); } @@ -214,8 +218,7 @@ bool NVPTXLowerArgs::runOnKernelFunction(Function &F) { for (auto &I : B) { if (LoadInst *LI = dyn_cast<LoadInst>(&I)) { if (LI->getType()->isPointerTy()) { - Value *UO = GetUnderlyingObject(LI->getPointerOperand(), - F.getParent()->getDataLayout()); + Value *UO = getUnderlyingObject(LI->getPointerOperand()); if (Argument *Arg = dyn_cast<Argument>(UO)) { if (Arg->hasByValAttr()) { // LI is a load from a pointer within a byval kernel parameter. |