brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.8 KiB · 37f4094 Raw
328 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=amdgcn -mcpu=tahiti | FileCheck %s --check-prefixes=GFX6,GCN3; RUN: llc < %s -mtriple=amdgcn -mcpu=tonga | FileCheck %s --check-prefixes=GFX8,GCN4; RUN: llc < %s -mtriple=amdgcn-amd-amdpal -mcpu=gfx1030 | FileCheck %s --check-prefixes=GFX10,GCN5; RUN: llc < %s -mtriple=amdgcn-amd-amdpal -mcpu=gfx1100 -amdgpu-enable-vopd=0 | FileCheck %s --check-prefixes=GFX11,GCN6; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx942 | FileCheck %s --check-prefixes=GFX942,GCN7 8define amdgpu_kernel void @build_vector2 (ptr addrspace(1) %out) {9; GFX6-LABEL: build_vector2:10; GFX6:       ; %bb.0: ; %entry11; GFX6-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x912; GFX6-NEXT:    s_mov_b32 s3, 0xf00013; GFX6-NEXT:    s_mov_b32 s2, -114; GFX6-NEXT:    v_mov_b32_e32 v0, 515; GFX6-NEXT:    v_mov_b32_e32 v1, 616; GFX6-NEXT:    s_waitcnt lgkmcnt(0)17; GFX6-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 018; GFX6-NEXT:    s_endpgm19;20; GFX8-LABEL: build_vector2:21; GFX8:       ; %bb.0: ; %entry22; GFX8-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2423; GFX8-NEXT:    v_mov_b32_e32 v0, 524; GFX8-NEXT:    v_mov_b32_e32 v1, 625; GFX8-NEXT:    s_waitcnt lgkmcnt(0)26; GFX8-NEXT:    v_mov_b32_e32 v3, s127; GFX8-NEXT:    v_mov_b32_e32 v2, s028; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]29; GFX8-NEXT:    s_endpgm30;31; GFX10-LABEL: build_vector2:32; GFX10:       ; %bb.0: ; %entry33; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x034; GFX10-NEXT:    v_mov_b32_e32 v2, 035; GFX10-NEXT:    v_mov_b32_e32 v0, 536; GFX10-NEXT:    v_mov_b32_e32 v1, 637; GFX10-NEXT:    s_waitcnt lgkmcnt(0)38; GFX10-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]39; GFX10-NEXT:    s_endpgm40;41; GFX11-LABEL: build_vector2:42; GFX11:       ; %bb.0: ; %entry43; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x044; GFX11-NEXT:    v_mov_b32_e32 v2, 045; GFX11-NEXT:    v_mov_b32_e32 v0, 546; GFX11-NEXT:    v_mov_b32_e32 v1, 647; GFX11-NEXT:    s_waitcnt lgkmcnt(0)48; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]49; GFX11-NEXT:    s_endpgm50;51; GFX942-LABEL: build_vector2:52; GFX942:       ; %bb.0: ; %entry53; GFX942-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2454; GFX942-NEXT:    v_mov_b32_e32 v0, 055; GFX942-NEXT:    v_mov_b32_e32 v2, 556; GFX942-NEXT:    v_mov_b32_e32 v3, 657; GFX942-NEXT:    s_waitcnt lgkmcnt(0)58; GFX942-NEXT:    global_store_dwordx2 v0, v[2:3], s[0:1]59; GFX942-NEXT:    s_endpgm60entry:61  store <2 x i32> <i32 5, i32 6>, ptr addrspace(1) %out62  ret void63}64 65define amdgpu_kernel void @build_vector4 (ptr addrspace(1) %out) {66; GFX6-LABEL: build_vector4:67; GFX6:       ; %bb.0: ; %entry68; GFX6-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x969; GFX6-NEXT:    s_mov_b32 s3, 0xf00070; GFX6-NEXT:    s_mov_b32 s2, -171; GFX6-NEXT:    v_mov_b32_e32 v0, 572; GFX6-NEXT:    v_mov_b32_e32 v1, 673; GFX6-NEXT:    v_mov_b32_e32 v2, 774; GFX6-NEXT:    v_mov_b32_e32 v3, 875; GFX6-NEXT:    s_waitcnt lgkmcnt(0)76; GFX6-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 077; GFX6-NEXT:    s_endpgm78;79; GFX8-LABEL: build_vector4:80; GFX8:       ; %bb.0: ; %entry81; GFX8-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2482; GFX8-NEXT:    v_mov_b32_e32 v0, 583; GFX8-NEXT:    v_mov_b32_e32 v1, 684; GFX8-NEXT:    v_mov_b32_e32 v2, 785; GFX8-NEXT:    v_mov_b32_e32 v3, 886; GFX8-NEXT:    s_waitcnt lgkmcnt(0)87; GFX8-NEXT:    v_mov_b32_e32 v5, s188; GFX8-NEXT:    v_mov_b32_e32 v4, s089; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]90; GFX8-NEXT:    s_endpgm91;92; GFX10-LABEL: build_vector4:93; GFX10:       ; %bb.0: ; %entry94; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x095; GFX10-NEXT:    v_mov_b32_e32 v4, 096; GFX10-NEXT:    v_mov_b32_e32 v0, 597; GFX10-NEXT:    v_mov_b32_e32 v1, 698; GFX10-NEXT:    v_mov_b32_e32 v2, 799; GFX10-NEXT:    v_mov_b32_e32 v3, 8100; GFX10-NEXT:    s_waitcnt lgkmcnt(0)101; GFX10-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1]102; GFX10-NEXT:    s_endpgm103;104; GFX11-LABEL: build_vector4:105; GFX11:       ; %bb.0: ; %entry106; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0107; GFX11-NEXT:    v_mov_b32_e32 v4, 0108; GFX11-NEXT:    v_mov_b32_e32 v0, 5109; GFX11-NEXT:    v_mov_b32_e32 v1, 6110; GFX11-NEXT:    v_mov_b32_e32 v2, 7111; GFX11-NEXT:    v_mov_b32_e32 v3, 8112; GFX11-NEXT:    s_waitcnt lgkmcnt(0)113; GFX11-NEXT:    global_store_b128 v4, v[0:3], s[0:1]114; GFX11-NEXT:    s_endpgm115;116; GFX942-LABEL: build_vector4:117; GFX942:       ; %bb.0: ; %entry118; GFX942-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24119; GFX942-NEXT:    v_mov_b32_e32 v0, 0120; GFX942-NEXT:    v_mov_b32_e32 v2, 5121; GFX942-NEXT:    v_mov_b32_e32 v3, 6122; GFX942-NEXT:    v_mov_b32_e32 v4, 7123; GFX942-NEXT:    v_mov_b32_e32 v5, 8124; GFX942-NEXT:    s_waitcnt lgkmcnt(0)125; GFX942-NEXT:    global_store_dwordx4 v0, v[2:5], s[0:1]126; GFX942-NEXT:    s_endpgm127entry:128  store <4 x i32> <i32 5, i32 6, i32 7, i32 8>, ptr addrspace(1) %out129  ret void130}131 132define amdgpu_kernel void @build_vector_v2i16 (ptr addrspace(1) %out) {133; GFX6-LABEL: build_vector_v2i16:134; GFX6:       ; %bb.0: ; %entry135; GFX6-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9136; GFX6-NEXT:    s_mov_b32 s3, 0xf000137; GFX6-NEXT:    s_mov_b32 s2, -1138; GFX6-NEXT:    v_mov_b32_e32 v0, 0x60005139; GFX6-NEXT:    s_waitcnt lgkmcnt(0)140; GFX6-NEXT:    buffer_store_dword v0, off, s[0:3], 0141; GFX6-NEXT:    s_endpgm142;143; GFX8-LABEL: build_vector_v2i16:144; GFX8:       ; %bb.0: ; %entry145; GFX8-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24146; GFX8-NEXT:    v_mov_b32_e32 v2, 0x60005147; GFX8-NEXT:    s_waitcnt lgkmcnt(0)148; GFX8-NEXT:    v_mov_b32_e32 v0, s0149; GFX8-NEXT:    v_mov_b32_e32 v1, s1150; GFX8-NEXT:    flat_store_dword v[0:1], v2151; GFX8-NEXT:    s_endpgm152;153; GFX10-LABEL: build_vector_v2i16:154; GFX10:       ; %bb.0: ; %entry155; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0156; GFX10-NEXT:    v_mov_b32_e32 v0, 0157; GFX10-NEXT:    v_mov_b32_e32 v1, 0x60005158; GFX10-NEXT:    s_waitcnt lgkmcnt(0)159; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]160; GFX10-NEXT:    s_endpgm161;162; GFX11-LABEL: build_vector_v2i16:163; GFX11:       ; %bb.0: ; %entry164; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0165; GFX11-NEXT:    v_mov_b32_e32 v0, 0166; GFX11-NEXT:    v_mov_b32_e32 v1, 0x60005167; GFX11-NEXT:    s_waitcnt lgkmcnt(0)168; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]169; GFX11-NEXT:    s_endpgm170;171; GFX942-LABEL: build_vector_v2i16:172; GFX942:       ; %bb.0: ; %entry173; GFX942-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24174; GFX942-NEXT:    v_mov_b32_e32 v0, 0175; GFX942-NEXT:    v_mov_b32_e32 v1, 0x60005176; GFX942-NEXT:    s_waitcnt lgkmcnt(0)177; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]178; GFX942-NEXT:    s_endpgm179entry:180  store <2 x i16> <i16 5, i16 6>, ptr addrspace(1) %out181  ret void182}183 184define amdgpu_kernel void @build_vector_v2i16_trunc (ptr addrspace(1) %out, i32 %a) {185; GFX6-LABEL: build_vector_v2i16_trunc:186; GFX6:       ; %bb.0:187; GFX6-NEXT:    s_load_dword s6, s[4:5], 0xb188; GFX6-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9189; GFX6-NEXT:    s_mov_b32 s7, 5190; GFX6-NEXT:    s_mov_b32 s3, 0xf000191; GFX6-NEXT:    s_mov_b32 s2, -1192; GFX6-NEXT:    s_waitcnt lgkmcnt(0)193; GFX6-NEXT:    s_lshr_b64 s[4:5], s[6:7], 16194; GFX6-NEXT:    v_mov_b32_e32 v0, s4195; GFX6-NEXT:    buffer_store_dword v0, off, s[0:3], 0196; GFX6-NEXT:    s_endpgm197;198; GFX8-LABEL: build_vector_v2i16_trunc:199; GFX8:       ; %bb.0:200; GFX8-NEXT:    s_load_dword s2, s[4:5], 0x2c201; GFX8-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24202; GFX8-NEXT:    s_waitcnt lgkmcnt(0)203; GFX8-NEXT:    s_lshr_b32 s2, s2, 16204; GFX8-NEXT:    s_or_b32 s2, s2, 0x50000205; GFX8-NEXT:    v_mov_b32_e32 v0, s0206; GFX8-NEXT:    v_mov_b32_e32 v1, s1207; GFX8-NEXT:    v_mov_b32_e32 v2, s2208; GFX8-NEXT:    flat_store_dword v[0:1], v2209; GFX8-NEXT:    s_endpgm210;211; GFX10-LABEL: build_vector_v2i16_trunc:212; GFX10:       ; %bb.0:213; GFX10-NEXT:    s_clause 0x1214; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x8215; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0216; GFX10-NEXT:    v_mov_b32_e32 v0, 0217; GFX10-NEXT:    s_waitcnt lgkmcnt(0)218; GFX10-NEXT:    s_lshr_b32 s2, s2, 16219; GFX10-NEXT:    s_pack_ll_b32_b16 s2, s2, 5220; GFX10-NEXT:    v_mov_b32_e32 v1, s2221; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]222; GFX10-NEXT:    s_endpgm223;224; GFX11-LABEL: build_vector_v2i16_trunc:225; GFX11:       ; %bb.0:226; GFX11-NEXT:    s_clause 0x1227; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x8228; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0229; GFX11-NEXT:    v_mov_b32_e32 v0, 0230; GFX11-NEXT:    s_waitcnt lgkmcnt(0)231; GFX11-NEXT:    s_pack_hl_b32_b16 s2, s2, 5232; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)233; GFX11-NEXT:    v_mov_b32_e32 v1, s2234; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]235; GFX11-NEXT:    s_endpgm236;237; GFX942-LABEL: build_vector_v2i16_trunc:238; GFX942:       ; %bb.0:239; GFX942-NEXT:    s_load_dword s2, s[4:5], 0x2c240; GFX942-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24241; GFX942-NEXT:    v_mov_b32_e32 v0, 0242; GFX942-NEXT:    s_waitcnt lgkmcnt(0)243; GFX942-NEXT:    s_lshr_b32 s2, s2, 16244; GFX942-NEXT:    s_pack_ll_b32_b16 s2, s2, 5245; GFX942-NEXT:    v_mov_b32_e32 v1, s2246; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]247; GFX942-NEXT:    s_endpgm248  %srl = lshr i32 %a, 16249  %trunc = trunc i32 %srl to i16250  %ins.0 = insertelement <2 x i16> poison, i16 %trunc, i32 0251  %ins.1 = insertelement <2 x i16> %ins.0, i16 5, i32 1252  store <2 x i16> %ins.1, ptr addrspace(1) %out253  ret void254}255 256define amdgpu_kernel void @build_v2i32_from_v4i16_shuffle(ptr addrspace(1) %out, <4 x i16> %in) {257; GFX6-LABEL: build_v2i32_from_v4i16_shuffle:258; GFX6:       ; %bb.0: ; %entry259; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9260; GFX6-NEXT:    s_waitcnt lgkmcnt(0)261; GFX6-NEXT:    s_mov_b64 s[4:5], s[2:3]262; GFX6-NEXT:    s_lshl_b32 s5, s5, 16263; GFX6-NEXT:    s_lshl_b32 s4, s4, 16264; GFX6-NEXT:    s_mov_b32 s3, 0xf000265; GFX6-NEXT:    s_mov_b32 s2, -1266; GFX6-NEXT:    v_mov_b32_e32 v0, s4267; GFX6-NEXT:    v_mov_b32_e32 v1, s5268; GFX6-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0269; GFX6-NEXT:    s_endpgm270;271; GFX8-LABEL: build_v2i32_from_v4i16_shuffle:272; GFX8:       ; %bb.0: ; %entry273; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24274; GFX8-NEXT:    s_waitcnt lgkmcnt(0)275; GFX8-NEXT:    s_lshl_b32 s3, s3, 16276; GFX8-NEXT:    s_lshl_b32 s2, s2, 16277; GFX8-NEXT:    v_mov_b32_e32 v3, s1278; GFX8-NEXT:    v_mov_b32_e32 v0, s2279; GFX8-NEXT:    v_mov_b32_e32 v1, s3280; GFX8-NEXT:    v_mov_b32_e32 v2, s0281; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]282; GFX8-NEXT:    s_endpgm283;284; GFX10-LABEL: build_v2i32_from_v4i16_shuffle:285; GFX10:       ; %bb.0: ; %entry286; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0287; GFX10-NEXT:    v_mov_b32_e32 v2, 0288; GFX10-NEXT:    s_waitcnt lgkmcnt(0)289; GFX10-NEXT:    s_lshl_b32 s2, s2, 16290; GFX10-NEXT:    s_lshl_b32 s3, s3, 16291; GFX10-NEXT:    v_mov_b32_e32 v0, s2292; GFX10-NEXT:    v_mov_b32_e32 v1, s3293; GFX10-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]294; GFX10-NEXT:    s_endpgm295;296; GFX11-LABEL: build_v2i32_from_v4i16_shuffle:297; GFX11:       ; %bb.0: ; %entry298; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0299; GFX11-NEXT:    v_mov_b32_e32 v2, 0300; GFX11-NEXT:    s_waitcnt lgkmcnt(0)301; GFX11-NEXT:    s_lshl_b32 s2, s2, 16302; GFX11-NEXT:    s_lshl_b32 s3, s3, 16303; GFX11-NEXT:    v_mov_b32_e32 v0, s2304; GFX11-NEXT:    v_mov_b32_e32 v1, s3305; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]306; GFX11-NEXT:    s_endpgm307;308; GFX942-LABEL: build_v2i32_from_v4i16_shuffle:309; GFX942:       ; %bb.0: ; %entry310; GFX942-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24311; GFX942-NEXT:    v_mov_b32_e32 v0, 0312; GFX942-NEXT:    s_waitcnt lgkmcnt(0)313; GFX942-NEXT:    s_lshl_b32 s3, s3, 16314; GFX942-NEXT:    s_lshl_b32 s2, s2, 16315; GFX942-NEXT:    v_mov_b32_e32 v2, s2316; GFX942-NEXT:    v_mov_b32_e32 v3, s3317; GFX942-NEXT:    global_store_dwordx2 v0, v[2:3], s[0:1]318; GFX942-NEXT:    s_endpgm319entry:320  %shuf = shufflevector <4 x i16> %in, <4 x i16> zeroinitializer, <2 x i32> <i32 0, i32 2>321  %zextended = zext <2 x i16> %shuf to <2 x i32>322  %shifted = shl <2 x i32> %zextended, <i32 16, i32 16>323  store <2 x i32> %shifted, ptr addrspace(1) %out324  ret void325}326;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:327; GCN: {{.*}}328