650 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1010 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefix=GCN %s3; RUN: llc -global-isel -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1010 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefix=GISEL %s4; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-flat-for-global,-real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11-GCN-FAKE16 %s5; RUN: llc -global-isel -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-flat-for-global,-real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11-GISEL-FAKE16 %s6; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-flat-for-global,+real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11-GCN-REAL16 %s7; RUN: llc -global-isel -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-flat-for-global,+real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11-GISEL-REAL16 %s8 9declare i32 @llvm.amdgcn.workitem.id.x() #110 11define amdgpu_kernel void @v_pack_b32_v2f16(ptr addrspace(1) %in0, ptr addrspace(1) %in1) #0 {12; GCN-LABEL: v_pack_b32_v2f16:13; GCN: ; %bb.0:14; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2415; GCN-NEXT: v_lshlrev_b32_e32 v0, 1, v016; GCN-NEXT: s_waitcnt lgkmcnt(0)17; GCN-NEXT: global_load_ushort v1, v0, s[0:1] glc dlc18; GCN-NEXT: s_waitcnt vmcnt(0)19; GCN-NEXT: global_load_ushort v2, v0, s[2:3] glc dlc20; GCN-NEXT: s_waitcnt vmcnt(0)21; GCN-NEXT: v_add_f16_e32 v0, 2.0, v122; GCN-NEXT: v_add_f16_e32 v1, 2.0, v223; GCN-NEXT: v_pack_b32_f16 v0, v0, v124; GCN-NEXT: ;;#ASMSTART25; GCN-NEXT: ; use v026; GCN-NEXT: ;;#ASMEND27; GCN-NEXT: s_endpgm28;29; GISEL-LABEL: v_pack_b32_v2f16:30; GISEL: ; %bb.0:31; GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2432; GISEL-NEXT: v_lshlrev_b32_e32 v0, 1, v033; GISEL-NEXT: s_waitcnt lgkmcnt(0)34; GISEL-NEXT: global_load_ushort v1, v0, s[0:1] glc dlc35; GISEL-NEXT: s_waitcnt vmcnt(0)36; GISEL-NEXT: global_load_ushort v2, v0, s[2:3] glc dlc37; GISEL-NEXT: s_waitcnt vmcnt(0)38; GISEL-NEXT: v_add_f16_e32 v0, 2.0, v139; GISEL-NEXT: v_add_f16_e32 v1, 2.0, v240; GISEL-NEXT: v_pack_b32_f16 v0, v0, v141; GISEL-NEXT: ;;#ASMSTART42; GISEL-NEXT: ; use v043; GISEL-NEXT: ;;#ASMEND44; GISEL-NEXT: s_endpgm45;46; GFX11-GCN-FAKE16-LABEL: v_pack_b32_v2f16:47; GFX11-GCN-FAKE16: ; %bb.0:48; GFX11-GCN-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x2449; GFX11-GCN-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v050; GFX11-GCN-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)51; GFX11-GCN-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 1, v052; GFX11-GCN-FAKE16-NEXT: s_waitcnt lgkmcnt(0)53; GFX11-GCN-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1] glc dlc54; GFX11-GCN-FAKE16-NEXT: s_waitcnt vmcnt(0)55; GFX11-GCN-FAKE16-NEXT: global_load_u16 v0, v0, s[2:3] glc dlc56; GFX11-GCN-FAKE16-NEXT: s_waitcnt vmcnt(0)57; GFX11-GCN-FAKE16-NEXT: v_add_f16_e32 v1, 2.0, v158; GFX11-GCN-FAKE16-NEXT: v_add_f16_e32 v0, 2.0, v059; GFX11-GCN-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)60; GFX11-GCN-FAKE16-NEXT: v_pack_b32_f16 v0, v1, v061; GFX11-GCN-FAKE16-NEXT: ;;#ASMSTART62; GFX11-GCN-FAKE16-NEXT: ; use v063; GFX11-GCN-FAKE16-NEXT: ;;#ASMEND64; GFX11-GCN-FAKE16-NEXT: s_endpgm65;66; GFX11-GISEL-FAKE16-LABEL: v_pack_b32_v2f16:67; GFX11-GISEL-FAKE16: ; %bb.0:68; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x2469; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v070; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)71; GFX11-GISEL-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 1, v072; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)73; GFX11-GISEL-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1] glc dlc74; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0)75; GFX11-GISEL-FAKE16-NEXT: global_load_u16 v0, v0, s[2:3] glc dlc76; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0)77; GFX11-GISEL-FAKE16-NEXT: v_add_f16_e32 v1, 2.0, v178; GFX11-GISEL-FAKE16-NEXT: v_add_f16_e32 v0, 2.0, v079; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)80; GFX11-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v1, v081; GFX11-GISEL-FAKE16-NEXT: ;;#ASMSTART82; GFX11-GISEL-FAKE16-NEXT: ; use v083; GFX11-GISEL-FAKE16-NEXT: ;;#ASMEND84; GFX11-GISEL-FAKE16-NEXT: s_endpgm85;86; GFX11-GCN-REAL16-LABEL: v_pack_b32_v2f16:87; GFX11-GCN-REAL16: ; %bb.0:88; GFX11-GCN-REAL16-NEXT: s_load_b128 s[0:3], s[4:5], 0x2489; GFX11-GCN-REAL16-NEXT: v_and_b32_e32 v0, 0x3ff, v090; GFX11-GCN-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)91; GFX11-GCN-REAL16-NEXT: v_lshlrev_b32_e32 v1, 1, v092; GFX11-GCN-REAL16-NEXT: s_waitcnt lgkmcnt(0)93; GFX11-GCN-REAL16-NEXT: global_load_d16_b16 v0, v1, s[0:1] glc dlc94; GFX11-GCN-REAL16-NEXT: s_waitcnt vmcnt(0)95; GFX11-GCN-REAL16-NEXT: global_load_d16_hi_b16 v0, v1, s[2:3] glc dlc96; GFX11-GCN-REAL16-NEXT: s_waitcnt vmcnt(0)97; GFX11-GCN-REAL16-NEXT: v_add_f16_e32 v0.l, 2.0, v0.l98; GFX11-GCN-REAL16-NEXT: v_add_f16_e32 v0.h, 2.0, v0.h99; GFX11-GCN-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)100; GFX11-GCN-REAL16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h101; GFX11-GCN-REAL16-NEXT: ;;#ASMSTART102; GFX11-GCN-REAL16-NEXT: ; use v0103; GFX11-GCN-REAL16-NEXT: ;;#ASMEND104; GFX11-GCN-REAL16-NEXT: s_endpgm105;106; GFX11-GISEL-REAL16-LABEL: v_pack_b32_v2f16:107; GFX11-GISEL-REAL16: ; %bb.0:108; GFX11-GISEL-REAL16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24109; GFX11-GISEL-REAL16-NEXT: v_and_b32_e32 v0, 0x3ff, v0110; GFX11-GISEL-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)111; GFX11-GISEL-REAL16-NEXT: v_lshlrev_b32_e32 v1, 1, v0112; GFX11-GISEL-REAL16-NEXT: s_waitcnt lgkmcnt(0)113; GFX11-GISEL-REAL16-NEXT: global_load_d16_b16 v0, v1, s[0:1] glc dlc114; GFX11-GISEL-REAL16-NEXT: s_waitcnt vmcnt(0)115; GFX11-GISEL-REAL16-NEXT: global_load_d16_hi_b16 v0, v1, s[2:3] glc dlc116; GFX11-GISEL-REAL16-NEXT: s_waitcnt vmcnt(0)117; GFX11-GISEL-REAL16-NEXT: v_add_f16_e32 v0.l, 2.0, v0.l118; GFX11-GISEL-REAL16-NEXT: v_add_f16_e32 v0.h, 2.0, v0.h119; GFX11-GISEL-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)120; GFX11-GISEL-REAL16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h121; GFX11-GISEL-REAL16-NEXT: ;;#ASMSTART122; GFX11-GISEL-REAL16-NEXT: ; use v0123; GFX11-GISEL-REAL16-NEXT: ;;#ASMEND124; GFX11-GISEL-REAL16-NEXT: s_endpgm125 %tid = call i32 @llvm.amdgcn.workitem.id.x()126 %tid.ext = sext i32 %tid to i64127 %in0.gep = getelementptr inbounds half, ptr addrspace(1) %in0, i64 %tid.ext128 %in1.gep = getelementptr inbounds half, ptr addrspace(1) %in1, i64 %tid.ext129 %v0 = load volatile half, ptr addrspace(1) %in0.gep130 %v1 = load volatile half, ptr addrspace(1) %in1.gep131 %v0.add = fadd half %v0, 2.0132 %v1.add = fadd half %v1, 2.0133 %vec.0 = insertelement <2 x half> poison, half %v0.add, i32 0134 %vec.1 = insertelement <2 x half> %vec.0, half %v1.add, i32 1135 %vec.i32 = bitcast <2 x half> %vec.1 to i32136 call void asm sideeffect "; use $0", "v"(i32 %vec.i32) #0137 ret void138}139 140define amdgpu_kernel void @v_pack_b32_v2f16_sub(ptr addrspace(1) %in0, ptr addrspace(1) %in1) #0 {141; GCN-LABEL: v_pack_b32_v2f16_sub:142; GCN: ; %bb.0:143; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24144; GCN-NEXT: v_lshlrev_b32_e32 v0, 1, v0145; GCN-NEXT: s_waitcnt lgkmcnt(0)146; GCN-NEXT: global_load_ushort v1, v0, s[0:1] glc dlc147; GCN-NEXT: s_waitcnt vmcnt(0)148; GCN-NEXT: global_load_ushort v2, v0, s[2:3] glc dlc149; GCN-NEXT: s_waitcnt vmcnt(0)150; GCN-NEXT: v_subrev_f16_e32 v0, 2.0, v1151; GCN-NEXT: v_add_f16_e32 v1, 2.0, v2152; GCN-NEXT: v_pack_b32_f16 v0, v0, v1153; GCN-NEXT: ;;#ASMSTART154; GCN-NEXT: ; use v0155; GCN-NEXT: ;;#ASMEND156; GCN-NEXT: s_endpgm157;158; GISEL-LABEL: v_pack_b32_v2f16_sub:159; GISEL: ; %bb.0:160; GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24161; GISEL-NEXT: v_lshlrev_b32_e32 v0, 1, v0162; GISEL-NEXT: s_waitcnt lgkmcnt(0)163; GISEL-NEXT: global_load_ushort v1, v0, s[0:1] glc dlc164; GISEL-NEXT: s_waitcnt vmcnt(0)165; GISEL-NEXT: global_load_ushort v2, v0, s[2:3] glc dlc166; GISEL-NEXT: s_waitcnt vmcnt(0)167; GISEL-NEXT: v_subrev_f16_e32 v0, 2.0, v1168; GISEL-NEXT: v_add_f16_e32 v1, 2.0, v2169; GISEL-NEXT: v_pack_b32_f16 v0, v0, v1170; GISEL-NEXT: ;;#ASMSTART171; GISEL-NEXT: ; use v0172; GISEL-NEXT: ;;#ASMEND173; GISEL-NEXT: s_endpgm174;175; GFX11-GCN-FAKE16-LABEL: v_pack_b32_v2f16_sub:176; GFX11-GCN-FAKE16: ; %bb.0:177; GFX11-GCN-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24178; GFX11-GCN-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0179; GFX11-GCN-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)180; GFX11-GCN-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 1, v0181; GFX11-GCN-FAKE16-NEXT: s_waitcnt lgkmcnt(0)182; GFX11-GCN-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1] glc dlc183; GFX11-GCN-FAKE16-NEXT: s_waitcnt vmcnt(0)184; GFX11-GCN-FAKE16-NEXT: global_load_u16 v0, v0, s[2:3] glc dlc185; GFX11-GCN-FAKE16-NEXT: s_waitcnt vmcnt(0)186; GFX11-GCN-FAKE16-NEXT: v_subrev_f16_e32 v1, 2.0, v1187; GFX11-GCN-FAKE16-NEXT: v_add_f16_e32 v0, 2.0, v0188; GFX11-GCN-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)189; GFX11-GCN-FAKE16-NEXT: v_pack_b32_f16 v0, v1, v0190; GFX11-GCN-FAKE16-NEXT: ;;#ASMSTART191; GFX11-GCN-FAKE16-NEXT: ; use v0192; GFX11-GCN-FAKE16-NEXT: ;;#ASMEND193; GFX11-GCN-FAKE16-NEXT: s_endpgm194;195; GFX11-GISEL-FAKE16-LABEL: v_pack_b32_v2f16_sub:196; GFX11-GISEL-FAKE16: ; %bb.0:197; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24198; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0199; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)200; GFX11-GISEL-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 1, v0201; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)202; GFX11-GISEL-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1] glc dlc203; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0)204; GFX11-GISEL-FAKE16-NEXT: global_load_u16 v0, v0, s[2:3] glc dlc205; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0)206; GFX11-GISEL-FAKE16-NEXT: v_subrev_f16_e32 v1, 2.0, v1207; GFX11-GISEL-FAKE16-NEXT: v_add_f16_e32 v0, 2.0, v0208; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)209; GFX11-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v1, v0210; GFX11-GISEL-FAKE16-NEXT: ;;#ASMSTART211; GFX11-GISEL-FAKE16-NEXT: ; use v0212; GFX11-GISEL-FAKE16-NEXT: ;;#ASMEND213; GFX11-GISEL-FAKE16-NEXT: s_endpgm214;215; GFX11-GCN-REAL16-LABEL: v_pack_b32_v2f16_sub:216; GFX11-GCN-REAL16: ; %bb.0:217; GFX11-GCN-REAL16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24218; GFX11-GCN-REAL16-NEXT: v_and_b32_e32 v0, 0x3ff, v0219; GFX11-GCN-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)220; GFX11-GCN-REAL16-NEXT: v_lshlrev_b32_e32 v1, 1, v0221; GFX11-GCN-REAL16-NEXT: s_waitcnt lgkmcnt(0)222; GFX11-GCN-REAL16-NEXT: global_load_d16_b16 v0, v1, s[0:1] glc dlc223; GFX11-GCN-REAL16-NEXT: s_waitcnt vmcnt(0)224; GFX11-GCN-REAL16-NEXT: global_load_d16_hi_b16 v0, v1, s[2:3] glc dlc225; GFX11-GCN-REAL16-NEXT: s_waitcnt vmcnt(0)226; GFX11-GCN-REAL16-NEXT: v_subrev_f16_e32 v0.l, 2.0, v0.l227; GFX11-GCN-REAL16-NEXT: v_add_f16_e32 v0.h, 2.0, v0.h228; GFX11-GCN-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)229; GFX11-GCN-REAL16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h230; GFX11-GCN-REAL16-NEXT: ;;#ASMSTART231; GFX11-GCN-REAL16-NEXT: ; use v0232; GFX11-GCN-REAL16-NEXT: ;;#ASMEND233; GFX11-GCN-REAL16-NEXT: s_endpgm234;235; GFX11-GISEL-REAL16-LABEL: v_pack_b32_v2f16_sub:236; GFX11-GISEL-REAL16: ; %bb.0:237; GFX11-GISEL-REAL16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24238; GFX11-GISEL-REAL16-NEXT: v_and_b32_e32 v0, 0x3ff, v0239; GFX11-GISEL-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)240; GFX11-GISEL-REAL16-NEXT: v_lshlrev_b32_e32 v1, 1, v0241; GFX11-GISEL-REAL16-NEXT: s_waitcnt lgkmcnt(0)242; GFX11-GISEL-REAL16-NEXT: global_load_d16_b16 v0, v1, s[0:1] glc dlc243; GFX11-GISEL-REAL16-NEXT: s_waitcnt vmcnt(0)244; GFX11-GISEL-REAL16-NEXT: global_load_d16_hi_b16 v0, v1, s[2:3] glc dlc245; GFX11-GISEL-REAL16-NEXT: s_waitcnt vmcnt(0)246; GFX11-GISEL-REAL16-NEXT: v_subrev_f16_e32 v0.l, 2.0, v0.l247; GFX11-GISEL-REAL16-NEXT: v_add_f16_e32 v0.h, 2.0, v0.h248; GFX11-GISEL-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)249; GFX11-GISEL-REAL16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h250; GFX11-GISEL-REAL16-NEXT: ;;#ASMSTART251; GFX11-GISEL-REAL16-NEXT: ; use v0252; GFX11-GISEL-REAL16-NEXT: ;;#ASMEND253; GFX11-GISEL-REAL16-NEXT: s_endpgm254 %tid = call i32 @llvm.amdgcn.workitem.id.x()255 %tid.ext = sext i32 %tid to i64256 %in0.gep = getelementptr inbounds half, ptr addrspace(1) %in0, i64 %tid.ext257 %in1.gep = getelementptr inbounds half, ptr addrspace(1) %in1, i64 %tid.ext258 %v0 = load volatile half, ptr addrspace(1) %in0.gep259 %v1 = load volatile half, ptr addrspace(1) %in1.gep260 %v0.add = fsub half %v0, 2.0261 %v1.add = fadd half %v1, 2.0262 %vec.0 = insertelement <2 x half> poison, half %v0.add, i32 0263 %vec.1 = insertelement <2 x half> %vec.0, half %v1.add, i32 1264 %vec.i32 = bitcast <2 x half> %vec.1 to i32265 call void asm sideeffect "; use $0", "v"(i32 %vec.i32) #0266 ret void267}268 269define amdgpu_kernel void @fptrunc(270; GCN-LABEL: fptrunc:271; GCN: ; %bb.0:272; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24273; GCN-NEXT: s_mov_b32 s6, -1274; GCN-NEXT: s_mov_b32 s7, 0x31016000275; GCN-NEXT: s_mov_b32 s10, s6276; GCN-NEXT: s_mov_b32 s11, s7277; GCN-NEXT: s_waitcnt lgkmcnt(0)278; GCN-NEXT: s_mov_b32 s8, s2279; GCN-NEXT: s_mov_b32 s9, s3280; GCN-NEXT: s_mov_b32 s4, s0281; GCN-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 0282; GCN-NEXT: s_mov_b32 s5, s1283; GCN-NEXT: s_waitcnt vmcnt(0)284; GCN-NEXT: v_cvt_f16_f32_e32 v1, v1285; GCN-NEXT: v_cvt_f16_f32_e32 v0, v0286; GCN-NEXT: v_pack_b32_f16 v0, v0, v1287; GCN-NEXT: buffer_store_dword v0, off, s[4:7], 0288; GCN-NEXT: s_endpgm289;290; GISEL-LABEL: fptrunc:291; GISEL: ; %bb.0:292; GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24293; GISEL-NEXT: s_waitcnt lgkmcnt(0)294; GISEL-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0295; GISEL-NEXT: s_waitcnt lgkmcnt(0)296; GISEL-NEXT: v_cvt_f16_f32_e32 v0, s2297; GISEL-NEXT: v_cvt_f16_f32_e32 v1, s3298; GISEL-NEXT: s_mov_b32 s2, -1299; GISEL-NEXT: s_mov_b32 s3, 0x31016000300; GISEL-NEXT: v_pack_b32_f16 v0, v0, v1301; GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 0302; GISEL-NEXT: s_endpgm303;304; GFX11-GCN-FAKE16-LABEL: fptrunc:305; GFX11-GCN-FAKE16: ; %bb.0:306; GFX11-GCN-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24307; GFX11-GCN-FAKE16-NEXT: s_mov_b32 s6, -1308; GFX11-GCN-FAKE16-NEXT: s_mov_b32 s7, 0x31016000309; GFX11-GCN-FAKE16-NEXT: s_mov_b32 s10, s6310; GFX11-GCN-FAKE16-NEXT: s_mov_b32 s11, s7311; GFX11-GCN-FAKE16-NEXT: s_waitcnt lgkmcnt(0)312; GFX11-GCN-FAKE16-NEXT: s_mov_b32 s8, s2313; GFX11-GCN-FAKE16-NEXT: s_mov_b32 s9, s3314; GFX11-GCN-FAKE16-NEXT: s_mov_b32 s4, s0315; GFX11-GCN-FAKE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], 0316; GFX11-GCN-FAKE16-NEXT: s_mov_b32 s5, s1317; GFX11-GCN-FAKE16-NEXT: s_waitcnt vmcnt(0)318; GFX11-GCN-FAKE16-NEXT: v_cvt_f16_f32_e32 v1, v1319; GFX11-GCN-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v0320; GFX11-GCN-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)321; GFX11-GCN-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v1322; GFX11-GCN-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], 0323; GFX11-GCN-FAKE16-NEXT: s_endpgm324;325; GFX11-GISEL-FAKE16-LABEL: fptrunc:326; GFX11-GISEL-FAKE16: ; %bb.0:327; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24328; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)329; GFX11-GISEL-FAKE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x0330; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)331; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, s2332; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v1, s3333; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -1334; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x31016000335; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)336; GFX11-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v1337; GFX11-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], 0338; GFX11-GISEL-FAKE16-NEXT: s_endpgm339;340; GFX11-GCN-REAL16-LABEL: fptrunc:341; GFX11-GCN-REAL16: ; %bb.0:342; GFX11-GCN-REAL16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24343; GFX11-GCN-REAL16-NEXT: s_mov_b32 s6, -1344; GFX11-GCN-REAL16-NEXT: s_mov_b32 s7, 0x31016000345; GFX11-GCN-REAL16-NEXT: s_mov_b32 s10, s6346; GFX11-GCN-REAL16-NEXT: s_mov_b32 s11, s7347; GFX11-GCN-REAL16-NEXT: s_waitcnt lgkmcnt(0)348; GFX11-GCN-REAL16-NEXT: s_mov_b32 s8, s2349; GFX11-GCN-REAL16-NEXT: s_mov_b32 s9, s3350; GFX11-GCN-REAL16-NEXT: s_mov_b32 s4, s0351; GFX11-GCN-REAL16-NEXT: buffer_load_b64 v[1:2], off, s[8:11], 0352; GFX11-GCN-REAL16-NEXT: s_mov_b32 s5, s1353; GFX11-GCN-REAL16-NEXT: s_waitcnt vmcnt(0)354; GFX11-GCN-REAL16-NEXT: v_cvt_f16_f32_e32 v0.l, v2355; GFX11-GCN-REAL16-NEXT: v_cvt_f16_f32_e32 v0.h, v1356; GFX11-GCN-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)357; GFX11-GCN-REAL16-NEXT: v_pack_b32_f16 v0, v0.h, v0.l358; GFX11-GCN-REAL16-NEXT: buffer_store_b32 v0, off, s[4:7], 0359; GFX11-GCN-REAL16-NEXT: s_endpgm360;361; GFX11-GISEL-REAL16-LABEL: fptrunc:362; GFX11-GISEL-REAL16: ; %bb.0:363; GFX11-GISEL-REAL16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24364; GFX11-GISEL-REAL16-NEXT: s_waitcnt lgkmcnt(0)365; GFX11-GISEL-REAL16-NEXT: s_load_b64 s[2:3], s[2:3], 0x0366; GFX11-GISEL-REAL16-NEXT: s_waitcnt lgkmcnt(0)367; GFX11-GISEL-REAL16-NEXT: v_cvt_f16_f32_e32 v0.l, s2368; GFX11-GISEL-REAL16-NEXT: v_cvt_f16_f32_e32 v0.h, s3369; GFX11-GISEL-REAL16-NEXT: s_mov_b32 s2, -1370; GFX11-GISEL-REAL16-NEXT: s_mov_b32 s3, 0x31016000371; GFX11-GISEL-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)372; GFX11-GISEL-REAL16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h373; GFX11-GISEL-REAL16-NEXT: buffer_store_b32 v0, off, s[0:3], 0374; GFX11-GISEL-REAL16-NEXT: s_endpgm375 ptr addrspace(1) %r,376 ptr addrspace(1) %a) {377 %a.val = load <2 x float>, ptr addrspace(1) %a378 %r.val = fptrunc <2 x float> %a.val to <2 x half>379 store <2 x half> %r.val, ptr addrspace(1) %r380 ret void381}382 383define amdgpu_kernel void @v_pack_b32.fabs(ptr addrspace(1) %in0, ptr addrspace(1) %in1) #0 {384; GCN-LABEL: v_pack_b32.fabs:385; GCN: ; %bb.0:386; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24387; GCN-NEXT: v_lshlrev_b32_e32 v0, 1, v0388; GCN-NEXT: s_waitcnt lgkmcnt(0)389; GCN-NEXT: global_load_ushort v1, v0, s[0:1] glc dlc390; GCN-NEXT: s_waitcnt vmcnt(0)391; GCN-NEXT: global_load_ushort v2, v0, s[2:3] glc dlc392; GCN-NEXT: s_waitcnt vmcnt(0)393; GCN-NEXT: v_add_f16_e32 v0, 2.0, v1394; GCN-NEXT: v_add_f16_e32 v1, 2.0, v2395; GCN-NEXT: v_pack_b32_f16 v0, |v0|, |v1|396; GCN-NEXT: ;;#ASMSTART397; GCN-NEXT: ; use v0398; GCN-NEXT: ;;#ASMEND399; GCN-NEXT: s_endpgm400;401; GISEL-LABEL: v_pack_b32.fabs:402; GISEL: ; %bb.0:403; GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24404; GISEL-NEXT: v_lshlrev_b32_e32 v0, 1, v0405; GISEL-NEXT: s_waitcnt lgkmcnt(0)406; GISEL-NEXT: global_load_ushort v1, v0, s[0:1] glc dlc407; GISEL-NEXT: s_waitcnt vmcnt(0)408; GISEL-NEXT: global_load_ushort v2, v0, s[2:3] glc dlc409; GISEL-NEXT: s_waitcnt vmcnt(0)410; GISEL-NEXT: v_add_f16_e32 v0, 2.0, v1411; GISEL-NEXT: v_add_f16_e32 v1, 2.0, v2412; GISEL-NEXT: v_pack_b32_f16 v0, |v0|, |v1|413; GISEL-NEXT: ;;#ASMSTART414; GISEL-NEXT: ; use v0415; GISEL-NEXT: ;;#ASMEND416; GISEL-NEXT: s_endpgm417;418; GFX11-GCN-FAKE16-LABEL: v_pack_b32.fabs:419; GFX11-GCN-FAKE16: ; %bb.0:420; GFX11-GCN-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24421; GFX11-GCN-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0422; GFX11-GCN-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)423; GFX11-GCN-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 1, v0424; GFX11-GCN-FAKE16-NEXT: s_waitcnt lgkmcnt(0)425; GFX11-GCN-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1] glc dlc426; GFX11-GCN-FAKE16-NEXT: s_waitcnt vmcnt(0)427; GFX11-GCN-FAKE16-NEXT: global_load_u16 v0, v0, s[2:3] glc dlc428; GFX11-GCN-FAKE16-NEXT: s_waitcnt vmcnt(0)429; GFX11-GCN-FAKE16-NEXT: v_add_f16_e32 v1, 2.0, v1430; GFX11-GCN-FAKE16-NEXT: v_add_f16_e32 v0, 2.0, v0431; GFX11-GCN-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)432; GFX11-GCN-FAKE16-NEXT: v_pack_b32_f16 v0, |v1|, |v0|433; GFX11-GCN-FAKE16-NEXT: ;;#ASMSTART434; GFX11-GCN-FAKE16-NEXT: ; use v0435; GFX11-GCN-FAKE16-NEXT: ;;#ASMEND436; GFX11-GCN-FAKE16-NEXT: s_endpgm437;438; GFX11-GISEL-FAKE16-LABEL: v_pack_b32.fabs:439; GFX11-GISEL-FAKE16: ; %bb.0:440; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24441; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0442; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)443; GFX11-GISEL-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 1, v0444; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)445; GFX11-GISEL-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1] glc dlc446; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0)447; GFX11-GISEL-FAKE16-NEXT: global_load_u16 v0, v0, s[2:3] glc dlc448; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0)449; GFX11-GISEL-FAKE16-NEXT: v_add_f16_e32 v1, 2.0, v1450; GFX11-GISEL-FAKE16-NEXT: v_add_f16_e32 v0, 2.0, v0451; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)452; GFX11-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, |v1|, |v0|453; GFX11-GISEL-FAKE16-NEXT: ;;#ASMSTART454; GFX11-GISEL-FAKE16-NEXT: ; use v0455; GFX11-GISEL-FAKE16-NEXT: ;;#ASMEND456; GFX11-GISEL-FAKE16-NEXT: s_endpgm457;458; GFX11-GCN-REAL16-LABEL: v_pack_b32.fabs:459; GFX11-GCN-REAL16: ; %bb.0:460; GFX11-GCN-REAL16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24461; GFX11-GCN-REAL16-NEXT: v_and_b32_e32 v0, 0x3ff, v0462; GFX11-GCN-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)463; GFX11-GCN-REAL16-NEXT: v_lshlrev_b32_e32 v1, 1, v0464; GFX11-GCN-REAL16-NEXT: s_waitcnt lgkmcnt(0)465; GFX11-GCN-REAL16-NEXT: global_load_d16_b16 v0, v1, s[0:1] glc dlc466; GFX11-GCN-REAL16-NEXT: s_waitcnt vmcnt(0)467; GFX11-GCN-REAL16-NEXT: global_load_d16_hi_b16 v0, v1, s[2:3] glc dlc468; GFX11-GCN-REAL16-NEXT: s_waitcnt vmcnt(0)469; GFX11-GCN-REAL16-NEXT: v_add_f16_e32 v0.l, 2.0, v0.l470; GFX11-GCN-REAL16-NEXT: v_add_f16_e32 v0.h, 2.0, v0.h471; GFX11-GCN-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)472; GFX11-GCN-REAL16-NEXT: v_pack_b32_f16 v0, |v0.l|, |v0.h|473; GFX11-GCN-REAL16-NEXT: ;;#ASMSTART474; GFX11-GCN-REAL16-NEXT: ; use v0475; GFX11-GCN-REAL16-NEXT: ;;#ASMEND476; GFX11-GCN-REAL16-NEXT: s_endpgm477;478; GFX11-GISEL-REAL16-LABEL: v_pack_b32.fabs:479; GFX11-GISEL-REAL16: ; %bb.0:480; GFX11-GISEL-REAL16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24481; GFX11-GISEL-REAL16-NEXT: v_and_b32_e32 v0, 0x3ff, v0482; GFX11-GISEL-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)483; GFX11-GISEL-REAL16-NEXT: v_lshlrev_b32_e32 v1, 1, v0484; GFX11-GISEL-REAL16-NEXT: s_waitcnt lgkmcnt(0)485; GFX11-GISEL-REAL16-NEXT: global_load_d16_b16 v0, v1, s[0:1] glc dlc486; GFX11-GISEL-REAL16-NEXT: s_waitcnt vmcnt(0)487; GFX11-GISEL-REAL16-NEXT: global_load_d16_hi_b16 v0, v1, s[2:3] glc dlc488; GFX11-GISEL-REAL16-NEXT: s_waitcnt vmcnt(0)489; GFX11-GISEL-REAL16-NEXT: v_add_f16_e32 v0.l, 2.0, v0.l490; GFX11-GISEL-REAL16-NEXT: v_add_f16_e32 v0.h, 2.0, v0.h491; GFX11-GISEL-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)492; GFX11-GISEL-REAL16-NEXT: v_pack_b32_f16 v0, |v0.l|, |v0.h|493; GFX11-GISEL-REAL16-NEXT: ;;#ASMSTART494; GFX11-GISEL-REAL16-NEXT: ; use v0495; GFX11-GISEL-REAL16-NEXT: ;;#ASMEND496; GFX11-GISEL-REAL16-NEXT: s_endpgm497 %tid = call i32 @llvm.amdgcn.workitem.id.x()498 %tid.ext = sext i32 %tid to i64499 %in0.gep = getelementptr inbounds half, ptr addrspace(1) %in0, i64 %tid.ext500 %in1.gep = getelementptr inbounds half, ptr addrspace(1) %in1, i64 %tid.ext501 %v0 = load volatile half, ptr addrspace(1) %in0.gep502 %v1 = load volatile half, ptr addrspace(1) %in1.gep503 %v0.add = fadd half %v0, 2.0504 %v1.add = fadd half %v1, 2.0505 %v0.fabs = call half @llvm.fabs.f16(half %v0.add)506 %v1.fabs = call half @llvm.fabs.f16(half %v1.add)507 %vec.0 = insertelement <2 x half> poison, half %v0.fabs, i32 0508 %vec.1 = insertelement <2 x half> %vec.0, half %v1.fabs, i32 1509 %vec.i32 = bitcast <2 x half> %vec.1 to i32510 call void asm sideeffect "; use $0", "v"(i32 %vec.i32) #0511 ret void512}513 514define amdgpu_kernel void @v_pack_b32.fneg(ptr addrspace(1) %in0, ptr addrspace(1) %in1) #0 {515; GCN-LABEL: v_pack_b32.fneg:516; GCN: ; %bb.0:517; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24518; GCN-NEXT: v_lshlrev_b32_e32 v0, 1, v0519; GCN-NEXT: s_waitcnt lgkmcnt(0)520; GCN-NEXT: global_load_ushort v1, v0, s[0:1] glc dlc521; GCN-NEXT: s_waitcnt vmcnt(0)522; GCN-NEXT: global_load_ushort v2, v0, s[2:3] glc dlc523; GCN-NEXT: s_waitcnt vmcnt(0)524; GCN-NEXT: v_add_f16_e32 v0, 2.0, v1525; GCN-NEXT: v_add_f16_e32 v1, 2.0, v2526; GCN-NEXT: v_pack_b32_f16 v0, -v0, -v1527; GCN-NEXT: ;;#ASMSTART528; GCN-NEXT: ; use v0529; GCN-NEXT: ;;#ASMEND530; GCN-NEXT: s_endpgm531;532; GISEL-LABEL: v_pack_b32.fneg:533; GISEL: ; %bb.0:534; GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24535; GISEL-NEXT: v_lshlrev_b32_e32 v0, 1, v0536; GISEL-NEXT: s_waitcnt lgkmcnt(0)537; GISEL-NEXT: global_load_ushort v1, v0, s[0:1] glc dlc538; GISEL-NEXT: s_waitcnt vmcnt(0)539; GISEL-NEXT: global_load_ushort v2, v0, s[2:3] glc dlc540; GISEL-NEXT: s_waitcnt vmcnt(0)541; GISEL-NEXT: v_add_f16_e32 v0, 2.0, v1542; GISEL-NEXT: v_add_f16_e32 v1, 2.0, v2543; GISEL-NEXT: v_pack_b32_f16 v0, -v0, -v1544; GISEL-NEXT: ;;#ASMSTART545; GISEL-NEXT: ; use v0546; GISEL-NEXT: ;;#ASMEND547; GISEL-NEXT: s_endpgm548;549; GFX11-GCN-FAKE16-LABEL: v_pack_b32.fneg:550; GFX11-GCN-FAKE16: ; %bb.0:551; GFX11-GCN-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24552; GFX11-GCN-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0553; GFX11-GCN-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)554; GFX11-GCN-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 1, v0555; GFX11-GCN-FAKE16-NEXT: s_waitcnt lgkmcnt(0)556; GFX11-GCN-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1] glc dlc557; GFX11-GCN-FAKE16-NEXT: s_waitcnt vmcnt(0)558; GFX11-GCN-FAKE16-NEXT: global_load_u16 v0, v0, s[2:3] glc dlc559; GFX11-GCN-FAKE16-NEXT: s_waitcnt vmcnt(0)560; GFX11-GCN-FAKE16-NEXT: v_add_f16_e32 v1, 2.0, v1561; GFX11-GCN-FAKE16-NEXT: v_add_f16_e32 v0, 2.0, v0562; GFX11-GCN-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)563; GFX11-GCN-FAKE16-NEXT: v_pack_b32_f16 v0, -v1, -v0564; GFX11-GCN-FAKE16-NEXT: ;;#ASMSTART565; GFX11-GCN-FAKE16-NEXT: ; use v0566; GFX11-GCN-FAKE16-NEXT: ;;#ASMEND567; GFX11-GCN-FAKE16-NEXT: s_endpgm568;569; GFX11-GISEL-FAKE16-LABEL: v_pack_b32.fneg:570; GFX11-GISEL-FAKE16: ; %bb.0:571; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24572; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0573; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)574; GFX11-GISEL-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 1, v0575; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)576; GFX11-GISEL-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1] glc dlc577; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0)578; GFX11-GISEL-FAKE16-NEXT: global_load_u16 v0, v0, s[2:3] glc dlc579; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0)580; GFX11-GISEL-FAKE16-NEXT: v_add_f16_e32 v1, 2.0, v1581; GFX11-GISEL-FAKE16-NEXT: v_add_f16_e32 v0, 2.0, v0582; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)583; GFX11-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, -v1, -v0584; GFX11-GISEL-FAKE16-NEXT: ;;#ASMSTART585; GFX11-GISEL-FAKE16-NEXT: ; use v0586; GFX11-GISEL-FAKE16-NEXT: ;;#ASMEND587; GFX11-GISEL-FAKE16-NEXT: s_endpgm588;589; GFX11-GCN-REAL16-LABEL: v_pack_b32.fneg:590; GFX11-GCN-REAL16: ; %bb.0:591; GFX11-GCN-REAL16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24592; GFX11-GCN-REAL16-NEXT: v_and_b32_e32 v0, 0x3ff, v0593; GFX11-GCN-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)594; GFX11-GCN-REAL16-NEXT: v_lshlrev_b32_e32 v1, 1, v0595; GFX11-GCN-REAL16-NEXT: s_waitcnt lgkmcnt(0)596; GFX11-GCN-REAL16-NEXT: global_load_d16_b16 v0, v1, s[0:1] glc dlc597; GFX11-GCN-REAL16-NEXT: s_waitcnt vmcnt(0)598; GFX11-GCN-REAL16-NEXT: global_load_d16_hi_b16 v0, v1, s[2:3] glc dlc599; GFX11-GCN-REAL16-NEXT: s_waitcnt vmcnt(0)600; GFX11-GCN-REAL16-NEXT: v_add_f16_e32 v0.l, 2.0, v0.l601; GFX11-GCN-REAL16-NEXT: v_add_f16_e32 v0.h, 2.0, v0.h602; GFX11-GCN-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)603; GFX11-GCN-REAL16-NEXT: v_pack_b32_f16 v0, -v0.l, -v0.h604; GFX11-GCN-REAL16-NEXT: ;;#ASMSTART605; GFX11-GCN-REAL16-NEXT: ; use v0606; GFX11-GCN-REAL16-NEXT: ;;#ASMEND607; GFX11-GCN-REAL16-NEXT: s_endpgm608;609; GFX11-GISEL-REAL16-LABEL: v_pack_b32.fneg:610; GFX11-GISEL-REAL16: ; %bb.0:611; GFX11-GISEL-REAL16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24612; GFX11-GISEL-REAL16-NEXT: v_and_b32_e32 v0, 0x3ff, v0613; GFX11-GISEL-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)614; GFX11-GISEL-REAL16-NEXT: v_lshlrev_b32_e32 v1, 1, v0615; GFX11-GISEL-REAL16-NEXT: s_waitcnt lgkmcnt(0)616; GFX11-GISEL-REAL16-NEXT: global_load_d16_b16 v0, v1, s[0:1] glc dlc617; GFX11-GISEL-REAL16-NEXT: s_waitcnt vmcnt(0)618; GFX11-GISEL-REAL16-NEXT: global_load_d16_hi_b16 v0, v1, s[2:3] glc dlc619; GFX11-GISEL-REAL16-NEXT: s_waitcnt vmcnt(0)620; GFX11-GISEL-REAL16-NEXT: v_add_f16_e32 v0.l, 2.0, v0.l621; GFX11-GISEL-REAL16-NEXT: v_add_f16_e32 v0.h, 2.0, v0.h622; GFX11-GISEL-REAL16-NEXT: s_delay_alu instid0(VALU_DEP_1)623; GFX11-GISEL-REAL16-NEXT: v_pack_b32_f16 v0, -v0.l, -v0.h624; GFX11-GISEL-REAL16-NEXT: ;;#ASMSTART625; GFX11-GISEL-REAL16-NEXT: ; use v0626; GFX11-GISEL-REAL16-NEXT: ;;#ASMEND627; GFX11-GISEL-REAL16-NEXT: s_endpgm628 %tid = call i32 @llvm.amdgcn.workitem.id.x()629 %tid.ext = sext i32 %tid to i64630 %in0.gep = getelementptr inbounds half, ptr addrspace(1) %in0, i64 %tid.ext631 %in1.gep = getelementptr inbounds half, ptr addrspace(1) %in1, i64 %tid.ext632 %v0 = load volatile half, ptr addrspace(1) %in0.gep633 %v1 = load volatile half, ptr addrspace(1) %in1.gep634 %v0.add = fadd half %v0, 2.0635 %v1.add = fadd half %v1, 2.0636 %v0.fneg = fsub half -0.0, %v0.add637 %v1.fneg = fsub half -0.0, %v1.add638 %vec.0 = insertelement <2 x half> poison, half %v0.fneg, i32 0639 %vec.1 = insertelement <2 x half> %vec.0, half %v1.fneg, i32 1640 %vec.i32 = bitcast <2 x half> %vec.1 to i32641 call void asm sideeffect "; use $0", "v"(i32 %vec.i32) #0642 ret void643}644 645declare half @llvm.fabs.f16(half) #1646 647attributes #0 = { nounwind }648attributes #1 = { nounwind readnone }649 650