1196 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O0 -mtriple=amdgcn -mcpu=hawaii < %s | FileCheck -check-prefix=GCN %s3 4; FIXME: we should disable sdwa peephole because dead-code elimination, that5; runs after peephole, ruins this test (different register numbers)6 7; Spill all SGPRs so multiple VGPRs are required for spilling all of them.8 9; Ideally we only need 2 VGPRs for all spilling. The VGPRs are10; allocated per-frame index, so it's possible to get up with more.11define amdgpu_kernel void @spill_sgprs_to_multiple_vgprs(ptr addrspace(1) %out, i32 %in) #0 {12; GCN-LABEL: spill_sgprs_to_multiple_vgprs:13; GCN: ; %bb.0:14; GCN-NEXT: s_mov_b32 s92, SCRATCH_RSRC_DWORD015; GCN-NEXT: s_mov_b32 s93, SCRATCH_RSRC_DWORD116; GCN-NEXT: s_mov_b32 s94, -117; GCN-NEXT: s_mov_b32 s95, 0xe8f00018; GCN-NEXT: s_add_u32 s92, s92, s1119; GCN-NEXT: s_addc_u32 s93, s93, 020; GCN-NEXT: s_load_dword s0, s[4:5], 0xb21; GCN-NEXT: ;;#ASMSTART22; GCN-NEXT: ; def s[4:11]23; GCN-NEXT: ;;#ASMEND24; GCN-NEXT: ; implicit-def: $vgpr2 : SGPR spill to VGPR lane25; GCN-NEXT: v_writelane_b32 v2, s4, 026; GCN-NEXT: v_writelane_b32 v2, s5, 127; GCN-NEXT: v_writelane_b32 v2, s6, 228; GCN-NEXT: v_writelane_b32 v2, s7, 329; GCN-NEXT: v_writelane_b32 v2, s8, 430; GCN-NEXT: v_writelane_b32 v2, s9, 531; GCN-NEXT: v_writelane_b32 v2, s10, 632; GCN-NEXT: v_writelane_b32 v2, s11, 733; GCN-NEXT: ;;#ASMSTART34; GCN-NEXT: ; def s[4:11]35; GCN-NEXT: ;;#ASMEND36; GCN-NEXT: v_writelane_b32 v2, s4, 837; GCN-NEXT: v_writelane_b32 v2, s5, 938; GCN-NEXT: v_writelane_b32 v2, s6, 1039; GCN-NEXT: v_writelane_b32 v2, s7, 1140; GCN-NEXT: v_writelane_b32 v2, s8, 1241; GCN-NEXT: v_writelane_b32 v2, s9, 1342; GCN-NEXT: v_writelane_b32 v2, s10, 1443; GCN-NEXT: v_writelane_b32 v2, s11, 1544; GCN-NEXT: ;;#ASMSTART45; GCN-NEXT: ; def s[4:11]46; GCN-NEXT: ;;#ASMEND47; GCN-NEXT: v_writelane_b32 v2, s4, 1648; GCN-NEXT: v_writelane_b32 v2, s5, 1749; GCN-NEXT: v_writelane_b32 v2, s6, 1850; GCN-NEXT: v_writelane_b32 v2, s7, 1951; GCN-NEXT: v_writelane_b32 v2, s8, 2052; GCN-NEXT: v_writelane_b32 v2, s9, 2153; GCN-NEXT: v_writelane_b32 v2, s10, 2254; GCN-NEXT: v_writelane_b32 v2, s11, 2355; GCN-NEXT: ;;#ASMSTART56; GCN-NEXT: ; def s[4:11]57; GCN-NEXT: ;;#ASMEND58; GCN-NEXT: v_writelane_b32 v2, s4, 2459; GCN-NEXT: v_writelane_b32 v2, s5, 2560; GCN-NEXT: v_writelane_b32 v2, s6, 2661; GCN-NEXT: v_writelane_b32 v2, s7, 2762; GCN-NEXT: v_writelane_b32 v2, s8, 2863; GCN-NEXT: v_writelane_b32 v2, s9, 2964; GCN-NEXT: v_writelane_b32 v2, s10, 3065; GCN-NEXT: v_writelane_b32 v2, s11, 3166; GCN-NEXT: ;;#ASMSTART67; GCN-NEXT: ; def s[4:11]68; GCN-NEXT: ;;#ASMEND69; GCN-NEXT: v_writelane_b32 v2, s4, 3270; GCN-NEXT: v_writelane_b32 v2, s5, 3371; GCN-NEXT: v_writelane_b32 v2, s6, 3472; GCN-NEXT: v_writelane_b32 v2, s7, 3573; GCN-NEXT: v_writelane_b32 v2, s8, 3674; GCN-NEXT: v_writelane_b32 v2, s9, 3775; GCN-NEXT: v_writelane_b32 v2, s10, 3876; GCN-NEXT: v_writelane_b32 v2, s11, 3977; GCN-NEXT: ;;#ASMSTART78; GCN-NEXT: ; def s[4:11]79; GCN-NEXT: ;;#ASMEND80; GCN-NEXT: v_writelane_b32 v2, s4, 4081; GCN-NEXT: v_writelane_b32 v2, s5, 4182; GCN-NEXT: v_writelane_b32 v2, s6, 4283; GCN-NEXT: v_writelane_b32 v2, s7, 4384; GCN-NEXT: v_writelane_b32 v2, s8, 4485; GCN-NEXT: v_writelane_b32 v2, s9, 4586; GCN-NEXT: v_writelane_b32 v2, s10, 4687; GCN-NEXT: v_writelane_b32 v2, s11, 4788; GCN-NEXT: ;;#ASMSTART89; GCN-NEXT: ; def s[4:11]90; GCN-NEXT: ;;#ASMEND91; GCN-NEXT: v_writelane_b32 v2, s4, 4892; GCN-NEXT: v_writelane_b32 v2, s5, 4993; GCN-NEXT: v_writelane_b32 v2, s6, 5094; GCN-NEXT: v_writelane_b32 v2, s7, 5195; GCN-NEXT: v_writelane_b32 v2, s8, 5296; GCN-NEXT: v_writelane_b32 v2, s9, 5397; GCN-NEXT: v_writelane_b32 v2, s10, 5498; GCN-NEXT: v_writelane_b32 v2, s11, 5599; GCN-NEXT: ;;#ASMSTART100; GCN-NEXT: ; def s[4:11]101; GCN-NEXT: ;;#ASMEND102; GCN-NEXT: v_writelane_b32 v2, s4, 56103; GCN-NEXT: v_writelane_b32 v2, s5, 57104; GCN-NEXT: v_writelane_b32 v2, s6, 58105; GCN-NEXT: v_writelane_b32 v2, s7, 59106; GCN-NEXT: v_writelane_b32 v2, s8, 60107; GCN-NEXT: v_writelane_b32 v2, s9, 61108; GCN-NEXT: v_writelane_b32 v2, s10, 62109; GCN-NEXT: v_writelane_b32 v2, s11, 63110; GCN-NEXT: s_or_saveexec_b64 s[34:35], -1111; GCN-NEXT: buffer_store_dword v2, off, s[92:95], 0 offset:8 ; 4-byte Folded Spill112; GCN-NEXT: s_mov_b64 exec, s[34:35]113; GCN-NEXT: ;;#ASMSTART114; GCN-NEXT: ; def s[4:11]115; GCN-NEXT: ;;#ASMEND116; GCN-NEXT: ; implicit-def: $vgpr2 : SGPR spill to VGPR lane117; GCN-NEXT: v_writelane_b32 v2, s4, 0118; GCN-NEXT: v_writelane_b32 v2, s5, 1119; GCN-NEXT: v_writelane_b32 v2, s6, 2120; GCN-NEXT: v_writelane_b32 v2, s7, 3121; GCN-NEXT: v_writelane_b32 v2, s8, 4122; GCN-NEXT: v_writelane_b32 v2, s9, 5123; GCN-NEXT: v_writelane_b32 v2, s10, 6124; GCN-NEXT: v_writelane_b32 v2, s11, 7125; GCN-NEXT: ;;#ASMSTART126; GCN-NEXT: ; def s[4:11]127; GCN-NEXT: ;;#ASMEND128; GCN-NEXT: v_writelane_b32 v2, s4, 8129; GCN-NEXT: v_writelane_b32 v2, s5, 9130; GCN-NEXT: v_writelane_b32 v2, s6, 10131; GCN-NEXT: v_writelane_b32 v2, s7, 11132; GCN-NEXT: v_writelane_b32 v2, s8, 12133; GCN-NEXT: v_writelane_b32 v2, s9, 13134; GCN-NEXT: v_writelane_b32 v2, s10, 14135; GCN-NEXT: v_writelane_b32 v2, s11, 15136; GCN-NEXT: ;;#ASMSTART137; GCN-NEXT: ; def s[4:11]138; GCN-NEXT: ;;#ASMEND139; GCN-NEXT: v_writelane_b32 v2, s4, 16140; GCN-NEXT: v_writelane_b32 v2, s5, 17141; GCN-NEXT: v_writelane_b32 v2, s6, 18142; GCN-NEXT: v_writelane_b32 v2, s7, 19143; GCN-NEXT: v_writelane_b32 v2, s8, 20144; GCN-NEXT: v_writelane_b32 v2, s9, 21145; GCN-NEXT: v_writelane_b32 v2, s10, 22146; GCN-NEXT: v_writelane_b32 v2, s11, 23147; GCN-NEXT: ;;#ASMSTART148; GCN-NEXT: ; def s[4:11]149; GCN-NEXT: ;;#ASMEND150; GCN-NEXT: v_writelane_b32 v2, s4, 24151; GCN-NEXT: v_writelane_b32 v2, s5, 25152; GCN-NEXT: v_writelane_b32 v2, s6, 26153; GCN-NEXT: v_writelane_b32 v2, s7, 27154; GCN-NEXT: v_writelane_b32 v2, s8, 28155; GCN-NEXT: v_writelane_b32 v2, s9, 29156; GCN-NEXT: v_writelane_b32 v2, s10, 30157; GCN-NEXT: v_writelane_b32 v2, s11, 31158; GCN-NEXT: ;;#ASMSTART159; GCN-NEXT: ; def s[4:11]160; GCN-NEXT: ;;#ASMEND161; GCN-NEXT: v_writelane_b32 v2, s4, 32162; GCN-NEXT: v_writelane_b32 v2, s5, 33163; GCN-NEXT: v_writelane_b32 v2, s6, 34164; GCN-NEXT: v_writelane_b32 v2, s7, 35165; GCN-NEXT: v_writelane_b32 v2, s8, 36166; GCN-NEXT: v_writelane_b32 v2, s9, 37167; GCN-NEXT: v_writelane_b32 v2, s10, 38168; GCN-NEXT: v_writelane_b32 v2, s11, 39169; GCN-NEXT: ;;#ASMSTART170; GCN-NEXT: ; def s[4:11]171; GCN-NEXT: ;;#ASMEND172; GCN-NEXT: v_writelane_b32 v2, s4, 40173; GCN-NEXT: v_writelane_b32 v2, s5, 41174; GCN-NEXT: v_writelane_b32 v2, s6, 42175; GCN-NEXT: v_writelane_b32 v2, s7, 43176; GCN-NEXT: v_writelane_b32 v2, s8, 44177; GCN-NEXT: v_writelane_b32 v2, s9, 45178; GCN-NEXT: v_writelane_b32 v2, s10, 46179; GCN-NEXT: v_writelane_b32 v2, s11, 47180; GCN-NEXT: ;;#ASMSTART181; GCN-NEXT: ; def s[4:11]182; GCN-NEXT: ;;#ASMEND183; GCN-NEXT: v_writelane_b32 v2, s4, 48184; GCN-NEXT: v_writelane_b32 v2, s5, 49185; GCN-NEXT: v_writelane_b32 v2, s6, 50186; GCN-NEXT: v_writelane_b32 v2, s7, 51187; GCN-NEXT: v_writelane_b32 v2, s8, 52188; GCN-NEXT: v_writelane_b32 v2, s9, 53189; GCN-NEXT: v_writelane_b32 v2, s10, 54190; GCN-NEXT: v_writelane_b32 v2, s11, 55191; GCN-NEXT: ;;#ASMSTART192; GCN-NEXT: ; def s[4:11]193; GCN-NEXT: ;;#ASMEND194; GCN-NEXT: v_writelane_b32 v2, s4, 56195; GCN-NEXT: v_writelane_b32 v2, s5, 57196; GCN-NEXT: v_writelane_b32 v2, s6, 58197; GCN-NEXT: v_writelane_b32 v2, s7, 59198; GCN-NEXT: v_writelane_b32 v2, s8, 60199; GCN-NEXT: v_writelane_b32 v2, s9, 61200; GCN-NEXT: v_writelane_b32 v2, s10, 62201; GCN-NEXT: v_writelane_b32 v2, s11, 63202; GCN-NEXT: s_or_saveexec_b64 s[34:35], -1203; GCN-NEXT: buffer_store_dword v2, off, s[92:95], 0 offset:4 ; 4-byte Folded Spill204; GCN-NEXT: s_mov_b64 exec, s[34:35]205; GCN-NEXT: ;;#ASMSTART206; GCN-NEXT: ; def s[4:11]207; GCN-NEXT: ;;#ASMEND208; GCN-NEXT: ; implicit-def: $vgpr2 : SGPR spill to VGPR lane209; GCN-NEXT: v_writelane_b32 v2, s4, 0210; GCN-NEXT: v_writelane_b32 v2, s5, 1211; GCN-NEXT: v_writelane_b32 v2, s6, 2212; GCN-NEXT: v_writelane_b32 v2, s7, 3213; GCN-NEXT: v_writelane_b32 v2, s8, 4214; GCN-NEXT: v_writelane_b32 v2, s9, 5215; GCN-NEXT: v_writelane_b32 v2, s10, 6216; GCN-NEXT: v_writelane_b32 v2, s11, 7217; GCN-NEXT: s_or_saveexec_b64 s[34:35], -1218; GCN-NEXT: buffer_store_dword v2, off, s[92:95], 0 ; 4-byte Folded Spill219; GCN-NEXT: s_mov_b64 exec, s[34:35]220; GCN-NEXT: s_mov_b32 s1, 0221; GCN-NEXT: s_waitcnt lgkmcnt(0)222; GCN-NEXT: s_cmp_lg_u32 s0, s1223; GCN-NEXT: s_cbranch_scc1 .LBB0_2224; GCN-NEXT: ; %bb.1: ; %bb0225; GCN-NEXT: s_or_saveexec_b64 s[34:35], -1226; GCN-NEXT: buffer_load_dword v0, off, s[92:95], 0 offset:4 ; 4-byte Folded Reload227; GCN-NEXT: s_mov_b64 exec, s[34:35]228; GCN-NEXT: s_or_saveexec_b64 s[34:35], -1229; GCN-NEXT: buffer_load_dword v1, off, s[92:95], 0 offset:8 ; 4-byte Folded Reload230; GCN-NEXT: s_mov_b64 exec, s[34:35]231; GCN-NEXT: s_waitcnt vmcnt(1)232; GCN-NEXT: v_readlane_b32 s8, v0, 56233; GCN-NEXT: v_readlane_b32 s9, v0, 57234; GCN-NEXT: v_readlane_b32 s10, v0, 58235; GCN-NEXT: v_readlane_b32 s11, v0, 59236; GCN-NEXT: v_readlane_b32 s12, v0, 60237; GCN-NEXT: v_readlane_b32 s13, v0, 61238; GCN-NEXT: v_readlane_b32 s14, v0, 62239; GCN-NEXT: v_readlane_b32 s15, v0, 63240; GCN-NEXT: v_readlane_b32 s16, v0, 48241; GCN-NEXT: v_readlane_b32 s17, v0, 49242; GCN-NEXT: v_readlane_b32 s18, v0, 50243; GCN-NEXT: v_readlane_b32 s19, v0, 51244; GCN-NEXT: v_readlane_b32 s20, v0, 52245; GCN-NEXT: v_readlane_b32 s21, v0, 53246; GCN-NEXT: v_readlane_b32 s22, v0, 54247; GCN-NEXT: v_readlane_b32 s23, v0, 55248; GCN-NEXT: v_readlane_b32 s24, v0, 40249; GCN-NEXT: v_readlane_b32 s25, v0, 41250; GCN-NEXT: v_readlane_b32 s26, v0, 42251; GCN-NEXT: v_readlane_b32 s27, v0, 43252; GCN-NEXT: v_readlane_b32 s28, v0, 44253; GCN-NEXT: v_readlane_b32 s29, v0, 45254; GCN-NEXT: v_readlane_b32 s30, v0, 46255; GCN-NEXT: v_readlane_b32 s31, v0, 47256; GCN-NEXT: v_readlane_b32 s36, v0, 32257; GCN-NEXT: v_readlane_b32 s37, v0, 33258; GCN-NEXT: v_readlane_b32 s38, v0, 34259; GCN-NEXT: v_readlane_b32 s39, v0, 35260; GCN-NEXT: v_readlane_b32 s40, v0, 36261; GCN-NEXT: v_readlane_b32 s41, v0, 37262; GCN-NEXT: v_readlane_b32 s42, v0, 38263; GCN-NEXT: v_readlane_b32 s43, v0, 39264; GCN-NEXT: v_readlane_b32 s44, v0, 24265; GCN-NEXT: v_readlane_b32 s45, v0, 25266; GCN-NEXT: v_readlane_b32 s46, v0, 26267; GCN-NEXT: v_readlane_b32 s47, v0, 27268; GCN-NEXT: v_readlane_b32 s48, v0, 28269; GCN-NEXT: v_readlane_b32 s49, v0, 29270; GCN-NEXT: v_readlane_b32 s50, v0, 30271; GCN-NEXT: v_readlane_b32 s51, v0, 31272; GCN-NEXT: v_readlane_b32 s52, v0, 16273; GCN-NEXT: v_readlane_b32 s53, v0, 17274; GCN-NEXT: v_readlane_b32 s54, v0, 18275; GCN-NEXT: v_readlane_b32 s55, v0, 19276; GCN-NEXT: v_readlane_b32 s56, v0, 20277; GCN-NEXT: v_readlane_b32 s57, v0, 21278; GCN-NEXT: v_readlane_b32 s58, v0, 22279; GCN-NEXT: v_readlane_b32 s59, v0, 23280; GCN-NEXT: v_readlane_b32 s60, v0, 8281; GCN-NEXT: v_readlane_b32 s61, v0, 9282; GCN-NEXT: v_readlane_b32 s62, v0, 10283; GCN-NEXT: v_readlane_b32 s63, v0, 11284; GCN-NEXT: v_readlane_b32 s64, v0, 12285; GCN-NEXT: v_readlane_b32 s65, v0, 13286; GCN-NEXT: v_readlane_b32 s66, v0, 14287; GCN-NEXT: v_readlane_b32 s67, v0, 15288; GCN-NEXT: v_readlane_b32 s68, v0, 0289; GCN-NEXT: v_readlane_b32 s69, v0, 1290; GCN-NEXT: v_readlane_b32 s70, v0, 2291; GCN-NEXT: v_readlane_b32 s71, v0, 3292; GCN-NEXT: v_readlane_b32 s72, v0, 4293; GCN-NEXT: v_readlane_b32 s73, v0, 5294; GCN-NEXT: v_readlane_b32 s74, v0, 6295; GCN-NEXT: v_readlane_b32 s75, v0, 7296; GCN-NEXT: s_waitcnt vmcnt(0)297; GCN-NEXT: v_readlane_b32 s76, v1, 56298; GCN-NEXT: v_readlane_b32 s77, v1, 57299; GCN-NEXT: v_readlane_b32 s78, v1, 58300; GCN-NEXT: v_readlane_b32 s79, v1, 59301; GCN-NEXT: v_readlane_b32 s80, v1, 60302; GCN-NEXT: v_readlane_b32 s81, v1, 61303; GCN-NEXT: v_readlane_b32 s82, v1, 62304; GCN-NEXT: v_readlane_b32 s83, v1, 63305; GCN-NEXT: v_readlane_b32 s84, v1, 48306; GCN-NEXT: v_readlane_b32 s85, v1, 49307; GCN-NEXT: v_readlane_b32 s86, v1, 50308; GCN-NEXT: v_readlane_b32 s87, v1, 51309; GCN-NEXT: v_readlane_b32 s88, v1, 52310; GCN-NEXT: v_readlane_b32 s89, v1, 53311; GCN-NEXT: v_readlane_b32 s90, v1, 54312; GCN-NEXT: v_readlane_b32 s91, v1, 55313; GCN-NEXT: v_readlane_b32 s0, v1, 0314; GCN-NEXT: v_readlane_b32 s1, v1, 1315; GCN-NEXT: v_readlane_b32 s2, v1, 2316; GCN-NEXT: v_readlane_b32 s3, v1, 3317; GCN-NEXT: v_readlane_b32 s4, v1, 4318; GCN-NEXT: v_readlane_b32 s5, v1, 5319; GCN-NEXT: v_readlane_b32 s6, v1, 6320; GCN-NEXT: v_readlane_b32 s7, v1, 7321; GCN-NEXT: s_or_saveexec_b64 s[34:35], -1322; GCN-NEXT: buffer_load_dword v2, off, s[92:95], 0 ; 4-byte Folded Reload323; GCN-NEXT: s_mov_b64 exec, s[34:35]324; GCN-NEXT: ;;#ASMSTART325; GCN-NEXT: ; use s[0:7]326; GCN-NEXT: ;;#ASMEND327; GCN-NEXT: v_readlane_b32 s0, v1, 8328; GCN-NEXT: v_readlane_b32 s1, v1, 9329; GCN-NEXT: v_readlane_b32 s2, v1, 10330; GCN-NEXT: v_readlane_b32 s3, v1, 11331; GCN-NEXT: v_readlane_b32 s4, v1, 12332; GCN-NEXT: v_readlane_b32 s5, v1, 13333; GCN-NEXT: v_readlane_b32 s6, v1, 14334; GCN-NEXT: v_readlane_b32 s7, v1, 15335; GCN-NEXT: ;;#ASMSTART336; GCN-NEXT: ; use s[0:7]337; GCN-NEXT: ;;#ASMEND338; GCN-NEXT: v_readlane_b32 s0, v1, 16339; GCN-NEXT: v_readlane_b32 s1, v1, 17340; GCN-NEXT: v_readlane_b32 s2, v1, 18341; GCN-NEXT: v_readlane_b32 s3, v1, 19342; GCN-NEXT: v_readlane_b32 s4, v1, 20343; GCN-NEXT: v_readlane_b32 s5, v1, 21344; GCN-NEXT: v_readlane_b32 s6, v1, 22345; GCN-NEXT: v_readlane_b32 s7, v1, 23346; GCN-NEXT: ;;#ASMSTART347; GCN-NEXT: ; use s[0:7]348; GCN-NEXT: ;;#ASMEND349; GCN-NEXT: v_readlane_b32 s0, v1, 24350; GCN-NEXT: v_readlane_b32 s1, v1, 25351; GCN-NEXT: v_readlane_b32 s2, v1, 26352; GCN-NEXT: v_readlane_b32 s3, v1, 27353; GCN-NEXT: v_readlane_b32 s4, v1, 28354; GCN-NEXT: v_readlane_b32 s5, v1, 29355; GCN-NEXT: v_readlane_b32 s6, v1, 30356; GCN-NEXT: v_readlane_b32 s7, v1, 31357; GCN-NEXT: ;;#ASMSTART358; GCN-NEXT: ; use s[0:7]359; GCN-NEXT: ;;#ASMEND360; GCN-NEXT: v_readlane_b32 s0, v1, 32361; GCN-NEXT: v_readlane_b32 s1, v1, 33362; GCN-NEXT: v_readlane_b32 s2, v1, 34363; GCN-NEXT: v_readlane_b32 s3, v1, 35364; GCN-NEXT: v_readlane_b32 s4, v1, 36365; GCN-NEXT: v_readlane_b32 s5, v1, 37366; GCN-NEXT: v_readlane_b32 s6, v1, 38367; GCN-NEXT: v_readlane_b32 s7, v1, 39368; GCN-NEXT: ;;#ASMSTART369; GCN-NEXT: ; use s[0:7]370; GCN-NEXT: ;;#ASMEND371; GCN-NEXT: v_readlane_b32 s0, v1, 40372; GCN-NEXT: v_readlane_b32 s1, v1, 41373; GCN-NEXT: v_readlane_b32 s2, v1, 42374; GCN-NEXT: v_readlane_b32 s3, v1, 43375; GCN-NEXT: v_readlane_b32 s4, v1, 44376; GCN-NEXT: v_readlane_b32 s5, v1, 45377; GCN-NEXT: v_readlane_b32 s6, v1, 46378; GCN-NEXT: v_readlane_b32 s7, v1, 47379; GCN-NEXT: ;;#ASMSTART380; GCN-NEXT: ; use s[0:7]381; GCN-NEXT: ;;#ASMEND382; GCN-NEXT: s_waitcnt vmcnt(0)383; GCN-NEXT: v_readlane_b32 s0, v2, 0384; GCN-NEXT: v_readlane_b32 s1, v2, 1385; GCN-NEXT: v_readlane_b32 s2, v2, 2386; GCN-NEXT: v_readlane_b32 s3, v2, 3387; GCN-NEXT: v_readlane_b32 s4, v2, 4388; GCN-NEXT: v_readlane_b32 s5, v2, 5389; GCN-NEXT: v_readlane_b32 s6, v2, 6390; GCN-NEXT: v_readlane_b32 s7, v2, 7391; GCN-NEXT: ;;#ASMSTART392; GCN-NEXT: ; use s[84:91]393; GCN-NEXT: ;;#ASMEND394; GCN-NEXT: ;;#ASMSTART395; GCN-NEXT: ; use s[76:83]396; GCN-NEXT: ;;#ASMEND397; GCN-NEXT: ;;#ASMSTART398; GCN-NEXT: ; use s[68:75]399; GCN-NEXT: ;;#ASMEND400; GCN-NEXT: ;;#ASMSTART401; GCN-NEXT: ; use s[60:67]402; GCN-NEXT: ;;#ASMEND403; GCN-NEXT: ;;#ASMSTART404; GCN-NEXT: ; use s[52:59]405; GCN-NEXT: ;;#ASMEND406; GCN-NEXT: ;;#ASMSTART407; GCN-NEXT: ; use s[44:51]408; GCN-NEXT: ;;#ASMEND409; GCN-NEXT: ;;#ASMSTART410; GCN-NEXT: ; use s[36:43]411; GCN-NEXT: ;;#ASMEND412; GCN-NEXT: ;;#ASMSTART413; GCN-NEXT: ; use s[24:31]414; GCN-NEXT: ;;#ASMEND415; GCN-NEXT: ;;#ASMSTART416; GCN-NEXT: ; use s[16:23]417; GCN-NEXT: ;;#ASMEND418; GCN-NEXT: ;;#ASMSTART419; GCN-NEXT: ; use s[8:15]420; GCN-NEXT: ;;#ASMEND421; GCN-NEXT: ;;#ASMSTART422; GCN-NEXT: ; use s[0:7]423; GCN-NEXT: ;;#ASMEND424; GCN-NEXT: .LBB0_2: ; %ret425; GCN-NEXT: s_endpgm426 %wide.sgpr0 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0427 %wide.sgpr1 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0428 %wide.sgpr2 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0429 %wide.sgpr3 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0430 %wide.sgpr4 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0431 %wide.sgpr5 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0432 %wide.sgpr6 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0433 %wide.sgpr7 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0434 %wide.sgpr8 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0435 %wide.sgpr9 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0436 %wide.sgpr10 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0437 %wide.sgpr11 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0438 %wide.sgpr12 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0439 %wide.sgpr13 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0440 %wide.sgpr14 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0441 %wide.sgpr15 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0442 %wide.sgpr16 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0443 %cmp = icmp eq i32 %in, 0444 br i1 %cmp, label %bb0, label %ret445 446bb0:447 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr0) #0448 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr1) #0449 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr2) #0450 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr3) #0451 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr4) #0452 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr5) #0453 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr6) #0454 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr7) #0455 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr8) #0456 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr9) #0457 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr10) #0458 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr11) #0459 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr12) #0460 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr13) #0461 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr14) #0462 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr15) #0463 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr16) #0464 br label %ret465 466ret:467 ret void468}469 470; Some of the lanes of an SGPR spill are in one VGPR and some forced471; into the next available VGPR.472define amdgpu_kernel void @split_sgpr_spill_2_vgprs(ptr addrspace(1) %out, i32 %in) #1 {473; GCN-LABEL: split_sgpr_spill_2_vgprs:474; GCN: ; %bb.0:475; GCN-NEXT: s_mov_b32 s52, SCRATCH_RSRC_DWORD0476; GCN-NEXT: s_mov_b32 s53, SCRATCH_RSRC_DWORD1477; GCN-NEXT: s_mov_b32 s54, -1478; GCN-NEXT: s_mov_b32 s55, 0xe8f000479; GCN-NEXT: s_add_u32 s52, s52, s11480; GCN-NEXT: s_addc_u32 s53, s53, 0481; GCN-NEXT: s_load_dword s0, s[4:5], 0xb482; GCN-NEXT: ;;#ASMSTART483; GCN-NEXT: ; def s[4:19]484; GCN-NEXT: ;;#ASMEND485; GCN-NEXT: ; implicit-def: $vgpr1 : SGPR spill to VGPR lane486; GCN-NEXT: v_writelane_b32 v1, s4, 0487; GCN-NEXT: v_writelane_b32 v1, s5, 1488; GCN-NEXT: v_writelane_b32 v1, s6, 2489; GCN-NEXT: v_writelane_b32 v1, s7, 3490; GCN-NEXT: v_writelane_b32 v1, s8, 4491; GCN-NEXT: v_writelane_b32 v1, s9, 5492; GCN-NEXT: v_writelane_b32 v1, s10, 6493; GCN-NEXT: v_writelane_b32 v1, s11, 7494; GCN-NEXT: v_writelane_b32 v1, s12, 8495; GCN-NEXT: v_writelane_b32 v1, s13, 9496; GCN-NEXT: v_writelane_b32 v1, s14, 10497; GCN-NEXT: v_writelane_b32 v1, s15, 11498; GCN-NEXT: v_writelane_b32 v1, s16, 12499; GCN-NEXT: v_writelane_b32 v1, s17, 13500; GCN-NEXT: v_writelane_b32 v1, s18, 14501; GCN-NEXT: v_writelane_b32 v1, s19, 15502; GCN-NEXT: ;;#ASMSTART503; GCN-NEXT: ; def s[4:19]504; GCN-NEXT: ;;#ASMEND505; GCN-NEXT: v_writelane_b32 v1, s4, 16506; GCN-NEXT: v_writelane_b32 v1, s5, 17507; GCN-NEXT: v_writelane_b32 v1, s6, 18508; GCN-NEXT: v_writelane_b32 v1, s7, 19509; GCN-NEXT: v_writelane_b32 v1, s8, 20510; GCN-NEXT: v_writelane_b32 v1, s9, 21511; GCN-NEXT: v_writelane_b32 v1, s10, 22512; GCN-NEXT: v_writelane_b32 v1, s11, 23513; GCN-NEXT: v_writelane_b32 v1, s12, 24514; GCN-NEXT: v_writelane_b32 v1, s13, 25515; GCN-NEXT: v_writelane_b32 v1, s14, 26516; GCN-NEXT: v_writelane_b32 v1, s15, 27517; GCN-NEXT: v_writelane_b32 v1, s16, 28518; GCN-NEXT: v_writelane_b32 v1, s17, 29519; GCN-NEXT: v_writelane_b32 v1, s18, 30520; GCN-NEXT: v_writelane_b32 v1, s19, 31521; GCN-NEXT: ;;#ASMSTART522; GCN-NEXT: ; def s[4:19]523; GCN-NEXT: ;;#ASMEND524; GCN-NEXT: v_writelane_b32 v1, s4, 32525; GCN-NEXT: v_writelane_b32 v1, s5, 33526; GCN-NEXT: v_writelane_b32 v1, s6, 34527; GCN-NEXT: v_writelane_b32 v1, s7, 35528; GCN-NEXT: v_writelane_b32 v1, s8, 36529; GCN-NEXT: v_writelane_b32 v1, s9, 37530; GCN-NEXT: v_writelane_b32 v1, s10, 38531; GCN-NEXT: v_writelane_b32 v1, s11, 39532; GCN-NEXT: v_writelane_b32 v1, s12, 40533; GCN-NEXT: v_writelane_b32 v1, s13, 41534; GCN-NEXT: v_writelane_b32 v1, s14, 42535; GCN-NEXT: v_writelane_b32 v1, s15, 43536; GCN-NEXT: v_writelane_b32 v1, s16, 44537; GCN-NEXT: v_writelane_b32 v1, s17, 45538; GCN-NEXT: v_writelane_b32 v1, s18, 46539; GCN-NEXT: v_writelane_b32 v1, s19, 47540; GCN-NEXT: ;;#ASMSTART541; GCN-NEXT: ; def s[4:19]542; GCN-NEXT: ;;#ASMEND543; GCN-NEXT: v_writelane_b32 v1, s4, 48544; GCN-NEXT: v_writelane_b32 v1, s5, 49545; GCN-NEXT: v_writelane_b32 v1, s6, 50546; GCN-NEXT: v_writelane_b32 v1, s7, 51547; GCN-NEXT: v_writelane_b32 v1, s8, 52548; GCN-NEXT: v_writelane_b32 v1, s9, 53549; GCN-NEXT: v_writelane_b32 v1, s10, 54550; GCN-NEXT: v_writelane_b32 v1, s11, 55551; GCN-NEXT: v_writelane_b32 v1, s12, 56552; GCN-NEXT: v_writelane_b32 v1, s13, 57553; GCN-NEXT: v_writelane_b32 v1, s14, 58554; GCN-NEXT: v_writelane_b32 v1, s15, 59555; GCN-NEXT: v_writelane_b32 v1, s16, 60556; GCN-NEXT: v_writelane_b32 v1, s17, 61557; GCN-NEXT: v_writelane_b32 v1, s18, 62558; GCN-NEXT: v_writelane_b32 v1, s19, 63559; GCN-NEXT: s_or_saveexec_b64 s[28:29], -1560; GCN-NEXT: buffer_store_dword v1, off, s[52:55], 0 offset:4 ; 4-byte Folded Spill561; GCN-NEXT: s_mov_b64 exec, s[28:29]562; GCN-NEXT: ;;#ASMSTART563; GCN-NEXT: ; def s[4:11]564; GCN-NEXT: ;;#ASMEND565; GCN-NEXT: ; implicit-def: $vgpr1 : SGPR spill to VGPR lane566; GCN-NEXT: v_writelane_b32 v1, s4, 0567; GCN-NEXT: v_writelane_b32 v1, s5, 1568; GCN-NEXT: v_writelane_b32 v1, s6, 2569; GCN-NEXT: v_writelane_b32 v1, s7, 3570; GCN-NEXT: v_writelane_b32 v1, s8, 4571; GCN-NEXT: v_writelane_b32 v1, s9, 5572; GCN-NEXT: v_writelane_b32 v1, s10, 6573; GCN-NEXT: v_writelane_b32 v1, s11, 7574; GCN-NEXT: ;;#ASMSTART575; GCN-NEXT: ; def s[2:3]576; GCN-NEXT: ;;#ASMEND577; GCN-NEXT: v_writelane_b32 v1, s2, 8578; GCN-NEXT: v_writelane_b32 v1, s3, 9579; GCN-NEXT: s_or_saveexec_b64 s[28:29], -1580; GCN-NEXT: buffer_store_dword v1, off, s[52:55], 0 ; 4-byte Folded Spill581; GCN-NEXT: s_mov_b64 exec, s[28:29]582; GCN-NEXT: s_mov_b32 s1, 0583; GCN-NEXT: s_waitcnt lgkmcnt(0)584; GCN-NEXT: s_cmp_lg_u32 s0, s1585; GCN-NEXT: s_cbranch_scc1 .LBB1_2586; GCN-NEXT: ; %bb.1: ; %bb0587; GCN-NEXT: s_or_saveexec_b64 s[28:29], -1588; GCN-NEXT: buffer_load_dword v0, off, s[52:55], 0 ; 4-byte Folded Reload589; GCN-NEXT: s_mov_b64 exec, s[28:29]590; GCN-NEXT: s_or_saveexec_b64 s[28:29], -1591; GCN-NEXT: buffer_load_dword v1, off, s[52:55], 0 offset:4 ; 4-byte Folded Reload592; GCN-NEXT: s_mov_b64 exec, s[28:29]593; GCN-NEXT: s_waitcnt vmcnt(1)594; GCN-NEXT: v_readlane_b32 s16, v0, 8595; GCN-NEXT: v_readlane_b32 s17, v0, 9596; GCN-NEXT: v_readlane_b32 s20, v0, 0597; GCN-NEXT: v_readlane_b32 s21, v0, 1598; GCN-NEXT: v_readlane_b32 s22, v0, 2599; GCN-NEXT: v_readlane_b32 s23, v0, 3600; GCN-NEXT: v_readlane_b32 s24, v0, 4601; GCN-NEXT: v_readlane_b32 s25, v0, 5602; GCN-NEXT: v_readlane_b32 s26, v0, 6603; GCN-NEXT: v_readlane_b32 s27, v0, 7604; GCN-NEXT: s_waitcnt vmcnt(0)605; GCN-NEXT: v_readlane_b32 s36, v1, 32606; GCN-NEXT: v_readlane_b32 s37, v1, 33607; GCN-NEXT: v_readlane_b32 s38, v1, 34608; GCN-NEXT: v_readlane_b32 s39, v1, 35609; GCN-NEXT: v_readlane_b32 s40, v1, 36610; GCN-NEXT: v_readlane_b32 s41, v1, 37611; GCN-NEXT: v_readlane_b32 s42, v1, 38612; GCN-NEXT: v_readlane_b32 s43, v1, 39613; GCN-NEXT: v_readlane_b32 s44, v1, 40614; GCN-NEXT: v_readlane_b32 s45, v1, 41615; GCN-NEXT: v_readlane_b32 s46, v1, 42616; GCN-NEXT: v_readlane_b32 s47, v1, 43617; GCN-NEXT: v_readlane_b32 s48, v1, 44618; GCN-NEXT: v_readlane_b32 s49, v1, 45619; GCN-NEXT: v_readlane_b32 s50, v1, 46620; GCN-NEXT: v_readlane_b32 s51, v1, 47621; GCN-NEXT: v_readlane_b32 s0, v1, 0622; GCN-NEXT: v_readlane_b32 s1, v1, 1623; GCN-NEXT: v_readlane_b32 s2, v1, 2624; GCN-NEXT: v_readlane_b32 s3, v1, 3625; GCN-NEXT: v_readlane_b32 s4, v1, 4626; GCN-NEXT: v_readlane_b32 s5, v1, 5627; GCN-NEXT: v_readlane_b32 s6, v1, 6628; GCN-NEXT: v_readlane_b32 s7, v1, 7629; GCN-NEXT: v_readlane_b32 s8, v1, 8630; GCN-NEXT: v_readlane_b32 s9, v1, 9631; GCN-NEXT: v_readlane_b32 s10, v1, 10632; GCN-NEXT: v_readlane_b32 s11, v1, 11633; GCN-NEXT: v_readlane_b32 s12, v1, 12634; GCN-NEXT: v_readlane_b32 s13, v1, 13635; GCN-NEXT: v_readlane_b32 s14, v1, 14636; GCN-NEXT: v_readlane_b32 s15, v1, 15637; GCN-NEXT: ;;#ASMSTART638; GCN-NEXT: ; use s[0:15]639; GCN-NEXT: ;;#ASMEND640; GCN-NEXT: v_readlane_b32 s0, v1, 16641; GCN-NEXT: v_readlane_b32 s1, v1, 17642; GCN-NEXT: v_readlane_b32 s2, v1, 18643; GCN-NEXT: v_readlane_b32 s3, v1, 19644; GCN-NEXT: v_readlane_b32 s4, v1, 20645; GCN-NEXT: v_readlane_b32 s5, v1, 21646; GCN-NEXT: v_readlane_b32 s6, v1, 22647; GCN-NEXT: v_readlane_b32 s7, v1, 23648; GCN-NEXT: v_readlane_b32 s8, v1, 24649; GCN-NEXT: v_readlane_b32 s9, v1, 25650; GCN-NEXT: v_readlane_b32 s10, v1, 26651; GCN-NEXT: v_readlane_b32 s11, v1, 27652; GCN-NEXT: v_readlane_b32 s12, v1, 28653; GCN-NEXT: v_readlane_b32 s13, v1, 29654; GCN-NEXT: v_readlane_b32 s14, v1, 30655; GCN-NEXT: v_readlane_b32 s15, v1, 31656; GCN-NEXT: ;;#ASMSTART657; GCN-NEXT: ; use s[0:15]658; GCN-NEXT: ;;#ASMEND659; GCN-NEXT: v_readlane_b32 s0, v1, 48660; GCN-NEXT: v_readlane_b32 s1, v1, 49661; GCN-NEXT: v_readlane_b32 s2, v1, 50662; GCN-NEXT: v_readlane_b32 s3, v1, 51663; GCN-NEXT: v_readlane_b32 s4, v1, 52664; GCN-NEXT: v_readlane_b32 s5, v1, 53665; GCN-NEXT: v_readlane_b32 s6, v1, 54666; GCN-NEXT: v_readlane_b32 s7, v1, 55667; GCN-NEXT: v_readlane_b32 s8, v1, 56668; GCN-NEXT: v_readlane_b32 s9, v1, 57669; GCN-NEXT: v_readlane_b32 s10, v1, 58670; GCN-NEXT: v_readlane_b32 s11, v1, 59671; GCN-NEXT: v_readlane_b32 s12, v1, 60672; GCN-NEXT: v_readlane_b32 s13, v1, 61673; GCN-NEXT: v_readlane_b32 s14, v1, 62674; GCN-NEXT: v_readlane_b32 s15, v1, 63675; GCN-NEXT: ;;#ASMSTART676; GCN-NEXT: ; use s[36:51]677; GCN-NEXT: ;;#ASMEND678; GCN-NEXT: ;;#ASMSTART679; GCN-NEXT: ; use s[20:27]680; GCN-NEXT: ;;#ASMEND681; GCN-NEXT: ;;#ASMSTART682; GCN-NEXT: ; use s[16:17]683; GCN-NEXT: ;;#ASMEND684; GCN-NEXT: ;;#ASMSTART685; GCN-NEXT: ; use s[0:15]686; GCN-NEXT: ;;#ASMEND687; GCN-NEXT: .LBB1_2: ; %ret688; GCN-NEXT: s_endpgm689 %wide.sgpr0 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0690 %wide.sgpr1 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0691 %wide.sgpr2 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0692 %wide.sgpr5 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0693 %wide.sgpr3 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0694 %wide.sgpr4 = call <2 x i32> asm sideeffect "; def $0", "=s" () #0695 696 %cmp = icmp eq i32 %in, 0697 br i1 %cmp, label %bb0, label %ret698 699bb0:700 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr0) #0701 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr1) #0702 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr2) #0703 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr3) #0704 call void asm sideeffect "; use $0", "s"(<2 x i32> %wide.sgpr4) #0705 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr5) #0706 br label %ret707 708ret:709 ret void710}711 712; The first 64 SGPR spills can go to a VGPR, but there isn't a second713; so some spills must be to memory. The last 16 element spill runs out714; of lanes at the 15th element.715define amdgpu_kernel void @no_vgprs_last_sgpr_spill(ptr addrspace(1) %out, i32 %in) #1 {716; GCN-LABEL: no_vgprs_last_sgpr_spill:717; GCN: ; %bb.0:718; GCN-NEXT: s_mov_b32 s52, SCRATCH_RSRC_DWORD0719; GCN-NEXT: s_mov_b32 s53, SCRATCH_RSRC_DWORD1720; GCN-NEXT: s_mov_b32 s54, -1721; GCN-NEXT: s_mov_b32 s55, 0xe8f000722; GCN-NEXT: s_add_u32 s52, s52, s11723; GCN-NEXT: s_addc_u32 s53, s53, 0724; GCN-NEXT: s_load_dword s0, s[4:5], 0xb725; GCN-NEXT: ;;#ASMSTART726; GCN-NEXT: ;;#ASMEND727; GCN-NEXT: ;;#ASMSTART728; GCN-NEXT: ;;#ASMEND729; GCN-NEXT: ;;#ASMSTART730; GCN-NEXT: ;;#ASMEND731; GCN-NEXT: ;;#ASMSTART732; GCN-NEXT: ;;#ASMEND733; GCN-NEXT: ;;#ASMSTART734; GCN-NEXT: ;;#ASMEND735; GCN-NEXT: ;;#ASMSTART736; GCN-NEXT: ;;#ASMEND737; GCN-NEXT: ;;#ASMSTART738; GCN-NEXT: ; def s[4:19]739; GCN-NEXT: ;;#ASMEND740; GCN-NEXT: ; implicit-def: $vgpr32 : SGPR spill to VGPR lane741; GCN-NEXT: v_writelane_b32 v32, s4, 0742; GCN-NEXT: v_writelane_b32 v32, s5, 1743; GCN-NEXT: v_writelane_b32 v32, s6, 2744; GCN-NEXT: v_writelane_b32 v32, s7, 3745; GCN-NEXT: v_writelane_b32 v32, s8, 4746; GCN-NEXT: v_writelane_b32 v32, s9, 5747; GCN-NEXT: v_writelane_b32 v32, s10, 6748; GCN-NEXT: v_writelane_b32 v32, s11, 7749; GCN-NEXT: v_writelane_b32 v32, s12, 8750; GCN-NEXT: v_writelane_b32 v32, s13, 9751; GCN-NEXT: v_writelane_b32 v32, s14, 10752; GCN-NEXT: v_writelane_b32 v32, s15, 11753; GCN-NEXT: v_writelane_b32 v32, s16, 12754; GCN-NEXT: v_writelane_b32 v32, s17, 13755; GCN-NEXT: v_writelane_b32 v32, s18, 14756; GCN-NEXT: v_writelane_b32 v32, s19, 15757; GCN-NEXT: ;;#ASMSTART758; GCN-NEXT: ; def s[4:19]759; GCN-NEXT: ;;#ASMEND760; GCN-NEXT: v_writelane_b32 v32, s4, 16761; GCN-NEXT: v_writelane_b32 v32, s5, 17762; GCN-NEXT: v_writelane_b32 v32, s6, 18763; GCN-NEXT: v_writelane_b32 v32, s7, 19764; GCN-NEXT: v_writelane_b32 v32, s8, 20765; GCN-NEXT: v_writelane_b32 v32, s9, 21766; GCN-NEXT: v_writelane_b32 v32, s10, 22767; GCN-NEXT: v_writelane_b32 v32, s11, 23768; GCN-NEXT: v_writelane_b32 v32, s12, 24769; GCN-NEXT: v_writelane_b32 v32, s13, 25770; GCN-NEXT: v_writelane_b32 v32, s14, 26771; GCN-NEXT: v_writelane_b32 v32, s15, 27772; GCN-NEXT: v_writelane_b32 v32, s16, 28773; GCN-NEXT: v_writelane_b32 v32, s17, 29774; GCN-NEXT: v_writelane_b32 v32, s18, 30775; GCN-NEXT: v_writelane_b32 v32, s19, 31776; GCN-NEXT: ;;#ASMSTART777; GCN-NEXT: ; def s[4:19]778; GCN-NEXT: ;;#ASMEND779; GCN-NEXT: v_writelane_b32 v32, s4, 32780; GCN-NEXT: v_writelane_b32 v32, s5, 33781; GCN-NEXT: v_writelane_b32 v32, s6, 34782; GCN-NEXT: v_writelane_b32 v32, s7, 35783; GCN-NEXT: v_writelane_b32 v32, s8, 36784; GCN-NEXT: v_writelane_b32 v32, s9, 37785; GCN-NEXT: v_writelane_b32 v32, s10, 38786; GCN-NEXT: v_writelane_b32 v32, s11, 39787; GCN-NEXT: v_writelane_b32 v32, s12, 40788; GCN-NEXT: v_writelane_b32 v32, s13, 41789; GCN-NEXT: v_writelane_b32 v32, s14, 42790; GCN-NEXT: v_writelane_b32 v32, s15, 43791; GCN-NEXT: v_writelane_b32 v32, s16, 44792; GCN-NEXT: v_writelane_b32 v32, s17, 45793; GCN-NEXT: v_writelane_b32 v32, s18, 46794; GCN-NEXT: v_writelane_b32 v32, s19, 47795; GCN-NEXT: ;;#ASMSTART796; GCN-NEXT: ; def s[4:19]797; GCN-NEXT: ;;#ASMEND798; GCN-NEXT: v_writelane_b32 v32, s4, 48799; GCN-NEXT: v_writelane_b32 v32, s5, 49800; GCN-NEXT: v_writelane_b32 v32, s6, 50801; GCN-NEXT: v_writelane_b32 v32, s7, 51802; GCN-NEXT: v_writelane_b32 v32, s8, 52803; GCN-NEXT: v_writelane_b32 v32, s9, 53804; GCN-NEXT: v_writelane_b32 v32, s10, 54805; GCN-NEXT: v_writelane_b32 v32, s11, 55806; GCN-NEXT: v_writelane_b32 v32, s12, 56807; GCN-NEXT: v_writelane_b32 v32, s13, 57808; GCN-NEXT: v_writelane_b32 v32, s14, 58809; GCN-NEXT: v_writelane_b32 v32, s15, 59810; GCN-NEXT: v_writelane_b32 v32, s16, 60811; GCN-NEXT: v_writelane_b32 v32, s17, 61812; GCN-NEXT: v_writelane_b32 v32, s18, 62813; GCN-NEXT: v_writelane_b32 v32, s19, 63814; GCN-NEXT: s_or_saveexec_b64 s[34:35], -1815; GCN-NEXT: buffer_store_dword v32, off, s[52:55], 0 offset:4 ; 4-byte Folded Spill816; GCN-NEXT: s_mov_b64 exec, s[34:35]817; GCN-NEXT: ;;#ASMSTART818; GCN-NEXT: ; def s[2:3]819; GCN-NEXT: ;;#ASMEND820; GCN-NEXT: ; implicit-def: $vgpr32 : SGPR spill to VGPR lane821; GCN-NEXT: v_writelane_b32 v32, s2, 0822; GCN-NEXT: v_writelane_b32 v32, s3, 1823; GCN-NEXT: s_or_saveexec_b64 s[34:35], -1824; GCN-NEXT: buffer_store_dword v32, off, s[52:55], 0 ; 4-byte Folded Spill825; GCN-NEXT: s_mov_b64 exec, s[34:35]826; GCN-NEXT: s_mov_b32 s1, 0827; GCN-NEXT: s_waitcnt lgkmcnt(0)828; GCN-NEXT: s_cmp_lg_u32 s0, s1829; GCN-NEXT: s_cbranch_scc1 .LBB2_2830; GCN-NEXT: ; %bb.1: ; %bb0831; GCN-NEXT: s_or_saveexec_b64 s[34:35], -1832; GCN-NEXT: buffer_load_dword v31, off, s[52:55], 0 offset:4 ; 4-byte Folded Reload833; GCN-NEXT: s_mov_b64 exec, s[34:35]834; GCN-NEXT: s_waitcnt vmcnt(0)835; GCN-NEXT: v_readlane_b32 s36, v31, 32836; GCN-NEXT: v_readlane_b32 s37, v31, 33837; GCN-NEXT: v_readlane_b32 s38, v31, 34838; GCN-NEXT: v_readlane_b32 s39, v31, 35839; GCN-NEXT: v_readlane_b32 s40, v31, 36840; GCN-NEXT: v_readlane_b32 s41, v31, 37841; GCN-NEXT: v_readlane_b32 s42, v31, 38842; GCN-NEXT: v_readlane_b32 s43, v31, 39843; GCN-NEXT: v_readlane_b32 s44, v31, 40844; GCN-NEXT: v_readlane_b32 s45, v31, 41845; GCN-NEXT: v_readlane_b32 s46, v31, 42846; GCN-NEXT: v_readlane_b32 s47, v31, 43847; GCN-NEXT: v_readlane_b32 s48, v31, 44848; GCN-NEXT: v_readlane_b32 s49, v31, 45849; GCN-NEXT: v_readlane_b32 s50, v31, 46850; GCN-NEXT: v_readlane_b32 s51, v31, 47851; GCN-NEXT: v_readlane_b32 s0, v31, 16852; GCN-NEXT: v_readlane_b32 s1, v31, 17853; GCN-NEXT: v_readlane_b32 s2, v31, 18854; GCN-NEXT: v_readlane_b32 s3, v31, 19855; GCN-NEXT: v_readlane_b32 s4, v31, 20856; GCN-NEXT: v_readlane_b32 s5, v31, 21857; GCN-NEXT: v_readlane_b32 s6, v31, 22858; GCN-NEXT: v_readlane_b32 s7, v31, 23859; GCN-NEXT: v_readlane_b32 s8, v31, 24860; GCN-NEXT: v_readlane_b32 s9, v31, 25861; GCN-NEXT: v_readlane_b32 s10, v31, 26862; GCN-NEXT: v_readlane_b32 s11, v31, 27863; GCN-NEXT: v_readlane_b32 s12, v31, 28864; GCN-NEXT: v_readlane_b32 s13, v31, 29865; GCN-NEXT: v_readlane_b32 s14, v31, 30866; GCN-NEXT: v_readlane_b32 s15, v31, 31867; GCN-NEXT: v_readlane_b32 s16, v31, 0868; GCN-NEXT: v_readlane_b32 s17, v31, 1869; GCN-NEXT: v_readlane_b32 s18, v31, 2870; GCN-NEXT: v_readlane_b32 s19, v31, 3871; GCN-NEXT: v_readlane_b32 s20, v31, 4872; GCN-NEXT: v_readlane_b32 s21, v31, 5873; GCN-NEXT: v_readlane_b32 s22, v31, 6874; GCN-NEXT: v_readlane_b32 s23, v31, 7875; GCN-NEXT: v_readlane_b32 s24, v31, 8876; GCN-NEXT: v_readlane_b32 s25, v31, 9877; GCN-NEXT: v_readlane_b32 s26, v31, 10878; GCN-NEXT: v_readlane_b32 s27, v31, 11879; GCN-NEXT: v_readlane_b32 s28, v31, 12880; GCN-NEXT: v_readlane_b32 s29, v31, 13881; GCN-NEXT: v_readlane_b32 s30, v31, 14882; GCN-NEXT: v_readlane_b32 s31, v31, 15883; GCN-NEXT: s_or_saveexec_b64 s[34:35], -1884; GCN-NEXT: buffer_load_dword v32, off, s[52:55], 0 ; 4-byte Folded Reload885; GCN-NEXT: s_mov_b64 exec, s[34:35]886; GCN-NEXT: ;;#ASMSTART887; GCN-NEXT: ; use s[16:31]888; GCN-NEXT: ;;#ASMEND889; GCN-NEXT: ;;#ASMSTART890; GCN-NEXT: ; use s[0:15]891; GCN-NEXT: ;;#ASMEND892; GCN-NEXT: v_readlane_b32 s4, v31, 48893; GCN-NEXT: v_readlane_b32 s5, v31, 49894; GCN-NEXT: v_readlane_b32 s6, v31, 50895; GCN-NEXT: v_readlane_b32 s7, v31, 51896; GCN-NEXT: v_readlane_b32 s8, v31, 52897; GCN-NEXT: v_readlane_b32 s9, v31, 53898; GCN-NEXT: v_readlane_b32 s10, v31, 54899; GCN-NEXT: v_readlane_b32 s11, v31, 55900; GCN-NEXT: v_readlane_b32 s12, v31, 56901; GCN-NEXT: v_readlane_b32 s13, v31, 57902; GCN-NEXT: v_readlane_b32 s14, v31, 58903; GCN-NEXT: v_readlane_b32 s15, v31, 59904; GCN-NEXT: v_readlane_b32 s16, v31, 60905; GCN-NEXT: v_readlane_b32 s17, v31, 61906; GCN-NEXT: v_readlane_b32 s18, v31, 62907; GCN-NEXT: v_readlane_b32 s19, v31, 63908; GCN-NEXT: s_waitcnt vmcnt(0)909; GCN-NEXT: v_readlane_b32 s0, v32, 0910; GCN-NEXT: v_readlane_b32 s1, v32, 1911; GCN-NEXT: ;;#ASMSTART912; GCN-NEXT: ; use s[36:51]913; GCN-NEXT: ;;#ASMEND914; GCN-NEXT: ;;#ASMSTART915; GCN-NEXT: ; use s[4:19]916; GCN-NEXT: ;;#ASMEND917; GCN-NEXT: ;;#ASMSTART918; GCN-NEXT: ; use s[0:1]919; GCN-NEXT: ;;#ASMEND920; GCN-NEXT: .LBB2_2: ; %ret921; GCN-NEXT: s_endpgm922 call void asm sideeffect "", "~{v[0:7]}" () #0923 call void asm sideeffect "", "~{v[8:15]}" () #0924 call void asm sideeffect "", "~{v[16:23]}" () #0925 call void asm sideeffect "", "~{v[24:27]}"() #0926 call void asm sideeffect "", "~{v[28:29]}"() #0927 call void asm sideeffect "", "~{v30}"() #0928 929 %wide.sgpr0 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0930 %wide.sgpr1 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0931 %wide.sgpr2 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0932 %wide.sgpr3 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0933 %wide.sgpr4 = call <2 x i32> asm sideeffect "; def $0", "=s" () #0934 %cmp = icmp eq i32 %in, 0935 br i1 %cmp, label %bb0, label %ret936 937bb0:938 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr0) #0939 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr1) #0940 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr2) #0941 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr3) #0942 call void asm sideeffect "; use $0", "s"(<2 x i32> %wide.sgpr4) #0943 br label %ret944 945ret:946 ret void947}948 949; Same as @no_vgprs_last_sgpr_spill, some SGPR spills must go to memory.950; Additionally, v0 is live throughout the function.951define amdgpu_kernel void @no_vgprs_last_sgpr_spill_live_v0(i32 %in) #1 {952; GCN-LABEL: no_vgprs_last_sgpr_spill_live_v0:953; GCN: ; %bb.0:954; GCN-NEXT: s_mov_b32 s52, SCRATCH_RSRC_DWORD0955; GCN-NEXT: s_mov_b32 s53, SCRATCH_RSRC_DWORD1956; GCN-NEXT: s_mov_b32 s54, -1957; GCN-NEXT: s_mov_b32 s55, 0xe8f000958; GCN-NEXT: s_add_u32 s52, s52, s11959; GCN-NEXT: s_addc_u32 s53, s53, 0960; GCN-NEXT: s_load_dword s0, s[4:5], 0x9961; GCN-NEXT: ;;#ASMSTART962; GCN-NEXT: ;;#ASMEND963; GCN-NEXT: ;;#ASMSTART964; GCN-NEXT: ;;#ASMEND965; GCN-NEXT: ;;#ASMSTART966; GCN-NEXT: ;;#ASMEND967; GCN-NEXT: ;;#ASMSTART968; GCN-NEXT: ;;#ASMEND969; GCN-NEXT: ;;#ASMSTART970; GCN-NEXT: ;;#ASMEND971; GCN-NEXT: ;;#ASMSTART972; GCN-NEXT: ;;#ASMEND973; GCN-NEXT: ;;#ASMSTART974; GCN-NEXT: ; def s[4:19]975; GCN-NEXT: ;;#ASMEND976; GCN-NEXT: ; implicit-def: $vgpr32 : SGPR spill to VGPR lane977; GCN-NEXT: v_writelane_b32 v32, s4, 0978; GCN-NEXT: v_writelane_b32 v32, s5, 1979; GCN-NEXT: v_writelane_b32 v32, s6, 2980; GCN-NEXT: v_writelane_b32 v32, s7, 3981; GCN-NEXT: v_writelane_b32 v32, s8, 4982; GCN-NEXT: v_writelane_b32 v32, s9, 5983; GCN-NEXT: v_writelane_b32 v32, s10, 6984; GCN-NEXT: v_writelane_b32 v32, s11, 7985; GCN-NEXT: v_writelane_b32 v32, s12, 8986; GCN-NEXT: v_writelane_b32 v32, s13, 9987; GCN-NEXT: v_writelane_b32 v32, s14, 10988; GCN-NEXT: v_writelane_b32 v32, s15, 11989; GCN-NEXT: v_writelane_b32 v32, s16, 12990; GCN-NEXT: v_writelane_b32 v32, s17, 13991; GCN-NEXT: v_writelane_b32 v32, s18, 14992; GCN-NEXT: v_writelane_b32 v32, s19, 15993; GCN-NEXT: ;;#ASMSTART994; GCN-NEXT: ; def s[4:19]995; GCN-NEXT: ;;#ASMEND996; GCN-NEXT: v_writelane_b32 v32, s4, 16997; GCN-NEXT: v_writelane_b32 v32, s5, 17998; GCN-NEXT: v_writelane_b32 v32, s6, 18999; GCN-NEXT: v_writelane_b32 v32, s7, 191000; GCN-NEXT: v_writelane_b32 v32, s8, 201001; GCN-NEXT: v_writelane_b32 v32, s9, 211002; GCN-NEXT: v_writelane_b32 v32, s10, 221003; GCN-NEXT: v_writelane_b32 v32, s11, 231004; GCN-NEXT: v_writelane_b32 v32, s12, 241005; GCN-NEXT: v_writelane_b32 v32, s13, 251006; GCN-NEXT: v_writelane_b32 v32, s14, 261007; GCN-NEXT: v_writelane_b32 v32, s15, 271008; GCN-NEXT: v_writelane_b32 v32, s16, 281009; GCN-NEXT: v_writelane_b32 v32, s17, 291010; GCN-NEXT: v_writelane_b32 v32, s18, 301011; GCN-NEXT: v_writelane_b32 v32, s19, 311012; GCN-NEXT: ;;#ASMSTART1013; GCN-NEXT: ; def s[4:19]1014; GCN-NEXT: ;;#ASMEND1015; GCN-NEXT: v_writelane_b32 v32, s4, 321016; GCN-NEXT: v_writelane_b32 v32, s5, 331017; GCN-NEXT: v_writelane_b32 v32, s6, 341018; GCN-NEXT: v_writelane_b32 v32, s7, 351019; GCN-NEXT: v_writelane_b32 v32, s8, 361020; GCN-NEXT: v_writelane_b32 v32, s9, 371021; GCN-NEXT: v_writelane_b32 v32, s10, 381022; GCN-NEXT: v_writelane_b32 v32, s11, 391023; GCN-NEXT: v_writelane_b32 v32, s12, 401024; GCN-NEXT: v_writelane_b32 v32, s13, 411025; GCN-NEXT: v_writelane_b32 v32, s14, 421026; GCN-NEXT: v_writelane_b32 v32, s15, 431027; GCN-NEXT: v_writelane_b32 v32, s16, 441028; GCN-NEXT: v_writelane_b32 v32, s17, 451029; GCN-NEXT: v_writelane_b32 v32, s18, 461030; GCN-NEXT: v_writelane_b32 v32, s19, 471031; GCN-NEXT: ;;#ASMSTART1032; GCN-NEXT: ; def s[4:19]1033; GCN-NEXT: ;;#ASMEND1034; GCN-NEXT: v_writelane_b32 v32, s4, 481035; GCN-NEXT: v_writelane_b32 v32, s5, 491036; GCN-NEXT: v_writelane_b32 v32, s6, 501037; GCN-NEXT: v_writelane_b32 v32, s7, 511038; GCN-NEXT: v_writelane_b32 v32, s8, 521039; GCN-NEXT: v_writelane_b32 v32, s9, 531040; GCN-NEXT: v_writelane_b32 v32, s10, 541041; GCN-NEXT: v_writelane_b32 v32, s11, 551042; GCN-NEXT: v_writelane_b32 v32, s12, 561043; GCN-NEXT: v_writelane_b32 v32, s13, 571044; GCN-NEXT: v_writelane_b32 v32, s14, 581045; GCN-NEXT: v_writelane_b32 v32, s15, 591046; GCN-NEXT: v_writelane_b32 v32, s16, 601047; GCN-NEXT: v_writelane_b32 v32, s17, 611048; GCN-NEXT: v_writelane_b32 v32, s18, 621049; GCN-NEXT: v_writelane_b32 v32, s19, 631050; GCN-NEXT: s_or_saveexec_b64 s[34:35], -11051; GCN-NEXT: buffer_store_dword v32, off, s[52:55], 0 offset:4 ; 4-byte Folded Spill1052; GCN-NEXT: s_mov_b64 exec, s[34:35]1053; GCN-NEXT: ;;#ASMSTART1054; GCN-NEXT: ; def s[2:3]1055; GCN-NEXT: ;;#ASMEND1056; GCN-NEXT: ; implicit-def: $vgpr32 : SGPR spill to VGPR lane1057; GCN-NEXT: v_writelane_b32 v32, s2, 01058; GCN-NEXT: v_writelane_b32 v32, s3, 11059; GCN-NEXT: s_or_saveexec_b64 s[34:35], -11060; GCN-NEXT: buffer_store_dword v32, off, s[52:55], 0 ; 4-byte Folded Spill1061; GCN-NEXT: s_mov_b64 exec, s[34:35]1062; GCN-NEXT: s_mov_b32 s1, 01063; GCN-NEXT: s_waitcnt lgkmcnt(0)1064; GCN-NEXT: s_cmp_lg_u32 s0, s11065; GCN-NEXT: s_cbranch_scc1 .LBB3_21066; GCN-NEXT: ; %bb.1: ; %bb01067; GCN-NEXT: s_or_saveexec_b64 s[34:35], -11068; GCN-NEXT: buffer_load_dword v31, off, s[52:55], 0 offset:4 ; 4-byte Folded Reload1069; GCN-NEXT: s_mov_b64 exec, s[34:35]1070; GCN-NEXT: s_waitcnt vmcnt(0)1071; GCN-NEXT: v_readlane_b32 s36, v31, 321072; GCN-NEXT: v_readlane_b32 s37, v31, 331073; GCN-NEXT: v_readlane_b32 s38, v31, 341074; GCN-NEXT: v_readlane_b32 s39, v31, 351075; GCN-NEXT: v_readlane_b32 s40, v31, 361076; GCN-NEXT: v_readlane_b32 s41, v31, 371077; GCN-NEXT: v_readlane_b32 s42, v31, 381078; GCN-NEXT: v_readlane_b32 s43, v31, 391079; GCN-NEXT: v_readlane_b32 s44, v31, 401080; GCN-NEXT: v_readlane_b32 s45, v31, 411081; GCN-NEXT: v_readlane_b32 s46, v31, 421082; GCN-NEXT: v_readlane_b32 s47, v31, 431083; GCN-NEXT: v_readlane_b32 s48, v31, 441084; GCN-NEXT: v_readlane_b32 s49, v31, 451085; GCN-NEXT: v_readlane_b32 s50, v31, 461086; GCN-NEXT: v_readlane_b32 s51, v31, 471087; GCN-NEXT: v_readlane_b32 s0, v31, 161088; GCN-NEXT: v_readlane_b32 s1, v31, 171089; GCN-NEXT: v_readlane_b32 s2, v31, 181090; GCN-NEXT: v_readlane_b32 s3, v31, 191091; GCN-NEXT: v_readlane_b32 s4, v31, 201092; GCN-NEXT: v_readlane_b32 s5, v31, 211093; GCN-NEXT: v_readlane_b32 s6, v31, 221094; GCN-NEXT: v_readlane_b32 s7, v31, 231095; GCN-NEXT: v_readlane_b32 s8, v31, 241096; GCN-NEXT: v_readlane_b32 s9, v31, 251097; GCN-NEXT: v_readlane_b32 s10, v31, 261098; GCN-NEXT: v_readlane_b32 s11, v31, 271099; GCN-NEXT: v_readlane_b32 s12, v31, 281100; GCN-NEXT: v_readlane_b32 s13, v31, 291101; GCN-NEXT: v_readlane_b32 s14, v31, 301102; GCN-NEXT: v_readlane_b32 s15, v31, 311103; GCN-NEXT: v_readlane_b32 s16, v31, 01104; GCN-NEXT: v_readlane_b32 s17, v31, 11105; GCN-NEXT: v_readlane_b32 s18, v31, 21106; GCN-NEXT: v_readlane_b32 s19, v31, 31107; GCN-NEXT: v_readlane_b32 s20, v31, 41108; GCN-NEXT: v_readlane_b32 s21, v31, 51109; GCN-NEXT: v_readlane_b32 s22, v31, 61110; GCN-NEXT: v_readlane_b32 s23, v31, 71111; GCN-NEXT: v_readlane_b32 s24, v31, 81112; GCN-NEXT: v_readlane_b32 s25, v31, 91113; GCN-NEXT: v_readlane_b32 s26, v31, 101114; GCN-NEXT: v_readlane_b32 s27, v31, 111115; GCN-NEXT: v_readlane_b32 s28, v31, 121116; GCN-NEXT: v_readlane_b32 s29, v31, 131117; GCN-NEXT: v_readlane_b32 s30, v31, 141118; GCN-NEXT: v_readlane_b32 s31, v31, 151119; GCN-NEXT: s_or_saveexec_b64 s[34:35], -11120; GCN-NEXT: buffer_load_dword v32, off, s[52:55], 0 ; 4-byte Folded Reload1121; GCN-NEXT: s_mov_b64 exec, s[34:35]1122; GCN-NEXT: ;;#ASMSTART1123; GCN-NEXT: ; def v01124; GCN-NEXT: ;;#ASMEND1125; GCN-NEXT: ;;#ASMSTART1126; GCN-NEXT: ; use s[16:31]1127; GCN-NEXT: ;;#ASMEND1128; GCN-NEXT: ;;#ASMSTART1129; GCN-NEXT: ; use s[0:15]1130; GCN-NEXT: ;;#ASMEND1131; GCN-NEXT: v_readlane_b32 s4, v31, 481132; GCN-NEXT: v_readlane_b32 s5, v31, 491133; GCN-NEXT: v_readlane_b32 s6, v31, 501134; GCN-NEXT: v_readlane_b32 s7, v31, 511135; GCN-NEXT: v_readlane_b32 s8, v31, 521136; GCN-NEXT: v_readlane_b32 s9, v31, 531137; GCN-NEXT: v_readlane_b32 s10, v31, 541138; GCN-NEXT: v_readlane_b32 s11, v31, 551139; GCN-NEXT: v_readlane_b32 s12, v31, 561140; GCN-NEXT: v_readlane_b32 s13, v31, 571141; GCN-NEXT: v_readlane_b32 s14, v31, 581142; GCN-NEXT: v_readlane_b32 s15, v31, 591143; GCN-NEXT: v_readlane_b32 s16, v31, 601144; GCN-NEXT: v_readlane_b32 s17, v31, 611145; GCN-NEXT: v_readlane_b32 s18, v31, 621146; GCN-NEXT: v_readlane_b32 s19, v31, 631147; GCN-NEXT: s_waitcnt vmcnt(0)1148; GCN-NEXT: v_readlane_b32 s0, v32, 01149; GCN-NEXT: v_readlane_b32 s1, v32, 11150; GCN-NEXT: ;;#ASMSTART1151; GCN-NEXT: ; use s[36:51]1152; GCN-NEXT: ;;#ASMEND1153; GCN-NEXT: ;;#ASMSTART1154; GCN-NEXT: ; use s[4:19]1155; GCN-NEXT: ;;#ASMEND1156; GCN-NEXT: ;;#ASMSTART1157; GCN-NEXT: ; use s[0:1]1158; GCN-NEXT: ;;#ASMEND1159; GCN-NEXT: ;;#ASMSTART1160; GCN-NEXT: ; use v01161; GCN-NEXT: ;;#ASMEND1162; GCN-NEXT: .LBB3_2: ; %ret1163; GCN-NEXT: s_endpgm1164 call void asm sideeffect "", "~{v[0:7]}" () #01165 call void asm sideeffect "", "~{v[8:15]}" () #01166 call void asm sideeffect "", "~{v[16:23]}" () #01167 call void asm sideeffect "", "~{v[24:27]}"() #01168 call void asm sideeffect "", "~{v[28:29]}"() #01169 call void asm sideeffect "", "~{v30}"() #01170 1171 %wide.sgpr0 = call <16 x i32> asm sideeffect "; def $0", "=s" () #01172 %wide.sgpr1 = call <16 x i32> asm sideeffect "; def $0", "=s" () #01173 %wide.sgpr2 = call <16 x i32> asm sideeffect "; def $0", "=s" () #01174 %wide.sgpr3 = call <16 x i32> asm sideeffect "; def $0", "=s" () #01175 %wide.sgpr4 = call <2 x i32> asm sideeffect "; def $0", "=s" () #01176 %cmp = icmp eq i32 %in, 01177 br i1 %cmp, label %bb0, label %ret1178 1179bb0:1180 %vgpr0 = call i32 asm sideeffect "; def $0", "=v" () #01181 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr0) #01182 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr1) #01183 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr2) #01184 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr3) #01185 call void asm sideeffect "; use $0", "s"(<2 x i32> %wide.sgpr4) #01186 call void asm sideeffect "; use $0", "v"(i32 %vgpr0) #01187 br label %ret1188 1189ret:1190 ret void1191}1192 1193attributes #0 = { nounwind }1194attributes #1 = { nounwind "amdgpu-waves-per-eu"="7,7" }1195 1196