[PATCH] D48979: AMDGPU: Fix UBSan error caused by r335942
Tom Stellard via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 5 10:20:30 PDT 2018
tstellar created this revision.
tstellar added reviewers: arsenm, dstenb.
Herald added subscribers: t-tye, tpr, dstuttard, yaxunl, nhaehnle, wdng, kzhuravl.
Fixes PR38071.
Repository:
rL LLVM
https://reviews.llvm.org/D48979
Files:
lib/Target/AMDGPU/AMDGPUISelLowering.cpp
lib/Target/AMDGPU/AMDGPUISelLowering.h
lib/Target/AMDGPU/R600ISelLowering.cpp
lib/Target/AMDGPU/SIISelLowering.cpp
Index: lib/Target/AMDGPU/SIISelLowering.cpp
===================================================================
--- lib/Target/AMDGPU/SIISelLowering.cpp
+++ lib/Target/AMDGPU/SIISelLowering.cpp
@@ -1127,8 +1127,12 @@
SDValue SITargetLowering::getImplicitArgPtr(SelectionDAG &DAG,
const SDLoc &SL) const {
+ MachineFunction &MF = DAG.getMachineFunction();
+ const Function &F = MF.getFunction();
+ const SISubtarget &ST = MF.getSubtarget<SISubtarget>();
uint64_t Offset = getImplicitParameterOffset(DAG.getMachineFunction(),
- FIRST_IMPLICIT);
+ FIRST_IMPLICIT,
+ ST.getExplicitKernelArgOffset(F));
return lowerKernArgParameterPtr(DAG, SL, DAG.getEntryNode(), Offset);
}
Index: lib/Target/AMDGPU/R600ISelLowering.cpp
===================================================================
--- lib/Target/AMDGPU/R600ISelLowering.cpp
+++ lib/Target/AMDGPU/R600ISelLowering.cpp
@@ -602,7 +602,8 @@
case Intrinsic::r600_implicitarg_ptr: {
MVT PtrVT = getPointerTy(DAG.getDataLayout(), AMDGPUASI.PARAM_I_ADDRESS);
- uint32_t ByteOffset = getImplicitParameterOffset(MF, FIRST_IMPLICIT);
+ uint32_t ByteOffset = getImplicitParameterOffset(MF, FIRST_IMPLICIT,
+ Subtarget->getExplicitKernelArgOffset(MF));
return DAG.getConstant(ByteOffset, DL, PtrVT);
}
case Intrinsic::r600_read_ngroups_x:
Index: lib/Target/AMDGPU/AMDGPUISelLowering.h
===================================================================
--- lib/Target/AMDGPU/AMDGPUISelLowering.h
+++ lib/Target/AMDGPU/AMDGPUISelLowering.h
@@ -294,7 +294,8 @@
/// Helper function that returns the byte offset of the given
/// type of implicit parameter.
uint32_t getImplicitParameterOffset(const MachineFunction &MF,
- const ImplicitParameter Param) const;
+ const ImplicitParameter Param,
+ unsigned ExplicitArgOffset) const;
AMDGPUAS getAMDGPUAS() const {
return AMDGPUASI;
Index: lib/Target/AMDGPU/AMDGPUISelLowering.cpp
===================================================================
--- lib/Target/AMDGPU/AMDGPUISelLowering.cpp
+++ lib/Target/AMDGPU/AMDGPUISelLowering.cpp
@@ -3937,10 +3937,11 @@
}
uint32_t AMDGPUTargetLowering::getImplicitParameterOffset(
- const MachineFunction &MF, const ImplicitParameter Param) const {
+ const MachineFunction &MF, const ImplicitParameter Param,
+ unsigned ExplicitArgOffset) const {
const AMDGPUMachineFunction *MFI = MF.getInfo<AMDGPUMachineFunction>();
- const AMDGPUSubtarget &ST = MF.getSubtarget<AMDGPUSubtarget>();
- unsigned ExplicitArgOffset = ST.getExplicitKernelArgOffset(MF.getFunction());
+ const AMDGPUCommonSubtarget &ST =
+ AMDGPUCommonSubtarget::get(getTargetMachine(), MF.getFunction());
unsigned Alignment = ST.getAlignmentForImplicitArgPtr();
uint64_t ArgOffset = alignTo(MFI->getExplicitKernArgSize(), Alignment) +
ExplicitArgOffset;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D48979.154263.patch
Type: text/x-patch
Size: 3174 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180705/ade431f4/attachment.bin>
More information about the llvm-commits
mailing list