1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
8 tracksRegLiveness: true
13 ; CHECK-LABEL: name: v_s_exp_f32
14 ; CHECK: liveins: $sgpr0
16 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
17 ; CHECK-NEXT: [[V_S_EXP_F32_e64_:%[0-9]+]]:sreg_32_xexec = nofpexcept V_S_EXP_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
18 ; CHECK-NEXT: $vgpr0 = COPY [[V_S_EXP_F32_e64_]]
19 %0:sgpr(s32) = COPY $sgpr0
20 %1:sgpr(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.exp2), %0
28 tracksRegLiveness: true
33 ; CHECK-LABEL: name: v_s_exp_f16
34 ; CHECK: liveins: $sgpr0
36 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
37 ; CHECK-NEXT: [[V_S_EXP_F16_e64_:%[0-9]+]]:sreg_32_xexec = nofpexcept V_S_EXP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
38 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[V_S_EXP_F16_e64_]]
39 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]]
40 %0:sgpr(s32) = COPY $sgpr0
41 %1:sgpr(s16) = G_TRUNC %0(s32)
42 %2:sgpr(s16) = G_INTRINSIC intrinsic(@llvm.amdgcn.exp2), %1
43 %3:sgpr(s32) = G_ANYEXT %2(s16)
51 tracksRegLiveness: true
56 ; CHECK-LABEL: name: v_s_log_f32
57 ; CHECK: liveins: $sgpr0
59 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
60 ; CHECK-NEXT: [[V_S_LOG_F32_e64_:%[0-9]+]]:sreg_32_xexec = nofpexcept V_S_LOG_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
61 ; CHECK-NEXT: $vgpr0 = COPY [[V_S_LOG_F32_e64_]]
62 %0:sgpr(s32) = COPY $sgpr0
63 %1:sgpr(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.log), %0
71 tracksRegLiveness: true
76 ; CHECK-LABEL: name: v_s_log_f16
77 ; CHECK: liveins: $sgpr0
79 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
80 ; CHECK-NEXT: [[V_S_LOG_F16_e64_:%[0-9]+]]:sreg_32_xexec = nofpexcept V_S_LOG_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
81 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[V_S_LOG_F16_e64_]]
82 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]]
83 %0:sgpr(s32) = COPY $sgpr0
84 %1:sgpr(s16) = G_TRUNC %0(s32)
85 %2:sgpr(s16) = G_INTRINSIC intrinsic(@llvm.amdgcn.log), %1
86 %3:sgpr(s32) = G_ANYEXT %2(s16)
94 tracksRegLiveness: true
99 ; CHECK-LABEL: name: v_s_rcp_f32
100 ; CHECK: liveins: $sgpr0
102 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
103 ; CHECK-NEXT: [[V_S_RCP_F32_e64_:%[0-9]+]]:sreg_32_xexec = nnan ninf nsz arcp contract afn reassoc nofpexcept V_S_RCP_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
104 ; CHECK-NEXT: $vgpr0 = COPY [[V_S_RCP_F32_e64_]]
105 %0:sgpr(s32) = COPY $sgpr0
106 %1:sgpr(s32) = nnan ninf nsz arcp contract afn reassoc G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %0(s32)
107 $vgpr0 = COPY %1(s32)
113 regBankSelected: true
114 tracksRegLiveness: true
119 ; CHECK-LABEL: name: v_s_rcp_f16
120 ; CHECK: liveins: $sgpr0
122 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
123 ; CHECK-NEXT: [[V_S_RCP_F16_e64_:%[0-9]+]]:sreg_32_xexec = nnan ninf nsz arcp contract afn reassoc nofpexcept V_S_RCP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
124 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[V_S_RCP_F16_e64_]]
125 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]]
126 %0:sgpr(s32) = COPY $sgpr0
127 %1:sgpr(s16) = G_TRUNC %0(s32)
128 %2:sgpr(s16) = nnan ninf nsz arcp contract afn reassoc G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %1(s16)
129 %3:sgpr(s32) = G_ANYEXT %2(s16)
130 $vgpr0 = COPY %3(s32)
136 regBankSelected: true
137 tracksRegLiveness: true
142 ; CHECK-LABEL: name: v_s_rsq_f32
143 ; CHECK: liveins: $sgpr0
145 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
146 ; CHECK-NEXT: [[V_S_RSQ_F32_e64_:%[0-9]+]]:sreg_32_xexec = nofpexcept V_S_RSQ_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
147 ; CHECK-NEXT: $vgpr0 = COPY [[V_S_RSQ_F32_e64_]]
148 %0:sgpr(s32) = COPY $sgpr0
149 %1:sgpr(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), %0(s32)
150 $vgpr0 = COPY %1(s32)
156 regBankSelected: true
157 tracksRegLiveness: true
162 ; CHECK-LABEL: name: v_s_rsq_f16
163 ; CHECK: liveins: $sgpr0
165 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
166 ; CHECK-NEXT: [[V_S_RSQ_F16_e64_:%[0-9]+]]:sreg_32_xexec = nofpexcept V_S_RSQ_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
167 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[V_S_RSQ_F16_e64_]]
168 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]]
169 %0:sgpr(s32) = COPY $sgpr0
170 %1:sgpr(s16) = G_TRUNC %0(s32)
171 %2:sgpr(s16) = G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), %1(s16)
172 %3:sgpr(s32) = G_ANYEXT %2(s16)
173 $vgpr0 = COPY %3(s32)
179 regBankSelected: true
180 tracksRegLiveness: true
185 ; CHECK-LABEL: name: v_s_sqrt_f32
186 ; CHECK: liveins: $sgpr0
188 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
189 ; CHECK-NEXT: [[V_S_SQRT_F32_e64_:%[0-9]+]]:sreg_32_xexec = nofpexcept V_S_SQRT_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
190 ; CHECK-NEXT: $vgpr0 = COPY [[V_S_SQRT_F32_e64_]]
191 %0:sgpr(s32) = COPY $sgpr0
192 %1:sgpr(s32) = G_FSQRT %0
193 $vgpr0 = COPY %1(s32)
199 regBankSelected: true
200 tracksRegLiveness: true
205 ; CHECK-LABEL: name: v_s_sqrt_f16
206 ; CHECK: liveins: $sgpr0
208 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
209 ; CHECK-NEXT: [[V_S_SQRT_F16_e64_:%[0-9]+]]:sreg_32_xexec = nofpexcept V_S_SQRT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
210 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[V_S_SQRT_F16_e64_]]
211 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]]
212 %0:sgpr(s32) = COPY $sgpr0
213 %1:sgpr(s16) = G_TRUNC %0(s32)
214 %2:sgpr(s16) = G_FSQRT %1
215 %3:sgpr(s32) = G_ANYEXT %2(s16)
216 $vgpr0 = COPY %3(s32)
220 name: v_amdgcn_sqrt_f32
222 regBankSelected: true
223 tracksRegLiveness: true
228 ; CHECK-LABEL: name: v_amdgcn_sqrt_f32
229 ; CHECK: liveins: $sgpr0
231 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
232 ; CHECK-NEXT: [[V_S_SQRT_F32_e64_:%[0-9]+]]:sreg_32_xexec = nofpexcept V_S_SQRT_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
233 ; CHECK-NEXT: $vgpr0 = COPY [[V_S_SQRT_F32_e64_]]
234 %0:sgpr(s32) = COPY $sgpr0
235 %1:sgpr(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.sqrt), %0(s32)
236 $vgpr0 = COPY %1(s32)
240 name: v_amdgcn_sqrt_f16
242 regBankSelected: true
243 tracksRegLiveness: true
248 ; CHECK-LABEL: name: v_amdgcn_sqrt_f16
249 ; CHECK: liveins: $sgpr0
251 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
252 ; CHECK-NEXT: [[V_S_SQRT_F16_e64_:%[0-9]+]]:sreg_32_xexec = nofpexcept V_S_SQRT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
253 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[V_S_SQRT_F16_e64_]]
254 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]]
255 %0:sgpr(s32) = COPY $sgpr0
256 %1:sgpr(s16) = G_TRUNC %0(s32)
257 %2:sgpr(s16) = G_INTRINSIC intrinsic(@llvm.amdgcn.sqrt), %1(s16)
258 %3:sgpr(s32) = G_ANYEXT %2(s16)
259 $vgpr0 = COPY %3(s32)