brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.2 KiB · f9ff3dd Raw
249 lines · plain
1; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -enable-misched=0 -post-RA-scheduler=0 -stress-regalloc=8 < %s | FileCheck %s -check-prefixes=GCN,MUBUF2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -enable-misched=0 -post-RA-scheduler=0 -stress-regalloc=8 -mattr=+enable-flat-scratch < %s | FileCheck %s -check-prefixes=GCN,FLATSCR3 4; GCN-LABEL: spill_v2i32:5; MUBUF-DAG: buffer_store_dword v{{.*}} offset:16 ; 4-byte Folded Spill6; MUBUF-DAG: buffer_store_dword v{{.*}} offset:20 ; 4-byte Folded Spill7; FLATSCR:   scratch_store_dwordx2 off, v{{.*}} offset:16 ; 8-byte Folded Spill8; FLATSCR-NOT: scratch_store_dword9; GCN: ;;#ASMSTART10; GCN-NEXT: ;;#ASMEND11; MUBUF-DAG: buffer_load_dword v{{.*}} offset:16 ; 4-byte Folded Reload12; MUBUF-DAG: buffer_load_dword v{{.*}} offset:20 ; 4-byte Folded Reload13; FLATSCR:   scratch_load_dwordx2 v{{.*}} offset:16 ; 8-byte Folded Reload14; FLATSCR-NOT: scratch_load_dword15 16define void @spill_v2i32() {17entry:18  %alloca = alloca <2 x i32>, i32 2, align 4, addrspace(5)19 20  %aptr = getelementptr <2 x i32>, ptr addrspace(5) %alloca, i32 121  %a = load volatile <2 x i32>, ptr addrspace(5) %aptr22 23  ; Force %a to spill.24  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()25 26  %outptr = getelementptr <2 x i32>, ptr addrspace(5) %alloca, i32 127  store volatile <2 x i32> %a, ptr addrspace(5) %outptr28 29  ret void30}31 32; GCN-LABEL: spill_v2f32:33; MUBUF-DAG: buffer_store_dword v{{.*}} offset:16 ; 4-byte Folded Spill34; MUBUF-DAG: buffer_store_dword v{{.*}} offset:20 ; 4-byte Folded Spill35; FLATSCR:   scratch_store_dwordx2 off, v{{.*}} offset:16 ; 8-byte Folded Spill36; FLATSCR-NOT: scratch_store_dword37; GCN: ;;#ASMSTART38; GCN-NEXT: ;;#ASMEND39; MUBUF-DAG: buffer_load_dword v{{.*}} offset:16 ; 4-byte Folded Reload40; MUBUF-DAG: buffer_load_dword v{{.*}} offset:20 ; 4-byte Folded Reload41; FLATSCR:   scratch_load_dwordx2 v{{.*}} offset:16 ; 8-byte Folded Reload42; FLATSCR-NOT: scratch_load_dword43 44define void @spill_v2f32() {45entry:46  %alloca = alloca <2 x i32>, i32 2, align 4, addrspace(5)47 48  %aptr = getelementptr <2 x i32>, ptr addrspace(5) %alloca, i32 149  %a = load volatile <2 x i32>, ptr addrspace(5) %aptr50 51  ; Force %a to spill.52  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()53 54  %outptr = getelementptr <2 x i32>, ptr addrspace(5) %alloca, i32 155  store volatile <2 x i32> %a, ptr addrspace(5) %outptr56 57  ret void58}59 60; GCN-LABEL: spill_v3i32:61; MUBUF-DAG: buffer_store_dword v{{.*}} offset:32 ; 4-byte Folded Spill62; MUBUF-DAG: buffer_store_dword v{{.*}} offset:36 ; 4-byte Folded Spill63; MUBUF-DAG: buffer_store_dword v{{.*}} offset:40 ; 4-byte Folded Spill64; FLATSCR:   scratch_store_dwordx3 off, v{{.*}} offset:32 ; 12-byte Folded Spill65; FLATSCR-NOT: scratch_store_dword66; GCN: ;;#ASMSTART67; GCN-NEXT: ;;#ASMEND68; MUBUF-DAG: buffer_load_dword v{{.*}} offset:32 ; 4-byte Folded Reload69; MUBUF-DAG: buffer_load_dword v{{.*}} offset:36 ; 4-byte Folded Reload70; MUBUF-DAG: buffer_load_dword v{{.*}} offset:40 ; 4-byte Folded Reload71; FLATSCR:   scratch_load_dwordx3 v{{.*}} offset:32 ; 12-byte Folded Reload72; FLATSCR-NOT: scratch_load_dword73 74define void @spill_v3i32() {75entry:76  %alloca = alloca <3 x i32>, i32 2, align 4, addrspace(5)77 78  %aptr = getelementptr <3 x i32>, ptr addrspace(5) %alloca, i32 179  %a = load volatile <3 x i32>, ptr addrspace(5) %aptr80 81  ; Force %a to spill.82  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()83 84  %outptr = getelementptr <3 x i32>, ptr addrspace(5) %alloca, i32 185  store volatile <3 x i32> %a, ptr addrspace(5) %outptr86 87  ret void88}89 90; GCN-LABEL: spill_v3f32:91; MUBUF-DAG: buffer_store_dword v{{.*}} offset:32 ; 4-byte Folded Spill92; MUBUF-DAG: buffer_store_dword v{{.*}} offset:36 ; 4-byte Folded Spill93; MUBUF-DAG: buffer_store_dword v{{.*}} offset:40 ; 4-byte Folded Spill94; FLATSCR:   scratch_store_dwordx3 off, v{{.*}} offset:32 ; 12-byte Folded Spill95; FLATSCR-NOT: scratch_store_dword96; GCN: ;;#ASMSTART97; GCN-NEXT: ;;#ASMEND98; MUBUF-DAG: buffer_load_dword v{{.*}} offset:32 ; 4-byte Folded Reload99; MUBUF-DAG: buffer_load_dword v{{.*}} offset:36 ; 4-byte Folded Reload100; MUBUF-DAG: buffer_load_dword v{{.*}} offset:40 ; 4-byte Folded Reload101; FLATSCR:   scratch_load_dwordx3 v{{.*}} offset:32 ; 12-byte Folded Reload102; FLATSCR-NOT: scratch_load_dword103 104define void @spill_v3f32() {105entry:106  %alloca = alloca <3 x i32>, i32 2, align 4, addrspace(5)107 108  %aptr = getelementptr <3 x i32>, ptr addrspace(5) %alloca, i32 1109  %a = load volatile <3 x i32>, ptr addrspace(5) %aptr110 111  ; Force %a to spill.112  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()113 114  %outptr = getelementptr <3 x i32>, ptr addrspace(5) %alloca, i32 1115  store volatile <3 x i32> %a, ptr addrspace(5) %outptr116 117  ret void118}119 120; GCN-LABEL: spill_v4i32:121; MUBUF-DAG: buffer_store_dword v{{.*}} offset:32 ; 4-byte Folded Spill122; MUBUF-DAG: buffer_store_dword v{{.*}} offset:36 ; 4-byte Folded Spill123; MUBUF-DAG: buffer_store_dword v{{.*}} offset:40 ; 4-byte Folded Spill124; MUBUF-DAG: buffer_store_dword v{{.*}} offset:44 ; 4-byte Folded Spill125; FLATSCR:   scratch_store_dwordx4 off, v{{.*}} offset:32 ; 16-byte Folded Spill126; FLATSCR-NOT: scratch_store_dword127; GCN: ;;#ASMSTART128; GCN-NEXT: ;;#ASMEND129; MUBUF-DAG: buffer_load_dword v{{.*}} offset:32 ; 4-byte Folded Reload130; MUBUF-DAG: buffer_load_dword v{{.*}} offset:36 ; 4-byte Folded Reload131; MUBUF-DAG: buffer_load_dword v{{.*}} offset:40 ; 4-byte Folded Reload132; MUBUF-DAG: buffer_load_dword v{{.*}} offset:44 ; 4-byte Folded Reload133; FLATSCR:   scratch_load_dwordx4 v{{.*}} offset:32 ; 16-byte Folded Reload134; FLATSCR-NOT: scratch_load_dword135 136define void @spill_v4i32() {137entry:138  %alloca = alloca <4 x i32>, i32 2, align 4, addrspace(5)139 140  %aptr = getelementptr <4 x i32>, ptr addrspace(5) %alloca, i32 1141  %a = load volatile <4 x i32>, ptr addrspace(5) %aptr142 143  ; Force %a to spill.144  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()145 146  %outptr = getelementptr <4 x i32>, ptr addrspace(5) %alloca, i32 1147  store volatile <4 x i32> %a, ptr addrspace(5) %outptr148 149  ret void150}151 152; GCN-LABEL: spill_v4f32:153; MUBUF-DAG: buffer_store_dword v{{.*}} offset:32 ; 4-byte Folded Spill154; MUBUF-DAG: buffer_store_dword v{{.*}} offset:36 ; 4-byte Folded Spill155; MUBUF-DAG: buffer_store_dword v{{.*}} offset:40 ; 4-byte Folded Spill156; MUBUF-DAG: buffer_store_dword v{{.*}} offset:44 ; 4-byte Folded Spill157; FLATSCR:   scratch_store_dwordx4 off, v{{.*}} offset:32 ; 16-byte Folded Spill158; FLATSCR-NOT: scratch_store_dword159; GCN: ;;#ASMSTART160; GCN-NEXT: ;;#ASMEND161; MUBUF-DAG: buffer_load_dword v{{.*}} offset:32 ; 4-byte Folded Reload162; MUBUF-DAG: buffer_load_dword v{{.*}} offset:36 ; 4-byte Folded Reload163; MUBUF-DAG: buffer_load_dword v{{.*}} offset:40 ; 4-byte Folded Reload164; MUBUF-DAG: buffer_load_dword v{{.*}} offset:44 ; 4-byte Folded Reload165; FLATSCR:   scratch_load_dwordx4 v{{.*}} offset:32 ; 16-byte Folded Reload166; FLATSCR-NOT: scratch_load_dword167 168define void @spill_v4f32() {169entry:170  %alloca = alloca <4 x i32>, i32 2, align 4, addrspace(5)171 172  %aptr = getelementptr <4 x i32>, ptr addrspace(5) %alloca, i32 1173  %a = load volatile <4 x i32>, ptr addrspace(5) %aptr174 175  ; Force %a to spill.176  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()177 178  %outptr = getelementptr <4 x i32>, ptr addrspace(5) %alloca, i32 1179  store volatile <4 x i32> %a, ptr addrspace(5) %outptr180 181  ret void182}183 184; GCN-LABEL: spill_v5i32:185; MUBUF-DAG: buffer_store_dword v{{.*}} offset:64 ; 4-byte Folded Spill186; MUBUF-DAG: buffer_store_dword v{{.*}} offset:68 ; 4-byte Folded Spill187; MUBUF-DAG: buffer_store_dword v{{.*}} offset:72 ; 4-byte Folded Spill188; MUBUF-DAG: buffer_store_dword v{{.*}} offset:76 ; 4-byte Folded Spill189; FLATSCR-DAG: scratch_store_dwordx4 off, v{{.*}} offset:64 ; 16-byte Folded Spill190; FLATSCR-DAG: scratch_store_dword off, v{{.*}} offset:80 ; 4-byte Folded Spill191; FLATSCR-NOT: scratch_store_dword192; GCN: ;;#ASMSTART193; GCN-NEXT: ;;#ASMEND194; MUBUF-DAG: buffer_load_dword v{{.*}} offset:64 ; 4-byte Folded Reload195; MUBUF-DAG: buffer_load_dword v{{.*}} offset:68 ; 4-byte Folded Reload196; MUBUF-DAG: buffer_load_dword v{{.*}} offset:72 ; 4-byte Folded Reload197; MUBUF-DAG: buffer_load_dword v{{.*}} offset:76 ; 4-byte Folded Reload198; FLATSCR-DAG: scratch_load_dwordx4 v{{.*}} offset:64 ; 16-byte Folded Reload199; FLATSCR-DAG: scratch_load_dword v{{.*}} offset:80 ; 4-byte Folded Reload200; FLATSCR-NOT: scratch_load_dword201define void @spill_v5i32() {202entry:203  %alloca = alloca <5 x i32>, i32 2, align 4, addrspace(5)204 205  %aptr = getelementptr <5 x i32>, ptr addrspace(5) %alloca, i32 1206  %a = load volatile <5 x i32>, ptr addrspace(5) %aptr207 208  ; Force %a to spill.209  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()210 211  %outptr = getelementptr <5 x i32>, ptr addrspace(5) %alloca, i32 1212  store volatile <5 x i32> %a, ptr addrspace(5) %outptr213 214  ret void215}216 217; GCN-LABEL: spill_v5f32:218; MUBUF-DAG: buffer_store_dword v{{.*}} offset:64 ; 4-byte Folded Spill219; MUBUF-DAG: buffer_store_dword v{{.*}} offset:68 ; 4-byte Folded Spill220; MUBUF-DAG: buffer_store_dword v{{.*}} offset:72 ; 4-byte Folded Spill221; MUBUF-DAG: buffer_store_dword v{{.*}} offset:76 ; 4-byte Folded Spill222; FLATSCR-DAG: scratch_store_dwordx4 off, v{{.*}} offset:64 ; 16-byte Folded Spill223; FLATSCR-DAG: scratch_store_dword off, v{{.*}} offset:80 ; 4-byte Folded Spill224; FLATSCR-NOT: scratch_store_dword225; GCN: ;;#ASMSTART226; GCN-NEXT: ;;#ASMEND227; MUBUF-DAG: buffer_load_dword v{{.*}} offset:64 ; 4-byte Folded Reload228; MUBUF-DAG: buffer_load_dword v{{.*}} offset:68 ; 4-byte Folded Reload229; MUBUF-DAG: buffer_load_dword v{{.*}} offset:72 ; 4-byte Folded Reload230; MUBUF-DAG: buffer_load_dword v{{.*}} offset:76 ; 4-byte Folded Reload231; FLATSCR-DAG: scratch_load_dwordx4 v{{.*}} offset:64 ; 16-byte Folded Reload232; FLATSCR-DAG: scratch_load_dword v{{.*}} offset:80 ; 4-byte Folded Reload233; FLATSCR-NOT: scratch_load_dword234define void @spill_v5f32() {235entry:236  %alloca = alloca <5 x i32>, i32 2, align 4, addrspace(5)237 238  %aptr = getelementptr <5 x i32>, ptr addrspace(5) %alloca, i32 1239  %a = load volatile <5 x i32>, ptr addrspace(5) %aptr240 241  ; Force %a to spill.242  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()243 244  %outptr = getelementptr <5 x i32>, ptr addrspace(5) %alloca, i32 1245  store volatile <5 x i32> %a, ptr addrspace(5) %outptr246 247  ret void248}249