brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.6 KiB · c776b19 Raw
581 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=fiji -o - -amdgpu-enable-lower-module-lds=false %s 2> %t | FileCheck -check-prefixes=GFX8,GFX8-SDAG %s3; RUN: FileCheck -check-prefix=ERR %s < %t4 5; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=fiji -o - -amdgpu-enable-lower-module-lds=false %s 2> %t | FileCheck -check-prefixes=GFX8,GFX8-GISEL %s6; RUN: FileCheck -check-prefix=ERR %s < %t7 8; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -o - -amdgpu-enable-lower-module-lds=false %s 2> %t | FileCheck -check-prefixes=GFX9,GFX9-SDAG %s9; RUN: FileCheck -check-prefix=ERR %s < %t10 11; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -o - -amdgpu-enable-lower-module-lds=false %s 2> %t | FileCheck -check-prefixes=GFX9,GFX9-GISEL %s12; RUN: FileCheck -check-prefix=ERR %s < %t13 14; Test there's no verifier error if a function directly uses LDS and15; we emit a trap. The s_endpgm needs to be emitted in a terminator16; position.17 18; RUN: llc -global-isel=0 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s 2> %t | FileCheck -check-prefixes=CHECK,SDAG %s19; RUN: FileCheck -check-prefix=ERR %s < %t20 21; RUN: llc -global-isel=1 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s 2> %t | FileCheck -check-prefixes=CHECK,GISEL %s22; RUN: FileCheck -check-prefix=ERR %s < %t23 24 25@lds = internal addrspace(3) global float poison, align 426 27; FIXME: The DAG should probably move the trap before the access.28 29; ERR: warning: <unknown>:0:0: in function func_use_lds_global void (): local memory global used by non-kernel function30define void @func_use_lds_global() {31; GFX8-SDAG-LABEL: func_use_lds_global:32; GFX8-SDAG:       ; %bb.0:33; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)34; GFX8-SDAG-NEXT:    v_mov_b32_e32 v0, 035; GFX8-SDAG-NEXT:    s_mov_b32 m0, -136; GFX8-SDAG-NEXT:    s_mov_b64 s[4:5], 0xc837; GFX8-SDAG-NEXT:    ds_write_b32 v0, v038; GFX8-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x039; GFX8-SDAG-NEXT:    s_waitcnt lgkmcnt(0)40; GFX8-SDAG-NEXT:    s_trap 241; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]42;43; GFX8-GISEL-LABEL: func_use_lds_global:44; GFX8-GISEL:       ; %bb.0:45; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)46; GFX8-GISEL-NEXT:    s_mov_b64 s[4:5], 0xc847; GFX8-GISEL-NEXT:    v_mov_b32_e32 v0, 048; GFX8-GISEL-NEXT:    s_mov_b32 m0, -149; GFX8-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x050; GFX8-GISEL-NEXT:    s_waitcnt lgkmcnt(0)51; GFX8-GISEL-NEXT:    s_trap 252; GFX8-GISEL-NEXT:    ds_write_b32 v0, v053; GFX8-GISEL-NEXT:    s_waitcnt lgkmcnt(0)54; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]55;56; GFX9-SDAG-LABEL: func_use_lds_global:57; GFX9-SDAG:       ; %bb.0:58; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)59; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, 060; GFX9-SDAG-NEXT:    ds_write_b32 v0, v061; GFX9-SDAG-NEXT:    s_trap 262; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)63; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]64;65; GFX9-GISEL-LABEL: func_use_lds_global:66; GFX9-GISEL:       ; %bb.0:67; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)68; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, 069; GFX9-GISEL-NEXT:    s_trap 270; GFX9-GISEL-NEXT:    ds_write_b32 v0, v071; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)72; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]73;74; SDAG-LABEL: func_use_lds_global:75; SDAG:       ; %bb.0:76; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)77; SDAG-NEXT:    v_mov_b32_e32 v0, 078; SDAG-NEXT:    ds_write_b32 v0, v079; SDAG-NEXT:    s_cbranch_execnz .LBB0_280; SDAG-NEXT:  ; %bb.1:81; SDAG-NEXT:    s_waitcnt lgkmcnt(0)82; SDAG-NEXT:    s_setpc_b64 s[30:31]83; SDAG-NEXT:  .LBB0_2:84; SDAG-NEXT:    s_endpgm85;86; GISEL-LABEL: func_use_lds_global:87; GISEL:       ; %bb.0:88; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)89; GISEL-NEXT:    s_cbranch_execnz .LBB0_290; GISEL-NEXT:  ; %bb.1:91; GISEL-NEXT:    v_mov_b32_e32 v0, 092; GISEL-NEXT:    ds_write_b32 v0, v093; GISEL-NEXT:    s_waitcnt lgkmcnt(0)94; GISEL-NEXT:    s_setpc_b64 s[30:31]95; GISEL-NEXT:  .LBB0_2:96; GISEL-NEXT:    s_endpgm97  store volatile float 0.0, ptr addrspace(3) @lds, align 498  ret void99}100 101; ERR: warning: <unknown>:0:0: in function func_use_lds_global_constexpr_cast void (ptr addrspace(1)): local memory global used by non-kernel function102define void @func_use_lds_global_constexpr_cast(ptr addrspace(1) %out) {103; GFX8-LABEL: func_use_lds_global_constexpr_cast:104; GFX8:       ; %bb.0:105; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)106; GFX8-NEXT:    s_mov_b64 s[4:5], 0xc8107; GFX8-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0108; GFX8-NEXT:    s_waitcnt lgkmcnt(0)109; GFX8-NEXT:    s_trap 2110; GFX8-NEXT:    s_setpc_b64 s[30:31]111;112; GFX9-LABEL: func_use_lds_global_constexpr_cast:113; GFX9:       ; %bb.0:114; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)115; GFX9-NEXT:    s_trap 2116; GFX9-NEXT:    s_setpc_b64 s[30:31]117;118; CHECK-LABEL: func_use_lds_global_constexpr_cast:119; CHECK:       ; %bb.0:120; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)121; CHECK-NEXT:    s_cbranch_execnz .LBB1_2122; CHECK-NEXT:  ; %bb.1:123; CHECK-NEXT:    s_setpc_b64 s[30:31]124; CHECK-NEXT:  .LBB1_2:125; CHECK-NEXT:    s_endpgm126  store i32 ptrtoint (ptr addrspace(3) @lds to i32), ptr addrspace(1) %out, align 4127  ret void128}129 130; ERR: warning: <unknown>:0:0: in function func_uses_lds_multi void (i1): local memory global used by non-kernel function131define void @func_uses_lds_multi(i1 %cond) {132; GFX8-SDAG-LABEL: func_uses_lds_multi:133; GFX8-SDAG:       ; %bb.0: ; %entry134; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)135; GFX8-SDAG-NEXT:    v_and_b32_e32 v0, 1, v0136; GFX8-SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 1, v0137; GFX8-SDAG-NEXT:    s_mov_b32 m0, -1138; GFX8-SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc139; GFX8-SDAG-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]140; GFX8-SDAG-NEXT:    s_cbranch_execz .LBB2_2141; GFX8-SDAG-NEXT:  ; %bb.1: ; %bb1142; GFX8-SDAG-NEXT:    v_mov_b32_e32 v0, 1143; GFX8-SDAG-NEXT:    s_mov_b64 s[6:7], 0xc8144; GFX8-SDAG-NEXT:    ds_write_b32 v0, v0145; GFX8-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[6:7], 0x0146; GFX8-SDAG-NEXT:    s_waitcnt lgkmcnt(0)147; GFX8-SDAG-NEXT:    s_trap 2148; GFX8-SDAG-NEXT:  .LBB2_2: ; %Flow149; GFX8-SDAG-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]150; GFX8-SDAG-NEXT:    s_cbranch_execz .LBB2_4151; GFX8-SDAG-NEXT:  ; %bb.3: ; %bb0152; GFX8-SDAG-NEXT:    v_mov_b32_e32 v0, 0153; GFX8-SDAG-NEXT:    s_mov_b64 s[6:7], 0xc8154; GFX8-SDAG-NEXT:    ds_write_b32 v0, v0155; GFX8-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[6:7], 0x0156; GFX8-SDAG-NEXT:    s_waitcnt lgkmcnt(0)157; GFX8-SDAG-NEXT:    s_trap 2158; GFX8-SDAG-NEXT:  .LBB2_4: ; %ret159; GFX8-SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]160; GFX8-SDAG-NEXT:    v_mov_b32_e32 v0, 2161; GFX8-SDAG-NEXT:    s_mov_b64 s[4:5], 0xc8162; GFX8-SDAG-NEXT:    ds_write_b32 v0, v0163; GFX8-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0164; GFX8-SDAG-NEXT:    s_waitcnt lgkmcnt(0)165; GFX8-SDAG-NEXT:    s_trap 2166; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]167;168; GFX8-GISEL-LABEL: func_uses_lds_multi:169; GFX8-GISEL:       ; %bb.0: ; %entry170; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)171; GFX8-GISEL-NEXT:    v_and_b32_e32 v0, 1, v0172; GFX8-GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0173; GFX8-GISEL-NEXT:    s_xor_b64 s[4:5], vcc, -1174; GFX8-GISEL-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]175; GFX8-GISEL-NEXT:    s_xor_b64 s[4:5], exec, s[6:7]176; GFX8-GISEL-NEXT:    s_cbranch_execz .LBB2_2177; GFX8-GISEL-NEXT:  ; %bb.1: ; %bb1178; GFX8-GISEL-NEXT:    s_mov_b64 s[6:7], 0xc8179; GFX8-GISEL-NEXT:    v_mov_b32_e32 v0, 1180; GFX8-GISEL-NEXT:    s_mov_b32 m0, -1181; GFX8-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[6:7], 0x0182; GFX8-GISEL-NEXT:    s_waitcnt lgkmcnt(0)183; GFX8-GISEL-NEXT:    s_trap 2184; GFX8-GISEL-NEXT:    ds_write_b32 v0, v0185; GFX8-GISEL-NEXT:  .LBB2_2: ; %Flow186; GFX8-GISEL-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]187; GFX8-GISEL-NEXT:    s_cbranch_execz .LBB2_4188; GFX8-GISEL-NEXT:  ; %bb.3: ; %bb0189; GFX8-GISEL-NEXT:    s_mov_b64 s[6:7], 0xc8190; GFX8-GISEL-NEXT:    v_mov_b32_e32 v0, 0191; GFX8-GISEL-NEXT:    s_mov_b32 m0, -1192; GFX8-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[6:7], 0x0193; GFX8-GISEL-NEXT:    s_waitcnt lgkmcnt(0)194; GFX8-GISEL-NEXT:    s_trap 2195; GFX8-GISEL-NEXT:    ds_write_b32 v0, v0196; GFX8-GISEL-NEXT:  .LBB2_4: ; %ret197; GFX8-GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]198; GFX8-GISEL-NEXT:    s_mov_b64 s[4:5], 0xc8199; GFX8-GISEL-NEXT:    v_mov_b32_e32 v0, 2200; GFX8-GISEL-NEXT:    s_mov_b32 m0, -1201; GFX8-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0202; GFX8-GISEL-NEXT:    s_waitcnt lgkmcnt(0)203; GFX8-GISEL-NEXT:    s_trap 2204; GFX8-GISEL-NEXT:    ds_write_b32 v0, v0205; GFX8-GISEL-NEXT:    s_waitcnt lgkmcnt(0)206; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]207;208; GFX9-SDAG-LABEL: func_uses_lds_multi:209; GFX9-SDAG:       ; %bb.0: ; %entry210; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)211; GFX9-SDAG-NEXT:    v_and_b32_e32 v0, 1, v0212; GFX9-SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 1, v0213; GFX9-SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc214; GFX9-SDAG-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]215; GFX9-SDAG-NEXT:    s_cbranch_execz .LBB2_2216; GFX9-SDAG-NEXT:  ; %bb.1: ; %bb1217; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, 1218; GFX9-SDAG-NEXT:    ds_write_b32 v0, v0219; GFX9-SDAG-NEXT:    s_trap 2220; GFX9-SDAG-NEXT:  .LBB2_2: ; %Flow221; GFX9-SDAG-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]222; GFX9-SDAG-NEXT:    s_cbranch_execz .LBB2_4223; GFX9-SDAG-NEXT:  ; %bb.3: ; %bb0224; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, 0225; GFX9-SDAG-NEXT:    ds_write_b32 v0, v0226; GFX9-SDAG-NEXT:    s_trap 2227; GFX9-SDAG-NEXT:  .LBB2_4: ; %ret228; GFX9-SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]229; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, 2230; GFX9-SDAG-NEXT:    ds_write_b32 v0, v0231; GFX9-SDAG-NEXT:    s_trap 2232; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)233; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]234;235; GFX9-GISEL-LABEL: func_uses_lds_multi:236; GFX9-GISEL:       ; %bb.0: ; %entry237; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)238; GFX9-GISEL-NEXT:    v_and_b32_e32 v0, 1, v0239; GFX9-GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0240; GFX9-GISEL-NEXT:    s_xor_b64 s[4:5], vcc, -1241; GFX9-GISEL-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]242; GFX9-GISEL-NEXT:    s_xor_b64 s[4:5], exec, s[6:7]243; GFX9-GISEL-NEXT:    s_cbranch_execz .LBB2_2244; GFX9-GISEL-NEXT:  ; %bb.1: ; %bb1245; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, 1246; GFX9-GISEL-NEXT:    s_trap 2247; GFX9-GISEL-NEXT:    ds_write_b32 v0, v0248; GFX9-GISEL-NEXT:  .LBB2_2: ; %Flow249; GFX9-GISEL-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]250; GFX9-GISEL-NEXT:    s_cbranch_execz .LBB2_4251; GFX9-GISEL-NEXT:  ; %bb.3: ; %bb0252; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, 0253; GFX9-GISEL-NEXT:    s_trap 2254; GFX9-GISEL-NEXT:    ds_write_b32 v0, v0255; GFX9-GISEL-NEXT:  .LBB2_4: ; %ret256; GFX9-GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]257; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, 2258; GFX9-GISEL-NEXT:    s_trap 2259; GFX9-GISEL-NEXT:    ds_write_b32 v0, v0260; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)261; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]262;263; SDAG-LABEL: func_uses_lds_multi:264; SDAG:       ; %bb.0: ; %entry265; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)266; SDAG-NEXT:    v_and_b32_e32 v0, 1, v0267; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 1, v0268; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc269; SDAG-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]270; SDAG-NEXT:    s_cbranch_execz .LBB2_2271; SDAG-NEXT:  ; %bb.1: ; %bb1272; SDAG-NEXT:    v_mov_b32_e32 v0, 1273; SDAG-NEXT:    ds_write_b32 v0, v0274; SDAG-NEXT:    s_cbranch_execnz .LBB2_6275; SDAG-NEXT:  .LBB2_2: ; %Flow276; SDAG-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]277; SDAG-NEXT:    s_cbranch_execz .LBB2_4278; SDAG-NEXT:  ; %bb.3: ; %bb0279; SDAG-NEXT:    v_mov_b32_e32 v0, 0280; SDAG-NEXT:    ds_write_b32 v0, v0281; SDAG-NEXT:    s_cbranch_execnz .LBB2_6282; SDAG-NEXT:  .LBB2_4: ; %ret283; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]284; SDAG-NEXT:    v_mov_b32_e32 v0, 2285; SDAG-NEXT:    ds_write_b32 v0, v0286; SDAG-NEXT:    s_cbranch_execnz .LBB2_6287; SDAG-NEXT:  ; %bb.5: ; %ret288; SDAG-NEXT:    s_waitcnt lgkmcnt(0)289; SDAG-NEXT:    s_setpc_b64 s[30:31]290; SDAG-NEXT:  .LBB2_6:291; SDAG-NEXT:    s_endpgm292;293; GISEL-LABEL: func_uses_lds_multi:294; GISEL:       ; %bb.0: ; %entry295; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)296; GISEL-NEXT:    v_and_b32_e32 v0, 1, v0297; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0298; GISEL-NEXT:    s_xor_b64 s[4:5], vcc, -1299; GISEL-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]300; GISEL-NEXT:    s_xor_b64 s[4:5], exec, s[6:7]301; GISEL-NEXT:    s_cbranch_execz .LBB2_3302; GISEL-NEXT:  ; %bb.1: ; %bb1303; GISEL-NEXT:    s_cbranch_execnz .LBB2_8304; GISEL-NEXT:  ; %bb.2: ; %bb1305; GISEL-NEXT:    v_mov_b32_e32 v0, 1306; GISEL-NEXT:    ds_write_b32 v0, v0307; GISEL-NEXT:  .LBB2_3: ; %Flow308; GISEL-NEXT:    s_andn2_saveexec_b64 s[4:5], s[4:5]309; GISEL-NEXT:    s_cbranch_execz .LBB2_6310; GISEL-NEXT:  ; %bb.4: ; %bb0311; GISEL-NEXT:    s_cbranch_execnz .LBB2_8312; GISEL-NEXT:  ; %bb.5: ; %bb0313; GISEL-NEXT:    v_mov_b32_e32 v0, 0314; GISEL-NEXT:    ds_write_b32 v0, v0315; GISEL-NEXT:  .LBB2_6: ; %ret316; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]317; GISEL-NEXT:    s_cbranch_execnz .LBB2_8318; GISEL-NEXT:  ; %bb.7: ; %ret319; GISEL-NEXT:    v_mov_b32_e32 v0, 2320; GISEL-NEXT:    ds_write_b32 v0, v0321; GISEL-NEXT:    s_waitcnt lgkmcnt(0)322; GISEL-NEXT:    s_setpc_b64 s[30:31]323; GISEL-NEXT:  .LBB2_8:324; GISEL-NEXT:    s_endpgm325entry:326  br i1 %cond, label %bb0, label %bb1327 328bb0:329  store volatile i32 0, ptr addrspace(3) @lds, align 4330  br label %ret331 332bb1:333  store volatile i32 1, ptr addrspace(3) @lds, align 4334  br label %ret335 336ret:337  store volatile i32 2, ptr addrspace(3) @lds, align 4338  ret void339}340 341; ERR: warning: <unknown>:0:0: in function func_uses_lds_code_after void (ptr addrspace(1)): local memory global used by non-kernel function342define void @func_uses_lds_code_after(ptr addrspace(1) %ptr) {343; GFX8-SDAG-LABEL: func_uses_lds_code_after:344; GFX8-SDAG:       ; %bb.0:345; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)346; GFX8-SDAG-NEXT:    v_mov_b32_e32 v2, 0347; GFX8-SDAG-NEXT:    s_mov_b32 m0, -1348; GFX8-SDAG-NEXT:    ds_write_b32 v0, v2349; GFX8-SDAG-NEXT:    s_mov_b64 s[4:5], 0xc8350; GFX8-SDAG-NEXT:    v_mov_b32_e32 v2, 1351; GFX8-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0352; GFX8-SDAG-NEXT:    s_waitcnt lgkmcnt(0)353; GFX8-SDAG-NEXT:    s_trap 2354; GFX8-SDAG-NEXT:    flat_store_dword v[0:1], v2355; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0)356; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]357;358; GFX8-GISEL-LABEL: func_uses_lds_code_after:359; GFX8-GISEL:       ; %bb.0:360; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)361; GFX8-GISEL-NEXT:    s_mov_b64 s[4:5], 0xc8362; GFX8-GISEL-NEXT:    v_mov_b32_e32 v2, 0363; GFX8-GISEL-NEXT:    s_mov_b32 m0, -1364; GFX8-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0365; GFX8-GISEL-NEXT:    s_waitcnt lgkmcnt(0)366; GFX8-GISEL-NEXT:    s_trap 2367; GFX8-GISEL-NEXT:    ds_write_b32 v0, v2368; GFX8-GISEL-NEXT:    v_mov_b32_e32 v2, 1369; GFX8-GISEL-NEXT:    flat_store_dword v[0:1], v2370; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)371; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]372;373; GFX9-SDAG-LABEL: func_uses_lds_code_after:374; GFX9-SDAG:       ; %bb.0:375; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)376; GFX9-SDAG-NEXT:    v_mov_b32_e32 v2, 0377; GFX9-SDAG-NEXT:    ds_write_b32 v0, v2378; GFX9-SDAG-NEXT:    v_mov_b32_e32 v2, 1379; GFX9-SDAG-NEXT:    s_trap 2380; GFX9-SDAG-NEXT:    global_store_dword v[0:1], v2, off381; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)382; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]383;384; GFX9-GISEL-LABEL: func_uses_lds_code_after:385; GFX9-GISEL:       ; %bb.0:386; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)387; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, 0388; GFX9-GISEL-NEXT:    s_trap 2389; GFX9-GISEL-NEXT:    ds_write_b32 v0, v2390; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, 1391; GFX9-GISEL-NEXT:    global_store_dword v[0:1], v2, off392; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)393; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]394;395; SDAG-LABEL: func_uses_lds_code_after:396; SDAG:       ; %bb.0:397; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)398; SDAG-NEXT:    v_mov_b32_e32 v2, 0399; SDAG-NEXT:    ds_write_b32 v0, v2400; SDAG-NEXT:    s_cbranch_execnz .LBB3_2401; SDAG-NEXT:  ; %bb.1:402; SDAG-NEXT:    v_mov_b32_e32 v2, 1403; SDAG-NEXT:    global_store_dword v[0:1], v2, off404; SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)405; SDAG-NEXT:    s_setpc_b64 s[30:31]406; SDAG-NEXT:  .LBB3_2:407; SDAG-NEXT:    s_endpgm408;409; GISEL-LABEL: func_uses_lds_code_after:410; GISEL:       ; %bb.0:411; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)412; GISEL-NEXT:    s_cbranch_execnz .LBB3_2413; GISEL-NEXT:  ; %bb.1:414; GISEL-NEXT:    v_mov_b32_e32 v2, 0415; GISEL-NEXT:    ds_write_b32 v0, v2416; GISEL-NEXT:    v_mov_b32_e32 v2, 1417; GISEL-NEXT:    global_store_dword v[0:1], v2, off418; GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)419; GISEL-NEXT:    s_setpc_b64 s[30:31]420; GISEL-NEXT:  .LBB3_2:421; GISEL-NEXT:    s_endpgm422  store volatile i32 0, ptr addrspace(3) @lds, align 4423  store volatile i32 1, ptr addrspace(1) %ptr, align 4424  ret void425}426 427; ERR: warning: <unknown>:0:0: in function func_uses_lds_phi_after i32 (i1, ptr addrspace(1)): local memory global used by non-kernel function428define i32 @func_uses_lds_phi_after(i1 %cond, ptr addrspace(1) %ptr) {429; GFX8-SDAG-LABEL: func_uses_lds_phi_after:430; GFX8-SDAG:       ; %bb.0: ; %entry431; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)432; GFX8-SDAG-NEXT:    v_mov_b32_e32 v3, v0433; GFX8-SDAG-NEXT:    flat_load_dword v0, v[1:2] glc434; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0)435; GFX8-SDAG-NEXT:    v_and_b32_e32 v3, 1, v3436; GFX8-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3437; GFX8-SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc438; GFX8-SDAG-NEXT:    s_cbranch_execz .LBB4_2439; GFX8-SDAG-NEXT:  ; %bb.1: ; %use.bb440; GFX8-SDAG-NEXT:    v_mov_b32_e32 v0, 0441; GFX8-SDAG-NEXT:    s_mov_b32 m0, -1442; GFX8-SDAG-NEXT:    s_mov_b64 s[6:7], 0xc8443; GFX8-SDAG-NEXT:    ds_write_b32 v0, v0444; GFX8-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[6:7], 0x0445; GFX8-SDAG-NEXT:    s_waitcnt lgkmcnt(0)446; GFX8-SDAG-NEXT:    s_trap 2447; GFX8-SDAG-NEXT:    flat_load_dword v0, v[1:2] glc448; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0)449; GFX8-SDAG-NEXT:  .LBB4_2: ; %ret450; GFX8-SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]451; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]452;453; GFX8-GISEL-LABEL: func_uses_lds_phi_after:454; GFX8-GISEL:       ; %bb.0: ; %entry455; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)456; GFX8-GISEL-NEXT:    v_mov_b32_e32 v3, v0457; GFX8-GISEL-NEXT:    flat_load_dword v0, v[1:2] glc458; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0)459; GFX8-GISEL-NEXT:    v_and_b32_e32 v3, 1, v3460; GFX8-GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v3461; GFX8-GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc462; GFX8-GISEL-NEXT:    s_cbranch_execz .LBB4_2463; GFX8-GISEL-NEXT:  ; %bb.1: ; %use.bb464; GFX8-GISEL-NEXT:    s_mov_b64 s[6:7], 0xc8465; GFX8-GISEL-NEXT:    v_mov_b32_e32 v0, 0466; GFX8-GISEL-NEXT:    s_mov_b32 m0, -1467; GFX8-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[6:7], 0x0468; GFX8-GISEL-NEXT:    s_waitcnt lgkmcnt(0)469; GFX8-GISEL-NEXT:    s_trap 2470; GFX8-GISEL-NEXT:    ds_write_b32 v0, v0471; GFX8-GISEL-NEXT:    flat_load_dword v0, v[1:2] glc472; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0)473; GFX8-GISEL-NEXT:  .LBB4_2: ; %ret474; GFX8-GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]475; GFX8-GISEL-NEXT:    s_waitcnt lgkmcnt(0)476; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]477;478; GFX9-SDAG-LABEL: func_uses_lds_phi_after:479; GFX9-SDAG:       ; %bb.0: ; %entry480; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)481; GFX9-SDAG-NEXT:    v_mov_b32_e32 v3, v0482; GFX9-SDAG-NEXT:    global_load_dword v0, v[1:2], off glc483; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)484; GFX9-SDAG-NEXT:    v_and_b32_e32 v3, 1, v3485; GFX9-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3486; GFX9-SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc487; GFX9-SDAG-NEXT:    s_cbranch_execz .LBB4_2488; GFX9-SDAG-NEXT:  ; %bb.1: ; %use.bb489; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, 0490; GFX9-SDAG-NEXT:    ds_write_b32 v0, v0491; GFX9-SDAG-NEXT:    s_trap 2492; GFX9-SDAG-NEXT:    global_load_dword v0, v[1:2], off glc493; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0)494; GFX9-SDAG-NEXT:  .LBB4_2: ; %ret495; GFX9-SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]496; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)497; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]498;499; GFX9-GISEL-LABEL: func_uses_lds_phi_after:500; GFX9-GISEL:       ; %bb.0: ; %entry501; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)502; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, v0503; GFX9-GISEL-NEXT:    global_load_dword v0, v[1:2], off glc504; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)505; GFX9-GISEL-NEXT:    v_and_b32_e32 v3, 1, v3506; GFX9-GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v3507; GFX9-GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc508; GFX9-GISEL-NEXT:    s_cbranch_execz .LBB4_2509; GFX9-GISEL-NEXT:  ; %bb.1: ; %use.bb510; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, 0511; GFX9-GISEL-NEXT:    s_trap 2512; GFX9-GISEL-NEXT:    ds_write_b32 v0, v0513; GFX9-GISEL-NEXT:    global_load_dword v0, v[1:2], off glc514; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0)515; GFX9-GISEL-NEXT:  .LBB4_2: ; %ret516; GFX9-GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]517; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)518; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]519;520; SDAG-LABEL: func_uses_lds_phi_after:521; SDAG:       ; %bb.0: ; %entry522; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)523; SDAG-NEXT:    v_mov_b32_e32 v3, v0524; SDAG-NEXT:    global_load_dword v0, v[1:2], off glc525; SDAG-NEXT:    s_waitcnt vmcnt(0)526; SDAG-NEXT:    v_and_b32_e32 v3, 1, v3527; SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3528; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc529; SDAG-NEXT:    s_cbranch_execz .LBB4_3530; SDAG-NEXT:  ; %bb.1: ; %use.bb531; SDAG-NEXT:    v_mov_b32_e32 v0, 0532; SDAG-NEXT:    ds_write_b32 v0, v0533; SDAG-NEXT:    s_cbranch_execnz .LBB4_4534; SDAG-NEXT:  ; %bb.2: ; %use.bb535; SDAG-NEXT:    global_load_dword v0, v[1:2], off glc536; SDAG-NEXT:    s_waitcnt vmcnt(0)537; SDAG-NEXT:  .LBB4_3: ; %ret538; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]539; SDAG-NEXT:    s_waitcnt lgkmcnt(0)540; SDAG-NEXT:    s_setpc_b64 s[30:31]541; SDAG-NEXT:  .LBB4_4:542; SDAG-NEXT:    s_endpgm543;544; GISEL-LABEL: func_uses_lds_phi_after:545; GISEL:       ; %bb.0: ; %entry546; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)547; GISEL-NEXT:    v_mov_b32_e32 v3, v0548; GISEL-NEXT:    global_load_dword v0, v[1:2], off glc549; GISEL-NEXT:    s_waitcnt vmcnt(0)550; GISEL-NEXT:    v_and_b32_e32 v3, 1, v3551; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v3552; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc553; GISEL-NEXT:    s_cbranch_execz .LBB4_3554; GISEL-NEXT:  ; %bb.1: ; %use.bb555; GISEL-NEXT:    s_cbranch_execnz .LBB4_4556; GISEL-NEXT:  ; %bb.2: ; %use.bb557; GISEL-NEXT:    v_mov_b32_e32 v0, 0558; GISEL-NEXT:    ds_write_b32 v0, v0559; GISEL-NEXT:    global_load_dword v0, v[1:2], off glc560; GISEL-NEXT:    s_waitcnt vmcnt(0)561; GISEL-NEXT:  .LBB4_3: ; %ret562; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]563; GISEL-NEXT:    s_waitcnt lgkmcnt(0)564; GISEL-NEXT:    s_setpc_b64 s[30:31]565; GISEL-NEXT:  .LBB4_4:566; GISEL-NEXT:    s_endpgm567entry:568  %entry.load = load volatile i32, ptr addrspace(1) %ptr569  br i1 %cond, label %use.bb, label %ret570 571use.bb:572  store volatile i32 0, ptr addrspace(3) @lds, align 4573  %use.bb.load = load volatile i32, ptr addrspace(1) %ptr574  br label %ret575 576ret:577  %phi = phi i32 [ %entry.load, %entry ], [ %use.bb.load, %use.bb ]578  ret i32 %phi579}580 581