5704 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -global-isel=0 < %s | FileCheck -enable-var-scope -check-prefixes=SI-SDAG %s3; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -global-isel=1 < %s | FileCheck -check-prefixes=SI-GISEL %s4; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=fiji -global-isel=0 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=VI-SDAG %s5; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=fiji -global-isel=1 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=VI-GISEL %s6; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx900 -global-isel=0 -mattr=-flat-for-global -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX9-SDAG %s7; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx900 -global-isel=1 -mattr=-flat-for-global -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX9-GISEL %s8; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx950 -global-isel=0 -mattr=-flat-for-global -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX950-SDAG %s9; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx950 -global-isel=1 -mattr=-flat-for-global -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX950-GISEL %s10; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -global-isel=0 -mattr=-flat-for-global,+real-true16 -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX11-SDAG-TRUE16 %s11; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -global-isel=0 -mattr=-flat-for-global,-real-true16 -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX11-SDAG-FAKE16 %s12; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -global-isel=1 -mattr=-flat-for-global,+real-true16 -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX11-GISEL-TRUE16 %s13; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -global-isel=1 -mattr=-flat-for-global,-real-true16 -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX11-GISEL-FAKE16 %s14; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1250 -global-isel=0 -mattr=-flat-for-global,+real-true16 -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX1250-SDAG-TRUE16 %s15; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1250 -global-isel=0 -mattr=-flat-for-global,-real-true16 -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX1250-SDAG-FAKE16 %s16; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1250 -global-isel=1 -mattr=-flat-for-global,+real-true16 -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX1250-GISEL-TRUE16 %s17; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1250 -global-isel=1 -mattr=-flat-for-global,-real-true16 -denormal-fp-math=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GFX1250-GISEL-FAKE16 %s18 19define amdgpu_kernel void @fptrunc_f32_to_f16(20; SI-SDAG-LABEL: fptrunc_f32_to_f16:21; SI-SDAG: ; %bb.0: ; %entry22; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x923; SI-SDAG-NEXT: s_mov_b32 s7, 0xf00024; SI-SDAG-NEXT: s_mov_b32 s6, -125; SI-SDAG-NEXT: s_mov_b32 s10, s626; SI-SDAG-NEXT: s_mov_b32 s11, s727; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)28; SI-SDAG-NEXT: s_mov_b32 s8, s229; SI-SDAG-NEXT: s_mov_b32 s9, s330; SI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 031; SI-SDAG-NEXT: s_mov_b32 s4, s032; SI-SDAG-NEXT: s_mov_b32 s5, s133; SI-SDAG-NEXT: s_waitcnt vmcnt(0)34; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v035; SI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 036; SI-SDAG-NEXT: s_endpgm37;38; SI-GISEL-LABEL: fptrunc_f32_to_f16:39; SI-GISEL: ; %bb.0: ; %entry40; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x941; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)42; SI-GISEL-NEXT: s_load_dword s3, s[2:3], 0x043; SI-GISEL-NEXT: s_mov_b32 s2, -144; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)45; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s346; SI-GISEL-NEXT: s_mov_b32 s3, 0xf00047; SI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 048; SI-GISEL-NEXT: s_endpgm49;50; VI-SDAG-LABEL: fptrunc_f32_to_f16:51; VI-SDAG: ; %bb.0: ; %entry52; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2453; VI-SDAG-NEXT: s_mov_b32 s7, 0xf00054; VI-SDAG-NEXT: s_mov_b32 s6, -155; VI-SDAG-NEXT: s_mov_b32 s10, s656; VI-SDAG-NEXT: s_mov_b32 s11, s757; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)58; VI-SDAG-NEXT: s_mov_b32 s8, s259; VI-SDAG-NEXT: s_mov_b32 s9, s360; VI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 061; VI-SDAG-NEXT: s_mov_b32 s4, s062; VI-SDAG-NEXT: s_mov_b32 s5, s163; VI-SDAG-NEXT: s_waitcnt vmcnt(0)64; VI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v065; VI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 066; VI-SDAG-NEXT: s_endpgm67;68; VI-GISEL-LABEL: fptrunc_f32_to_f16:69; VI-GISEL: ; %bb.0: ; %entry70; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2471; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)72; VI-GISEL-NEXT: s_load_dword s2, s[2:3], 0x073; VI-GISEL-NEXT: s_mov_b32 s3, 0xf00074; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)75; VI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s276; VI-GISEL-NEXT: s_mov_b32 s2, -177; VI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 078; VI-GISEL-NEXT: s_endpgm79;80; GFX9-SDAG-LABEL: fptrunc_f32_to_f16:81; GFX9-SDAG: ; %bb.0: ; %entry82; GFX9-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2483; GFX9-SDAG-NEXT: s_mov_b32 s7, 0xf00084; GFX9-SDAG-NEXT: s_mov_b32 s6, -185; GFX9-SDAG-NEXT: s_mov_b32 s10, s686; GFX9-SDAG-NEXT: s_mov_b32 s11, s787; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)88; GFX9-SDAG-NEXT: s_mov_b32 s8, s289; GFX9-SDAG-NEXT: s_mov_b32 s9, s390; GFX9-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 091; GFX9-SDAG-NEXT: s_mov_b32 s4, s092; GFX9-SDAG-NEXT: s_mov_b32 s5, s193; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)94; GFX9-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v095; GFX9-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 096; GFX9-SDAG-NEXT: s_endpgm97;98; GFX9-GISEL-LABEL: fptrunc_f32_to_f16:99; GFX9-GISEL: ; %bb.0: ; %entry100; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24101; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)102; GFX9-GISEL-NEXT: s_load_dword s2, s[2:3], 0x0103; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf000104; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)105; GFX9-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s2106; GFX9-GISEL-NEXT: s_mov_b32 s2, -1107; GFX9-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 0108; GFX9-GISEL-NEXT: s_endpgm109;110; GFX950-SDAG-LABEL: fptrunc_f32_to_f16:111; GFX950-SDAG: ; %bb.0: ; %entry112; GFX950-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24113; GFX950-SDAG-NEXT: s_mov_b32 s7, 0xf000114; GFX950-SDAG-NEXT: s_mov_b32 s6, -1115; GFX950-SDAG-NEXT: s_mov_b32 s10, s6116; GFX950-SDAG-NEXT: s_mov_b32 s11, s7117; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)118; GFX950-SDAG-NEXT: s_mov_b32 s8, s2119; GFX950-SDAG-NEXT: s_mov_b32 s9, s3120; GFX950-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 0121; GFX950-SDAG-NEXT: s_mov_b32 s4, s0122; GFX950-SDAG-NEXT: s_mov_b32 s5, s1123; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)124; GFX950-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0125; GFX950-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 0126; GFX950-SDAG-NEXT: s_endpgm127;128; GFX950-GISEL-LABEL: fptrunc_f32_to_f16:129; GFX950-GISEL: ; %bb.0: ; %entry130; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24131; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)132; GFX950-GISEL-NEXT: s_load_dword s2, s[2:3], 0x0133; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf000134; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)135; GFX950-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s2136; GFX950-GISEL-NEXT: s_mov_b32 s2, -1137; GFX950-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 0138; GFX950-GISEL-NEXT: s_endpgm139;140; GFX11-SDAG-TRUE16-LABEL: fptrunc_f32_to_f16:141; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry142; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24143; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -1144; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x31016000145; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s6146; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s7147; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)148; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s2149; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s3150; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s0151; GFX11-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], 0152; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s1153; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)154; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v0155; GFX11-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], 0156; GFX11-SDAG-TRUE16-NEXT: s_endpgm157;158; GFX11-SDAG-FAKE16-LABEL: fptrunc_f32_to_f16:159; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry160; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24161; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -1162; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x31016000163; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s6164; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s7165; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)166; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s2167; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s3168; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s0169; GFX11-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], 0170; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s1171; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)172; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v0173; GFX11-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], 0174; GFX11-SDAG-FAKE16-NEXT: s_endpgm175;176; GFX11-GISEL-TRUE16-LABEL: fptrunc_f32_to_f16:177; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry178; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24179; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)180; GFX11-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x0181; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x31016000182; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)183; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, s2184; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -1185; GFX11-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], 0186; GFX11-GISEL-TRUE16-NEXT: s_endpgm187;188; GFX11-GISEL-FAKE16-LABEL: fptrunc_f32_to_f16:189; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry190; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24191; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)192; GFX11-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x0193; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x31016000194; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)195; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, s2196; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -1197; GFX11-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], 0198; GFX11-GISEL-FAKE16-NEXT: s_endpgm199;200; GFX1250-SDAG-TRUE16-LABEL: fptrunc_f32_to_f16:201; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry202; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1203; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24204; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -1205; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x31016000206; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s6207; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s7208; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0209; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s2210; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s3211; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s0212; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], null213; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s1214; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x0215; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 0216; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v0217; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], null218; GFX1250-SDAG-TRUE16-NEXT: s_endpgm219;220; GFX1250-SDAG-FAKE16-LABEL: fptrunc_f32_to_f16:221; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry222; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1223; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24224; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -1225; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x31016000226; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s6227; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s7228; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0229; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s2230; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s3231; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s0232; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], null233; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s1234; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x0235; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 0236; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v0237; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], null238; GFX1250-SDAG-FAKE16-NEXT: s_endpgm239;240; GFX1250-GISEL-TRUE16-LABEL: fptrunc_f32_to_f16:241; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry242; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1243; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24244; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x0245; GFX1250-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x0246; GFX1250-GISEL-TRUE16-NEXT: s_wait_xcnt 0x0247; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x31016000248; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x0249; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 0250; GFX1250-GISEL-TRUE16-NEXT: s_cvt_f16_f32 s2, s2251; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3)252; GFX1250-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s2253; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -1254; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], null255; GFX1250-GISEL-TRUE16-NEXT: s_endpgm256;257; GFX1250-GISEL-FAKE16-LABEL: fptrunc_f32_to_f16:258; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry259; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1260; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24261; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x0262; GFX1250-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x0263; GFX1250-GISEL-FAKE16-NEXT: s_wait_xcnt 0x0264; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x31016000265; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x0266; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 0267; GFX1250-GISEL-FAKE16-NEXT: s_cvt_f16_f32 s2, s2268; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3)269; GFX1250-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s2270; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -1271; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], null272; GFX1250-GISEL-FAKE16-NEXT: s_endpgm273 ptr addrspace(1) %r,274 ptr addrspace(1) %a) {275entry:276 %a.val = load float, ptr addrspace(1) %a277 %r.val = fptrunc float %a.val to half278 store half %r.val, ptr addrspace(1) %r279 ret void280}281 282define amdgpu_kernel void @fptrunc_f32_to_f16_afn(ptr addrspace(1) %r,283; SI-SDAG-LABEL: fptrunc_f32_to_f16_afn:284; SI-SDAG: ; %bb.0: ; %entry285; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9286; SI-SDAG-NEXT: s_mov_b32 s7, 0xf000287; SI-SDAG-NEXT: s_mov_b32 s6, -1288; SI-SDAG-NEXT: s_mov_b32 s10, s6289; SI-SDAG-NEXT: s_mov_b32 s11, s7290; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)291; SI-SDAG-NEXT: s_mov_b32 s8, s2292; SI-SDAG-NEXT: s_mov_b32 s9, s3293; SI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 0294; SI-SDAG-NEXT: s_mov_b32 s4, s0295; SI-SDAG-NEXT: s_mov_b32 s5, s1296; SI-SDAG-NEXT: s_waitcnt vmcnt(0)297; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0298; SI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 0299; SI-SDAG-NEXT: s_endpgm300;301; SI-GISEL-LABEL: fptrunc_f32_to_f16_afn:302; SI-GISEL: ; %bb.0: ; %entry303; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9304; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)305; SI-GISEL-NEXT: s_load_dword s3, s[2:3], 0x0306; SI-GISEL-NEXT: s_mov_b32 s2, -1307; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)308; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s3309; SI-GISEL-NEXT: s_mov_b32 s3, 0xf000310; SI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 0311; SI-GISEL-NEXT: s_endpgm312;313; VI-SDAG-LABEL: fptrunc_f32_to_f16_afn:314; VI-SDAG: ; %bb.0: ; %entry315; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24316; VI-SDAG-NEXT: s_mov_b32 s7, 0xf000317; VI-SDAG-NEXT: s_mov_b32 s6, -1318; VI-SDAG-NEXT: s_mov_b32 s10, s6319; VI-SDAG-NEXT: s_mov_b32 s11, s7320; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)321; VI-SDAG-NEXT: s_mov_b32 s8, s2322; VI-SDAG-NEXT: s_mov_b32 s9, s3323; VI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 0324; VI-SDAG-NEXT: s_mov_b32 s4, s0325; VI-SDAG-NEXT: s_mov_b32 s5, s1326; VI-SDAG-NEXT: s_waitcnt vmcnt(0)327; VI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0328; VI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 0329; VI-SDAG-NEXT: s_endpgm330;331; VI-GISEL-LABEL: fptrunc_f32_to_f16_afn:332; VI-GISEL: ; %bb.0: ; %entry333; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24334; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)335; VI-GISEL-NEXT: s_load_dword s2, s[2:3], 0x0336; VI-GISEL-NEXT: s_mov_b32 s3, 0xf000337; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)338; VI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s2339; VI-GISEL-NEXT: s_mov_b32 s2, -1340; VI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 0341; VI-GISEL-NEXT: s_endpgm342;343; GFX9-SDAG-LABEL: fptrunc_f32_to_f16_afn:344; GFX9-SDAG: ; %bb.0: ; %entry345; GFX9-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24346; GFX9-SDAG-NEXT: s_mov_b32 s7, 0xf000347; GFX9-SDAG-NEXT: s_mov_b32 s6, -1348; GFX9-SDAG-NEXT: s_mov_b32 s10, s6349; GFX9-SDAG-NEXT: s_mov_b32 s11, s7350; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)351; GFX9-SDAG-NEXT: s_mov_b32 s8, s2352; GFX9-SDAG-NEXT: s_mov_b32 s9, s3353; GFX9-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 0354; GFX9-SDAG-NEXT: s_mov_b32 s4, s0355; GFX9-SDAG-NEXT: s_mov_b32 s5, s1356; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)357; GFX9-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0358; GFX9-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 0359; GFX9-SDAG-NEXT: s_endpgm360;361; GFX9-GISEL-LABEL: fptrunc_f32_to_f16_afn:362; GFX9-GISEL: ; %bb.0: ; %entry363; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24364; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)365; GFX9-GISEL-NEXT: s_load_dword s2, s[2:3], 0x0366; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf000367; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)368; GFX9-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s2369; GFX9-GISEL-NEXT: s_mov_b32 s2, -1370; GFX9-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 0371; GFX9-GISEL-NEXT: s_endpgm372;373; GFX950-SDAG-LABEL: fptrunc_f32_to_f16_afn:374; GFX950-SDAG: ; %bb.0: ; %entry375; GFX950-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24376; GFX950-SDAG-NEXT: s_mov_b32 s7, 0xf000377; GFX950-SDAG-NEXT: s_mov_b32 s6, -1378; GFX950-SDAG-NEXT: s_mov_b32 s10, s6379; GFX950-SDAG-NEXT: s_mov_b32 s11, s7380; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)381; GFX950-SDAG-NEXT: s_mov_b32 s8, s2382; GFX950-SDAG-NEXT: s_mov_b32 s9, s3383; GFX950-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 0384; GFX950-SDAG-NEXT: s_mov_b32 s4, s0385; GFX950-SDAG-NEXT: s_mov_b32 s5, s1386; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)387; GFX950-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0388; GFX950-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 0389; GFX950-SDAG-NEXT: s_endpgm390;391; GFX950-GISEL-LABEL: fptrunc_f32_to_f16_afn:392; GFX950-GISEL: ; %bb.0: ; %entry393; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24394; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)395; GFX950-GISEL-NEXT: s_load_dword s2, s[2:3], 0x0396; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf000397; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)398; GFX950-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s2399; GFX950-GISEL-NEXT: s_mov_b32 s2, -1400; GFX950-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 0401; GFX950-GISEL-NEXT: s_endpgm402;403; GFX11-SDAG-TRUE16-LABEL: fptrunc_f32_to_f16_afn:404; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry405; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24406; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -1407; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x31016000408; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s6409; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s7410; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)411; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s2412; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s3413; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s0414; GFX11-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], 0415; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s1416; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)417; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v0418; GFX11-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], 0419; GFX11-SDAG-TRUE16-NEXT: s_endpgm420;421; GFX11-SDAG-FAKE16-LABEL: fptrunc_f32_to_f16_afn:422; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry423; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24424; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -1425; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x31016000426; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s6427; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s7428; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)429; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s2430; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s3431; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s0432; GFX11-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], 0433; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s1434; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)435; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v0436; GFX11-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], 0437; GFX11-SDAG-FAKE16-NEXT: s_endpgm438;439; GFX11-GISEL-TRUE16-LABEL: fptrunc_f32_to_f16_afn:440; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry441; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24442; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)443; GFX11-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x0444; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x31016000445; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)446; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, s2447; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -1448; GFX11-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], 0449; GFX11-GISEL-TRUE16-NEXT: s_endpgm450;451; GFX11-GISEL-FAKE16-LABEL: fptrunc_f32_to_f16_afn:452; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry453; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24454; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)455; GFX11-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x0456; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x31016000457; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)458; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, s2459; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -1460; GFX11-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], 0461; GFX11-GISEL-FAKE16-NEXT: s_endpgm462;463; GFX1250-SDAG-TRUE16-LABEL: fptrunc_f32_to_f16_afn:464; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry465; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1466; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24467; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -1468; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x31016000469; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s6470; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s7471; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0472; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s2473; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s3474; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s0475; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], null476; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s1477; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x0478; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 0479; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v0480; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], null481; GFX1250-SDAG-TRUE16-NEXT: s_endpgm482;483; GFX1250-SDAG-FAKE16-LABEL: fptrunc_f32_to_f16_afn:484; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry485; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1486; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24487; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -1488; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x31016000489; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s6490; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s7491; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0492; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s2493; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s3494; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s0495; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], null496; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s1497; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x0498; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 0499; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v0500; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], null501; GFX1250-SDAG-FAKE16-NEXT: s_endpgm502;503; GFX1250-GISEL-TRUE16-LABEL: fptrunc_f32_to_f16_afn:504; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry505; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1506; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24507; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x0508; GFX1250-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x0509; GFX1250-GISEL-TRUE16-NEXT: s_wait_xcnt 0x0510; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x31016000511; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x0512; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 0513; GFX1250-GISEL-TRUE16-NEXT: s_cvt_f16_f32 s2, s2514; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3)515; GFX1250-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s2516; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -1517; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], null518; GFX1250-GISEL-TRUE16-NEXT: s_endpgm519;520; GFX1250-GISEL-FAKE16-LABEL: fptrunc_f32_to_f16_afn:521; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry522; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1523; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24524; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x0525; GFX1250-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x0526; GFX1250-GISEL-FAKE16-NEXT: s_wait_xcnt 0x0527; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x31016000528; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x0529; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 0530; GFX1250-GISEL-FAKE16-NEXT: s_cvt_f16_f32 s2, s2531; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3)532; GFX1250-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s2533; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -1534; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], null535; GFX1250-GISEL-FAKE16-NEXT: s_endpgm536 ptr addrspace(1) %a) {537entry:538 %a.val = load float, ptr addrspace(1) %a539 %r.val = fptrunc afn float %a.val to half540 store half %r.val, ptr addrspace(1) %r541 ret void542}543 544define amdgpu_kernel void @fptrunc_f64_to_f16(545; SI-SDAG-LABEL: fptrunc_f64_to_f16:546; SI-SDAG: ; %bb.0: ; %entry547; SI-SDAG-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x9548; SI-SDAG-NEXT: s_mov_b32 s3, 0xf000549; SI-SDAG-NEXT: s_mov_b32 s2, -1550; SI-SDAG-NEXT: s_mov_b32 s10, s2551; SI-SDAG-NEXT: s_mov_b32 s11, s3552; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)553; SI-SDAG-NEXT: s_mov_b32 s8, s6554; SI-SDAG-NEXT: s_mov_b32 s9, s7555; SI-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 0556; SI-SDAG-NEXT: s_movk_i32 s0, 0x7e00557; SI-SDAG-NEXT: s_waitcnt vmcnt(0)558; SI-SDAG-NEXT: v_readfirstlane_b32 s1, v1559; SI-SDAG-NEXT: s_and_b32 s6, s1, 0x1ff560; SI-SDAG-NEXT: s_lshr_b32 s7, s1, 8561; SI-SDAG-NEXT: s_bfe_u32 s8, s1, 0xb0014562; SI-SDAG-NEXT: v_or_b32_e32 v0, s6, v0563; SI-SDAG-NEXT: s_and_b32 s6, s7, 0xffe564; SI-SDAG-NEXT: s_sub_i32 s7, 0x3f1, s8565; SI-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0566; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc567; SI-SDAG-NEXT: v_med3_i32 v1, s7, 0, 13568; SI-SDAG-NEXT: v_readfirstlane_b32 s7, v0569; SI-SDAG-NEXT: v_readfirstlane_b32 s9, v1570; SI-SDAG-NEXT: s_or_b32 s6, s6, s7571; SI-SDAG-NEXT: s_or_b32 s7, s6, 0x1000572; SI-SDAG-NEXT: s_lshr_b32 s10, s7, s9573; SI-SDAG-NEXT: s_lshl_b32 s9, s10, s9574; SI-SDAG-NEXT: s_cmp_lg_u32 s9, s7575; SI-SDAG-NEXT: s_cselect_b32 s7, 1, 0576; SI-SDAG-NEXT: s_addk_i32 s8, 0xfc10577; SI-SDAG-NEXT: s_or_b32 s7, s10, s7578; SI-SDAG-NEXT: s_lshl_b32 s9, s8, 12579; SI-SDAG-NEXT: s_or_b32 s9, s6, s9580; SI-SDAG-NEXT: s_cmp_lt_i32 s8, 1581; SI-SDAG-NEXT: s_cselect_b32 s7, s7, s9582; SI-SDAG-NEXT: s_and_b32 s9, s7, 7583; SI-SDAG-NEXT: s_cmp_gt_i32 s9, 5584; SI-SDAG-NEXT: s_cselect_b32 s10, 1, 0585; SI-SDAG-NEXT: s_cmp_eq_u32 s9, 3586; SI-SDAG-NEXT: s_cselect_b32 s9, 1, 0587; SI-SDAG-NEXT: s_lshr_b32 s7, s7, 2588; SI-SDAG-NEXT: s_or_b32 s9, s9, s10589; SI-SDAG-NEXT: s_add_i32 s7, s7, s9590; SI-SDAG-NEXT: s_cmp_lt_i32 s8, 31591; SI-SDAG-NEXT: s_cselect_b32 s7, s7, 0x7c00592; SI-SDAG-NEXT: s_cmp_lg_u32 s6, 0593; SI-SDAG-NEXT: s_cselect_b32 s0, s0, 0x7c00594; SI-SDAG-NEXT: s_cmpk_eq_i32 s8, 0x40f595; SI-SDAG-NEXT: s_cselect_b32 s0, s0, s7596; SI-SDAG-NEXT: s_lshr_b32 s1, s1, 16597; SI-SDAG-NEXT: s_and_b32 s1, s1, 0x8000598; SI-SDAG-NEXT: s_or_b32 s6, s1, s0599; SI-SDAG-NEXT: s_mov_b32 s0, s4600; SI-SDAG-NEXT: s_mov_b32 s1, s5601; SI-SDAG-NEXT: v_mov_b32_e32 v0, s6602; SI-SDAG-NEXT: buffer_store_short v0, off, s[0:3], 0603; SI-SDAG-NEXT: s_endpgm604;605; SI-GISEL-LABEL: fptrunc_f64_to_f16:606; SI-GISEL: ; %bb.0: ; %entry607; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9608; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)609; SI-GISEL-NEXT: s_load_dwordx2 s[4:5], s[2:3], 0x0610; SI-GISEL-NEXT: s_mov_b32 s2, -1611; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)612; SI-GISEL-NEXT: s_bfe_u32 s3, s5, 0xb0014613; SI-GISEL-NEXT: s_lshr_b32 s6, s5, 8614; SI-GISEL-NEXT: s_and_b32 s7, s5, 0x1ff615; SI-GISEL-NEXT: s_addk_i32 s3, 0xfc10616; SI-GISEL-NEXT: s_and_b32 s6, s6, 0xffe617; SI-GISEL-NEXT: s_or_b32 s4, s7, s4618; SI-GISEL-NEXT: s_cselect_b32 s4, 1, 0619; SI-GISEL-NEXT: s_or_b32 s4, s6, s4620; SI-GISEL-NEXT: s_cselect_b32 s6, 1, 0621; SI-GISEL-NEXT: s_lshl_b32 s6, s6, 9622; SI-GISEL-NEXT: s_lshl_b32 s7, s3, 12623; SI-GISEL-NEXT: s_sub_i32 s8, 1, s3624; SI-GISEL-NEXT: s_or_b32 s9, s4, 0x1000625; SI-GISEL-NEXT: s_or_b32 s6, s6, 0x7c00626; SI-GISEL-NEXT: s_or_b32 s4, s4, s7627; SI-GISEL-NEXT: s_max_i32 s7, s8, 0628; SI-GISEL-NEXT: s_min_i32 s7, s7, 13629; SI-GISEL-NEXT: s_lshr_b32 s8, s9, s7630; SI-GISEL-NEXT: s_lshl_b32 s7, s8, s7631; SI-GISEL-NEXT: s_cmp_lg_u32 s7, s9632; SI-GISEL-NEXT: s_cselect_b32 s7, 1, 0633; SI-GISEL-NEXT: s_or_b32 s7, s8, s7634; SI-GISEL-NEXT: s_cmp_lt_i32 s3, 1635; SI-GISEL-NEXT: s_cselect_b32 s4, s7, s4636; SI-GISEL-NEXT: s_and_b32 s7, s4, 7637; SI-GISEL-NEXT: s_lshr_b32 s4, s4, 2638; SI-GISEL-NEXT: s_cmp_eq_u32 s7, 3639; SI-GISEL-NEXT: s_cselect_b32 s8, 1, 0640; SI-GISEL-NEXT: s_cmp_gt_i32 s7, 5641; SI-GISEL-NEXT: s_cselect_b32 s7, 1, 0642; SI-GISEL-NEXT: s_or_b32 s7, s8, s7643; SI-GISEL-NEXT: s_add_i32 s4, s4, s7644; SI-GISEL-NEXT: s_cmp_gt_i32 s3, 30645; SI-GISEL-NEXT: s_cselect_b32 s4, 0x7c00, s4646; SI-GISEL-NEXT: s_cmpk_eq_i32 s3, 0x40f647; SI-GISEL-NEXT: s_cselect_b32 s3, s6, s4648; SI-GISEL-NEXT: s_lshr_b32 s4, s5, 16649; SI-GISEL-NEXT: s_and_b32 s4, s4, 0x8000650; SI-GISEL-NEXT: s_or_b32 s4, s4, s3651; SI-GISEL-NEXT: s_mov_b32 s3, 0xf000652; SI-GISEL-NEXT: v_mov_b32_e32 v0, s4653; SI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 0654; SI-GISEL-NEXT: s_endpgm655;656; VI-SDAG-LABEL: fptrunc_f64_to_f16:657; VI-SDAG: ; %bb.0: ; %entry658; VI-SDAG-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x24659; VI-SDAG-NEXT: s_mov_b32 s3, 0xf000660; VI-SDAG-NEXT: s_mov_b32 s2, -1661; VI-SDAG-NEXT: s_mov_b32 s10, s2662; VI-SDAG-NEXT: s_mov_b32 s11, s3663; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)664; VI-SDAG-NEXT: s_mov_b32 s8, s6665; VI-SDAG-NEXT: s_mov_b32 s9, s7666; VI-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 0667; VI-SDAG-NEXT: s_mov_b32 s0, s4668; VI-SDAG-NEXT: s_mov_b32 s1, s5669; VI-SDAG-NEXT: s_movk_i32 s6, 0x7e00670; VI-SDAG-NEXT: s_waitcnt vmcnt(0)671; VI-SDAG-NEXT: v_readfirstlane_b32 s4, v1672; VI-SDAG-NEXT: s_and_b32 s5, s4, 0x1ff673; VI-SDAG-NEXT: v_or_b32_e32 v0, s5, v0674; VI-SDAG-NEXT: s_lshr_b32 s7, s4, 8675; VI-SDAG-NEXT: s_bfe_u32 s8, s4, 0xb0014676; VI-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0677; VI-SDAG-NEXT: s_and_b32 s5, s7, 0xffe678; VI-SDAG-NEXT: s_sub_i32 s7, 0x3f1, s8679; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc680; VI-SDAG-NEXT: v_med3_i32 v1, s7, 0, 13681; VI-SDAG-NEXT: v_readfirstlane_b32 s7, v0682; VI-SDAG-NEXT: s_or_b32 s5, s5, s7683; VI-SDAG-NEXT: v_readfirstlane_b32 s9, v1684; VI-SDAG-NEXT: s_or_b32 s7, s5, 0x1000685; VI-SDAG-NEXT: s_lshr_b32 s10, s7, s9686; VI-SDAG-NEXT: s_lshl_b32 s9, s10, s9687; VI-SDAG-NEXT: s_cmp_lg_u32 s9, s7688; VI-SDAG-NEXT: s_cselect_b32 s7, 1, 0689; VI-SDAG-NEXT: s_addk_i32 s8, 0xfc10690; VI-SDAG-NEXT: s_lshl_b32 s9, s8, 12691; VI-SDAG-NEXT: s_or_b32 s7, s10, s7692; VI-SDAG-NEXT: s_or_b32 s9, s5, s9693; VI-SDAG-NEXT: s_cmp_lt_i32 s8, 1694; VI-SDAG-NEXT: s_cselect_b32 s7, s7, s9695; VI-SDAG-NEXT: s_and_b32 s9, s7, 7696; VI-SDAG-NEXT: s_cmp_gt_i32 s9, 5697; VI-SDAG-NEXT: s_cselect_b32 s10, 1, 0698; VI-SDAG-NEXT: s_cmp_eq_u32 s9, 3699; VI-SDAG-NEXT: s_cselect_b32 s9, 1, 0700; VI-SDAG-NEXT: s_lshr_b32 s7, s7, 2701; VI-SDAG-NEXT: s_or_b32 s9, s9, s10702; VI-SDAG-NEXT: s_add_i32 s7, s7, s9703; VI-SDAG-NEXT: s_cmp_lt_i32 s8, 31704; VI-SDAG-NEXT: s_cselect_b32 s7, s7, 0x7c00705; VI-SDAG-NEXT: s_cmp_lg_u32 s5, 0706; VI-SDAG-NEXT: s_cselect_b32 s5, s6, 0x7c00707; VI-SDAG-NEXT: s_cmpk_eq_i32 s8, 0x40f708; VI-SDAG-NEXT: s_cselect_b32 s5, s5, s7709; VI-SDAG-NEXT: s_lshr_b32 s4, s4, 16710; VI-SDAG-NEXT: s_and_b32 s4, s4, 0x8000711; VI-SDAG-NEXT: s_or_b32 s4, s4, s5712; VI-SDAG-NEXT: v_mov_b32_e32 v0, s4713; VI-SDAG-NEXT: buffer_store_short v0, off, s[0:3], 0714; VI-SDAG-NEXT: s_endpgm715;716; VI-GISEL-LABEL: fptrunc_f64_to_f16:717; VI-GISEL: ; %bb.0: ; %entry718; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24719; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)720; VI-GISEL-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0721; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)722; VI-GISEL-NEXT: s_bfe_u32 s4, s3, 0xb0014723; VI-GISEL-NEXT: s_lshr_b32 s5, s3, 8724; VI-GISEL-NEXT: s_and_b32 s6, s3, 0x1ff725; VI-GISEL-NEXT: s_addk_i32 s4, 0xfc10726; VI-GISEL-NEXT: s_and_b32 s5, s5, 0xffe727; VI-GISEL-NEXT: s_or_b32 s2, s6, s2728; VI-GISEL-NEXT: s_cselect_b32 s2, 1, 0729; VI-GISEL-NEXT: s_or_b32 s2, s5, s2730; VI-GISEL-NEXT: s_cselect_b32 s5, 1, 0731; VI-GISEL-NEXT: s_sub_i32 s7, 1, s4732; VI-GISEL-NEXT: s_lshl_b32 s6, s4, 12733; VI-GISEL-NEXT: s_max_i32 s7, s7, 0734; VI-GISEL-NEXT: s_or_b32 s6, s2, s6735; VI-GISEL-NEXT: s_min_i32 s7, s7, 13736; VI-GISEL-NEXT: s_bitset1_b32 s2, 12737; VI-GISEL-NEXT: s_lshl_b32 s5, s5, 9738; VI-GISEL-NEXT: s_lshr_b32 s8, s2, s7739; VI-GISEL-NEXT: s_or_b32 s5, s5, 0x7c00740; VI-GISEL-NEXT: s_lshl_b32 s7, s8, s7741; VI-GISEL-NEXT: s_cmp_lg_u32 s7, s2742; VI-GISEL-NEXT: s_cselect_b32 s2, 1, 0743; VI-GISEL-NEXT: s_or_b32 s2, s8, s2744; VI-GISEL-NEXT: s_cmp_lt_i32 s4, 1745; VI-GISEL-NEXT: s_cselect_b32 s2, s2, s6746; VI-GISEL-NEXT: s_and_b32 s6, s2, 7747; VI-GISEL-NEXT: s_lshr_b32 s2, s2, 2748; VI-GISEL-NEXT: s_cmp_eq_u32 s6, 3749; VI-GISEL-NEXT: s_cselect_b32 s7, 1, 0750; VI-GISEL-NEXT: s_cmp_gt_i32 s6, 5751; VI-GISEL-NEXT: s_cselect_b32 s6, 1, 0752; VI-GISEL-NEXT: s_or_b32 s6, s7, s6753; VI-GISEL-NEXT: s_add_i32 s2, s2, s6754; VI-GISEL-NEXT: s_cmp_gt_i32 s4, 30755; VI-GISEL-NEXT: s_cselect_b32 s2, 0x7c00, s2756; VI-GISEL-NEXT: s_cmpk_eq_i32 s4, 0x40f757; VI-GISEL-NEXT: s_cselect_b32 s2, s5, s2758; VI-GISEL-NEXT: s_lshr_b32 s3, s3, 16759; VI-GISEL-NEXT: s_and_b32 s3, s3, 0x8000760; VI-GISEL-NEXT: s_or_b32 s2, s3, s2761; VI-GISEL-NEXT: v_mov_b32_e32 v0, s2762; VI-GISEL-NEXT: s_mov_b32 s2, -1763; VI-GISEL-NEXT: s_mov_b32 s3, 0xf000764; VI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 0765; VI-GISEL-NEXT: s_endpgm766;767; GFX9-SDAG-LABEL: fptrunc_f64_to_f16:768; GFX9-SDAG: ; %bb.0: ; %entry769; GFX9-SDAG-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24770; GFX9-SDAG-NEXT: s_mov_b32 s3, 0xf000771; GFX9-SDAG-NEXT: s_mov_b32 s2, -1772; GFX9-SDAG-NEXT: s_mov_b32 s6, s2773; GFX9-SDAG-NEXT: s_mov_b32 s7, s3774; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)775; GFX9-SDAG-NEXT: s_mov_b32 s4, s10776; GFX9-SDAG-NEXT: s_mov_b32 s5, s11777; GFX9-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[4:7], 0778; GFX9-SDAG-NEXT: s_mov_b32 s0, s8779; GFX9-SDAG-NEXT: s_mov_b32 s1, s9780; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x7e00781; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)782; GFX9-SDAG-NEXT: v_readfirstlane_b32 s5, v1783; GFX9-SDAG-NEXT: s_and_b32 s6, s5, 0x1ff784; GFX9-SDAG-NEXT: v_or_b32_e32 v0, s6, v0785; GFX9-SDAG-NEXT: s_lshr_b32 s7, s5, 8786; GFX9-SDAG-NEXT: s_bfe_u32 s8, s5, 0xb0014787; GFX9-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0788; GFX9-SDAG-NEXT: s_and_b32 s6, s7, 0xffe789; GFX9-SDAG-NEXT: s_sub_i32 s7, 0x3f1, s8790; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc791; GFX9-SDAG-NEXT: v_med3_i32 v1, s7, 0, 13792; GFX9-SDAG-NEXT: v_readfirstlane_b32 s7, v0793; GFX9-SDAG-NEXT: s_or_b32 s6, s6, s7794; GFX9-SDAG-NEXT: v_readfirstlane_b32 s9, v1795; GFX9-SDAG-NEXT: s_or_b32 s7, s6, 0x1000796; GFX9-SDAG-NEXT: s_lshr_b32 s10, s7, s9797; GFX9-SDAG-NEXT: s_lshl_b32 s9, s10, s9798; GFX9-SDAG-NEXT: s_cmp_lg_u32 s9, s7799; GFX9-SDAG-NEXT: s_cselect_b32 s7, 1, 0800; GFX9-SDAG-NEXT: s_addk_i32 s8, 0xfc10801; GFX9-SDAG-NEXT: s_lshl_b32 s9, s8, 12802; GFX9-SDAG-NEXT: s_or_b32 s7, s10, s7803; GFX9-SDAG-NEXT: s_or_b32 s9, s6, s9804; GFX9-SDAG-NEXT: s_cmp_lt_i32 s8, 1805; GFX9-SDAG-NEXT: s_cselect_b32 s7, s7, s9806; GFX9-SDAG-NEXT: s_and_b32 s9, s7, 7807; GFX9-SDAG-NEXT: s_cmp_gt_i32 s9, 5808; GFX9-SDAG-NEXT: s_cselect_b32 s10, 1, 0809; GFX9-SDAG-NEXT: s_cmp_eq_u32 s9, 3810; GFX9-SDAG-NEXT: s_cselect_b32 s9, 1, 0811; GFX9-SDAG-NEXT: s_lshr_b32 s7, s7, 2812; GFX9-SDAG-NEXT: s_or_b32 s9, s9, s10813; GFX9-SDAG-NEXT: s_add_i32 s7, s7, s9814; GFX9-SDAG-NEXT: s_cmp_lt_i32 s8, 31815; GFX9-SDAG-NEXT: s_cselect_b32 s7, s7, 0x7c00816; GFX9-SDAG-NEXT: s_cmp_lg_u32 s6, 0817; GFX9-SDAG-NEXT: s_cselect_b32 s4, s4, 0x7c00818; GFX9-SDAG-NEXT: s_cmpk_eq_i32 s8, 0x40f819; GFX9-SDAG-NEXT: s_cselect_b32 s4, s4, s7820; GFX9-SDAG-NEXT: s_lshr_b32 s5, s5, 16821; GFX9-SDAG-NEXT: s_and_b32 s5, s5, 0x8000822; GFX9-SDAG-NEXT: s_or_b32 s4, s5, s4823; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s4824; GFX9-SDAG-NEXT: buffer_store_short v0, off, s[0:3], 0825; GFX9-SDAG-NEXT: s_endpgm826;827; GFX9-GISEL-LABEL: fptrunc_f64_to_f16:828; GFX9-GISEL: ; %bb.0: ; %entry829; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24830; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)831; GFX9-GISEL-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0832; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)833; GFX9-GISEL-NEXT: s_bfe_u32 s4, s3, 0xb0014834; GFX9-GISEL-NEXT: s_lshr_b32 s5, s3, 8835; GFX9-GISEL-NEXT: s_and_b32 s6, s3, 0x1ff836; GFX9-GISEL-NEXT: s_addk_i32 s4, 0xfc10837; GFX9-GISEL-NEXT: s_and_b32 s5, s5, 0xffe838; GFX9-GISEL-NEXT: s_or_b32 s2, s6, s2839; GFX9-GISEL-NEXT: s_cselect_b32 s2, 1, 0840; GFX9-GISEL-NEXT: s_or_b32 s2, s5, s2841; GFX9-GISEL-NEXT: s_cselect_b32 s5, 1, 0842; GFX9-GISEL-NEXT: s_sub_i32 s7, 1, s4843; GFX9-GISEL-NEXT: s_lshl_b32 s6, s4, 12844; GFX9-GISEL-NEXT: s_max_i32 s7, s7, 0845; GFX9-GISEL-NEXT: s_or_b32 s6, s2, s6846; GFX9-GISEL-NEXT: s_min_i32 s7, s7, 13847; GFX9-GISEL-NEXT: s_bitset1_b32 s2, 12848; GFX9-GISEL-NEXT: s_lshl_b32 s5, s5, 9849; GFX9-GISEL-NEXT: s_lshr_b32 s8, s2, s7850; GFX9-GISEL-NEXT: s_or_b32 s5, s5, 0x7c00851; GFX9-GISEL-NEXT: s_lshl_b32 s7, s8, s7852; GFX9-GISEL-NEXT: s_cmp_lg_u32 s7, s2853; GFX9-GISEL-NEXT: s_cselect_b32 s2, 1, 0854; GFX9-GISEL-NEXT: s_or_b32 s2, s8, s2855; GFX9-GISEL-NEXT: s_cmp_lt_i32 s4, 1856; GFX9-GISEL-NEXT: s_cselect_b32 s2, s2, s6857; GFX9-GISEL-NEXT: s_and_b32 s6, s2, 7858; GFX9-GISEL-NEXT: s_lshr_b32 s2, s2, 2859; GFX9-GISEL-NEXT: s_cmp_eq_u32 s6, 3860; GFX9-GISEL-NEXT: s_cselect_b32 s7, 1, 0861; GFX9-GISEL-NEXT: s_cmp_gt_i32 s6, 5862; GFX9-GISEL-NEXT: s_cselect_b32 s6, 1, 0863; GFX9-GISEL-NEXT: s_or_b32 s6, s7, s6864; GFX9-GISEL-NEXT: s_add_i32 s2, s2, s6865; GFX9-GISEL-NEXT: s_cmp_gt_i32 s4, 30866; GFX9-GISEL-NEXT: s_cselect_b32 s2, 0x7c00, s2867; GFX9-GISEL-NEXT: s_cmpk_eq_i32 s4, 0x40f868; GFX9-GISEL-NEXT: s_cselect_b32 s2, s5, s2869; GFX9-GISEL-NEXT: s_lshr_b32 s3, s3, 16870; GFX9-GISEL-NEXT: s_and_b32 s3, s3, 0x8000871; GFX9-GISEL-NEXT: s_or_b32 s2, s3, s2872; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s2873; GFX9-GISEL-NEXT: s_mov_b32 s2, -1874; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf000875; GFX9-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 0876; GFX9-GISEL-NEXT: s_endpgm877;878; GFX950-SDAG-LABEL: fptrunc_f64_to_f16:879; GFX950-SDAG: ; %bb.0: ; %entry880; GFX950-SDAG-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24881; GFX950-SDAG-NEXT: s_mov_b32 s3, 0xf000882; GFX950-SDAG-NEXT: s_mov_b32 s2, -1883; GFX950-SDAG-NEXT: s_mov_b32 s6, s2884; GFX950-SDAG-NEXT: s_mov_b32 s7, s3885; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)886; GFX950-SDAG-NEXT: s_mov_b32 s4, s10887; GFX950-SDAG-NEXT: s_mov_b32 s5, s11888; GFX950-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[4:7], 0889; GFX950-SDAG-NEXT: s_mov_b32 s0, s8890; GFX950-SDAG-NEXT: s_mov_b32 s1, s9891; GFX950-SDAG-NEXT: s_movk_i32 s4, 0x7e00892; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)893; GFX950-SDAG-NEXT: v_readfirstlane_b32 s5, v1894; GFX950-SDAG-NEXT: s_and_b32 s6, s5, 0x1ff895; GFX950-SDAG-NEXT: v_or_b32_e32 v0, s6, v0896; GFX950-SDAG-NEXT: s_lshr_b32 s7, s5, 8897; GFX950-SDAG-NEXT: s_bfe_u32 s8, s5, 0xb0014898; GFX950-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0899; GFX950-SDAG-NEXT: s_and_b32 s6, s7, 0xffe900; GFX950-SDAG-NEXT: s_sub_i32 s7, 0x3f1, s8901; GFX950-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc902; GFX950-SDAG-NEXT: v_med3_i32 v1, s7, 0, 13903; GFX950-SDAG-NEXT: v_readfirstlane_b32 s7, v0904; GFX950-SDAG-NEXT: s_or_b32 s6, s6, s7905; GFX950-SDAG-NEXT: v_readfirstlane_b32 s9, v1906; GFX950-SDAG-NEXT: s_or_b32 s7, s6, 0x1000907; GFX950-SDAG-NEXT: s_lshr_b32 s10, s7, s9908; GFX950-SDAG-NEXT: s_lshl_b32 s9, s10, s9909; GFX950-SDAG-NEXT: s_cmp_lg_u32 s9, s7910; GFX950-SDAG-NEXT: s_cselect_b32 s7, 1, 0911; GFX950-SDAG-NEXT: s_addk_i32 s8, 0xfc10912; GFX950-SDAG-NEXT: s_lshl_b32 s9, s8, 12913; GFX950-SDAG-NEXT: s_or_b32 s7, s10, s7914; GFX950-SDAG-NEXT: s_or_b32 s9, s6, s9915; GFX950-SDAG-NEXT: s_cmp_lt_i32 s8, 1916; GFX950-SDAG-NEXT: s_cselect_b32 s7, s7, s9917; GFX950-SDAG-NEXT: s_and_b32 s9, s7, 7918; GFX950-SDAG-NEXT: s_cmp_gt_i32 s9, 5919; GFX950-SDAG-NEXT: s_cselect_b32 s10, 1, 0920; GFX950-SDAG-NEXT: s_cmp_eq_u32 s9, 3921; GFX950-SDAG-NEXT: s_cselect_b32 s9, 1, 0922; GFX950-SDAG-NEXT: s_lshr_b32 s7, s7, 2923; GFX950-SDAG-NEXT: s_or_b32 s9, s9, s10924; GFX950-SDAG-NEXT: s_add_i32 s7, s7, s9925; GFX950-SDAG-NEXT: s_cmp_lt_i32 s8, 31926; GFX950-SDAG-NEXT: s_cselect_b32 s7, s7, 0x7c00927; GFX950-SDAG-NEXT: s_cmp_lg_u32 s6, 0928; GFX950-SDAG-NEXT: s_cselect_b32 s4, s4, 0x7c00929; GFX950-SDAG-NEXT: s_cmpk_eq_i32 s8, 0x40f930; GFX950-SDAG-NEXT: s_cselect_b32 s4, s4, s7931; GFX950-SDAG-NEXT: s_lshr_b32 s5, s5, 16932; GFX950-SDAG-NEXT: s_and_b32 s5, s5, 0x8000933; GFX950-SDAG-NEXT: s_or_b32 s4, s5, s4934; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s4935; GFX950-SDAG-NEXT: buffer_store_short v0, off, s[0:3], 0936; GFX950-SDAG-NEXT: s_endpgm937;938; GFX950-GISEL-LABEL: fptrunc_f64_to_f16:939; GFX950-GISEL: ; %bb.0: ; %entry940; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24941; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)942; GFX950-GISEL-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0943; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)944; GFX950-GISEL-NEXT: s_bfe_u32 s4, s3, 0xb0014945; GFX950-GISEL-NEXT: s_lshr_b32 s5, s3, 8946; GFX950-GISEL-NEXT: s_and_b32 s6, s3, 0x1ff947; GFX950-GISEL-NEXT: s_addk_i32 s4, 0xfc10948; GFX950-GISEL-NEXT: s_and_b32 s5, s5, 0xffe949; GFX950-GISEL-NEXT: s_or_b32 s2, s6, s2950; GFX950-GISEL-NEXT: s_cselect_b32 s2, 1, 0951; GFX950-GISEL-NEXT: s_or_b32 s2, s5, s2952; GFX950-GISEL-NEXT: s_cselect_b32 s5, 1, 0953; GFX950-GISEL-NEXT: s_sub_i32 s7, 1, s4954; GFX950-GISEL-NEXT: s_lshl_b32 s6, s4, 12955; GFX950-GISEL-NEXT: s_max_i32 s7, s7, 0956; GFX950-GISEL-NEXT: s_or_b32 s6, s2, s6957; GFX950-GISEL-NEXT: s_min_i32 s7, s7, 13958; GFX950-GISEL-NEXT: s_bitset1_b32 s2, 12959; GFX950-GISEL-NEXT: s_lshl_b32 s5, s5, 9960; GFX950-GISEL-NEXT: s_lshr_b32 s8, s2, s7961; GFX950-GISEL-NEXT: s_or_b32 s5, s5, 0x7c00962; GFX950-GISEL-NEXT: s_lshl_b32 s7, s8, s7963; GFX950-GISEL-NEXT: s_cmp_lg_u32 s7, s2964; GFX950-GISEL-NEXT: s_cselect_b32 s2, 1, 0965; GFX950-GISEL-NEXT: s_or_b32 s2, s8, s2966; GFX950-GISEL-NEXT: s_cmp_lt_i32 s4, 1967; GFX950-GISEL-NEXT: s_cselect_b32 s2, s2, s6968; GFX950-GISEL-NEXT: s_and_b32 s6, s2, 7969; GFX950-GISEL-NEXT: s_lshr_b32 s2, s2, 2970; GFX950-GISEL-NEXT: s_cmp_eq_u32 s6, 3971; GFX950-GISEL-NEXT: s_cselect_b32 s7, 1, 0972; GFX950-GISEL-NEXT: s_cmp_gt_i32 s6, 5973; GFX950-GISEL-NEXT: s_cselect_b32 s6, 1, 0974; GFX950-GISEL-NEXT: s_or_b32 s6, s7, s6975; GFX950-GISEL-NEXT: s_add_i32 s2, s2, s6976; GFX950-GISEL-NEXT: s_cmp_gt_i32 s4, 30977; GFX950-GISEL-NEXT: s_cselect_b32 s2, 0x7c00, s2978; GFX950-GISEL-NEXT: s_cmpk_eq_i32 s4, 0x40f979; GFX950-GISEL-NEXT: s_cselect_b32 s2, s5, s2980; GFX950-GISEL-NEXT: s_lshr_b32 s3, s3, 16981; GFX950-GISEL-NEXT: s_and_b32 s3, s3, 0x8000982; GFX950-GISEL-NEXT: s_or_b32 s2, s3, s2983; GFX950-GISEL-NEXT: v_mov_b32_e32 v0, s2984; GFX950-GISEL-NEXT: s_mov_b32 s2, -1985; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf000986; GFX950-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 0987; GFX950-GISEL-NEXT: s_endpgm988;989; GFX11-SDAG-TRUE16-LABEL: fptrunc_f64_to_f16:990; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry991; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24992; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -1993; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x31016000994; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s6995; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s7996; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)997; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s2998; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s3999; GFX11-SDAG-TRUE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], 01000; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)1001; GFX11-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s2, v11002; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s3, s2, 0x1ff1003; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s5, s2, 81004; GFX11-SDAG-TRUE16-NEXT: v_or_b32_e32 v0, s3, v01005; GFX11-SDAG-TRUE16-NEXT: s_bfe_u32 s3, s2, 0xb00141006; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s5, s5, 0xffe1007; GFX11-SDAG-TRUE16-NEXT: s_sub_i32 s4, 0x3f1, s31008; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)1009; GFX11-SDAG-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01010; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v1, s4, 0, 131011; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1012; GFX11-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s8, v11013; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1014; GFX11-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s4, v01015; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s4, s5, s41016; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s5, s4, 0x10001017; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1018; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s9, s5, s81019; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s8, s9, s81020; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)1021; GFX11-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s8, s51022; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s5, 1, 01023; GFX11-SDAG-TRUE16-NEXT: s_addk_i32 s3, 0xfc101024; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s5, s9, s51025; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s8, s3, 121026; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s8, s4, s81027; GFX11-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s3, 11028; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s5, s5, s81029; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1030; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s8, s5, 71031; GFX11-SDAG-TRUE16-NEXT: s_cmp_gt_i32 s8, 51032; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s9, 1, 01033; GFX11-SDAG-TRUE16-NEXT: s_cmp_eq_u32 s8, 31034; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s8, 1, 01035; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s5, s5, 21036; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s8, s8, s91037; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1038; GFX11-SDAG-TRUE16-NEXT: s_add_i32 s5, s5, s81039; GFX11-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s3, 311040; GFX11-SDAG-TRUE16-NEXT: s_movk_i32 s8, 0x7e001041; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s5, s5, 0x7c001042; GFX11-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s4, 01043; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s4, s8, 0x7c001044; GFX11-SDAG-TRUE16-NEXT: s_cmpk_eq_i32 s3, 0x40f1045; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s3, s4, s51046; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s2, s2, 161047; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s01048; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s2, s2, 0x80001049; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s11050; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s2, s2, s31051; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1052; GFX11-SDAG-TRUE16-NEXT: v_mov_b32_e32 v0, s21053; GFX11-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], 01054; GFX11-SDAG-TRUE16-NEXT: s_endpgm1055;1056; GFX11-SDAG-FAKE16-LABEL: fptrunc_f64_to_f16:1057; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry1058; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241059; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -11060; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160001061; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s61062; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s71063; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1064; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s21065; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s31066; GFX11-SDAG-FAKE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], 01067; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)1068; GFX11-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s2, v11069; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s3, s2, 0x1ff1070; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s5, s2, 81071; GFX11-SDAG-FAKE16-NEXT: v_or_b32_e32 v0, s3, v01072; GFX11-SDAG-FAKE16-NEXT: s_bfe_u32 s3, s2, 0xb00141073; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s5, s5, 0xffe1074; GFX11-SDAG-FAKE16-NEXT: s_sub_i32 s4, 0x3f1, s31075; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)1076; GFX11-SDAG-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01077; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v1, s4, 0, 131078; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1079; GFX11-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s8, v11080; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1081; GFX11-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s4, v01082; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s4, s5, s41083; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s5, s4, 0x10001084; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1085; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s9, s5, s81086; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s8, s9, s81087; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)1088; GFX11-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s8, s51089; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s5, 1, 01090; GFX11-SDAG-FAKE16-NEXT: s_addk_i32 s3, 0xfc101091; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s5, s9, s51092; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s8, s3, 121093; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s8, s4, s81094; GFX11-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s3, 11095; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s5, s5, s81096; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1097; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s8, s5, 71098; GFX11-SDAG-FAKE16-NEXT: s_cmp_gt_i32 s8, 51099; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s9, 1, 01100; GFX11-SDAG-FAKE16-NEXT: s_cmp_eq_u32 s8, 31101; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s8, 1, 01102; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s5, s5, 21103; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s8, s8, s91104; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1105; GFX11-SDAG-FAKE16-NEXT: s_add_i32 s5, s5, s81106; GFX11-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s3, 311107; GFX11-SDAG-FAKE16-NEXT: s_movk_i32 s8, 0x7e001108; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s5, s5, 0x7c001109; GFX11-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s4, 01110; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s4, s8, 0x7c001111; GFX11-SDAG-FAKE16-NEXT: s_cmpk_eq_i32 s3, 0x40f1112; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s3, s4, s51113; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s2, s2, 161114; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s01115; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s2, s2, 0x80001116; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s11117; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s2, s2, s31118; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1119; GFX11-SDAG-FAKE16-NEXT: v_mov_b32_e32 v0, s21120; GFX11-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], 01121; GFX11-SDAG-FAKE16-NEXT: s_endpgm1122;1123; GFX11-GISEL-TRUE16-LABEL: fptrunc_f64_to_f16:1124; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry1125; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241126; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1127; GFX11-GISEL-TRUE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x01128; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1129; GFX11-GISEL-TRUE16-NEXT: s_bfe_u32 s4, s3, 0xb00141130; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s5, s3, 81131; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s6, s3, 0x1ff1132; GFX11-GISEL-TRUE16-NEXT: s_addk_i32 s4, 0xfc101133; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s5, s5, 0xffe1134; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s2, s6, s21135; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s2, 1, 01136; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1137; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s2, s5, s21138; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s5, 1, 01139; GFX11-GISEL-TRUE16-NEXT: s_sub_i32 s6, 1, s41140; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s8, s2, 0x10001141; GFX11-GISEL-TRUE16-NEXT: s_max_i32 s6, s6, 01142; GFX11-GISEL-TRUE16-NEXT: s_lshl_b32 s7, s4, 121143; GFX11-GISEL-TRUE16-NEXT: s_min_i32 s6, s6, 131144; GFX11-GISEL-TRUE16-NEXT: s_lshl_b32 s5, s5, 91145; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s9, s8, s61146; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s2, s2, s71147; GFX11-GISEL-TRUE16-NEXT: s_lshl_b32 s6, s9, s61148; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s5, s5, 0x7c001149; GFX11-GISEL-TRUE16-NEXT: s_cmp_lg_u32 s6, s81150; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s6, 1, 01151; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)1152; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s6, s9, s61153; GFX11-GISEL-TRUE16-NEXT: s_cmp_lt_i32 s4, 11154; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s2, s6, s21155; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s6, s2, 71156; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s2, s2, 21157; GFX11-GISEL-TRUE16-NEXT: s_cmp_eq_u32 s6, 31158; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s7, 1, 01159; GFX11-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s6, 51160; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s6, 1, 01161; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1162; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s6, s7, s61163; GFX11-GISEL-TRUE16-NEXT: s_add_i32 s2, s2, s61164; GFX11-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s4, 301165; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s2, 0x7c00, s21166; GFX11-GISEL-TRUE16-NEXT: s_cmpk_eq_i32 s4, 0x40f1167; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s2, s5, s21168; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s3, s3, 161169; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1170; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s3, s3, 0x80001171; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s2, s3, s21172; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160001173; GFX11-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s21174; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -11175; GFX11-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], 01176; GFX11-GISEL-TRUE16-NEXT: s_endpgm1177;1178; GFX11-GISEL-FAKE16-LABEL: fptrunc_f64_to_f16:1179; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry1180; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241181; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1182; GFX11-GISEL-FAKE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x01183; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1184; GFX11-GISEL-FAKE16-NEXT: s_bfe_u32 s4, s3, 0xb00141185; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s5, s3, 81186; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s6, s3, 0x1ff1187; GFX11-GISEL-FAKE16-NEXT: s_addk_i32 s4, 0xfc101188; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s5, s5, 0xffe1189; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s2, s6, s21190; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s2, 1, 01191; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1192; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s2, s5, s21193; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s5, 1, 01194; GFX11-GISEL-FAKE16-NEXT: s_sub_i32 s6, 1, s41195; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s8, s2, 0x10001196; GFX11-GISEL-FAKE16-NEXT: s_max_i32 s6, s6, 01197; GFX11-GISEL-FAKE16-NEXT: s_lshl_b32 s7, s4, 121198; GFX11-GISEL-FAKE16-NEXT: s_min_i32 s6, s6, 131199; GFX11-GISEL-FAKE16-NEXT: s_lshl_b32 s5, s5, 91200; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s9, s8, s61201; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s2, s2, s71202; GFX11-GISEL-FAKE16-NEXT: s_lshl_b32 s6, s9, s61203; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s5, s5, 0x7c001204; GFX11-GISEL-FAKE16-NEXT: s_cmp_lg_u32 s6, s81205; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s6, 1, 01206; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)1207; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s6, s9, s61208; GFX11-GISEL-FAKE16-NEXT: s_cmp_lt_i32 s4, 11209; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s2, s6, s21210; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s6, s2, 71211; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s2, s2, 21212; GFX11-GISEL-FAKE16-NEXT: s_cmp_eq_u32 s6, 31213; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s7, 1, 01214; GFX11-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s6, 51215; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s6, 1, 01216; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1217; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s6, s7, s61218; GFX11-GISEL-FAKE16-NEXT: s_add_i32 s2, s2, s61219; GFX11-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s4, 301220; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s2, 0x7c00, s21221; GFX11-GISEL-FAKE16-NEXT: s_cmpk_eq_i32 s4, 0x40f1222; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s2, s5, s21223; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s3, s3, 161224; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1225; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s3, s3, 0x80001226; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s2, s3, s21227; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160001228; GFX11-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s21229; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -11230; GFX11-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], 01231; GFX11-GISEL-FAKE16-NEXT: s_endpgm1232;1233; GFX1250-SDAG-TRUE16-LABEL: fptrunc_f64_to_f16:1234; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry1235; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11236; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241237; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -11238; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160001239; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s61240; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s71241; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x01242; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s21243; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s31244; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], null1245; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x01246; GFX1250-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s2, v11247; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s3, s2, 0x1ff1248; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s5, s2, 81249; GFX1250-SDAG-TRUE16-NEXT: v_or_b32_e32 v0, s3, v01250; GFX1250-SDAG-TRUE16-NEXT: s_bfe_u32 s3, s2, 0xb00141251; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s5, s5, 0xffe1252; GFX1250-SDAG-TRUE16-NEXT: s_sub_co_i32 s4, 0x3f1, s31253; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)1254; GFX1250-SDAG-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01255; GFX1250-SDAG-TRUE16-NEXT: v_med3_i32 v1, s4, 0, 131256; GFX1250-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1257; GFX1250-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s8, v11258; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1259; GFX1250-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s4, v01260; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s4, s5, s41261; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s5, s4, 0x10001262; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1263; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s9, s5, s81264; GFX1250-SDAG-TRUE16-NEXT: s_lshl_b32 s8, s9, s81265; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)1266; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s8, s51267; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s5, 1, 01268; GFX1250-SDAG-TRUE16-NEXT: s_addk_co_i32 s3, 0xfc101269; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s5, s9, s51270; GFX1250-SDAG-TRUE16-NEXT: s_lshl_b32 s8, s3, 121271; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s8, s4, s81272; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s3, 11273; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s5, s5, s81274; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1275; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s8, s5, 71276; GFX1250-SDAG-TRUE16-NEXT: s_cmp_gt_i32 s8, 51277; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s9, 1, 01278; GFX1250-SDAG-TRUE16-NEXT: s_cmp_eq_u32 s8, 31279; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s8, 1, 01280; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s5, s5, 21281; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s8, s8, s91282; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1283; GFX1250-SDAG-TRUE16-NEXT: s_add_co_i32 s5, s5, s81284; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s3, 311285; GFX1250-SDAG-TRUE16-NEXT: s_movk_i32 s8, 0x7e001286; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s5, s5, 0x7c001287; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s4, 01288; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s4, s8, 0x7c001289; GFX1250-SDAG-TRUE16-NEXT: s_cmp_eq_u32 s3, 0x40f1290; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s3, s4, s51291; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s2, s2, 161292; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s01293; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s2, s2, 0x80001294; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s11295; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s2, s2, s31296; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1297; GFX1250-SDAG-TRUE16-NEXT: v_mov_b32_e32 v0, s21298; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], null1299; GFX1250-SDAG-TRUE16-NEXT: s_endpgm1300;1301; GFX1250-SDAG-FAKE16-LABEL: fptrunc_f64_to_f16:1302; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry1303; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11304; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241305; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -11306; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160001307; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s61308; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s71309; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x01310; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s21311; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s31312; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], null1313; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x01314; GFX1250-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s2, v11315; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s3, s2, 0x1ff1316; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s5, s2, 81317; GFX1250-SDAG-FAKE16-NEXT: v_or_b32_e32 v0, s3, v01318; GFX1250-SDAG-FAKE16-NEXT: s_bfe_u32 s3, s2, 0xb00141319; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s5, s5, 0xffe1320; GFX1250-SDAG-FAKE16-NEXT: s_sub_co_i32 s4, 0x3f1, s31321; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)1322; GFX1250-SDAG-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01323; GFX1250-SDAG-FAKE16-NEXT: v_med3_i32 v1, s4, 0, 131324; GFX1250-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1325; GFX1250-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s8, v11326; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1327; GFX1250-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s4, v01328; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s4, s5, s41329; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s5, s4, 0x10001330; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1331; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s9, s5, s81332; GFX1250-SDAG-FAKE16-NEXT: s_lshl_b32 s8, s9, s81333; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)1334; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s8, s51335; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s5, 1, 01336; GFX1250-SDAG-FAKE16-NEXT: s_addk_co_i32 s3, 0xfc101337; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s5, s9, s51338; GFX1250-SDAG-FAKE16-NEXT: s_lshl_b32 s8, s3, 121339; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s8, s4, s81340; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s3, 11341; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s5, s5, s81342; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1343; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s8, s5, 71344; GFX1250-SDAG-FAKE16-NEXT: s_cmp_gt_i32 s8, 51345; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s9, 1, 01346; GFX1250-SDAG-FAKE16-NEXT: s_cmp_eq_u32 s8, 31347; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s8, 1, 01348; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s5, s5, 21349; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s8, s8, s91350; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1351; GFX1250-SDAG-FAKE16-NEXT: s_add_co_i32 s5, s5, s81352; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s3, 311353; GFX1250-SDAG-FAKE16-NEXT: s_movk_i32 s8, 0x7e001354; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s5, s5, 0x7c001355; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s4, 01356; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s4, s8, 0x7c001357; GFX1250-SDAG-FAKE16-NEXT: s_cmp_eq_u32 s3, 0x40f1358; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s3, s4, s51359; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s2, s2, 161360; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s01361; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s2, s2, 0x80001362; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s11363; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s2, s2, s31364; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1365; GFX1250-SDAG-FAKE16-NEXT: v_mov_b32_e32 v0, s21366; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], null1367; GFX1250-SDAG-FAKE16-NEXT: s_endpgm1368;1369; GFX1250-GISEL-TRUE16-LABEL: fptrunc_f64_to_f16:1370; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry1371; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11372; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241373; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x01374; GFX1250-GISEL-TRUE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x01375; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x01376; GFX1250-GISEL-TRUE16-NEXT: s_bfe_u32 s4, s3, 0xb00141377; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s5, s3, 81378; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s6, s3, 0x1ff1379; GFX1250-GISEL-TRUE16-NEXT: s_addk_co_i32 s4, 0xfc101380; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s5, s5, 0xffe1381; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s2, s6, s21382; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s2, 1, 01383; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1384; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s2, s5, s21385; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s5, 1, 01386; GFX1250-GISEL-TRUE16-NEXT: s_sub_co_i32 s6, 1, s41387; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s8, s2, 0x10001388; GFX1250-GISEL-TRUE16-NEXT: s_max_i32 s6, s6, 01389; GFX1250-GISEL-TRUE16-NEXT: s_lshl_b32 s7, s4, 121390; GFX1250-GISEL-TRUE16-NEXT: s_min_i32 s6, s6, 131391; GFX1250-GISEL-TRUE16-NEXT: s_lshl_b32 s5, s5, 91392; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s9, s8, s61393; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s2, s2, s71394; GFX1250-GISEL-TRUE16-NEXT: s_lshl_b32 s6, s9, s61395; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s5, s5, 0x7c001396; GFX1250-GISEL-TRUE16-NEXT: s_cmp_lg_u32 s6, s81397; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s6, 1, 01398; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)1399; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s6, s9, s61400; GFX1250-GISEL-TRUE16-NEXT: s_cmp_lt_i32 s4, 11401; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s2, s6, s21402; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s6, s2, 71403; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s2, s2, 21404; GFX1250-GISEL-TRUE16-NEXT: s_cmp_eq_u32 s6, 31405; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s7, 1, 01406; GFX1250-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s6, 51407; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s6, 1, 01408; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1409; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s6, s7, s61410; GFX1250-GISEL-TRUE16-NEXT: s_add_co_i32 s2, s2, s61411; GFX1250-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s4, 301412; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s2, 0x7c00, s21413; GFX1250-GISEL-TRUE16-NEXT: s_cmp_eq_u32 s4, 0x40f1414; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s2, s5, s21415; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s3, s3, 161416; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1417; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s3, s3, 0x80001418; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s2, s3, s21419; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160001420; GFX1250-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s21421; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -11422; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], null1423; GFX1250-GISEL-TRUE16-NEXT: s_endpgm1424;1425; GFX1250-GISEL-FAKE16-LABEL: fptrunc_f64_to_f16:1426; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry1427; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11428; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241429; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x01430; GFX1250-GISEL-FAKE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x01431; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x01432; GFX1250-GISEL-FAKE16-NEXT: s_bfe_u32 s4, s3, 0xb00141433; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s5, s3, 81434; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s6, s3, 0x1ff1435; GFX1250-GISEL-FAKE16-NEXT: s_addk_co_i32 s4, 0xfc101436; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s5, s5, 0xffe1437; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s2, s6, s21438; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s2, 1, 01439; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1440; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s2, s5, s21441; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s5, 1, 01442; GFX1250-GISEL-FAKE16-NEXT: s_sub_co_i32 s6, 1, s41443; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s8, s2, 0x10001444; GFX1250-GISEL-FAKE16-NEXT: s_max_i32 s6, s6, 01445; GFX1250-GISEL-FAKE16-NEXT: s_lshl_b32 s7, s4, 121446; GFX1250-GISEL-FAKE16-NEXT: s_min_i32 s6, s6, 131447; GFX1250-GISEL-FAKE16-NEXT: s_lshl_b32 s5, s5, 91448; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s9, s8, s61449; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s2, s2, s71450; GFX1250-GISEL-FAKE16-NEXT: s_lshl_b32 s6, s9, s61451; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s5, s5, 0x7c001452; GFX1250-GISEL-FAKE16-NEXT: s_cmp_lg_u32 s6, s81453; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s6, 1, 01454; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)1455; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s6, s9, s61456; GFX1250-GISEL-FAKE16-NEXT: s_cmp_lt_i32 s4, 11457; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s2, s6, s21458; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s6, s2, 71459; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s2, s2, 21460; GFX1250-GISEL-FAKE16-NEXT: s_cmp_eq_u32 s6, 31461; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s7, 1, 01462; GFX1250-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s6, 51463; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s6, 1, 01464; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1465; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s6, s7, s61466; GFX1250-GISEL-FAKE16-NEXT: s_add_co_i32 s2, s2, s61467; GFX1250-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s4, 301468; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s2, 0x7c00, s21469; GFX1250-GISEL-FAKE16-NEXT: s_cmp_eq_u32 s4, 0x40f1470; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s2, s5, s21471; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s3, s3, 161472; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1473; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s3, s3, 0x80001474; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s2, s3, s21475; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160001476; GFX1250-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s21477; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -11478; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], null1479; GFX1250-GISEL-FAKE16-NEXT: s_endpgm1480 ptr addrspace(1) %r,1481 ptr addrspace(1) %a) {1482entry:1483 %a.val = load double, ptr addrspace(1) %a1484 %r.val = fptrunc double %a.val to half1485 store half %r.val, ptr addrspace(1) %r1486 ret void1487}1488 1489define amdgpu_kernel void @fptrunc_f64_to_f16_afn(1490; SI-SDAG-LABEL: fptrunc_f64_to_f16_afn:1491; SI-SDAG: ; %bb.0: ; %entry1492; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91493; SI-SDAG-NEXT: s_mov_b32 s7, 0xf0001494; SI-SDAG-NEXT: s_mov_b32 s6, -11495; SI-SDAG-NEXT: s_mov_b32 s10, s61496; SI-SDAG-NEXT: s_mov_b32 s11, s71497; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)1498; SI-SDAG-NEXT: s_mov_b32 s8, s21499; SI-SDAG-NEXT: s_mov_b32 s9, s31500; SI-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 01501; SI-SDAG-NEXT: s_mov_b32 s4, s01502; SI-SDAG-NEXT: s_mov_b32 s5, s11503; SI-SDAG-NEXT: s_waitcnt vmcnt(0)1504; SI-SDAG-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]1505; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v01506; SI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 01507; SI-SDAG-NEXT: s_endpgm1508;1509; SI-GISEL-LABEL: fptrunc_f64_to_f16_afn:1510; SI-GISEL: ; %bb.0: ; %entry1511; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91512; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)1513; SI-GISEL-NEXT: s_load_dwordx2 s[4:5], s[2:3], 0x01514; SI-GISEL-NEXT: s_mov_b32 s2, -11515; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)1516; SI-GISEL-NEXT: v_cvt_f32_f64_e32 v0, s[4:5]1517; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v01518; SI-GISEL-NEXT: s_mov_b32 s3, 0xf0001519; SI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 01520; SI-GISEL-NEXT: s_endpgm1521;1522; VI-SDAG-LABEL: fptrunc_f64_to_f16_afn:1523; VI-SDAG: ; %bb.0: ; %entry1524; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241525; VI-SDAG-NEXT: s_mov_b32 s7, 0xf0001526; VI-SDAG-NEXT: s_mov_b32 s6, -11527; VI-SDAG-NEXT: s_mov_b32 s10, s61528; VI-SDAG-NEXT: s_mov_b32 s11, s71529; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)1530; VI-SDAG-NEXT: s_mov_b32 s8, s21531; VI-SDAG-NEXT: s_mov_b32 s9, s31532; VI-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 01533; VI-SDAG-NEXT: s_mov_b32 s4, s01534; VI-SDAG-NEXT: s_mov_b32 s5, s11535; VI-SDAG-NEXT: s_waitcnt vmcnt(0)1536; VI-SDAG-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]1537; VI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v01538; VI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 01539; VI-SDAG-NEXT: s_endpgm1540;1541; VI-GISEL-LABEL: fptrunc_f64_to_f16_afn:1542; VI-GISEL: ; %bb.0: ; %entry1543; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241544; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)1545; VI-GISEL-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x01546; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)1547; VI-GISEL-NEXT: v_cvt_f32_f64_e32 v0, s[2:3]1548; VI-GISEL-NEXT: s_mov_b32 s2, -11549; VI-GISEL-NEXT: s_mov_b32 s3, 0xf0001550; VI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v01551; VI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 01552; VI-GISEL-NEXT: s_endpgm1553;1554; GFX9-SDAG-LABEL: fptrunc_f64_to_f16_afn:1555; GFX9-SDAG: ; %bb.0: ; %entry1556; GFX9-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241557; GFX9-SDAG-NEXT: s_mov_b32 s7, 0xf0001558; GFX9-SDAG-NEXT: s_mov_b32 s6, -11559; GFX9-SDAG-NEXT: s_mov_b32 s10, s61560; GFX9-SDAG-NEXT: s_mov_b32 s11, s71561; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)1562; GFX9-SDAG-NEXT: s_mov_b32 s8, s21563; GFX9-SDAG-NEXT: s_mov_b32 s9, s31564; GFX9-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 01565; GFX9-SDAG-NEXT: s_mov_b32 s4, s01566; GFX9-SDAG-NEXT: s_mov_b32 s5, s11567; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1568; GFX9-SDAG-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]1569; GFX9-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v01570; GFX9-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 01571; GFX9-SDAG-NEXT: s_endpgm1572;1573; GFX9-GISEL-LABEL: fptrunc_f64_to_f16_afn:1574; GFX9-GISEL: ; %bb.0: ; %entry1575; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241576; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)1577; GFX9-GISEL-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x01578; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)1579; GFX9-GISEL-NEXT: v_cvt_f32_f64_e32 v0, s[2:3]1580; GFX9-GISEL-NEXT: s_mov_b32 s2, -11581; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf0001582; GFX9-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v01583; GFX9-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 01584; GFX9-GISEL-NEXT: s_endpgm1585;1586; GFX950-SDAG-LABEL: fptrunc_f64_to_f16_afn:1587; GFX950-SDAG: ; %bb.0: ; %entry1588; GFX950-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241589; GFX950-SDAG-NEXT: s_mov_b32 s7, 0xf0001590; GFX950-SDAG-NEXT: s_mov_b32 s6, -11591; GFX950-SDAG-NEXT: s_mov_b32 s10, s61592; GFX950-SDAG-NEXT: s_mov_b32 s11, s71593; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)1594; GFX950-SDAG-NEXT: s_mov_b32 s8, s21595; GFX950-SDAG-NEXT: s_mov_b32 s9, s31596; GFX950-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 01597; GFX950-SDAG-NEXT: s_mov_b32 s4, s01598; GFX950-SDAG-NEXT: s_mov_b32 s5, s11599; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)1600; GFX950-SDAG-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]1601; GFX950-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v01602; GFX950-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 01603; GFX950-SDAG-NEXT: s_endpgm1604;1605; GFX950-GISEL-LABEL: fptrunc_f64_to_f16_afn:1606; GFX950-GISEL: ; %bb.0: ; %entry1607; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241608; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)1609; GFX950-GISEL-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x01610; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)1611; GFX950-GISEL-NEXT: v_cvt_f32_f64_e32 v0, s[2:3]1612; GFX950-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v01613; GFX950-GISEL-NEXT: s_mov_b32 s2, -11614; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf0001615; GFX950-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 01616; GFX950-GISEL-NEXT: s_endpgm1617;1618; GFX11-SDAG-TRUE16-LABEL: fptrunc_f64_to_f16_afn:1619; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry1620; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241621; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -11622; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160001623; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s61624; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s71625; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1626; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s21627; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s31628; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s01629; GFX11-SDAG-TRUE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], 01630; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s11631; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)1632; GFX11-SDAG-TRUE16-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]1633; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1634; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v01635; GFX11-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], 01636; GFX11-SDAG-TRUE16-NEXT: s_endpgm1637;1638; GFX11-SDAG-FAKE16-LABEL: fptrunc_f64_to_f16_afn:1639; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry1640; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241641; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -11642; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160001643; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s61644; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s71645; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1646; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s21647; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s31648; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s01649; GFX11-SDAG-FAKE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], 01650; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s11651; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)1652; GFX11-SDAG-FAKE16-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]1653; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1654; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v01655; GFX11-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], 01656; GFX11-SDAG-FAKE16-NEXT: s_endpgm1657;1658; GFX11-GISEL-TRUE16-LABEL: fptrunc_f64_to_f16_afn:1659; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry1660; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241661; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1662; GFX11-GISEL-TRUE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x01663; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1664; GFX11-GISEL-TRUE16-NEXT: v_cvt_f32_f64_e32 v0, s[2:3]1665; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -11666; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160001667; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1668; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v01669; GFX11-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], 01670; GFX11-GISEL-TRUE16-NEXT: s_endpgm1671;1672; GFX11-GISEL-FAKE16-LABEL: fptrunc_f64_to_f16_afn:1673; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry1674; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241675; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1676; GFX11-GISEL-FAKE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x01677; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1678; GFX11-GISEL-FAKE16-NEXT: v_cvt_f32_f64_e32 v0, s[2:3]1679; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -11680; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160001681; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1682; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v01683; GFX11-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], 01684; GFX11-GISEL-FAKE16-NEXT: s_endpgm1685;1686; GFX1250-SDAG-TRUE16-LABEL: fptrunc_f64_to_f16_afn:1687; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry1688; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11689; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241690; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -11691; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160001692; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s61693; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s71694; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x01695; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s21696; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s31697; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s01698; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], null1699; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s11700; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x01701; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]1702; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 01703; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1704; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v01705; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], null1706; GFX1250-SDAG-TRUE16-NEXT: s_endpgm1707;1708; GFX1250-SDAG-FAKE16-LABEL: fptrunc_f64_to_f16_afn:1709; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry1710; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11711; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241712; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -11713; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160001714; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s61715; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s71716; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x01717; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s21718; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s31719; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s01720; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], null1721; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s11722; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x01723; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]1724; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 01725; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1726; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v01727; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], null1728; GFX1250-SDAG-FAKE16-NEXT: s_endpgm1729;1730; GFX1250-GISEL-TRUE16-LABEL: fptrunc_f64_to_f16_afn:1731; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry1732; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11733; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241734; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x01735; GFX1250-GISEL-TRUE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x01736; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x01737; GFX1250-GISEL-TRUE16-NEXT: v_cvt_f32_f64_e32 v0, s[2:3]1738; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -11739; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160001740; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 01741; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1742; GFX1250-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v01743; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], null1744; GFX1250-GISEL-TRUE16-NEXT: s_endpgm1745;1746; GFX1250-GISEL-FAKE16-LABEL: fptrunc_f64_to_f16_afn:1747; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry1748; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11749; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241750; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x01751; GFX1250-GISEL-FAKE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x01752; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x01753; GFX1250-GISEL-FAKE16-NEXT: v_cvt_f32_f64_e32 v0, s[2:3]1754; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -11755; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160001756; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 01757; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1758; GFX1250-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v01759; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], null1760; GFX1250-GISEL-FAKE16-NEXT: s_endpgm1761 ptr addrspace(1) %r,1762 ptr addrspace(1) %a) {1763entry:1764 %a.val = load double, ptr addrspace(1) %a1765 %r.val = fptrunc afn double %a.val to half1766 store half %r.val, ptr addrspace(1) %r1767 ret void1768}1769 1770define amdgpu_kernel void @fptrunc_v2f32_to_v2f16(1771; SI-SDAG-LABEL: fptrunc_v2f32_to_v2f16:1772; SI-SDAG: ; %bb.0: ; %entry1773; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91774; SI-SDAG-NEXT: s_mov_b32 s7, 0xf0001775; SI-SDAG-NEXT: s_mov_b32 s6, -11776; SI-SDAG-NEXT: s_mov_b32 s10, s61777; SI-SDAG-NEXT: s_mov_b32 s11, s71778; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)1779; SI-SDAG-NEXT: s_mov_b32 s8, s21780; SI-SDAG-NEXT: s_mov_b32 s9, s31781; SI-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 01782; SI-SDAG-NEXT: s_mov_b32 s4, s01783; SI-SDAG-NEXT: s_mov_b32 s5, s11784; SI-SDAG-NEXT: s_waitcnt vmcnt(0)1785; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v11786; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 16, v11787; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v01788; SI-SDAG-NEXT: v_or_b32_e32 v0, v0, v11789; SI-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 01790; SI-SDAG-NEXT: s_endpgm1791;1792; SI-GISEL-LABEL: fptrunc_v2f32_to_v2f16:1793; SI-GISEL: ; %bb.0: ; %entry1794; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91795; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)1796; SI-GISEL-NEXT: s_load_dwordx2 s[4:5], s[2:3], 0x01797; SI-GISEL-NEXT: s_mov_b32 s2, -11798; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)1799; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s41800; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, s51801; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v11802; SI-GISEL-NEXT: v_or_b32_e32 v0, v0, v11803; SI-GISEL-NEXT: s_mov_b32 s3, 0xf0001804; SI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 01805; SI-GISEL-NEXT: s_endpgm1806;1807; VI-SDAG-LABEL: fptrunc_v2f32_to_v2f16:1808; VI-SDAG: ; %bb.0: ; %entry1809; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241810; VI-SDAG-NEXT: s_mov_b32 s7, 0xf0001811; VI-SDAG-NEXT: s_mov_b32 s6, -11812; VI-SDAG-NEXT: s_mov_b32 s10, s61813; VI-SDAG-NEXT: s_mov_b32 s11, s71814; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)1815; VI-SDAG-NEXT: s_mov_b32 s8, s21816; VI-SDAG-NEXT: s_mov_b32 s9, s31817; VI-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 01818; VI-SDAG-NEXT: s_mov_b32 s4, s01819; VI-SDAG-NEXT: s_mov_b32 s5, s11820; VI-SDAG-NEXT: s_waitcnt vmcnt(0)1821; VI-SDAG-NEXT: v_cvt_f16_f32_sdwa v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD1822; VI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v01823; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v11824; VI-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 01825; VI-SDAG-NEXT: s_endpgm1826;1827; VI-GISEL-LABEL: fptrunc_v2f32_to_v2f16:1828; VI-GISEL: ; %bb.0: ; %entry1829; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241830; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)1831; VI-GISEL-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x01832; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)1833; VI-GISEL-NEXT: v_mov_b32_e32 v1, s31834; VI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s21835; VI-GISEL-NEXT: v_cvt_f16_f32_sdwa v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD1836; VI-GISEL-NEXT: s_mov_b32 s2, -11837; VI-GISEL-NEXT: s_mov_b32 s3, 0xf0001838; VI-GISEL-NEXT: v_or_b32_e32 v0, v0, v11839; VI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 01840; VI-GISEL-NEXT: s_endpgm1841;1842; GFX9-SDAG-LABEL: fptrunc_v2f32_to_v2f16:1843; GFX9-SDAG: ; %bb.0: ; %entry1844; GFX9-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241845; GFX9-SDAG-NEXT: s_mov_b32 s7, 0xf0001846; GFX9-SDAG-NEXT: s_mov_b32 s6, -11847; GFX9-SDAG-NEXT: s_mov_b32 s10, s61848; GFX9-SDAG-NEXT: s_mov_b32 s11, s71849; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)1850; GFX9-SDAG-NEXT: s_mov_b32 s8, s21851; GFX9-SDAG-NEXT: s_mov_b32 s9, s31852; GFX9-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 01853; GFX9-SDAG-NEXT: s_mov_b32 s4, s01854; GFX9-SDAG-NEXT: s_mov_b32 s5, s11855; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1856; GFX9-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v11857; GFX9-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v01858; GFX9-SDAG-NEXT: v_pack_b32_f16 v0, v0, v11859; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 01860; GFX9-SDAG-NEXT: s_endpgm1861;1862; GFX9-GISEL-LABEL: fptrunc_v2f32_to_v2f16:1863; GFX9-GISEL: ; %bb.0: ; %entry1864; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241865; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)1866; GFX9-GISEL-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x01867; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)1868; GFX9-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s21869; GFX9-GISEL-NEXT: v_cvt_f16_f32_e32 v1, s31870; GFX9-GISEL-NEXT: s_mov_b32 s2, -11871; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf0001872; GFX9-GISEL-NEXT: v_pack_b32_f16 v0, v0, v11873; GFX9-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 01874; GFX9-GISEL-NEXT: s_endpgm1875;1876; GFX950-SDAG-LABEL: fptrunc_v2f32_to_v2f16:1877; GFX950-SDAG: ; %bb.0: ; %entry1878; GFX950-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241879; GFX950-SDAG-NEXT: s_mov_b32 s7, 0xf0001880; GFX950-SDAG-NEXT: s_mov_b32 s6, -11881; GFX950-SDAG-NEXT: s_mov_b32 s10, s61882; GFX950-SDAG-NEXT: s_mov_b32 s11, s71883; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)1884; GFX950-SDAG-NEXT: s_mov_b32 s8, s21885; GFX950-SDAG-NEXT: s_mov_b32 s9, s31886; GFX950-SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 01887; GFX950-SDAG-NEXT: s_mov_b32 s4, s01888; GFX950-SDAG-NEXT: s_mov_b32 s5, s11889; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)1890; GFX950-SDAG-NEXT: v_cvt_pk_f16_f32 v0, v0, v11891; GFX950-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 01892; GFX950-SDAG-NEXT: s_endpgm1893;1894; GFX950-GISEL-LABEL: fptrunc_v2f32_to_v2f16:1895; GFX950-GISEL: ; %bb.0: ; %entry1896; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241897; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)1898; GFX950-GISEL-NEXT: s_load_dwordx2 s[4:5], s[2:3], 0x01899; GFX950-GISEL-NEXT: s_mov_b32 s2, -11900; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf0001901; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)1902; GFX950-GISEL-NEXT: v_mov_b64_e32 v[0:1], s[4:5]1903; GFX950-GISEL-NEXT: v_cvt_pk_f16_f32 v0, v0, v11904; GFX950-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 01905; GFX950-GISEL-NEXT: s_endpgm1906;1907; GFX11-SDAG-TRUE16-LABEL: fptrunc_v2f32_to_v2f16:1908; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry1909; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241910; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -11911; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160001912; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s61913; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s71914; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1915; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s21916; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s31917; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s01918; GFX11-SDAG-TRUE16-NEXT: buffer_load_b64 v[1:2], off, s[8:11], 01919; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s11920; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)1921; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v21922; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.h, v11923; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1924; GFX11-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.h, v0.l1925; GFX11-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], 01926; GFX11-SDAG-TRUE16-NEXT: s_endpgm1927;1928; GFX11-SDAG-FAKE16-LABEL: fptrunc_v2f32_to_v2f16:1929; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry1930; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241931; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -11932; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160001933; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s61934; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s71935; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1936; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s21937; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s31938; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s01939; GFX11-SDAG-FAKE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], 01940; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s11941; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)1942; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v1, v11943; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v01944; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1945; GFX11-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v11946; GFX11-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], 01947; GFX11-SDAG-FAKE16-NEXT: s_endpgm1948;1949; GFX11-GISEL-TRUE16-LABEL: fptrunc_v2f32_to_v2f16:1950; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry1951; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241952; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1953; GFX11-GISEL-TRUE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x01954; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1955; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, s21956; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.h, s31957; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -11958; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160001959; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1960; GFX11-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h1961; GFX11-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], 01962; GFX11-GISEL-TRUE16-NEXT: s_endpgm1963;1964; GFX11-GISEL-FAKE16-LABEL: fptrunc_v2f32_to_v2f16:1965; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry1966; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241967; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1968; GFX11-GISEL-FAKE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x01969; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1970; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, s21971; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v1, s31972; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -11973; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160001974; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1975; GFX11-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v11976; GFX11-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], 01977; GFX11-GISEL-FAKE16-NEXT: s_endpgm1978;1979; GFX1250-SDAG-TRUE16-LABEL: fptrunc_v2f32_to_v2f16:1980; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry1981; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11982; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x241983; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -11984; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160001985; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s61986; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s71987; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x01988; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s21989; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s31990; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s01991; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], null1992; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s11993; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x01994; GFX1250-SDAG-TRUE16-NEXT: v_cvt_pk_f16_f32 v0, v0, v11995; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], null1996; GFX1250-SDAG-TRUE16-NEXT: s_endpgm1997;1998; GFX1250-SDAG-FAKE16-LABEL: fptrunc_v2f32_to_v2f16:1999; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry2000; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12001; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x242002; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -12003; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160002004; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s62005; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s72006; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x02007; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s22008; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s32009; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s02010; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], null2011; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s12012; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x02013; GFX1250-SDAG-FAKE16-NEXT: v_cvt_pk_f16_f32 v0, v0, v12014; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], null2015; GFX1250-SDAG-FAKE16-NEXT: s_endpgm2016;2017; GFX1250-GISEL-TRUE16-LABEL: fptrunc_v2f32_to_v2f16:2018; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry2019; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12020; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x242021; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x02022; GFX1250-GISEL-TRUE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x02023; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x02024; GFX1250-GISEL-TRUE16-NEXT: v_mov_b64_e32 v[0:1], s[2:3]2025; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -12026; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160002027; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2028; GFX1250-GISEL-TRUE16-NEXT: v_cvt_pk_f16_f32 v0, v0, v12029; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], null2030; GFX1250-GISEL-TRUE16-NEXT: s_endpgm2031;2032; GFX1250-GISEL-FAKE16-LABEL: fptrunc_v2f32_to_v2f16:2033; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry2034; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12035; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x242036; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x02037; GFX1250-GISEL-FAKE16-NEXT: s_load_b64 s[2:3], s[2:3], 0x02038; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x02039; GFX1250-GISEL-FAKE16-NEXT: v_mov_b64_e32 v[0:1], s[2:3]2040; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -12041; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160002042; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2043; GFX1250-GISEL-FAKE16-NEXT: v_cvt_pk_f16_f32 v0, v0, v12044; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], null2045; GFX1250-GISEL-FAKE16-NEXT: s_endpgm2046 ptr addrspace(1) %r,2047 ptr addrspace(1) %a) {2048entry:2049 %a.val = load <2 x float>, ptr addrspace(1) %a2050 %r.val = fptrunc <2 x float> %a.val to <2 x half>2051 store <2 x half> %r.val, ptr addrspace(1) %r2052 ret void2053}2054 2055define amdgpu_kernel void @fptrunc_v2f64_to_v2f16(2056; SI-SDAG-LABEL: fptrunc_v2f64_to_v2f16:2057; SI-SDAG: ; %bb.0: ; %entry2058; SI-SDAG-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x92059; SI-SDAG-NEXT: s_mov_b32 s3, 0xf0002060; SI-SDAG-NEXT: s_mov_b32 s2, -12061; SI-SDAG-NEXT: s_mov_b32 s10, s22062; SI-SDAG-NEXT: s_mov_b32 s11, s32063; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)2064; SI-SDAG-NEXT: s_mov_b32 s8, s62065; SI-SDAG-NEXT: s_mov_b32 s9, s72066; SI-SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 02067; SI-SDAG-NEXT: s_movk_i32 s0, 0x7e002068; SI-SDAG-NEXT: s_waitcnt vmcnt(0)2069; SI-SDAG-NEXT: v_readfirstlane_b32 s1, v32070; SI-SDAG-NEXT: v_readfirstlane_b32 s6, v12071; SI-SDAG-NEXT: s_and_b32 s7, s1, 0x1ff2072; SI-SDAG-NEXT: s_lshr_b32 s8, s1, 82073; SI-SDAG-NEXT: s_bfe_u32 s9, s1, 0xb00142074; SI-SDAG-NEXT: v_or_b32_e32 v1, s7, v22075; SI-SDAG-NEXT: s_and_b32 s7, s8, 0xffe2076; SI-SDAG-NEXT: s_sub_i32 s8, 0x3f1, s92077; SI-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v12078; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2079; SI-SDAG-NEXT: v_med3_i32 v2, s8, 0, 132080; SI-SDAG-NEXT: v_readfirstlane_b32 s8, v12081; SI-SDAG-NEXT: v_readfirstlane_b32 s10, v22082; SI-SDAG-NEXT: s_or_b32 s7, s7, s82083; SI-SDAG-NEXT: s_or_b32 s8, s7, 0x10002084; SI-SDAG-NEXT: s_lshr_b32 s11, s8, s102085; SI-SDAG-NEXT: s_lshl_b32 s10, s11, s102086; SI-SDAG-NEXT: s_cmp_lg_u32 s10, s82087; SI-SDAG-NEXT: s_cselect_b32 s8, 1, 02088; SI-SDAG-NEXT: s_addk_i32 s9, 0xfc102089; SI-SDAG-NEXT: s_or_b32 s8, s11, s82090; SI-SDAG-NEXT: s_lshl_b32 s10, s9, 122091; SI-SDAG-NEXT: s_or_b32 s10, s7, s102092; SI-SDAG-NEXT: s_cmp_lt_i32 s9, 12093; SI-SDAG-NEXT: s_cselect_b32 s8, s8, s102094; SI-SDAG-NEXT: s_and_b32 s10, s8, 72095; SI-SDAG-NEXT: s_cmp_gt_i32 s10, 52096; SI-SDAG-NEXT: s_cselect_b32 s11, 1, 02097; SI-SDAG-NEXT: s_cmp_eq_u32 s10, 32098; SI-SDAG-NEXT: s_cselect_b32 s10, 1, 02099; SI-SDAG-NEXT: s_lshr_b32 s8, s8, 22100; SI-SDAG-NEXT: s_or_b32 s10, s10, s112101; SI-SDAG-NEXT: s_add_i32 s8, s8, s102102; SI-SDAG-NEXT: s_cmp_lt_i32 s9, 312103; SI-SDAG-NEXT: s_cselect_b32 s8, s8, 0x7c002104; SI-SDAG-NEXT: s_cmp_lg_u32 s7, 02105; SI-SDAG-NEXT: s_cselect_b32 s7, s0, 0x7c002106; SI-SDAG-NEXT: s_cmpk_eq_i32 s9, 0x40f2107; SI-SDAG-NEXT: s_cselect_b32 s7, s7, s82108; SI-SDAG-NEXT: s_lshr_b32 s1, s1, 162109; SI-SDAG-NEXT: s_and_b32 s8, s6, 0x1ff2110; SI-SDAG-NEXT: s_lshr_b32 s9, s6, 82111; SI-SDAG-NEXT: s_bfe_u32 s10, s6, 0xb00142112; SI-SDAG-NEXT: s_and_b32 s1, s1, 0x80002113; SI-SDAG-NEXT: v_or_b32_e32 v0, s8, v02114; SI-SDAG-NEXT: s_and_b32 s8, s9, 0xffe2115; SI-SDAG-NEXT: s_sub_i32 s9, 0x3f1, s102116; SI-SDAG-NEXT: s_or_b32 s1, s1, s72117; SI-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02118; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2119; SI-SDAG-NEXT: v_med3_i32 v1, s9, 0, 132120; SI-SDAG-NEXT: s_lshl_b32 s1, s1, 162121; SI-SDAG-NEXT: v_readfirstlane_b32 s7, v02122; SI-SDAG-NEXT: v_readfirstlane_b32 s9, v12123; SI-SDAG-NEXT: s_or_b32 s7, s8, s72124; SI-SDAG-NEXT: s_or_b32 s8, s7, 0x10002125; SI-SDAG-NEXT: s_lshr_b32 s11, s8, s92126; SI-SDAG-NEXT: s_lshl_b32 s9, s11, s92127; SI-SDAG-NEXT: s_cmp_lg_u32 s9, s82128; SI-SDAG-NEXT: s_cselect_b32 s8, 1, 02129; SI-SDAG-NEXT: s_addk_i32 s10, 0xfc102130; SI-SDAG-NEXT: s_or_b32 s8, s11, s82131; SI-SDAG-NEXT: s_lshl_b32 s9, s10, 122132; SI-SDAG-NEXT: s_or_b32 s9, s7, s92133; SI-SDAG-NEXT: s_cmp_lt_i32 s10, 12134; SI-SDAG-NEXT: s_cselect_b32 s8, s8, s92135; SI-SDAG-NEXT: s_and_b32 s9, s8, 72136; SI-SDAG-NEXT: s_cmp_gt_i32 s9, 52137; SI-SDAG-NEXT: s_cselect_b32 s11, 1, 02138; SI-SDAG-NEXT: s_cmp_eq_u32 s9, 32139; SI-SDAG-NEXT: s_cselect_b32 s9, 1, 02140; SI-SDAG-NEXT: s_lshr_b32 s8, s8, 22141; SI-SDAG-NEXT: s_or_b32 s9, s9, s112142; SI-SDAG-NEXT: s_add_i32 s8, s8, s92143; SI-SDAG-NEXT: s_cmp_lt_i32 s10, 312144; SI-SDAG-NEXT: s_cselect_b32 s8, s8, 0x7c002145; SI-SDAG-NEXT: s_cmp_lg_u32 s7, 02146; SI-SDAG-NEXT: s_cselect_b32 s0, s0, 0x7c002147; SI-SDAG-NEXT: s_cmpk_eq_i32 s10, 0x40f2148; SI-SDAG-NEXT: s_cselect_b32 s0, s0, s82149; SI-SDAG-NEXT: s_lshr_b32 s6, s6, 162150; SI-SDAG-NEXT: s_and_b32 s6, s6, 0x80002151; SI-SDAG-NEXT: s_or_b32 s0, s6, s02152; SI-SDAG-NEXT: s_and_b32 s0, s0, 0xffff2153; SI-SDAG-NEXT: s_or_b32 s6, s0, s12154; SI-SDAG-NEXT: s_mov_b32 s0, s42155; SI-SDAG-NEXT: s_mov_b32 s1, s52156; SI-SDAG-NEXT: v_mov_b32_e32 v0, s62157; SI-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], 02158; SI-SDAG-NEXT: s_endpgm2159;2160; SI-GISEL-LABEL: fptrunc_v2f64_to_v2f16:2161; SI-GISEL: ; %bb.0: ; %entry2162; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x92163; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)2164; SI-GISEL-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x02165; SI-GISEL-NEXT: s_mov_b32 s2, -12166; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)2167; SI-GISEL-NEXT: s_bfe_u32 s3, s5, 0xb00142168; SI-GISEL-NEXT: s_lshr_b32 s8, s5, 82169; SI-GISEL-NEXT: s_and_b32 s9, s5, 0x1ff2170; SI-GISEL-NEXT: s_addk_i32 s3, 0xfc102171; SI-GISEL-NEXT: s_and_b32 s8, s8, 0xffe2172; SI-GISEL-NEXT: s_or_b32 s4, s9, s42173; SI-GISEL-NEXT: s_cselect_b32 s4, 1, 02174; SI-GISEL-NEXT: s_or_b32 s4, s8, s42175; SI-GISEL-NEXT: s_cselect_b32 s8, 1, 02176; SI-GISEL-NEXT: s_lshl_b32 s8, s8, 92177; SI-GISEL-NEXT: s_lshl_b32 s9, s3, 122178; SI-GISEL-NEXT: s_sub_i32 s10, 1, s32179; SI-GISEL-NEXT: s_or_b32 s11, s4, 0x10002180; SI-GISEL-NEXT: s_or_b32 s8, s8, 0x7c002181; SI-GISEL-NEXT: s_or_b32 s4, s4, s92182; SI-GISEL-NEXT: s_max_i32 s9, s10, 02183; SI-GISEL-NEXT: s_min_i32 s9, s9, 132184; SI-GISEL-NEXT: s_lshr_b32 s10, s11, s92185; SI-GISEL-NEXT: s_lshl_b32 s9, s10, s92186; SI-GISEL-NEXT: s_cmp_lg_u32 s9, s112187; SI-GISEL-NEXT: s_cselect_b32 s9, 1, 02188; SI-GISEL-NEXT: s_or_b32 s9, s10, s92189; SI-GISEL-NEXT: s_cmp_lt_i32 s3, 12190; SI-GISEL-NEXT: s_cselect_b32 s4, s9, s42191; SI-GISEL-NEXT: s_and_b32 s9, s4, 72192; SI-GISEL-NEXT: s_lshr_b32 s4, s4, 22193; SI-GISEL-NEXT: s_cmp_eq_u32 s9, 32194; SI-GISEL-NEXT: s_cselect_b32 s10, 1, 02195; SI-GISEL-NEXT: s_cmp_gt_i32 s9, 52196; SI-GISEL-NEXT: s_cselect_b32 s9, 1, 02197; SI-GISEL-NEXT: s_or_b32 s9, s10, s92198; SI-GISEL-NEXT: s_add_i32 s4, s4, s92199; SI-GISEL-NEXT: s_cmp_gt_i32 s3, 302200; SI-GISEL-NEXT: s_cselect_b32 s4, 0x7c00, s42201; SI-GISEL-NEXT: s_cmpk_eq_i32 s3, 0x40f2202; SI-GISEL-NEXT: s_cselect_b32 s3, s8, s42203; SI-GISEL-NEXT: s_lshr_b32 s4, s5, 162204; SI-GISEL-NEXT: s_bfe_u32 s5, s7, 0xb00142205; SI-GISEL-NEXT: s_lshr_b32 s8, s7, 82206; SI-GISEL-NEXT: s_and_b32 s9, s7, 0x1ff2207; SI-GISEL-NEXT: s_and_b32 s4, s4, 0x80002208; SI-GISEL-NEXT: s_addk_i32 s5, 0xfc102209; SI-GISEL-NEXT: s_and_b32 s8, s8, 0xffe2210; SI-GISEL-NEXT: s_or_b32 s3, s4, s32211; SI-GISEL-NEXT: s_or_b32 s4, s9, s62212; SI-GISEL-NEXT: s_cselect_b32 s4, 1, 02213; SI-GISEL-NEXT: s_or_b32 s4, s8, s42214; SI-GISEL-NEXT: s_cselect_b32 s6, 1, 02215; SI-GISEL-NEXT: s_lshl_b32 s6, s6, 92216; SI-GISEL-NEXT: s_lshl_b32 s8, s5, 122217; SI-GISEL-NEXT: s_sub_i32 s9, 1, s52218; SI-GISEL-NEXT: s_or_b32 s10, s4, 0x10002219; SI-GISEL-NEXT: s_or_b32 s6, s6, 0x7c002220; SI-GISEL-NEXT: s_or_b32 s4, s4, s82221; SI-GISEL-NEXT: s_max_i32 s8, s9, 02222; SI-GISEL-NEXT: s_min_i32 s8, s8, 132223; SI-GISEL-NEXT: s_lshr_b32 s9, s10, s82224; SI-GISEL-NEXT: s_lshl_b32 s8, s9, s82225; SI-GISEL-NEXT: s_cmp_lg_u32 s8, s102226; SI-GISEL-NEXT: s_cselect_b32 s8, 1, 02227; SI-GISEL-NEXT: s_or_b32 s8, s9, s82228; SI-GISEL-NEXT: s_cmp_lt_i32 s5, 12229; SI-GISEL-NEXT: s_cselect_b32 s4, s8, s42230; SI-GISEL-NEXT: s_and_b32 s8, s4, 72231; SI-GISEL-NEXT: s_lshr_b32 s4, s4, 22232; SI-GISEL-NEXT: s_cmp_eq_u32 s8, 32233; SI-GISEL-NEXT: s_cselect_b32 s9, 1, 02234; SI-GISEL-NEXT: s_cmp_gt_i32 s8, 52235; SI-GISEL-NEXT: s_cselect_b32 s8, 1, 02236; SI-GISEL-NEXT: s_or_b32 s8, s9, s82237; SI-GISEL-NEXT: s_add_i32 s4, s4, s82238; SI-GISEL-NEXT: s_cmp_gt_i32 s5, 302239; SI-GISEL-NEXT: s_cselect_b32 s4, 0x7c00, s42240; SI-GISEL-NEXT: s_cmpk_eq_i32 s5, 0x40f2241; SI-GISEL-NEXT: s_cselect_b32 s4, s6, s42242; SI-GISEL-NEXT: s_lshr_b32 s5, s7, 162243; SI-GISEL-NEXT: s_and_b32 s3, s3, 0xffff2244; SI-GISEL-NEXT: s_and_b32 s5, s5, 0x80002245; SI-GISEL-NEXT: s_or_b32 s4, s5, s42246; SI-GISEL-NEXT: s_and_b32 s4, s4, 0xffff2247; SI-GISEL-NEXT: s_lshl_b32 s4, s4, 162248; SI-GISEL-NEXT: s_or_b32 s4, s3, s42249; SI-GISEL-NEXT: s_mov_b32 s3, 0xf0002250; SI-GISEL-NEXT: v_mov_b32_e32 v0, s42251; SI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 02252; SI-GISEL-NEXT: s_endpgm2253;2254; VI-SDAG-LABEL: fptrunc_v2f64_to_v2f16:2255; VI-SDAG: ; %bb.0: ; %entry2256; VI-SDAG-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x242257; VI-SDAG-NEXT: s_mov_b32 s3, 0xf0002258; VI-SDAG-NEXT: s_mov_b32 s2, -12259; VI-SDAG-NEXT: s_mov_b32 s10, s22260; VI-SDAG-NEXT: s_mov_b32 s11, s32261; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)2262; VI-SDAG-NEXT: s_mov_b32 s8, s62263; VI-SDAG-NEXT: s_mov_b32 s9, s72264; VI-SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 02265; VI-SDAG-NEXT: s_mov_b32 s0, s42266; VI-SDAG-NEXT: s_mov_b32 s1, s52267; VI-SDAG-NEXT: s_movk_i32 s6, 0x7e002268; VI-SDAG-NEXT: s_waitcnt vmcnt(0)2269; VI-SDAG-NEXT: v_readfirstlane_b32 s4, v32270; VI-SDAG-NEXT: s_and_b32 s7, s4, 0x1ff2271; VI-SDAG-NEXT: v_readfirstlane_b32 s5, v12272; VI-SDAG-NEXT: v_or_b32_e32 v1, s7, v22273; VI-SDAG-NEXT: s_lshr_b32 s8, s4, 82274; VI-SDAG-NEXT: s_bfe_u32 s9, s4, 0xb00142275; VI-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v12276; VI-SDAG-NEXT: s_and_b32 s7, s8, 0xffe2277; VI-SDAG-NEXT: s_sub_i32 s8, 0x3f1, s92278; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2279; VI-SDAG-NEXT: v_med3_i32 v2, s8, 0, 132280; VI-SDAG-NEXT: v_readfirstlane_b32 s8, v12281; VI-SDAG-NEXT: s_or_b32 s7, s7, s82282; VI-SDAG-NEXT: v_readfirstlane_b32 s10, v22283; VI-SDAG-NEXT: s_or_b32 s8, s7, 0x10002284; VI-SDAG-NEXT: s_lshr_b32 s11, s8, s102285; VI-SDAG-NEXT: s_lshl_b32 s10, s11, s102286; VI-SDAG-NEXT: s_cmp_lg_u32 s10, s82287; VI-SDAG-NEXT: s_cselect_b32 s8, 1, 02288; VI-SDAG-NEXT: s_addk_i32 s9, 0xfc102289; VI-SDAG-NEXT: s_lshl_b32 s10, s9, 122290; VI-SDAG-NEXT: s_or_b32 s8, s11, s82291; VI-SDAG-NEXT: s_or_b32 s10, s7, s102292; VI-SDAG-NEXT: s_cmp_lt_i32 s9, 12293; VI-SDAG-NEXT: s_cselect_b32 s8, s8, s102294; VI-SDAG-NEXT: s_and_b32 s10, s8, 72295; VI-SDAG-NEXT: s_cmp_gt_i32 s10, 52296; VI-SDAG-NEXT: s_cselect_b32 s11, 1, 02297; VI-SDAG-NEXT: s_cmp_eq_u32 s10, 32298; VI-SDAG-NEXT: s_cselect_b32 s10, 1, 02299; VI-SDAG-NEXT: s_lshr_b32 s8, s8, 22300; VI-SDAG-NEXT: s_or_b32 s10, s10, s112301; VI-SDAG-NEXT: s_add_i32 s8, s8, s102302; VI-SDAG-NEXT: s_cmp_lt_i32 s9, 312303; VI-SDAG-NEXT: s_cselect_b32 s8, s8, 0x7c002304; VI-SDAG-NEXT: s_cmp_lg_u32 s7, 02305; VI-SDAG-NEXT: s_cselect_b32 s7, s6, 0x7c002306; VI-SDAG-NEXT: s_cmpk_eq_i32 s9, 0x40f2307; VI-SDAG-NEXT: s_cselect_b32 s7, s7, s82308; VI-SDAG-NEXT: s_and_b32 s8, s5, 0x1ff2309; VI-SDAG-NEXT: v_or_b32_e32 v0, s8, v02310; VI-SDAG-NEXT: s_lshr_b32 s4, s4, 162311; VI-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02312; VI-SDAG-NEXT: s_lshr_b32 s9, s5, 82313; VI-SDAG-NEXT: s_bfe_u32 s10, s5, 0xb00142314; VI-SDAG-NEXT: s_and_b32 s4, s4, 0x80002315; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2316; VI-SDAG-NEXT: s_and_b32 s8, s9, 0xffe2317; VI-SDAG-NEXT: s_sub_i32 s9, 0x3f1, s102318; VI-SDAG-NEXT: s_or_b32 s4, s4, s72319; VI-SDAG-NEXT: v_readfirstlane_b32 s7, v02320; VI-SDAG-NEXT: v_med3_i32 v1, s9, 0, 132321; VI-SDAG-NEXT: s_or_b32 s7, s8, s72322; VI-SDAG-NEXT: v_readfirstlane_b32 s9, v12323; VI-SDAG-NEXT: s_or_b32 s8, s7, 0x10002324; VI-SDAG-NEXT: s_lshr_b32 s11, s8, s92325; VI-SDAG-NEXT: s_lshl_b32 s4, s4, 162326; VI-SDAG-NEXT: s_lshl_b32 s9, s11, s92327; VI-SDAG-NEXT: s_cmp_lg_u32 s9, s82328; VI-SDAG-NEXT: s_cselect_b32 s8, 1, 02329; VI-SDAG-NEXT: s_addk_i32 s10, 0xfc102330; VI-SDAG-NEXT: s_lshl_b32 s9, s10, 122331; VI-SDAG-NEXT: s_or_b32 s8, s11, s82332; VI-SDAG-NEXT: s_or_b32 s9, s7, s92333; VI-SDAG-NEXT: s_cmp_lt_i32 s10, 12334; VI-SDAG-NEXT: s_cselect_b32 s8, s8, s92335; VI-SDAG-NEXT: s_and_b32 s9, s8, 72336; VI-SDAG-NEXT: s_cmp_gt_i32 s9, 52337; VI-SDAG-NEXT: s_cselect_b32 s11, 1, 02338; VI-SDAG-NEXT: s_cmp_eq_u32 s9, 32339; VI-SDAG-NEXT: s_cselect_b32 s9, 1, 02340; VI-SDAG-NEXT: s_lshr_b32 s8, s8, 22341; VI-SDAG-NEXT: s_or_b32 s9, s9, s112342; VI-SDAG-NEXT: s_add_i32 s8, s8, s92343; VI-SDAG-NEXT: s_cmp_lt_i32 s10, 312344; VI-SDAG-NEXT: s_cselect_b32 s8, s8, 0x7c002345; VI-SDAG-NEXT: s_cmp_lg_u32 s7, 02346; VI-SDAG-NEXT: s_cselect_b32 s6, s6, 0x7c002347; VI-SDAG-NEXT: s_cmpk_eq_i32 s10, 0x40f2348; VI-SDAG-NEXT: s_cselect_b32 s6, s6, s82349; VI-SDAG-NEXT: s_lshr_b32 s5, s5, 162350; VI-SDAG-NEXT: s_and_b32 s5, s5, 0x80002351; VI-SDAG-NEXT: s_or_b32 s5, s5, s62352; VI-SDAG-NEXT: s_and_b32 s5, s5, 0xffff2353; VI-SDAG-NEXT: s_or_b32 s4, s5, s42354; VI-SDAG-NEXT: v_mov_b32_e32 v0, s42355; VI-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], 02356; VI-SDAG-NEXT: s_endpgm2357;2358; VI-GISEL-LABEL: fptrunc_v2f64_to_v2f16:2359; VI-GISEL: ; %bb.0: ; %entry2360; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242361; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)2362; VI-GISEL-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x02363; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)2364; VI-GISEL-NEXT: s_bfe_u32 s2, s5, 0xb00142365; VI-GISEL-NEXT: s_lshr_b32 s3, s5, 82366; VI-GISEL-NEXT: s_and_b32 s8, s5, 0x1ff2367; VI-GISEL-NEXT: s_addk_i32 s2, 0xfc102368; VI-GISEL-NEXT: s_and_b32 s3, s3, 0xffe2369; VI-GISEL-NEXT: s_or_b32 s4, s8, s42370; VI-GISEL-NEXT: s_cselect_b32 s4, 1, 02371; VI-GISEL-NEXT: s_or_b32 s3, s3, s42372; VI-GISEL-NEXT: s_cselect_b32 s4, 1, 02373; VI-GISEL-NEXT: s_sub_i32 s9, 1, s22374; VI-GISEL-NEXT: s_lshl_b32 s8, s2, 122375; VI-GISEL-NEXT: s_max_i32 s9, s9, 02376; VI-GISEL-NEXT: s_or_b32 s8, s3, s82377; VI-GISEL-NEXT: s_min_i32 s9, s9, 132378; VI-GISEL-NEXT: s_bitset1_b32 s3, 122379; VI-GISEL-NEXT: s_lshl_b32 s4, s4, 92380; VI-GISEL-NEXT: s_lshr_b32 s10, s3, s92381; VI-GISEL-NEXT: s_or_b32 s4, s4, 0x7c002382; VI-GISEL-NEXT: s_lshl_b32 s9, s10, s92383; VI-GISEL-NEXT: s_cmp_lg_u32 s9, s32384; VI-GISEL-NEXT: s_cselect_b32 s3, 1, 02385; VI-GISEL-NEXT: s_or_b32 s3, s10, s32386; VI-GISEL-NEXT: s_cmp_lt_i32 s2, 12387; VI-GISEL-NEXT: s_cselect_b32 s3, s3, s82388; VI-GISEL-NEXT: s_and_b32 s8, s3, 72389; VI-GISEL-NEXT: s_lshr_b32 s3, s3, 22390; VI-GISEL-NEXT: s_cmp_eq_u32 s8, 32391; VI-GISEL-NEXT: s_cselect_b32 s9, 1, 02392; VI-GISEL-NEXT: s_cmp_gt_i32 s8, 52393; VI-GISEL-NEXT: s_cselect_b32 s8, 1, 02394; VI-GISEL-NEXT: s_or_b32 s8, s9, s82395; VI-GISEL-NEXT: s_add_i32 s3, s3, s82396; VI-GISEL-NEXT: s_cmp_gt_i32 s2, 302397; VI-GISEL-NEXT: s_cselect_b32 s3, 0x7c00, s32398; VI-GISEL-NEXT: s_cmpk_eq_i32 s2, 0x40f2399; VI-GISEL-NEXT: s_cselect_b32 s2, s4, s32400; VI-GISEL-NEXT: s_lshr_b32 s3, s5, 162401; VI-GISEL-NEXT: s_and_b32 s3, s3, 0x80002402; VI-GISEL-NEXT: s_or_b32 s2, s3, s22403; VI-GISEL-NEXT: s_bfe_u32 s3, s7, 0xb00142404; VI-GISEL-NEXT: s_lshr_b32 s4, s7, 82405; VI-GISEL-NEXT: s_addk_i32 s3, 0xfc102406; VI-GISEL-NEXT: s_and_b32 s4, s4, 0xffe2407; VI-GISEL-NEXT: s_and_b32 s5, s7, 0x1ff2408; VI-GISEL-NEXT: s_or_b32 s5, s5, s62409; VI-GISEL-NEXT: s_cselect_b32 s5, 1, 02410; VI-GISEL-NEXT: s_or_b32 s4, s4, s52411; VI-GISEL-NEXT: s_cselect_b32 s5, 1, 02412; VI-GISEL-NEXT: s_sub_i32 s8, 1, s32413; VI-GISEL-NEXT: s_lshl_b32 s6, s3, 122414; VI-GISEL-NEXT: s_max_i32 s8, s8, 02415; VI-GISEL-NEXT: s_or_b32 s6, s4, s62416; VI-GISEL-NEXT: s_min_i32 s8, s8, 132417; VI-GISEL-NEXT: s_bitset1_b32 s4, 122418; VI-GISEL-NEXT: s_lshl_b32 s5, s5, 92419; VI-GISEL-NEXT: s_lshr_b32 s9, s4, s82420; VI-GISEL-NEXT: s_or_b32 s5, s5, 0x7c002421; VI-GISEL-NEXT: s_lshl_b32 s8, s9, s82422; VI-GISEL-NEXT: s_cmp_lg_u32 s8, s42423; VI-GISEL-NEXT: s_cselect_b32 s4, 1, 02424; VI-GISEL-NEXT: s_or_b32 s4, s9, s42425; VI-GISEL-NEXT: s_cmp_lt_i32 s3, 12426; VI-GISEL-NEXT: s_cselect_b32 s4, s4, s62427; VI-GISEL-NEXT: s_and_b32 s6, s4, 72428; VI-GISEL-NEXT: s_lshr_b32 s4, s4, 22429; VI-GISEL-NEXT: s_cmp_eq_u32 s6, 32430; VI-GISEL-NEXT: s_cselect_b32 s8, 1, 02431; VI-GISEL-NEXT: s_cmp_gt_i32 s6, 52432; VI-GISEL-NEXT: s_cselect_b32 s6, 1, 02433; VI-GISEL-NEXT: s_or_b32 s6, s8, s62434; VI-GISEL-NEXT: s_add_i32 s4, s4, s62435; VI-GISEL-NEXT: s_cmp_gt_i32 s3, 302436; VI-GISEL-NEXT: s_cselect_b32 s4, 0x7c00, s42437; VI-GISEL-NEXT: s_cmpk_eq_i32 s3, 0x40f2438; VI-GISEL-NEXT: s_cselect_b32 s3, s5, s42439; VI-GISEL-NEXT: s_lshr_b32 s4, s7, 162440; VI-GISEL-NEXT: s_and_b32 s4, s4, 0x80002441; VI-GISEL-NEXT: s_or_b32 s3, s4, s32442; VI-GISEL-NEXT: s_and_b32 s3, s3, 0xffff2443; VI-GISEL-NEXT: s_and_b32 s2, s2, 0xffff2444; VI-GISEL-NEXT: s_lshl_b32 s3, s3, 162445; VI-GISEL-NEXT: s_or_b32 s2, s2, s32446; VI-GISEL-NEXT: v_mov_b32_e32 v0, s22447; VI-GISEL-NEXT: s_mov_b32 s2, -12448; VI-GISEL-NEXT: s_mov_b32 s3, 0xf0002449; VI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 02450; VI-GISEL-NEXT: s_endpgm2451;2452; GFX9-SDAG-LABEL: fptrunc_v2f64_to_v2f16:2453; GFX9-SDAG: ; %bb.0: ; %entry2454; GFX9-SDAG-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x242455; GFX9-SDAG-NEXT: s_mov_b32 s3, 0xf0002456; GFX9-SDAG-NEXT: s_mov_b32 s2, -12457; GFX9-SDAG-NEXT: s_mov_b32 s6, s22458; GFX9-SDAG-NEXT: s_mov_b32 s7, s32459; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)2460; GFX9-SDAG-NEXT: s_mov_b32 s4, s102461; GFX9-SDAG-NEXT: s_mov_b32 s5, s112462; GFX9-SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[4:7], 02463; GFX9-SDAG-NEXT: s_mov_b32 s0, s82464; GFX9-SDAG-NEXT: s_mov_b32 s1, s92465; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x7e002466; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)2467; GFX9-SDAG-NEXT: v_readfirstlane_b32 s5, v32468; GFX9-SDAG-NEXT: s_and_b32 s7, s5, 0x1ff2469; GFX9-SDAG-NEXT: v_readfirstlane_b32 s6, v12470; GFX9-SDAG-NEXT: v_or_b32_e32 v1, s7, v22471; GFX9-SDAG-NEXT: s_lshr_b32 s8, s5, 82472; GFX9-SDAG-NEXT: s_bfe_u32 s9, s5, 0xb00142473; GFX9-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v12474; GFX9-SDAG-NEXT: s_and_b32 s7, s8, 0xffe2475; GFX9-SDAG-NEXT: s_sub_i32 s8, 0x3f1, s92476; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2477; GFX9-SDAG-NEXT: v_med3_i32 v2, s8, 0, 132478; GFX9-SDAG-NEXT: v_readfirstlane_b32 s8, v12479; GFX9-SDAG-NEXT: s_or_b32 s7, s7, s82480; GFX9-SDAG-NEXT: v_readfirstlane_b32 s10, v22481; GFX9-SDAG-NEXT: s_or_b32 s8, s7, 0x10002482; GFX9-SDAG-NEXT: s_lshr_b32 s11, s8, s102483; GFX9-SDAG-NEXT: s_lshl_b32 s10, s11, s102484; GFX9-SDAG-NEXT: s_cmp_lg_u32 s10, s82485; GFX9-SDAG-NEXT: s_cselect_b32 s8, 1, 02486; GFX9-SDAG-NEXT: s_addk_i32 s9, 0xfc102487; GFX9-SDAG-NEXT: s_lshl_b32 s10, s9, 122488; GFX9-SDAG-NEXT: s_or_b32 s8, s11, s82489; GFX9-SDAG-NEXT: s_or_b32 s10, s7, s102490; GFX9-SDAG-NEXT: s_cmp_lt_i32 s9, 12491; GFX9-SDAG-NEXT: s_cselect_b32 s8, s8, s102492; GFX9-SDAG-NEXT: s_and_b32 s10, s8, 72493; GFX9-SDAG-NEXT: s_cmp_gt_i32 s10, 52494; GFX9-SDAG-NEXT: s_cselect_b32 s11, 1, 02495; GFX9-SDAG-NEXT: s_cmp_eq_u32 s10, 32496; GFX9-SDAG-NEXT: s_cselect_b32 s10, 1, 02497; GFX9-SDAG-NEXT: s_lshr_b32 s8, s8, 22498; GFX9-SDAG-NEXT: s_or_b32 s10, s10, s112499; GFX9-SDAG-NEXT: s_add_i32 s8, s8, s102500; GFX9-SDAG-NEXT: s_cmp_lt_i32 s9, 312501; GFX9-SDAG-NEXT: s_cselect_b32 s8, s8, 0x7c002502; GFX9-SDAG-NEXT: s_cmp_lg_u32 s7, 02503; GFX9-SDAG-NEXT: s_cselect_b32 s7, s4, 0x7c002504; GFX9-SDAG-NEXT: s_cmpk_eq_i32 s9, 0x40f2505; GFX9-SDAG-NEXT: s_cselect_b32 s7, s7, s82506; GFX9-SDAG-NEXT: s_and_b32 s8, s6, 0x1ff2507; GFX9-SDAG-NEXT: v_or_b32_e32 v0, s8, v02508; GFX9-SDAG-NEXT: s_lshr_b32 s5, s5, 162509; GFX9-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02510; GFX9-SDAG-NEXT: s_lshr_b32 s9, s6, 82511; GFX9-SDAG-NEXT: s_bfe_u32 s10, s6, 0xb00142512; GFX9-SDAG-NEXT: s_and_b32 s5, s5, 0x80002513; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2514; GFX9-SDAG-NEXT: s_and_b32 s8, s9, 0xffe2515; GFX9-SDAG-NEXT: s_sub_i32 s9, 0x3f1, s102516; GFX9-SDAG-NEXT: s_or_b32 s5, s5, s72517; GFX9-SDAG-NEXT: v_readfirstlane_b32 s7, v02518; GFX9-SDAG-NEXT: v_med3_i32 v1, s9, 0, 132519; GFX9-SDAG-NEXT: s_or_b32 s7, s8, s72520; GFX9-SDAG-NEXT: v_readfirstlane_b32 s9, v12521; GFX9-SDAG-NEXT: s_or_b32 s8, s7, 0x10002522; GFX9-SDAG-NEXT: s_lshr_b32 s11, s8, s92523; GFX9-SDAG-NEXT: s_lshl_b32 s9, s11, s92524; GFX9-SDAG-NEXT: s_cmp_lg_u32 s9, s82525; GFX9-SDAG-NEXT: s_cselect_b32 s8, 1, 02526; GFX9-SDAG-NEXT: s_addk_i32 s10, 0xfc102527; GFX9-SDAG-NEXT: s_lshl_b32 s9, s10, 122528; GFX9-SDAG-NEXT: s_or_b32 s8, s11, s82529; GFX9-SDAG-NEXT: s_or_b32 s9, s7, s92530; GFX9-SDAG-NEXT: s_cmp_lt_i32 s10, 12531; GFX9-SDAG-NEXT: s_cselect_b32 s8, s8, s92532; GFX9-SDAG-NEXT: s_and_b32 s9, s8, 72533; GFX9-SDAG-NEXT: s_cmp_gt_i32 s9, 52534; GFX9-SDAG-NEXT: s_cselect_b32 s11, 1, 02535; GFX9-SDAG-NEXT: s_cmp_eq_u32 s9, 32536; GFX9-SDAG-NEXT: s_cselect_b32 s9, 1, 02537; GFX9-SDAG-NEXT: s_lshr_b32 s8, s8, 22538; GFX9-SDAG-NEXT: s_or_b32 s9, s9, s112539; GFX9-SDAG-NEXT: s_add_i32 s8, s8, s92540; GFX9-SDAG-NEXT: s_cmp_lt_i32 s10, 312541; GFX9-SDAG-NEXT: s_cselect_b32 s8, s8, 0x7c002542; GFX9-SDAG-NEXT: s_cmp_lg_u32 s7, 02543; GFX9-SDAG-NEXT: s_cselect_b32 s4, s4, 0x7c002544; GFX9-SDAG-NEXT: s_cmpk_eq_i32 s10, 0x40f2545; GFX9-SDAG-NEXT: s_cselect_b32 s4, s4, s82546; GFX9-SDAG-NEXT: s_lshr_b32 s6, s6, 162547; GFX9-SDAG-NEXT: s_and_b32 s6, s6, 0x80002548; GFX9-SDAG-NEXT: s_or_b32 s4, s6, s42549; GFX9-SDAG-NEXT: s_pack_ll_b32_b16 s4, s4, s52550; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s42551; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], 02552; GFX9-SDAG-NEXT: s_endpgm2553;2554; GFX9-GISEL-LABEL: fptrunc_v2f64_to_v2f16:2555; GFX9-GISEL: ; %bb.0: ; %entry2556; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242557; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)2558; GFX9-GISEL-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x02559; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)2560; GFX9-GISEL-NEXT: s_bfe_u32 s2, s5, 0xb00142561; GFX9-GISEL-NEXT: s_lshr_b32 s3, s5, 82562; GFX9-GISEL-NEXT: s_and_b32 s8, s5, 0x1ff2563; GFX9-GISEL-NEXT: s_addk_i32 s2, 0xfc102564; GFX9-GISEL-NEXT: s_and_b32 s3, s3, 0xffe2565; GFX9-GISEL-NEXT: s_or_b32 s4, s8, s42566; GFX9-GISEL-NEXT: s_cselect_b32 s4, 1, 02567; GFX9-GISEL-NEXT: s_or_b32 s3, s3, s42568; GFX9-GISEL-NEXT: s_cselect_b32 s4, 1, 02569; GFX9-GISEL-NEXT: s_sub_i32 s9, 1, s22570; GFX9-GISEL-NEXT: s_lshl_b32 s8, s2, 122571; GFX9-GISEL-NEXT: s_max_i32 s9, s9, 02572; GFX9-GISEL-NEXT: s_or_b32 s8, s3, s82573; GFX9-GISEL-NEXT: s_min_i32 s9, s9, 132574; GFX9-GISEL-NEXT: s_bitset1_b32 s3, 122575; GFX9-GISEL-NEXT: s_lshl_b32 s4, s4, 92576; GFX9-GISEL-NEXT: s_lshr_b32 s10, s3, s92577; GFX9-GISEL-NEXT: s_or_b32 s4, s4, 0x7c002578; GFX9-GISEL-NEXT: s_lshl_b32 s9, s10, s92579; GFX9-GISEL-NEXT: s_cmp_lg_u32 s9, s32580; GFX9-GISEL-NEXT: s_cselect_b32 s3, 1, 02581; GFX9-GISEL-NEXT: s_or_b32 s3, s10, s32582; GFX9-GISEL-NEXT: s_cmp_lt_i32 s2, 12583; GFX9-GISEL-NEXT: s_cselect_b32 s3, s3, s82584; GFX9-GISEL-NEXT: s_and_b32 s8, s3, 72585; GFX9-GISEL-NEXT: s_lshr_b32 s3, s3, 22586; GFX9-GISEL-NEXT: s_cmp_eq_u32 s8, 32587; GFX9-GISEL-NEXT: s_cselect_b32 s9, 1, 02588; GFX9-GISEL-NEXT: s_cmp_gt_i32 s8, 52589; GFX9-GISEL-NEXT: s_cselect_b32 s8, 1, 02590; GFX9-GISEL-NEXT: s_or_b32 s8, s9, s82591; GFX9-GISEL-NEXT: s_add_i32 s3, s3, s82592; GFX9-GISEL-NEXT: s_cmp_gt_i32 s2, 302593; GFX9-GISEL-NEXT: s_cselect_b32 s3, 0x7c00, s32594; GFX9-GISEL-NEXT: s_cmpk_eq_i32 s2, 0x40f2595; GFX9-GISEL-NEXT: s_cselect_b32 s2, s4, s32596; GFX9-GISEL-NEXT: s_lshr_b32 s3, s5, 162597; GFX9-GISEL-NEXT: s_and_b32 s3, s3, 0x80002598; GFX9-GISEL-NEXT: s_or_b32 s2, s3, s22599; GFX9-GISEL-NEXT: s_bfe_u32 s3, s7, 0xb00142600; GFX9-GISEL-NEXT: s_lshr_b32 s4, s7, 82601; GFX9-GISEL-NEXT: s_addk_i32 s3, 0xfc102602; GFX9-GISEL-NEXT: s_and_b32 s4, s4, 0xffe2603; GFX9-GISEL-NEXT: s_and_b32 s5, s7, 0x1ff2604; GFX9-GISEL-NEXT: s_or_b32 s5, s5, s62605; GFX9-GISEL-NEXT: s_cselect_b32 s5, 1, 02606; GFX9-GISEL-NEXT: s_or_b32 s4, s4, s52607; GFX9-GISEL-NEXT: s_cselect_b32 s5, 1, 02608; GFX9-GISEL-NEXT: s_sub_i32 s8, 1, s32609; GFX9-GISEL-NEXT: s_lshl_b32 s6, s3, 122610; GFX9-GISEL-NEXT: s_max_i32 s8, s8, 02611; GFX9-GISEL-NEXT: s_or_b32 s6, s4, s62612; GFX9-GISEL-NEXT: s_min_i32 s8, s8, 132613; GFX9-GISEL-NEXT: s_bitset1_b32 s4, 122614; GFX9-GISEL-NEXT: s_lshl_b32 s5, s5, 92615; GFX9-GISEL-NEXT: s_lshr_b32 s9, s4, s82616; GFX9-GISEL-NEXT: s_or_b32 s5, s5, 0x7c002617; GFX9-GISEL-NEXT: s_lshl_b32 s8, s9, s82618; GFX9-GISEL-NEXT: s_cmp_lg_u32 s8, s42619; GFX9-GISEL-NEXT: s_cselect_b32 s4, 1, 02620; GFX9-GISEL-NEXT: s_or_b32 s4, s9, s42621; GFX9-GISEL-NEXT: s_cmp_lt_i32 s3, 12622; GFX9-GISEL-NEXT: s_cselect_b32 s4, s4, s62623; GFX9-GISEL-NEXT: s_and_b32 s6, s4, 72624; GFX9-GISEL-NEXT: s_lshr_b32 s4, s4, 22625; GFX9-GISEL-NEXT: s_cmp_eq_u32 s6, 32626; GFX9-GISEL-NEXT: s_cselect_b32 s8, 1, 02627; GFX9-GISEL-NEXT: s_cmp_gt_i32 s6, 52628; GFX9-GISEL-NEXT: s_cselect_b32 s6, 1, 02629; GFX9-GISEL-NEXT: s_or_b32 s6, s8, s62630; GFX9-GISEL-NEXT: s_add_i32 s4, s4, s62631; GFX9-GISEL-NEXT: s_cmp_gt_i32 s3, 302632; GFX9-GISEL-NEXT: s_cselect_b32 s4, 0x7c00, s42633; GFX9-GISEL-NEXT: s_cmpk_eq_i32 s3, 0x40f2634; GFX9-GISEL-NEXT: s_cselect_b32 s3, s5, s42635; GFX9-GISEL-NEXT: s_lshr_b32 s4, s7, 162636; GFX9-GISEL-NEXT: s_and_b32 s4, s4, 0x80002637; GFX9-GISEL-NEXT: s_or_b32 s3, s4, s32638; GFX9-GISEL-NEXT: s_pack_ll_b32_b16 s2, s2, s32639; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s22640; GFX9-GISEL-NEXT: s_mov_b32 s2, -12641; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf0002642; GFX9-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 02643; GFX9-GISEL-NEXT: s_endpgm2644;2645; GFX950-SDAG-LABEL: fptrunc_v2f64_to_v2f16:2646; GFX950-SDAG: ; %bb.0: ; %entry2647; GFX950-SDAG-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x242648; GFX950-SDAG-NEXT: s_mov_b32 s3, 0xf0002649; GFX950-SDAG-NEXT: s_mov_b32 s2, -12650; GFX950-SDAG-NEXT: s_mov_b32 s6, s22651; GFX950-SDAG-NEXT: s_mov_b32 s7, s32652; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)2653; GFX950-SDAG-NEXT: s_mov_b32 s4, s102654; GFX950-SDAG-NEXT: s_mov_b32 s5, s112655; GFX950-SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[4:7], 02656; GFX950-SDAG-NEXT: s_mov_b32 s0, s82657; GFX950-SDAG-NEXT: s_mov_b32 s1, s92658; GFX950-SDAG-NEXT: s_movk_i32 s4, 0x7e002659; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)2660; GFX950-SDAG-NEXT: v_readfirstlane_b32 s5, v32661; GFX950-SDAG-NEXT: s_and_b32 s7, s5, 0x1ff2662; GFX950-SDAG-NEXT: v_readfirstlane_b32 s6, v12663; GFX950-SDAG-NEXT: v_or_b32_e32 v1, s7, v22664; GFX950-SDAG-NEXT: s_lshr_b32 s8, s5, 82665; GFX950-SDAG-NEXT: s_bfe_u32 s9, s5, 0xb00142666; GFX950-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v12667; GFX950-SDAG-NEXT: s_and_b32 s7, s8, 0xffe2668; GFX950-SDAG-NEXT: s_sub_i32 s8, 0x3f1, s92669; GFX950-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2670; GFX950-SDAG-NEXT: v_med3_i32 v2, s8, 0, 132671; GFX950-SDAG-NEXT: v_readfirstlane_b32 s8, v12672; GFX950-SDAG-NEXT: s_or_b32 s7, s7, s82673; GFX950-SDAG-NEXT: v_readfirstlane_b32 s10, v22674; GFX950-SDAG-NEXT: s_or_b32 s8, s7, 0x10002675; GFX950-SDAG-NEXT: s_lshr_b32 s11, s8, s102676; GFX950-SDAG-NEXT: s_lshl_b32 s10, s11, s102677; GFX950-SDAG-NEXT: s_cmp_lg_u32 s10, s82678; GFX950-SDAG-NEXT: s_cselect_b32 s8, 1, 02679; GFX950-SDAG-NEXT: s_addk_i32 s9, 0xfc102680; GFX950-SDAG-NEXT: s_lshl_b32 s10, s9, 122681; GFX950-SDAG-NEXT: s_or_b32 s8, s11, s82682; GFX950-SDAG-NEXT: s_or_b32 s10, s7, s102683; GFX950-SDAG-NEXT: s_cmp_lt_i32 s9, 12684; GFX950-SDAG-NEXT: s_cselect_b32 s8, s8, s102685; GFX950-SDAG-NEXT: s_and_b32 s10, s8, 72686; GFX950-SDAG-NEXT: s_cmp_gt_i32 s10, 52687; GFX950-SDAG-NEXT: s_cselect_b32 s11, 1, 02688; GFX950-SDAG-NEXT: s_cmp_eq_u32 s10, 32689; GFX950-SDAG-NEXT: s_cselect_b32 s10, 1, 02690; GFX950-SDAG-NEXT: s_lshr_b32 s8, s8, 22691; GFX950-SDAG-NEXT: s_or_b32 s10, s10, s112692; GFX950-SDAG-NEXT: s_add_i32 s8, s8, s102693; GFX950-SDAG-NEXT: s_cmp_lt_i32 s9, 312694; GFX950-SDAG-NEXT: s_cselect_b32 s8, s8, 0x7c002695; GFX950-SDAG-NEXT: s_cmp_lg_u32 s7, 02696; GFX950-SDAG-NEXT: s_cselect_b32 s7, s4, 0x7c002697; GFX950-SDAG-NEXT: s_cmpk_eq_i32 s9, 0x40f2698; GFX950-SDAG-NEXT: s_cselect_b32 s7, s7, s82699; GFX950-SDAG-NEXT: s_and_b32 s8, s6, 0x1ff2700; GFX950-SDAG-NEXT: v_or_b32_e32 v0, s8, v02701; GFX950-SDAG-NEXT: s_lshr_b32 s5, s5, 162702; GFX950-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02703; GFX950-SDAG-NEXT: s_lshr_b32 s9, s6, 82704; GFX950-SDAG-NEXT: s_bfe_u32 s10, s6, 0xb00142705; GFX950-SDAG-NEXT: s_and_b32 s5, s5, 0x80002706; GFX950-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2707; GFX950-SDAG-NEXT: s_and_b32 s8, s9, 0xffe2708; GFX950-SDAG-NEXT: s_sub_i32 s9, 0x3f1, s102709; GFX950-SDAG-NEXT: s_or_b32 s5, s5, s72710; GFX950-SDAG-NEXT: v_readfirstlane_b32 s7, v02711; GFX950-SDAG-NEXT: v_med3_i32 v1, s9, 0, 132712; GFX950-SDAG-NEXT: s_or_b32 s7, s8, s72713; GFX950-SDAG-NEXT: v_readfirstlane_b32 s9, v12714; GFX950-SDAG-NEXT: s_or_b32 s8, s7, 0x10002715; GFX950-SDAG-NEXT: s_lshr_b32 s11, s8, s92716; GFX950-SDAG-NEXT: s_lshl_b32 s9, s11, s92717; GFX950-SDAG-NEXT: s_cmp_lg_u32 s9, s82718; GFX950-SDAG-NEXT: s_cselect_b32 s8, 1, 02719; GFX950-SDAG-NEXT: s_addk_i32 s10, 0xfc102720; GFX950-SDAG-NEXT: s_lshl_b32 s9, s10, 122721; GFX950-SDAG-NEXT: s_or_b32 s8, s11, s82722; GFX950-SDAG-NEXT: s_or_b32 s9, s7, s92723; GFX950-SDAG-NEXT: s_cmp_lt_i32 s10, 12724; GFX950-SDAG-NEXT: s_cselect_b32 s8, s8, s92725; GFX950-SDAG-NEXT: s_and_b32 s9, s8, 72726; GFX950-SDAG-NEXT: s_cmp_gt_i32 s9, 52727; GFX950-SDAG-NEXT: s_cselect_b32 s11, 1, 02728; GFX950-SDAG-NEXT: s_cmp_eq_u32 s9, 32729; GFX950-SDAG-NEXT: s_cselect_b32 s9, 1, 02730; GFX950-SDAG-NEXT: s_lshr_b32 s8, s8, 22731; GFX950-SDAG-NEXT: s_or_b32 s9, s9, s112732; GFX950-SDAG-NEXT: s_add_i32 s8, s8, s92733; GFX950-SDAG-NEXT: s_cmp_lt_i32 s10, 312734; GFX950-SDAG-NEXT: s_cselect_b32 s8, s8, 0x7c002735; GFX950-SDAG-NEXT: s_cmp_lg_u32 s7, 02736; GFX950-SDAG-NEXT: s_cselect_b32 s4, s4, 0x7c002737; GFX950-SDAG-NEXT: s_cmpk_eq_i32 s10, 0x40f2738; GFX950-SDAG-NEXT: s_cselect_b32 s4, s4, s82739; GFX950-SDAG-NEXT: s_lshr_b32 s6, s6, 162740; GFX950-SDAG-NEXT: s_and_b32 s6, s6, 0x80002741; GFX950-SDAG-NEXT: s_or_b32 s4, s6, s42742; GFX950-SDAG-NEXT: s_pack_ll_b32_b16 s4, s4, s52743; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s42744; GFX950-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], 02745; GFX950-SDAG-NEXT: s_endpgm2746;2747; GFX950-GISEL-LABEL: fptrunc_v2f64_to_v2f16:2748; GFX950-GISEL: ; %bb.0: ; %entry2749; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242750; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)2751; GFX950-GISEL-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x02752; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)2753; GFX950-GISEL-NEXT: s_bfe_u32 s2, s5, 0xb00142754; GFX950-GISEL-NEXT: s_lshr_b32 s3, s5, 82755; GFX950-GISEL-NEXT: s_and_b32 s8, s5, 0x1ff2756; GFX950-GISEL-NEXT: s_addk_i32 s2, 0xfc102757; GFX950-GISEL-NEXT: s_and_b32 s3, s3, 0xffe2758; GFX950-GISEL-NEXT: s_or_b32 s4, s8, s42759; GFX950-GISEL-NEXT: s_cselect_b32 s4, 1, 02760; GFX950-GISEL-NEXT: s_or_b32 s3, s3, s42761; GFX950-GISEL-NEXT: s_cselect_b32 s4, 1, 02762; GFX950-GISEL-NEXT: s_sub_i32 s9, 1, s22763; GFX950-GISEL-NEXT: s_lshl_b32 s8, s2, 122764; GFX950-GISEL-NEXT: s_max_i32 s9, s9, 02765; GFX950-GISEL-NEXT: s_or_b32 s8, s3, s82766; GFX950-GISEL-NEXT: s_min_i32 s9, s9, 132767; GFX950-GISEL-NEXT: s_bitset1_b32 s3, 122768; GFX950-GISEL-NEXT: s_lshl_b32 s4, s4, 92769; GFX950-GISEL-NEXT: s_lshr_b32 s10, s3, s92770; GFX950-GISEL-NEXT: s_or_b32 s4, s4, 0x7c002771; GFX950-GISEL-NEXT: s_lshl_b32 s9, s10, s92772; GFX950-GISEL-NEXT: s_cmp_lg_u32 s9, s32773; GFX950-GISEL-NEXT: s_cselect_b32 s3, 1, 02774; GFX950-GISEL-NEXT: s_or_b32 s3, s10, s32775; GFX950-GISEL-NEXT: s_cmp_lt_i32 s2, 12776; GFX950-GISEL-NEXT: s_cselect_b32 s3, s3, s82777; GFX950-GISEL-NEXT: s_and_b32 s8, s3, 72778; GFX950-GISEL-NEXT: s_lshr_b32 s3, s3, 22779; GFX950-GISEL-NEXT: s_cmp_eq_u32 s8, 32780; GFX950-GISEL-NEXT: s_cselect_b32 s9, 1, 02781; GFX950-GISEL-NEXT: s_cmp_gt_i32 s8, 52782; GFX950-GISEL-NEXT: s_cselect_b32 s8, 1, 02783; GFX950-GISEL-NEXT: s_or_b32 s8, s9, s82784; GFX950-GISEL-NEXT: s_add_i32 s3, s3, s82785; GFX950-GISEL-NEXT: s_cmp_gt_i32 s2, 302786; GFX950-GISEL-NEXT: s_cselect_b32 s3, 0x7c00, s32787; GFX950-GISEL-NEXT: s_cmpk_eq_i32 s2, 0x40f2788; GFX950-GISEL-NEXT: s_cselect_b32 s2, s4, s32789; GFX950-GISEL-NEXT: s_lshr_b32 s3, s5, 162790; GFX950-GISEL-NEXT: s_and_b32 s3, s3, 0x80002791; GFX950-GISEL-NEXT: s_or_b32 s2, s3, s22792; GFX950-GISEL-NEXT: s_bfe_u32 s3, s7, 0xb00142793; GFX950-GISEL-NEXT: s_lshr_b32 s4, s7, 82794; GFX950-GISEL-NEXT: s_addk_i32 s3, 0xfc102795; GFX950-GISEL-NEXT: s_and_b32 s4, s4, 0xffe2796; GFX950-GISEL-NEXT: s_and_b32 s5, s7, 0x1ff2797; GFX950-GISEL-NEXT: s_or_b32 s5, s5, s62798; GFX950-GISEL-NEXT: s_cselect_b32 s5, 1, 02799; GFX950-GISEL-NEXT: s_or_b32 s4, s4, s52800; GFX950-GISEL-NEXT: s_cselect_b32 s5, 1, 02801; GFX950-GISEL-NEXT: s_sub_i32 s8, 1, s32802; GFX950-GISEL-NEXT: s_lshl_b32 s6, s3, 122803; GFX950-GISEL-NEXT: s_max_i32 s8, s8, 02804; GFX950-GISEL-NEXT: s_or_b32 s6, s4, s62805; GFX950-GISEL-NEXT: s_min_i32 s8, s8, 132806; GFX950-GISEL-NEXT: s_bitset1_b32 s4, 122807; GFX950-GISEL-NEXT: s_lshl_b32 s5, s5, 92808; GFX950-GISEL-NEXT: s_lshr_b32 s9, s4, s82809; GFX950-GISEL-NEXT: s_or_b32 s5, s5, 0x7c002810; GFX950-GISEL-NEXT: s_lshl_b32 s8, s9, s82811; GFX950-GISEL-NEXT: s_cmp_lg_u32 s8, s42812; GFX950-GISEL-NEXT: s_cselect_b32 s4, 1, 02813; GFX950-GISEL-NEXT: s_or_b32 s4, s9, s42814; GFX950-GISEL-NEXT: s_cmp_lt_i32 s3, 12815; GFX950-GISEL-NEXT: s_cselect_b32 s4, s4, s62816; GFX950-GISEL-NEXT: s_and_b32 s6, s4, 72817; GFX950-GISEL-NEXT: s_lshr_b32 s4, s4, 22818; GFX950-GISEL-NEXT: s_cmp_eq_u32 s6, 32819; GFX950-GISEL-NEXT: s_cselect_b32 s8, 1, 02820; GFX950-GISEL-NEXT: s_cmp_gt_i32 s6, 52821; GFX950-GISEL-NEXT: s_cselect_b32 s6, 1, 02822; GFX950-GISEL-NEXT: s_or_b32 s6, s8, s62823; GFX950-GISEL-NEXT: s_add_i32 s4, s4, s62824; GFX950-GISEL-NEXT: s_cmp_gt_i32 s3, 302825; GFX950-GISEL-NEXT: s_cselect_b32 s4, 0x7c00, s42826; GFX950-GISEL-NEXT: s_cmpk_eq_i32 s3, 0x40f2827; GFX950-GISEL-NEXT: s_cselect_b32 s3, s5, s42828; GFX950-GISEL-NEXT: s_lshr_b32 s4, s7, 162829; GFX950-GISEL-NEXT: s_and_b32 s4, s4, 0x80002830; GFX950-GISEL-NEXT: s_or_b32 s3, s4, s32831; GFX950-GISEL-NEXT: s_pack_ll_b32_b16 s2, s2, s32832; GFX950-GISEL-NEXT: v_mov_b32_e32 v0, s22833; GFX950-GISEL-NEXT: s_mov_b32 s2, -12834; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf0002835; GFX950-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 02836; GFX950-GISEL-NEXT: s_endpgm2837;2838; GFX11-SDAG-TRUE16-LABEL: fptrunc_v2f64_to_v2f16:2839; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry2840; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x242841; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -12842; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160002843; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s62844; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s72845; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)2846; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s22847; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s32848; GFX11-SDAG-TRUE16-NEXT: buffer_load_b128 v[0:3], off, s[8:11], 02849; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)2850; GFX11-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s2, v32851; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s3, s2, 0x1ff2852; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s5, s2, 82853; GFX11-SDAG-TRUE16-NEXT: v_or_b32_e32 v2, s3, v22854; GFX11-SDAG-TRUE16-NEXT: s_bfe_u32 s3, s2, 0xb00142855; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s5, s5, 0xffe2856; GFX11-SDAG-TRUE16-NEXT: s_sub_i32 s4, 0x3f1, s32857; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)2858; GFX11-SDAG-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22859; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v3, s4, 0, 132860; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo2861; GFX11-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s8, v32862; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2863; GFX11-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s4, v22864; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s4, s5, s42865; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s5, s4, 0x10002866; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2867; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s9, s5, s82868; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s8, s9, s82869; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)2870; GFX11-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s8, s52871; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s5, 1, 02872; GFX11-SDAG-TRUE16-NEXT: s_addk_i32 s3, 0xfc102873; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s5, s9, s52874; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s8, s3, 122875; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s8, s4, s82876; GFX11-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s3, 12877; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s5, s5, s82878; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2879; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s8, s5, 72880; GFX11-SDAG-TRUE16-NEXT: s_cmp_gt_i32 s8, 52881; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s9, 1, 02882; GFX11-SDAG-TRUE16-NEXT: s_cmp_eq_u32 s8, 32883; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s8, 1, 02884; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s5, s5, 22885; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s8, s8, s92886; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2887; GFX11-SDAG-TRUE16-NEXT: s_add_i32 s5, s5, s82888; GFX11-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s3, 312889; GFX11-SDAG-TRUE16-NEXT: s_movk_i32 s8, 0x7e002890; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s5, s5, 0x7c002891; GFX11-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s4, 02892; GFX11-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s4, v12893; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s9, s8, 0x7c002894; GFX11-SDAG-TRUE16-NEXT: s_cmpk_eq_i32 s3, 0x40f2895; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s3, s9, s52896; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s5, s4, 0x1ff2897; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s10, s4, 82898; GFX11-SDAG-TRUE16-NEXT: v_or_b32_e32 v0, s5, v02899; GFX11-SDAG-TRUE16-NEXT: s_bfe_u32 s5, s4, 0xb00142900; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s10, s10, 0xffe2901; GFX11-SDAG-TRUE16-NEXT: s_sub_i32 s9, 0x3f1, s52902; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s2, s2, 162903; GFX11-SDAG-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v02904; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v1, s9, 0, 132905; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s2, s2, 0x80002906; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2907; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s2, s2, s32908; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2909; GFX11-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s11, v12910; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2911; GFX11-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s9, v02912; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s9, s10, s92913; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s10, s9, 0x10002914; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2915; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s12, s10, s112916; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s11, s12, s112917; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)2918; GFX11-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s11, s102919; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s3, 1, 02920; GFX11-SDAG-TRUE16-NEXT: s_addk_i32 s5, 0xfc102921; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s3, s12, s32922; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s10, s5, 122923; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s10, s9, s102924; GFX11-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s5, 12925; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s3, s3, s102926; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2927; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s10, s3, 72928; GFX11-SDAG-TRUE16-NEXT: s_cmp_gt_i32 s10, 52929; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s11, 1, 02930; GFX11-SDAG-TRUE16-NEXT: s_cmp_eq_u32 s10, 32931; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s10, 1, 02932; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s3, s3, 22933; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s10, s10, s112934; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2935; GFX11-SDAG-TRUE16-NEXT: s_add_i32 s3, s3, s102936; GFX11-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s5, 312937; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s3, s3, 0x7c002938; GFX11-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s9, 02939; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s8, s8, 0x7c002940; GFX11-SDAG-TRUE16-NEXT: s_cmpk_eq_i32 s5, 0x40f2941; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s12942; GFX11-SDAG-TRUE16-NEXT: s_cselect_b32 s3, s8, s32943; GFX11-SDAG-TRUE16-NEXT: s_lshr_b32 s4, s4, 162944; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2945; GFX11-SDAG-TRUE16-NEXT: s_and_b32 s4, s4, 0x80002946; GFX11-SDAG-TRUE16-NEXT: s_or_b32 s3, s4, s32947; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s02948; GFX11-SDAG-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s3, s22949; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2950; GFX11-SDAG-TRUE16-NEXT: v_mov_b32_e32 v0, s22951; GFX11-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], 02952; GFX11-SDAG-TRUE16-NEXT: s_endpgm2953;2954; GFX11-SDAG-FAKE16-LABEL: fptrunc_v2f64_to_v2f16:2955; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry2956; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x242957; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -12958; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160002959; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s62960; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s72961; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)2962; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s22963; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s32964; GFX11-SDAG-FAKE16-NEXT: buffer_load_b128 v[0:3], off, s[8:11], 02965; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)2966; GFX11-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s2, v32967; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s3, s2, 0x1ff2968; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s5, s2, 82969; GFX11-SDAG-FAKE16-NEXT: v_or_b32_e32 v2, s3, v22970; GFX11-SDAG-FAKE16-NEXT: s_bfe_u32 s3, s2, 0xb00142971; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s5, s5, 0xffe2972; GFX11-SDAG-FAKE16-NEXT: s_sub_i32 s4, 0x3f1, s32973; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)2974; GFX11-SDAG-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22975; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v3, s4, 0, 132976; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo2977; GFX11-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s8, v32978; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2979; GFX11-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s4, v22980; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s4, s5, s42981; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s5, s4, 0x10002982; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2983; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s9, s5, s82984; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s8, s9, s82985; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)2986; GFX11-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s8, s52987; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s5, 1, 02988; GFX11-SDAG-FAKE16-NEXT: s_addk_i32 s3, 0xfc102989; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s5, s9, s52990; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s8, s3, 122991; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s8, s4, s82992; GFX11-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s3, 12993; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s5, s5, s82994; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2995; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s8, s5, 72996; GFX11-SDAG-FAKE16-NEXT: s_cmp_gt_i32 s8, 52997; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s9, 1, 02998; GFX11-SDAG-FAKE16-NEXT: s_cmp_eq_u32 s8, 32999; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s8, 1, 03000; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s5, s5, 23001; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s8, s8, s93002; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3003; GFX11-SDAG-FAKE16-NEXT: s_add_i32 s5, s5, s83004; GFX11-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s3, 313005; GFX11-SDAG-FAKE16-NEXT: s_movk_i32 s8, 0x7e003006; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s5, s5, 0x7c003007; GFX11-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s4, 03008; GFX11-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s4, v13009; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s9, s8, 0x7c003010; GFX11-SDAG-FAKE16-NEXT: s_cmpk_eq_i32 s3, 0x40f3011; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s3, s9, s53012; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s5, s4, 0x1ff3013; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s10, s4, 83014; GFX11-SDAG-FAKE16-NEXT: v_or_b32_e32 v0, s5, v03015; GFX11-SDAG-FAKE16-NEXT: s_bfe_u32 s5, s4, 0xb00143016; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s10, s10, 0xffe3017; GFX11-SDAG-FAKE16-NEXT: s_sub_i32 s9, 0x3f1, s53018; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s2, s2, 163019; GFX11-SDAG-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v03020; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v1, s9, 0, 133021; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s2, s2, 0x80003022; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)3023; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s2, s2, s33024; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3025; GFX11-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s11, v13026; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)3027; GFX11-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s9, v03028; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s9, s10, s93029; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s10, s9, 0x10003030; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3031; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s12, s10, s113032; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s11, s12, s113033; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)3034; GFX11-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s11, s103035; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s3, 1, 03036; GFX11-SDAG-FAKE16-NEXT: s_addk_i32 s5, 0xfc103037; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s3, s12, s33038; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s10, s5, 123039; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s10, s9, s103040; GFX11-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s5, 13041; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s3, s3, s103042; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3043; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s10, s3, 73044; GFX11-SDAG-FAKE16-NEXT: s_cmp_gt_i32 s10, 53045; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s11, 1, 03046; GFX11-SDAG-FAKE16-NEXT: s_cmp_eq_u32 s10, 33047; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s10, 1, 03048; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s3, s3, 23049; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s10, s10, s113050; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3051; GFX11-SDAG-FAKE16-NEXT: s_add_i32 s3, s3, s103052; GFX11-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s5, 313053; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s3, s3, 0x7c003054; GFX11-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s9, 03055; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s8, s8, 0x7c003056; GFX11-SDAG-FAKE16-NEXT: s_cmpk_eq_i32 s5, 0x40f3057; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s13058; GFX11-SDAG-FAKE16-NEXT: s_cselect_b32 s3, s8, s33059; GFX11-SDAG-FAKE16-NEXT: s_lshr_b32 s4, s4, 163060; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3061; GFX11-SDAG-FAKE16-NEXT: s_and_b32 s4, s4, 0x80003062; GFX11-SDAG-FAKE16-NEXT: s_or_b32 s3, s4, s33063; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s03064; GFX11-SDAG-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s3, s23065; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3066; GFX11-SDAG-FAKE16-NEXT: v_mov_b32_e32 v0, s23067; GFX11-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], 03068; GFX11-SDAG-FAKE16-NEXT: s_endpgm3069;3070; GFX11-GISEL-TRUE16-LABEL: fptrunc_v2f64_to_v2f16:3071; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry3072; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243073; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)3074; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[4:7], s[2:3], 0x03075; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)3076; GFX11-GISEL-TRUE16-NEXT: s_bfe_u32 s2, s5, 0xb00143077; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s3, s5, 83078; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s8, s5, 0x1ff3079; GFX11-GISEL-TRUE16-NEXT: s_addk_i32 s2, 0xfc103080; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s3, s3, 0xffe3081; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s4, s8, s43082; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s4, 1, 03083; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3084; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s3, s3, s43085; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s4, 1, 03086; GFX11-GISEL-TRUE16-NEXT: s_sub_i32 s8, 1, s23087; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s10, s3, 0x10003088; GFX11-GISEL-TRUE16-NEXT: s_max_i32 s8, s8, 03089; GFX11-GISEL-TRUE16-NEXT: s_lshl_b32 s9, s2, 123090; GFX11-GISEL-TRUE16-NEXT: s_min_i32 s8, s8, 133091; GFX11-GISEL-TRUE16-NEXT: s_lshl_b32 s4, s4, 93092; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s11, s10, s83093; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s3, s3, s93094; GFX11-GISEL-TRUE16-NEXT: s_lshl_b32 s8, s11, s83095; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s4, s4, 0x7c003096; GFX11-GISEL-TRUE16-NEXT: s_cmp_lg_u32 s8, s103097; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s8, 1, 03098; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)3099; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s8, s11, s83100; GFX11-GISEL-TRUE16-NEXT: s_cmp_lt_i32 s2, 13101; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s3, s8, s33102; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s8, s3, 73103; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s3, s3, 23104; GFX11-GISEL-TRUE16-NEXT: s_cmp_eq_u32 s8, 33105; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s9, 1, 03106; GFX11-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s8, 53107; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s8, 1, 03108; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3109; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s8, s9, s83110; GFX11-GISEL-TRUE16-NEXT: s_add_i32 s3, s3, s83111; GFX11-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s2, 303112; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s3, 0x7c00, s33113; GFX11-GISEL-TRUE16-NEXT: s_cmpk_eq_i32 s2, 0x40f3114; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s2, s4, s33115; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s3, s5, 163116; GFX11-GISEL-TRUE16-NEXT: s_bfe_u32 s4, s7, 0xb00143117; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s5, s7, 83118; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s3, s3, 0x80003119; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s8, s7, 0x1ff3120; GFX11-GISEL-TRUE16-NEXT: s_addk_i32 s4, 0xfc103121; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s5, s5, 0xffe3122; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s2, s3, s23123; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s3, s8, s63124; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s3, 1, 03125; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3126; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s3, s5, s33127; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s5, 1, 03128; GFX11-GISEL-TRUE16-NEXT: s_sub_i32 s6, 1, s43129; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s9, s3, 0x10003130; GFX11-GISEL-TRUE16-NEXT: s_max_i32 s6, s6, 03131; GFX11-GISEL-TRUE16-NEXT: s_lshl_b32 s8, s4, 123132; GFX11-GISEL-TRUE16-NEXT: s_min_i32 s6, s6, 133133; GFX11-GISEL-TRUE16-NEXT: s_lshl_b32 s5, s5, 93134; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s10, s9, s63135; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s3, s3, s83136; GFX11-GISEL-TRUE16-NEXT: s_lshl_b32 s6, s10, s63137; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s5, s5, 0x7c003138; GFX11-GISEL-TRUE16-NEXT: s_cmp_lg_u32 s6, s93139; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s6, 1, 03140; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)3141; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s6, s10, s63142; GFX11-GISEL-TRUE16-NEXT: s_cmp_lt_i32 s4, 13143; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s3, s6, s33144; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s6, s3, 73145; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s3, s3, 23146; GFX11-GISEL-TRUE16-NEXT: s_cmp_eq_u32 s6, 33147; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s8, 1, 03148; GFX11-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s6, 53149; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s6, 1, 03150; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3151; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s6, s8, s63152; GFX11-GISEL-TRUE16-NEXT: s_add_i32 s3, s3, s63153; GFX11-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s4, 303154; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s3, 0x7c00, s33155; GFX11-GISEL-TRUE16-NEXT: s_cmpk_eq_i32 s4, 0x40f3156; GFX11-GISEL-TRUE16-NEXT: s_cselect_b32 s3, s5, s33157; GFX11-GISEL-TRUE16-NEXT: s_lshr_b32 s4, s7, 163158; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3159; GFX11-GISEL-TRUE16-NEXT: s_and_b32 s4, s4, 0x80003160; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s3, s4, s33161; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3162; GFX11-GISEL-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s33163; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160003164; GFX11-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s23165; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -13166; GFX11-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], 03167; GFX11-GISEL-TRUE16-NEXT: s_endpgm3168;3169; GFX11-GISEL-FAKE16-LABEL: fptrunc_v2f64_to_v2f16:3170; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry3171; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243172; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)3173; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[4:7], s[2:3], 0x03174; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)3175; GFX11-GISEL-FAKE16-NEXT: s_bfe_u32 s2, s5, 0xb00143176; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s3, s5, 83177; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s8, s5, 0x1ff3178; GFX11-GISEL-FAKE16-NEXT: s_addk_i32 s2, 0xfc103179; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s3, s3, 0xffe3180; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s4, s8, s43181; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s4, 1, 03182; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3183; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s3, s3, s43184; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s4, 1, 03185; GFX11-GISEL-FAKE16-NEXT: s_sub_i32 s8, 1, s23186; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s10, s3, 0x10003187; GFX11-GISEL-FAKE16-NEXT: s_max_i32 s8, s8, 03188; GFX11-GISEL-FAKE16-NEXT: s_lshl_b32 s9, s2, 123189; GFX11-GISEL-FAKE16-NEXT: s_min_i32 s8, s8, 133190; GFX11-GISEL-FAKE16-NEXT: s_lshl_b32 s4, s4, 93191; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s11, s10, s83192; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s3, s3, s93193; GFX11-GISEL-FAKE16-NEXT: s_lshl_b32 s8, s11, s83194; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s4, s4, 0x7c003195; GFX11-GISEL-FAKE16-NEXT: s_cmp_lg_u32 s8, s103196; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s8, 1, 03197; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)3198; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s8, s11, s83199; GFX11-GISEL-FAKE16-NEXT: s_cmp_lt_i32 s2, 13200; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s3, s8, s33201; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s8, s3, 73202; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s3, s3, 23203; GFX11-GISEL-FAKE16-NEXT: s_cmp_eq_u32 s8, 33204; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s9, 1, 03205; GFX11-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s8, 53206; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s8, 1, 03207; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3208; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s8, s9, s83209; GFX11-GISEL-FAKE16-NEXT: s_add_i32 s3, s3, s83210; GFX11-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s2, 303211; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s3, 0x7c00, s33212; GFX11-GISEL-FAKE16-NEXT: s_cmpk_eq_i32 s2, 0x40f3213; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s2, s4, s33214; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s3, s5, 163215; GFX11-GISEL-FAKE16-NEXT: s_bfe_u32 s4, s7, 0xb00143216; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s5, s7, 83217; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s3, s3, 0x80003218; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s8, s7, 0x1ff3219; GFX11-GISEL-FAKE16-NEXT: s_addk_i32 s4, 0xfc103220; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s5, s5, 0xffe3221; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s2, s3, s23222; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s3, s8, s63223; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s3, 1, 03224; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3225; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s3, s5, s33226; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s5, 1, 03227; GFX11-GISEL-FAKE16-NEXT: s_sub_i32 s6, 1, s43228; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s9, s3, 0x10003229; GFX11-GISEL-FAKE16-NEXT: s_max_i32 s6, s6, 03230; GFX11-GISEL-FAKE16-NEXT: s_lshl_b32 s8, s4, 123231; GFX11-GISEL-FAKE16-NEXT: s_min_i32 s6, s6, 133232; GFX11-GISEL-FAKE16-NEXT: s_lshl_b32 s5, s5, 93233; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s10, s9, s63234; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s3, s3, s83235; GFX11-GISEL-FAKE16-NEXT: s_lshl_b32 s6, s10, s63236; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s5, s5, 0x7c003237; GFX11-GISEL-FAKE16-NEXT: s_cmp_lg_u32 s6, s93238; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s6, 1, 03239; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)3240; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s6, s10, s63241; GFX11-GISEL-FAKE16-NEXT: s_cmp_lt_i32 s4, 13242; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s3, s6, s33243; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s6, s3, 73244; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s3, s3, 23245; GFX11-GISEL-FAKE16-NEXT: s_cmp_eq_u32 s6, 33246; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s8, 1, 03247; GFX11-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s6, 53248; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s6, 1, 03249; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3250; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s6, s8, s63251; GFX11-GISEL-FAKE16-NEXT: s_add_i32 s3, s3, s63252; GFX11-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s4, 303253; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s3, 0x7c00, s33254; GFX11-GISEL-FAKE16-NEXT: s_cmpk_eq_i32 s4, 0x40f3255; GFX11-GISEL-FAKE16-NEXT: s_cselect_b32 s3, s5, s33256; GFX11-GISEL-FAKE16-NEXT: s_lshr_b32 s4, s7, 163257; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3258; GFX11-GISEL-FAKE16-NEXT: s_and_b32 s4, s4, 0x80003259; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s3, s4, s33260; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3261; GFX11-GISEL-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s33262; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160003263; GFX11-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s23264; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -13265; GFX11-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], 03266; GFX11-GISEL-FAKE16-NEXT: s_endpgm3267;3268; GFX1250-SDAG-TRUE16-LABEL: fptrunc_v2f64_to_v2f16:3269; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry3270; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 13271; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243272; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -13273; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160003274; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s63275; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s73276; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x03277; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s23278; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s33279; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b128 v[0:3], off, s[8:11], null3280; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x03281; GFX1250-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s2, v33282; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s3, s2, 0x1ff3283; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s5, s2, 83284; GFX1250-SDAG-TRUE16-NEXT: v_or_b32_e32 v2, s3, v23285; GFX1250-SDAG-TRUE16-NEXT: s_bfe_u32 s3, s2, 0xb00143286; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s5, s5, 0xffe3287; GFX1250-SDAG-TRUE16-NEXT: s_sub_co_i32 s4, 0x3f1, s33288; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)3289; GFX1250-SDAG-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v23290; GFX1250-SDAG-TRUE16-NEXT: v_med3_i32 v3, s4, 0, 133291; GFX1250-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo3292; GFX1250-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s8, v33293; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)3294; GFX1250-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s4, v23295; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s4, s5, s43296; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s5, s4, 0x10003297; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3298; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s9, s5, s83299; GFX1250-SDAG-TRUE16-NEXT: s_lshl_b32 s8, s9, s83300; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)3301; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s8, s53302; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s5, 1, 03303; GFX1250-SDAG-TRUE16-NEXT: s_addk_co_i32 s3, 0xfc103304; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s5, s9, s53305; GFX1250-SDAG-TRUE16-NEXT: s_lshl_b32 s8, s3, 123306; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s8, s4, s83307; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s3, 13308; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s5, s5, s83309; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3310; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s8, s5, 73311; GFX1250-SDAG-TRUE16-NEXT: s_cmp_gt_i32 s8, 53312; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s9, 1, 03313; GFX1250-SDAG-TRUE16-NEXT: s_cmp_eq_u32 s8, 33314; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s8, 1, 03315; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s5, s5, 23316; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s8, s8, s93317; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3318; GFX1250-SDAG-TRUE16-NEXT: s_add_co_i32 s5, s5, s83319; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s3, 313320; GFX1250-SDAG-TRUE16-NEXT: s_movk_i32 s8, 0x7e003321; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s5, s5, 0x7c003322; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s4, 03323; GFX1250-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s4, v13324; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s9, s8, 0x7c003325; GFX1250-SDAG-TRUE16-NEXT: s_cmp_eq_u32 s3, 0x40f3326; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s3, s9, s53327; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s5, s4, 0x1ff3328; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s10, s4, 83329; GFX1250-SDAG-TRUE16-NEXT: v_or_b32_e32 v0, s5, v03330; GFX1250-SDAG-TRUE16-NEXT: s_bfe_u32 s5, s4, 0xb00143331; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s10, s10, 0xffe3332; GFX1250-SDAG-TRUE16-NEXT: s_sub_co_i32 s9, 0x3f1, s53333; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s2, s2, 163334; GFX1250-SDAG-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v03335; GFX1250-SDAG-TRUE16-NEXT: v_med3_i32 v1, s9, 0, 133336; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s2, s2, 0x80003337; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)3338; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s2, s2, s33339; GFX1250-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3340; GFX1250-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s11, v13341; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)3342; GFX1250-SDAG-TRUE16-NEXT: v_readfirstlane_b32 s9, v03343; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s9, s10, s93344; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s10, s9, 0x10003345; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3346; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s12, s10, s113347; GFX1250-SDAG-TRUE16-NEXT: s_lshl_b32 s11, s12, s113348; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)3349; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s11, s103350; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s3, 1, 03351; GFX1250-SDAG-TRUE16-NEXT: s_addk_co_i32 s5, 0xfc103352; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s3, s12, s33353; GFX1250-SDAG-TRUE16-NEXT: s_lshl_b32 s10, s5, 123354; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s10, s9, s103355; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s5, 13356; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s3, s3, s103357; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3358; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s10, s3, 73359; GFX1250-SDAG-TRUE16-NEXT: s_cmp_gt_i32 s10, 53360; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s11, 1, 03361; GFX1250-SDAG-TRUE16-NEXT: s_cmp_eq_u32 s10, 33362; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s10, 1, 03363; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s3, s3, 23364; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s10, s10, s113365; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3366; GFX1250-SDAG-TRUE16-NEXT: s_add_co_i32 s3, s3, s103367; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lt_i32 s5, 313368; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s3, s3, 0x7c003369; GFX1250-SDAG-TRUE16-NEXT: s_cmp_lg_u32 s9, 03370; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s8, s8, 0x7c003371; GFX1250-SDAG-TRUE16-NEXT: s_cmp_eq_u32 s5, 0x40f3372; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s13373; GFX1250-SDAG-TRUE16-NEXT: s_cselect_b32 s3, s8, s33374; GFX1250-SDAG-TRUE16-NEXT: s_lshr_b32 s4, s4, 163375; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3376; GFX1250-SDAG-TRUE16-NEXT: s_and_b32 s4, s4, 0x80003377; GFX1250-SDAG-TRUE16-NEXT: s_or_b32 s3, s4, s33378; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s03379; GFX1250-SDAG-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s3, s23380; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3381; GFX1250-SDAG-TRUE16-NEXT: v_mov_b32_e32 v0, s23382; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], null3383; GFX1250-SDAG-TRUE16-NEXT: s_endpgm3384;3385; GFX1250-SDAG-FAKE16-LABEL: fptrunc_v2f64_to_v2f16:3386; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry3387; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 13388; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243389; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -13390; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160003391; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s63392; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s73393; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x03394; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s23395; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s33396; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b128 v[0:3], off, s[8:11], null3397; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x03398; GFX1250-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s2, v33399; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s3, s2, 0x1ff3400; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s5, s2, 83401; GFX1250-SDAG-FAKE16-NEXT: v_or_b32_e32 v2, s3, v23402; GFX1250-SDAG-FAKE16-NEXT: s_bfe_u32 s3, s2, 0xb00143403; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s5, s5, 0xffe3404; GFX1250-SDAG-FAKE16-NEXT: s_sub_co_i32 s4, 0x3f1, s33405; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)3406; GFX1250-SDAG-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v23407; GFX1250-SDAG-FAKE16-NEXT: v_med3_i32 v3, s4, 0, 133408; GFX1250-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo3409; GFX1250-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s8, v33410; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)3411; GFX1250-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s4, v23412; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s4, s5, s43413; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s5, s4, 0x10003414; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3415; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s9, s5, s83416; GFX1250-SDAG-FAKE16-NEXT: s_lshl_b32 s8, s9, s83417; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)3418; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s8, s53419; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s5, 1, 03420; GFX1250-SDAG-FAKE16-NEXT: s_addk_co_i32 s3, 0xfc103421; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s5, s9, s53422; GFX1250-SDAG-FAKE16-NEXT: s_lshl_b32 s8, s3, 123423; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s8, s4, s83424; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s3, 13425; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s5, s5, s83426; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3427; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s8, s5, 73428; GFX1250-SDAG-FAKE16-NEXT: s_cmp_gt_i32 s8, 53429; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s9, 1, 03430; GFX1250-SDAG-FAKE16-NEXT: s_cmp_eq_u32 s8, 33431; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s8, 1, 03432; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s5, s5, 23433; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s8, s8, s93434; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3435; GFX1250-SDAG-FAKE16-NEXT: s_add_co_i32 s5, s5, s83436; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s3, 313437; GFX1250-SDAG-FAKE16-NEXT: s_movk_i32 s8, 0x7e003438; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s5, s5, 0x7c003439; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s4, 03440; GFX1250-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s4, v13441; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s9, s8, 0x7c003442; GFX1250-SDAG-FAKE16-NEXT: s_cmp_eq_u32 s3, 0x40f3443; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s3, s9, s53444; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s5, s4, 0x1ff3445; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s10, s4, 83446; GFX1250-SDAG-FAKE16-NEXT: v_or_b32_e32 v0, s5, v03447; GFX1250-SDAG-FAKE16-NEXT: s_bfe_u32 s5, s4, 0xb00143448; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s10, s10, 0xffe3449; GFX1250-SDAG-FAKE16-NEXT: s_sub_co_i32 s9, 0x3f1, s53450; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s2, s2, 163451; GFX1250-SDAG-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v03452; GFX1250-SDAG-FAKE16-NEXT: v_med3_i32 v1, s9, 0, 133453; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s2, s2, 0x80003454; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)3455; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s2, s2, s33456; GFX1250-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3457; GFX1250-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s11, v13458; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)3459; GFX1250-SDAG-FAKE16-NEXT: v_readfirstlane_b32 s9, v03460; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s9, s10, s93461; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s10, s9, 0x10003462; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3463; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s12, s10, s113464; GFX1250-SDAG-FAKE16-NEXT: s_lshl_b32 s11, s12, s113465; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)3466; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s11, s103467; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s3, 1, 03468; GFX1250-SDAG-FAKE16-NEXT: s_addk_co_i32 s5, 0xfc103469; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s3, s12, s33470; GFX1250-SDAG-FAKE16-NEXT: s_lshl_b32 s10, s5, 123471; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s10, s9, s103472; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s5, 13473; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s3, s3, s103474; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3475; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s10, s3, 73476; GFX1250-SDAG-FAKE16-NEXT: s_cmp_gt_i32 s10, 53477; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s11, 1, 03478; GFX1250-SDAG-FAKE16-NEXT: s_cmp_eq_u32 s10, 33479; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s10, 1, 03480; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s3, s3, 23481; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s10, s10, s113482; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3483; GFX1250-SDAG-FAKE16-NEXT: s_add_co_i32 s3, s3, s103484; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lt_i32 s5, 313485; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s3, s3, 0x7c003486; GFX1250-SDAG-FAKE16-NEXT: s_cmp_lg_u32 s9, 03487; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s8, s8, 0x7c003488; GFX1250-SDAG-FAKE16-NEXT: s_cmp_eq_u32 s5, 0x40f3489; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s13490; GFX1250-SDAG-FAKE16-NEXT: s_cselect_b32 s3, s8, s33491; GFX1250-SDAG-FAKE16-NEXT: s_lshr_b32 s4, s4, 163492; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3493; GFX1250-SDAG-FAKE16-NEXT: s_and_b32 s4, s4, 0x80003494; GFX1250-SDAG-FAKE16-NEXT: s_or_b32 s3, s4, s33495; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s03496; GFX1250-SDAG-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s3, s23497; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3498; GFX1250-SDAG-FAKE16-NEXT: v_mov_b32_e32 v0, s23499; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], null3500; GFX1250-SDAG-FAKE16-NEXT: s_endpgm3501;3502; GFX1250-GISEL-TRUE16-LABEL: fptrunc_v2f64_to_v2f16:3503; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry3504; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 13505; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243506; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x03507; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[4:7], s[2:3], 0x03508; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x03509; GFX1250-GISEL-TRUE16-NEXT: s_bfe_u32 s2, s5, 0xb00143510; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s3, s5, 83511; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s8, s5, 0x1ff3512; GFX1250-GISEL-TRUE16-NEXT: s_addk_co_i32 s2, 0xfc103513; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s3, s3, 0xffe3514; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s4, s8, s43515; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s4, 1, 03516; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3517; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s3, s3, s43518; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s4, 1, 03519; GFX1250-GISEL-TRUE16-NEXT: s_sub_co_i32 s8, 1, s23520; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s10, s3, 0x10003521; GFX1250-GISEL-TRUE16-NEXT: s_max_i32 s8, s8, 03522; GFX1250-GISEL-TRUE16-NEXT: s_lshl_b32 s9, s2, 123523; GFX1250-GISEL-TRUE16-NEXT: s_min_i32 s8, s8, 133524; GFX1250-GISEL-TRUE16-NEXT: s_lshl_b32 s4, s4, 93525; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s11, s10, s83526; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s3, s3, s93527; GFX1250-GISEL-TRUE16-NEXT: s_lshl_b32 s8, s11, s83528; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s4, s4, 0x7c003529; GFX1250-GISEL-TRUE16-NEXT: s_cmp_lg_u32 s8, s103530; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s8, 1, 03531; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)3532; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s8, s11, s83533; GFX1250-GISEL-TRUE16-NEXT: s_cmp_lt_i32 s2, 13534; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s3, s8, s33535; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s8, s3, 73536; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s3, s3, 23537; GFX1250-GISEL-TRUE16-NEXT: s_cmp_eq_u32 s8, 33538; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s9, 1, 03539; GFX1250-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s8, 53540; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s8, 1, 03541; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3542; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s8, s9, s83543; GFX1250-GISEL-TRUE16-NEXT: s_add_co_i32 s3, s3, s83544; GFX1250-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s2, 303545; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s3, 0x7c00, s33546; GFX1250-GISEL-TRUE16-NEXT: s_cmp_eq_u32 s2, 0x40f3547; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s2, s4, s33548; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s3, s5, 163549; GFX1250-GISEL-TRUE16-NEXT: s_bfe_u32 s4, s7, 0xb00143550; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s5, s7, 83551; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s3, s3, 0x80003552; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s8, s7, 0x1ff3553; GFX1250-GISEL-TRUE16-NEXT: s_addk_co_i32 s4, 0xfc103554; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s5, s5, 0xffe3555; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s2, s3, s23556; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s3, s8, s63557; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s3, 1, 03558; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3559; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s3, s5, s33560; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s5, 1, 03561; GFX1250-GISEL-TRUE16-NEXT: s_sub_co_i32 s6, 1, s43562; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s9, s3, 0x10003563; GFX1250-GISEL-TRUE16-NEXT: s_max_i32 s6, s6, 03564; GFX1250-GISEL-TRUE16-NEXT: s_lshl_b32 s8, s4, 123565; GFX1250-GISEL-TRUE16-NEXT: s_min_i32 s6, s6, 133566; GFX1250-GISEL-TRUE16-NEXT: s_lshl_b32 s5, s5, 93567; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s10, s9, s63568; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s3, s3, s83569; GFX1250-GISEL-TRUE16-NEXT: s_lshl_b32 s6, s10, s63570; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s5, s5, 0x7c003571; GFX1250-GISEL-TRUE16-NEXT: s_cmp_lg_u32 s6, s93572; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s6, 1, 03573; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)3574; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s6, s10, s63575; GFX1250-GISEL-TRUE16-NEXT: s_cmp_lt_i32 s4, 13576; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s3, s6, s33577; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s6, s3, 73578; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s3, s3, 23579; GFX1250-GISEL-TRUE16-NEXT: s_cmp_eq_u32 s6, 33580; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s8, 1, 03581; GFX1250-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s6, 53582; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s6, 1, 03583; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3584; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s6, s8, s63585; GFX1250-GISEL-TRUE16-NEXT: s_add_co_i32 s3, s3, s63586; GFX1250-GISEL-TRUE16-NEXT: s_cmp_gt_i32 s4, 303587; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s3, 0x7c00, s33588; GFX1250-GISEL-TRUE16-NEXT: s_cmp_eq_u32 s4, 0x40f3589; GFX1250-GISEL-TRUE16-NEXT: s_cselect_b32 s3, s5, s33590; GFX1250-GISEL-TRUE16-NEXT: s_lshr_b32 s4, s7, 163591; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3592; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s4, s4, 0x80003593; GFX1250-GISEL-TRUE16-NEXT: s_or_b32 s3, s4, s33594; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3595; GFX1250-GISEL-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s33596; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160003597; GFX1250-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s23598; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -13599; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], null3600; GFX1250-GISEL-TRUE16-NEXT: s_endpgm3601;3602; GFX1250-GISEL-FAKE16-LABEL: fptrunc_v2f64_to_v2f16:3603; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry3604; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 13605; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243606; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x03607; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[4:7], s[2:3], 0x03608; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x03609; GFX1250-GISEL-FAKE16-NEXT: s_bfe_u32 s2, s5, 0xb00143610; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s3, s5, 83611; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s8, s5, 0x1ff3612; GFX1250-GISEL-FAKE16-NEXT: s_addk_co_i32 s2, 0xfc103613; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s3, s3, 0xffe3614; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s4, s8, s43615; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s4, 1, 03616; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3617; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s3, s3, s43618; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s4, 1, 03619; GFX1250-GISEL-FAKE16-NEXT: s_sub_co_i32 s8, 1, s23620; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s10, s3, 0x10003621; GFX1250-GISEL-FAKE16-NEXT: s_max_i32 s8, s8, 03622; GFX1250-GISEL-FAKE16-NEXT: s_lshl_b32 s9, s2, 123623; GFX1250-GISEL-FAKE16-NEXT: s_min_i32 s8, s8, 133624; GFX1250-GISEL-FAKE16-NEXT: s_lshl_b32 s4, s4, 93625; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s11, s10, s83626; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s3, s3, s93627; GFX1250-GISEL-FAKE16-NEXT: s_lshl_b32 s8, s11, s83628; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s4, s4, 0x7c003629; GFX1250-GISEL-FAKE16-NEXT: s_cmp_lg_u32 s8, s103630; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s8, 1, 03631; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)3632; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s8, s11, s83633; GFX1250-GISEL-FAKE16-NEXT: s_cmp_lt_i32 s2, 13634; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s3, s8, s33635; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s8, s3, 73636; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s3, s3, 23637; GFX1250-GISEL-FAKE16-NEXT: s_cmp_eq_u32 s8, 33638; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s9, 1, 03639; GFX1250-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s8, 53640; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s8, 1, 03641; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3642; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s8, s9, s83643; GFX1250-GISEL-FAKE16-NEXT: s_add_co_i32 s3, s3, s83644; GFX1250-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s2, 303645; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s3, 0x7c00, s33646; GFX1250-GISEL-FAKE16-NEXT: s_cmp_eq_u32 s2, 0x40f3647; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s2, s4, s33648; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s3, s5, 163649; GFX1250-GISEL-FAKE16-NEXT: s_bfe_u32 s4, s7, 0xb00143650; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s5, s7, 83651; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s3, s3, 0x80003652; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s8, s7, 0x1ff3653; GFX1250-GISEL-FAKE16-NEXT: s_addk_co_i32 s4, 0xfc103654; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s5, s5, 0xffe3655; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s2, s3, s23656; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s3, s8, s63657; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s3, 1, 03658; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3659; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s3, s5, s33660; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s5, 1, 03661; GFX1250-GISEL-FAKE16-NEXT: s_sub_co_i32 s6, 1, s43662; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s9, s3, 0x10003663; GFX1250-GISEL-FAKE16-NEXT: s_max_i32 s6, s6, 03664; GFX1250-GISEL-FAKE16-NEXT: s_lshl_b32 s8, s4, 123665; GFX1250-GISEL-FAKE16-NEXT: s_min_i32 s6, s6, 133666; GFX1250-GISEL-FAKE16-NEXT: s_lshl_b32 s5, s5, 93667; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s10, s9, s63668; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s3, s3, s83669; GFX1250-GISEL-FAKE16-NEXT: s_lshl_b32 s6, s10, s63670; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s5, s5, 0x7c003671; GFX1250-GISEL-FAKE16-NEXT: s_cmp_lg_u32 s6, s93672; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s6, 1, 03673; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)3674; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s6, s10, s63675; GFX1250-GISEL-FAKE16-NEXT: s_cmp_lt_i32 s4, 13676; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s3, s6, s33677; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s6, s3, 73678; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s3, s3, 23679; GFX1250-GISEL-FAKE16-NEXT: s_cmp_eq_u32 s6, 33680; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s8, 1, 03681; GFX1250-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s6, 53682; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s6, 1, 03683; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3684; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s6, s8, s63685; GFX1250-GISEL-FAKE16-NEXT: s_add_co_i32 s3, s3, s63686; GFX1250-GISEL-FAKE16-NEXT: s_cmp_gt_i32 s4, 303687; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s3, 0x7c00, s33688; GFX1250-GISEL-FAKE16-NEXT: s_cmp_eq_u32 s4, 0x40f3689; GFX1250-GISEL-FAKE16-NEXT: s_cselect_b32 s3, s5, s33690; GFX1250-GISEL-FAKE16-NEXT: s_lshr_b32 s4, s7, 163691; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3692; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s4, s4, 0x80003693; GFX1250-GISEL-FAKE16-NEXT: s_or_b32 s3, s4, s33694; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3695; GFX1250-GISEL-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s33696; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160003697; GFX1250-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s23698; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -13699; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], null3700; GFX1250-GISEL-FAKE16-NEXT: s_endpgm3701 ptr addrspace(1) %r,3702 ptr addrspace(1) %a) {3703entry:3704 %a.val = load <2 x double>, ptr addrspace(1) %a3705 %r.val = fptrunc <2 x double> %a.val to <2 x half>3706 store <2 x half> %r.val, ptr addrspace(1) %r3707 ret void3708}3709 3710define amdgpu_kernel void @fptrunc_v2f64_to_v2f16_afn(3711; SI-SDAG-LABEL: fptrunc_v2f64_to_v2f16_afn:3712; SI-SDAG: ; %bb.0: ; %entry3713; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x93714; SI-SDAG-NEXT: s_mov_b32 s7, 0xf0003715; SI-SDAG-NEXT: s_mov_b32 s6, -13716; SI-SDAG-NEXT: s_mov_b32 s10, s63717; SI-SDAG-NEXT: s_mov_b32 s11, s73718; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)3719; SI-SDAG-NEXT: s_mov_b32 s8, s23720; SI-SDAG-NEXT: s_mov_b32 s9, s33721; SI-SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 03722; SI-SDAG-NEXT: s_mov_b32 s4, s03723; SI-SDAG-NEXT: s_mov_b32 s5, s13724; SI-SDAG-NEXT: s_waitcnt vmcnt(0)3725; SI-SDAG-NEXT: v_cvt_f32_f64_e32 v2, v[2:3]3726; SI-SDAG-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]3727; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v23728; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 16, v13729; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v03730; SI-SDAG-NEXT: v_or_b32_e32 v0, v0, v13731; SI-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 03732; SI-SDAG-NEXT: s_endpgm3733;3734; SI-GISEL-LABEL: fptrunc_v2f64_to_v2f16_afn:3735; SI-GISEL: ; %bb.0: ; %entry3736; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x93737; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)3738; SI-GISEL-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x03739; SI-GISEL-NEXT: s_mov_b32 s2, -13740; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)3741; SI-GISEL-NEXT: v_cvt_f32_f64_e32 v0, s[4:5]3742; SI-GISEL-NEXT: v_cvt_f32_f64_e32 v1, s[6:7]3743; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v03744; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v13745; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v13746; SI-GISEL-NEXT: v_or_b32_e32 v0, v0, v13747; SI-GISEL-NEXT: s_mov_b32 s3, 0xf0003748; SI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 03749; SI-GISEL-NEXT: s_endpgm3750;3751; VI-SDAG-LABEL: fptrunc_v2f64_to_v2f16_afn:3752; VI-SDAG: ; %bb.0: ; %entry3753; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243754; VI-SDAG-NEXT: s_mov_b32 s7, 0xf0003755; VI-SDAG-NEXT: s_mov_b32 s6, -13756; VI-SDAG-NEXT: s_mov_b32 s10, s63757; VI-SDAG-NEXT: s_mov_b32 s11, s73758; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)3759; VI-SDAG-NEXT: s_mov_b32 s8, s23760; VI-SDAG-NEXT: s_mov_b32 s9, s33761; VI-SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 03762; VI-SDAG-NEXT: s_mov_b32 s4, s03763; VI-SDAG-NEXT: s_mov_b32 s5, s13764; VI-SDAG-NEXT: s_waitcnt vmcnt(0)3765; VI-SDAG-NEXT: v_cvt_f32_f64_e32 v2, v[2:3]3766; VI-SDAG-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]3767; VI-SDAG-NEXT: v_cvt_f16_f32_sdwa v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD3768; VI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v03769; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v13770; VI-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 03771; VI-SDAG-NEXT: s_endpgm3772;3773; VI-GISEL-LABEL: fptrunc_v2f64_to_v2f16_afn:3774; VI-GISEL: ; %bb.0: ; %entry3775; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243776; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)3777; VI-GISEL-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x03778; VI-GISEL-NEXT: s_mov_b32 s2, -13779; VI-GISEL-NEXT: s_mov_b32 s3, 0xf0003780; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)3781; VI-GISEL-NEXT: v_cvt_f32_f64_e32 v0, s[4:5]3782; VI-GISEL-NEXT: v_cvt_f32_f64_e32 v1, s[6:7]3783; VI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v03784; VI-GISEL-NEXT: v_cvt_f16_f32_sdwa v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD3785; VI-GISEL-NEXT: v_or_b32_e32 v0, v0, v13786; VI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 03787; VI-GISEL-NEXT: s_endpgm3788;3789; GFX9-SDAG-LABEL: fptrunc_v2f64_to_v2f16_afn:3790; GFX9-SDAG: ; %bb.0: ; %entry3791; GFX9-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243792; GFX9-SDAG-NEXT: s_mov_b32 s7, 0xf0003793; GFX9-SDAG-NEXT: s_mov_b32 s6, -13794; GFX9-SDAG-NEXT: s_mov_b32 s10, s63795; GFX9-SDAG-NEXT: s_mov_b32 s11, s73796; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)3797; GFX9-SDAG-NEXT: s_mov_b32 s8, s23798; GFX9-SDAG-NEXT: s_mov_b32 s9, s33799; GFX9-SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 03800; GFX9-SDAG-NEXT: s_mov_b32 s4, s03801; GFX9-SDAG-NEXT: s_mov_b32 s5, s13802; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)3803; GFX9-SDAG-NEXT: v_cvt_f32_f64_e32 v2, v[2:3]3804; GFX9-SDAG-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]3805; GFX9-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v23806; GFX9-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v03807; GFX9-SDAG-NEXT: v_pack_b32_f16 v0, v0, v13808; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 03809; GFX9-SDAG-NEXT: s_endpgm3810;3811; GFX9-GISEL-LABEL: fptrunc_v2f64_to_v2f16_afn:3812; GFX9-GISEL: ; %bb.0: ; %entry3813; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243814; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)3815; GFX9-GISEL-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x03816; GFX9-GISEL-NEXT: s_mov_b32 s2, -13817; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf0003818; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)3819; GFX9-GISEL-NEXT: v_cvt_f32_f64_e32 v0, s[4:5]3820; GFX9-GISEL-NEXT: v_cvt_f32_f64_e32 v1, s[6:7]3821; GFX9-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v03822; GFX9-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v13823; GFX9-GISEL-NEXT: v_pack_b32_f16 v0, v0, v13824; GFX9-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 03825; GFX9-GISEL-NEXT: s_endpgm3826;3827; GFX950-SDAG-LABEL: fptrunc_v2f64_to_v2f16_afn:3828; GFX950-SDAG: ; %bb.0: ; %entry3829; GFX950-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243830; GFX950-SDAG-NEXT: s_mov_b32 s7, 0xf0003831; GFX950-SDAG-NEXT: s_mov_b32 s6, -13832; GFX950-SDAG-NEXT: s_mov_b32 s10, s63833; GFX950-SDAG-NEXT: s_mov_b32 s11, s73834; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)3835; GFX950-SDAG-NEXT: s_mov_b32 s8, s23836; GFX950-SDAG-NEXT: s_mov_b32 s9, s33837; GFX950-SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 03838; GFX950-SDAG-NEXT: s_mov_b32 s4, s03839; GFX950-SDAG-NEXT: s_mov_b32 s5, s13840; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)3841; GFX950-SDAG-NEXT: v_cvt_f32_f64_e32 v2, v[2:3]3842; GFX950-SDAG-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]3843; GFX950-SDAG-NEXT: v_cvt_pk_f16_f32 v0, v0, v23844; GFX950-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 03845; GFX950-SDAG-NEXT: s_endpgm3846;3847; GFX950-GISEL-LABEL: fptrunc_v2f64_to_v2f16_afn:3848; GFX950-GISEL: ; %bb.0: ; %entry3849; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243850; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)3851; GFX950-GISEL-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x03852; GFX950-GISEL-NEXT: s_mov_b32 s2, -13853; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf0003854; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)3855; GFX950-GISEL-NEXT: v_cvt_f32_f64_e32 v0, s[4:5]3856; GFX950-GISEL-NEXT: v_cvt_f32_f64_e32 v1, s[6:7]3857; GFX950-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v03858; GFX950-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v13859; GFX950-GISEL-NEXT: v_pack_b32_f16 v0, v0, v13860; GFX950-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 03861; GFX950-GISEL-NEXT: s_endpgm3862;3863; GFX11-SDAG-TRUE16-LABEL: fptrunc_v2f64_to_v2f16_afn:3864; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry3865; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243866; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -13867; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160003868; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s63869; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s73870; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)3871; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s23872; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s33873; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s03874; GFX11-SDAG-TRUE16-NEXT: buffer_load_b128 v[0:3], off, s[8:11], 03875; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s13876; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)3877; GFX11-SDAG-TRUE16-NEXT: v_cvt_f32_f64_e32 v2, v[2:3]3878; GFX11-SDAG-TRUE16-NEXT: v_cvt_f32_f64_e32 v1, v[0:1]3879; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)3880; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v23881; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.h, v13882; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3883; GFX11-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.h, v0.l3884; GFX11-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], 03885; GFX11-SDAG-TRUE16-NEXT: s_endpgm3886;3887; GFX11-SDAG-FAKE16-LABEL: fptrunc_v2f64_to_v2f16_afn:3888; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry3889; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243890; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -13891; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160003892; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s63893; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s73894; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)3895; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s23896; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s33897; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s03898; GFX11-SDAG-FAKE16-NEXT: buffer_load_b128 v[0:3], off, s[8:11], 03899; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s13900; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)3901; GFX11-SDAG-FAKE16-NEXT: v_cvt_f32_f64_e32 v2, v[2:3]3902; GFX11-SDAG-FAKE16-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]3903; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)3904; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v1, v23905; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v03906; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3907; GFX11-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v13908; GFX11-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], 03909; GFX11-SDAG-FAKE16-NEXT: s_endpgm3910;3911; GFX11-GISEL-TRUE16-LABEL: fptrunc_v2f64_to_v2f16_afn:3912; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry3913; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243914; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)3915; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[4:7], s[2:3], 0x03916; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -13917; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160003918; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)3919; GFX11-GISEL-TRUE16-NEXT: v_cvt_f32_f64_e32 v0, s[4:5]3920; GFX11-GISEL-TRUE16-NEXT: v_cvt_f32_f64_e32 v1, s[6:7]3921; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)3922; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v03923; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.h, v13924; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3925; GFX11-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h3926; GFX11-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], 03927; GFX11-GISEL-TRUE16-NEXT: s_endpgm3928;3929; GFX11-GISEL-FAKE16-LABEL: fptrunc_v2f64_to_v2f16_afn:3930; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry3931; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243932; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)3933; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[4:7], s[2:3], 0x03934; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -13935; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160003936; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)3937; GFX11-GISEL-FAKE16-NEXT: v_cvt_f32_f64_e32 v0, s[4:5]3938; GFX11-GISEL-FAKE16-NEXT: v_cvt_f32_f64_e32 v1, s[6:7]3939; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)3940; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v03941; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v1, v13942; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3943; GFX11-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v13944; GFX11-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], 03945; GFX11-GISEL-FAKE16-NEXT: s_endpgm3946;3947; GFX1250-SDAG-TRUE16-LABEL: fptrunc_v2f64_to_v2f16_afn:3948; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry3949; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 13950; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243951; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -13952; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160003953; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s63954; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s73955; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x03956; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s23957; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s33958; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s03959; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b128 v[0:3], off, s[8:11], null3960; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s13961; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x03962; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f32_f64_e32 v2, v[2:3]3963; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]3964; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3965; GFX1250-SDAG-TRUE16-NEXT: v_cvt_pk_f16_f32 v0, v0, v23966; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], null3967; GFX1250-SDAG-TRUE16-NEXT: s_endpgm3968;3969; GFX1250-SDAG-FAKE16-LABEL: fptrunc_v2f64_to_v2f16_afn:3970; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry3971; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 13972; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243973; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -13974; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160003975; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s63976; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s73977; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x03978; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s23979; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s33980; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s03981; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b128 v[0:3], off, s[8:11], null3982; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s13983; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x03984; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f32_f64_e32 v2, v[2:3]3985; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f32_f64_e32 v0, v[0:1]3986; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3987; GFX1250-SDAG-FAKE16-NEXT: v_cvt_pk_f16_f32 v0, v0, v23988; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], null3989; GFX1250-SDAG-FAKE16-NEXT: s_endpgm3990;3991; GFX1250-GISEL-TRUE16-LABEL: fptrunc_v2f64_to_v2f16_afn:3992; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry3993; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 13994; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x243995; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x03996; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[4:7], s[2:3], 0x03997; GFX1250-GISEL-TRUE16-NEXT: s_wait_xcnt 0x03998; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -13999; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160004000; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x04001; GFX1250-GISEL-TRUE16-NEXT: v_cvt_f32_f64_e32 v0, s[4:5]4002; GFX1250-GISEL-TRUE16-NEXT: v_cvt_f32_f64_e32 v1, s[6:7]4003; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04004; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)4005; GFX1250-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v04006; GFX1250-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.h, v14007; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4008; GFX1250-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4009; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], null4010; GFX1250-GISEL-TRUE16-NEXT: s_endpgm4011;4012; GFX1250-GISEL-FAKE16-LABEL: fptrunc_v2f64_to_v2f16_afn:4013; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry4014; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14015; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244016; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x04017; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[4:7], s[2:3], 0x04018; GFX1250-GISEL-FAKE16-NEXT: s_wait_xcnt 0x04019; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -14020; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160004021; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x04022; GFX1250-GISEL-FAKE16-NEXT: v_cvt_f32_f64_e32 v0, s[4:5]4023; GFX1250-GISEL-FAKE16-NEXT: v_cvt_f32_f64_e32 v1, s[6:7]4024; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04025; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)4026; GFX1250-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v04027; GFX1250-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v1, v14028; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4029; GFX1250-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v14030; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], null4031; GFX1250-GISEL-FAKE16-NEXT: s_endpgm4032 ptr addrspace(1) %r,4033 ptr addrspace(1) %a) {4034entry:4035 %a.val = load <2 x double>, ptr addrspace(1) %a4036 %r.val = fptrunc afn <2 x double> %a.val to <2 x half>4037 store <2 x half> %r.val, ptr addrspace(1) %r4038 ret void4039}4040 4041define amdgpu_kernel void @fneg_fptrunc_f32_to_f16(4042; SI-SDAG-LABEL: fneg_fptrunc_f32_to_f16:4043; SI-SDAG: ; %bb.0: ; %entry4044; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x94045; SI-SDAG-NEXT: s_mov_b32 s7, 0xf0004046; SI-SDAG-NEXT: s_mov_b32 s6, -14047; SI-SDAG-NEXT: s_mov_b32 s10, s64048; SI-SDAG-NEXT: s_mov_b32 s11, s74049; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)4050; SI-SDAG-NEXT: s_mov_b32 s8, s24051; SI-SDAG-NEXT: s_mov_b32 s9, s34052; SI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04053; SI-SDAG-NEXT: s_mov_b32 s4, s04054; SI-SDAG-NEXT: s_mov_b32 s5, s14055; SI-SDAG-NEXT: s_waitcnt vmcnt(0)4056; SI-SDAG-NEXT: v_cvt_f16_f32_e64 v0, -v04057; SI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04058; SI-SDAG-NEXT: s_endpgm4059;4060; SI-GISEL-LABEL: fneg_fptrunc_f32_to_f16:4061; SI-GISEL: ; %bb.0: ; %entry4062; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x94063; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4064; SI-GISEL-NEXT: s_load_dword s3, s[2:3], 0x04065; SI-GISEL-NEXT: s_mov_b32 s2, -14066; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4067; SI-GISEL-NEXT: v_cvt_f16_f32_e64 v0, -s34068; SI-GISEL-NEXT: s_mov_b32 s3, 0xf0004069; SI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04070; SI-GISEL-NEXT: s_endpgm4071;4072; VI-SDAG-LABEL: fneg_fptrunc_f32_to_f16:4073; VI-SDAG: ; %bb.0: ; %entry4074; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244075; VI-SDAG-NEXT: s_mov_b32 s7, 0xf0004076; VI-SDAG-NEXT: s_mov_b32 s6, -14077; VI-SDAG-NEXT: s_mov_b32 s10, s64078; VI-SDAG-NEXT: s_mov_b32 s11, s74079; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)4080; VI-SDAG-NEXT: s_mov_b32 s8, s24081; VI-SDAG-NEXT: s_mov_b32 s9, s34082; VI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04083; VI-SDAG-NEXT: s_mov_b32 s4, s04084; VI-SDAG-NEXT: s_mov_b32 s5, s14085; VI-SDAG-NEXT: s_waitcnt vmcnt(0)4086; VI-SDAG-NEXT: v_cvt_f16_f32_e64 v0, -v04087; VI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04088; VI-SDAG-NEXT: s_endpgm4089;4090; VI-GISEL-LABEL: fneg_fptrunc_f32_to_f16:4091; VI-GISEL: ; %bb.0: ; %entry4092; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244093; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4094; VI-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04095; VI-GISEL-NEXT: s_mov_b32 s3, 0xf0004096; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4097; VI-GISEL-NEXT: v_cvt_f16_f32_e64 v0, -s24098; VI-GISEL-NEXT: s_mov_b32 s2, -14099; VI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04100; VI-GISEL-NEXT: s_endpgm4101;4102; GFX9-SDAG-LABEL: fneg_fptrunc_f32_to_f16:4103; GFX9-SDAG: ; %bb.0: ; %entry4104; GFX9-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244105; GFX9-SDAG-NEXT: s_mov_b32 s7, 0xf0004106; GFX9-SDAG-NEXT: s_mov_b32 s6, -14107; GFX9-SDAG-NEXT: s_mov_b32 s10, s64108; GFX9-SDAG-NEXT: s_mov_b32 s11, s74109; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)4110; GFX9-SDAG-NEXT: s_mov_b32 s8, s24111; GFX9-SDAG-NEXT: s_mov_b32 s9, s34112; GFX9-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04113; GFX9-SDAG-NEXT: s_mov_b32 s4, s04114; GFX9-SDAG-NEXT: s_mov_b32 s5, s14115; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)4116; GFX9-SDAG-NEXT: v_cvt_f16_f32_e64 v0, -v04117; GFX9-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04118; GFX9-SDAG-NEXT: s_endpgm4119;4120; GFX9-GISEL-LABEL: fneg_fptrunc_f32_to_f16:4121; GFX9-GISEL: ; %bb.0: ; %entry4122; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244123; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)4124; GFX9-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04125; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf0004126; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)4127; GFX9-GISEL-NEXT: v_cvt_f16_f32_e64 v0, -s24128; GFX9-GISEL-NEXT: s_mov_b32 s2, -14129; GFX9-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04130; GFX9-GISEL-NEXT: s_endpgm4131;4132; GFX950-SDAG-LABEL: fneg_fptrunc_f32_to_f16:4133; GFX950-SDAG: ; %bb.0: ; %entry4134; GFX950-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244135; GFX950-SDAG-NEXT: s_mov_b32 s7, 0xf0004136; GFX950-SDAG-NEXT: s_mov_b32 s6, -14137; GFX950-SDAG-NEXT: s_mov_b32 s10, s64138; GFX950-SDAG-NEXT: s_mov_b32 s11, s74139; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)4140; GFX950-SDAG-NEXT: s_mov_b32 s8, s24141; GFX950-SDAG-NEXT: s_mov_b32 s9, s34142; GFX950-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04143; GFX950-SDAG-NEXT: s_mov_b32 s4, s04144; GFX950-SDAG-NEXT: s_mov_b32 s5, s14145; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)4146; GFX950-SDAG-NEXT: v_cvt_f16_f32_e64 v0, -v04147; GFX950-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04148; GFX950-SDAG-NEXT: s_endpgm4149;4150; GFX950-GISEL-LABEL: fneg_fptrunc_f32_to_f16:4151; GFX950-GISEL: ; %bb.0: ; %entry4152; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244153; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)4154; GFX950-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04155; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf0004156; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)4157; GFX950-GISEL-NEXT: v_cvt_f16_f32_e64 v0, -s24158; GFX950-GISEL-NEXT: s_mov_b32 s2, -14159; GFX950-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04160; GFX950-GISEL-NEXT: s_endpgm4161;4162; GFX11-SDAG-TRUE16-LABEL: fneg_fptrunc_f32_to_f16:4163; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry4164; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244165; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -14166; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160004167; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s64168; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s74169; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)4170; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s24171; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s34172; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s04173; GFX11-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], 04174; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s14175; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)4176; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e64 v0.l, -v04177; GFX11-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], 04178; GFX11-SDAG-TRUE16-NEXT: s_endpgm4179;4180; GFX11-SDAG-FAKE16-LABEL: fneg_fptrunc_f32_to_f16:4181; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry4182; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244183; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -14184; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160004185; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s64186; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s74187; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)4188; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s24189; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s34190; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s04191; GFX11-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], 04192; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s14193; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)4194; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e64 v0, -v04195; GFX11-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], 04196; GFX11-SDAG-FAKE16-NEXT: s_endpgm4197;4198; GFX11-GISEL-TRUE16-LABEL: fneg_fptrunc_f32_to_f16:4199; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry4200; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244201; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)4202; GFX11-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x04203; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160004204; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)4205; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e64 v0.l, -s24206; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -14207; GFX11-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], 04208; GFX11-GISEL-TRUE16-NEXT: s_endpgm4209;4210; GFX11-GISEL-FAKE16-LABEL: fneg_fptrunc_f32_to_f16:4211; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry4212; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244213; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)4214; GFX11-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x04215; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160004216; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)4217; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e64 v0, -s24218; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -14219; GFX11-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], 04220; GFX11-GISEL-FAKE16-NEXT: s_endpgm4221;4222; GFX1250-SDAG-TRUE16-LABEL: fneg_fptrunc_f32_to_f16:4223; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry4224; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14225; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244226; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -14227; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160004228; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s64229; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s74230; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x04231; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s24232; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s34233; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s04234; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], null4235; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s14236; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x04237; GFX1250-SDAG-TRUE16-NEXT: v_xor_b32_e32 v0, 0x80000000, v04238; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04239; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4240; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v04241; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], null4242; GFX1250-SDAG-TRUE16-NEXT: s_endpgm4243;4244; GFX1250-SDAG-FAKE16-LABEL: fneg_fptrunc_f32_to_f16:4245; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry4246; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14247; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244248; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -14249; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160004250; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s64251; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s74252; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x04253; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s24254; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s34255; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s04256; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], null4257; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s14258; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x04259; GFX1250-SDAG-FAKE16-NEXT: v_xor_b32_e32 v0, 0x80000000, v04260; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04261; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4262; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v04263; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], null4264; GFX1250-SDAG-FAKE16-NEXT: s_endpgm4265;4266; GFX1250-GISEL-TRUE16-LABEL: fneg_fptrunc_f32_to_f16:4267; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry4268; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14269; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244270; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x04271; GFX1250-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x04272; GFX1250-GISEL-TRUE16-NEXT: s_wait_xcnt 0x04273; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160004274; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x04275; GFX1250-GISEL-TRUE16-NEXT: s_xor_b32 s2, s2, 0x800000004276; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04277; GFX1250-GISEL-TRUE16-NEXT: s_cvt_f16_f32 s2, s24278; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3)4279; GFX1250-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s24280; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -14281; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], null4282; GFX1250-GISEL-TRUE16-NEXT: s_endpgm4283;4284; GFX1250-GISEL-FAKE16-LABEL: fneg_fptrunc_f32_to_f16:4285; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry4286; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14287; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244288; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x04289; GFX1250-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x04290; GFX1250-GISEL-FAKE16-NEXT: s_wait_xcnt 0x04291; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160004292; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x04293; GFX1250-GISEL-FAKE16-NEXT: s_xor_b32 s2, s2, 0x800000004294; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04295; GFX1250-GISEL-FAKE16-NEXT: s_cvt_f16_f32 s2, s24296; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3)4297; GFX1250-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s24298; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -14299; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], null4300; GFX1250-GISEL-FAKE16-NEXT: s_endpgm4301 ptr addrspace(1) %r,4302 ptr addrspace(1) %a) {4303entry:4304 %a.val = load float, ptr addrspace(1) %a4305 %a.fneg = fneg float %a.val4306 %r.val = fptrunc float %a.fneg to half4307 store half %r.val, ptr addrspace(1) %r4308 ret void4309}4310 4311define amdgpu_kernel void @fabs_fptrunc_f32_to_f16(4312; SI-SDAG-LABEL: fabs_fptrunc_f32_to_f16:4313; SI-SDAG: ; %bb.0: ; %entry4314; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x94315; SI-SDAG-NEXT: s_mov_b32 s7, 0xf0004316; SI-SDAG-NEXT: s_mov_b32 s6, -14317; SI-SDAG-NEXT: s_mov_b32 s10, s64318; SI-SDAG-NEXT: s_mov_b32 s11, s74319; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)4320; SI-SDAG-NEXT: s_mov_b32 s8, s24321; SI-SDAG-NEXT: s_mov_b32 s9, s34322; SI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04323; SI-SDAG-NEXT: s_mov_b32 s4, s04324; SI-SDAG-NEXT: s_mov_b32 s5, s14325; SI-SDAG-NEXT: s_waitcnt vmcnt(0)4326; SI-SDAG-NEXT: v_cvt_f16_f32_e64 v0, |v0|4327; SI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04328; SI-SDAG-NEXT: s_endpgm4329;4330; SI-GISEL-LABEL: fabs_fptrunc_f32_to_f16:4331; SI-GISEL: ; %bb.0: ; %entry4332; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x94333; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4334; SI-GISEL-NEXT: s_load_dword s3, s[2:3], 0x04335; SI-GISEL-NEXT: s_mov_b32 s2, -14336; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4337; SI-GISEL-NEXT: v_cvt_f16_f32_e64 v0, |s3|4338; SI-GISEL-NEXT: s_mov_b32 s3, 0xf0004339; SI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04340; SI-GISEL-NEXT: s_endpgm4341;4342; VI-SDAG-LABEL: fabs_fptrunc_f32_to_f16:4343; VI-SDAG: ; %bb.0: ; %entry4344; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244345; VI-SDAG-NEXT: s_mov_b32 s7, 0xf0004346; VI-SDAG-NEXT: s_mov_b32 s6, -14347; VI-SDAG-NEXT: s_mov_b32 s10, s64348; VI-SDAG-NEXT: s_mov_b32 s11, s74349; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)4350; VI-SDAG-NEXT: s_mov_b32 s8, s24351; VI-SDAG-NEXT: s_mov_b32 s9, s34352; VI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04353; VI-SDAG-NEXT: s_mov_b32 s4, s04354; VI-SDAG-NEXT: s_mov_b32 s5, s14355; VI-SDAG-NEXT: s_waitcnt vmcnt(0)4356; VI-SDAG-NEXT: v_cvt_f16_f32_e64 v0, |v0|4357; VI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04358; VI-SDAG-NEXT: s_endpgm4359;4360; VI-GISEL-LABEL: fabs_fptrunc_f32_to_f16:4361; VI-GISEL: ; %bb.0: ; %entry4362; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244363; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4364; VI-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04365; VI-GISEL-NEXT: s_mov_b32 s3, 0xf0004366; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4367; VI-GISEL-NEXT: v_cvt_f16_f32_e64 v0, |s2|4368; VI-GISEL-NEXT: s_mov_b32 s2, -14369; VI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04370; VI-GISEL-NEXT: s_endpgm4371;4372; GFX9-SDAG-LABEL: fabs_fptrunc_f32_to_f16:4373; GFX9-SDAG: ; %bb.0: ; %entry4374; GFX9-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244375; GFX9-SDAG-NEXT: s_mov_b32 s7, 0xf0004376; GFX9-SDAG-NEXT: s_mov_b32 s6, -14377; GFX9-SDAG-NEXT: s_mov_b32 s10, s64378; GFX9-SDAG-NEXT: s_mov_b32 s11, s74379; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)4380; GFX9-SDAG-NEXT: s_mov_b32 s8, s24381; GFX9-SDAG-NEXT: s_mov_b32 s9, s34382; GFX9-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04383; GFX9-SDAG-NEXT: s_mov_b32 s4, s04384; GFX9-SDAG-NEXT: s_mov_b32 s5, s14385; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)4386; GFX9-SDAG-NEXT: v_cvt_f16_f32_e64 v0, |v0|4387; GFX9-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04388; GFX9-SDAG-NEXT: s_endpgm4389;4390; GFX9-GISEL-LABEL: fabs_fptrunc_f32_to_f16:4391; GFX9-GISEL: ; %bb.0: ; %entry4392; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244393; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)4394; GFX9-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04395; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf0004396; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)4397; GFX9-GISEL-NEXT: v_cvt_f16_f32_e64 v0, |s2|4398; GFX9-GISEL-NEXT: s_mov_b32 s2, -14399; GFX9-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04400; GFX9-GISEL-NEXT: s_endpgm4401;4402; GFX950-SDAG-LABEL: fabs_fptrunc_f32_to_f16:4403; GFX950-SDAG: ; %bb.0: ; %entry4404; GFX950-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244405; GFX950-SDAG-NEXT: s_mov_b32 s7, 0xf0004406; GFX950-SDAG-NEXT: s_mov_b32 s6, -14407; GFX950-SDAG-NEXT: s_mov_b32 s10, s64408; GFX950-SDAG-NEXT: s_mov_b32 s11, s74409; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)4410; GFX950-SDAG-NEXT: s_mov_b32 s8, s24411; GFX950-SDAG-NEXT: s_mov_b32 s9, s34412; GFX950-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04413; GFX950-SDAG-NEXT: s_mov_b32 s4, s04414; GFX950-SDAG-NEXT: s_mov_b32 s5, s14415; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)4416; GFX950-SDAG-NEXT: v_cvt_f16_f32_e64 v0, |v0|4417; GFX950-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04418; GFX950-SDAG-NEXT: s_endpgm4419;4420; GFX950-GISEL-LABEL: fabs_fptrunc_f32_to_f16:4421; GFX950-GISEL: ; %bb.0: ; %entry4422; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244423; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)4424; GFX950-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04425; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf0004426; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)4427; GFX950-GISEL-NEXT: v_cvt_f16_f32_e64 v0, |s2|4428; GFX950-GISEL-NEXT: s_mov_b32 s2, -14429; GFX950-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04430; GFX950-GISEL-NEXT: s_endpgm4431;4432; GFX11-SDAG-TRUE16-LABEL: fabs_fptrunc_f32_to_f16:4433; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry4434; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244435; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -14436; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160004437; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s64438; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s74439; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)4440; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s24441; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s34442; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s04443; GFX11-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], 04444; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s14445; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)4446; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e64 v0.l, |v0|4447; GFX11-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], 04448; GFX11-SDAG-TRUE16-NEXT: s_endpgm4449;4450; GFX11-SDAG-FAKE16-LABEL: fabs_fptrunc_f32_to_f16:4451; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry4452; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244453; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -14454; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160004455; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s64456; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s74457; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)4458; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s24459; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s34460; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s04461; GFX11-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], 04462; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s14463; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)4464; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e64 v0, |v0|4465; GFX11-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], 04466; GFX11-SDAG-FAKE16-NEXT: s_endpgm4467;4468; GFX11-GISEL-TRUE16-LABEL: fabs_fptrunc_f32_to_f16:4469; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry4470; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244471; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)4472; GFX11-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x04473; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160004474; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)4475; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e64 v0.l, |s2|4476; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -14477; GFX11-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], 04478; GFX11-GISEL-TRUE16-NEXT: s_endpgm4479;4480; GFX11-GISEL-FAKE16-LABEL: fabs_fptrunc_f32_to_f16:4481; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry4482; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244483; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)4484; GFX11-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x04485; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160004486; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)4487; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e64 v0, |s2|4488; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -14489; GFX11-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], 04490; GFX11-GISEL-FAKE16-NEXT: s_endpgm4491;4492; GFX1250-SDAG-TRUE16-LABEL: fabs_fptrunc_f32_to_f16:4493; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry4494; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14495; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244496; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -14497; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160004498; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s64499; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s74500; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x04501; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s24502; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s34503; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s04504; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], null4505; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s14506; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x04507; GFX1250-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x7fffffff, v04508; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04509; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4510; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v04511; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], null4512; GFX1250-SDAG-TRUE16-NEXT: s_endpgm4513;4514; GFX1250-SDAG-FAKE16-LABEL: fabs_fptrunc_f32_to_f16:4515; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry4516; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14517; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244518; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -14519; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160004520; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s64521; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s74522; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x04523; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s24524; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s34525; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s04526; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], null4527; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s14528; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x04529; GFX1250-SDAG-FAKE16-NEXT: v_and_b32_e32 v0, 0x7fffffff, v04530; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04531; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4532; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v04533; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], null4534; GFX1250-SDAG-FAKE16-NEXT: s_endpgm4535;4536; GFX1250-GISEL-TRUE16-LABEL: fabs_fptrunc_f32_to_f16:4537; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry4538; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14539; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244540; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x04541; GFX1250-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x04542; GFX1250-GISEL-TRUE16-NEXT: s_wait_xcnt 0x04543; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160004544; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x04545; GFX1250-GISEL-TRUE16-NEXT: s_bitset0_b32 s2, 314546; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04547; GFX1250-GISEL-TRUE16-NEXT: s_cvt_f16_f32 s2, s24548; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3)4549; GFX1250-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s24550; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -14551; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], null4552; GFX1250-GISEL-TRUE16-NEXT: s_endpgm4553;4554; GFX1250-GISEL-FAKE16-LABEL: fabs_fptrunc_f32_to_f16:4555; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry4556; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14557; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244558; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x04559; GFX1250-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x04560; GFX1250-GISEL-FAKE16-NEXT: s_wait_xcnt 0x04561; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160004562; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x04563; GFX1250-GISEL-FAKE16-NEXT: s_bitset0_b32 s2, 314564; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04565; GFX1250-GISEL-FAKE16-NEXT: s_cvt_f16_f32 s2, s24566; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3)4567; GFX1250-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s24568; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -14569; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], null4570; GFX1250-GISEL-FAKE16-NEXT: s_endpgm4571 ptr addrspace(1) %r,4572 ptr addrspace(1) %a) {4573entry:4574 %a.val = load float, ptr addrspace(1) %a4575 %a.fabs = call float @llvm.fabs.f32(float %a.val)4576 %r.val = fptrunc float %a.fabs to half4577 store half %r.val, ptr addrspace(1) %r4578 ret void4579}4580 4581define amdgpu_kernel void @fneg_fabs_fptrunc_f32_to_f16(4582; SI-SDAG-LABEL: fneg_fabs_fptrunc_f32_to_f16:4583; SI-SDAG: ; %bb.0: ; %entry4584; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x94585; SI-SDAG-NEXT: s_mov_b32 s7, 0xf0004586; SI-SDAG-NEXT: s_mov_b32 s6, -14587; SI-SDAG-NEXT: s_mov_b32 s10, s64588; SI-SDAG-NEXT: s_mov_b32 s11, s74589; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)4590; SI-SDAG-NEXT: s_mov_b32 s8, s24591; SI-SDAG-NEXT: s_mov_b32 s9, s34592; SI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04593; SI-SDAG-NEXT: s_mov_b32 s4, s04594; SI-SDAG-NEXT: s_mov_b32 s5, s14595; SI-SDAG-NEXT: s_waitcnt vmcnt(0)4596; SI-SDAG-NEXT: v_cvt_f16_f32_e64 v0, -|v0|4597; SI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04598; SI-SDAG-NEXT: s_endpgm4599;4600; SI-GISEL-LABEL: fneg_fabs_fptrunc_f32_to_f16:4601; SI-GISEL: ; %bb.0: ; %entry4602; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x94603; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4604; SI-GISEL-NEXT: s_load_dword s3, s[2:3], 0x04605; SI-GISEL-NEXT: s_mov_b32 s2, -14606; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4607; SI-GISEL-NEXT: v_cvt_f16_f32_e64 v0, -|s3|4608; SI-GISEL-NEXT: s_mov_b32 s3, 0xf0004609; SI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04610; SI-GISEL-NEXT: s_endpgm4611;4612; VI-SDAG-LABEL: fneg_fabs_fptrunc_f32_to_f16:4613; VI-SDAG: ; %bb.0: ; %entry4614; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244615; VI-SDAG-NEXT: s_mov_b32 s7, 0xf0004616; VI-SDAG-NEXT: s_mov_b32 s6, -14617; VI-SDAG-NEXT: s_mov_b32 s10, s64618; VI-SDAG-NEXT: s_mov_b32 s11, s74619; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)4620; VI-SDAG-NEXT: s_mov_b32 s8, s24621; VI-SDAG-NEXT: s_mov_b32 s9, s34622; VI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04623; VI-SDAG-NEXT: s_mov_b32 s4, s04624; VI-SDAG-NEXT: s_mov_b32 s5, s14625; VI-SDAG-NEXT: s_waitcnt vmcnt(0)4626; VI-SDAG-NEXT: v_cvt_f16_f32_e64 v0, -|v0|4627; VI-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04628; VI-SDAG-NEXT: s_endpgm4629;4630; VI-GISEL-LABEL: fneg_fabs_fptrunc_f32_to_f16:4631; VI-GISEL: ; %bb.0: ; %entry4632; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244633; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4634; VI-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04635; VI-GISEL-NEXT: s_mov_b32 s3, 0xf0004636; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4637; VI-GISEL-NEXT: v_cvt_f16_f32_e64 v0, -|s2|4638; VI-GISEL-NEXT: s_mov_b32 s2, -14639; VI-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04640; VI-GISEL-NEXT: s_endpgm4641;4642; GFX9-SDAG-LABEL: fneg_fabs_fptrunc_f32_to_f16:4643; GFX9-SDAG: ; %bb.0: ; %entry4644; GFX9-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244645; GFX9-SDAG-NEXT: s_mov_b32 s7, 0xf0004646; GFX9-SDAG-NEXT: s_mov_b32 s6, -14647; GFX9-SDAG-NEXT: s_mov_b32 s10, s64648; GFX9-SDAG-NEXT: s_mov_b32 s11, s74649; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)4650; GFX9-SDAG-NEXT: s_mov_b32 s8, s24651; GFX9-SDAG-NEXT: s_mov_b32 s9, s34652; GFX9-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04653; GFX9-SDAG-NEXT: s_mov_b32 s4, s04654; GFX9-SDAG-NEXT: s_mov_b32 s5, s14655; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)4656; GFX9-SDAG-NEXT: v_cvt_f16_f32_e64 v0, -|v0|4657; GFX9-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04658; GFX9-SDAG-NEXT: s_endpgm4659;4660; GFX9-GISEL-LABEL: fneg_fabs_fptrunc_f32_to_f16:4661; GFX9-GISEL: ; %bb.0: ; %entry4662; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244663; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)4664; GFX9-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04665; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf0004666; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)4667; GFX9-GISEL-NEXT: v_cvt_f16_f32_e64 v0, -|s2|4668; GFX9-GISEL-NEXT: s_mov_b32 s2, -14669; GFX9-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04670; GFX9-GISEL-NEXT: s_endpgm4671;4672; GFX950-SDAG-LABEL: fneg_fabs_fptrunc_f32_to_f16:4673; GFX950-SDAG: ; %bb.0: ; %entry4674; GFX950-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244675; GFX950-SDAG-NEXT: s_mov_b32 s7, 0xf0004676; GFX950-SDAG-NEXT: s_mov_b32 s6, -14677; GFX950-SDAG-NEXT: s_mov_b32 s10, s64678; GFX950-SDAG-NEXT: s_mov_b32 s11, s74679; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)4680; GFX950-SDAG-NEXT: s_mov_b32 s8, s24681; GFX950-SDAG-NEXT: s_mov_b32 s9, s34682; GFX950-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04683; GFX950-SDAG-NEXT: s_mov_b32 s4, s04684; GFX950-SDAG-NEXT: s_mov_b32 s5, s14685; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)4686; GFX950-SDAG-NEXT: v_cvt_f16_f32_e64 v0, -|v0|4687; GFX950-SDAG-NEXT: buffer_store_short v0, off, s[4:7], 04688; GFX950-SDAG-NEXT: s_endpgm4689;4690; GFX950-GISEL-LABEL: fneg_fabs_fptrunc_f32_to_f16:4691; GFX950-GISEL: ; %bb.0: ; %entry4692; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244693; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)4694; GFX950-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04695; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf0004696; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)4697; GFX950-GISEL-NEXT: v_cvt_f16_f32_e64 v0, -|s2|4698; GFX950-GISEL-NEXT: s_mov_b32 s2, -14699; GFX950-GISEL-NEXT: buffer_store_short v0, off, s[0:3], 04700; GFX950-GISEL-NEXT: s_endpgm4701;4702; GFX11-SDAG-TRUE16-LABEL: fneg_fabs_fptrunc_f32_to_f16:4703; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry4704; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244705; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -14706; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160004707; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s64708; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s74709; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)4710; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s24711; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s34712; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s04713; GFX11-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], 04714; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s14715; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)4716; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e64 v0.l, -|v0|4717; GFX11-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], 04718; GFX11-SDAG-TRUE16-NEXT: s_endpgm4719;4720; GFX11-SDAG-FAKE16-LABEL: fneg_fabs_fptrunc_f32_to_f16:4721; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry4722; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244723; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -14724; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160004725; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s64726; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s74727; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)4728; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s24729; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s34730; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s04731; GFX11-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], 04732; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s14733; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)4734; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e64 v0, -|v0|4735; GFX11-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], 04736; GFX11-SDAG-FAKE16-NEXT: s_endpgm4737;4738; GFX11-GISEL-TRUE16-LABEL: fneg_fabs_fptrunc_f32_to_f16:4739; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry4740; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244741; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)4742; GFX11-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x04743; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160004744; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)4745; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e64 v0.l, -|s2|4746; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -14747; GFX11-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], 04748; GFX11-GISEL-TRUE16-NEXT: s_endpgm4749;4750; GFX11-GISEL-FAKE16-LABEL: fneg_fabs_fptrunc_f32_to_f16:4751; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry4752; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244753; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)4754; GFX11-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x04755; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160004756; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)4757; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e64 v0, -|s2|4758; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -14759; GFX11-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], 04760; GFX11-GISEL-FAKE16-NEXT: s_endpgm4761;4762; GFX1250-SDAG-TRUE16-LABEL: fneg_fabs_fptrunc_f32_to_f16:4763; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry4764; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14765; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244766; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -14767; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160004768; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s64769; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s74770; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x04771; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s24772; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s34773; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s04774; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], null4775; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s14776; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x04777; GFX1250-SDAG-TRUE16-NEXT: v_or_b32_e32 v0, 0x80000000, v04778; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04779; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4780; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v04781; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], null4782; GFX1250-SDAG-TRUE16-NEXT: s_endpgm4783;4784; GFX1250-SDAG-FAKE16-LABEL: fneg_fabs_fptrunc_f32_to_f16:4785; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry4786; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14787; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244788; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -14789; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160004790; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s64791; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s74792; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x04793; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s24794; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s34795; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s04796; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], null4797; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s14798; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x04799; GFX1250-SDAG-FAKE16-NEXT: v_or_b32_e32 v0, 0x80000000, v04800; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04801; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4802; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v04803; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], null4804; GFX1250-SDAG-FAKE16-NEXT: s_endpgm4805;4806; GFX1250-GISEL-TRUE16-LABEL: fneg_fabs_fptrunc_f32_to_f16:4807; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry4808; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14809; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244810; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x04811; GFX1250-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x04812; GFX1250-GISEL-TRUE16-NEXT: s_wait_xcnt 0x04813; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160004814; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x04815; GFX1250-GISEL-TRUE16-NEXT: s_bitset1_b32 s2, 314816; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04817; GFX1250-GISEL-TRUE16-NEXT: s_cvt_f16_f32 s2, s24818; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3)4819; GFX1250-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s24820; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -14821; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], null4822; GFX1250-GISEL-TRUE16-NEXT: s_endpgm4823;4824; GFX1250-GISEL-FAKE16-LABEL: fneg_fabs_fptrunc_f32_to_f16:4825; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry4826; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14827; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244828; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x04829; GFX1250-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x04830; GFX1250-GISEL-FAKE16-NEXT: s_wait_xcnt 0x04831; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160004832; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x04833; GFX1250-GISEL-FAKE16-NEXT: s_bitset1_b32 s2, 314834; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 04835; GFX1250-GISEL-FAKE16-NEXT: s_cvt_f16_f32 s2, s24836; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3)4837; GFX1250-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s24838; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -14839; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], null4840; GFX1250-GISEL-FAKE16-NEXT: s_endpgm4841 ptr addrspace(1) %r,4842 ptr addrspace(1) %a) #0 {4843entry:4844 %a.val = load float, ptr addrspace(1) %a4845 %a.fabs = call float @llvm.fabs.f32(float %a.val)4846 %a.fneg.fabs = fneg float %a.fabs4847 %r.val = fptrunc float %a.fneg.fabs to half4848 store half %r.val, ptr addrspace(1) %r4849 ret void4850}4851 4852define amdgpu_kernel void @fptrunc_f32_to_f16_zext_i32(4853; SI-SDAG-LABEL: fptrunc_f32_to_f16_zext_i32:4854; SI-SDAG: ; %bb.0: ; %entry4855; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x94856; SI-SDAG-NEXT: s_mov_b32 s7, 0xf0004857; SI-SDAG-NEXT: s_mov_b32 s6, -14858; SI-SDAG-NEXT: s_mov_b32 s10, s64859; SI-SDAG-NEXT: s_mov_b32 s11, s74860; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)4861; SI-SDAG-NEXT: s_mov_b32 s8, s24862; SI-SDAG-NEXT: s_mov_b32 s9, s34863; SI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04864; SI-SDAG-NEXT: s_mov_b32 s4, s04865; SI-SDAG-NEXT: s_mov_b32 s5, s14866; SI-SDAG-NEXT: s_waitcnt vmcnt(0)4867; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04868; SI-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 04869; SI-SDAG-NEXT: s_endpgm4870;4871; SI-GISEL-LABEL: fptrunc_f32_to_f16_zext_i32:4872; SI-GISEL: ; %bb.0: ; %entry4873; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x94874; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4875; SI-GISEL-NEXT: s_load_dword s3, s[2:3], 0x04876; SI-GISEL-NEXT: s_mov_b32 s2, -14877; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4878; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s34879; SI-GISEL-NEXT: s_mov_b32 s3, 0xf0004880; SI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 04881; SI-GISEL-NEXT: s_endpgm4882;4883; VI-SDAG-LABEL: fptrunc_f32_to_f16_zext_i32:4884; VI-SDAG: ; %bb.0: ; %entry4885; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244886; VI-SDAG-NEXT: s_mov_b32 s7, 0xf0004887; VI-SDAG-NEXT: s_mov_b32 s6, -14888; VI-SDAG-NEXT: s_mov_b32 s10, s64889; VI-SDAG-NEXT: s_mov_b32 s11, s74890; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)4891; VI-SDAG-NEXT: s_mov_b32 s8, s24892; VI-SDAG-NEXT: s_mov_b32 s9, s34893; VI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04894; VI-SDAG-NEXT: s_mov_b32 s4, s04895; VI-SDAG-NEXT: s_mov_b32 s5, s14896; VI-SDAG-NEXT: s_waitcnt vmcnt(0)4897; VI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04898; VI-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 04899; VI-SDAG-NEXT: s_endpgm4900;4901; VI-GISEL-LABEL: fptrunc_f32_to_f16_zext_i32:4902; VI-GISEL: ; %bb.0: ; %entry4903; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244904; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4905; VI-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04906; VI-GISEL-NEXT: s_mov_b32 s3, 0xf0004907; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)4908; VI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s24909; VI-GISEL-NEXT: s_mov_b32 s2, -14910; VI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 04911; VI-GISEL-NEXT: s_endpgm4912;4913; GFX9-SDAG-LABEL: fptrunc_f32_to_f16_zext_i32:4914; GFX9-SDAG: ; %bb.0: ; %entry4915; GFX9-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244916; GFX9-SDAG-NEXT: s_mov_b32 s7, 0xf0004917; GFX9-SDAG-NEXT: s_mov_b32 s6, -14918; GFX9-SDAG-NEXT: s_mov_b32 s10, s64919; GFX9-SDAG-NEXT: s_mov_b32 s11, s74920; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)4921; GFX9-SDAG-NEXT: s_mov_b32 s8, s24922; GFX9-SDAG-NEXT: s_mov_b32 s9, s34923; GFX9-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04924; GFX9-SDAG-NEXT: s_mov_b32 s4, s04925; GFX9-SDAG-NEXT: s_mov_b32 s5, s14926; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)4927; GFX9-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04928; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 04929; GFX9-SDAG-NEXT: s_endpgm4930;4931; GFX9-GISEL-LABEL: fptrunc_f32_to_f16_zext_i32:4932; GFX9-GISEL: ; %bb.0: ; %entry4933; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244934; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)4935; GFX9-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04936; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf0004937; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)4938; GFX9-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s24939; GFX9-GISEL-NEXT: s_mov_b32 s2, -14940; GFX9-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 04941; GFX9-GISEL-NEXT: s_endpgm4942;4943; GFX950-SDAG-LABEL: fptrunc_f32_to_f16_zext_i32:4944; GFX950-SDAG: ; %bb.0: ; %entry4945; GFX950-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244946; GFX950-SDAG-NEXT: s_mov_b32 s7, 0xf0004947; GFX950-SDAG-NEXT: s_mov_b32 s6, -14948; GFX950-SDAG-NEXT: s_mov_b32 s10, s64949; GFX950-SDAG-NEXT: s_mov_b32 s11, s74950; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)4951; GFX950-SDAG-NEXT: s_mov_b32 s8, s24952; GFX950-SDAG-NEXT: s_mov_b32 s9, s34953; GFX950-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 04954; GFX950-SDAG-NEXT: s_mov_b32 s4, s04955; GFX950-SDAG-NEXT: s_mov_b32 s5, s14956; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)4957; GFX950-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04958; GFX950-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 04959; GFX950-SDAG-NEXT: s_endpgm4960;4961; GFX950-GISEL-LABEL: fptrunc_f32_to_f16_zext_i32:4962; GFX950-GISEL: ; %bb.0: ; %entry4963; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244964; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)4965; GFX950-GISEL-NEXT: s_load_dword s2, s[2:3], 0x04966; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf0004967; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)4968; GFX950-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s24969; GFX950-GISEL-NEXT: s_mov_b32 s2, -14970; GFX950-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 04971; GFX950-GISEL-NEXT: s_endpgm4972;4973; GFX11-SDAG-TRUE16-LABEL: fptrunc_f32_to_f16_zext_i32:4974; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry4975; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244976; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -14977; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160004978; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s64979; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s74980; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)4981; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s24982; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s34983; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s04984; GFX11-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], 04985; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s14986; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)4987; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v04988; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4989; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0xffff, v04990; GFX11-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], 04991; GFX11-SDAG-TRUE16-NEXT: s_endpgm4992;4993; GFX11-SDAG-FAKE16-LABEL: fptrunc_f32_to_f16_zext_i32:4994; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry4995; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x244996; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -14997; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160004998; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s64999; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s75000; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)5001; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s25002; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s35003; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s05004; GFX11-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], 05005; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s15006; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)5007; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v05008; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5009; GFX11-SDAG-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v05010; GFX11-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], 05011; GFX11-SDAG-FAKE16-NEXT: s_endpgm5012;5013; GFX11-GISEL-TRUE16-LABEL: fptrunc_f32_to_f16_zext_i32:5014; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry5015; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245016; GFX11-GISEL-TRUE16-NEXT: v_mov_b16_e32 v0.h, 05017; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)5018; GFX11-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x05019; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160005020; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)5021; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, s25022; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -15023; GFX11-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], 05024; GFX11-GISEL-TRUE16-NEXT: s_endpgm5025;5026; GFX11-GISEL-FAKE16-LABEL: fptrunc_f32_to_f16_zext_i32:5027; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry5028; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245029; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)5030; GFX11-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x05031; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160005032; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)5033; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, s25034; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -15035; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5036; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v05037; GFX11-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], 05038; GFX11-GISEL-FAKE16-NEXT: s_endpgm5039;5040; GFX1250-SDAG-TRUE16-LABEL: fptrunc_f32_to_f16_zext_i32:5041; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry5042; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15043; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245044; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -15045; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160005046; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s65047; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s75048; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x05049; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s25050; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s35051; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s05052; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], null5053; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s15054; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x05055; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05056; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v05057; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5058; GFX1250-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0xffff, v05059; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], null5060; GFX1250-SDAG-TRUE16-NEXT: s_endpgm5061;5062; GFX1250-SDAG-FAKE16-LABEL: fptrunc_f32_to_f16_zext_i32:5063; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry5064; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15065; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245066; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -15067; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160005068; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s65069; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s75070; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x05071; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s25072; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s35073; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s05074; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], null5075; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s15076; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x05077; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05078; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v05079; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5080; GFX1250-SDAG-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v05081; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], null5082; GFX1250-SDAG-FAKE16-NEXT: s_endpgm5083;5084; GFX1250-GISEL-TRUE16-LABEL: fptrunc_f32_to_f16_zext_i32:5085; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry5086; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15087; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245088; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x05089; GFX1250-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x05090; GFX1250-GISEL-TRUE16-NEXT: s_wait_xcnt 0x05091; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160005092; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x05093; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05094; GFX1250-GISEL-TRUE16-NEXT: s_cvt_f16_f32 s2, s25095; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3) | instskip(NEXT) | instid1(SALU_CYCLE_1)5096; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s2, 0xffff, s25097; GFX1250-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s25098; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -15099; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], null5100; GFX1250-GISEL-TRUE16-NEXT: s_endpgm5101;5102; GFX1250-GISEL-FAKE16-LABEL: fptrunc_f32_to_f16_zext_i32:5103; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry5104; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15105; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245106; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x05107; GFX1250-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x05108; GFX1250-GISEL-FAKE16-NEXT: s_wait_xcnt 0x05109; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160005110; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x05111; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05112; GFX1250-GISEL-FAKE16-NEXT: s_cvt_f16_f32 s2, s25113; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3) | instskip(NEXT) | instid1(SALU_CYCLE_1)5114; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s2, 0xffff, s25115; GFX1250-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s25116; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -15117; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], null5118; GFX1250-GISEL-FAKE16-NEXT: s_endpgm5119 ptr addrspace(1) %r,5120 ptr addrspace(1) %a) #0 {5121entry:5122 %a.val = load float, ptr addrspace(1) %a5123 %r.val = fptrunc float %a.val to half5124 %r.i16 = bitcast half %r.val to i165125 %zext = zext i16 %r.i16 to i325126 store i32 %zext, ptr addrspace(1) %r5127 ret void5128}5129 5130define amdgpu_kernel void @fptrunc_fabs_f32_to_f16_zext_i32(5131; SI-SDAG-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5132; SI-SDAG: ; %bb.0: ; %entry5133; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x95134; SI-SDAG-NEXT: s_mov_b32 s7, 0xf0005135; SI-SDAG-NEXT: s_mov_b32 s6, -15136; SI-SDAG-NEXT: s_mov_b32 s10, s65137; SI-SDAG-NEXT: s_mov_b32 s11, s75138; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)5139; SI-SDAG-NEXT: s_mov_b32 s8, s25140; SI-SDAG-NEXT: s_mov_b32 s9, s35141; SI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 05142; SI-SDAG-NEXT: s_mov_b32 s4, s05143; SI-SDAG-NEXT: s_mov_b32 s5, s15144; SI-SDAG-NEXT: s_waitcnt vmcnt(0)5145; SI-SDAG-NEXT: v_cvt_f16_f32_e64 v0, |v0|5146; SI-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 05147; SI-SDAG-NEXT: s_endpgm5148;5149; SI-GISEL-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5150; SI-GISEL: ; %bb.0: ; %entry5151; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x95152; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)5153; SI-GISEL-NEXT: s_load_dword s3, s[2:3], 0x05154; SI-GISEL-NEXT: s_mov_b32 s2, -15155; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)5156; SI-GISEL-NEXT: v_cvt_f16_f32_e64 v0, |s3|5157; SI-GISEL-NEXT: s_mov_b32 s3, 0xf0005158; SI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 05159; SI-GISEL-NEXT: s_endpgm5160;5161; VI-SDAG-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5162; VI-SDAG: ; %bb.0: ; %entry5163; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245164; VI-SDAG-NEXT: s_mov_b32 s7, 0xf0005165; VI-SDAG-NEXT: s_mov_b32 s6, -15166; VI-SDAG-NEXT: s_mov_b32 s10, s65167; VI-SDAG-NEXT: s_mov_b32 s11, s75168; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)5169; VI-SDAG-NEXT: s_mov_b32 s8, s25170; VI-SDAG-NEXT: s_mov_b32 s9, s35171; VI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 05172; VI-SDAG-NEXT: s_mov_b32 s4, s05173; VI-SDAG-NEXT: s_mov_b32 s5, s15174; VI-SDAG-NEXT: s_waitcnt vmcnt(0)5175; VI-SDAG-NEXT: v_cvt_f16_f32_e64 v0, |v0|5176; VI-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 05177; VI-SDAG-NEXT: s_endpgm5178;5179; VI-GISEL-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5180; VI-GISEL: ; %bb.0: ; %entry5181; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245182; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)5183; VI-GISEL-NEXT: s_load_dword s2, s[2:3], 0x05184; VI-GISEL-NEXT: s_mov_b32 s3, 0xf0005185; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)5186; VI-GISEL-NEXT: v_cvt_f16_f32_e64 v0, |s2|5187; VI-GISEL-NEXT: s_mov_b32 s2, -15188; VI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 05189; VI-GISEL-NEXT: s_endpgm5190;5191; GFX9-SDAG-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5192; GFX9-SDAG: ; %bb.0: ; %entry5193; GFX9-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245194; GFX9-SDAG-NEXT: s_mov_b32 s7, 0xf0005195; GFX9-SDAG-NEXT: s_mov_b32 s6, -15196; GFX9-SDAG-NEXT: s_mov_b32 s10, s65197; GFX9-SDAG-NEXT: s_mov_b32 s11, s75198; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)5199; GFX9-SDAG-NEXT: s_mov_b32 s8, s25200; GFX9-SDAG-NEXT: s_mov_b32 s9, s35201; GFX9-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 05202; GFX9-SDAG-NEXT: s_mov_b32 s4, s05203; GFX9-SDAG-NEXT: s_mov_b32 s5, s15204; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)5205; GFX9-SDAG-NEXT: v_cvt_f16_f32_e64 v0, |v0|5206; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 05207; GFX9-SDAG-NEXT: s_endpgm5208;5209; GFX9-GISEL-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5210; GFX9-GISEL: ; %bb.0: ; %entry5211; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245212; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)5213; GFX9-GISEL-NEXT: s_load_dword s2, s[2:3], 0x05214; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf0005215; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)5216; GFX9-GISEL-NEXT: v_cvt_f16_f32_e64 v0, |s2|5217; GFX9-GISEL-NEXT: s_mov_b32 s2, -15218; GFX9-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 05219; GFX9-GISEL-NEXT: s_endpgm5220;5221; GFX950-SDAG-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5222; GFX950-SDAG: ; %bb.0: ; %entry5223; GFX950-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245224; GFX950-SDAG-NEXT: s_mov_b32 s7, 0xf0005225; GFX950-SDAG-NEXT: s_mov_b32 s6, -15226; GFX950-SDAG-NEXT: s_mov_b32 s10, s65227; GFX950-SDAG-NEXT: s_mov_b32 s11, s75228; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)5229; GFX950-SDAG-NEXT: s_mov_b32 s8, s25230; GFX950-SDAG-NEXT: s_mov_b32 s9, s35231; GFX950-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 05232; GFX950-SDAG-NEXT: s_mov_b32 s4, s05233; GFX950-SDAG-NEXT: s_mov_b32 s5, s15234; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)5235; GFX950-SDAG-NEXT: v_cvt_f16_f32_e64 v0, |v0|5236; GFX950-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 05237; GFX950-SDAG-NEXT: s_endpgm5238;5239; GFX950-GISEL-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5240; GFX950-GISEL: ; %bb.0: ; %entry5241; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245242; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)5243; GFX950-GISEL-NEXT: s_load_dword s2, s[2:3], 0x05244; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf0005245; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)5246; GFX950-GISEL-NEXT: v_cvt_f16_f32_e64 v0, |s2|5247; GFX950-GISEL-NEXT: s_mov_b32 s2, -15248; GFX950-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 05249; GFX950-GISEL-NEXT: s_endpgm5250;5251; GFX11-SDAG-TRUE16-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5252; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry5253; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245254; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -15255; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160005256; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s65257; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s75258; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)5259; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s25260; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s35261; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s05262; GFX11-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], 05263; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s15264; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)5265; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e64 v0.l, |v0|5266; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5267; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0xffff, v05268; GFX11-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], 05269; GFX11-SDAG-TRUE16-NEXT: s_endpgm5270;5271; GFX11-SDAG-FAKE16-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5272; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry5273; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245274; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -15275; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160005276; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s65277; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s75278; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)5279; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s25280; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s35281; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s05282; GFX11-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], 05283; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s15284; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)5285; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e64 v0, |v0|5286; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5287; GFX11-SDAG-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v05288; GFX11-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], 05289; GFX11-SDAG-FAKE16-NEXT: s_endpgm5290;5291; GFX11-GISEL-TRUE16-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5292; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry5293; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245294; GFX11-GISEL-TRUE16-NEXT: v_mov_b16_e32 v0.h, 05295; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)5296; GFX11-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x05297; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160005298; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)5299; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e64 v0.l, |s2|5300; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -15301; GFX11-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], 05302; GFX11-GISEL-TRUE16-NEXT: s_endpgm5303;5304; GFX11-GISEL-FAKE16-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5305; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry5306; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245307; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)5308; GFX11-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x05309; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160005310; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)5311; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e64 v0, |s2|5312; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -15313; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5314; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v05315; GFX11-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], 05316; GFX11-GISEL-FAKE16-NEXT: s_endpgm5317;5318; GFX1250-SDAG-TRUE16-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5319; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry5320; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15321; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245322; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -15323; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160005324; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s65325; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s75326; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x05327; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s25328; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s35329; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s05330; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], null5331; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s15332; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x05333; GFX1250-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x7fffffff, v05334; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05335; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)5336; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v05337; GFX1250-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0xffff, v05338; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], null5339; GFX1250-SDAG-TRUE16-NEXT: s_endpgm5340;5341; GFX1250-SDAG-FAKE16-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5342; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry5343; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15344; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245345; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -15346; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160005347; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s65348; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s75349; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x05350; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s25351; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s35352; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s05353; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], null5354; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s15355; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x05356; GFX1250-SDAG-FAKE16-NEXT: v_and_b32_e32 v0, 0x7fffffff, v05357; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05358; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)5359; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v05360; GFX1250-SDAG-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v05361; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], null5362; GFX1250-SDAG-FAKE16-NEXT: s_endpgm5363;5364; GFX1250-GISEL-TRUE16-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5365; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry5366; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15367; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245368; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x05369; GFX1250-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x05370; GFX1250-GISEL-TRUE16-NEXT: s_wait_xcnt 0x05371; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160005372; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x05373; GFX1250-GISEL-TRUE16-NEXT: s_bitset0_b32 s2, 315374; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05375; GFX1250-GISEL-TRUE16-NEXT: s_cvt_f16_f32 s2, s25376; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3) | instskip(NEXT) | instid1(SALU_CYCLE_1)5377; GFX1250-GISEL-TRUE16-NEXT: s_and_b32 s2, 0xffff, s25378; GFX1250-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s25379; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -15380; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], null5381; GFX1250-GISEL-TRUE16-NEXT: s_endpgm5382;5383; GFX1250-GISEL-FAKE16-LABEL: fptrunc_fabs_f32_to_f16_zext_i32:5384; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry5385; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15386; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245387; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x05388; GFX1250-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x05389; GFX1250-GISEL-FAKE16-NEXT: s_wait_xcnt 0x05390; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160005391; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x05392; GFX1250-GISEL-FAKE16-NEXT: s_bitset0_b32 s2, 315393; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05394; GFX1250-GISEL-FAKE16-NEXT: s_cvt_f16_f32 s2, s25395; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3) | instskip(NEXT) | instid1(SALU_CYCLE_1)5396; GFX1250-GISEL-FAKE16-NEXT: s_and_b32 s2, 0xffff, s25397; GFX1250-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s25398; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -15399; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], null5400; GFX1250-GISEL-FAKE16-NEXT: s_endpgm5401 ptr addrspace(1) %r,5402 ptr addrspace(1) %a) #0 {5403entry:5404 %a.val = load float, ptr addrspace(1) %a5405 %a.fabs = call float @llvm.fabs.f32(float %a.val)5406 %r.val = fptrunc float %a.fabs to half5407 %r.i16 = bitcast half %r.val to i165408 %zext = zext i16 %r.i16 to i325409 store i32 %zext, ptr addrspace(1) %r5410 ret void5411}5412 5413define amdgpu_kernel void @fptrunc_f32_to_f16_sext_i32(5414; SI-SDAG-LABEL: fptrunc_f32_to_f16_sext_i32:5415; SI-SDAG: ; %bb.0: ; %entry5416; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x95417; SI-SDAG-NEXT: s_mov_b32 s7, 0xf0005418; SI-SDAG-NEXT: s_mov_b32 s6, -15419; SI-SDAG-NEXT: s_mov_b32 s10, s65420; SI-SDAG-NEXT: s_mov_b32 s11, s75421; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)5422; SI-SDAG-NEXT: s_mov_b32 s8, s25423; SI-SDAG-NEXT: s_mov_b32 s9, s35424; SI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 05425; SI-SDAG-NEXT: s_mov_b32 s4, s05426; SI-SDAG-NEXT: s_mov_b32 s5, s15427; SI-SDAG-NEXT: s_waitcnt vmcnt(0)5428; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v05429; SI-SDAG-NEXT: v_bfe_i32 v0, v0, 0, 165430; SI-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 05431; SI-SDAG-NEXT: s_endpgm5432;5433; SI-GISEL-LABEL: fptrunc_f32_to_f16_sext_i32:5434; SI-GISEL: ; %bb.0: ; %entry5435; SI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x95436; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)5437; SI-GISEL-NEXT: s_load_dword s3, s[2:3], 0x05438; SI-GISEL-NEXT: s_mov_b32 s2, -15439; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)5440; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s35441; SI-GISEL-NEXT: v_bfe_i32 v0, v0, 0, 165442; SI-GISEL-NEXT: s_mov_b32 s3, 0xf0005443; SI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 05444; SI-GISEL-NEXT: s_endpgm5445;5446; VI-SDAG-LABEL: fptrunc_f32_to_f16_sext_i32:5447; VI-SDAG: ; %bb.0: ; %entry5448; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245449; VI-SDAG-NEXT: s_mov_b32 s7, 0xf0005450; VI-SDAG-NEXT: s_mov_b32 s6, -15451; VI-SDAG-NEXT: s_mov_b32 s10, s65452; VI-SDAG-NEXT: s_mov_b32 s11, s75453; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)5454; VI-SDAG-NEXT: s_mov_b32 s8, s25455; VI-SDAG-NEXT: s_mov_b32 s9, s35456; VI-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 05457; VI-SDAG-NEXT: s_mov_b32 s4, s05458; VI-SDAG-NEXT: s_mov_b32 s5, s15459; VI-SDAG-NEXT: s_waitcnt vmcnt(0)5460; VI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v05461; VI-SDAG-NEXT: v_bfe_i32 v0, v0, 0, 165462; VI-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 05463; VI-SDAG-NEXT: s_endpgm5464;5465; VI-GISEL-LABEL: fptrunc_f32_to_f16_sext_i32:5466; VI-GISEL: ; %bb.0: ; %entry5467; VI-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245468; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)5469; VI-GISEL-NEXT: s_load_dword s2, s[2:3], 0x05470; VI-GISEL-NEXT: s_mov_b32 s3, 0xf0005471; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)5472; VI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s25473; VI-GISEL-NEXT: s_mov_b32 s2, -15474; VI-GISEL-NEXT: v_bfe_i32 v0, v0, 0, 165475; VI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 05476; VI-GISEL-NEXT: s_endpgm5477;5478; GFX9-SDAG-LABEL: fptrunc_f32_to_f16_sext_i32:5479; GFX9-SDAG: ; %bb.0: ; %entry5480; GFX9-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245481; GFX9-SDAG-NEXT: s_mov_b32 s7, 0xf0005482; GFX9-SDAG-NEXT: s_mov_b32 s6, -15483; GFX9-SDAG-NEXT: s_mov_b32 s10, s65484; GFX9-SDAG-NEXT: s_mov_b32 s11, s75485; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)5486; GFX9-SDAG-NEXT: s_mov_b32 s8, s25487; GFX9-SDAG-NEXT: s_mov_b32 s9, s35488; GFX9-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 05489; GFX9-SDAG-NEXT: s_mov_b32 s4, s05490; GFX9-SDAG-NEXT: s_mov_b32 s5, s15491; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)5492; GFX9-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v05493; GFX9-SDAG-NEXT: v_bfe_i32 v0, v0, 0, 165494; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 05495; GFX9-SDAG-NEXT: s_endpgm5496;5497; GFX9-GISEL-LABEL: fptrunc_f32_to_f16_sext_i32:5498; GFX9-GISEL: ; %bb.0: ; %entry5499; GFX9-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245500; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)5501; GFX9-GISEL-NEXT: s_load_dword s2, s[2:3], 0x05502; GFX9-GISEL-NEXT: s_mov_b32 s3, 0xf0005503; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)5504; GFX9-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s25505; GFX9-GISEL-NEXT: s_mov_b32 s2, -15506; GFX9-GISEL-NEXT: v_bfe_i32 v0, v0, 0, 165507; GFX9-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 05508; GFX9-GISEL-NEXT: s_endpgm5509;5510; GFX950-SDAG-LABEL: fptrunc_f32_to_f16_sext_i32:5511; GFX950-SDAG: ; %bb.0: ; %entry5512; GFX950-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245513; GFX950-SDAG-NEXT: s_mov_b32 s7, 0xf0005514; GFX950-SDAG-NEXT: s_mov_b32 s6, -15515; GFX950-SDAG-NEXT: s_mov_b32 s10, s65516; GFX950-SDAG-NEXT: s_mov_b32 s11, s75517; GFX950-SDAG-NEXT: s_waitcnt lgkmcnt(0)5518; GFX950-SDAG-NEXT: s_mov_b32 s8, s25519; GFX950-SDAG-NEXT: s_mov_b32 s9, s35520; GFX950-SDAG-NEXT: buffer_load_dword v0, off, s[8:11], 05521; GFX950-SDAG-NEXT: s_mov_b32 s4, s05522; GFX950-SDAG-NEXT: s_mov_b32 s5, s15523; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0)5524; GFX950-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v05525; GFX950-SDAG-NEXT: v_bfe_i32 v0, v0, 0, 165526; GFX950-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 05527; GFX950-SDAG-NEXT: s_endpgm5528;5529; GFX950-GISEL-LABEL: fptrunc_f32_to_f16_sext_i32:5530; GFX950-GISEL: ; %bb.0: ; %entry5531; GFX950-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245532; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)5533; GFX950-GISEL-NEXT: s_load_dword s2, s[2:3], 0x05534; GFX950-GISEL-NEXT: s_mov_b32 s3, 0xf0005535; GFX950-GISEL-NEXT: s_waitcnt lgkmcnt(0)5536; GFX950-GISEL-NEXT: v_cvt_f16_f32_e32 v0, s25537; GFX950-GISEL-NEXT: s_mov_b32 s2, -15538; GFX950-GISEL-NEXT: v_bfe_i32 v0, v0, 0, 165539; GFX950-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 05540; GFX950-GISEL-NEXT: s_endpgm5541;5542; GFX11-SDAG-TRUE16-LABEL: fptrunc_f32_to_f16_sext_i32:5543; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry5544; GFX11-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245545; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s6, -15546; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160005547; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s10, s65548; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s11, s75549; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)5550; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s8, s25551; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s9, s35552; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s4, s05553; GFX11-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], 05554; GFX11-SDAG-TRUE16-NEXT: s_mov_b32 s5, s15555; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0)5556; GFX11-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v05557; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5558; GFX11-SDAG-TRUE16-NEXT: v_bfe_i32 v0, v0, 0, 165559; GFX11-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], 05560; GFX11-SDAG-TRUE16-NEXT: s_endpgm5561;5562; GFX11-SDAG-FAKE16-LABEL: fptrunc_f32_to_f16_sext_i32:5563; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry5564; GFX11-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245565; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s6, -15566; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160005567; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s10, s65568; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s11, s75569; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)5570; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s8, s25571; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s9, s35572; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s4, s05573; GFX11-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], 05574; GFX11-SDAG-FAKE16-NEXT: s_mov_b32 s5, s15575; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0)5576; GFX11-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v05577; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5578; GFX11-SDAG-FAKE16-NEXT: v_bfe_i32 v0, v0, 0, 165579; GFX11-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], 05580; GFX11-SDAG-FAKE16-NEXT: s_endpgm5581;5582; GFX11-GISEL-TRUE16-LABEL: fptrunc_f32_to_f16_sext_i32:5583; GFX11-GISEL-TRUE16: ; %bb.0: ; %entry5584; GFX11-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245585; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)5586; GFX11-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x05587; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160005588; GFX11-GISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)5589; GFX11-GISEL-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, s25590; GFX11-GISEL-TRUE16-NEXT: s_mov_b32 s2, -15591; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5592; GFX11-GISEL-TRUE16-NEXT: v_bfe_i32 v0, v0, 0, 165593; GFX11-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], 05594; GFX11-GISEL-TRUE16-NEXT: s_endpgm5595;5596; GFX11-GISEL-FAKE16-LABEL: fptrunc_f32_to_f16_sext_i32:5597; GFX11-GISEL-FAKE16: ; %bb.0: ; %entry5598; GFX11-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245599; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)5600; GFX11-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x05601; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160005602; GFX11-GISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)5603; GFX11-GISEL-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, s25604; GFX11-GISEL-FAKE16-NEXT: s_mov_b32 s2, -15605; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5606; GFX11-GISEL-FAKE16-NEXT: v_bfe_i32 v0, v0, 0, 165607; GFX11-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], 05608; GFX11-GISEL-FAKE16-NEXT: s_endpgm5609;5610; GFX1250-SDAG-TRUE16-LABEL: fptrunc_f32_to_f16_sext_i32:5611; GFX1250-SDAG-TRUE16: ; %bb.0: ; %entry5612; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15613; GFX1250-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245614; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s6, -15615; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s7, 0x310160005616; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s10, s65617; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s11, s75618; GFX1250-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x05619; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s8, s25620; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s9, s35621; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s4, s05622; GFX1250-SDAG-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], null5623; GFX1250-SDAG-TRUE16-NEXT: s_mov_b32 s5, s15624; GFX1250-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x05625; GFX1250-SDAG-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05626; GFX1250-SDAG-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v05627; GFX1250-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5628; GFX1250-SDAG-TRUE16-NEXT: v_bfe_i32 v0, v0, 0, 165629; GFX1250-SDAG-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], null5630; GFX1250-SDAG-TRUE16-NEXT: s_endpgm5631;5632; GFX1250-SDAG-FAKE16-LABEL: fptrunc_f32_to_f16_sext_i32:5633; GFX1250-SDAG-FAKE16: ; %bb.0: ; %entry5634; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15635; GFX1250-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245636; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s6, -15637; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s7, 0x310160005638; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s10, s65639; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s11, s75640; GFX1250-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x05641; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s8, s25642; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s9, s35643; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s4, s05644; GFX1250-SDAG-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], null5645; GFX1250-SDAG-FAKE16-NEXT: s_mov_b32 s5, s15646; GFX1250-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x05647; GFX1250-SDAG-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05648; GFX1250-SDAG-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v05649; GFX1250-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5650; GFX1250-SDAG-FAKE16-NEXT: v_bfe_i32 v0, v0, 0, 165651; GFX1250-SDAG-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], null5652; GFX1250-SDAG-FAKE16-NEXT: s_endpgm5653;5654; GFX1250-GISEL-TRUE16-LABEL: fptrunc_f32_to_f16_sext_i32:5655; GFX1250-GISEL-TRUE16: ; %bb.0: ; %entry5656; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15657; GFX1250-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245658; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x05659; GFX1250-GISEL-TRUE16-NEXT: s_load_b32 s2, s[2:3], 0x05660; GFX1250-GISEL-TRUE16-NEXT: s_wait_xcnt 0x05661; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s3, 0x310160005662; GFX1250-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x05663; GFX1250-GISEL-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05664; GFX1250-GISEL-TRUE16-NEXT: s_cvt_f16_f32 s2, s25665; GFX1250-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3) | instskip(NEXT) | instid1(SALU_CYCLE_1)5666; GFX1250-GISEL-TRUE16-NEXT: s_sext_i32_i16 s2, s25667; GFX1250-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s25668; GFX1250-GISEL-TRUE16-NEXT: s_mov_b32 s2, -15669; GFX1250-GISEL-TRUE16-NEXT: buffer_store_b32 v0, off, s[0:3], null5670; GFX1250-GISEL-TRUE16-NEXT: s_endpgm5671;5672; GFX1250-GISEL-FAKE16-LABEL: fptrunc_f32_to_f16_sext_i32:5673; GFX1250-GISEL-FAKE16: ; %bb.0: ; %entry5674; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15675; GFX1250-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x245676; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x05677; GFX1250-GISEL-FAKE16-NEXT: s_load_b32 s2, s[2:3], 0x05678; GFX1250-GISEL-FAKE16-NEXT: s_wait_xcnt 0x05679; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s3, 0x310160005680; GFX1250-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x05681; GFX1250-GISEL-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 2, 2), 05682; GFX1250-GISEL-FAKE16-NEXT: s_cvt_f16_f32 s2, s25683; GFX1250-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_3) | instskip(NEXT) | instid1(SALU_CYCLE_1)5684; GFX1250-GISEL-FAKE16-NEXT: s_sext_i32_i16 s2, s25685; GFX1250-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s25686; GFX1250-GISEL-FAKE16-NEXT: s_mov_b32 s2, -15687; GFX1250-GISEL-FAKE16-NEXT: buffer_store_b32 v0, off, s[0:3], null5688; GFX1250-GISEL-FAKE16-NEXT: s_endpgm5689 ptr addrspace(1) %r,5690 ptr addrspace(1) %a) #0 {5691entry:5692 %a.val = load float, ptr addrspace(1) %a5693 %r.val = fptrunc float %a.val to half5694 %r.i16 = bitcast half %r.val to i165695 %zext = sext i16 %r.i16 to i325696 store i32 %zext, ptr addrspace(1) %r5697 ret void5698}5699 5700declare float @llvm.fabs.f32(float) #15701 5702attributes #0 = { nounwind }5703attributes #1 = { nounwind readnone }5704