[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-amdgcn.fcmp.constants.w32.mir
blob49383135ab0c587f61523e261bf79308c93cabbc
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
3 # RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
5 ---
6 name: fcmp_false_f16
7 legalized: true
8 regBankSelected: true
9 tracksRegLiveness: true
11 body: |
12   bb.0:
13     liveins: $vgpr0, $vgpr1
14     ; GFX11-TRUE16-LABEL: name: fcmp_false_f16
15     ; GFX11-TRUE16: liveins: $vgpr0, $vgpr1
16     ; GFX11-TRUE16-NEXT: {{  $}}
17     ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
18     ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
19     ; GFX11-TRUE16-NEXT: [[V_CVT_F16_F32_t16_e64_:%[0-9]+]]:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, [[COPY]], 0, 0, 0, implicit $mode, implicit $exec
20     ; GFX11-TRUE16-NEXT: [[V_CVT_F16_F32_t16_e64_1:%[0-9]+]]:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, [[COPY1]], 0, 0, 0, implicit $mode, implicit $exec
21     ; GFX11-TRUE16-NEXT: [[V_CMP_F_F16_t16_e64_:%[0-9]+]]:sreg_32 = V_CMP_F_F16_t16_e64 0, [[V_CVT_F16_F32_t16_e64_]], 0, [[V_CVT_F16_F32_t16_e64_1]], 0, 0, implicit $mode, implicit $exec
22     ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[V_CMP_F_F16_t16_e64_]]
23     ;
24     ; GFX11-FAKE16-LABEL: name: fcmp_false_f16
25     ; GFX11-FAKE16: liveins: $vgpr0, $vgpr1
26     ; GFX11-FAKE16-NEXT: {{  $}}
27     ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
28     ; GFX11-FAKE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
29     ; GFX11-FAKE16-NEXT: [[V_CVT_F16_F32_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F16_F32_fake16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
30     ; GFX11-FAKE16-NEXT: [[V_CVT_F16_F32_fake16_e64_1:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F16_F32_fake16_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
31     ; GFX11-FAKE16-NEXT: [[V_CMP_F_F16_fake16_e64_:%[0-9]+]]:sreg_32 = V_CMP_F_F16_fake16_e64 0, [[V_CVT_F16_F32_fake16_e64_]], 0, [[V_CVT_F16_F32_fake16_e64_1]], 0, implicit $mode, implicit $exec
32     ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_CMP_F_F16_fake16_e64_]]
33     %0:vgpr(s32) = COPY $vgpr0
34     %1:vgpr(s32) = COPY $vgpr1
35     %2:vgpr(s16) = G_FPTRUNC %0
36     %3:vgpr(s16) = G_FPTRUNC %1
37     %4:sgpr(s32) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %2, %3, 0
38     S_ENDPGM 0, implicit %4
39 ...
41 ---
42 name: fcmp_true_f16
43 legalized: true
44 regBankSelected: true
45 tracksRegLiveness: true
47 body: |
48   bb.0:
49     liveins: $vgpr0, $vgpr1
50     ; GFX11-TRUE16-LABEL: name: fcmp_true_f16
51     ; GFX11-TRUE16: liveins: $vgpr0, $vgpr1
52     ; GFX11-TRUE16-NEXT: {{  $}}
53     ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
54     ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
55     ; GFX11-TRUE16-NEXT: [[V_CVT_F16_F32_t16_e64_:%[0-9]+]]:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, [[COPY]], 0, 0, 0, implicit $mode, implicit $exec
56     ; GFX11-TRUE16-NEXT: [[V_CVT_F16_F32_t16_e64_1:%[0-9]+]]:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, [[COPY1]], 0, 0, 0, implicit $mode, implicit $exec
57     ; GFX11-TRUE16-NEXT: [[V_CMP_TRU_F16_t16_e64_:%[0-9]+]]:sreg_32 = V_CMP_TRU_F16_t16_e64 0, [[V_CVT_F16_F32_t16_e64_]], 0, [[V_CVT_F16_F32_t16_e64_1]], 0, 0, implicit $mode, implicit $exec
58     ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[V_CMP_TRU_F16_t16_e64_]]
59     ;
60     ; GFX11-FAKE16-LABEL: name: fcmp_true_f16
61     ; GFX11-FAKE16: liveins: $vgpr0, $vgpr1
62     ; GFX11-FAKE16-NEXT: {{  $}}
63     ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
64     ; GFX11-FAKE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
65     ; GFX11-FAKE16-NEXT: [[V_CVT_F16_F32_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F16_F32_fake16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
66     ; GFX11-FAKE16-NEXT: [[V_CVT_F16_F32_fake16_e64_1:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F16_F32_fake16_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
67     ; GFX11-FAKE16-NEXT: [[V_CMP_TRU_F16_fake16_e64_:%[0-9]+]]:sreg_32 = V_CMP_TRU_F16_fake16_e64 0, [[V_CVT_F16_F32_fake16_e64_]], 0, [[V_CVT_F16_F32_fake16_e64_1]], 0, implicit $mode, implicit $exec
68     ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_CMP_TRU_F16_fake16_e64_]]
69     %0:vgpr(s32) = COPY $vgpr0
70     %1:vgpr(s32) = COPY $vgpr1
71     %2:vgpr(s16) = G_FPTRUNC %0
72     %3:vgpr(s16) = G_FPTRUNC %1
73     %4:sgpr(s32) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %2, %3, 15
74     S_ENDPGM 0, implicit %4
75 ...
77 ---
78 name: fcmp_false_f32
79 legalized: true
80 regBankSelected: true
81 tracksRegLiveness: true
83 body: |
84   bb.0:
85     liveins: $vgpr0, $vgpr1
86     ; GFX11-LABEL: name: fcmp_false_f32
87     ; GFX11: liveins: $vgpr0, $vgpr1
88     ; GFX11-NEXT: {{  $}}
89     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
90     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
91     ; GFX11-NEXT: [[V_CMP_F_F32_e64_:%[0-9]+]]:sreg_32 = V_CMP_F_F32_e64 0, [[COPY]], 0, [[COPY1]], 0, implicit $mode, implicit $exec
92     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_F_F32_e64_]]
93     %0:vgpr(s32) = COPY $vgpr0
94     %1:vgpr(s32) = COPY $vgpr1
95     %4:sgpr(s32) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %0, %1, 0
96     S_ENDPGM 0, implicit %4
97 ...
99 ---
100 name: fcmp_true_f32
101 legalized: true
102 regBankSelected: true
103 tracksRegLiveness: true
105 body: |
106   bb.0:
107     liveins: $vgpr0, $vgpr1
108     ; GFX11-LABEL: name: fcmp_true_f32
109     ; GFX11: liveins: $vgpr0, $vgpr1
110     ; GFX11-NEXT: {{  $}}
111     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
112     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
113     ; GFX11-NEXT: [[V_CMP_TRU_F32_e64_:%[0-9]+]]:sreg_32 = V_CMP_TRU_F32_e64 0, [[COPY]], 0, [[COPY1]], 0, implicit $mode, implicit $exec
114     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_TRU_F32_e64_]]
115     %0:vgpr(s32) = COPY $vgpr0
116     %1:vgpr(s32) = COPY $vgpr1
117     %4:sgpr(s32) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %0, %1, 15
118     S_ENDPGM 0, implicit %4
122 name: fcmp_false_f64
123 legalized: true
124 regBankSelected: true
125 tracksRegLiveness: true
127 body: |
128   bb.0:
129     liveins: $vgpr0, $vgpr1
130     ; GFX11-LABEL: name: fcmp_false_f64
131     ; GFX11: liveins: $vgpr0, $vgpr1
132     ; GFX11-NEXT: {{  $}}
133     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
134     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
135     ; GFX11-NEXT: [[V_CVT_F64_F32_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_CVT_F64_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
136     ; GFX11-NEXT: [[V_CVT_F64_F32_e64_1:%[0-9]+]]:vreg_64 = nofpexcept V_CVT_F64_F32_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
137     ; GFX11-NEXT: [[V_CMP_F_F64_e64_:%[0-9]+]]:sreg_32 = V_CMP_F_F64_e64 0, [[V_CVT_F64_F32_e64_]], 0, [[V_CVT_F64_F32_e64_1]], 0, implicit $mode, implicit $exec
138     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_F_F64_e64_]]
139     %0:vgpr(s32) = COPY $vgpr0
140     %1:vgpr(s32) = COPY $vgpr1
141     %2:vgpr(s64) = G_FPEXT %0
142     %3:vgpr(s64) = G_FPEXT %1
143     %4:sgpr(s32) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %2, %3, 0
144     S_ENDPGM 0, implicit %4
148 name: fcmp_true_f64
149 legalized: true
150 regBankSelected: true
151 tracksRegLiveness: true
153 body: |
154   bb.0:
155     liveins: $vgpr0, $vgpr1
156     ; GFX11-LABEL: name: fcmp_true_f64
157     ; GFX11: liveins: $vgpr0, $vgpr1
158     ; GFX11-NEXT: {{  $}}
159     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
160     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
161     ; GFX11-NEXT: [[V_CVT_F64_F32_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_CVT_F64_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
162     ; GFX11-NEXT: [[V_CVT_F64_F32_e64_1:%[0-9]+]]:vreg_64 = nofpexcept V_CVT_F64_F32_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
163     ; GFX11-NEXT: [[V_CMP_TRU_F64_e64_:%[0-9]+]]:sreg_32 = V_CMP_TRU_F64_e64 0, [[V_CVT_F64_F32_e64_]], 0, [[V_CVT_F64_F32_e64_1]], 0, implicit $mode, implicit $exec
164     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_TRU_F64_e64_]]
165     %0:vgpr(s32) = COPY $vgpr0
166     %1:vgpr(s32) = COPY $vgpr1
167     %2:vgpr(s64) = G_FPEXT %0
168     %3:vgpr(s64) = G_FPEXT %1
169     %4:sgpr(s32) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %2, %3, 15
170     S_ENDPGM 0, implicit %4