brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.5 KiB · c295a66 Raw
265 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s3 4; Test the localizer did something and we don't materialize all5; constants in SGPRs in the entry block.6 7define amdgpu_kernel void @localize_constants(i1 %cond) {8; GFX9-LABEL: localize_constants:9; GFX9:       ; %bb.0: ; %entry10; GFX9-NEXT:    s_load_dword s1, s[8:9], 0x011; GFX9-NEXT:    s_mov_b32 s0, 112; GFX9-NEXT:    s_waitcnt lgkmcnt(0)13; GFX9-NEXT:    s_xor_b32 s1, s1, 114; GFX9-NEXT:    s_and_b32 s1, s1, 115; GFX9-NEXT:    s_cmp_lg_u32 s1, 016; GFX9-NEXT:    s_cbranch_scc0 .LBB0_217; GFX9-NEXT:  ; %bb.1: ; %bb118; GFX9-NEXT:    v_mov_b32_e32 v0, 0x5be619; GFX9-NEXT:    global_store_dword v[0:1], v0, off20; GFX9-NEXT:    s_waitcnt vmcnt(0)21; GFX9-NEXT:    v_mov_b32_e32 v0, 0x1c722; GFX9-NEXT:    global_store_dword v[0:1], v0, off23; GFX9-NEXT:    s_waitcnt vmcnt(0)24; GFX9-NEXT:    v_mov_b32_e32 v0, 0x3e825; GFX9-NEXT:    global_store_dword v[0:1], v0, off26; GFX9-NEXT:    s_waitcnt vmcnt(0)27; GFX9-NEXT:    v_mov_b32_e32 v0, 0x1c828; GFX9-NEXT:    global_store_dword v[0:1], v0, off29; GFX9-NEXT:    s_waitcnt vmcnt(0)30; GFX9-NEXT:    v_mov_b32_e32 v0, 0x3e731; GFX9-NEXT:    global_store_dword v[0:1], v0, off32; GFX9-NEXT:    s_waitcnt vmcnt(0)33; GFX9-NEXT:    v_mov_b32_e32 v0, 0x7b34; GFX9-NEXT:    global_store_dword v[0:1], v0, off35; GFX9-NEXT:    s_waitcnt vmcnt(0)36; GFX9-NEXT:    s_mov_b32 s0, 037; GFX9-NEXT:  .LBB0_2: ; %Flow38; GFX9-NEXT:    s_xor_b32 s0, s0, 139; GFX9-NEXT:    s_cmp_lg_u32 s0, 040; GFX9-NEXT:    s_cbranch_scc1 .LBB0_441; GFX9-NEXT:  ; %bb.3: ; %bb042; GFX9-NEXT:    v_mov_b32_e32 v0, 0x7b43; GFX9-NEXT:    global_store_dword v[0:1], v0, off44; GFX9-NEXT:    s_waitcnt vmcnt(0)45; GFX9-NEXT:    v_mov_b32_e32 v0, 0x1c846; GFX9-NEXT:    global_store_dword v[0:1], v0, off47; GFX9-NEXT:    s_waitcnt vmcnt(0)48; GFX9-NEXT:    v_mov_b32_e32 v0, 0x3e749; GFX9-NEXT:    global_store_dword v[0:1], v0, off50; GFX9-NEXT:    s_waitcnt vmcnt(0)51; GFX9-NEXT:    v_mov_b32_e32 v0, 0x3e852; GFX9-NEXT:    global_store_dword v[0:1], v0, off53; GFX9-NEXT:    s_waitcnt vmcnt(0)54; GFX9-NEXT:    v_mov_b32_e32 v0, 0x1c755; GFX9-NEXT:    global_store_dword v[0:1], v0, off56; GFX9-NEXT:    s_waitcnt vmcnt(0)57; GFX9-NEXT:    v_mov_b32_e32 v0, 0x5be658; GFX9-NEXT:    global_store_dword v[0:1], v0, off59; GFX9-NEXT:    s_waitcnt vmcnt(0)60; GFX9-NEXT:  .LBB0_4: ; %bb261; GFX9-NEXT:    s_endpgm62entry:63  br i1 %cond, label %bb0, label %bb164 65bb0:66  store volatile i32 123, ptr addrspace(1) poison67  store volatile i32 456, ptr addrspace(1) poison68  store volatile i32 999, ptr addrspace(1) poison69  store volatile i32 1000, ptr addrspace(1) poison70  store volatile i32 455, ptr addrspace(1) poison71  store volatile i32 23526, ptr addrspace(1) poison72  br label %bb273 74bb1:75  store volatile i32 23526, ptr addrspace(1) poison76  store volatile i32 455, ptr addrspace(1) poison77  store volatile i32 1000, ptr addrspace(1) poison78  store volatile i32 456, ptr addrspace(1) poison79  store volatile i32 999, ptr addrspace(1) poison80  store volatile i32 123, ptr addrspace(1) poison81  br label %bb282 83bb2:84  ret void85}86 87; FIXME: These aren't localized because thesee were legalized before88; the localizer, and are no longer G_GLOBAL_VALUE.89@gv0 = addrspace(1) global i32 poison, align 490@gv1 = addrspace(1) global i32 poison, align 491@gv2 = addrspace(1) global i32 poison, align 492@gv3 = addrspace(1) global i32 poison, align 493 94define amdgpu_kernel void @localize_globals(i1 %cond) {95; GFX9-LABEL: localize_globals:96; GFX9:       ; %bb.0: ; %entry97; GFX9-NEXT:    s_load_dword s1, s[8:9], 0x098; GFX9-NEXT:    s_mov_b32 s0, 199; GFX9-NEXT:    s_waitcnt lgkmcnt(0)100; GFX9-NEXT:    s_xor_b32 s1, s1, 1101; GFX9-NEXT:    s_and_b32 s1, s1, 1102; GFX9-NEXT:    s_cmp_lg_u32 s1, 0103; GFX9-NEXT:    s_cbranch_scc0 .LBB1_2104; GFX9-NEXT:  ; %bb.1: ; %bb1105; GFX9-NEXT:    s_getpc_b64 s[0:1]106; GFX9-NEXT:    s_add_u32 s0, s0, gv2@gotpcrel32@lo+4107; GFX9-NEXT:    s_addc_u32 s1, s1, gv2@gotpcrel32@hi+12108; GFX9-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0109; GFX9-NEXT:    s_getpc_b64 s[0:1]110; GFX9-NEXT:    s_add_u32 s0, s0, gv3@gotpcrel32@lo+4111; GFX9-NEXT:    s_addc_u32 s1, s1, gv3@gotpcrel32@hi+12112; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0113; GFX9-NEXT:    v_mov_b32_e32 v0, 0114; GFX9-NEXT:    v_mov_b32_e32 v1, 1115; GFX9-NEXT:    s_mov_b32 s0, 0116; GFX9-NEXT:    s_waitcnt lgkmcnt(0)117; GFX9-NEXT:    global_store_dword v0, v0, s[2:3]118; GFX9-NEXT:    s_waitcnt vmcnt(0)119; GFX9-NEXT:    global_store_dword v0, v1, s[4:5]120; GFX9-NEXT:    s_waitcnt vmcnt(0)121; GFX9-NEXT:  .LBB1_2: ; %Flow122; GFX9-NEXT:    s_xor_b32 s0, s0, 1123; GFX9-NEXT:    s_cmp_lg_u32 s0, 0124; GFX9-NEXT:    s_cbranch_scc1 .LBB1_4125; GFX9-NEXT:  ; %bb.3: ; %bb0126; GFX9-NEXT:    s_getpc_b64 s[0:1]127; GFX9-NEXT:    s_add_u32 s0, s0, gv0@gotpcrel32@lo+4128; GFX9-NEXT:    s_addc_u32 s1, s1, gv0@gotpcrel32@hi+12129; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x0130; GFX9-NEXT:    s_getpc_b64 s[2:3]131; GFX9-NEXT:    s_add_u32 s2, s2, gv1@gotpcrel32@lo+4132; GFX9-NEXT:    s_addc_u32 s3, s3, gv1@gotpcrel32@hi+12133; GFX9-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x0134; GFX9-NEXT:    v_mov_b32_e32 v0, 0135; GFX9-NEXT:    v_mov_b32_e32 v1, 1136; GFX9-NEXT:    s_waitcnt lgkmcnt(0)137; GFX9-NEXT:    global_store_dword v0, v0, s[0:1]138; GFX9-NEXT:    s_waitcnt vmcnt(0)139; GFX9-NEXT:    global_store_dword v0, v1, s[2:3]140; GFX9-NEXT:    s_waitcnt vmcnt(0)141; GFX9-NEXT:  .LBB1_4: ; %bb2142; GFX9-NEXT:    s_endpgm143entry:144  br i1 %cond, label %bb0, label %bb1145 146bb0:147  store volatile i32 0, ptr addrspace(1) @gv0148  store volatile i32 1, ptr addrspace(1) @gv1149  br label %bb2150 151bb1:152  store volatile i32 0, ptr addrspace(1) @gv2153  store volatile i32 1, ptr addrspace(1) @gv3154  br label %bb2155 156bb2:157  ret void158}159 160@static.gv0 = internal addrspace(1) global i32 poison, align 4161@static.gv1 = internal addrspace(1) global i32 poison, align 4162@static.gv2 = internal addrspace(1) global i32 poison, align 4163@static.gv3 = internal addrspace(1) global i32 poison, align 4164 165define void @localize_internal_globals(i1 %cond) {166; GFX9-LABEL: localize_internal_globals:167; GFX9:       ; %bb.0: ; %entry168; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)169; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0170; GFX9-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0171; GFX9-NEXT:    s_xor_b64 s[4:5], vcc, -1172; GFX9-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]173; GFX9-NEXT:    s_xor_b64 s[4:5], exec, s[6:7]174; GFX9-NEXT:    s_cbranch_execnz .LBB2_3175; GFX9-NEXT:  ; %bb.1: ; %Flow176; GFX9-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]177; GFX9-NEXT:    s_cbranch_execnz .LBB2_4178; GFX9-NEXT:  .LBB2_2: ; %bb2179; GFX9-NEXT:    s_or_b64 exec, exec, s[4:5]180; GFX9-NEXT:    s_setpc_b64 s[30:31]181; GFX9-NEXT:  .LBB2_3: ; %bb1182; GFX9-NEXT:    s_getpc_b64 s[6:7]183; GFX9-NEXT:    s_add_u32 s6, s6, static.gv2@rel32@lo+4184; GFX9-NEXT:    s_addc_u32 s7, s7, static.gv2@rel32@hi+12185; GFX9-NEXT:    v_mov_b32_e32 v0, 0186; GFX9-NEXT:    global_store_dword v0, v0, s[6:7]187; GFX9-NEXT:    s_waitcnt vmcnt(0)188; GFX9-NEXT:    s_getpc_b64 s[6:7]189; GFX9-NEXT:    s_add_u32 s6, s6, static.gv3@rel32@lo+4190; GFX9-NEXT:    s_addc_u32 s7, s7, static.gv3@rel32@hi+12191; GFX9-NEXT:    v_mov_b32_e32 v1, 1192; GFX9-NEXT:    global_store_dword v0, v1, s[6:7]193; GFX9-NEXT:    s_waitcnt vmcnt(0)194; GFX9-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]195; GFX9-NEXT:    s_cbranch_execz .LBB2_2196; GFX9-NEXT:  .LBB2_4: ; %bb0197; GFX9-NEXT:    s_getpc_b64 s[6:7]198; GFX9-NEXT:    s_add_u32 s6, s6, static.gv0@rel32@lo+4199; GFX9-NEXT:    s_addc_u32 s7, s7, static.gv0@rel32@hi+12200; GFX9-NEXT:    v_mov_b32_e32 v0, 0201; GFX9-NEXT:    global_store_dword v0, v0, s[6:7]202; GFX9-NEXT:    s_waitcnt vmcnt(0)203; GFX9-NEXT:    s_getpc_b64 s[6:7]204; GFX9-NEXT:    s_add_u32 s6, s6, static.gv1@rel32@lo+4205; GFX9-NEXT:    s_addc_u32 s7, s7, static.gv1@rel32@hi+12206; GFX9-NEXT:    v_mov_b32_e32 v1, 1207; GFX9-NEXT:    global_store_dword v0, v1, s[6:7]208; GFX9-NEXT:    s_waitcnt vmcnt(0)209; GFX9-NEXT:    s_or_b64 exec, exec, s[4:5]210; GFX9-NEXT:    s_setpc_b64 s[30:31]211entry:212  br i1 %cond, label %bb0, label %bb1213 214bb0:215  store volatile i32 0, ptr addrspace(1) @static.gv0216  store volatile i32 1, ptr addrspace(1) @static.gv1217  br label %bb2218 219bb1:220  store volatile i32 0, ptr addrspace(1) @static.gv2221  store volatile i32 1, ptr addrspace(1) @static.gv3222  br label %bb2223 224bb2:225  ret void226}227 228; This would crash from using the wrong insert point229define void @sink_null_insert_pt(ptr addrspace(4) %arg0) {230; GFX9-LABEL: sink_null_insert_pt:231; GFX9:       ; %bb.0: ; %entry232; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)233; GFX9-NEXT:    s_mov_b32 s16, s33234; GFX9-NEXT:    s_mov_b32 s33, s32235; GFX9-NEXT:    s_or_saveexec_b64 s[18:19], -1236; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill237; GFX9-NEXT:    s_mov_b64 exec, s[18:19]238; GFX9-NEXT:    v_mov_b32_e32 v0, 0239; GFX9-NEXT:    v_mov_b32_e32 v1, 0240; GFX9-NEXT:    global_load_dword v0, v[0:1], off glc241; GFX9-NEXT:    s_waitcnt vmcnt(0)242; GFX9-NEXT:    v_writelane_b32 v40, s16, 2243; GFX9-NEXT:    v_writelane_b32 v40, s30, 0244; GFX9-NEXT:    s_addk_i32 s32, 0x400245; GFX9-NEXT:    v_writelane_b32 v40, s31, 1246; GFX9-NEXT:    s_swappc_b64 s[30:31], 0247; GFX9-NEXT:    v_readlane_b32 s31, v40, 1248; GFX9-NEXT:    v_readlane_b32 s30, v40, 0249; GFX9-NEXT:    s_mov_b32 s32, s33250; GFX9-NEXT:    v_readlane_b32 s4, v40, 2251; GFX9-NEXT:    s_or_saveexec_b64 s[6:7], -1252; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload253; GFX9-NEXT:    s_mov_b64 exec, s[6:7]254; GFX9-NEXT:    s_mov_b32 s33, s4255; GFX9-NEXT:    s_waitcnt vmcnt(0)256; GFX9-NEXT:    s_setpc_b64 s[30:31]257entry:258  %load0 = load volatile i32, ptr addrspace(1) null, align 4259  br label %bb1260 261bb1:262  call void null()263  ret void264}265