1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -march=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: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 15 ; GCN: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 16 ; GCN: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1 17 ; GCN: [[COPY3:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4 18 ; GCN: %4:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 19 ; GCN: %5:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 20 ; GCN: %6:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec 21 ; GCN: FLAT_STORE_DWORD [[COPY3]], %4, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 22 ; GCN: FLAT_STORE_DWORD [[COPY3]], %5, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 23 ; GCN: FLAT_STORE_DWORD [[COPY3]], %6, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 24 %0:sgpr(s32) = COPY $sgpr0 25 %1:vgpr(s32) = COPY $vgpr0 26 %2:vgpr(s32) = COPY $vgpr1 27 %3:vgpr(p1) = COPY $vgpr3_vgpr4 28 29 ; fmul vs 30 %4:vgpr(s32) = G_FMUL %1, %0 31 32 ; fmul sv 33 %5:vgpr(s32) = G_FMUL %0, %1 34 35 ; fmul vv 36 %6:vgpr(s32) = G_FMUL %1, %2 37 38 G_STORE %4, %3 :: (store (s32), addrspace 1) 39 G_STORE %5, %3 :: (store (s32), addrspace 1) 40 G_STORE %6, %3 :: (store (s32), addrspace 1) 41... 42 43--- 44 45name: fmul_f64 46legalized: true 47regBankSelected: true 48 49body: | 50 bb.0: 51 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5 52 ; GCN-LABEL: name: fmul_f64 53 ; GCN: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 54 ; GCN: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 55 ; GCN: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 56 ; GCN: %4:vreg_64 = nofpexcept V_MUL_F64_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 57 ; GCN: %5:vreg_64 = nofpexcept V_MUL_F64_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 58 ; GCN: %6:vreg_64 = nofpexcept V_MUL_F64_e64 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec 59 ; GCN: S_ENDPGM 0, implicit %4, implicit %5, implicit %6 60 %0:sgpr(s64) = COPY $sgpr0_sgpr1 61 %1:vgpr(s64) = COPY $vgpr0_vgpr1 62 %2:vgpr(s64) = COPY $vgpr2_vgpr3 63 %3:vgpr(p1) = COPY $vgpr4_vgpr5 64 65 ; fmul vs 66 %4:vgpr(s64) = G_FMUL %1, %0 67 68 ; fmul sv 69 %5:vgpr(s64) = G_FMUL %0, %1 70 71 ; fmul vv 72 %6:vgpr(s64) = G_FMUL %1, %2 73 S_ENDPGM 0, implicit %4, implicit %5, implicit %6 74 75... 76 77--- 78 79name: fmul_f16 80legalized: true 81regBankSelected: true 82 83body: | 84 bb.0: 85 liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr3_vgpr4 86 ; GCN-LABEL: name: fmul_f16 87 ; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 88 ; GCN: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 89 ; GCN: %7:vgpr_32 = nofpexcept V_MUL_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 90 ; GCN: %8:vgpr_32 = nofpexcept V_MUL_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 91 ; GCN: %9:vgpr_32 = nofpexcept V_MUL_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 92 ; GCN: S_ENDPGM 0, implicit %7, implicit %8, implicit %9 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 ; fmul vs 103 %8:vgpr(s16) = G_FMUL %4, %4 104 105 ; fmul sv 106 %9:vgpr(s16) = G_FMUL %4, %4 107 108 ; fmul vv 109 %10:vgpr(s16) = G_FMUL %4, %5 110 111 S_ENDPGM 0, implicit %8, implicit %9, implicit %10 112... 113 114--- 115 116name: fmul_modifiers_f32 117legalized: true 118regBankSelected: true 119 120body: | 121 bb.0: 122 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3 123 ; GCN-LABEL: name: fmul_modifiers_f32 124 ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 125 ; GCN: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 126 ; GCN: %6:vgpr_32 = nofpexcept V_MUL_F32_e64 2, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 127 ; GCN: %7:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec 128 ; GCN: %8:vgpr_32 = nofpexcept V_MUL_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec 129 ; GCN: %9:vgpr_32 = nofpexcept V_MUL_F32_e64 1, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 130 ; GCN: %10:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec 131 ; GCN: %11:vgpr_32 = nofpexcept V_MUL_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec 132 ; GCN: %12:vgpr_32 = nofpexcept V_MUL_F32_e64 3, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 133 ; GCN: %13:vgpr_32 = nofpexcept V_MUL_F32_e64 0, [[COPY]], 3, [[COPY]], 0, 0, implicit $mode, implicit $exec 134 ; GCN: %14:vgpr_32 = nofpexcept V_MUL_F32_e64 3, [[COPY]], 3, [[COPY]], 0, 0, implicit $mode, implicit $exec 135 ; GCN: %15:vgpr_32 = nofpexcept V_MUL_F32_e64 3, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec 136 ; GCN: FLAT_STORE_DWORD [[COPY1]], %6, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 137 ; GCN: FLAT_STORE_DWORD [[COPY1]], %7, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 138 ; GCN: FLAT_STORE_DWORD [[COPY1]], %8, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 139 ; GCN: FLAT_STORE_DWORD [[COPY1]], %9, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 140 ; GCN: FLAT_STORE_DWORD [[COPY1]], %10, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 141 ; GCN: FLAT_STORE_DWORD [[COPY1]], %11, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 142 ; GCN: FLAT_STORE_DWORD [[COPY1]], %12, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 143 ; GCN: FLAT_STORE_DWORD [[COPY1]], %13, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 144 ; GCN: FLAT_STORE_DWORD [[COPY1]], %14, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 145 ; GCN: FLAT_STORE_DWORD [[COPY1]], %15, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 146 %0:vgpr(s32) = COPY $vgpr0 147 %1:vgpr(s32) = COPY $vgpr1 148 %2:vgpr(p1) = COPY $vgpr2_vgpr3 149 150 %3:vgpr(s32) = G_FABS %0 151 %4:vgpr(s32) = G_FNEG %0 152 %5:vgpr(s32) = G_FNEG %3 153 154 ; fabs lhs 155 %6:vgpr(s32) = G_FMUL %3, %0 156 157 ; fabs rhs 158 %7:vgpr(s32) = G_FMUL %0, %3 159 160 ; fabs lhs, rhs 161 %8:vgpr(s32) = G_FMUL %3, %3 162 163 164 ; fneg lhs 165 %9:vgpr(s32) = G_FMUL %4, %0 166 167 ; fneg rhs 168 %10:vgpr(s32) = G_FMUL %0, %4 169 170 ; fneg lhs, rhs 171 %11:vgpr(s32) = G_FMUL %4, %4 172 173 174 ; fneg fabs lhs 175 %12:vgpr(s32) = G_FMUL %5, %0 176 177 ; fneg fabs rhs 178 %13:vgpr(s32) = G_FMUL %0, %5 179 180 ; fneg fabs lhs, rhs 181 %14:vgpr(s32) = G_FMUL %5, %5 182 183 184 ; fneg fabs lhs, fneg rhs 185 %15:vgpr(s32) = G_FMUL %5, %4 186 187 G_STORE %6, %2 :: (store (s32), addrspace 1) 188 G_STORE %7, %2 :: (store (s32), addrspace 1) 189 G_STORE %8, %2 :: (store (s32), addrspace 1) 190 G_STORE %9, %2 :: (store (s32), addrspace 1) 191 G_STORE %10, %2 :: (store (s32), addrspace 1) 192 G_STORE %11, %2 :: (store (s32), addrspace 1) 193 G_STORE %12, %2 :: (store (s32), addrspace 1) 194 G_STORE %13, %2 :: (store (s32), addrspace 1) 195 G_STORE %14, %2 :: (store (s32), addrspace 1) 196 G_STORE %15, %2 :: (store (s32), addrspace 1) 197 198... 199