[llvm] r263720 - AMDGPU/SI: Do not generate s_waitcnt after ds_permute/ds_bpermute
Changpeng Fang via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 17 09:43:50 PDT 2016
Author: chfang
Date: Thu Mar 17 11:43:50 2016
New Revision: 263720
URL: http://llvm.org/viewvc/llvm-project?rev=263720&view=rev
Log:
AMDGPU/SI: Do not generate s_waitcnt after ds_permute/ds_bpermute
Symmary:
ds_permute/ds_bpermute do not read memory so s_waitcnt is not needed.
Reviewers
arsenm, tstellarAMD
Subscribers
llvm-commits, arsenm
Differential Revision:
http://reviews.llvm.org/D18197
Modified:
llvm/trunk/lib/Target/AMDGPU/SIInstrInfo.td
llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.ds.bpermute.ll
llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.ds.permute.ll
Modified: llvm/trunk/lib/Target/AMDGPU/SIInstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/SIInstrInfo.td?rev=263720&r1=263719&r2=263720&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/SIInstrInfo.td (original)
+++ llvm/trunk/lib/Target/AMDGPU/SIInstrInfo.td Thu Mar 17 11:43:50 2016
@@ -2519,7 +2519,7 @@ multiclass DS_1A1D_PERMUTE <bits<8> op,
dag ins = (ins VGPR_32:$addr, rc:$data0),
string asm = opName#" $vdst, $addr, $data0"> {
- let mayLoad = 0, mayStore = 0, isConvergent = 1 in {
+ let LGKM_CNT = 0, mayLoad = 0, mayStore = 0, isConvergent = 1 in {
def "" : DS_Pseudo <opName, outs, ins,
[(set (i32 rc:$vdst),
(node (i32 VGPR_32:$addr), (i32 rc:$data0)))]>;
Modified: llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.ds.bpermute.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.ds.bpermute.ll?rev=263720&r1=263719&r2=263720&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.ds.bpermute.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.ds.bpermute.ll Thu Mar 17 11:43:50 2016
@@ -10,4 +10,28 @@ define void @ds_bpermute(i32 addrspace(1
ret void
}
+; FUNC-LABEL: {{^}}bpermute_no_waitcnt_test:
+; CHECK: s_cbranch_scc1
+; CHECK: ds_bpermute_b32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+; CHECK-NOT: s_waitcnt
+define void @bpermute_no_waitcnt_test(i32 addrspace(1)* %out, i32 %cond) {
+entry:
+
+ %tmp = icmp eq i32 %cond, 0
+ br i1 %tmp, label %if, label %else
+
+if: ; preds = %entry
+
+ %bpermute = call i32 @llvm.amdgcn.ds.bpermute(i32 0, i32 0) #0
+ br label %endif
+
+else: ; preds = %entry
+ br label %endif
+
+endif:
+ %val = phi i32 [ %bpermute, %if ], [0, %else] ; preds = %else, %if
+ store i32 %val, i32 addrspace(1)* %out, align 4
+ ret void
+}
+
attributes #0 = { nounwind readnone convergent }
Modified: llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.ds.permute.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.ds.permute.ll?rev=263720&r1=263719&r2=263720&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.ds.permute.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.ds.permute.ll Thu Mar 17 11:43:50 2016
@@ -5,9 +5,33 @@ declare i32 @llvm.amdgcn.ds.permute(i32,
; FUNC-LABEL: {{^}}ds_permute:
; CHECK: ds_permute_b32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
define void @ds_permute(i32 addrspace(1)* %out, i32 %index, i32 %src) nounwind {
- %bpermute = call i32 @llvm.amdgcn.ds.permute(i32 %index, i32 %src) #0
- store i32 %bpermute, i32 addrspace(1)* %out, align 4
+ %permute = call i32 @llvm.amdgcn.ds.permute(i32 %index, i32 %src) #0
+ store i32 %permute, i32 addrspace(1)* %out, align 4
ret void
}
+; FUNC-LABEL: {{^}}permute_no_waitcnt_test:
+; CHECK: s_cbranch_scc1
+; CHECK: ds_permute_b32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+; CHECK-NOT: s_waitcnt
+define void @permute_no_waitcnt_test(i32 addrspace(1)* %out, i32 %cond) {
+entry:
+
+ %tmp = icmp eq i32 %cond, 0
+ br i1 %tmp, label %if, label %else
+
+if: ; preds = %entry
+ %permute = call i32 @llvm.amdgcn.ds.permute(i32 0, i32 0) #0
+ br label %endif
+
+else: ; preds = %entry
+ br label %endif
+
+endif:
+ %val = phi i32 [ %permute, %if ], [0, %else] ; preds = %else, %if
+ store i32 %val, i32 addrspace(1)* %out, align 4
+ ret void
+}
+
+
attributes #0 = { nounwind readnone convergent }
More information about the llvm-commits
mailing list