brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.3 KiB · fcf2aa4 Raw
234 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O0 -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii < %s | FileCheck -check-prefix=GCN %s3 4; The first 64 SGPR spills can go to a VGPR, but there isn't a second5; so some spills must be to memory. The last 16 element spill runs out of lanes at the 15th element.6 7define amdgpu_kernel void @partial_no_vgprs_last_sgpr_spill(ptr addrspace(1) %out, i32 %in) #1 {8; GCN-LABEL: partial_no_vgprs_last_sgpr_spill:9; GCN:       ; %bb.0:10; GCN-NEXT:    s_add_u32 s0, s0, s1711; GCN-NEXT:    s_addc_u32 s1, s1, 012; GCN-NEXT:    s_load_dword s4, s[8:9], 0x213; GCN-NEXT:    ;;#ASMSTART14; GCN-NEXT:    ;;#ASMEND15; GCN-NEXT:    ;;#ASMSTART16; GCN-NEXT:    ;;#ASMEND17; GCN-NEXT:    ;;#ASMSTART18; GCN-NEXT:    ;;#ASMEND19; GCN-NEXT:    ;;#ASMSTART20; GCN-NEXT:    ;;#ASMEND21; GCN-NEXT:    ;;#ASMSTART22; GCN-NEXT:    ; def s[8:23]23; GCN-NEXT:    ;;#ASMEND24; GCN-NEXT:    ; implicit-def: $vgpr22 : SGPR spill to VGPR lane25; GCN-NEXT:    v_writelane_b32 v22, s8, 026; GCN-NEXT:    v_writelane_b32 v22, s9, 127; GCN-NEXT:    v_writelane_b32 v22, s10, 228; GCN-NEXT:    v_writelane_b32 v22, s11, 329; GCN-NEXT:    v_writelane_b32 v22, s12, 430; GCN-NEXT:    v_writelane_b32 v22, s13, 531; GCN-NEXT:    v_writelane_b32 v22, s14, 632; GCN-NEXT:    v_writelane_b32 v22, s15, 733; GCN-NEXT:    v_writelane_b32 v22, s16, 834; GCN-NEXT:    v_writelane_b32 v22, s17, 935; GCN-NEXT:    v_writelane_b32 v22, s18, 1036; GCN-NEXT:    v_writelane_b32 v22, s19, 1137; GCN-NEXT:    v_writelane_b32 v22, s20, 1238; GCN-NEXT:    v_writelane_b32 v22, s21, 1339; GCN-NEXT:    v_writelane_b32 v22, s22, 1440; GCN-NEXT:    v_writelane_b32 v22, s23, 1541; GCN-NEXT:    ;;#ASMSTART42; GCN-NEXT:    ; def s[8:23]43; GCN-NEXT:    ;;#ASMEND44; GCN-NEXT:    v_writelane_b32 v22, s8, 1645; GCN-NEXT:    v_writelane_b32 v22, s9, 1746; GCN-NEXT:    v_writelane_b32 v22, s10, 1847; GCN-NEXT:    v_writelane_b32 v22, s11, 1948; GCN-NEXT:    v_writelane_b32 v22, s12, 2049; GCN-NEXT:    v_writelane_b32 v22, s13, 2150; GCN-NEXT:    v_writelane_b32 v22, s14, 2251; GCN-NEXT:    v_writelane_b32 v22, s15, 2352; GCN-NEXT:    v_writelane_b32 v22, s16, 2453; GCN-NEXT:    v_writelane_b32 v22, s17, 2554; GCN-NEXT:    v_writelane_b32 v22, s18, 2655; GCN-NEXT:    v_writelane_b32 v22, s19, 2756; GCN-NEXT:    v_writelane_b32 v22, s20, 2857; GCN-NEXT:    v_writelane_b32 v22, s21, 2958; GCN-NEXT:    v_writelane_b32 v22, s22, 3059; GCN-NEXT:    v_writelane_b32 v22, s23, 3160; GCN-NEXT:    ;;#ASMSTART61; GCN-NEXT:    ; def s[8:23]62; GCN-NEXT:    ;;#ASMEND63; GCN-NEXT:    v_writelane_b32 v22, s8, 3264; GCN-NEXT:    v_writelane_b32 v22, s9, 3365; GCN-NEXT:    v_writelane_b32 v22, s10, 3466; GCN-NEXT:    v_writelane_b32 v22, s11, 3567; GCN-NEXT:    v_writelane_b32 v22, s12, 3668; GCN-NEXT:    v_writelane_b32 v22, s13, 3769; GCN-NEXT:    v_writelane_b32 v22, s14, 3870; GCN-NEXT:    v_writelane_b32 v22, s15, 3971; GCN-NEXT:    v_writelane_b32 v22, s16, 4072; GCN-NEXT:    v_writelane_b32 v22, s17, 4173; GCN-NEXT:    v_writelane_b32 v22, s18, 4274; GCN-NEXT:    v_writelane_b32 v22, s19, 4375; GCN-NEXT:    v_writelane_b32 v22, s20, 4476; GCN-NEXT:    v_writelane_b32 v22, s21, 4577; GCN-NEXT:    v_writelane_b32 v22, s22, 4678; GCN-NEXT:    v_writelane_b32 v22, s23, 4779; GCN-NEXT:    ;;#ASMSTART80; GCN-NEXT:    ; def s[8:23]81; GCN-NEXT:    ;;#ASMEND82; GCN-NEXT:    v_writelane_b32 v22, s8, 4883; GCN-NEXT:    v_writelane_b32 v22, s9, 4984; GCN-NEXT:    v_writelane_b32 v22, s10, 5085; GCN-NEXT:    v_writelane_b32 v22, s11, 5186; GCN-NEXT:    v_writelane_b32 v22, s12, 5287; GCN-NEXT:    v_writelane_b32 v22, s13, 5388; GCN-NEXT:    v_writelane_b32 v22, s14, 5489; GCN-NEXT:    v_writelane_b32 v22, s15, 5590; GCN-NEXT:    v_writelane_b32 v22, s16, 5691; GCN-NEXT:    v_writelane_b32 v22, s17, 5792; GCN-NEXT:    v_writelane_b32 v22, s18, 5893; GCN-NEXT:    v_writelane_b32 v22, s19, 5994; GCN-NEXT:    v_writelane_b32 v22, s20, 6095; GCN-NEXT:    v_writelane_b32 v22, s21, 6196; GCN-NEXT:    v_writelane_b32 v22, s22, 6297; GCN-NEXT:    v_writelane_b32 v22, s23, 6398; GCN-NEXT:    s_or_saveexec_b64 s[24:25], -199; GCN-NEXT:    buffer_store_dword v22, off, s[0:3], 0 offset:4 ; 4-byte Folded Spill100; GCN-NEXT:    s_mov_b64 exec, s[24:25]101; GCN-NEXT:    ;;#ASMSTART102; GCN-NEXT:    ; def s[6:7]103; GCN-NEXT:    ;;#ASMEND104; GCN-NEXT:    ; implicit-def: $vgpr22 : SGPR spill to VGPR lane105; GCN-NEXT:    v_writelane_b32 v22, s6, 0106; GCN-NEXT:    v_writelane_b32 v22, s7, 1107; GCN-NEXT:    s_or_saveexec_b64 s[24:25], -1108; GCN-NEXT:    buffer_store_dword v22, off, s[0:3], 0 ; 4-byte Folded Spill109; GCN-NEXT:    s_mov_b64 exec, s[24:25]110; GCN-NEXT:    s_mov_b32 s5, 0111; GCN-NEXT:    s_waitcnt lgkmcnt(0)112; GCN-NEXT:    s_cmp_lg_u32 s4, s5113; GCN-NEXT:    s_cbranch_scc1 .LBB0_2114; GCN-NEXT:  ; %bb.1: ; %bb0115; GCN-NEXT:    s_or_saveexec_b64 s[24:25], -1116; GCN-NEXT:    buffer_load_dword v23, off, s[0:3], 0 offset:4 ; 4-byte Folded Reload117; GCN-NEXT:    s_mov_b64 exec, s[24:25]118; GCN-NEXT:    s_waitcnt vmcnt(0)119; GCN-NEXT:    v_readlane_b32 s4, v23, 0120; GCN-NEXT:    v_readlane_b32 s5, v23, 1121; GCN-NEXT:    v_readlane_b32 s6, v23, 2122; GCN-NEXT:    v_readlane_b32 s7, v23, 3123; GCN-NEXT:    v_readlane_b32 s8, v23, 4124; GCN-NEXT:    v_readlane_b32 s9, v23, 5125; GCN-NEXT:    v_readlane_b32 s10, v23, 6126; GCN-NEXT:    v_readlane_b32 s11, v23, 7127; GCN-NEXT:    v_readlane_b32 s12, v23, 8128; GCN-NEXT:    v_readlane_b32 s13, v23, 9129; GCN-NEXT:    v_readlane_b32 s14, v23, 10130; GCN-NEXT:    v_readlane_b32 s15, v23, 11131; GCN-NEXT:    v_readlane_b32 s16, v23, 12132; GCN-NEXT:    v_readlane_b32 s17, v23, 13133; GCN-NEXT:    v_readlane_b32 s18, v23, 14134; GCN-NEXT:    v_readlane_b32 s19, v23, 15135; GCN-NEXT:    s_or_saveexec_b64 s[24:25], -1136; GCN-NEXT:    buffer_load_dword v22, off, s[0:3], 0 ; 4-byte Folded Reload137; GCN-NEXT:    s_mov_b64 exec, s[24:25]138; GCN-NEXT:    ;;#ASMSTART139; GCN-NEXT:    ; use s[4:19]140; GCN-NEXT:    ;;#ASMEND141; GCN-NEXT:    v_readlane_b32 s4, v23, 16142; GCN-NEXT:    v_readlane_b32 s5, v23, 17143; GCN-NEXT:    v_readlane_b32 s6, v23, 18144; GCN-NEXT:    v_readlane_b32 s7, v23, 19145; GCN-NEXT:    v_readlane_b32 s8, v23, 20146; GCN-NEXT:    v_readlane_b32 s9, v23, 21147; GCN-NEXT:    v_readlane_b32 s10, v23, 22148; GCN-NEXT:    v_readlane_b32 s11, v23, 23149; GCN-NEXT:    v_readlane_b32 s12, v23, 24150; GCN-NEXT:    v_readlane_b32 s13, v23, 25151; GCN-NEXT:    v_readlane_b32 s14, v23, 26152; GCN-NEXT:    v_readlane_b32 s15, v23, 27153; GCN-NEXT:    v_readlane_b32 s16, v23, 28154; GCN-NEXT:    v_readlane_b32 s17, v23, 29155; GCN-NEXT:    v_readlane_b32 s18, v23, 30156; GCN-NEXT:    v_readlane_b32 s19, v23, 31157; GCN-NEXT:    ;;#ASMSTART158; GCN-NEXT:    ; use s[4:19]159; GCN-NEXT:    ;;#ASMEND160; GCN-NEXT:    v_readlane_b32 s4, v23, 32161; GCN-NEXT:    v_readlane_b32 s5, v23, 33162; GCN-NEXT:    v_readlane_b32 s6, v23, 34163; GCN-NEXT:    v_readlane_b32 s7, v23, 35164; GCN-NEXT:    v_readlane_b32 s8, v23, 36165; GCN-NEXT:    v_readlane_b32 s9, v23, 37166; GCN-NEXT:    v_readlane_b32 s10, v23, 38167; GCN-NEXT:    v_readlane_b32 s11, v23, 39168; GCN-NEXT:    v_readlane_b32 s12, v23, 40169; GCN-NEXT:    v_readlane_b32 s13, v23, 41170; GCN-NEXT:    v_readlane_b32 s14, v23, 42171; GCN-NEXT:    v_readlane_b32 s15, v23, 43172; GCN-NEXT:    v_readlane_b32 s16, v23, 44173; GCN-NEXT:    v_readlane_b32 s17, v23, 45174; GCN-NEXT:    v_readlane_b32 s18, v23, 46175; GCN-NEXT:    v_readlane_b32 s19, v23, 47176; GCN-NEXT:    ;;#ASMSTART177; GCN-NEXT:    ; use s[4:19]178; GCN-NEXT:    ;;#ASMEND179; GCN-NEXT:    v_readlane_b32 s8, v23, 48180; GCN-NEXT:    v_readlane_b32 s9, v23, 49181; GCN-NEXT:    v_readlane_b32 s10, v23, 50182; GCN-NEXT:    v_readlane_b32 s11, v23, 51183; GCN-NEXT:    v_readlane_b32 s12, v23, 52184; GCN-NEXT:    v_readlane_b32 s13, v23, 53185; GCN-NEXT:    v_readlane_b32 s14, v23, 54186; GCN-NEXT:    v_readlane_b32 s15, v23, 55187; GCN-NEXT:    v_readlane_b32 s16, v23, 56188; GCN-NEXT:    v_readlane_b32 s17, v23, 57189; GCN-NEXT:    v_readlane_b32 s18, v23, 58190; GCN-NEXT:    v_readlane_b32 s19, v23, 59191; GCN-NEXT:    v_readlane_b32 s20, v23, 60192; GCN-NEXT:    v_readlane_b32 s21, v23, 61193; GCN-NEXT:    v_readlane_b32 s22, v23, 62194; GCN-NEXT:    v_readlane_b32 s23, v23, 63195; GCN-NEXT:    s_waitcnt vmcnt(0)196; GCN-NEXT:    v_readlane_b32 s4, v22, 0197; GCN-NEXT:    v_readlane_b32 s5, v22, 1198; GCN-NEXT:    ;;#ASMSTART199; GCN-NEXT:    ; use s[8:23]200; GCN-NEXT:    ;;#ASMEND201; GCN-NEXT:    ;;#ASMSTART202; GCN-NEXT:    ; use s[4:5]203; GCN-NEXT:    ;;#ASMEND204; GCN-NEXT:  .LBB0_2: ; %ret205; GCN-NEXT:    s_endpgm206  call void asm sideeffect "", "~{v[0:7]}" () #0207  call void asm sideeffect "", "~{v[8:15]}" () #0208  call void asm sideeffect "", "~{v[16:19]}"() #0209  call void asm sideeffect "", "~{v[20:21]}"() #0210 211  %wide.sgpr0 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0212  %wide.sgpr1 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0213  %wide.sgpr2 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0214  %wide.sgpr3 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0215  %wide.sgpr4 = call <2 x i32> asm sideeffect "; def $0", "=s" () #0216  %cmp = icmp eq i32 %in, 0217  br i1 %cmp, label %bb0, label %ret218 219bb0:220  call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr0) #0221  call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr1) #0222  call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr2) #0223  call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr3) #0224  call void asm sideeffect "; use $0", "s"(<2 x i32> %wide.sgpr4) #0225  br label %ret226 227ret:228  ret void229}230 231attributes #0 = { nounwind }232attributes #1 = { nounwind "amdgpu-waves-per-eu"="10,10" }233 234