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 %s -check-prefixes=GCN 3 4--- 5 6name: fmul_f32 7legalized: true 8regBankSelected: true 9 10body: | 11 bb.0: 12 liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr3_vgpr4 13 ; GCN-LABEL: name: fmul_f32 14 ; GCN: liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr3_vgpr4 15 ; GCN-NEXT: {{ $}} 16 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 17 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 18 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1 19 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4 20 ; GCN-NEXT: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 21 ; GCN-NEXT: [[V_MUL_F32_e64_1:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 22 ; GCN-NEXT: [[V_MUL_F32_e64_2:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec 23 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY3]], [[V_MUL_F32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 24 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY3]], [[V_MUL_F32_e64_1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 25 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY3]], [[V_MUL_F32_e64_2]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 26 %0:sgpr(s32) = COPY $sgpr0 27 %1:vgpr(s32) = COPY $vgpr0 28 %2:vgpr(s32) = COPY $vgpr1 29 %3:vgpr(p1) = COPY $vgpr3_vgpr4 30 31 %4:vgpr(s32) = G_FMUL %1, %0 32 33 %5:vgpr(s32) = G_FMUL %0, %1 34 35 %6:vgpr(s32) = G_FMUL %1, %2 36 37 G_STORE %4, %3 :: (store (s32), addrspace 1) 38 G_STORE %5, %3 :: (store (s32), addrspace 1) 39 G_STORE %6, %3 :: (store (s32), addrspace 1) 40... 41 42--- 43 44name: fmul_f64 45legalized: true 46regBankSelected: true 47 48body: | 49 bb.0: 50 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5 51 ; GCN-LABEL: name: fmul_f64 52 ; GCN: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5 53 ; GCN-NEXT: {{ $}} 54 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 55 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 56 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 57 ; GCN-NEXT: [[V_MUL_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_MUL_F64_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 58 ; GCN-NEXT: [[V_MUL_F64_e64_1:%[0-9]+]]:vreg_64 = nofpexcept V_MUL_F64_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 59 ; GCN-NEXT: [[V_MUL_F64_e64_2:%[0-9]+]]:vreg_64 = nofpexcept V_MUL_F64_e64 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec 60 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_MUL_F64_e64_]], implicit [[V_MUL_F64_e64_1]], implicit [[V_MUL_F64_e64_2]] 61 %0:sgpr(s64) = COPY $sgpr0_sgpr1 62 %1:vgpr(s64) = COPY $vgpr0_vgpr1 63 %2:vgpr(s64) = COPY $vgpr2_vgpr3 64 %3:vgpr(p1) = COPY $vgpr4_vgpr5 65 66 %4:vgpr(s64) = G_FMUL %1, %0 67 68 %5:vgpr(s64) = G_FMUL %0, %1 69 70 %6:vgpr(s64) = G_FMUL %1, %2 71 S_ENDPGM 0, implicit %4, implicit %5, implicit %6 72 73... 74 75--- 76 77name: fmul_f16 78legalized: true 79regBankSelected: true 80 81body: | 82 bb.0: 83 liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr3_vgpr4 84 ; GCN-LABEL: name: fmul_f16 85 ; GCN: liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr3_vgpr4 86 ; GCN-NEXT: {{ $}} 87 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 88 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 89 ; GCN-NEXT: [[V_MUL_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 90 ; GCN-NEXT: [[V_MUL_F16_e64_1:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 91 ; GCN-NEXT: [[V_MUL_F16_e64_2:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 92 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_MUL_F16_e64_]], implicit [[V_MUL_F16_e64_1]], implicit [[V_MUL_F16_e64_2]] 93 %0:sgpr(s32) = COPY $sgpr0 94 %1:vgpr(s32) = COPY $vgpr0 95 %2:vgpr(s32) = COPY $vgpr1 96 %3:vgpr(p1) = COPY $vgpr3_vgpr4 97 98 %4:sgpr(s16) = G_TRUNC %0 99 %5:vgpr(s16) = G_TRUNC %1 100 %6:vgpr(s16) = G_TRUNC %2 101 102 %8:vgpr(s16) = G_FMUL %4, %4 103 104 %9:vgpr(s16) = G_FMUL %4, %4 105 106 %10:vgpr(s16) = G_FMUL %4, %5 107 108 S_ENDPGM 0, implicit %8, implicit %9, implicit %10 109... 110 111--- 112 113name: fmul_modifiers_f32 114legalized: true 115regBankSelected: true 116 117body: | 118 bb.0: 119 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3 120 ; GCN-LABEL: name: fmul_modifiers_f32 121 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3 122 ; GCN-NEXT: {{ $}} 123 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 124 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 125 ; GCN-NEXT: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 2, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 126 ; GCN-NEXT: [[V_MUL_F32_e64_1:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec 127 ; GCN-NEXT: [[V_MUL_F32_e64_2:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec 128 ; GCN-NEXT: [[V_MUL_F32_e64_3:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 1, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 129 ; GCN-NEXT: [[V_MUL_F32_e64_4:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec 130 ; GCN-NEXT: [[V_MUL_F32_e64_5:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec 131 ; GCN-NEXT: [[V_MUL_F32_e64_6:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 3, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 132 ; GCN-NEXT: [[V_MUL_F32_e64_7:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY]], 3, [[COPY]], 0, 0, implicit $mode, implicit $exec 133 ; GCN-NEXT: [[V_MUL_F32_e64_8:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 3, [[COPY]], 3, [[COPY]], 0, 0, implicit $mode, implicit $exec 134 ; GCN-NEXT: [[V_MUL_F32_e64_9:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 3, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec 135 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY1]], [[V_MUL_F32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 136 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY1]], [[V_MUL_F32_e64_1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 137 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY1]], [[V_MUL_F32_e64_2]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 138 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY1]], [[V_MUL_F32_e64_3]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 139 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY1]], [[V_MUL_F32_e64_4]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 140 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY1]], [[V_MUL_F32_e64_5]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 141 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY1]], [[V_MUL_F32_e64_6]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 142 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY1]], [[V_MUL_F32_e64_7]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 143 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY1]], [[V_MUL_F32_e64_8]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 144 ; GCN-NEXT: FLAT_STORE_DWORD [[COPY1]], [[V_MUL_F32_e64_9]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 145 %0:vgpr(s32) = COPY $vgpr0 146 %1:vgpr(s32) = COPY $vgpr1 147 %2:vgpr(p1) = COPY $vgpr2_vgpr3 148 149 %3:vgpr(s32) = G_FABS %0 150 %4:vgpr(s32) = G_FNEG %0 151 %5:vgpr(s32) = G_FNEG %3 152 153 %6:vgpr(s32) = G_FMUL %3, %0 154 155 %7:vgpr(s32) = G_FMUL %0, %3 156 157 %8:vgpr(s32) = G_FMUL %3, %3 158 159 160 %9:vgpr(s32) = G_FMUL %4, %0 161 162 %10:vgpr(s32) = G_FMUL %0, %4 163 164 %11:vgpr(s32) = G_FMUL %4, %4 165 166 167 %12:vgpr(s32) = G_FMUL %5, %0 168 169 %13:vgpr(s32) = G_FMUL %0, %5 170 171 %14:vgpr(s32) = G_FMUL %5, %5 172 173 174 %15:vgpr(s32) = G_FMUL %5, %4 175 176 G_STORE %6, %2 :: (store (s32), addrspace 1) 177 G_STORE %7, %2 :: (store (s32), addrspace 1) 178 G_STORE %8, %2 :: (store (s32), addrspace 1) 179 G_STORE %9, %2 :: (store (s32), addrspace 1) 180 G_STORE %10, %2 :: (store (s32), addrspace 1) 181 G_STORE %11, %2 :: (store (s32), addrspace 1) 182 G_STORE %12, %2 :: (store (s32), addrspace 1) 183 G_STORE %13, %2 :: (store (s32), addrspace 1) 184 G_STORE %14, %2 :: (store (s32), addrspace 1) 185 G_STORE %15, %2 :: (store (s32), addrspace 1) 186 187... 188 189--- 190name: fmul_to_ldexp_f32 191legalized: true 192regBankSelected: true 193body: | 194 bb.0: 195 liveins: $vgpr0 196 197 ; GCN-LABEL: name: fmul_to_ldexp_f32 198 ; GCN: liveins: $vgpr0 199 ; GCN-NEXT: {{ $}} 200 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 201 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1098907648, implicit $exec 202 ; GCN-NEXT: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY]], 0, [[V_MOV_B32_e32_]], 0, 0, implicit $mode, implicit $exec 203 ; GCN-NEXT: $vgpr0 = COPY [[V_MUL_F32_e64_]] 204 ; GCN-NEXT: SI_RETURN implicit $vgpr0 205 %0:vgpr(s32) = COPY $vgpr0 206 %1:vgpr(s32) = G_FCONSTANT float 1.600000e+01 207 %2:vgpr(s32) = G_FMUL %0, %1 208 $vgpr0 = COPY %2 209 SI_RETURN implicit $vgpr0 210 211... 212 213--- 214name: fmul_to_ldexp_f64_0 215legalized: true 216regBankSelected: true 217body: | 218 bb.0: 219 liveins: $vgpr0_vgpr1 220 221 ; GCN-LABEL: name: fmul_to_ldexp_f64_0 222 ; GCN: liveins: $vgpr0_vgpr1 223 ; GCN-NEXT: {{ $}} 224 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 225 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4 226 ; GCN-NEXT: [[V_LDEXP_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_LDEXP_F64_e64 0, [[COPY]], 0, [[S_MOV_B32_]], 0, 0, implicit $mode, implicit $exec 227 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[V_LDEXP_F64_e64_]] 228 ; GCN-NEXT: SI_RETURN implicit $vgpr0_vgpr1 229 %0:vgpr(s64) = COPY $vgpr0_vgpr1 230 %1:vgpr(s64) = G_FCONSTANT double 1.600000e+01 231 %2:vgpr(s64) = G_FMUL %0, %1 232 $vgpr0_vgpr1 = COPY %2 233 SI_RETURN implicit $vgpr0_vgpr1 234 235... 236 237--- 238name: fmul_to_ldexp_f64_1 239legalized: true 240regBankSelected: true 241body: | 242 bb.0: 243 liveins: $vgpr0_vgpr1 244 245 ; GCN-LABEL: name: fmul_to_ldexp_f64_1 246 ; GCN: liveins: $vgpr0_vgpr1 247 ; GCN-NEXT: {{ $}} 248 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 249 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65 250 ; GCN-NEXT: [[V_LDEXP_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_LDEXP_F64_e64 0, [[COPY]], 0, [[S_MOV_B32_]], 0, 0, implicit $mode, implicit $exec 251 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[V_LDEXP_F64_e64_]] 252 ; GCN-NEXT: SI_RETURN implicit $vgpr0_vgpr1 253 %0:vgpr(s64) = COPY $vgpr0_vgpr1 254 %1:vgpr(s64) = G_FCONSTANT double 36893488147419103232.0 255 %2:vgpr(s64) = G_FMUL %0, %1 256 $vgpr0_vgpr1 = COPY %2 257 SI_RETURN implicit $vgpr0_vgpr1 258 259... 260 261--- 262name: fmul_to_ldexp_f64_2 263legalized: true 264regBankSelected: true 265body: | 266 bb.0: 267 liveins: $vgpr0_vgpr1 268 269 ; GCN-LABEL: name: fmul_to_ldexp_f64_2 270 ; GCN: liveins: $vgpr0_vgpr1 271 ; GCN-NEXT: {{ $}} 272 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 273 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4 274 ; GCN-NEXT: [[V_LDEXP_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_LDEXP_F64_e64 1, [[COPY]], 0, [[S_MOV_B32_]], 0, 0, implicit $mode, implicit $exec 275 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[V_LDEXP_F64_e64_]] 276 ; GCN-NEXT: SI_RETURN implicit $vgpr0_vgpr1 277 %0:vgpr(s64) = COPY $vgpr0_vgpr1 278 %1:vgpr(s64) = G_FCONSTANT double -16.0 279 %2:vgpr(s64) = G_FMUL %0, %1 280 $vgpr0_vgpr1 = COPY %2 281 SI_RETURN implicit $vgpr0_vgpr1 282 283... 284 285--- 286name: fmul_to_ldexp_f64_3 287legalized: true 288regBankSelected: true 289body: | 290 bb.0: 291 liveins: $vgpr0_vgpr1 292 293 ; GCN-LABEL: name: fmul_to_ldexp_f64_3 294 ; GCN: liveins: $vgpr0_vgpr1 295 ; GCN-NEXT: {{ $}} 296 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 297 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4 298 ; GCN-NEXT: [[V_LDEXP_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_LDEXP_F64_e64 3, [[COPY]], 0, [[S_MOV_B32_]], 0, 0, implicit $mode, implicit $exec 299 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[V_LDEXP_F64_e64_]] 300 ; GCN-NEXT: SI_RETURN implicit $vgpr0_vgpr1 301 %0:vgpr(s64) = COPY $vgpr0_vgpr1 302 %1:vgpr(s64) = G_FABS %0 303 %2:vgpr(s64) = G_FCONSTANT double -16.0 304 %3:vgpr(s64) = G_FMUL %1, %2 305 $vgpr0_vgpr1 = COPY %3 306 SI_RETURN implicit $vgpr0_vgpr1 307 308... 309 310--- 311name: fmul_to_ldexp_f64_4 312legalized: true 313regBankSelected: true 314body: | 315 bb.0: 316 liveins: $vgpr0_vgpr1 317 318 ; GCN-LABEL: name: fmul_to_ldexp_f64_4 319 ; GCN: liveins: $vgpr0_vgpr1 320 ; GCN-NEXT: {{ $}} 321 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 322 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1 323 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648 324 ; GCN-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[S_MOV_B32_]], [[COPY1]], implicit $exec 325 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0 326 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[V_OR_B32_e64_]], %subreg.sub1 327 ; GCN-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 4 328 ; GCN-NEXT: [[V_LDEXP_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_LDEXP_F64_e64 1, [[REG_SEQUENCE]], 0, [[S_MOV_B32_1]], 0, 0, implicit $mode, implicit $exec 329 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[V_LDEXP_F64_e64_]] 330 ; GCN-NEXT: SI_RETURN implicit $vgpr0_vgpr1 331 %0:vgpr(s64) = COPY $vgpr0_vgpr1 332 %1:vgpr(s64) = G_FABS %0 333 %2:vgpr(s64) = G_FNEG %1 334 %3:vgpr(s64) = G_FCONSTANT double -16.0 335 %4:vgpr(s64) = G_FMUL %2, %3 336 $vgpr0_vgpr1 = COPY %4 337 SI_RETURN implicit $vgpr0_vgpr1 338 339... 340 341--- 342name: fmul_to_ldexp_f64_5 343legalized: true 344regBankSelected: true 345body: | 346 bb.0: 347 liveins: $vgpr0_vgpr1 348 349 ; GCN-LABEL: name: fmul_to_ldexp_f64_5 350 ; GCN: liveins: $vgpr0_vgpr1 351 ; GCN-NEXT: {{ $}} 352 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 353 ; GCN-NEXT: [[V_MOV_B:%[0-9]+]]:vreg_64 = V_MOV_B64_PSEUDO -4598175219545276416, implicit $exec 354 ; GCN-NEXT: [[V_MUL_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_MUL_F64_e64 3, [[COPY]], 1, [[V_MOV_B]], 0, 0, implicit $mode, implicit $exec 355 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[V_MUL_F64_e64_]] 356 ; GCN-NEXT: SI_RETURN implicit $vgpr0_vgpr1 357 %0:vgpr(s64) = COPY $vgpr0_vgpr1 358 %1:vgpr(s64) = G_FABS %0 359 %2:vgpr(s64) = G_FNEG %1 360 %3:vgpr(s64) = G_FCONSTANT double -16.0 361 %4:vgpr(s64) = G_FNEG %3 362 %5:vgpr(s64) = G_FMUL %2, %4 363 $vgpr0_vgpr1 = COPY %5 364 SI_RETURN implicit $vgpr0_vgpr1 365 366... 367