summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorStanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com>2017-08-01 23:44:35 +0000
committerStanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com>2017-08-01 23:44:35 +0000
commitda0edef1bd7b2526faebdaa1aa9924a70f91aa66 (patch)
tree5f8d87c2f8dfd248106ceb6e5e4f20ba62229eac /llvm/test
parent4f345060dd2ca75316b8b657d02c2129ab85d1a3 (diff)
downloadbcm5719-llvm-da0edef1bd7b2526faebdaa1aa9924a70f91aa66.tar.gz
bcm5719-llvm-da0edef1bd7b2526faebdaa1aa9924a70f91aa66.zip
[AMDGPU] Turn s_and_saveexec_b64 into s_and_b64 if result is unused
With SI_END_CF elimination for some nested control flow we can now eliminate saved exec register completely by turning a saveexec version of instruction into just a logical instruction. Differential Revision: https://reviews.llvm.org/D36007 llvm-svn: 309766
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/AMDGPU/collapse-endcf.ll2
-rw-r--r--llvm/test/CodeGen/AMDGPU/reduce-saveexec.mir147
2 files changed, 148 insertions, 1 deletions
diff --git a/llvm/test/CodeGen/AMDGPU/collapse-endcf.ll b/llvm/test/CodeGen/AMDGPU/collapse-endcf.ll
index 6316df79546..f4199d41221 100644
--- a/llvm/test/CodeGen/AMDGPU/collapse-endcf.ll
+++ b/llvm/test/CodeGen/AMDGPU/collapse-endcf.ll
@@ -4,7 +4,7 @@
; GCN: s_and_saveexec_b64 [[SAVEEXEC:s\[[0-9:]+\]]]
; GCN-NEXT: ; mask branch [[ENDIF:BB[0-9_]+]]
; GCN-NEXT: s_cbranch_execz [[ENDIF]]
-; GCN: s_and_saveexec_b64
+; GCN: s_and_b64 exec, exec, vcc
; GCN-NEXT: ; mask branch [[ENDIF]]
; GCN-NEXT: {{^BB[0-9_]+}}:
; GCN: store_dword
diff --git a/llvm/test/CodeGen/AMDGPU/reduce-saveexec.mir b/llvm/test/CodeGen/AMDGPU/reduce-saveexec.mir
new file mode 100644
index 00000000000..6f6b0deb2b9
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/reduce-saveexec.mir
@@ -0,0 +1,147 @@
+# RUN: llc -march=amdgcn -verify-machineinstrs -run-pass si-optimize-exec-masking %s -o - | FileCheck -check-prefix=GCN %s
+
+---
+# GCN-LABEL: name: reduce_and_saveexec
+# GCN: %exec = S_AND_B64 %exec, killed %vcc
+# GCN-NEXT: S_ENDPGM
+name: reduce_and_saveexec
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %vcc = IMPLICIT_DEF
+ %sgpr0_sgpr1 = S_AND_B64 %exec, killed %vcc, implicit-def %scc
+ %exec = COPY killed %sgpr0_sgpr1
+ S_ENDPGM
+...
+---
+# GCN-LABEL: name: reduce_and_saveexec_commuted
+# GCN: %exec = S_AND_B64 killed %vcc, %exec
+# GCN-NEXT: S_ENDPGM
+name: reduce_and_saveexec_commuted
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %vcc = IMPLICIT_DEF
+ %sgpr0_sgpr1 = S_AND_B64 killed %vcc, %exec, implicit-def %scc
+ %exec = COPY killed %sgpr0_sgpr1
+ S_ENDPGM
+...
+---
+# GCN-LABEL: name: reduce_and_saveexec_liveout
+# GCN: %sgpr0_sgpr1 = S_AND_B64 %exec, killed %vcc
+# GCN-NEXT: %exec = COPY
+name: reduce_and_saveexec_liveout
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %vcc = IMPLICIT_DEF
+ %sgpr0_sgpr1 = S_AND_B64 %exec, killed %vcc, implicit-def %scc
+ %exec = COPY %sgpr0_sgpr1
+ S_ENDPGM
+...
+---
+# GCN-LABEL: name: and_saveexec
+# GCN: %sgpr0_sgpr1 = S_AND_SAVEEXEC_B64 %vcc
+# GCN-NEXT: S_ENDPGM
+name: and_saveexec
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %vcc = IMPLICIT_DEF
+ %sgpr0_sgpr1 = COPY %exec
+ %sgpr2_sgpr3 = S_AND_B64 %sgpr0_sgpr1, killed %vcc, implicit-def %scc
+ %exec = S_MOV_B64_term %sgpr2_sgpr3
+ S_ENDPGM
+...
+---
+# GCN-LABEL: name: reduce_or_saveexec
+# GCN: %exec = S_OR_B64 %exec, killed %vcc
+# GCN-NEXT: S_ENDPGM
+name: reduce_or_saveexec
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %vcc = IMPLICIT_DEF
+ %sgpr0_sgpr1 = S_OR_B64 %exec, killed %vcc, implicit-def %scc
+ %exec = COPY killed %sgpr0_sgpr1
+ S_ENDPGM
+...
+---
+# GCN-LABEL: name: reduce_xor_saveexec
+# GCN: %exec = S_XOR_B64 %exec, killed %vcc
+# GCN-NEXT: S_ENDPGM
+name: reduce_xor_saveexec
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %vcc = IMPLICIT_DEF
+ %sgpr0_sgpr1 = S_XOR_B64 %exec, killed %vcc, implicit-def %scc
+ %exec = COPY killed %sgpr0_sgpr1
+ S_ENDPGM
+...
+---
+# GCN-LABEL: name: reduce_andn2_saveexec
+# GCN: %exec = S_ANDN2_B64 %exec, killed %vcc
+# GCN-NEXT: S_ENDPGM
+name: reduce_andn2_saveexec
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %vcc = IMPLICIT_DEF
+ %sgpr0_sgpr1 = S_ANDN2_B64 %exec, killed %vcc, implicit-def %scc
+ %exec = COPY killed %sgpr0_sgpr1
+ S_ENDPGM
+...
+---
+# GCN-LABEL: name: reduce_orn2_saveexec
+# GCN: %exec = S_ORN2_B64 %exec, killed %vcc
+# GCN-NEXT: S_ENDPGM
+name: reduce_orn2_saveexec
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %vcc = IMPLICIT_DEF
+ %sgpr0_sgpr1 = S_ORN2_B64 %exec, killed %vcc, implicit-def %scc
+ %exec = COPY killed %sgpr0_sgpr1
+ S_ENDPGM
+...
+---
+# GCN-LABEL: name: reduce_nand_saveexec
+# GCN: %exec = S_NAND_B64 %exec, killed %vcc
+# GCN-NEXT: S_ENDPGM
+name: reduce_nand_saveexec
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %vcc = IMPLICIT_DEF
+ %sgpr0_sgpr1 = S_NAND_B64 %exec, killed %vcc, implicit-def %scc
+ %exec = COPY killed %sgpr0_sgpr1
+ S_ENDPGM
+...
+---
+# GCN-LABEL: name: reduce_nor_saveexec
+# GCN: %exec = S_NOR_B64 %exec, killed %vcc
+# GCN-NEXT: S_ENDPGM
+name: reduce_nor_saveexec
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %vcc = IMPLICIT_DEF
+ %sgpr0_sgpr1 = S_NOR_B64 %exec, killed %vcc, implicit-def %scc
+ %exec = COPY killed %sgpr0_sgpr1
+ S_ENDPGM
+...
+---
+# GCN-LABEL: name: reduce_xnor_saveexec
+# GCN: %exec = S_XNOR_B64 %exec, killed %vcc
+# GCN-NEXT: S_ENDPGM
+name: reduce_xnor_saveexec
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %vcc = IMPLICIT_DEF
+ %sgpr0_sgpr1 = S_XNOR_B64 %exec, killed %vcc, implicit-def %scc
+ %exec = COPY killed %sgpr0_sgpr1
+ S_ENDPGM
+...
+---
OpenPOWER on IntegriCloud