forked from OSchip/llvm-project
AMDGPU: Remove SignBitIsZero for mubuf scratch offsets
These instructions do not have the same negative base address problem that DS instructions do on SI. llvm-svn: 263964
This commit is contained in:
parent
bd6a74e1fa
commit
cb38a6bd35
|
@ -1070,7 +1070,7 @@ bool AMDGPUDAGToDAGISel::SelectMUBUFScratch(SDValue Addr, SDValue &Rsrc,
|
||||||
|
|
||||||
// Offsets in vaddr must be positive.
|
// Offsets in vaddr must be positive.
|
||||||
ConstantSDNode *C1 = cast<ConstantSDNode>(N1);
|
ConstantSDNode *C1 = cast<ConstantSDNode>(N1);
|
||||||
if (isLegalMUBUFImmOffset(C1) && CurDAG->SignBitIsZero(N0)) {
|
if (isLegalMUBUFImmOffset(C1)) {
|
||||||
VAddr = N0;
|
VAddr = N0;
|
||||||
ImmOffset = CurDAG->getTargetConstant(C1->getZExtValue(), DL, MVT::i16);
|
ImmOffset = CurDAG->getTargetConstant(C1->getZExtValue(), DL, MVT::i16);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
; RUN: llc -show-mc-encoding -mattr=+promote-alloca -verify-machineinstrs -march=amdgcn -mcpu=SI < %s | FileCheck %s -check-prefix=SI-PROMOTE -check-prefix=SI -check-prefix=FUNC
|
; RUN: llc -show-mc-encoding -mattr=+promote-alloca -verify-machineinstrs -march=amdgcn < %s | FileCheck %s -check-prefix=SI-PROMOTE -check-prefix=SI -check-prefix=FUNC
|
||||||
; RUN: llc -show-mc-encoding -mattr=+promote-alloca -verify-machineinstrs -mtriple=amdgcn--amdhsa -mcpu=kaveri < %s | FileCheck %s -check-prefix=SI-PROMOTE -check-prefix=SI -check-prefix=FUNC -check-prefix=HSA-PROMOTE
|
; RUN: llc -show-mc-encoding -mattr=+promote-alloca -verify-machineinstrs -mtriple=amdgcn--amdhsa -mcpu=kaveri < %s | FileCheck %s -check-prefix=SI-PROMOTE -check-prefix=SI -check-prefix=FUNC -check-prefix=HSA-PROMOTE
|
||||||
; RUN: llc -show-mc-encoding -mattr=-promote-alloca -verify-machineinstrs -march=amdgcn -mcpu=SI < %s | FileCheck %s -check-prefix=SI-ALLOCA -check-prefix=SI -check-prefix=FUNC
|
; RUN: llc -show-mc-encoding -mattr=-promote-alloca -verify-machineinstrs -march=amdgcn < %s | FileCheck %s -check-prefix=SI-ALLOCA -check-prefix=SI -check-prefix=FUNC
|
||||||
; RUN: llc -show-mc-encoding -mattr=-promote-alloca -verify-machineinstrs -mtriple=amdgcn-amdhsa -mcpu=kaveri < %s | FileCheck %s -check-prefix=SI-ALLOCA -check-prefix=SI -check-prefix=FUNC -check-prefix=HSA-ALLOCA
|
; RUN: llc -show-mc-encoding -mattr=-promote-alloca -verify-machineinstrs -mtriple=amdgcn-amdhsa -mcpu=kaveri < %s | FileCheck %s -check-prefix=SI-ALLOCA -check-prefix=SI -check-prefix=FUNC -check-prefix=HSA-ALLOCA
|
||||||
; RUN: llc -show-mc-encoding -mattr=+promote-alloca -verify-machineinstrs -march=amdgcn -mcpu=tonga < %s | FileCheck %s -check-prefix=SI-PROMOTE -check-prefix=SI -check-prefix=FUNC
|
; RUN: llc -show-mc-encoding -mattr=+promote-alloca -verify-machineinstrs -march=amdgcn -mcpu=tonga < %s | FileCheck %s -check-prefix=SI-PROMOTE -check-prefix=SI -check-prefix=FUNC
|
||||||
; RUN: llc -show-mc-encoding -mattr=-promote-alloca -verify-machineinstrs -march=amdgcn -mcpu=tonga < %s | FileCheck %s -check-prefix=SI-ALLOCA -check-prefix=SI -check-prefix=FUNC
|
; RUN: llc -show-mc-encoding -mattr=-promote-alloca -verify-machineinstrs -march=amdgcn -mcpu=tonga < %s | FileCheck %s -check-prefix=SI-ALLOCA -check-prefix=SI -check-prefix=FUNC
|
||||||
|
@ -406,7 +406,7 @@ entry:
|
||||||
; FUNC-LABEL: ptrtoint:
|
; FUNC-LABEL: ptrtoint:
|
||||||
; SI-NOT: ds_write
|
; SI-NOT: ds_write
|
||||||
; SI: buffer_store_dword v{{[0-9]+}}, v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], s{{[0-9]+}} offen
|
; SI: buffer_store_dword v{{[0-9]+}}, v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], s{{[0-9]+}} offen
|
||||||
; SI: buffer_load_dword v{{[0-9]+}}, v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], s{{[0-9]+}} offen ;
|
; SI: buffer_load_dword v{{[0-9]+}}, v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], s{{[0-9]+}} offen offset:5 ;
|
||||||
define void @ptrtoint(i32 addrspace(1)* %out, i32 %a, i32 %b) {
|
define void @ptrtoint(i32 addrspace(1)* %out, i32 %a, i32 %b) {
|
||||||
%alloca = alloca [16 x i32]
|
%alloca = alloca [16 x i32]
|
||||||
%tmp0 = getelementptr [16 x i32], [16 x i32]* %alloca, i32 0, i32 %a
|
%tmp0 = getelementptr [16 x i32], [16 x i32]* %alloca, i32 0, i32 %a
|
||||||
|
|
|
@ -47,8 +47,8 @@ done:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
; GCN-LABEL: {{^}}legal_offset_fi_offset
|
; GCN-LABEL: {{^}}legal_offset_fi_offset:
|
||||||
; GCN: buffer_store_dword v{{[0-9]+}}, v{{[0-9]+}}, s[{{[0-9]+}}:{{[0-9]+}}], s{{[0-9]+}} offen
|
; GCN: buffer_store_dword v{{[0-9]+}}, v{{[0-9]+}}, s[{{[0-9]+}}:{{[0-9]+}}], s{{[0-9]+}} offen{{$}}
|
||||||
; GCN: v_add_i32_e32 [[OFFSET:v[0-9]+]], vcc, 0x8000
|
; GCN: v_add_i32_e32 [[OFFSET:v[0-9]+]], vcc, 0x8000
|
||||||
; GCN: buffer_store_dword v{{[0-9]+}}, [[OFFSET]], s[{{[0-9]+}}:{{[0-9]+}}], s{{[0-9]+}} offen{{$}}
|
; GCN: buffer_store_dword v{{[0-9]+}}, [[OFFSET]], s[{{[0-9]+}}:{{[0-9]+}}], s{{[0-9]+}} offen{{$}}
|
||||||
|
|
||||||
|
@ -85,11 +85,8 @@ done:
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
|
||||||
; GCN-LABEL: @neg_vaddr_offset
|
; GCN-LABEL: {{^}}neg_vaddr_offset:
|
||||||
; We can't prove %offset is positive, so we must do the computation with the
|
; GCN: buffer_store_dword v{{[0-9]+}}, v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], s{{[0-9]+}} offen offset:16{{$}}
|
||||||
; immediate in an add instruction instead of folding offset and the immediate into
|
|
||||||
; the store instruction.
|
|
||||||
; GCN: buffer_store_dword v{{[0-9]+}}, v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], s{{[0-9]+}} offen{{$}}
|
|
||||||
define void @neg_vaddr_offset(i32 %offset) {
|
define void @neg_vaddr_offset(i32 %offset) {
|
||||||
entry:
|
entry:
|
||||||
%array = alloca [8192 x i32]
|
%array = alloca [8192 x i32]
|
||||||
|
@ -99,7 +96,7 @@ entry:
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
|
||||||
; GCN-LABEL: @pos_vaddr_offse
|
; GCN-LABEL: {{^}}pos_vaddr_offset:
|
||||||
; GCN: buffer_store_dword v{{[0-9]+}}, v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], s{{[0-9]+}} offen offset:16
|
; GCN: buffer_store_dword v{{[0-9]+}}, v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], s{{[0-9]+}} offen offset:16
|
||||||
define void @pos_vaddr_offset(i32 addrspace(1)* %out, i32 %offset) {
|
define void @pos_vaddr_offset(i32 addrspace(1)* %out, i32 %offset) {
|
||||||
entry:
|
entry:
|
||||||
|
|
Loading…
Reference in New Issue