brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.0 KiB · e50c314 Raw
554 lines · plain
1# RUN: llc -mtriple=amdgcn -mcpu=gfx902 -verify-machineinstrs -run-pass=si-form-memory-clauses %s -o - | FileCheck -check-prefix=GCN %s2# RUN: llc -mtriple=amdgcn -mcpu=gfx902 -passes="si-form-memory-clauses" %s -o - | FileCheck -check-prefix=GCN %s3 4# GCN-LABEL: {{^}}name: vector_clause{{$}}5# GCN:      %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec6# GCN-NEXT: %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, implicit $exec7# GCN-NEXT: %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, implicit $exec8# GCN-NEXT: %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, implicit $exec9# GCN-NEXT: KILL %0{{$}}10# GCN-NEXT: %5:vreg_64 = IMPLICIT_DEF11# GCN-NEXT: GLOBAL_STORE_DWORDX4 %5, %1, 0, 0, implicit $exec12 13---14name:            vector_clause15tracksRegLiveness: true16body:             |17  bb.0:18    %0:vreg_64 = IMPLICIT_DEF19    %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec20    %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, implicit $exec21    %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, implicit $exec22    %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, implicit $exec23    %5:vreg_64 = IMPLICIT_DEF24    GLOBAL_STORE_DWORDX4 %5, %1, 0, 0, implicit $exec25    GLOBAL_STORE_DWORDX4 %5, %2, 16, 0, implicit $exec26    GLOBAL_STORE_DWORDX4 %5, %3, 32, 0, implicit $exec27    GLOBAL_STORE_DWORDX4 %5, %4, 48, 0, implicit $exec28...29 30# This would be a valid soft clause, but there's no need for a KILL31# since the pointer uses are live beyond the end the clause.32# GCN-LABEL: {{^}}name: vector_clause_no_kill{{$}}33# GCN:      %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec34# GCN-NEXT: %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, implicit $exec35# GCN-NEXT: %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, implicit $exec36# GCN-NEXT: %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, implicit $exec37# GCN-NEXT: GLOBAL_STORE_DWORDX4 %0, %1, 0, 0, implicit $exec38 39---40name:            vector_clause_no_kill41tracksRegLiveness: true42body:             |43  bb.0:44    %0:vreg_64 = IMPLICIT_DEF45    %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec46    %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, implicit $exec47    %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, implicit $exec48    %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, implicit $exec49    GLOBAL_STORE_DWORDX4 %0, %1, 0, 0, implicit $exec50    GLOBAL_STORE_DWORDX4 %0, %2, 16, 0, implicit $exec51    GLOBAL_STORE_DWORDX4 %0, %3, 32, 0, implicit $exec52    GLOBAL_STORE_DWORDX4 %0, %4, 48, 0, implicit $exec53...54 55# GCN-LABEL: {{^}}name: subreg_full{{$}}56# GCN:      undef %1.sub0:vreg_128 = GLOBAL_LOAD_DWORD %0.sub0_sub1, 0, 0, implicit $exec57# GCN-NEXT: %1.sub1:vreg_128 = GLOBAL_LOAD_DWORD %0.sub1_sub2, 16, 0, implicit $exec58# GCN-NEXT: %1.sub2:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, implicit $exec59# GCN-NEXT: %1.sub3:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, implicit $exec60# GCN-NEXT: KILL %0.sub2_sub3{{$}}61# GCN-NEXT: GLOBAL_STORE_DWORDX4 %0.sub0_sub1, %1, 0, 0, implicit $exec62 63---64name:            subreg_full65tracksRegLiveness: true66registers:67  - { id: 0, class: vreg_128 }68  - { id: 1, class: vreg_128 }69body:             |70  bb.0:71    %0 = IMPLICIT_DEF72    undef %1.sub0:vreg_128 = GLOBAL_LOAD_DWORD %0.sub0_sub1, 0, 0, implicit $exec73    %1.sub1:vreg_128 = GLOBAL_LOAD_DWORD %0.sub1_sub2, 16, 0, implicit $exec74    %1.sub2:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, implicit $exec75    %1.sub3:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, implicit $exec76    GLOBAL_STORE_DWORDX4 %0.sub0_sub1, %1, 0, 0, implicit $exec77...78 79# GCN-LABEL: {{^}}name: subreg_part{{$}}80# GCN:      undef %1.sub0:vreg_128 = GLOBAL_LOAD_DWORD %0.sub0_sub1, 0, 0, implicit $exec81# GCN-NEXT: %1.sub1:vreg_128 = GLOBAL_LOAD_DWORD %0.sub1_sub2, 16, 0, implicit $exec82# GCN-NEXT: %1.sub3:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, implicit $exec83# GCN-NEXT: KILL %0.sub2_sub3{{$}}84# GCN-NEXT: GLOBAL_STORE_DWORDX4 %0.sub0_sub1, %1, 0, 0, implicit $exec85 86---87name:            subreg_part88tracksRegLiveness: true89registers:90  - { id: 0, class: vreg_128 }91  - { id: 1, class: vreg_128 }92body:             |93  bb.0:94    %0 = IMPLICIT_DEF95    undef %1.sub0:vreg_128 = GLOBAL_LOAD_DWORD %0.sub0_sub1, 0, 0, implicit $exec96    %1.sub1:vreg_128 = GLOBAL_LOAD_DWORD %0.sub1_sub2, 16, 0, implicit $exec97    %1.sub3:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, implicit $exec98    GLOBAL_STORE_DWORDX4 %0.sub0_sub1, %1, 0, 0, implicit $exec99...100 101# GCN-LABEL: {{^}}name: dead{{$}}102# GCN:      dead %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec103# GCN-NEXT: %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, implicit $exec104# GCN-NEXT: dead %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, implicit $exec105# GCN-NEXT: dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, implicit $exec106# GCN-NEXT: KILL %0{{$}}107 108---109name:            dead110tracksRegLiveness: true111registers:112  - { id: 0, class: vreg_64 }113  - { id: 1, class: vreg_128 }114  - { id: 2, class: vreg_128 }115  - { id: 3, class: vreg_128 }116  - { id: 4, class: vreg_128 }117body:             |118  bb.0:119    %0 = IMPLICIT_DEF120    dead %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec121    dead %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, implicit $exec122    dead %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, implicit $exec123    dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, implicit $exec124...125 126# GCN-LABEL: {{^}}name: subreg_dead{{$}}127# GCN:       undef %2.sub0:vreg_64 = GLOBAL_LOAD_DWORD %0, 16, 0, implicit $exec128# GCN-NEXT:  dead %2.sub1:vreg_64 = GLOBAL_LOAD_DWORD %0, 32, 0, implicit $exec129# GCN-NEXT: KILL %0{{$}}130# GCN-NEXT: GLOBAL_STORE_DWORD %1, %2.sub0, 0, 0, implicit $exec131 132---133name:            subreg_dead134tracksRegLiveness: true135body:             |136  bb.0:137    %0:vreg_64 = IMPLICIT_DEF138    %1:vreg_64 = IMPLICIT_DEF139    undef %2.sub0:vreg_64 = GLOBAL_LOAD_DWORD %0, 16, 0, implicit $exec140    dead %2.sub1:vreg_64 = GLOBAL_LOAD_DWORD %0, 32, 0, implicit $exec141    GLOBAL_STORE_DWORD %1, %2.sub0, 0, 0, implicit $exec142...143 144# GCN-LABEL: {{^}}name: kill{{$}}145# GCN:      %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec146# GCN-NEXT: %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 16, 0, implicit $exec147# GCN-NEXT: KILL %1{{$}}148# GCN-NEXT: KILL %0{{$}}149 150---151name:            kill152tracksRegLiveness: true153body:             |154  bb.0:155    %0:vreg_64 = IMPLICIT_DEF156    %1:vreg_64 = IMPLICIT_DEF157    %2:vreg_64 = IMPLICIT_DEF158    %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec159    %4:vreg_128 = GLOBAL_LOAD_DWORDX4 killed %1, 16, 0, implicit $exec160    GLOBAL_STORE_DWORDX4 %2, %3, 0, 0, implicit $exec161    GLOBAL_STORE_DWORDX4 %2, %4, 16, 0, implicit $exec162...163 164# GCN-LABEL: {{^}}name: indirect{{$}}165# GCN:      %1:vreg_64 = GLOBAL_LOAD_DWORDX2 %0, 0, 0, implicit $exec166# GCN-NEXT: %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 0, 0, implicit $exec167# GCN-NEXT: %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 16, 0, implicit $exec168# GCN-NEXT: KILL %1{{$}}169 170---171name:            indirect172tracksRegLiveness: true173registers:174  - { id: 0, class: vreg_64 }175  - { id: 1, class: vreg_64 }176  - { id: 2, class: vreg_128 }177  - { id: 3, class: vreg_128 }178body:             |179  bb.0:180    %0 = IMPLICIT_DEF181    %1:vreg_64 = GLOBAL_LOAD_DWORDX2 %0, 0, 0, implicit $exec182    %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 0, 0, implicit $exec183    %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 16, 0, implicit $exec184    GLOBAL_STORE_DWORDX4 %0, %2, 0, 0, implicit $exec185    GLOBAL_STORE_DWORDX4 %0, %3, 16, 0, implicit $exec186...187 188# GCN-LABEL: {{^}}name: stack{{$}}189# GCN:      %0:vreg_64 = IMPLICIT_DEF190# GCN-NEXT: %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %stack.0, 0, 0, implicit $exec191# GCN-NEXT: %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %stack.0, 16, 0, implicit $exec192# GCN-NEXT: GLOBAL_STORE_DWORDX4 %0, %1, 0, 0, implicit $exec193 194---195name:            stack196tracksRegLiveness: true197registers:198  - { id: 0, class: vreg_64 }199  - { id: 1, class: vreg_128 }200  - { id: 2, class: vreg_128 }201stack:202  - { id: 0, type: default, offset: 0, size: 64, alignment: 8 }203body:             |204  bb.0:205    %0 = IMPLICIT_DEF206    %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %stack.0, 0, 0, implicit $exec207    %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %stack.0, 16, 0, implicit $exec208    GLOBAL_STORE_DWORDX4 %0, %1, 0, 0, implicit $exec209    GLOBAL_STORE_DWORDX4 %0, %2, 16, 0, implicit $exec210...211 212# GCN-LABEL: {{^}}name: overflow_counter{{$}}213# GCN:      dead %2:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec214# GCN-NEXT: dead %3:vgpr_32 = GLOBAL_LOAD_DWORD %0, 4, 0, implicit $exec215# GCN-NEXT: dead %4:vgpr_32 = GLOBAL_LOAD_DWORD %0, 8, 0, implicit $exec216# GCN-NEXT: dead %5:vgpr_32 = GLOBAL_LOAD_DWORD %0, 12, 0, implicit $exec217# GCN-NEXT: dead %6:vgpr_32 = GLOBAL_LOAD_DWORD %0, 16, 0, implicit $exec218# GCN-NEXT: dead %7:vgpr_32 = GLOBAL_LOAD_DWORD %0, 20, 0, implicit $exec219# GCN-NEXT: dead %8:vgpr_32 = GLOBAL_LOAD_DWORD %0, 24, 0, implicit $exec220# GCN-NEXT: dead %9:vgpr_32 = GLOBAL_LOAD_DWORD %0, 28, 0, implicit $exec221# GCN-NEXT: dead %10:vgpr_32 = GLOBAL_LOAD_DWORD %0, 32, 0, implicit $exec222# GCN-NEXT: dead %11:vgpr_32 = GLOBAL_LOAD_DWORD %0, 36, 0, implicit $exec223# GCN-NEXT: dead %12:vgpr_32 = GLOBAL_LOAD_DWORD %0, 40, 0, implicit $exec224# GCN-NEXT: dead %13:vgpr_32 = GLOBAL_LOAD_DWORD %0, 44, 0, implicit $exec225# GCN-NEXT: dead %14:vgpr_32 = GLOBAL_LOAD_DWORD %0, 48, 0, implicit $exec226# GCN-NEXT: dead %15:vgpr_32 = GLOBAL_LOAD_DWORD %0, 52, 0, implicit $exec227# GCN-NEXT: dead %16:vgpr_32 = GLOBAL_LOAD_DWORD %0, 56, 0, implicit $exec228# GCN-NEXT: KILL %0{{$}}229# GCN-NEXT: dead %17:vgpr_32 = GLOBAL_LOAD_DWORD %1, 60, 0, implicit $exec230# GCN-NEXT: dead %18:vgpr_32 = GLOBAL_LOAD_DWORD %1, 64, 0, implicit $exec231# GCN-NEXT: KILL %1{{$}}232 233---234name:            overflow_counter235tracksRegLiveness: true236body:             |237  bb.0:238    %0:vreg_64 = IMPLICIT_DEF239    %1:vreg_64 = IMPLICIT_DEF240    %2:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec241    %3:vgpr_32 = GLOBAL_LOAD_DWORD %0, 4, 0, implicit $exec242    %4:vgpr_32 = GLOBAL_LOAD_DWORD %0, 8, 0, implicit $exec243    %5:vgpr_32 = GLOBAL_LOAD_DWORD %0, 12, 0, implicit $exec244    %6:vgpr_32 = GLOBAL_LOAD_DWORD %0, 16, 0, implicit $exec245    %7:vgpr_32 = GLOBAL_LOAD_DWORD %0, 20, 0, implicit $exec246    %8:vgpr_32 = GLOBAL_LOAD_DWORD %0, 24, 0, implicit $exec247    %9:vgpr_32 = GLOBAL_LOAD_DWORD %0, 28, 0, implicit $exec248    %10:vgpr_32 = GLOBAL_LOAD_DWORD %0, 32, 0, implicit $exec249    %11:vgpr_32 = GLOBAL_LOAD_DWORD %0, 36, 0, implicit $exec250    %12:vgpr_32 = GLOBAL_LOAD_DWORD %0, 40, 0, implicit $exec251    %13:vgpr_32 = GLOBAL_LOAD_DWORD %0, 44, 0, implicit $exec252    %14:vgpr_32 = GLOBAL_LOAD_DWORD %0, 48, 0, implicit $exec253    %15:vgpr_32 = GLOBAL_LOAD_DWORD %0, 52, 0, implicit $exec254    %16:vgpr_32 = GLOBAL_LOAD_DWORD %0, 56, 0, implicit $exec255    %17:vgpr_32 = GLOBAL_LOAD_DWORD %1, 60, 0, implicit $exec256    %18:vgpr_32 = GLOBAL_LOAD_DWORD %1, 64, 0, implicit $exec257...258 259# GCN-LABEL: {{^}}name: reg_pressure{{$}}260# GCN:      dead %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec261# GCN-NEXT: dead %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, implicit $exec262# GCN-NEXT: dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, implicit $exec263# GCN-NEXT: dead %5:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, implicit $exec264# GCN-NEXT: dead %6:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 64, 0, implicit $exec265# GCN-NEXT: dead %7:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 80, 0, implicit $exec266# GCN-NEXT: dead %8:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 96, 0, implicit $exec267# GCN-NEXT: dead %9:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 128, 0, implicit $exec268# GCN-NEXT: dead %10:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 144, 0, implicit $exec269# GCN-NEXT: KILL %1{{$}}270# GCN-NEXT: KILL %0{{$}}271 272---273name:            reg_pressure274tracksRegLiveness: true275body:             |276  bb.0:277    %0:vreg_64 = IMPLICIT_DEF278    %1:vreg_64 = IMPLICIT_DEF279    %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec280    %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, implicit $exec281    %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, implicit $exec282    %5:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, implicit $exec283    %6:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 64, 0, implicit $exec284    %7:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 80, 0, implicit $exec285    %8:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 96, 0, implicit $exec286    %9:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 128, 0, implicit $exec287    %10:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 144, 0, implicit $exec288...289 290# GCN-LABEL: {{^}}name: image_clause{{$}}291# GCN:      %3:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sgpr_128, 15, 0, 0, 0, 0, 0, 0, 0, implicit $exec292# GCN-NEXT: %4:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sgpr_128, 15, 0, 0, 0, 0, 0, 0, 0, implicit $exec293# GCN-NEXT: %5:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sgpr_128, 15, 0, 0, 0, 0, 0, 0, 0, implicit $exec294# GCN-NEXT: KILL undef %2:sgpr_128{{$}}295# GCN-NEXT: IMAGE_STORE_V4_V2 %3, %0, %1, 15, -1, 0, 0, 0, 0, 0, 0, implicit $exec296 297---298name:            image_clause299tracksRegLiveness: true300registers:301  - { id: 0, class: vreg_64 }302  - { id: 1, class: sgpr_256 }303  - { id: 2, class: sgpr_128 }304  - { id: 3, class: vreg_128 }305  - { id: 4, class: vreg_128 }306  - { id: 5, class: vreg_128 }307body:             |308  bb.0:309    %0 = IMPLICIT_DEF310    %1 = IMPLICIT_DEF311    %3:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sgpr_128, 15, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load (s128))312    %4:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sgpr_128, 15, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load (s128))313    %5:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sgpr_128, 15, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load (s128))314    IMAGE_STORE_V4_V2 %3, %0, %1, 15, -1, 0, 0, 0, 0, 0, 0, implicit $exec :: (store (s128))315    IMAGE_STORE_V4_V2 %4, %0, %1, 15, -1, 0, 0, 0, 0, 0, 0, implicit $exec :: (store (s128))316    IMAGE_STORE_V4_V2 %5, %0, %1, 15, -1, 0, 0, 0, 0, 0, 0, implicit $exec :: (store (s128))317...318 319# GCN-LABEL: {{^}}name: mixed_clause{{$}}320# GCN:      dead %3:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, %2, 15, 0, 0, 0, 0, 0, 0, 0, implicit $exec321# GCN-NEXT: dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec322# GCN-NEXT: dead %5:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET %2, 0, 0, 0, 0, implicit $exec323# GCN-NEXT: KILL %1{{$}}324# GCN-NEXT: KILL %2{{$}}325# GCN-NEXT: KILL %0{{$}}326 327---328name:            mixed_clause329tracksRegLiveness: true330registers:331  - { id: 0, class: vreg_64 }332  - { id: 1, class: sgpr_256 }333  - { id: 2, class: sgpr_128 }334  - { id: 3, class: vreg_128 }335  - { id: 4, class: vreg_128 }336  - { id: 5, class: vgpr_32 }337body:             |338  bb.0:339    %0 = IMPLICIT_DEF340    %1 = IMPLICIT_DEF341    %2 = IMPLICIT_DEF342    %3:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, %2, 15, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load (s128))343    %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec344    %5:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET %2, 0, 0, 0, 0, implicit $exec345...346 347# GCN-LABEL: {{^}}name: atomic{{$}}348# GCN:      %1:vgpr_32 = IMPLICIT_DEF349# GCN-NEXT: dead %2:vgpr_32 = FLAT_ATOMIC_ADD_RTN %0, %1, 0, 2, implicit $exec, implicit $flat_scr350# GCN-NEXT: dead %3:vgpr_32 = FLAT_ATOMIC_ADD_RTN %0, %1, 0, 2, implicit $exec, implicit $flat_scr351# GCN-NEXT: FLAT_ATOMIC_ADD %0, %1, 0, 0, implicit $exec, implicit $flat_scr352# GCN-NEXT: FLAT_ATOMIC_ADD %0, %1, 0, 0, implicit $exec, implicit $flat_scr353# GCN-NEXT: S_ENDPGM 0354 355---356name:            atomic357tracksRegLiveness: true358registers:359  - { id: 0, class: vreg_64 }360  - { id: 1, class: vgpr_32 }361  - { id: 2, class: vgpr_32 }362  - { id: 3, class: vgpr_32 }363body:             |364  bb.0:365    %0 = IMPLICIT_DEF366    %1 = IMPLICIT_DEF367    %2:vgpr_32 = FLAT_ATOMIC_ADD_RTN %0, %1, 0, 2, implicit $exec, implicit $flat_scr368    %3:vgpr_32 = FLAT_ATOMIC_ADD_RTN %0, %1, 0, 2, implicit $exec, implicit $flat_scr369    FLAT_ATOMIC_ADD %0, %1, 0, 0, implicit $exec, implicit $flat_scr370    FLAT_ATOMIC_ADD %0, %1, 0, 0, implicit $exec, implicit $flat_scr371    S_ENDPGM 0372...373 374# One of the pointers has an additional use after the clause, but one375# doesn't. Only the final use should be killed.376 377# GCN-LABEL: {{^}}name: ptr_use_after_clause{{$}}378# GCN: dead %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec379# GCN-NEXT: dead %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 16, 0, implicit $exec380# GCN-NEXT: dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, implicit $exec381# GCN-NEXT: dead %5:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 48, 0, implicit $exec382# GCN-NEXT: KILL %1{{$}}383# GCN-NEXT: S_NOP 0, implicit %0384---385name:            ptr_use_after_clause386tracksRegLiveness: true387body:             |388  bb.0:389    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3390    %0:vreg_64 = COPY $vgpr0_vgpr1391    %1:vreg_64 = COPY $vgpr2_vgpr3392    %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec393    %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 16, 0, implicit $exec394    %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, implicit $exec395    %5:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 48, 0, implicit $exec396    S_NOP 0, implicit %0397...398 399# Only part of the register is really live past the clause.400# GCN-LABEL: {{^}}name: ptr_use_after_clause_subreg{{$}}401# GCN: dead %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 0, 0, implicit $exec402# GCN-NEXT: dead %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub2_sub3, 16, 0, implicit $exec403# GCN-NEXT: dead %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 32, 0, implicit $exec404# GCN-NEXT: dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub2_sub3, 48, 0, implicit $exec405# GCN-NEXT: KILL %0.sub2_sub3{{$}}406# GCN-NEXT: S_NOP 0, implicit %0.sub0_sub1{{$}}407---408name:            ptr_use_after_clause_subreg409tracksRegLiveness: true410body:             |411  bb.0:412    liveins: $vgpr0_vgpr1_vgpr2_vgpr3413    %0:vreg_128 = COPY $vgpr0_vgpr1_vgpr2_vgpr3414    %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 0, 0, implicit $exec415    %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub2_sub3, 16, 0, implicit $exec416    %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 32, 0, implicit $exec417    %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub2_sub3, 48, 0, implicit $exec418    S_NOP 0, implicit %0.sub0_sub1419...420 421# More complex situation where only some of the use subregisters live422# beyond the clause.423 424# GCN-LABEL: {{^}}name: ptr_use_after_clause_subreg_multi{{$}}425# GCN: dead %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 0, 0, implicit $exec426# GCN-NEXT: dead %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub2_sub3, 16, 0, implicit $exec427# GCN-NEXT: dead %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub3_sub4, 32, 0, implicit $exec428# GCN-NEXT: dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub6_sub7, 48, 0, implicit $exec429# GCN-NEXT: KILL %0.sub2_sub3_sub4, %0.sub7{{$}}430# GCN-NEXT: S_NOP 0, implicit %0.sub0_sub1, implicit %0.sub5_sub6431---432name:            ptr_use_after_clause_subreg_multi433tracksRegLiveness: true434body:             |435  bb.0:436    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7437    %0:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7438    %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 0, 0, implicit $exec439    %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub2_sub3, 16, 0, implicit $exec440    %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub3_sub4, 32, 0, implicit $exec441    %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub6_sub7, 48, 0, implicit $exec442    S_NOP 0, implicit %0.sub0_sub1, implicit %0.sub5_sub6443...444 445# Have subranges, but none of them are killed446# GCN-LABEL: {{^}}name: no_killed_subranges{{$}}447# GCN: dead %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 0, 0, implicit $exec448# GCN-NEXT: dead %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub2_sub3, 16, 0, implicit $exec449# GCN-NEXT: dead %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 32, 0, implicit $exec450# GCN-NEXT: dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub2_sub3, 48, 0, implicit $exec451# GCN-NEXT: S_NOP 0, implicit %0.sub0_sub1{{$}}452# GCN-NEXT: S_NOP 0, implicit %0.sub2_sub3{{$}}453---454name:            no_killed_subranges455tracksRegLiveness: true456body:             |457  bb.0:458    liveins: $vgpr0_vgpr1_vgpr2_vgpr3459    %0:vreg_128 = COPY $vgpr0_vgpr1_vgpr2_vgpr3460    %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 0, 0, implicit $exec461    %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub2_sub3, 16, 0, implicit $exec462    %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 32, 0, implicit $exec463    %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub2_sub3, 48, 0, implicit $exec464    S_NOP 0, implicit %0.sub0_sub1465    S_NOP 0, implicit %0.sub2_sub3466...467 468# sub2 is undef at entry to the soft clause. It should not be have its469# live range extended.470 471# GCN-LABEL: name: no_killed_undef_subrange_use472# GCN:      dead %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 0, 0, implicit $exec473# GCN-NEXT: dead %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 32, 0, implicit $exec474# GCN-NEXT: KILL %0.sub0_sub1{{$}}475# GCN-NEXT: %0.sub2:vreg_128 = V_MOV_B32_e32 0, implicit $exec476# GCN-NEXT: S_NOP 0, implicit %0.sub2477---478name:            no_killed_undef_subrange_use479tracksRegLiveness: true480body:             |481  bb.0:482    liveins: $vgpr0_vgpr1483    undef %0.sub0_sub1:vreg_128 = COPY $vgpr0_vgpr1484    %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 0, 0, implicit $exec485    %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0.sub0_sub1, 32, 0, implicit $exec486    %0.sub2:vreg_128 = V_MOV_B32_e32 0, implicit $exec487    S_NOP 0, implicit %0.sub2488...489 490# Make sure intervening implicit_defs are not treated as breaking the491# clause492#493# GCN-LABEL: {{^}}name: implicit_def_no_break{{$}}494# GCN: %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec495# GCN-NEXT: %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, implicit $exec496# GCN-NEXT: %3:vreg_64 = IMPLICIT_DEF497# GCN-NEXT: %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %3, 32, 0, implicit $exec498# GCN-NEXT: %5:vreg_128 = GLOBAL_LOAD_DWORDX4 %3, 48, 0, implicit $exec499# GCN-NEXT: KILL %3{{$}}500# GCN-NEXT: KILL %0{{$}}501---502name:            implicit_def_no_break503tracksRegLiveness: true504body:             |505  bb.0:506    liveins: $vgpr0_vgpr1507    %0:vreg_64 = COPY $vgpr0_vgpr1508    %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec509    %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, implicit $exec510    %3:vreg_64 = IMPLICIT_DEF511    %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %3, 32, 0, implicit $exec512    %5:vreg_128 = GLOBAL_LOAD_DWORDX4 %3, 48, 0, implicit $exec513    S_NOP 0, implicit %1, implicit %2, implicit %4, implicit %5514...515 516# GCN-LABEL: {{^}}name: kill_part_subreg{{$}}517# GCN: undef %1.sub0:vreg_128 = GLOBAL_LOAD_DWORD %0.sub0_sub1, 0, 0, implicit $exec518# GCN-NEXT: %1.sub1:vreg_128 = GLOBAL_LOAD_DWORD %0.sub1_sub2, 16, 0, implicit $exec519# GCN-NEXT: %1.sub3:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, implicit $exec520# GCN-NEXT: KILL %0.sub0_sub1_sub2, %0.sub3521---522name:            kill_part_subreg523tracksRegLiveness: true524body:             |525  bb.0:526    liveins: $vgpr0_vgpr1_vgpr2_vgpr3527    %0:vreg_128 = COPY $vgpr0_vgpr1_vgpr2_vgpr3528    undef %1.sub0:vreg_128 = GLOBAL_LOAD_DWORD %0.sub0_sub1, 0, 0, implicit $exec529    %1.sub1:vreg_128 = GLOBAL_LOAD_DWORD %0.sub1_sub2, 16, 0, implicit $exec530    %1.sub3:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, implicit $exec531    S_NOP 0, implicit %1532...533 534# GCN-LABEL: {{^}}name: mem_clause_sreg256_used_stack{{$}}535# GCN:      undef %0.sub7:sgpr_256 = S_LOAD_DWORD_IMM undef %1:sgpr_64(p4), 8, 0536# GCN-NEXT: dead %0.sub3:sgpr_256 = S_LOAD_DWORD_IMM undef %1:sgpr_64(p4), 24, 0537# GCN-NEXT:  KILL undef %1538---539name:            mem_clause_sreg256_used_stack540stack:541  - { id: 0, type: default, offset: 0, size: 40, alignment: 8 }542machineFunctionInfo:543  isEntryFunction: true544  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'545  stackPtrOffsetReg: '$sgpr32'546body:             |547  bb.0:548 549    undef %0.sub7:sgpr_256 = S_LOAD_DWORD_IMM undef %1:sgpr_64(p4), 8, 0550    %0.sub3:sgpr_256 = S_LOAD_DWORD_IMM undef %1:sgpr_64(p4), 24, 0551    S_ENDPGM 0552 553...554