diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2018-09-11 10:09:45 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2018-09-11 10:09:45 +0000 | 
| commit | 36272db3cad448211389168cced4baac39a1a0d1 (patch) | |
| tree | e570502f0d6730e432657fc86304fa02a2de80fa /lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp | |
| parent | 8568f9cb5af587ccee4088af3e2d617b3c30d403 (diff) | |
Diffstat (limited to 'lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp')
| -rw-r--r-- | lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp b/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp index f25f4d4693ea..7cb0e12a6809 100644 --- a/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp +++ b/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp @@ -1451,7 +1451,11 @@ bool AMDGPUDAGToDAGISel::SelectSMRD(SDValue Addr, SDValue &SBase,                                       SDValue &Offset, bool &Imm) const {    SDLoc SL(Addr); -  if (CurDAG->isBaseWithConstantOffset(Addr)) { +  // A 32-bit (address + offset) should not cause unsigned 32-bit integer +  // wraparound, because s_load instructions perform the addition in 64 bits. +  if ((Addr.getValueType() != MVT::i32 || +       Addr->getFlags().hasNoUnsignedWrap()) && +      CurDAG->isBaseWithConstantOffset(Addr)) {      SDValue N0 = Addr.getOperand(0);      SDValue N1 = Addr.getOperand(1); | 
