193 lines · plain
1# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=twoaddressinstruction -verify-machineinstrs -o - %s | FileCheck --check-prefixes=GFX10,GFX10-NOLIS %s2# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -passes=two-address-instruction -verify-each -o - %s | FileCheck --check-prefixes=GFX10,GFX10-NOLIS %s3# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=liveintervals,twoaddressinstruction -verify-machineinstrs -o - %s | FileCheck --check-prefixes=GFX10,GFX10-LIS %s4 5 6# GFX10-LABEL: name: test_fmamk_reg_imm_f167# GFX10: dead %2:vgpr_32 = IMPLICIT_DEF8# GFX10-NOT: V_MOV_B329# GFX10-NOLIS: V_FMAMK_F16 killed %0.sub0, 1078523331, killed %1, implicit $mode, implicit $exec10# GFX10-LIS: V_FMAMK_F16 %0.sub0, 1078523331, %1, implicit $mode, implicit $exec11---12name: test_fmamk_reg_imm_f1613tracksRegLiveness: true14body: |15 bb.0:16 17 %0:vreg_64 = IMPLICIT_DEF18 %1:vgpr_32 = COPY %0.sub119 %2:vgpr_32 = V_MOV_B32_e32 1078523331, implicit $exec20 %3:vgpr_32 = V_FMAC_F16_e32 killed %0.sub0, %2, killed %1, implicit $mode, implicit $exec21 22...23 24# GFX10-LABEL: name: test_fmamk_reg_imm_f16__imm_is_subreg25# GFX10: %0:vreg_64 = IMPLICIT_DEF26# GFX10: %1:vgpr_32 = COPY %0.sub127# GFX10: dead undef %2.sub0:vreg_64 = IMPLICIT_DEF28# GFX10-NOLIS: %3:vgpr_32 = V_FMAMK_F16 killed %0.sub0, 1078523331, killed %1, implicit $mode, implicit $exec29# GFX10-LIS: %3:vgpr_32 = V_FMAMK_F16 %0.sub0, 1078523331, %1, implicit $mode, implicit $exec30---31name: test_fmamk_reg_imm_f16__imm_is_subreg32tracksRegLiveness: true33body: |34 bb.0:35 36 %0:vreg_64 = IMPLICIT_DEF37 %1:vgpr_32 = COPY %0.sub138 undef %2.sub0:vreg_64 = V_MOV_B32_e32 1078523331, implicit $exec39 %3:vgpr_32 = V_FMAC_F16_e32 killed %0.sub0, %2.sub0, killed %1, implicit $mode, implicit $exec40 41...42 43# GFX10-LABEL: name: test_fmamk_reg_imm_f16__imm_is_subreg_fully_defined44# GFX10: %0:vreg_64 = IMPLICIT_DEF45# GFX10: %1:vgpr_32 = COPY %0.sub146# GFX10: undef %2.sub1:vreg_64 = V_MOV_B32_e32 9999, implicit $exec47# GFX10: %2.sub0:vreg_64 = V_MOV_B32_e32 1078523331, implicit $exec48# GFX10-NOLIS: %3:vgpr_32 = V_FMA_F16_gfx9_e64 0, killed %0.sub0, 0, %2.sub0, 0, killed %1, 0, 0, 0, implicit $mode, implicit $e49# GFX10-LIS: %3:vgpr_32 = V_FMA_F16_gfx9_e64 0, %0.sub0, 0, %2.sub0, 0, %1, 0, 0, 0, implicit $mode, implicit $e50---51name: test_fmamk_reg_imm_f16__imm_is_subreg_fully_defined52tracksRegLiveness: true53body: |54 bb.0:55 %0:vreg_64 = IMPLICIT_DEF56 %1:vgpr_32 = COPY %0.sub157 undef %2.sub1 = V_MOV_B32_e32 9999, implicit $exec58 %2.sub0:vreg_64 = V_MOV_B32_e32 1078523331, implicit $exec59 %3:vgpr_32 = V_FMAC_F16_e32 killed %0.sub0, %2.sub0, killed %1, implicit $mode, implicit $exec60 61...62 63# GFX10-LABEL: name: test_fmamk_reg_imm_f16__use_imm_before_mac64# GFX10: %0:vreg_64 = IMPLICIT_DEF65# GFX10: %1:vgpr_32 = COPY %0.sub166# GFX10: %2:vgpr_32 = V_MOV_B32_e32 1078523331, implicit $exec67# GFX10: S_NOP 0, implicit %268# GFX10-NOLIS: %3:vgpr_32 = V_FMAMK_F16 killed %0.sub0, 1078523331, killed %1, implicit $mode, implicit $exec69# GFX10-LIS: %3:vgpr_32 = V_FMAMK_F16 %0.sub0, 1078523331, %1, implicit $mode, implicit $exec70---71name: test_fmamk_reg_imm_f16__use_imm_before_mac72tracksRegLiveness: true73body: |74 bb.0:75 76 %0:vreg_64 = IMPLICIT_DEF77 %1:vgpr_32 = COPY %0.sub178 %2:vgpr_32 = V_MOV_B32_e32 1078523331, implicit $exec79 S_NOP 0, implicit %280 %3:vgpr_32 = V_FMAC_F16_e32 killed %0.sub0, %2, killed %1, implicit $mode, implicit $exec81 82...83 84# GFX10-LABEL: name: test_fmamk_reg_imm_f16__use_imm_after_mac85# GFX10: %0:vreg_64 = IMPLICIT_DEF86# GFX10: %1:vgpr_32 = COPY %0.sub187# GFX10: %2:vgpr_32 = V_MOV_B32_e32 1078523331, implicit $exec88# GFX10-NOLIS: %3:vgpr_32 = V_FMAMK_F16 killed %0.sub0, 1078523331, killed %1, implicit $mode, implicit $exec89# GFX10-LIS: %3:vgpr_32 = V_FMAMK_F16 %0.sub0, 1078523331, %1, implicit $mode, implicit $exec90---91name: test_fmamk_reg_imm_f16__use_imm_after_mac92tracksRegLiveness: true93body: |94 bb.0:95 96 %0:vreg_64 = IMPLICIT_DEF97 %1:vgpr_32 = COPY %0.sub198 %2:vgpr_32 = V_MOV_B32_e32 1078523331, implicit $exec99 %3:vgpr_32 = V_FMAC_F16_e32 killed %0.sub0, %2, killed %1, implicit $mode, implicit $exec100 S_NOP 0, implicit %2101 102...103 104# GFX10-LABEL: name: test_fmamk_reg_imm_f16__use_imm_before_after_mac105# GFX10: %0:vreg_64 = IMPLICIT_DEF106# GFX10: %1:vgpr_32 = COPY %0.sub1107# GFX10: %2:vgpr_32 = V_MOV_B32_e32 1078523331, implicit $exec108# GFX10: S_NOP 0, implicit %2109# GFX10-NOLIS: %3:vgpr_32 = V_FMAMK_F16 killed %0.sub0, 1078523331, killed %1, implicit $mode, implicit $exec110# GFX10-LIS: %3:vgpr_32 = V_FMAMK_F16 %0.sub0, 1078523331, %1, implicit $mode, implicit $exec111# GFX10: S_NOP 0, implicit %2112 113---114name: test_fmamk_reg_imm_f16__use_imm_before_after_mac115tracksRegLiveness: true116body: |117 bb.0:118 119 %0:vreg_64 = IMPLICIT_DEF120 %1:vgpr_32 = COPY %0.sub1121 %2:vgpr_32 = V_MOV_B32_e32 1078523331, implicit $exec122 S_NOP 0, implicit %2123 %3:vgpr_32 = V_FMAC_F16_e32 killed %0.sub0, %2, killed %1, implicit $mode, implicit $exec124 S_NOP 0, implicit %2125 126...127 128# GFX10-LABEL: name: test_fmamk_imm_reg_f16129# GFX10: dead %2:vgpr_32 = IMPLICIT_DEF130# GFX10-NOT: V_MOV_B32131# GFX10-NOLIS: V_FMAMK_F16 killed %0.sub0, 1078523331, killed %1, implicit $mode, implicit $exec132# GFX10-LIS: V_FMAMK_F16 %0.sub0, 1078523331, %1, implicit $mode, implicit $exec133---134name: test_fmamk_imm_reg_f16135tracksRegLiveness: true136registers:137 - { id: 0, class: vreg_64 }138 - { id: 1, class: vgpr_32 }139 - { id: 2, class: vgpr_32 }140 - { id: 3, class: vgpr_32 }141body: |142 bb.0:143 144 %0 = IMPLICIT_DEF145 %1 = COPY %0.sub1146 %2 = V_MOV_B32_e32 1078523331, implicit $exec147 %3 = V_FMAC_F16_e32 %2, killed %0.sub0, killed %1, implicit $mode, implicit $exec148 149...150 151# GFX10-LABEL: name: test_fmaak_f16152# GFX10: %1:vgpr_32 = V_MOV_B32_e32 1078523331, implicit $exec153# GFX10-NOT: V_MOV_B32154# GFX10-NOLIS: V_FMAAK_F16 killed %0.sub0, %0.sub1, 1078523331, implicit $mode, implicit $exec155# GFX10-LIS: V_FMAAK_F16 %0.sub0, %0.sub1, 1078523331, implicit $mode, implicit $exec156---157name: test_fmaak_f16158tracksRegLiveness: true159registers:160 - { id: 0, class: vreg_64 }161 - { id: 1, class: vgpr_32 }162 - { id: 2, class: vgpr_32 }163body: |164 bb.0:165 166 %0 = IMPLICIT_DEF167 %1 = V_MOV_B32_e32 1078523331, implicit $exec168 %2 = V_FMAC_F16_e32 killed %0.sub0, %0.sub1, %1, implicit $mode, implicit $exec169 S_ENDPGM 0, implicit %1170...171 172# GFX10-LABEL: name: test_fmaak_inline_literal_f16173# GFX10: %1:vgpr_32 = V_MOV_B32_e32 49664, implicit $exec174# GFX10-NOT: V_MOV_B32175# GFX10-NOLIS: %2:vgpr_32 = V_FMAAK_F16 16384, killed %0, 49664, implicit $mode, implicit $exec176# GFX10-LIS: %2:vgpr_32 = V_FMAAK_F16 16384, %0, 49664, implicit $mode, implicit $exec177 178---179name: test_fmaak_inline_literal_f16180tracksRegLiveness: true181liveins:182 - { reg: '$vgpr0', virtual-reg: '%0' }183body: |184 bb.0:185 liveins: $vgpr0186 187 %0:vgpr_32 = COPY killed $vgpr0188 189 %1:vgpr_32 = V_MOV_B32_e32 49664, implicit $exec190 %2:vgpr_32 = V_FMAC_F16_e32 16384, killed %0, %1, implicit $mode, implicit $exec191 S_ENDPGM 0, implicit %1192...193