260 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN %s3 4; Check lowering of some large insertelement that use the stack5; instead of register indexing.6 7define amdgpu_kernel void @v_insert_v64i32_varidx(ptr addrspace(1) %out.ptr, ptr addrspace(1) %ptr, i32 %val, i32 %idx) #0 {8; GCN-LABEL: v_insert_v64i32_varidx:9; GCN: ; %bb.0:10; GCN-NEXT: s_load_dwordx4 s[20:23], s[8:9], 0x011; GCN-NEXT: s_load_dwordx2 s[24:25], s[8:9], 0x1012; GCN-NEXT: s_add_u32 s0, s0, s1713; GCN-NEXT: s_addc_u32 s1, s1, 014; GCN-NEXT: v_mov_b32_e32 v64, 015; GCN-NEXT: s_waitcnt lgkmcnt(0)16; GCN-NEXT: s_load_dwordx16 s[36:51], s[22:23], 0x017; GCN-NEXT: s_load_dwordx16 s[52:67], s[22:23], 0x4018; GCN-NEXT: s_load_dwordx16 s[4:19], s[22:23], 0x8019; GCN-NEXT: s_waitcnt lgkmcnt(0)20; GCN-NEXT: v_mov_b32_e32 v0, s3621; GCN-NEXT: v_mov_b32_e32 v1, s3722; GCN-NEXT: v_mov_b32_e32 v2, s3823; GCN-NEXT: v_mov_b32_e32 v3, s3924; GCN-NEXT: v_mov_b32_e32 v4, s4025; GCN-NEXT: v_mov_b32_e32 v5, s4126; GCN-NEXT: v_mov_b32_e32 v6, s4227; GCN-NEXT: v_mov_b32_e32 v7, s4328; GCN-NEXT: v_mov_b32_e32 v8, s4429; GCN-NEXT: v_mov_b32_e32 v9, s4530; GCN-NEXT: v_mov_b32_e32 v10, s4631; GCN-NEXT: v_mov_b32_e32 v11, s4732; GCN-NEXT: v_mov_b32_e32 v12, s4833; GCN-NEXT: v_mov_b32_e32 v13, s4934; GCN-NEXT: v_mov_b32_e32 v14, s5035; GCN-NEXT: v_mov_b32_e32 v15, s5136; GCN-NEXT: s_load_dwordx16 s[36:51], s[22:23], 0xc037; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 038; GCN-NEXT: buffer_store_dword v1, off, s[0:3], 0 offset:439; GCN-NEXT: buffer_store_dword v2, off, s[0:3], 0 offset:840; GCN-NEXT: buffer_store_dword v3, off, s[0:3], 0 offset:1241; GCN-NEXT: buffer_store_dword v4, off, s[0:3], 0 offset:1642; GCN-NEXT: buffer_store_dword v5, off, s[0:3], 0 offset:2043; GCN-NEXT: buffer_store_dword v6, off, s[0:3], 0 offset:2444; GCN-NEXT: buffer_store_dword v7, off, s[0:3], 0 offset:2845; GCN-NEXT: buffer_store_dword v8, off, s[0:3], 0 offset:3246; GCN-NEXT: buffer_store_dword v9, off, s[0:3], 0 offset:3647; GCN-NEXT: buffer_store_dword v10, off, s[0:3], 0 offset:4048; GCN-NEXT: buffer_store_dword v11, off, s[0:3], 0 offset:4449; GCN-NEXT: buffer_store_dword v12, off, s[0:3], 0 offset:4850; GCN-NEXT: buffer_store_dword v13, off, s[0:3], 0 offset:5251; GCN-NEXT: buffer_store_dword v14, off, s[0:3], 0 offset:5652; GCN-NEXT: buffer_store_dword v15, off, s[0:3], 0 offset:6053; GCN-NEXT: v_mov_b32_e32 v0, s5254; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:6455; GCN-NEXT: v_mov_b32_e32 v0, s5356; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:6857; GCN-NEXT: v_mov_b32_e32 v0, s5458; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:7259; GCN-NEXT: v_mov_b32_e32 v0, s5560; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:7661; GCN-NEXT: v_mov_b32_e32 v0, s5662; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:8063; GCN-NEXT: v_mov_b32_e32 v0, s5764; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:8465; GCN-NEXT: v_mov_b32_e32 v0, s5866; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:8867; GCN-NEXT: v_mov_b32_e32 v0, s5968; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:9269; GCN-NEXT: v_mov_b32_e32 v0, s6070; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:9671; GCN-NEXT: v_mov_b32_e32 v0, s6172; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:10073; GCN-NEXT: v_mov_b32_e32 v0, s6274; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:10475; GCN-NEXT: v_mov_b32_e32 v0, s6376; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:10877; GCN-NEXT: v_mov_b32_e32 v0, s6478; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:11279; GCN-NEXT: v_mov_b32_e32 v0, s6580; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:11681; GCN-NEXT: v_mov_b32_e32 v0, s6682; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:12083; GCN-NEXT: v_mov_b32_e32 v0, s6784; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:12485; GCN-NEXT: v_mov_b32_e32 v0, s486; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:12887; GCN-NEXT: v_mov_b32_e32 v0, s588; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:13289; GCN-NEXT: v_mov_b32_e32 v0, s690; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:13691; GCN-NEXT: v_mov_b32_e32 v0, s792; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:14093; GCN-NEXT: v_mov_b32_e32 v0, s894; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:14495; GCN-NEXT: v_mov_b32_e32 v0, s996; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:14897; GCN-NEXT: v_mov_b32_e32 v0, s1098; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:15299; GCN-NEXT: v_mov_b32_e32 v0, s11100; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:156101; GCN-NEXT: v_mov_b32_e32 v0, s12102; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:160103; GCN-NEXT: v_mov_b32_e32 v0, s13104; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:164105; GCN-NEXT: v_mov_b32_e32 v0, s14106; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:168107; GCN-NEXT: v_mov_b32_e32 v0, s15108; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:172109; GCN-NEXT: v_mov_b32_e32 v0, s16110; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:176111; GCN-NEXT: v_mov_b32_e32 v0, s17112; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:180113; GCN-NEXT: v_mov_b32_e32 v0, s18114; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:184115; GCN-NEXT: v_mov_b32_e32 v0, s19116; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:188117; GCN-NEXT: s_waitcnt lgkmcnt(0)118; GCN-NEXT: v_mov_b32_e32 v0, s36119; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:192120; GCN-NEXT: v_mov_b32_e32 v0, s37121; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:196122; GCN-NEXT: v_mov_b32_e32 v0, s38123; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:200124; GCN-NEXT: v_mov_b32_e32 v0, s39125; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:204126; GCN-NEXT: v_mov_b32_e32 v0, s40127; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:208128; GCN-NEXT: v_mov_b32_e32 v0, s41129; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:212130; GCN-NEXT: v_mov_b32_e32 v0, s42131; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:216132; GCN-NEXT: v_mov_b32_e32 v0, s43133; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:220134; GCN-NEXT: v_mov_b32_e32 v0, s44135; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:224136; GCN-NEXT: v_mov_b32_e32 v0, s45137; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:228138; GCN-NEXT: v_mov_b32_e32 v0, s46139; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:232140; GCN-NEXT: v_mov_b32_e32 v0, s47141; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:236142; GCN-NEXT: v_mov_b32_e32 v0, s48143; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:240144; GCN-NEXT: v_mov_b32_e32 v0, s49145; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:244146; GCN-NEXT: v_mov_b32_e32 v0, s50147; GCN-NEXT: s_and_b32 s4, s25, 63148; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:248149; GCN-NEXT: v_mov_b32_e32 v0, s51150; GCN-NEXT: s_lshl_b32 s4, s4, 2151; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:252152; GCN-NEXT: v_mov_b32_e32 v0, s24153; GCN-NEXT: v_mov_b32_e32 v1, s4154; GCN-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen155; GCN-NEXT: buffer_load_dword v0, off, s[0:3], 0156; GCN-NEXT: s_nop 0157; GCN-NEXT: buffer_load_dword v1, off, s[0:3], 0 offset:4158; GCN-NEXT: buffer_load_dword v2, off, s[0:3], 0 offset:8159; GCN-NEXT: buffer_load_dword v3, off, s[0:3], 0 offset:12160; GCN-NEXT: buffer_load_dword v4, off, s[0:3], 0 offset:16161; GCN-NEXT: buffer_load_dword v5, off, s[0:3], 0 offset:20162; GCN-NEXT: buffer_load_dword v6, off, s[0:3], 0 offset:24163; GCN-NEXT: buffer_load_dword v7, off, s[0:3], 0 offset:28164; GCN-NEXT: buffer_load_dword v8, off, s[0:3], 0 offset:32165; GCN-NEXT: buffer_load_dword v9, off, s[0:3], 0 offset:36166; GCN-NEXT: buffer_load_dword v10, off, s[0:3], 0 offset:40167; GCN-NEXT: buffer_load_dword v11, off, s[0:3], 0 offset:44168; GCN-NEXT: buffer_load_dword v12, off, s[0:3], 0 offset:48169; GCN-NEXT: buffer_load_dword v13, off, s[0:3], 0 offset:52170; GCN-NEXT: buffer_load_dword v14, off, s[0:3], 0 offset:56171; GCN-NEXT: buffer_load_dword v15, off, s[0:3], 0 offset:60172; GCN-NEXT: buffer_load_dword v16, off, s[0:3], 0 offset:64173; GCN-NEXT: buffer_load_dword v17, off, s[0:3], 0 offset:68174; GCN-NEXT: buffer_load_dword v18, off, s[0:3], 0 offset:72175; GCN-NEXT: buffer_load_dword v19, off, s[0:3], 0 offset:76176; GCN-NEXT: buffer_load_dword v20, off, s[0:3], 0 offset:80177; GCN-NEXT: buffer_load_dword v21, off, s[0:3], 0 offset:84178; GCN-NEXT: buffer_load_dword v22, off, s[0:3], 0 offset:88179; GCN-NEXT: buffer_load_dword v23, off, s[0:3], 0 offset:92180; GCN-NEXT: buffer_load_dword v24, off, s[0:3], 0 offset:96181; GCN-NEXT: buffer_load_dword v25, off, s[0:3], 0 offset:100182; GCN-NEXT: buffer_load_dword v26, off, s[0:3], 0 offset:104183; GCN-NEXT: buffer_load_dword v27, off, s[0:3], 0 offset:108184; GCN-NEXT: buffer_load_dword v28, off, s[0:3], 0 offset:112185; GCN-NEXT: buffer_load_dword v29, off, s[0:3], 0 offset:116186; GCN-NEXT: buffer_load_dword v30, off, s[0:3], 0 offset:120187; GCN-NEXT: buffer_load_dword v31, off, s[0:3], 0 offset:124188; GCN-NEXT: buffer_load_dword v32, off, s[0:3], 0 offset:128189; GCN-NEXT: buffer_load_dword v33, off, s[0:3], 0 offset:132190; GCN-NEXT: buffer_load_dword v34, off, s[0:3], 0 offset:136191; GCN-NEXT: buffer_load_dword v35, off, s[0:3], 0 offset:140192; GCN-NEXT: buffer_load_dword v36, off, s[0:3], 0 offset:144193; GCN-NEXT: buffer_load_dword v37, off, s[0:3], 0 offset:148194; GCN-NEXT: buffer_load_dword v38, off, s[0:3], 0 offset:152195; GCN-NEXT: buffer_load_dword v39, off, s[0:3], 0 offset:156196; GCN-NEXT: buffer_load_dword v40, off, s[0:3], 0 offset:160197; GCN-NEXT: buffer_load_dword v41, off, s[0:3], 0 offset:164198; GCN-NEXT: buffer_load_dword v42, off, s[0:3], 0 offset:168199; GCN-NEXT: buffer_load_dword v43, off, s[0:3], 0 offset:172200; GCN-NEXT: buffer_load_dword v44, off, s[0:3], 0 offset:176201; GCN-NEXT: buffer_load_dword v45, off, s[0:3], 0 offset:180202; GCN-NEXT: buffer_load_dword v46, off, s[0:3], 0 offset:184203; GCN-NEXT: buffer_load_dword v47, off, s[0:3], 0 offset:188204; GCN-NEXT: buffer_load_dword v48, off, s[0:3], 0 offset:192205; GCN-NEXT: buffer_load_dword v49, off, s[0:3], 0 offset:196206; GCN-NEXT: buffer_load_dword v50, off, s[0:3], 0 offset:200207; GCN-NEXT: buffer_load_dword v51, off, s[0:3], 0 offset:204208; GCN-NEXT: buffer_load_dword v52, off, s[0:3], 0 offset:208209; GCN-NEXT: buffer_load_dword v53, off, s[0:3], 0 offset:212210; GCN-NEXT: buffer_load_dword v54, off, s[0:3], 0 offset:216211; GCN-NEXT: buffer_load_dword v55, off, s[0:3], 0 offset:220212; GCN-NEXT: buffer_load_dword v56, off, s[0:3], 0 offset:224213; GCN-NEXT: buffer_load_dword v57, off, s[0:3], 0 offset:228214; GCN-NEXT: buffer_load_dword v58, off, s[0:3], 0 offset:232215; GCN-NEXT: buffer_load_dword v59, off, s[0:3], 0 offset:236216; GCN-NEXT: buffer_load_dword v60, off, s[0:3], 0 offset:240217; GCN-NEXT: buffer_load_dword v61, off, s[0:3], 0 offset:244218; GCN-NEXT: buffer_load_dword v62, off, s[0:3], 0 offset:248219; GCN-NEXT: buffer_load_dword v63, off, s[0:3], 0 offset:252220; GCN-NEXT: s_waitcnt vmcnt(60)221; GCN-NEXT: global_store_dwordx4 v64, v[0:3], s[20:21]222; GCN-NEXT: s_waitcnt vmcnt(57)223; GCN-NEXT: global_store_dwordx4 v64, v[4:7], s[20:21] offset:16224; GCN-NEXT: s_waitcnt vmcnt(54)225; GCN-NEXT: global_store_dwordx4 v64, v[8:11], s[20:21] offset:32226; GCN-NEXT: s_waitcnt vmcnt(51)227; GCN-NEXT: global_store_dwordx4 v64, v[12:15], s[20:21] offset:48228; GCN-NEXT: s_waitcnt vmcnt(48)229; GCN-NEXT: global_store_dwordx4 v64, v[16:19], s[20:21] offset:64230; GCN-NEXT: s_waitcnt vmcnt(45)231; GCN-NEXT: global_store_dwordx4 v64, v[20:23], s[20:21] offset:80232; GCN-NEXT: s_waitcnt vmcnt(42)233; GCN-NEXT: global_store_dwordx4 v64, v[24:27], s[20:21] offset:96234; GCN-NEXT: s_waitcnt vmcnt(39)235; GCN-NEXT: global_store_dwordx4 v64, v[28:31], s[20:21] offset:112236; GCN-NEXT: s_waitcnt vmcnt(36)237; GCN-NEXT: global_store_dwordx4 v64, v[32:35], s[20:21] offset:128238; GCN-NEXT: s_waitcnt vmcnt(33)239; GCN-NEXT: global_store_dwordx4 v64, v[36:39], s[20:21] offset:144240; GCN-NEXT: s_waitcnt vmcnt(30)241; GCN-NEXT: global_store_dwordx4 v64, v[40:43], s[20:21] offset:160242; GCN-NEXT: s_waitcnt vmcnt(27)243; GCN-NEXT: global_store_dwordx4 v64, v[44:47], s[20:21] offset:176244; GCN-NEXT: s_waitcnt vmcnt(24)245; GCN-NEXT: global_store_dwordx4 v64, v[48:51], s[20:21] offset:192246; GCN-NEXT: s_waitcnt vmcnt(21)247; GCN-NEXT: global_store_dwordx4 v64, v[52:55], s[20:21] offset:208248; GCN-NEXT: s_waitcnt vmcnt(18)249; GCN-NEXT: global_store_dwordx4 v64, v[56:59], s[20:21] offset:224250; GCN-NEXT: s_waitcnt vmcnt(15)251; GCN-NEXT: global_store_dwordx4 v64, v[60:63], s[20:21] offset:240252; GCN-NEXT: s_endpgm253 %vec = load <64 x i32>, ptr addrspace(1) %ptr254 %insert = insertelement <64 x i32> %vec, i32 %val, i32 %idx255 store <64 x i32> %insert, ptr addrspace(1) %out.ptr256 ret void257}258 259attributes #0 = { "amdgpu-flat-work-group-size"="1,256" "amdgpu-waves-per-eu"="1,10" }260