brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.7 KiB · e065b8e Raw
581 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx900 -mattr=-flat-for-global -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope --check-prefixes=GFX9 %s3; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=fiji -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefix=GFX803 %s4; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=kaveri -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefix=GFX7 %s5 6 7define amdgpu_kernel void @s_pack_v2i16(ptr addrspace(4) %in0, ptr addrspace(4) %in1) #0 {8; GFX9-LABEL: s_pack_v2i16:9; GFX9:       ; %bb.0:10; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x011; GFX9-NEXT:    s_waitcnt lgkmcnt(0)12; GFX9-NEXT:    s_load_dword s4, s[0:1], 0x013; GFX9-NEXT:    s_load_dword s5, s[2:3], 0x014; GFX9-NEXT:    s_waitcnt lgkmcnt(0)15; GFX9-NEXT:    s_pack_ll_b32_b16 s0, s4, s516; GFX9-NEXT:    ;;#ASMSTART17; GFX9-NEXT:    ; use s018; GFX9-NEXT:    ;;#ASMEND19; GFX9-NEXT:    s_endpgm20;21; GFX803-LABEL: s_pack_v2i16:22; GFX803:       ; %bb.0:23; GFX803-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x024; GFX803-NEXT:    s_waitcnt lgkmcnt(0)25; GFX803-NEXT:    s_load_dword s0, s[0:1], 0x026; GFX803-NEXT:    s_load_dword s1, s[2:3], 0x027; GFX803-NEXT:    s_waitcnt lgkmcnt(0)28; GFX803-NEXT:    s_and_b32 s0, s0, 0xffff29; GFX803-NEXT:    s_lshl_b32 s1, s1, 1630; GFX803-NEXT:    s_or_b32 s0, s0, s131; GFX803-NEXT:    ;;#ASMSTART32; GFX803-NEXT:    ; use s033; GFX803-NEXT:    ;;#ASMEND34; GFX803-NEXT:    s_endpgm35;36; GFX7-LABEL: s_pack_v2i16:37; GFX7:       ; %bb.0:38; GFX7-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x039; GFX7-NEXT:    s_waitcnt lgkmcnt(0)40; GFX7-NEXT:    s_load_dword s0, s[0:1], 0x041; GFX7-NEXT:    s_load_dword s1, s[2:3], 0x042; GFX7-NEXT:    s_waitcnt lgkmcnt(0)43; GFX7-NEXT:    s_and_b32 s0, s0, 0xffff44; GFX7-NEXT:    s_lshl_b32 s1, s1, 1645; GFX7-NEXT:    s_or_b32 s0, s0, s146; GFX7-NEXT:    ;;#ASMSTART47; GFX7-NEXT:    ; use s048; GFX7-NEXT:    ;;#ASMEND49; GFX7-NEXT:    s_endpgm50  %val0 = load volatile i32, ptr addrspace(4) %in051  %val1 = load volatile i32, ptr addrspace(4) %in152  %lo = trunc i32 %val0 to i1653  %hi = trunc i32 %val1 to i1654  %vec.0 = insertelement <2 x i16> poison, i16 %lo, i32 055  %vec.1 = insertelement <2 x i16> %vec.0, i16 %hi, i32 156  %vec.i32 = bitcast <2 x i16> %vec.1 to i3257 58  call void asm sideeffect "; use $0", "s"(i32 %vec.i32) #059  ret void60}61 62define amdgpu_kernel void @s_pack_v2i16_imm_lo(ptr addrspace(4) %in1) #0 {63; GFX9-LABEL: s_pack_v2i16_imm_lo:64; GFX9:       ; %bb.0:65; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x066; GFX9-NEXT:    s_waitcnt lgkmcnt(0)67; GFX9-NEXT:    s_load_dword s0, s[0:1], 0x068; GFX9-NEXT:    s_waitcnt lgkmcnt(0)69; GFX9-NEXT:    s_pack_ll_b32_b16 s0, 0x1c8, s070; GFX9-NEXT:    ;;#ASMSTART71; GFX9-NEXT:    ; use s072; GFX9-NEXT:    ;;#ASMEND73; GFX9-NEXT:    s_endpgm74;75; GFX803-LABEL: s_pack_v2i16_imm_lo:76; GFX803:       ; %bb.0:77; GFX803-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x078; GFX803-NEXT:    s_waitcnt lgkmcnt(0)79; GFX803-NEXT:    s_load_dword s0, s[0:1], 0x080; GFX803-NEXT:    s_waitcnt lgkmcnt(0)81; GFX803-NEXT:    s_lshl_b32 s0, s0, 1682; GFX803-NEXT:    s_or_b32 s0, s0, 0x1c883; GFX803-NEXT:    ;;#ASMSTART84; GFX803-NEXT:    ; use s085; GFX803-NEXT:    ;;#ASMEND86; GFX803-NEXT:    s_endpgm87;88; GFX7-LABEL: s_pack_v2i16_imm_lo:89; GFX7:       ; %bb.0:90; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x091; GFX7-NEXT:    s_waitcnt lgkmcnt(0)92; GFX7-NEXT:    s_load_dword s0, s[0:1], 0x093; GFX7-NEXT:    s_waitcnt lgkmcnt(0)94; GFX7-NEXT:    s_lshl_b32 s0, s0, 1695; GFX7-NEXT:    s_or_b32 s0, s0, 0x1c896; GFX7-NEXT:    ;;#ASMSTART97; GFX7-NEXT:    ; use s098; GFX7-NEXT:    ;;#ASMEND99; GFX7-NEXT:    s_endpgm100  %val1 = load i32, ptr addrspace(4) %in1101  %hi = trunc i32 %val1 to i16102  %vec.0 = insertelement <2 x i16> poison, i16 456, i32 0103  %vec.1 = insertelement <2 x i16> %vec.0, i16 %hi, i32 1104  %vec.i32 = bitcast <2 x i16> %vec.1 to i32105 106  call void asm sideeffect "; use $0", "s"(i32 %vec.i32) #0107  ret void108}109 110define amdgpu_kernel void @s_pack_v2i16_imm_hi(ptr addrspace(4) %in0) #0 {111; GFX9-LABEL: s_pack_v2i16_imm_hi:112; GFX9:       ; %bb.0:113; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0114; GFX9-NEXT:    s_waitcnt lgkmcnt(0)115; GFX9-NEXT:    s_load_dword s0, s[0:1], 0x0116; GFX9-NEXT:    s_waitcnt lgkmcnt(0)117; GFX9-NEXT:    s_pack_ll_b32_b16 s0, s0, 0x1c8118; GFX9-NEXT:    ;;#ASMSTART119; GFX9-NEXT:    ; use s0120; GFX9-NEXT:    ;;#ASMEND121; GFX9-NEXT:    s_endpgm122;123; GFX803-LABEL: s_pack_v2i16_imm_hi:124; GFX803:       ; %bb.0:125; GFX803-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0126; GFX803-NEXT:    s_waitcnt lgkmcnt(0)127; GFX803-NEXT:    s_load_dword s0, s[0:1], 0x0128; GFX803-NEXT:    s_waitcnt lgkmcnt(0)129; GFX803-NEXT:    s_and_b32 s0, s0, 0xffff130; GFX803-NEXT:    s_or_b32 s0, s0, 0x1c80000131; GFX803-NEXT:    ;;#ASMSTART132; GFX803-NEXT:    ; use s0133; GFX803-NEXT:    ;;#ASMEND134; GFX803-NEXT:    s_endpgm135;136; GFX7-LABEL: s_pack_v2i16_imm_hi:137; GFX7:       ; %bb.0:138; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0139; GFX7-NEXT:    s_waitcnt lgkmcnt(0)140; GFX7-NEXT:    s_load_dword s0, s[0:1], 0x0141; GFX7-NEXT:    s_waitcnt lgkmcnt(0)142; GFX7-NEXT:    s_and_b32 s0, s0, 0xffff143; GFX7-NEXT:    s_or_b32 s0, s0, 0x1c80000144; GFX7-NEXT:    ;;#ASMSTART145; GFX7-NEXT:    ; use s0146; GFX7-NEXT:    ;;#ASMEND147; GFX7-NEXT:    s_endpgm148  %val0 = load i32, ptr addrspace(4) %in0149  %lo = trunc i32 %val0 to i16150  %vec.0 = insertelement <2 x i16> poison, i16 %lo, i32 0151  %vec.1 = insertelement <2 x i16> %vec.0, i16 456, i32 1152  %vec.i32 = bitcast <2 x i16> %vec.1 to i32153 154  call void asm sideeffect "; use $0", "s"(i32 %vec.i32) #0155  ret void156}157 158define amdgpu_kernel void @v_pack_v2i16(ptr addrspace(1) %in0, ptr addrspace(1) %in1) #0 {159; GFX9-LABEL: v_pack_v2i16:160; GFX9:       ; %bb.0:161; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0162; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0163; GFX9-NEXT:    s_waitcnt lgkmcnt(0)164; GFX9-NEXT:    global_load_dword v1, v0, s[0:1] glc165; GFX9-NEXT:    s_waitcnt vmcnt(0)166; GFX9-NEXT:    global_load_dword v2, v0, s[2:3] glc167; GFX9-NEXT:    s_waitcnt vmcnt(0)168; GFX9-NEXT:    s_mov_b32 s0, 0x5040100169; GFX9-NEXT:    v_perm_b32 v0, v2, v1, s0170; GFX9-NEXT:    ;;#ASMSTART171; GFX9-NEXT:    ; use v0172; GFX9-NEXT:    ;;#ASMEND173; GFX9-NEXT:    s_endpgm174;175; GFX803-LABEL: v_pack_v2i16:176; GFX803:       ; %bb.0:177; GFX803-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0178; GFX803-NEXT:    v_lshlrev_b32_e32 v2, 2, v0179; GFX803-NEXT:    s_add_i32 s12, s12, s17180; GFX803-NEXT:    s_mov_b32 flat_scratch_lo, s13181; GFX803-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8182; GFX803-NEXT:    s_waitcnt lgkmcnt(0)183; GFX803-NEXT:    v_mov_b32_e32 v1, s1184; GFX803-NEXT:    v_add_u32_e32 v0, vcc, s0, v2185; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc186; GFX803-NEXT:    v_mov_b32_e32 v3, s3187; GFX803-NEXT:    v_add_u32_e32 v2, vcc, s2, v2188; GFX803-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc189; GFX803-NEXT:    flat_load_dword v0, v[0:1] glc190; GFX803-NEXT:    s_waitcnt vmcnt(0)191; GFX803-NEXT:    flat_load_dword v1, v[2:3] glc192; GFX803-NEXT:    s_waitcnt vmcnt(0)193; GFX803-NEXT:    s_mov_b32 s0, 0x1000504194; GFX803-NEXT:    v_perm_b32 v0, v0, v1, s0195; GFX803-NEXT:    ;;#ASMSTART196; GFX803-NEXT:    ; use v0197; GFX803-NEXT:    ;;#ASMEND198; GFX803-NEXT:    s_endpgm199;200; GFX7-LABEL: v_pack_v2i16:201; GFX7:       ; %bb.0:202; GFX7-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0203; GFX7-NEXT:    s_mov_b32 s7, 0x100f000204; GFX7-NEXT:    s_mov_b32 s6, 0205; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 2, v0206; GFX7-NEXT:    v_mov_b32_e32 v1, 0207; GFX7-NEXT:    s_waitcnt lgkmcnt(0)208; GFX7-NEXT:    s_mov_b64 s[4:5], s[0:1]209; GFX7-NEXT:    s_mov_b64 s[0:1], s[2:3]210; GFX7-NEXT:    s_mov_b64 s[2:3], s[6:7]211; GFX7-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc212; GFX7-NEXT:    s_waitcnt vmcnt(0)213; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc214; GFX7-NEXT:    s_waitcnt vmcnt(0)215; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff, v2216; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0217; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0218; GFX7-NEXT:    ;;#ASMSTART219; GFX7-NEXT:    ; use v0220; GFX7-NEXT:    ;;#ASMEND221; GFX7-NEXT:    s_endpgm222  %tid = call i32 @llvm.amdgcn.workitem.id.x()223  %tid.ext = sext i32 %tid to i64224  %in0.gep = getelementptr inbounds i32, ptr addrspace(1) %in0, i64 %tid.ext225  %in1.gep = getelementptr inbounds i32, ptr addrspace(1) %in1, i64 %tid.ext226  %val0 = load volatile i32, ptr addrspace(1) %in0.gep227  %val1 = load volatile i32, ptr addrspace(1) %in1.gep228  %lo = trunc i32 %val0 to i16229  %hi = trunc i32 %val1 to i16230  %vec.0 = insertelement <2 x i16> poison, i16 %lo, i32 0231  %vec.1 = insertelement <2 x i16> %vec.0, i16 %hi, i32 1232  %vec.i32 = bitcast <2 x i16> %vec.1 to i32233  call void asm sideeffect "; use $0", "v"(i32 %vec.i32) #0234  ret void235}236 237define amdgpu_kernel void @v_pack_v2i16_user(ptr addrspace(1) %in0, ptr addrspace(1) %in1) #0 {238; GFX9-LABEL: v_pack_v2i16_user:239; GFX9:       ; %bb.0:240; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0241; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0242; GFX9-NEXT:    s_waitcnt lgkmcnt(0)243; GFX9-NEXT:    global_load_dword v1, v0, s[0:1] glc244; GFX9-NEXT:    s_waitcnt vmcnt(0)245; GFX9-NEXT:    global_load_dword v2, v0, s[2:3] glc246; GFX9-NEXT:    s_waitcnt vmcnt(0)247; GFX9-NEXT:    s_mov_b32 s0, 0x5040100248; GFX9-NEXT:    s_mov_b32 s3, 0xf000249; GFX9-NEXT:    s_mov_b32 s2, -1250; GFX9-NEXT:    v_perm_b32 v0, v2, v1, s0251; GFX9-NEXT:    v_add_u32_e32 v0, 9, v0252; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], 0253; GFX9-NEXT:    s_waitcnt vmcnt(0)254; GFX9-NEXT:    s_endpgm255;256; GFX803-LABEL: v_pack_v2i16_user:257; GFX803:       ; %bb.0:258; GFX803-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0259; GFX803-NEXT:    v_lshlrev_b32_e32 v2, 2, v0260; GFX803-NEXT:    s_add_i32 s12, s12, s17261; GFX803-NEXT:    s_mov_b32 flat_scratch_lo, s13262; GFX803-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8263; GFX803-NEXT:    s_waitcnt lgkmcnt(0)264; GFX803-NEXT:    v_mov_b32_e32 v1, s1265; GFX803-NEXT:    v_add_u32_e32 v0, vcc, s0, v2266; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc267; GFX803-NEXT:    v_mov_b32_e32 v3, s3268; GFX803-NEXT:    v_add_u32_e32 v2, vcc, s2, v2269; GFX803-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc270; GFX803-NEXT:    flat_load_dword v0, v[0:1] glc271; GFX803-NEXT:    s_waitcnt vmcnt(0)272; GFX803-NEXT:    flat_load_dword v1, v[2:3] glc273; GFX803-NEXT:    s_waitcnt vmcnt(0)274; GFX803-NEXT:    s_mov_b32 s0, 0x1000504275; GFX803-NEXT:    s_mov_b32 s3, 0x1100f000276; GFX803-NEXT:    s_mov_b32 s2, -1277; GFX803-NEXT:    v_perm_b32 v0, v0, v1, s0278; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 9, v0279; GFX803-NEXT:    buffer_store_dword v0, off, s[0:3], 0280; GFX803-NEXT:    s_waitcnt vmcnt(0)281; GFX803-NEXT:    s_endpgm282;283; GFX7-LABEL: v_pack_v2i16_user:284; GFX7:       ; %bb.0:285; GFX7-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0286; GFX7-NEXT:    s_mov_b32 s6, 0287; GFX7-NEXT:    s_mov_b32 s7, 0x100f000288; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 2, v0289; GFX7-NEXT:    v_mov_b32_e32 v1, 0290; GFX7-NEXT:    s_waitcnt lgkmcnt(0)291; GFX7-NEXT:    s_mov_b64 s[4:5], s[0:1]292; GFX7-NEXT:    s_mov_b64 s[0:1], s[2:3]293; GFX7-NEXT:    s_mov_b64 s[2:3], s[6:7]294; GFX7-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc295; GFX7-NEXT:    s_waitcnt vmcnt(0)296; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc297; GFX7-NEXT:    s_waitcnt vmcnt(0)298; GFX7-NEXT:    s_mov_b32 s6, -1299; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff, v2300; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0301; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0302; GFX7-NEXT:    v_add_i32_e32 v0, vcc, 9, v0303; GFX7-NEXT:    buffer_store_dword v0, off, s[4:7], 0304; GFX7-NEXT:    s_waitcnt vmcnt(0)305; GFX7-NEXT:    s_endpgm306  %tid = call i32 @llvm.amdgcn.workitem.id.x()307  %tid.ext = sext i32 %tid to i64308  %in0.gep = getelementptr inbounds i32, ptr addrspace(1) %in0, i64 %tid.ext309  %in1.gep = getelementptr inbounds i32, ptr addrspace(1) %in1, i64 %tid.ext310  %val0 = load volatile i32, ptr addrspace(1) %in0.gep311  %val1 = load volatile i32, ptr addrspace(1) %in1.gep312  %lo = trunc i32 %val0 to i16313  %hi = trunc i32 %val1 to i16314  %vec.0 = insertelement <2 x i16> poison, i16 %lo, i32 0315  %vec.1 = insertelement <2 x i16> %vec.0, i16 %hi, i32 1316  %vec.i32 = bitcast <2 x i16> %vec.1 to i32317  %foo = add i32 %vec.i32, 9318  store volatile i32 %foo, ptr addrspace(1) poison319  ret void320}321 322define amdgpu_kernel void @v_pack_v2i16_imm_lo(ptr addrspace(1) %in1) #0 {323; GFX9-LABEL: v_pack_v2i16_imm_lo:324; GFX9:       ; %bb.0:325; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0326; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0327; GFX9-NEXT:    v_mov_b32_e32 v1, 0x5040100328; GFX9-NEXT:    s_waitcnt lgkmcnt(0)329; GFX9-NEXT:    global_load_dword v0, v0, s[0:1] glc330; GFX9-NEXT:    s_waitcnt vmcnt(0)331; GFX9-NEXT:    s_movk_i32 s0, 0x7b332; GFX9-NEXT:    v_perm_b32 v0, v0, s0, v1333; GFX9-NEXT:    ;;#ASMSTART334; GFX9-NEXT:    ; use v0335; GFX9-NEXT:    ;;#ASMEND336; GFX9-NEXT:    s_endpgm337;338; GFX803-LABEL: v_pack_v2i16_imm_lo:339; GFX803:       ; %bb.0:340; GFX803-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0341; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 2, v0342; GFX803-NEXT:    s_add_i32 s12, s12, s17343; GFX803-NEXT:    s_mov_b32 flat_scratch_lo, s13344; GFX803-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8345; GFX803-NEXT:    s_waitcnt lgkmcnt(0)346; GFX803-NEXT:    v_mov_b32_e32 v1, s1347; GFX803-NEXT:    v_add_u32_e32 v0, vcc, s0, v0348; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc349; GFX803-NEXT:    flat_load_dword v0, v[0:1] glc350; GFX803-NEXT:    s_waitcnt vmcnt(0)351; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0352; GFX803-NEXT:    v_or_b32_e32 v0, 0x7b, v0353; GFX803-NEXT:    ;;#ASMSTART354; GFX803-NEXT:    ; use v0355; GFX803-NEXT:    ;;#ASMEND356; GFX803-NEXT:    s_endpgm357;358; GFX7-LABEL: v_pack_v2i16_imm_lo:359; GFX7:       ; %bb.0:360; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0361; GFX7-NEXT:    s_mov_b32 s3, 0x100f000362; GFX7-NEXT:    s_mov_b32 s2, 0363; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 2, v0364; GFX7-NEXT:    v_mov_b32_e32 v1, 0365; GFX7-NEXT:    s_waitcnt lgkmcnt(0)366; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc367; GFX7-NEXT:    s_waitcnt vmcnt(0)368; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0369; GFX7-NEXT:    v_or_b32_e32 v0, 0x7b, v0370; GFX7-NEXT:    ;;#ASMSTART371; GFX7-NEXT:    ; use v0372; GFX7-NEXT:    ;;#ASMEND373; GFX7-NEXT:    s_endpgm374  %tid = call i32 @llvm.amdgcn.workitem.id.x()375  %tid.ext = sext i32 %tid to i64376  %in1.gep = getelementptr inbounds i32, ptr addrspace(1) %in1, i64 %tid.ext377  %val1 = load volatile i32, ptr addrspace(1) %in1.gep378  %hi = trunc i32 %val1 to i16379  %vec.0 = insertelement <2 x i16> poison, i16 123, i32 0380  %vec.1 = insertelement <2 x i16> %vec.0, i16 %hi, i32 1381  %vec.i32 = bitcast <2 x i16> %vec.1 to i32382  call void asm sideeffect "; use $0", "v"(i32 %vec.i32) #0383  ret void384}385 386define amdgpu_kernel void @v_pack_v2i16_inline_imm_lo(ptr addrspace(1) %in1) #0 {387; GFX9-LABEL: v_pack_v2i16_inline_imm_lo:388; GFX9:       ; %bb.0:389; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0390; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0391; GFX9-NEXT:    v_mov_b32_e32 v1, 0x5040100392; GFX9-NEXT:    s_waitcnt lgkmcnt(0)393; GFX9-NEXT:    global_load_dword v0, v0, s[0:1] glc394; GFX9-NEXT:    s_waitcnt vmcnt(0)395; GFX9-NEXT:    v_perm_b32 v0, v0, 64, v1396; GFX9-NEXT:    ;;#ASMSTART397; GFX9-NEXT:    ; use v0398; GFX9-NEXT:    ;;#ASMEND399; GFX9-NEXT:    s_endpgm400;401; GFX803-LABEL: v_pack_v2i16_inline_imm_lo:402; GFX803:       ; %bb.0:403; GFX803-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0404; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 2, v0405; GFX803-NEXT:    s_add_i32 s12, s12, s17406; GFX803-NEXT:    s_mov_b32 flat_scratch_lo, s13407; GFX803-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8408; GFX803-NEXT:    s_waitcnt lgkmcnt(0)409; GFX803-NEXT:    v_mov_b32_e32 v1, s1410; GFX803-NEXT:    v_add_u32_e32 v0, vcc, s0, v0411; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc412; GFX803-NEXT:    flat_load_dword v0, v[0:1] glc413; GFX803-NEXT:    s_waitcnt vmcnt(0)414; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0415; GFX803-NEXT:    v_or_b32_e32 v0, 64, v0416; GFX803-NEXT:    ;;#ASMSTART417; GFX803-NEXT:    ; use v0418; GFX803-NEXT:    ;;#ASMEND419; GFX803-NEXT:    s_endpgm420;421; GFX7-LABEL: v_pack_v2i16_inline_imm_lo:422; GFX7:       ; %bb.0:423; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0424; GFX7-NEXT:    s_mov_b32 s3, 0x100f000425; GFX7-NEXT:    s_mov_b32 s2, 0426; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 2, v0427; GFX7-NEXT:    v_mov_b32_e32 v1, 0428; GFX7-NEXT:    s_waitcnt lgkmcnt(0)429; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc430; GFX7-NEXT:    s_waitcnt vmcnt(0)431; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0432; GFX7-NEXT:    v_or_b32_e32 v0, 64, v0433; GFX7-NEXT:    ;;#ASMSTART434; GFX7-NEXT:    ; use v0435; GFX7-NEXT:    ;;#ASMEND436; GFX7-NEXT:    s_endpgm437  %tid = call i32 @llvm.amdgcn.workitem.id.x()438  %tid.ext = sext i32 %tid to i64439  %in1.gep = getelementptr inbounds i32, ptr addrspace(1) %in1, i64 %tid.ext440  %val1 = load volatile i32, ptr addrspace(1) %in1.gep441  %hi = trunc i32 %val1 to i16442  %vec.0 = insertelement <2 x i16> poison, i16 64, i32 0443  %vec.1 = insertelement <2 x i16> %vec.0, i16 %hi, i32 1444  %vec.i32 = bitcast <2 x i16> %vec.1 to i32445  call void asm sideeffect "; use $0", "v"(i32 %vec.i32) #0446  ret void447}448 449define amdgpu_kernel void @v_pack_v2i16_imm_hi(ptr addrspace(1) %in0) #0 {450; GFX9-LABEL: v_pack_v2i16_imm_hi:451; GFX9:       ; %bb.0:452; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0453; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0454; GFX9-NEXT:    v_mov_b32_e32 v1, 0x5040100455; GFX9-NEXT:    s_waitcnt lgkmcnt(0)456; GFX9-NEXT:    global_load_dword v0, v0, s[0:1] glc457; GFX9-NEXT:    s_waitcnt vmcnt(0)458; GFX9-NEXT:    s_movk_i32 s0, 0x7b459; GFX9-NEXT:    v_perm_b32 v0, s0, v0, v1460; GFX9-NEXT:    ;;#ASMSTART461; GFX9-NEXT:    ; use v0462; GFX9-NEXT:    ;;#ASMEND463; GFX9-NEXT:    s_endpgm464;465; GFX803-LABEL: v_pack_v2i16_imm_hi:466; GFX803:       ; %bb.0:467; GFX803-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0468; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 2, v0469; GFX803-NEXT:    s_add_i32 s12, s12, s17470; GFX803-NEXT:    s_mov_b32 flat_scratch_lo, s13471; GFX803-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8472; GFX803-NEXT:    s_waitcnt lgkmcnt(0)473; GFX803-NEXT:    v_mov_b32_e32 v1, s1474; GFX803-NEXT:    v_add_u32_e32 v0, vcc, s0, v0475; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc476; GFX803-NEXT:    flat_load_dword v0, v[0:1] glc477; GFX803-NEXT:    s_waitcnt vmcnt(0)478; GFX803-NEXT:    v_mov_b32_e32 v1, 0x7b0000479; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD480; GFX803-NEXT:    ;;#ASMSTART481; GFX803-NEXT:    ; use v0482; GFX803-NEXT:    ;;#ASMEND483; GFX803-NEXT:    s_endpgm484;485; GFX7-LABEL: v_pack_v2i16_imm_hi:486; GFX7:       ; %bb.0:487; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0488; GFX7-NEXT:    s_mov_b32 s3, 0x100f000489; GFX7-NEXT:    s_mov_b32 s2, 0490; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 2, v0491; GFX7-NEXT:    v_mov_b32_e32 v1, 0492; GFX7-NEXT:    s_waitcnt lgkmcnt(0)493; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc494; GFX7-NEXT:    s_waitcnt vmcnt(0)495; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0496; GFX7-NEXT:    v_or_b32_e32 v0, 0x7b0000, v0497; GFX7-NEXT:    ;;#ASMSTART498; GFX7-NEXT:    ; use v0499; GFX7-NEXT:    ;;#ASMEND500; GFX7-NEXT:    s_endpgm501  %tid = call i32 @llvm.amdgcn.workitem.id.x()502  %tid.ext = sext i32 %tid to i64503  %in0.gep = getelementptr inbounds i32, ptr addrspace(1) %in0, i64 %tid.ext504  %val0 = load volatile i32, ptr addrspace(1) %in0.gep505  %lo = trunc i32 %val0 to i16506  %vec.0 = insertelement <2 x i16> poison, i16 %lo, i32 0507  %vec.1 = insertelement <2 x i16> %vec.0, i16 123, i32 1508  %vec.i32 = bitcast <2 x i16> %vec.1 to i32509  call void asm sideeffect "; use $0", "v"(i32 %vec.i32) #0510  ret void511}512 513define amdgpu_kernel void @v_pack_v2i16_inline_imm_hi(ptr addrspace(1) %in0) #0 {514; GFX9-LABEL: v_pack_v2i16_inline_imm_hi:515; GFX9:       ; %bb.0:516; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0517; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0518; GFX9-NEXT:    v_mov_b32_e32 v1, 0x5040100519; GFX9-NEXT:    s_waitcnt lgkmcnt(0)520; GFX9-NEXT:    global_load_dword v0, v0, s[0:1] glc521; GFX9-NEXT:    s_waitcnt vmcnt(0)522; GFX9-NEXT:    v_perm_b32 v0, 7, v0, v1523; GFX9-NEXT:    ;;#ASMSTART524; GFX9-NEXT:    ; use v0525; GFX9-NEXT:    ;;#ASMEND526; GFX9-NEXT:    s_endpgm527;528; GFX803-LABEL: v_pack_v2i16_inline_imm_hi:529; GFX803:       ; %bb.0:530; GFX803-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0531; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 2, v0532; GFX803-NEXT:    s_add_i32 s12, s12, s17533; GFX803-NEXT:    s_mov_b32 flat_scratch_lo, s13534; GFX803-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8535; GFX803-NEXT:    s_waitcnt lgkmcnt(0)536; GFX803-NEXT:    v_mov_b32_e32 v1, s1537; GFX803-NEXT:    v_add_u32_e32 v0, vcc, s0, v0538; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc539; GFX803-NEXT:    flat_load_dword v0, v[0:1] glc540; GFX803-NEXT:    s_waitcnt vmcnt(0)541; GFX803-NEXT:    v_mov_b32_e32 v1, 0x70000542; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD543; GFX803-NEXT:    ;;#ASMSTART544; GFX803-NEXT:    ; use v0545; GFX803-NEXT:    ;;#ASMEND546; GFX803-NEXT:    s_endpgm547;548; GFX7-LABEL: v_pack_v2i16_inline_imm_hi:549; GFX7:       ; %bb.0:550; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0551; GFX7-NEXT:    s_mov_b32 s3, 0x100f000552; GFX7-NEXT:    s_mov_b32 s2, 0553; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 2, v0554; GFX7-NEXT:    v_mov_b32_e32 v1, 0555; GFX7-NEXT:    s_waitcnt lgkmcnt(0)556; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc557; GFX7-NEXT:    s_waitcnt vmcnt(0)558; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0559; GFX7-NEXT:    v_or_b32_e32 v0, 0x70000, v0560; GFX7-NEXT:    ;;#ASMSTART561; GFX7-NEXT:    ; use v0562; GFX7-NEXT:    ;;#ASMEND563; GFX7-NEXT:    s_endpgm564  %tid = call i32 @llvm.amdgcn.workitem.id.x()565  %tid.ext = sext i32 %tid to i64566  %in0.gep = getelementptr inbounds i32, ptr addrspace(1) %in0, i64 %tid.ext567  %val0 = load volatile i32, ptr addrspace(1) %in0.gep568  %lo = trunc i32 %val0 to i16569  %vec.0 = insertelement <2 x i16> poison, i16 %lo, i32 0570  %vec.1 = insertelement <2 x i16> %vec.0, i16 7, i32 1571  %vec.i32 = bitcast <2 x i16> %vec.1 to i32572  call void asm sideeffect "; use $0", "v"(i32 %vec.i32) #0573  ret void574}575 576declare i32 @llvm.amdgcn.workitem.id.x() #1577 578attributes #0 = { nounwind }579attributes #1 = { nounwind readnone }580 581