xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-pattern-or3.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -o - %s  | FileCheck -check-prefix=GFX8 %s
3# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -o - %s  | FileCheck -check-prefix=GFX9 %s
4# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -o - %s  | FileCheck -check-prefix=GFX9 %s
5# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -o - %s  | FileCheck -check-prefix=GFX9 %s
6
7---
8
9name:            or_s32_sgpr_sgpr_sgpr
10legalized:       true
11regBankSelected: true
12tracksRegLiveness: true
13
14body: |
15  bb.0:
16    liveins: $sgpr0, $sgpr1, $sgpr2
17    ; GFX8-LABEL: name: or_s32_sgpr_sgpr_sgpr
18    ; GFX8: liveins: $sgpr0, $sgpr1, $sgpr2
19    ; GFX8-NEXT: {{  $}}
20    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
21    ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
22    ; GFX8-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2
23    ; GFX8-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc
24    ; GFX8-NEXT: [[S_OR_B32_1:%[0-9]+]]:sreg_32 = S_OR_B32 [[S_OR_B32_]], [[COPY2]], implicit-def dead $scc
25    ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_OR_B32_1]]
26    ;
27    ; GFX9-LABEL: name: or_s32_sgpr_sgpr_sgpr
28    ; GFX9: liveins: $sgpr0, $sgpr1, $sgpr2
29    ; GFX9-NEXT: {{  $}}
30    ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
31    ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
32    ; GFX9-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2
33    ; GFX9-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc
34    ; GFX9-NEXT: [[S_OR_B32_1:%[0-9]+]]:sreg_32 = S_OR_B32 [[S_OR_B32_]], [[COPY2]], implicit-def dead $scc
35    ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_OR_B32_1]]
36    %0:sgpr(s32) = COPY $sgpr0
37    %1:sgpr(s32) = COPY $sgpr1
38    %2:sgpr(s32) = COPY $sgpr2
39    %3:sgpr(s32) = G_OR %0, %1
40    %4:sgpr(s32) = G_OR %3, %2
41    S_ENDPGM 0, implicit %4
42...
43
44---
45
46name:            or_s32_vgpr_vgpr_vgpr
47legalized:       true
48regBankSelected: true
49tracksRegLiveness: true
50
51body: |
52  bb.0:
53    liveins: $vgpr0, $vgpr1, $vgpr2
54    ; GFX8-LABEL: name: or_s32_vgpr_vgpr_vgpr
55    ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2
56    ; GFX8-NEXT: {{  $}}
57    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
58    ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
59    ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
60    ; GFX8-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[COPY]], [[COPY1]], implicit $exec
61    ; GFX8-NEXT: [[V_OR_B32_e64_1:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[V_OR_B32_e64_]], [[COPY2]], implicit $exec
62    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_OR_B32_e64_1]]
63    ;
64    ; GFX9-LABEL: name: or_s32_vgpr_vgpr_vgpr
65    ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2
66    ; GFX9-NEXT: {{  $}}
67    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
68    ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
69    ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
70    ; GFX9-NEXT: [[V_OR3_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR3_B32_e64 [[COPY]], [[COPY1]], [[COPY2]], implicit $exec
71    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_OR3_B32_e64_]]
72    %0:vgpr(s32) = COPY $vgpr0
73    %1:vgpr(s32) = COPY $vgpr1
74    %2:vgpr(s32) = COPY $vgpr2
75    %3:vgpr(s32) = G_OR %0, %1
76    %4:vgpr(s32) = G_OR %3, %2
77    S_ENDPGM 0, implicit %4
78...
79
80---
81
82name:            or_s32_vgpr_vgpr_vgpr_multi_use
83legalized:       true
84regBankSelected: true
85tracksRegLiveness: true
86
87body: |
88  bb.0:
89    liveins: $vgpr0, $vgpr1, $vgpr2
90    ; GFX8-LABEL: name: or_s32_vgpr_vgpr_vgpr_multi_use
91    ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2
92    ; GFX8-NEXT: {{  $}}
93    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
94    ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
95    ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
96    ; GFX8-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[COPY]], [[COPY1]], implicit $exec
97    ; GFX8-NEXT: [[V_OR_B32_e64_1:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[V_OR_B32_e64_]], [[COPY2]], implicit $exec
98    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_OR_B32_e64_1]], implicit [[V_OR_B32_e64_]]
99    ;
100    ; GFX9-LABEL: name: or_s32_vgpr_vgpr_vgpr_multi_use
101    ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2
102    ; GFX9-NEXT: {{  $}}
103    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
104    ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
105    ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
106    ; GFX9-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[COPY]], [[COPY1]], implicit $exec
107    ; GFX9-NEXT: [[V_OR_B32_e64_1:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[V_OR_B32_e64_]], [[COPY2]], implicit $exec
108    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_OR_B32_e64_1]], implicit [[V_OR_B32_e64_]]
109    %0:vgpr(s32) = COPY $vgpr0
110    %1:vgpr(s32) = COPY $vgpr1
111    %2:vgpr(s32) = COPY $vgpr2
112    %3:vgpr(s32) = G_OR %0, %1
113    %4:vgpr(s32) = G_OR %3, %2
114    S_ENDPGM 0, implicit %4, implicit %3
115...
116
117