brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.3 KiB · 9c74d94 Raw
514 lines · plain
1# RUN: llc -verify-machineinstrs -mtriple=amdgcn -run-pass si-shrink-instructions -o - %s | FileCheck -check-prefix=GCN %s2# RUN: llc -verify-machineinstrs -mtriple=amdgcn -passes si-shrink-instructions -o - %s | FileCheck -check-prefix=GCN %s3# Check that add with carry out isn't incorrectly reduced to e32 when4# the carry out is a virtual register.5 6# TODO: We should run this test until the end of codegen to make sure7# that the post-RA run does manage to shrink it, but right now the8# resume crashes9 10...11# GCN-LABEL: name: shrink_add_vop3{{$}}12# GCN: %29:vgpr_32, %9:sreg_64_xexec = V_ADD_CO_U32_e64 %19, %17, 0, implicit $exec13# GCN: %24:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed %9, implicit $exec14name:            shrink_add_vop315alignment:       116exposesReturnsTwice: false17legalized:       false18regBankSelected: false19selected:        false20tracksRegLiveness: true21registers:22  - { id: 0, class: sgpr_64 }23  - { id: 1, class: sreg_32_xm0 }24  - { id: 2, class: sgpr_32 }25  - { id: 3, class: vgpr_32 }26  - { id: 4, class: sreg_64_xexec }27  - { id: 5, class: sreg_64_xexec }28  - { id: 6, class: sreg_32 }29  - { id: 7, class: sreg_32 }30  - { id: 8, class: sreg_32_xm0 }31  - { id: 9, class: sreg_64_xexec }32  - { id: 10, class: sreg_32_xm0 }33  - { id: 11, class: sreg_32_xm0 }34  - { id: 12, class: sgpr_64 }35  - { id: 13, class: sgpr_128 }36  - { id: 14, class: sreg_32_xm0 }37  - { id: 15, class: sreg_64 }38  - { id: 16, class: sgpr_128 }39  - { id: 17, class: vgpr_32 }40  - { id: 18, class: vreg_64 }41  - { id: 19, class: vgpr_32 }42  - { id: 20, class: vreg_64 }43  - { id: 21, class: sreg_32_xm0 }44  - { id: 22, class: sreg_32 }45  - { id: 23, class: sreg_32 }46  - { id: 24, class: vgpr_32 }47  - { id: 25, class: vreg_64 }48  - { id: 26, class: vgpr_32 }49  - { id: 27, class: vreg_64 }50  - { id: 28, class: vreg_64 }51  - { id: 29, class: vgpr_32 }52liveins:53  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }54  - { reg: '$vgpr0', virtual-reg: '%3' }55frameInfo:56  isFrameAddressTaken: false57  isReturnAddressTaken: false58  hasStackMap:     false59  hasPatchPoint:   false60  stackSize:       061  offsetAdjustment: 062  maxAlignment:    063  adjustsStack:    false64  hasCalls:        false65  maxCallFrameSize: 066  hasOpaqueSPAdjustment: false67  hasVAStart:      false68  hasMustTailInVarArgFunc: false69body:             |70  bb.0:71    liveins: $sgpr0_sgpr1, $vgpr072 73    %3 = COPY $vgpr074    %0 = COPY $sgpr0_sgpr175    %4 = S_LOAD_DWORDX2_IMM %0, 9, 076    %5 = S_LOAD_DWORDX2_IMM %0, 11, 077    %26 = V_ASHRREV_I32_e32 31, %3, implicit $exec78    %27 = REG_SEQUENCE %3, 1, %26, 279    %10 = S_MOV_B32 6144080    %11 = S_MOV_B32 081    %12 = REG_SEQUENCE killed %11, 1, killed %10, 282    %13 = REG_SEQUENCE killed %5, 17, %12, 1883    %28 = V_LSHL_B64_e64 killed %27, 2, implicit $exec84    %16 = REG_SEQUENCE killed %4, 17, %12, 1885    %17 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 0, 0, 0, implicit $exec86    %19 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 4, 0, 0, implicit $exec87    %29, %9 = V_ADD_CO_U32_e64 %19, %17, 0, implicit $exec88    %24 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed %9, implicit $exec89    BUFFER_STORE_DWORD_ADDR64 %24, %28, killed %16, 0, 0, 0, 0, implicit $exec90    S_ENDPGM 091 92...93---94# GCN-LABEL: name: shrink_sub_vop3{{$}}95# GCN: %29:vgpr_32, %9:sreg_64_xexec = V_SUB_CO_U32_e64 %19, %17, 0, implicit $exec96# GCN: %24:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed %9, implicit $exec97 98name:            shrink_sub_vop399alignment:       1100exposesReturnsTwice: false101legalized:       false102regBankSelected: false103selected:        false104tracksRegLiveness: true105registers:106  - { id: 0, class: sgpr_64 }107  - { id: 1, class: sreg_32_xm0 }108  - { id: 2, class: sgpr_32 }109  - { id: 3, class: vgpr_32 }110  - { id: 4, class: sreg_64_xexec }111  - { id: 5, class: sreg_64_xexec }112  - { id: 6, class: sreg_32 }113  - { id: 7, class: sreg_32 }114  - { id: 8, class: sreg_32_xm0 }115  - { id: 9, class: sreg_64_xexec }116  - { id: 10, class: sreg_32_xm0 }117  - { id: 11, class: sreg_32_xm0 }118  - { id: 12, class: sgpr_64 }119  - { id: 13, class: sgpr_128 }120  - { id: 14, class: sreg_32_xm0 }121  - { id: 15, class: sreg_64 }122  - { id: 16, class: sgpr_128 }123  - { id: 17, class: vgpr_32 }124  - { id: 18, class: vreg_64 }125  - { id: 19, class: vgpr_32 }126  - { id: 20, class: vreg_64 }127  - { id: 21, class: sreg_32_xm0 }128  - { id: 22, class: sreg_32 }129  - { id: 23, class: sreg_32 }130  - { id: 24, class: vgpr_32 }131  - { id: 25, class: vreg_64 }132  - { id: 26, class: vgpr_32 }133  - { id: 27, class: vreg_64 }134  - { id: 28, class: vreg_64 }135  - { id: 29, class: vgpr_32 }136liveins:137  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }138  - { reg: '$vgpr0', virtual-reg: '%3' }139frameInfo:140  isFrameAddressTaken: false141  isReturnAddressTaken: false142  hasStackMap:     false143  hasPatchPoint:   false144  stackSize:       0145  offsetAdjustment: 0146  maxAlignment:    0147  adjustsStack:    false148  hasCalls:        false149  maxCallFrameSize: 0150  hasOpaqueSPAdjustment: false151  hasVAStart:      false152  hasMustTailInVarArgFunc: false153body:             |154  bb.0:155    liveins: $sgpr0_sgpr1, $vgpr0156 157    %3 = COPY $vgpr0158    %0 = COPY $sgpr0_sgpr1159    %4 = S_LOAD_DWORDX2_IMM %0, 9, 0160    %5 = S_LOAD_DWORDX2_IMM %0, 11, 0161    %26 = V_ASHRREV_I32_e32 31, %3, implicit $exec162    %27 = REG_SEQUENCE %3, 1, %26, 2163    %10 = S_MOV_B32 61440164    %11 = S_MOV_B32 0165    %12 = REG_SEQUENCE killed %11, 1, killed %10, 2166    %13 = REG_SEQUENCE killed %5, 17, %12, 18167    %28 = V_LSHL_B64_e64 killed %27, 2, implicit $exec168    %16 = REG_SEQUENCE killed %4, 17, %12, 18169    %17 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 0, 0, 0, implicit $exec170    %19 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 4, 0, 0, implicit $exec171    %29, %9 = V_SUB_CO_U32_e64 %19, %17, 0, implicit $exec172    %24 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed %9, implicit $exec173    BUFFER_STORE_DWORD_ADDR64 %24, %28, killed %16, 0, 0, 0, 0, implicit $exec174    S_ENDPGM 0175 176...177---178# GCN-LABEL: name: shrink_subrev_vop3{{$}}179# GCN: %29:vgpr_32, %9:sreg_64_xexec = V_SUBREV_CO_U32_e64 %19, %17, 0, implicit $exec180# GCN: %24:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed %9, implicit $exec181 182name:            shrink_subrev_vop3183alignment:       1184exposesReturnsTwice: false185legalized:       false186regBankSelected: false187selected:        false188tracksRegLiveness: true189registers:190  - { id: 0, class: sgpr_64 }191  - { id: 1, class: sreg_32_xm0 }192  - { id: 2, class: sgpr_32 }193  - { id: 3, class: vgpr_32 }194  - { id: 4, class: sreg_64_xexec }195  - { id: 5, class: sreg_64_xexec }196  - { id: 6, class: sreg_32 }197  - { id: 7, class: sreg_32 }198  - { id: 8, class: sreg_32_xm0 }199  - { id: 9, class: sreg_64_xexec }200  - { id: 10, class: sreg_32_xm0 }201  - { id: 11, class: sreg_32_xm0 }202  - { id: 12, class: sgpr_64 }203  - { id: 13, class: sgpr_128 }204  - { id: 14, class: sreg_32_xm0 }205  - { id: 15, class: sreg_64 }206  - { id: 16, class: sgpr_128 }207  - { id: 17, class: vgpr_32 }208  - { id: 18, class: vreg_64 }209  - { id: 19, class: vgpr_32 }210  - { id: 20, class: vreg_64 }211  - { id: 21, class: sreg_32_xm0 }212  - { id: 22, class: sreg_32 }213  - { id: 23, class: sreg_32 }214  - { id: 24, class: vgpr_32 }215  - { id: 25, class: vreg_64 }216  - { id: 26, class: vgpr_32 }217  - { id: 27, class: vreg_64 }218  - { id: 28, class: vreg_64 }219  - { id: 29, class: vgpr_32 }220liveins:221  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }222  - { reg: '$vgpr0', virtual-reg: '%3' }223frameInfo:224  isFrameAddressTaken: false225  isReturnAddressTaken: false226  hasStackMap:     false227  hasPatchPoint:   false228  stackSize:       0229  offsetAdjustment: 0230  maxAlignment:    0231  adjustsStack:    false232  hasCalls:        false233  maxCallFrameSize: 0234  hasOpaqueSPAdjustment: false235  hasVAStart:      false236  hasMustTailInVarArgFunc: false237body:             |238  bb.0:239    liveins: $sgpr0_sgpr1, $vgpr0240 241    %3 = COPY $vgpr0242    %0 = COPY $sgpr0_sgpr1243    %4 = S_LOAD_DWORDX2_IMM %0, 9, 0244    %5 = S_LOAD_DWORDX2_IMM %0, 11, 0245    %26 = V_ASHRREV_I32_e32 31, %3, implicit $exec246    %27 = REG_SEQUENCE %3, 1, %26, 2247    %10 = S_MOV_B32 61440248    %11 = S_MOV_B32 0249    %12 = REG_SEQUENCE killed %11, 1, killed %10, 2250    %13 = REG_SEQUENCE killed %5, 17, %12, 18251    %28 = V_LSHL_B64_e64 killed %27, 2, implicit $exec252    %16 = REG_SEQUENCE killed %4, 17, %12, 18253    %17 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 0, 0, 0, implicit $exec254    %19 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 4, 0, 0, implicit $exec255    %29, %9 = V_SUBREV_CO_U32_e64 %19, %17, 0, implicit $exec256    %24 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed %9, implicit $exec257    BUFFER_STORE_DWORD_ADDR64 %29, %28, killed %16, 0, 0, 0, 0, implicit $exec258    S_ENDPGM 0259 260...261---262# GCN-LABEL: name: check_addc_src2_vop3{{$}}263# GCN: %29:vgpr_32, $vcc = V_ADDC_U32_e64 %19, %17, %9, 0, implicit $exec264# GCN: %24:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $vcc, implicit $exec265name: check_addc_src2_vop3266alignment:       1267exposesReturnsTwice: false268legalized:       false269regBankSelected: false270selected:        false271tracksRegLiveness: true272registers:273  - { id: 0, class: sgpr_64 }274  - { id: 1, class: sreg_32_xm0 }275  - { id: 2, class: sgpr_32 }276  - { id: 3, class: vgpr_32 }277  - { id: 4, class: sreg_64_xexec }278  - { id: 5, class: sreg_64_xexec }279  - { id: 6, class: sreg_32 }280  - { id: 7, class: sreg_32 }281  - { id: 8, class: sreg_32_xm0 }282  - { id: 9, class: sreg_64_xexec }283  - { id: 10, class: sreg_32_xm0 }284  - { id: 11, class: sreg_32_xm0 }285  - { id: 12, class: sgpr_64 }286  - { id: 13, class: sgpr_128 }287  - { id: 14, class: sreg_32_xm0 }288  - { id: 15, class: sreg_64 }289  - { id: 16, class: sgpr_128 }290  - { id: 17, class: vgpr_32 }291  - { id: 18, class: vreg_64 }292  - { id: 19, class: vgpr_32 }293  - { id: 20, class: vreg_64 }294  - { id: 21, class: sreg_32_xm0 }295  - { id: 22, class: sreg_32 }296  - { id: 23, class: sreg_32 }297  - { id: 24, class: vgpr_32 }298  - { id: 25, class: vreg_64 }299  - { id: 26, class: vgpr_32 }300  - { id: 27, class: vreg_64 }301  - { id: 28, class: vreg_64 }302  - { id: 29, class: vgpr_32 }303liveins:304  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }305  - { reg: '$vgpr0', virtual-reg: '%3' }306frameInfo:307  isFrameAddressTaken: false308  isReturnAddressTaken: false309  hasStackMap:     false310  hasPatchPoint:   false311  stackSize:       0312  offsetAdjustment: 0313  maxAlignment:    0314  adjustsStack:    false315  hasCalls:        false316  maxCallFrameSize: 0317  hasOpaqueSPAdjustment: false318  hasVAStart:      false319  hasMustTailInVarArgFunc: false320body:             |321  bb.0:322    liveins: $sgpr0_sgpr1, $vgpr0323 324    %3 = COPY $vgpr0325    %0 = COPY $sgpr0_sgpr1326    %4 = S_LOAD_DWORDX2_IMM %0, 9, 0327    %5 = S_LOAD_DWORDX2_IMM %0, 11, 0328    %26 = V_ASHRREV_I32_e32 31, %3, implicit $exec329    %27 = REG_SEQUENCE %3, 1, %26, 2330    %10 = S_MOV_B32 61440331    %11 = S_MOV_B32 0332    %12 = REG_SEQUENCE killed %11, 1, killed %10, 2333    %13 = REG_SEQUENCE killed %5, 17, %12, 18334    %28 = V_LSHL_B64_e64 killed %27, 2, implicit $exec335    %16 = REG_SEQUENCE killed %4, 17, %12, 18336    %17 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 0, 0, 0, implicit $exec337    %19 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 4, 0, 0, implicit $exec338    %9 = S_MOV_B64 0339    %29, $vcc = V_ADDC_U32_e64 %19, %17, %9, 0, implicit $exec340    %24 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $vcc, implicit $exec341    BUFFER_STORE_DWORD_ADDR64 %24, %28, killed %16, 0, 0, 0, 0, implicit $exec342    S_ENDPGM 0343 344...345---346# GCN-LABEL: name: shrink_addc_vop3{{$}}347# GCN: %29:vgpr_32 = V_ADDC_U32_e32 %19, %17, implicit-def $vcc, implicit $vcc, implicit $exec348# GCN: %24:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $vcc, implicit $exec349 350name:            shrink_addc_vop3351alignment:       1352exposesReturnsTwice: false353legalized:       false354regBankSelected: false355selected:        false356tracksRegLiveness: true357registers:358  - { id: 0, class: sgpr_64 }359  - { id: 1, class: sreg_32_xm0 }360  - { id: 2, class: sgpr_32 }361  - { id: 3, class: vgpr_32 }362  - { id: 4, class: sreg_64_xexec }363  - { id: 5, class: sreg_64_xexec }364  - { id: 6, class: sreg_32 }365  - { id: 7, class: sreg_32 }366  - { id: 8, class: sreg_32_xm0 }367  - { id: 9, class: sreg_64 }368  - { id: 10, class: sreg_32_xm0 }369  - { id: 11, class: sreg_32_xm0 }370  - { id: 12, class: sgpr_64 }371  - { id: 13, class: sgpr_128 }372  - { id: 14, class: sreg_32_xm0 }373  - { id: 15, class: sreg_64 }374  - { id: 16, class: sgpr_128 }375  - { id: 17, class: vgpr_32 }376  - { id: 18, class: vreg_64 }377  - { id: 19, class: vgpr_32 }378  - { id: 20, class: vreg_64 }379  - { id: 21, class: sreg_32_xm0 }380  - { id: 22, class: sreg_32 }381  - { id: 23, class: sreg_32 }382  - { id: 24, class: vgpr_32 }383  - { id: 25, class: vreg_64 }384  - { id: 26, class: vgpr_32 }385  - { id: 27, class: vreg_64 }386  - { id: 28, class: vreg_64 }387  - { id: 29, class: vgpr_32 }388liveins:389  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }390  - { reg: '$vgpr0', virtual-reg: '%3' }391frameInfo:392  isFrameAddressTaken: false393  isReturnAddressTaken: false394  hasStackMap:     false395  hasPatchPoint:   false396  stackSize:       0397  offsetAdjustment: 0398  maxAlignment:    0399  adjustsStack:    false400  hasCalls:        false401  maxCallFrameSize: 0402  hasOpaqueSPAdjustment: false403  hasVAStart:      false404  hasMustTailInVarArgFunc: false405body:             |406  bb.0:407    liveins: $sgpr0_sgpr1, $vgpr0408 409    %3 = COPY $vgpr0410    %0 = COPY $sgpr0_sgpr1411    %4 = S_LOAD_DWORDX2_IMM %0, 9, 0412    %5 = S_LOAD_DWORDX2_IMM %0, 11, 0413    %26 = V_ASHRREV_I32_e32 31, %3, implicit $exec414    %27 = REG_SEQUENCE %3, 1, %26, 2415    %10 = S_MOV_B32 61440416    %11 = S_MOV_B32 0417    %12 = REG_SEQUENCE killed %11, 1, killed %10, 2418    %13 = REG_SEQUENCE killed %5, 17, %12, 18419    %28 = V_LSHL_B64_e64 killed %27, 2, implicit $exec420    %16 = REG_SEQUENCE killed %4, 17, %12, 18421    %17 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 0, 0, 0, implicit $exec422    %19 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 4, 0, 0, implicit $exec423    $vcc = S_MOV_B64 0424    %29, $vcc = V_ADDC_U32_e64 %19, %17, $vcc, 0, implicit $exec425    %24 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $vcc, implicit $exec426    BUFFER_STORE_DWORD_ADDR64 %24, %28, killed %16, 0, 0, 0, 0, implicit $exec427    S_ENDPGM 0428 429...430 431---432# GCN-LABEL: name: shrink_addc_undef_vcc{{$}}433# GCN: %29:vgpr_32 = V_ADDC_U32_e32 %19, %17, implicit-def $vcc, implicit undef $vcc, implicit $exec434# GCN: %24:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $vcc, implicit $exec435name:            shrink_addc_undef_vcc436alignment:       1437exposesReturnsTwice: false438legalized:       false439regBankSelected: false440selected:        false441tracksRegLiveness: true442registers:443  - { id: 0, class: sgpr_64 }444  - { id: 1, class: sreg_32_xm0 }445  - { id: 2, class: sgpr_32 }446  - { id: 3, class: vgpr_32 }447  - { id: 4, class: sreg_64_xexec }448  - { id: 5, class: sreg_64_xexec }449  - { id: 6, class: sreg_32 }450  - { id: 7, class: sreg_32 }451  - { id: 8, class: sreg_32_xm0 }452  - { id: 9, class: sreg_64 }453  - { id: 10, class: sreg_32_xm0 }454  - { id: 11, class: sreg_32_xm0 }455  - { id: 12, class: sgpr_64 }456  - { id: 13, class: sgpr_128 }457  - { id: 14, class: sreg_32_xm0 }458  - { id: 15, class: sreg_64 }459  - { id: 16, class: sgpr_128 }460  - { id: 17, class: vgpr_32 }461  - { id: 18, class: vreg_64 }462  - { id: 19, class: vgpr_32 }463  - { id: 20, class: vreg_64 }464  - { id: 21, class: sreg_32_xm0 }465  - { id: 22, class: sreg_32 }466  - { id: 23, class: sreg_32 }467  - { id: 24, class: vgpr_32 }468  - { id: 25, class: vreg_64 }469  - { id: 26, class: vgpr_32 }470  - { id: 27, class: vreg_64 }471  - { id: 28, class: vreg_64 }472  - { id: 29, class: vgpr_32 }473liveins:474  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }475  - { reg: '$vgpr0', virtual-reg: '%3' }476frameInfo:477  isFrameAddressTaken: false478  isReturnAddressTaken: false479  hasStackMap:     false480  hasPatchPoint:   false481  stackSize:       0482  offsetAdjustment: 0483  maxAlignment:    0484  adjustsStack:    false485  hasCalls:        false486  maxCallFrameSize: 0487  hasOpaqueSPAdjustment: false488  hasVAStart:      false489  hasMustTailInVarArgFunc: false490body:             |491  bb.0:492    liveins: $sgpr0_sgpr1, $vgpr0493 494    %3 = COPY $vgpr0495    %0 = COPY $sgpr0_sgpr1496    %4 = S_LOAD_DWORDX2_IMM %0, 9, 0497    %5 = S_LOAD_DWORDX2_IMM %0, 11, 0498    %26 = V_ASHRREV_I32_e32 31, %3, implicit $exec499    %27 = REG_SEQUENCE %3, 1, %26, 2500    %10 = S_MOV_B32 61440501    %11 = S_MOV_B32 0502    %12 = REG_SEQUENCE killed %11, 1, killed %10, 2503    %13 = REG_SEQUENCE killed %5, 17, %12, 18504    %28 = V_LSHL_B64_e64 killed %27, 2, implicit $exec505    %16 = REG_SEQUENCE killed %4, 17, %12, 18506    %17 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 0, 0, 0, implicit $exec507    %19 = BUFFER_LOAD_DWORD_ADDR64 %28, %13, 0, 4, 0, 0, implicit $exec508    %29, $vcc = V_ADDC_U32_e64 %19, %17, undef $vcc, 0, implicit $exec509    %24 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $vcc, implicit $exec510    BUFFER_STORE_DWORD_ADDR64 %24, %28, killed %16, 0, 0, 0, 0, implicit $exec511    S_ENDPGM 0512 513...514