brintos

brintos / llvm-project-archived public Read only

0
0
Text · 36.8 KiB · e57f0b6 Raw
903 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=amdgcn -mcpu=tahiti -enable-misched=false < %s | FileCheck -check-prefixes=SI %s3; RUN: llc -mtriple=amdgcn -mcpu=fiji -mattr=-flat-for-global -enable-misched=false < %s | FileCheck -check-prefixes=VI %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -global-isel=0 -mattr=+real-true16,-flat-for-global -enable-misched=false < %s | FileCheck -check-prefixes=GFX11-SDAG %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -global-isel=1 -mattr=+real-true16,-flat-for-global -enable-misched=false < %s | FileCheck -check-prefixes=GFX11-GISEL %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -global-isel=0 -mattr=-real-true16,-flat-for-global -enable-misched=false < %s | FileCheck -check-prefixes=GFX11-FAKE16-SDAG %s7; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -global-isel=1 -mattr=-real-true16,-flat-for-global -enable-misched=false < %s | FileCheck -check-prefixes=GFX11-FAKE16-GISEL %s8 9define amdgpu_kernel void @fadd_f16(10; SI-LABEL: fadd_f16:11; SI:       ; %bb.0: ; %entry12; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x913; SI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0xd14; SI-NEXT:    s_mov_b32 s11, 0xf00015; SI-NEXT:    s_mov_b32 s10, -116; SI-NEXT:    s_mov_b32 s6, s1017; SI-NEXT:    s_waitcnt lgkmcnt(0)18; SI-NEXT:    s_mov_b32 s8, s019; SI-NEXT:    s_mov_b32 s9, s120; SI-NEXT:    s_mov_b32 s0, s221; SI-NEXT:    s_mov_b32 s1, s322; SI-NEXT:    s_mov_b32 s2, s1023; SI-NEXT:    s_mov_b32 s3, s1124; SI-NEXT:    s_mov_b32 s7, s1125; SI-NEXT:    buffer_load_ushort v0, off, s[0:3], 0 glc26; SI-NEXT:    s_waitcnt vmcnt(0)27; SI-NEXT:    buffer_load_ushort v1, off, s[4:7], 0 glc28; SI-NEXT:    s_waitcnt vmcnt(0)29; SI-NEXT:    v_cvt_f32_f16_e32 v0, v030; SI-NEXT:    v_cvt_f32_f16_e32 v1, v131; SI-NEXT:    v_add_f32_e32 v0, v0, v132; SI-NEXT:    v_cvt_f16_f32_e32 v0, v033; SI-NEXT:    buffer_store_short v0, off, s[8:11], 034; SI-NEXT:    s_endpgm35;36; VI-LABEL: fadd_f16:37; VI:       ; %bb.0: ; %entry38; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2439; VI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x3440; VI-NEXT:    s_mov_b32 s11, 0xf00041; VI-NEXT:    s_mov_b32 s10, -142; VI-NEXT:    s_mov_b32 s6, s1043; VI-NEXT:    s_waitcnt lgkmcnt(0)44; VI-NEXT:    s_mov_b32 s8, s045; VI-NEXT:    s_mov_b32 s9, s146; VI-NEXT:    s_mov_b32 s0, s247; VI-NEXT:    s_mov_b32 s1, s348; VI-NEXT:    s_mov_b32 s2, s1049; VI-NEXT:    s_mov_b32 s3, s1150; VI-NEXT:    s_mov_b32 s7, s1151; VI-NEXT:    buffer_load_ushort v0, off, s[0:3], 0 glc52; VI-NEXT:    s_waitcnt vmcnt(0)53; VI-NEXT:    buffer_load_ushort v1, off, s[4:7], 0 glc54; VI-NEXT:    s_waitcnt vmcnt(0)55; VI-NEXT:    v_add_f16_e32 v0, v0, v156; VI-NEXT:    buffer_store_short v0, off, s[8:11], 057; VI-NEXT:    s_endpgm58;59; GFX11-SDAG-LABEL: fadd_f16:60; GFX11-SDAG:       ; %bb.0: ; %entry61; GFX11-SDAG-NEXT:    s_clause 0x162; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2463; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x3464; GFX11-SDAG-NEXT:    s_mov_b32 s11, 0x3101600065; GFX11-SDAG-NEXT:    s_mov_b32 s10, -166; GFX11-SDAG-NEXT:    s_mov_b32 s7, s1167; GFX11-SDAG-NEXT:    s_mov_b32 s6, s1068; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)69; GFX11-SDAG-NEXT:    s_mov_b32 s8, s070; GFX11-SDAG-NEXT:    s_mov_b32 s9, s171; GFX11-SDAG-NEXT:    s_mov_b32 s0, s272; GFX11-SDAG-NEXT:    s_mov_b32 s1, s373; GFX11-SDAG-NEXT:    s_mov_b32 s2, s1074; GFX11-SDAG-NEXT:    s_mov_b32 s3, s1175; GFX11-SDAG-NEXT:    buffer_load_u16 v0, off, s[0:3], 0 glc dlc76; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)77; GFX11-SDAG-NEXT:    buffer_load_u16 v1, off, s[4:7], 0 glc dlc78; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)79; GFX11-SDAG-NEXT:    v_add_f16_e32 v0.l, v0.l, v1.l80; GFX11-SDAG-NEXT:    buffer_store_b16 v0, off, s[8:11], 081; GFX11-SDAG-NEXT:    s_endpgm82;83; GFX11-GISEL-LABEL: fadd_f16:84; GFX11-GISEL:       ; %bb.0: ; %entry85; GFX11-GISEL-NEXT:    s_clause 0x186; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2487; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x3488; GFX11-GISEL-NEXT:    s_mov_b32 s10, -189; GFX11-GISEL-NEXT:    s_mov_b32 s11, 0x3101600090; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)91; GFX11-GISEL-NEXT:    s_mov_b64 s[6:7], s[10:11]92; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)93; GFX11-GISEL-NEXT:    s_mov_b64 s[8:9], s[2:3]94; GFX11-GISEL-NEXT:    s_mov_b64 s[2:3], s[10:11]95; GFX11-GISEL-NEXT:    buffer_load_u16 v0, off, s[8:11], 0 glc dlc96; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)97; GFX11-GISEL-NEXT:    buffer_load_u16 v1, off, s[4:7], 0 glc dlc98; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)99; GFX11-GISEL-NEXT:    v_add_f16_e32 v0.l, v0.l, v1.l100; GFX11-GISEL-NEXT:    buffer_store_b16 v0, off, s[0:3], 0101; GFX11-GISEL-NEXT:    s_endpgm102;103; GFX11-FAKE16-SDAG-LABEL: fadd_f16:104; GFX11-FAKE16-SDAG:       ; %bb.0: ; %entry105; GFX11-FAKE16-SDAG-NEXT:    s_clause 0x1106; GFX11-FAKE16-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24107; GFX11-FAKE16-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34108; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s11, 0x31016000109; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s10, -1110; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s7, s11111; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s6, s10112; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt lgkmcnt(0)113; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s8, s0114; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s9, s1115; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s0, s2116; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s1, s3117; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s2, s10118; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s3, s11119; GFX11-FAKE16-SDAG-NEXT:    buffer_load_u16 v0, off, s[0:3], 0 glc dlc120; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt vmcnt(0)121; GFX11-FAKE16-SDAG-NEXT:    buffer_load_u16 v1, off, s[4:7], 0 glc dlc122; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt vmcnt(0)123; GFX11-FAKE16-SDAG-NEXT:    v_add_f16_e32 v0, v0, v1124; GFX11-FAKE16-SDAG-NEXT:    buffer_store_b16 v0, off, s[8:11], 0125; GFX11-FAKE16-SDAG-NEXT:    s_endpgm126;127; GFX11-FAKE16-GISEL-LABEL: fadd_f16:128; GFX11-FAKE16-GISEL:       ; %bb.0: ; %entry129; GFX11-FAKE16-GISEL-NEXT:    s_clause 0x1130; GFX11-FAKE16-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24131; GFX11-FAKE16-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34132; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s10, -1133; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s11, 0x31016000134; GFX11-FAKE16-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)135; GFX11-FAKE16-GISEL-NEXT:    s_mov_b64 s[6:7], s[10:11]136; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt lgkmcnt(0)137; GFX11-FAKE16-GISEL-NEXT:    s_mov_b64 s[8:9], s[2:3]138; GFX11-FAKE16-GISEL-NEXT:    s_mov_b64 s[2:3], s[10:11]139; GFX11-FAKE16-GISEL-NEXT:    buffer_load_u16 v0, off, s[8:11], 0 glc dlc140; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt vmcnt(0)141; GFX11-FAKE16-GISEL-NEXT:    buffer_load_u16 v1, off, s[4:7], 0 glc dlc142; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt vmcnt(0)143; GFX11-FAKE16-GISEL-NEXT:    v_add_f16_e32 v0, v0, v1144; GFX11-FAKE16-GISEL-NEXT:    buffer_store_b16 v0, off, s[0:3], 0145; GFX11-FAKE16-GISEL-NEXT:    s_endpgm146; GFX11-LABEL: fadd_f16:147; GFX11:       ; %bb.0: ; %entry148; GFX11-NEXT:    s_clause 0x1149; GFX11-NEXT:    s_load_b128 s[4:7], s[0:1], 0x24150; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x34151; GFX11-NEXT:    s_mov_b32 s11, 0x31016000152; GFX11-NEXT:    s_mov_b32 s10, -1153; GFX11-NEXT:    s_mov_b32 s3, s11154; GFX11-NEXT:    s_mov_b32 s2, s10155; GFX11-NEXT:    s_waitcnt lgkmcnt(0)156; GFX11-NEXT:    s_mov_b32 s8, s4157; GFX11-NEXT:    s_mov_b32 s9, s5158; GFX11-NEXT:    s_mov_b32 s4, s6159; GFX11-NEXT:    s_mov_b32 s5, s7160; GFX11-NEXT:    s_mov_b32 s6, s10161; GFX11-NEXT:    s_mov_b32 s7, s11162; GFX11-NEXT:    buffer_load_u16 v0, off, s[4:7], 0 glc dlc163; GFX11-NEXT:    s_waitcnt vmcnt(0)164; GFX11-NEXT:    buffer_load_u16 v1, off, s[0:3], 0 glc dlc165; GFX11-NEXT:    s_waitcnt vmcnt(0)166; GFX11-NEXT:    v_mov_b16_e32 v0.h, v1.l167; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)168; GFX11-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.h169; GFX11-NEXT:    buffer_store_b16 v0, off, s[8:11], 0170; GFX11-NEXT:    s_nop 0171; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)172; GFX11-NEXT:    s_endpgm173    ptr addrspace(1) %r,174    ptr addrspace(1) %a,175    ptr addrspace(1) %b) {176entry:177  %a.val = load volatile half, ptr addrspace(1) %a178  %b.val = load volatile half, ptr addrspace(1) %b179  %r.val = fadd half %a.val, %b.val180  store half %r.val, ptr addrspace(1) %r181  ret void182}183 184define amdgpu_kernel void @fadd_f16_imm_a(185; SI-LABEL: fadd_f16_imm_a:186; SI:       ; %bb.0: ; %entry187; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9188; SI-NEXT:    s_mov_b32 s7, 0xf000189; SI-NEXT:    s_mov_b32 s6, -1190; SI-NEXT:    s_waitcnt lgkmcnt(0)191; SI-NEXT:    s_mov_b32 s4, s0192; SI-NEXT:    s_mov_b32 s5, s1193; SI-NEXT:    s_mov_b32 s0, s2194; SI-NEXT:    s_mov_b32 s1, s3195; SI-NEXT:    s_mov_b32 s2, s6196; SI-NEXT:    s_mov_b32 s3, s7197; SI-NEXT:    buffer_load_ushort v0, off, s[0:3], 0198; SI-NEXT:    s_waitcnt vmcnt(0)199; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0200; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0201; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0202; SI-NEXT:    buffer_store_short v0, off, s[4:7], 0203; SI-NEXT:    s_endpgm204;205; VI-LABEL: fadd_f16_imm_a:206; VI:       ; %bb.0: ; %entry207; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24208; VI-NEXT:    s_mov_b32 s7, 0xf000209; VI-NEXT:    s_mov_b32 s6, -1210; VI-NEXT:    s_waitcnt lgkmcnt(0)211; VI-NEXT:    s_mov_b32 s4, s0212; VI-NEXT:    s_mov_b32 s5, s1213; VI-NEXT:    s_mov_b32 s0, s2214; VI-NEXT:    s_mov_b32 s1, s3215; VI-NEXT:    s_mov_b32 s2, s6216; VI-NEXT:    s_mov_b32 s3, s7217; VI-NEXT:    buffer_load_ushort v0, off, s[0:3], 0218; VI-NEXT:    s_waitcnt vmcnt(0)219; VI-NEXT:    v_add_f16_e32 v0, 1.0, v0220; VI-NEXT:    buffer_store_short v0, off, s[4:7], 0221; VI-NEXT:    s_endpgm222;223; GFX11-SDAG-LABEL: fadd_f16_imm_a:224; GFX11-SDAG:       ; %bb.0: ; %entry225; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24226; GFX11-SDAG-NEXT:    s_mov_b32 s7, 0x31016000227; GFX11-SDAG-NEXT:    s_mov_b32 s6, -1228; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)229; GFX11-SDAG-NEXT:    s_mov_b32 s4, s0230; GFX11-SDAG-NEXT:    s_mov_b32 s5, s1231; GFX11-SDAG-NEXT:    s_mov_b32 s0, s2232; GFX11-SDAG-NEXT:    s_mov_b32 s1, s3233; GFX11-SDAG-NEXT:    s_mov_b32 s2, s6234; GFX11-SDAG-NEXT:    s_mov_b32 s3, s7235; GFX11-SDAG-NEXT:    buffer_load_u16 v0, off, s[0:3], 0236; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)237; GFX11-SDAG-NEXT:    v_add_f16_e32 v0.l, 1.0, v0.l238; GFX11-SDAG-NEXT:    buffer_store_b16 v0, off, s[4:7], 0239; GFX11-SDAG-NEXT:    s_endpgm240;241; GFX11-GISEL-LABEL: fadd_f16_imm_a:242; GFX11-GISEL:       ; %bb.0: ; %entry243; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24244; GFX11-GISEL-NEXT:    s_mov_b32 s6, -1245; GFX11-GISEL-NEXT:    s_mov_b32 s7, 0x31016000246; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)247; GFX11-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]248; GFX11-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]249; GFX11-GISEL-NEXT:    buffer_load_u16 v0, off, s[4:7], 0250; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)251; GFX11-GISEL-NEXT:    v_add_f16_e32 v0.l, 1.0, v0.l252; GFX11-GISEL-NEXT:    buffer_store_b16 v0, off, s[0:3], 0253; GFX11-GISEL-NEXT:    s_endpgm254;255; GFX11-FAKE16-SDAG-LABEL: fadd_f16_imm_a:256; GFX11-FAKE16-SDAG:       ; %bb.0: ; %entry257; GFX11-FAKE16-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24258; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s7, 0x31016000259; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s6, -1260; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt lgkmcnt(0)261; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s4, s0262; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s5, s1263; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s0, s2264; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s1, s3265; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s2, s6266; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s3, s7267; GFX11-FAKE16-SDAG-NEXT:    buffer_load_u16 v0, off, s[0:3], 0268; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt vmcnt(0)269; GFX11-FAKE16-SDAG-NEXT:    v_add_f16_e32 v0, 1.0, v0270; GFX11-FAKE16-SDAG-NEXT:    buffer_store_b16 v0, off, s[4:7], 0271; GFX11-FAKE16-SDAG-NEXT:    s_endpgm272;273; GFX11-FAKE16-GISEL-LABEL: fadd_f16_imm_a:274; GFX11-FAKE16-GISEL:       ; %bb.0: ; %entry275; GFX11-FAKE16-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24276; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s6, -1277; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s7, 0x31016000278; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt lgkmcnt(0)279; GFX11-FAKE16-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]280; GFX11-FAKE16-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]281; GFX11-FAKE16-GISEL-NEXT:    buffer_load_u16 v0, off, s[4:7], 0282; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt vmcnt(0)283; GFX11-FAKE16-GISEL-NEXT:    v_add_f16_e32 v0, 1.0, v0284; GFX11-FAKE16-GISEL-NEXT:    buffer_store_b16 v0, off, s[0:3], 0285; GFX11-FAKE16-GISEL-NEXT:    s_endpgm286; GFX11-LABEL: fadd_f16_imm_a:287; GFX11:       ; %bb.0: ; %entry288; GFX11-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24289; GFX11-NEXT:    s_mov_b32 s7, 0x31016000290; GFX11-NEXT:    s_mov_b32 s6, -1291; GFX11-NEXT:    s_waitcnt lgkmcnt(0)292; GFX11-NEXT:    s_mov_b32 s4, s0293; GFX11-NEXT:    s_mov_b32 s5, s1294; GFX11-NEXT:    s_mov_b32 s0, s2295; GFX11-NEXT:    s_mov_b32 s1, s3296; GFX11-NEXT:    s_mov_b32 s2, s6297; GFX11-NEXT:    s_mov_b32 s3, s7298; GFX11-NEXT:    buffer_load_u16 v0, off, s[0:3], 0299; GFX11-NEXT:    s_waitcnt vmcnt(0)300; GFX11-NEXT:    v_mov_b16_e32 v0.h, 0x3c00301; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)302; GFX11-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.h303; GFX11-NEXT:    buffer_store_b16 v0, off, s[4:7], 0304; GFX11-NEXT:    s_nop 0305; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)306; GFX11-NEXT:    s_endpgm307    ptr addrspace(1) %r,308    ptr addrspace(1) %b) {309entry:310  %b.val = load half, ptr addrspace(1) %b311  %r.val = fadd half 1.0, %b.val312  store half %r.val, ptr addrspace(1) %r313  ret void314}315 316define amdgpu_kernel void @fadd_f16_imm_b(317; SI-LABEL: fadd_f16_imm_b:318; SI:       ; %bb.0: ; %entry319; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9320; SI-NEXT:    s_mov_b32 s7, 0xf000321; SI-NEXT:    s_mov_b32 s6, -1322; SI-NEXT:    s_waitcnt lgkmcnt(0)323; SI-NEXT:    s_mov_b32 s4, s0324; SI-NEXT:    s_mov_b32 s5, s1325; SI-NEXT:    s_mov_b32 s0, s2326; SI-NEXT:    s_mov_b32 s1, s3327; SI-NEXT:    s_mov_b32 s2, s6328; SI-NEXT:    s_mov_b32 s3, s7329; SI-NEXT:    buffer_load_ushort v0, off, s[0:3], 0330; SI-NEXT:    s_waitcnt vmcnt(0)331; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0332; SI-NEXT:    v_add_f32_e32 v0, 2.0, v0333; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0334; SI-NEXT:    buffer_store_short v0, off, s[4:7], 0335; SI-NEXT:    s_endpgm336;337; VI-LABEL: fadd_f16_imm_b:338; VI:       ; %bb.0: ; %entry339; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24340; VI-NEXT:    s_mov_b32 s7, 0xf000341; VI-NEXT:    s_mov_b32 s6, -1342; VI-NEXT:    s_waitcnt lgkmcnt(0)343; VI-NEXT:    s_mov_b32 s4, s0344; VI-NEXT:    s_mov_b32 s5, s1345; VI-NEXT:    s_mov_b32 s0, s2346; VI-NEXT:    s_mov_b32 s1, s3347; VI-NEXT:    s_mov_b32 s2, s6348; VI-NEXT:    s_mov_b32 s3, s7349; VI-NEXT:    buffer_load_ushort v0, off, s[0:3], 0350; VI-NEXT:    s_waitcnt vmcnt(0)351; VI-NEXT:    v_add_f16_e32 v0, 2.0, v0352; VI-NEXT:    buffer_store_short v0, off, s[4:7], 0353; VI-NEXT:    s_endpgm354;355; GFX11-SDAG-LABEL: fadd_f16_imm_b:356; GFX11-SDAG:       ; %bb.0: ; %entry357; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24358; GFX11-SDAG-NEXT:    s_mov_b32 s7, 0x31016000359; GFX11-SDAG-NEXT:    s_mov_b32 s6, -1360; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)361; GFX11-SDAG-NEXT:    s_mov_b32 s4, s0362; GFX11-SDAG-NEXT:    s_mov_b32 s5, s1363; GFX11-SDAG-NEXT:    s_mov_b32 s0, s2364; GFX11-SDAG-NEXT:    s_mov_b32 s1, s3365; GFX11-SDAG-NEXT:    s_mov_b32 s2, s6366; GFX11-SDAG-NEXT:    s_mov_b32 s3, s7367; GFX11-SDAG-NEXT:    buffer_load_u16 v0, off, s[0:3], 0368; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)369; GFX11-SDAG-NEXT:    v_add_f16_e32 v0.l, 2.0, v0.l370; GFX11-SDAG-NEXT:    buffer_store_b16 v0, off, s[4:7], 0371; GFX11-SDAG-NEXT:    s_endpgm372;373; GFX11-GISEL-LABEL: fadd_f16_imm_b:374; GFX11-GISEL:       ; %bb.0: ; %entry375; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24376; GFX11-GISEL-NEXT:    s_mov_b32 s6, -1377; GFX11-GISEL-NEXT:    s_mov_b32 s7, 0x31016000378; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)379; GFX11-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]380; GFX11-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]381; GFX11-GISEL-NEXT:    buffer_load_u16 v0, off, s[4:7], 0382; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)383; GFX11-GISEL-NEXT:    v_add_f16_e32 v0.l, 2.0, v0.l384; GFX11-GISEL-NEXT:    buffer_store_b16 v0, off, s[0:3], 0385; GFX11-GISEL-NEXT:    s_endpgm386;387; GFX11-FAKE16-SDAG-LABEL: fadd_f16_imm_b:388; GFX11-FAKE16-SDAG:       ; %bb.0: ; %entry389; GFX11-FAKE16-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24390; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s7, 0x31016000391; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s6, -1392; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt lgkmcnt(0)393; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s4, s0394; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s5, s1395; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s0, s2396; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s1, s3397; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s2, s6398; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s3, s7399; GFX11-FAKE16-SDAG-NEXT:    buffer_load_u16 v0, off, s[0:3], 0400; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt vmcnt(0)401; GFX11-FAKE16-SDAG-NEXT:    v_add_f16_e32 v0, 2.0, v0402; GFX11-FAKE16-SDAG-NEXT:    buffer_store_b16 v0, off, s[4:7], 0403; GFX11-FAKE16-SDAG-NEXT:    s_endpgm404;405; GFX11-FAKE16-GISEL-LABEL: fadd_f16_imm_b:406; GFX11-FAKE16-GISEL:       ; %bb.0: ; %entry407; GFX11-FAKE16-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24408; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s6, -1409; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s7, 0x31016000410; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt lgkmcnt(0)411; GFX11-FAKE16-GISEL-NEXT:    s_mov_b64 s[4:5], s[2:3]412; GFX11-FAKE16-GISEL-NEXT:    s_mov_b64 s[2:3], s[6:7]413; GFX11-FAKE16-GISEL-NEXT:    buffer_load_u16 v0, off, s[4:7], 0414; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt vmcnt(0)415; GFX11-FAKE16-GISEL-NEXT:    v_add_f16_e32 v0, 2.0, v0416; GFX11-FAKE16-GISEL-NEXT:    buffer_store_b16 v0, off, s[0:3], 0417; GFX11-FAKE16-GISEL-NEXT:    s_endpgm418; GFX11-LABEL: fadd_f16_imm_b:419; GFX11:       ; %bb.0: ; %entry420; GFX11-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24421; GFX11-NEXT:    s_mov_b32 s7, 0x31016000422; GFX11-NEXT:    s_mov_b32 s6, -1423; GFX11-NEXT:    s_waitcnt lgkmcnt(0)424; GFX11-NEXT:    s_mov_b32 s4, s0425; GFX11-NEXT:    s_mov_b32 s5, s1426; GFX11-NEXT:    s_mov_b32 s0, s2427; GFX11-NEXT:    s_mov_b32 s1, s3428; GFX11-NEXT:    s_mov_b32 s2, s6429; GFX11-NEXT:    s_mov_b32 s3, s7430; GFX11-NEXT:    buffer_load_u16 v0, off, s[0:3], 0431; GFX11-NEXT:    s_waitcnt vmcnt(0)432; GFX11-NEXT:    v_mov_b16_e32 v0.h, 0x4000433; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)434; GFX11-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.h435; GFX11-NEXT:    buffer_store_b16 v0, off, s[4:7], 0436; GFX11-NEXT:    s_nop 0437; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)438; GFX11-NEXT:    s_endpgm439    ptr addrspace(1) %r,440    ptr addrspace(1) %a) {441entry:442  %a.val = load half, ptr addrspace(1) %a443  %r.val = fadd half %a.val, 2.0444  store half %r.val, ptr addrspace(1) %r445  ret void446}447 448define amdgpu_kernel void @fadd_v2f16(449; SI-LABEL: fadd_v2f16:450; SI:       ; %bb.0: ; %entry451; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9452; SI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0xd453; SI-NEXT:    s_mov_b32 s11, 0xf000454; SI-NEXT:    s_mov_b32 s14, 0455; SI-NEXT:    s_mov_b32 s15, s11456; SI-NEXT:    s_waitcnt lgkmcnt(0)457; SI-NEXT:    s_mov_b64 s[12:13], s[2:3]458; SI-NEXT:    v_lshlrev_b32_e32 v0, 2, v0459; SI-NEXT:    v_mov_b32_e32 v1, 0460; SI-NEXT:    s_mov_b64 s[6:7], s[14:15]461; SI-NEXT:    buffer_load_dword v2, v[0:1], s[12:15], 0 addr64462; SI-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64463; SI-NEXT:    s_mov_b32 s10, -1464; SI-NEXT:    s_mov_b32 s8, s0465; SI-NEXT:    s_mov_b32 s9, s1466; SI-NEXT:    s_waitcnt vmcnt(1)467; SI-NEXT:    v_cvt_f32_f16_e32 v3, v2468; SI-NEXT:    v_lshrrev_b32_e32 v2, 16, v2469; SI-NEXT:    s_waitcnt vmcnt(0)470; SI-NEXT:    v_cvt_f32_f16_e32 v1, v0471; SI-NEXT:    v_lshrrev_b32_e32 v0, 16, v0472; SI-NEXT:    v_cvt_f32_f16_e32 v2, v2473; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0474; SI-NEXT:    v_add_f32_e32 v1, v3, v1475; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1476; SI-NEXT:    v_add_f32_e32 v0, v2, v0477; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0478; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v0479; SI-NEXT:    v_or_b32_e32 v0, v1, v0480; SI-NEXT:    buffer_store_dword v0, off, s[8:11], 0481; SI-NEXT:    s_endpgm482;483; VI-LABEL: fadd_v2f16:484; VI:       ; %bb.0: ; %entry485; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24486; VI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x34487; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0488; VI-NEXT:    s_mov_b32 s7, 0xf000489; VI-NEXT:    s_mov_b32 s6, -1490; VI-NEXT:    s_waitcnt lgkmcnt(0)491; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2492; VI-NEXT:    v_mov_b32_e32 v1, s3493; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc494; VI-NEXT:    v_add_u32_e32 v2, vcc, s8, v2495; VI-NEXT:    v_mov_b32_e32 v3, s9496; VI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc497; VI-NEXT:    flat_load_dword v0, v[0:1]498; VI-NEXT:    flat_load_dword v1, v[2:3]499; VI-NEXT:    s_mov_b32 s4, s0500; VI-NEXT:    s_mov_b32 s5, s1501; VI-NEXT:    s_waitcnt vmcnt(0)502; VI-NEXT:    v_add_f16_sdwa v2, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1503; VI-NEXT:    v_add_f16_e32 v0, v0, v1504; VI-NEXT:    v_or_b32_e32 v0, v0, v2505; VI-NEXT:    buffer_store_dword v0, off, s[4:7], 0506; VI-NEXT:    s_endpgm507;508; GFX11-SDAG-LABEL: fadd_v2f16:509; GFX11-SDAG:       ; %bb.0: ; %entry510; GFX11-SDAG-NEXT:    s_clause 0x1511; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24512; GFX11-SDAG-NEXT:    s_load_b64 s[8:9], s[4:5], 0x34513; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0514; GFX11-SDAG-NEXT:    s_mov_b32 s7, 0x31016000515; GFX11-SDAG-NEXT:    s_mov_b32 s6, -1516; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)517; GFX11-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0518; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)519; GFX11-SDAG-NEXT:    s_clause 0x1520; GFX11-SDAG-NEXT:    global_load_b32 v1, v0, s[2:3]521; GFX11-SDAG-NEXT:    global_load_b32 v0, v0, s[8:9]522; GFX11-SDAG-NEXT:    s_mov_b32 s4, s0523; GFX11-SDAG-NEXT:    s_mov_b32 s5, s1524; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)525; GFX11-SDAG-NEXT:    v_pk_add_f16 v0, v1, v0526; GFX11-SDAG-NEXT:    buffer_store_b32 v0, off, s[4:7], 0527; GFX11-SDAG-NEXT:    s_endpgm528;529; GFX11-GISEL-LABEL: fadd_v2f16:530; GFX11-GISEL:       ; %bb.0: ; %entry531; GFX11-GISEL-NEXT:    s_clause 0x1532; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24533; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34534; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0535; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)536; GFX11-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0537; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)538; GFX11-GISEL-NEXT:    s_clause 0x1539; GFX11-GISEL-NEXT:    global_load_b32 v1, v0, s[2:3]540; GFX11-GISEL-NEXT:    global_load_b32 v0, v0, s[4:5]541; GFX11-GISEL-NEXT:    s_mov_b32 s2, -1542; GFX11-GISEL-NEXT:    s_mov_b32 s3, 0x31016000543; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)544; GFX11-GISEL-NEXT:    v_pk_add_f16 v0, v1, v0545; GFX11-GISEL-NEXT:    buffer_store_b32 v0, off, s[0:3], 0546; GFX11-GISEL-NEXT:    s_endpgm547;548; GFX11-FAKE16-SDAG-LABEL: fadd_v2f16:549; GFX11-FAKE16-SDAG:       ; %bb.0: ; %entry550; GFX11-FAKE16-SDAG-NEXT:    s_clause 0x1551; GFX11-FAKE16-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24552; GFX11-FAKE16-SDAG-NEXT:    s_load_b64 s[8:9], s[4:5], 0x34553; GFX11-FAKE16-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0554; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s7, 0x31016000555; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s6, -1556; GFX11-FAKE16-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)557; GFX11-FAKE16-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0558; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt lgkmcnt(0)559; GFX11-FAKE16-SDAG-NEXT:    s_clause 0x1560; GFX11-FAKE16-SDAG-NEXT:    global_load_b32 v1, v0, s[2:3]561; GFX11-FAKE16-SDAG-NEXT:    global_load_b32 v0, v0, s[8:9]562; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s4, s0563; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s5, s1564; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt vmcnt(0)565; GFX11-FAKE16-SDAG-NEXT:    v_pk_add_f16 v0, v1, v0566; GFX11-FAKE16-SDAG-NEXT:    buffer_store_b32 v0, off, s[4:7], 0567; GFX11-FAKE16-SDAG-NEXT:    s_endpgm568;569; GFX11-FAKE16-GISEL-LABEL: fadd_v2f16:570; GFX11-FAKE16-GISEL:       ; %bb.0: ; %entry571; GFX11-FAKE16-GISEL-NEXT:    s_clause 0x1572; GFX11-FAKE16-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24573; GFX11-FAKE16-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34574; GFX11-FAKE16-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0575; GFX11-FAKE16-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)576; GFX11-FAKE16-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0577; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt lgkmcnt(0)578; GFX11-FAKE16-GISEL-NEXT:    s_clause 0x1579; GFX11-FAKE16-GISEL-NEXT:    global_load_b32 v1, v0, s[2:3]580; GFX11-FAKE16-GISEL-NEXT:    global_load_b32 v0, v0, s[4:5]581; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s2, -1582; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s3, 0x31016000583; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt vmcnt(0)584; GFX11-FAKE16-GISEL-NEXT:    v_pk_add_f16 v0, v1, v0585; GFX11-FAKE16-GISEL-NEXT:    buffer_store_b32 v0, off, s[0:3], 0586; GFX11-FAKE16-GISEL-NEXT:    s_endpgm587; GFX11-LABEL: fadd_v2f16:588; GFX11:       ; %bb.0: ; %entry589; GFX11-NEXT:    s_clause 0x1590; GFX11-NEXT:    s_load_b128 s[4:7], s[0:1], 0x24591; GFX11-NEXT:    s_load_b64 s[8:9], s[0:1], 0x34592; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0593; GFX11-NEXT:    s_mov_b32 s3, 0x31016000594; GFX11-NEXT:    s_mov_b32 s2, -1595; GFX11-NEXT:    s_waitcnt lgkmcnt(0)596; GFX11-NEXT:    s_clause 0x1597; GFX11-NEXT:    global_load_b32 v1, v0, s[6:7]598; GFX11-NEXT:    global_load_b32 v0, v0, s[8:9]599; GFX11-NEXT:    s_mov_b32 s0, s4600; GFX11-NEXT:    s_mov_b32 s1, s5601; GFX11-NEXT:    s_waitcnt vmcnt(0)602; GFX11-NEXT:    v_pk_add_f16 v0, v1, v0603; GFX11-NEXT:    buffer_store_b32 v0, off, s[0:3], 0604; GFX11-NEXT:    s_nop 0605; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)606; GFX11-NEXT:    s_endpgm607    ptr addrspace(1) %r,608    ptr addrspace(1) %a,609    ptr addrspace(1) %b) {610entry:611  %tid = call i32 @llvm.amdgcn.workitem.id.x()612  %gep.a = getelementptr inbounds <2 x half>, ptr addrspace(1) %a, i32 %tid613  %gep.b = getelementptr inbounds <2 x half>, ptr addrspace(1) %b, i32 %tid614  %a.val = load <2 x half>, ptr addrspace(1) %gep.a615  %b.val = load <2 x half>, ptr addrspace(1) %gep.b616  %r.val = fadd <2 x half> %a.val, %b.val617  store <2 x half> %r.val, ptr addrspace(1) %r618  ret void619}620 621define amdgpu_kernel void @fadd_v2f16_imm_a(622; SI-LABEL: fadd_v2f16_imm_a:623; SI:       ; %bb.0: ; %entry624; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9625; SI-NEXT:    s_mov_b32 s7, 0xf000626; SI-NEXT:    s_mov_b32 s10, 0627; SI-NEXT:    s_mov_b32 s11, s7628; SI-NEXT:    v_lshlrev_b32_e32 v0, 2, v0629; SI-NEXT:    s_waitcnt lgkmcnt(0)630; SI-NEXT:    s_mov_b64 s[8:9], s[2:3]631; SI-NEXT:    v_mov_b32_e32 v1, 0632; SI-NEXT:    buffer_load_dword v0, v[0:1], s[8:11], 0 addr64633; SI-NEXT:    s_mov_b32 s6, -1634; SI-NEXT:    s_mov_b32 s4, s0635; SI-NEXT:    s_mov_b32 s5, s1636; SI-NEXT:    s_waitcnt vmcnt(0)637; SI-NEXT:    v_cvt_f32_f16_e32 v1, v0638; SI-NEXT:    v_lshrrev_b32_e32 v0, 16, v0639; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0640; SI-NEXT:    v_add_f32_e32 v1, 1.0, v1641; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1642; SI-NEXT:    v_add_f32_e32 v0, 2.0, v0643; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0644; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v0645; SI-NEXT:    v_or_b32_e32 v0, v1, v0646; SI-NEXT:    buffer_store_dword v0, off, s[4:7], 0647; SI-NEXT:    s_endpgm648;649; VI-LABEL: fadd_v2f16_imm_a:650; VI:       ; %bb.0: ; %entry651; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24652; VI-NEXT:    v_lshlrev_b32_e32 v0, 2, v0653; VI-NEXT:    s_mov_b32 s7, 0xf000654; VI-NEXT:    s_mov_b32 s6, -1655; VI-NEXT:    s_waitcnt lgkmcnt(0)656; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v0657; VI-NEXT:    v_mov_b32_e32 v1, s3658; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc659; VI-NEXT:    flat_load_dword v0, v[0:1]660; VI-NEXT:    v_mov_b32_e32 v1, 0x4000661; VI-NEXT:    s_mov_b32 s4, s0662; VI-NEXT:    s_mov_b32 s5, s1663; VI-NEXT:    s_waitcnt vmcnt(0)664; VI-NEXT:    v_add_f16_sdwa v1, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD665; VI-NEXT:    v_add_f16_e32 v0, 1.0, v0666; VI-NEXT:    v_or_b32_e32 v0, v0, v1667; VI-NEXT:    buffer_store_dword v0, off, s[4:7], 0668; VI-NEXT:    s_endpgm669;670; GFX11-SDAG-LABEL: fadd_v2f16_imm_a:671; GFX11-SDAG:       ; %bb.0: ; %entry672; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24673; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0674; GFX11-SDAG-NEXT:    s_mov_b32 s7, 0x31016000675; GFX11-SDAG-NEXT:    s_mov_b32 s6, -1676; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)677; GFX11-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0678; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)679; GFX11-SDAG-NEXT:    global_load_b32 v0, v0, s[2:3]680; GFX11-SDAG-NEXT:    s_mov_b32 s4, s0681; GFX11-SDAG-NEXT:    s_mov_b32 s5, s1682; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)683; GFX11-SDAG-NEXT:    v_pk_add_f16 v0, 0x40003c00, v0684; GFX11-SDAG-NEXT:    buffer_store_b32 v0, off, s[4:7], 0685; GFX11-SDAG-NEXT:    s_endpgm686;687; GFX11-GISEL-LABEL: fadd_v2f16_imm_a:688; GFX11-GISEL:       ; %bb.0: ; %entry689; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24690; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0691; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)692; GFX11-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0693; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)694; GFX11-GISEL-NEXT:    global_load_b32 v0, v0, s[2:3]695; GFX11-GISEL-NEXT:    s_mov_b32 s2, -1696; GFX11-GISEL-NEXT:    s_mov_b32 s3, 0x31016000697; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)698; GFX11-GISEL-NEXT:    v_pk_add_f16 v0, 0x40003c00, v0699; GFX11-GISEL-NEXT:    buffer_store_b32 v0, off, s[0:3], 0700; GFX11-GISEL-NEXT:    s_endpgm701;702; GFX11-FAKE16-SDAG-LABEL: fadd_v2f16_imm_a:703; GFX11-FAKE16-SDAG:       ; %bb.0: ; %entry704; GFX11-FAKE16-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24705; GFX11-FAKE16-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0706; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s7, 0x31016000707; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s6, -1708; GFX11-FAKE16-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)709; GFX11-FAKE16-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0710; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt lgkmcnt(0)711; GFX11-FAKE16-SDAG-NEXT:    global_load_b32 v0, v0, s[2:3]712; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s4, s0713; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s5, s1714; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt vmcnt(0)715; GFX11-FAKE16-SDAG-NEXT:    v_pk_add_f16 v0, 0x40003c00, v0716; GFX11-FAKE16-SDAG-NEXT:    buffer_store_b32 v0, off, s[4:7], 0717; GFX11-FAKE16-SDAG-NEXT:    s_endpgm718;719; GFX11-FAKE16-GISEL-LABEL: fadd_v2f16_imm_a:720; GFX11-FAKE16-GISEL:       ; %bb.0: ; %entry721; GFX11-FAKE16-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24722; GFX11-FAKE16-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0723; GFX11-FAKE16-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)724; GFX11-FAKE16-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0725; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt lgkmcnt(0)726; GFX11-FAKE16-GISEL-NEXT:    global_load_b32 v0, v0, s[2:3]727; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s2, -1728; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s3, 0x31016000729; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt vmcnt(0)730; GFX11-FAKE16-GISEL-NEXT:    v_pk_add_f16 v0, 0x40003c00, v0731; GFX11-FAKE16-GISEL-NEXT:    buffer_store_b32 v0, off, s[0:3], 0732; GFX11-FAKE16-GISEL-NEXT:    s_endpgm733; GFX11-LABEL: fadd_v2f16_imm_a:734; GFX11:       ; %bb.0: ; %entry735; GFX11-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24736; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0737; GFX11-NEXT:    s_mov_b32 s7, 0x31016000738; GFX11-NEXT:    s_mov_b32 s6, -1739; GFX11-NEXT:    s_waitcnt lgkmcnt(0)740; GFX11-NEXT:    global_load_b32 v0, v0, s[2:3]741; GFX11-NEXT:    s_mov_b32 s4, s0742; GFX11-NEXT:    s_mov_b32 s5, s1743; GFX11-NEXT:    s_waitcnt vmcnt(0)744; GFX11-NEXT:    v_pk_add_f16 v0, 0x40003c00, v0745; GFX11-NEXT:    buffer_store_b32 v0, off, s[4:7], 0746; GFX11-NEXT:    s_nop 0747; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)748; GFX11-NEXT:    s_endpgm749    ptr addrspace(1) %r,750    ptr addrspace(1) %b) {751entry:752  %tid = call i32 @llvm.amdgcn.workitem.id.x()753  %gep.b = getelementptr inbounds <2 x half>, ptr addrspace(1) %b, i32 %tid754  %b.val = load <2 x half>, ptr addrspace(1) %gep.b755  %r.val = fadd <2 x half> <half 1.0, half 2.0>, %b.val756  store <2 x half> %r.val, ptr addrspace(1) %r757  ret void758}759 760define amdgpu_kernel void @fadd_v2f16_imm_b(761; SI-LABEL: fadd_v2f16_imm_b:762; SI:       ; %bb.0: ; %entry763; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9764; SI-NEXT:    s_mov_b32 s7, 0xf000765; SI-NEXT:    s_mov_b32 s10, 0766; SI-NEXT:    s_mov_b32 s11, s7767; SI-NEXT:    v_lshlrev_b32_e32 v0, 2, v0768; SI-NEXT:    s_waitcnt lgkmcnt(0)769; SI-NEXT:    s_mov_b64 s[8:9], s[2:3]770; SI-NEXT:    v_mov_b32_e32 v1, 0771; SI-NEXT:    buffer_load_dword v0, v[0:1], s[8:11], 0 addr64772; SI-NEXT:    s_mov_b32 s6, -1773; SI-NEXT:    s_mov_b32 s4, s0774; SI-NEXT:    s_mov_b32 s5, s1775; SI-NEXT:    s_waitcnt vmcnt(0)776; SI-NEXT:    v_cvt_f32_f16_e32 v1, v0777; SI-NEXT:    v_lshrrev_b32_e32 v0, 16, v0778; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0779; SI-NEXT:    v_add_f32_e32 v1, 2.0, v1780; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1781; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0782; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0783; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v0784; SI-NEXT:    v_or_b32_e32 v0, v1, v0785; SI-NEXT:    buffer_store_dword v0, off, s[4:7], 0786; SI-NEXT:    s_endpgm787;788; VI-LABEL: fadd_v2f16_imm_b:789; VI:       ; %bb.0: ; %entry790; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24791; VI-NEXT:    v_lshlrev_b32_e32 v0, 2, v0792; VI-NEXT:    s_mov_b32 s7, 0xf000793; VI-NEXT:    s_mov_b32 s6, -1794; VI-NEXT:    s_waitcnt lgkmcnt(0)795; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v0796; VI-NEXT:    v_mov_b32_e32 v1, s3797; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc798; VI-NEXT:    flat_load_dword v0, v[0:1]799; VI-NEXT:    v_mov_b32_e32 v1, 0x3c00800; VI-NEXT:    s_mov_b32 s4, s0801; VI-NEXT:    s_mov_b32 s5, s1802; VI-NEXT:    s_waitcnt vmcnt(0)803; VI-NEXT:    v_add_f16_sdwa v1, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD804; VI-NEXT:    v_add_f16_e32 v0, 2.0, v0805; VI-NEXT:    v_or_b32_e32 v0, v0, v1806; VI-NEXT:    buffer_store_dword v0, off, s[4:7], 0807; VI-NEXT:    s_endpgm808;809; GFX11-SDAG-LABEL: fadd_v2f16_imm_b:810; GFX11-SDAG:       ; %bb.0: ; %entry811; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24812; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0813; GFX11-SDAG-NEXT:    s_mov_b32 s7, 0x31016000814; GFX11-SDAG-NEXT:    s_mov_b32 s6, -1815; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)816; GFX11-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0817; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)818; GFX11-SDAG-NEXT:    global_load_b32 v0, v0, s[2:3]819; GFX11-SDAG-NEXT:    s_mov_b32 s4, s0820; GFX11-SDAG-NEXT:    s_mov_b32 s5, s1821; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)822; GFX11-SDAG-NEXT:    v_pk_add_f16 v0, 0x3c004000, v0823; GFX11-SDAG-NEXT:    buffer_store_b32 v0, off, s[4:7], 0824; GFX11-SDAG-NEXT:    s_endpgm825;826; GFX11-GISEL-LABEL: fadd_v2f16_imm_b:827; GFX11-GISEL:       ; %bb.0: ; %entry828; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24829; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0830; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)831; GFX11-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0832; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)833; GFX11-GISEL-NEXT:    global_load_b32 v0, v0, s[2:3]834; GFX11-GISEL-NEXT:    s_mov_b32 s2, -1835; GFX11-GISEL-NEXT:    s_mov_b32 s3, 0x31016000836; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)837; GFX11-GISEL-NEXT:    v_pk_add_f16 v0, 0x3c004000, v0838; GFX11-GISEL-NEXT:    buffer_store_b32 v0, off, s[0:3], 0839; GFX11-GISEL-NEXT:    s_endpgm840;841; GFX11-FAKE16-SDAG-LABEL: fadd_v2f16_imm_b:842; GFX11-FAKE16-SDAG:       ; %bb.0: ; %entry843; GFX11-FAKE16-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24844; GFX11-FAKE16-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0845; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s7, 0x31016000846; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s6, -1847; GFX11-FAKE16-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)848; GFX11-FAKE16-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0849; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt lgkmcnt(0)850; GFX11-FAKE16-SDAG-NEXT:    global_load_b32 v0, v0, s[2:3]851; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s4, s0852; GFX11-FAKE16-SDAG-NEXT:    s_mov_b32 s5, s1853; GFX11-FAKE16-SDAG-NEXT:    s_waitcnt vmcnt(0)854; GFX11-FAKE16-SDAG-NEXT:    v_pk_add_f16 v0, 0x3c004000, v0855; GFX11-FAKE16-SDAG-NEXT:    buffer_store_b32 v0, off, s[4:7], 0856; GFX11-FAKE16-SDAG-NEXT:    s_endpgm857;858; GFX11-FAKE16-GISEL-LABEL: fadd_v2f16_imm_b:859; GFX11-FAKE16-GISEL:       ; %bb.0: ; %entry860; GFX11-FAKE16-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24861; GFX11-FAKE16-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0862; GFX11-FAKE16-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)863; GFX11-FAKE16-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0864; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt lgkmcnt(0)865; GFX11-FAKE16-GISEL-NEXT:    global_load_b32 v0, v0, s[2:3]866; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s2, -1867; GFX11-FAKE16-GISEL-NEXT:    s_mov_b32 s3, 0x31016000868; GFX11-FAKE16-GISEL-NEXT:    s_waitcnt vmcnt(0)869; GFX11-FAKE16-GISEL-NEXT:    v_pk_add_f16 v0, 0x3c004000, v0870; GFX11-FAKE16-GISEL-NEXT:    buffer_store_b32 v0, off, s[0:3], 0871; GFX11-FAKE16-GISEL-NEXT:    s_endpgm872; GFX11-LABEL: fadd_v2f16_imm_b:873; GFX11:       ; %bb.0: ; %entry874; GFX11-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24875; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0876; GFX11-NEXT:    s_mov_b32 s7, 0x31016000877; GFX11-NEXT:    s_mov_b32 s6, -1878; GFX11-NEXT:    s_waitcnt lgkmcnt(0)879; GFX11-NEXT:    global_load_b32 v0, v0, s[2:3]880; GFX11-NEXT:    s_mov_b32 s4, s0881; GFX11-NEXT:    s_mov_b32 s5, s1882; GFX11-NEXT:    s_waitcnt vmcnt(0)883; GFX11-NEXT:    v_pk_add_f16 v0, 0x3c004000, v0884; GFX11-NEXT:    buffer_store_b32 v0, off, s[4:7], 0885; GFX11-NEXT:    s_nop 0886; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)887; GFX11-NEXT:    s_endpgm888    ptr addrspace(1) %r,889    ptr addrspace(1) %a) {890entry:891  %tid = call i32 @llvm.amdgcn.workitem.id.x()892  %gep.a = getelementptr inbounds <2 x half>, ptr addrspace(1) %a, i32 %tid893  %a.val = load <2 x half>, ptr addrspace(1) %gep.a894  %r.val = fadd <2 x half> %a.val, <half 2.0, half 1.0>895  store <2 x half> %r.val, ptr addrspace(1) %r896  ret void897}898 899declare i32 @llvm.amdgcn.workitem.id.x() #1900 901attributes #0 = { nounwind }902attributes #1 = { nounwind readnone }903