1065 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=amdgcn < %s | FileCheck -enable-var-scope -check-prefixes=SI %s3; RUN: llc -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=VI %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX9 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX11,GFX11-TRUE16 %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX11,GFX11-FAKE16 %s7; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX12,GFX12-TRUE16 %s8; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX12,GFX12-FAKE16 %s9; RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -mattr=+real-true16 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX1250,GFX1250-TRUE16 %s10; RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -mattr=-real-true16 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX1250,GFX1250-FAKE16 %s11 12define amdgpu_kernel void @test_fmax3_olt_0_f32(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {13; SI-LABEL: test_fmax3_olt_0_f32:14; SI: ; %bb.0:15; SI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x916; SI-NEXT: s_mov_b32 s11, 0xf00017; SI-NEXT: s_mov_b32 s10, -118; SI-NEXT: s_mov_b32 s14, s1019; SI-NEXT: s_mov_b32 s15, s1120; SI-NEXT: s_mov_b32 s18, s1021; SI-NEXT: s_mov_b32 s19, s1122; SI-NEXT: s_mov_b32 s22, s1023; SI-NEXT: s_mov_b32 s23, s1124; SI-NEXT: s_waitcnt lgkmcnt(0)25; SI-NEXT: s_mov_b32 s12, s226; SI-NEXT: s_mov_b32 s13, s327; SI-NEXT: s_mov_b32 s16, s428; SI-NEXT: s_mov_b32 s17, s529; SI-NEXT: s_mov_b32 s20, s630; SI-NEXT: s_mov_b32 s21, s731; SI-NEXT: buffer_load_dword v0, off, s[12:15], 0 glc32; SI-NEXT: s_waitcnt vmcnt(0)33; SI-NEXT: buffer_load_dword v1, off, s[16:19], 0 glc34; SI-NEXT: s_waitcnt vmcnt(0)35; SI-NEXT: buffer_load_dword v2, off, s[20:23], 0 glc36; SI-NEXT: s_waitcnt vmcnt(0)37; SI-NEXT: s_mov_b32 s8, s038; SI-NEXT: s_mov_b32 s9, s139; SI-NEXT: v_max3_f32 v0, v0, v1, v240; SI-NEXT: buffer_store_dword v0, off, s[8:11], 041; SI-NEXT: s_endpgm42;43; VI-LABEL: test_fmax3_olt_0_f32:44; VI: ; %bb.0:45; VI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x2446; VI-NEXT: s_mov_b32 s11, 0xf00047; VI-NEXT: s_mov_b32 s10, -148; VI-NEXT: s_mov_b32 s14, s1049; VI-NEXT: s_mov_b32 s15, s1150; VI-NEXT: s_waitcnt lgkmcnt(0)51; VI-NEXT: s_mov_b32 s12, s252; VI-NEXT: s_mov_b32 s13, s353; VI-NEXT: s_mov_b32 s16, s454; VI-NEXT: s_mov_b32 s17, s555; VI-NEXT: s_mov_b32 s18, s1056; VI-NEXT: s_mov_b32 s19, s1157; VI-NEXT: s_mov_b32 s4, s658; VI-NEXT: s_mov_b32 s5, s759; VI-NEXT: s_mov_b32 s6, s1060; VI-NEXT: s_mov_b32 s7, s1161; VI-NEXT: buffer_load_dword v0, off, s[12:15], 0 glc62; VI-NEXT: s_waitcnt vmcnt(0)63; VI-NEXT: buffer_load_dword v1, off, s[16:19], 0 glc64; VI-NEXT: s_waitcnt vmcnt(0)65; VI-NEXT: buffer_load_dword v2, off, s[4:7], 0 glc66; VI-NEXT: s_waitcnt vmcnt(0)67; VI-NEXT: s_mov_b32 s8, s068; VI-NEXT: s_mov_b32 s9, s169; VI-NEXT: v_max3_f32 v0, v0, v1, v270; VI-NEXT: buffer_store_dword v0, off, s[8:11], 071; VI-NEXT: s_endpgm72;73; GFX9-LABEL: test_fmax3_olt_0_f32:74; GFX9: ; %bb.0:75; GFX9-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x2476; GFX9-NEXT: s_mov_b32 s3, 0xf00077; GFX9-NEXT: s_mov_b32 s2, -178; GFX9-NEXT: s_mov_b32 s6, s279; GFX9-NEXT: s_mov_b32 s7, s380; GFX9-NEXT: s_waitcnt lgkmcnt(0)81; GFX9-NEXT: s_mov_b32 s4, s1082; GFX9-NEXT: s_mov_b32 s5, s1183; GFX9-NEXT: s_mov_b32 s16, s1284; GFX9-NEXT: s_mov_b32 s17, s1385; GFX9-NEXT: s_mov_b32 s18, s286; GFX9-NEXT: s_mov_b32 s19, s387; GFX9-NEXT: s_mov_b32 s12, s1488; GFX9-NEXT: s_mov_b32 s13, s1589; GFX9-NEXT: s_mov_b32 s14, s290; GFX9-NEXT: s_mov_b32 s15, s391; GFX9-NEXT: buffer_load_dword v0, off, s[4:7], 0 glc92; GFX9-NEXT: s_waitcnt vmcnt(0)93; GFX9-NEXT: buffer_load_dword v1, off, s[16:19], 0 glc94; GFX9-NEXT: s_waitcnt vmcnt(0)95; GFX9-NEXT: buffer_load_dword v2, off, s[12:15], 0 glc96; GFX9-NEXT: s_waitcnt vmcnt(0)97; GFX9-NEXT: s_mov_b32 s0, s898; GFX9-NEXT: s_mov_b32 s1, s999; GFX9-NEXT: v_max3_f32 v0, v0, v1, v2100; GFX9-NEXT: buffer_store_dword v0, off, s[0:3], 0101; GFX9-NEXT: s_endpgm102;103; GFX11-LABEL: test_fmax3_olt_0_f32:104; GFX11: ; %bb.0:105; GFX11-NEXT: s_load_b256 s[0:7], s[4:5], 0x24106; GFX11-NEXT: s_mov_b32 s10, -1107; GFX11-NEXT: s_mov_b32 s11, 0x31016000108; GFX11-NEXT: s_mov_b32 s14, s10109; GFX11-NEXT: s_mov_b32 s15, s11110; GFX11-NEXT: s_mov_b32 s18, s10111; GFX11-NEXT: s_mov_b32 s19, s11112; GFX11-NEXT: s_mov_b32 s22, s10113; GFX11-NEXT: s_mov_b32 s23, s11114; GFX11-NEXT: s_waitcnt lgkmcnt(0)115; GFX11-NEXT: s_mov_b32 s12, s2116; GFX11-NEXT: s_mov_b32 s13, s3117; GFX11-NEXT: s_mov_b32 s16, s4118; GFX11-NEXT: s_mov_b32 s17, s5119; GFX11-NEXT: s_mov_b32 s20, s6120; GFX11-NEXT: s_mov_b32 s21, s7121; GFX11-NEXT: buffer_load_b32 v0, off, s[12:15], 0 glc dlc122; GFX11-NEXT: s_waitcnt vmcnt(0)123; GFX11-NEXT: buffer_load_b32 v1, off, s[16:19], 0 glc dlc124; GFX11-NEXT: s_waitcnt vmcnt(0)125; GFX11-NEXT: buffer_load_b32 v2, off, s[20:23], 0 glc dlc126; GFX11-NEXT: s_waitcnt vmcnt(0)127; GFX11-NEXT: s_mov_b32 s8, s0128; GFX11-NEXT: s_mov_b32 s9, s1129; GFX11-NEXT: v_max3_f32 v0, v0, v1, v2130; GFX11-NEXT: buffer_store_b32 v0, off, s[8:11], 0131; GFX11-NEXT: s_endpgm132;133; GFX12-LABEL: test_fmax3_olt_0_f32:134; GFX12: ; %bb.0:135; GFX12-NEXT: s_load_b256 s[0:7], s[4:5], 0x24136; GFX12-NEXT: s_mov_b32 s10, -1137; GFX12-NEXT: s_mov_b32 s11, 0x31016000138; GFX12-NEXT: s_mov_b32 s14, s10139; GFX12-NEXT: s_mov_b32 s15, s11140; GFX12-NEXT: s_mov_b32 s18, s10141; GFX12-NEXT: s_mov_b32 s19, s11142; GFX12-NEXT: s_mov_b32 s22, s10143; GFX12-NEXT: s_mov_b32 s23, s11144; GFX12-NEXT: s_wait_kmcnt 0x0145; GFX12-NEXT: s_mov_b32 s12, s2146; GFX12-NEXT: s_mov_b32 s13, s3147; GFX12-NEXT: s_mov_b32 s16, s4148; GFX12-NEXT: s_mov_b32 s17, s5149; GFX12-NEXT: s_mov_b32 s20, s6150; GFX12-NEXT: s_mov_b32 s21, s7151; GFX12-NEXT: buffer_load_b32 v0, off, s[12:15], null scope:SCOPE_SYS152; GFX12-NEXT: s_wait_loadcnt 0x0153; GFX12-NEXT: buffer_load_b32 v1, off, s[16:19], null scope:SCOPE_SYS154; GFX12-NEXT: s_wait_loadcnt 0x0155; GFX12-NEXT: buffer_load_b32 v2, off, s[20:23], null scope:SCOPE_SYS156; GFX12-NEXT: s_wait_loadcnt 0x0157; GFX12-NEXT: s_mov_b32 s8, s0158; GFX12-NEXT: s_mov_b32 s9, s1159; GFX12-NEXT: v_max3_num_f32 v0, v0, v1, v2160; GFX12-NEXT: buffer_store_b32 v0, off, s[8:11], null161; GFX12-NEXT: s_endpgm162;163; GFX1250-LABEL: test_fmax3_olt_0_f32:164; GFX1250: ; %bb.0:165; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1166; GFX1250-NEXT: s_load_b256 s[8:15], s[4:5], 0x24167; GFX1250-NEXT: s_mov_b32 s2, -1168; GFX1250-NEXT: s_mov_b32 s3, 0x31016000169; GFX1250-NEXT: s_mov_b32 s6, s2170; GFX1250-NEXT: s_mov_b32 s7, s3171; GFX1250-NEXT: s_mov_b32 s18, s2172; GFX1250-NEXT: s_mov_b32 s19, s3173; GFX1250-NEXT: s_mov_b32 s22, s2174; GFX1250-NEXT: s_mov_b32 s23, s3175; GFX1250-NEXT: s_wait_kmcnt 0x0176; GFX1250-NEXT: s_mov_b32 s4, s10177; GFX1250-NEXT: s_mov_b32 s5, s11178; GFX1250-NEXT: s_mov_b32 s16, s12179; GFX1250-NEXT: s_mov_b32 s17, s13180; GFX1250-NEXT: s_mov_b32 s20, s14181; GFX1250-NEXT: s_mov_b32 s21, s15182; GFX1250-NEXT: buffer_load_b32 v0, off, s[4:7], null scope:SCOPE_SYS183; GFX1250-NEXT: s_wait_loadcnt 0x0184; GFX1250-NEXT: buffer_load_b32 v1, off, s[16:19], null scope:SCOPE_SYS185; GFX1250-NEXT: s_wait_loadcnt 0x0186; GFX1250-NEXT: buffer_load_b32 v2, off, s[20:23], null scope:SCOPE_SYS187; GFX1250-NEXT: s_wait_loadcnt 0x0188; GFX1250-NEXT: s_mov_b32 s0, s8189; GFX1250-NEXT: s_mov_b32 s1, s9190; GFX1250-NEXT: v_max3_num_f32 v0, v0, v1, v2191; GFX1250-NEXT: buffer_store_b32 v0, off, s[0:3], null192; GFX1250-NEXT: s_endpgm193 %a = load volatile float, ptr addrspace(1) %aptr, align 4194 %b = load volatile float, ptr addrspace(1) %bptr, align 4195 %c = load volatile float, ptr addrspace(1) %cptr, align 4196 %f0 = call float @llvm.maxnum.f32(float %a, float %b)197 %f1 = call float @llvm.maxnum.f32(float %f0, float %c)198 store float %f1, ptr addrspace(1) %out, align 4199 ret void200}201 202; Commute operand of second fmax203define amdgpu_kernel void @test_fmax3_olt_1_f32(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {204; SI-LABEL: test_fmax3_olt_1_f32:205; SI: ; %bb.0:206; SI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x9207; SI-NEXT: s_mov_b32 s11, 0xf000208; SI-NEXT: s_mov_b32 s10, -1209; SI-NEXT: s_mov_b32 s14, s10210; SI-NEXT: s_mov_b32 s15, s11211; SI-NEXT: s_mov_b32 s18, s10212; SI-NEXT: s_mov_b32 s19, s11213; SI-NEXT: s_mov_b32 s22, s10214; SI-NEXT: s_mov_b32 s23, s11215; SI-NEXT: s_waitcnt lgkmcnt(0)216; SI-NEXT: s_mov_b32 s12, s2217; SI-NEXT: s_mov_b32 s13, s3218; SI-NEXT: s_mov_b32 s16, s4219; SI-NEXT: s_mov_b32 s17, s5220; SI-NEXT: s_mov_b32 s20, s6221; SI-NEXT: s_mov_b32 s21, s7222; SI-NEXT: buffer_load_dword v0, off, s[12:15], 0 glc223; SI-NEXT: s_waitcnt vmcnt(0)224; SI-NEXT: buffer_load_dword v1, off, s[16:19], 0 glc225; SI-NEXT: s_waitcnt vmcnt(0)226; SI-NEXT: buffer_load_dword v2, off, s[20:23], 0 glc227; SI-NEXT: s_waitcnt vmcnt(0)228; SI-NEXT: s_mov_b32 s8, s0229; SI-NEXT: s_mov_b32 s9, s1230; SI-NEXT: v_max3_f32 v0, v2, v0, v1231; SI-NEXT: buffer_store_dword v0, off, s[8:11], 0232; SI-NEXT: s_endpgm233;234; VI-LABEL: test_fmax3_olt_1_f32:235; VI: ; %bb.0:236; VI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x24237; VI-NEXT: s_mov_b32 s11, 0xf000238; VI-NEXT: s_mov_b32 s10, -1239; VI-NEXT: s_mov_b32 s14, s10240; VI-NEXT: s_mov_b32 s15, s11241; VI-NEXT: s_waitcnt lgkmcnt(0)242; VI-NEXT: s_mov_b32 s12, s2243; VI-NEXT: s_mov_b32 s13, s3244; VI-NEXT: s_mov_b32 s16, s4245; VI-NEXT: s_mov_b32 s17, s5246; VI-NEXT: s_mov_b32 s18, s10247; VI-NEXT: s_mov_b32 s19, s11248; VI-NEXT: s_mov_b32 s4, s6249; VI-NEXT: s_mov_b32 s5, s7250; VI-NEXT: s_mov_b32 s6, s10251; VI-NEXT: s_mov_b32 s7, s11252; VI-NEXT: buffer_load_dword v0, off, s[12:15], 0 glc253; VI-NEXT: s_waitcnt vmcnt(0)254; VI-NEXT: buffer_load_dword v1, off, s[16:19], 0 glc255; VI-NEXT: s_waitcnt vmcnt(0)256; VI-NEXT: buffer_load_dword v2, off, s[4:7], 0 glc257; VI-NEXT: s_waitcnt vmcnt(0)258; VI-NEXT: s_mov_b32 s8, s0259; VI-NEXT: s_mov_b32 s9, s1260; VI-NEXT: v_max3_f32 v0, v2, v0, v1261; VI-NEXT: buffer_store_dword v0, off, s[8:11], 0262; VI-NEXT: s_endpgm263;264; GFX9-LABEL: test_fmax3_olt_1_f32:265; GFX9: ; %bb.0:266; GFX9-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x24267; GFX9-NEXT: s_mov_b32 s3, 0xf000268; GFX9-NEXT: s_mov_b32 s2, -1269; GFX9-NEXT: s_mov_b32 s6, s2270; GFX9-NEXT: s_mov_b32 s7, s3271; GFX9-NEXT: s_waitcnt lgkmcnt(0)272; GFX9-NEXT: s_mov_b32 s4, s10273; GFX9-NEXT: s_mov_b32 s5, s11274; GFX9-NEXT: s_mov_b32 s16, s12275; GFX9-NEXT: s_mov_b32 s17, s13276; GFX9-NEXT: s_mov_b32 s18, s2277; GFX9-NEXT: s_mov_b32 s19, s3278; GFX9-NEXT: s_mov_b32 s12, s14279; GFX9-NEXT: s_mov_b32 s13, s15280; GFX9-NEXT: s_mov_b32 s14, s2281; GFX9-NEXT: s_mov_b32 s15, s3282; GFX9-NEXT: buffer_load_dword v0, off, s[4:7], 0 glc283; GFX9-NEXT: s_waitcnt vmcnt(0)284; GFX9-NEXT: buffer_load_dword v1, off, s[16:19], 0 glc285; GFX9-NEXT: s_waitcnt vmcnt(0)286; GFX9-NEXT: buffer_load_dword v2, off, s[12:15], 0 glc287; GFX9-NEXT: s_waitcnt vmcnt(0)288; GFX9-NEXT: s_mov_b32 s0, s8289; GFX9-NEXT: s_mov_b32 s1, s9290; GFX9-NEXT: v_max3_f32 v0, v2, v0, v1291; GFX9-NEXT: buffer_store_dword v0, off, s[0:3], 0292; GFX9-NEXT: s_endpgm293;294; GFX11-LABEL: test_fmax3_olt_1_f32:295; GFX11: ; %bb.0:296; GFX11-NEXT: s_load_b256 s[0:7], s[4:5], 0x24297; GFX11-NEXT: s_mov_b32 s10, -1298; GFX11-NEXT: s_mov_b32 s11, 0x31016000299; GFX11-NEXT: s_mov_b32 s14, s10300; GFX11-NEXT: s_mov_b32 s15, s11301; GFX11-NEXT: s_mov_b32 s18, s10302; GFX11-NEXT: s_mov_b32 s19, s11303; GFX11-NEXT: s_mov_b32 s22, s10304; GFX11-NEXT: s_mov_b32 s23, s11305; GFX11-NEXT: s_waitcnt lgkmcnt(0)306; GFX11-NEXT: s_mov_b32 s12, s2307; GFX11-NEXT: s_mov_b32 s13, s3308; GFX11-NEXT: s_mov_b32 s16, s4309; GFX11-NEXT: s_mov_b32 s17, s5310; GFX11-NEXT: s_mov_b32 s20, s6311; GFX11-NEXT: s_mov_b32 s21, s7312; GFX11-NEXT: buffer_load_b32 v0, off, s[12:15], 0 glc dlc313; GFX11-NEXT: s_waitcnt vmcnt(0)314; GFX11-NEXT: buffer_load_b32 v1, off, s[16:19], 0 glc dlc315; GFX11-NEXT: s_waitcnt vmcnt(0)316; GFX11-NEXT: buffer_load_b32 v2, off, s[20:23], 0 glc dlc317; GFX11-NEXT: s_waitcnt vmcnt(0)318; GFX11-NEXT: s_mov_b32 s8, s0319; GFX11-NEXT: s_mov_b32 s9, s1320; GFX11-NEXT: v_max3_f32 v0, v2, v0, v1321; GFX11-NEXT: buffer_store_b32 v0, off, s[8:11], 0322; GFX11-NEXT: s_endpgm323;324; GFX12-LABEL: test_fmax3_olt_1_f32:325; GFX12: ; %bb.0:326; GFX12-NEXT: s_load_b256 s[0:7], s[4:5], 0x24327; GFX12-NEXT: s_mov_b32 s10, -1328; GFX12-NEXT: s_mov_b32 s11, 0x31016000329; GFX12-NEXT: s_mov_b32 s14, s10330; GFX12-NEXT: s_mov_b32 s15, s11331; GFX12-NEXT: s_mov_b32 s18, s10332; GFX12-NEXT: s_mov_b32 s19, s11333; GFX12-NEXT: s_mov_b32 s22, s10334; GFX12-NEXT: s_mov_b32 s23, s11335; GFX12-NEXT: s_wait_kmcnt 0x0336; GFX12-NEXT: s_mov_b32 s12, s2337; GFX12-NEXT: s_mov_b32 s13, s3338; GFX12-NEXT: s_mov_b32 s16, s4339; GFX12-NEXT: s_mov_b32 s17, s5340; GFX12-NEXT: s_mov_b32 s20, s6341; GFX12-NEXT: s_mov_b32 s21, s7342; GFX12-NEXT: buffer_load_b32 v0, off, s[12:15], null scope:SCOPE_SYS343; GFX12-NEXT: s_wait_loadcnt 0x0344; GFX12-NEXT: buffer_load_b32 v1, off, s[16:19], null scope:SCOPE_SYS345; GFX12-NEXT: s_wait_loadcnt 0x0346; GFX12-NEXT: buffer_load_b32 v2, off, s[20:23], null scope:SCOPE_SYS347; GFX12-NEXT: s_wait_loadcnt 0x0348; GFX12-NEXT: s_mov_b32 s8, s0349; GFX12-NEXT: s_mov_b32 s9, s1350; GFX12-NEXT: v_max3_num_f32 v0, v2, v0, v1351; GFX12-NEXT: buffer_store_b32 v0, off, s[8:11], null352; GFX12-NEXT: s_endpgm353;354; GFX1250-LABEL: test_fmax3_olt_1_f32:355; GFX1250: ; %bb.0:356; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1357; GFX1250-NEXT: s_load_b256 s[8:15], s[4:5], 0x24358; GFX1250-NEXT: s_mov_b32 s2, -1359; GFX1250-NEXT: s_mov_b32 s3, 0x31016000360; GFX1250-NEXT: s_mov_b32 s6, s2361; GFX1250-NEXT: s_mov_b32 s7, s3362; GFX1250-NEXT: s_mov_b32 s18, s2363; GFX1250-NEXT: s_mov_b32 s19, s3364; GFX1250-NEXT: s_mov_b32 s22, s2365; GFX1250-NEXT: s_mov_b32 s23, s3366; GFX1250-NEXT: s_wait_kmcnt 0x0367; GFX1250-NEXT: s_mov_b32 s4, s10368; GFX1250-NEXT: s_mov_b32 s5, s11369; GFX1250-NEXT: s_mov_b32 s16, s12370; GFX1250-NEXT: s_mov_b32 s17, s13371; GFX1250-NEXT: s_mov_b32 s20, s14372; GFX1250-NEXT: s_mov_b32 s21, s15373; GFX1250-NEXT: buffer_load_b32 v0, off, s[4:7], null scope:SCOPE_SYS374; GFX1250-NEXT: s_wait_loadcnt 0x0375; GFX1250-NEXT: buffer_load_b32 v1, off, s[16:19], null scope:SCOPE_SYS376; GFX1250-NEXT: s_wait_loadcnt 0x0377; GFX1250-NEXT: buffer_load_b32 v2, off, s[20:23], null scope:SCOPE_SYS378; GFX1250-NEXT: s_wait_loadcnt 0x0379; GFX1250-NEXT: s_mov_b32 s0, s8380; GFX1250-NEXT: s_mov_b32 s1, s9381; GFX1250-NEXT: v_max3_num_f32 v0, v2, v0, v1382; GFX1250-NEXT: buffer_store_b32 v0, off, s[0:3], null383; GFX1250-NEXT: s_endpgm384 %a = load volatile float, ptr addrspace(1) %aptr, align 4385 %b = load volatile float, ptr addrspace(1) %bptr, align 4386 %c = load volatile float, ptr addrspace(1) %cptr, align 4387 %f0 = call float @llvm.maxnum.f32(float %a, float %b)388 %f1 = call float @llvm.maxnum.f32(float %c, float %f0)389 store float %f1, ptr addrspace(1) %out, align 4390 ret void391}392 393define amdgpu_kernel void @test_fmax3_olt_0_f16(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {394; SI-LABEL: test_fmax3_olt_0_f16:395; SI: ; %bb.0:396; SI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x9397; SI-NEXT: s_mov_b32 s11, 0xf000398; SI-NEXT: s_mov_b32 s10, -1399; SI-NEXT: s_mov_b32 s14, s10400; SI-NEXT: s_mov_b32 s15, s11401; SI-NEXT: s_mov_b32 s18, s10402; SI-NEXT: s_mov_b32 s19, s11403; SI-NEXT: s_mov_b32 s22, s10404; SI-NEXT: s_mov_b32 s23, s11405; SI-NEXT: s_waitcnt lgkmcnt(0)406; SI-NEXT: s_mov_b32 s12, s2407; SI-NEXT: s_mov_b32 s13, s3408; SI-NEXT: s_mov_b32 s16, s4409; SI-NEXT: s_mov_b32 s17, s5410; SI-NEXT: s_mov_b32 s20, s6411; SI-NEXT: s_mov_b32 s21, s7412; SI-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc413; SI-NEXT: s_waitcnt vmcnt(0)414; SI-NEXT: buffer_load_ushort v1, off, s[16:19], 0 glc415; SI-NEXT: s_waitcnt vmcnt(0)416; SI-NEXT: buffer_load_ushort v2, off, s[20:23], 0 glc417; SI-NEXT: s_waitcnt vmcnt(0)418; SI-NEXT: s_mov_b32 s8, s0419; SI-NEXT: s_mov_b32 s9, s1420; SI-NEXT: v_cvt_f32_f16_e32 v0, v0421; SI-NEXT: v_cvt_f32_f16_e32 v1, v1422; SI-NEXT: v_cvt_f32_f16_e32 v2, v2423; SI-NEXT: v_max3_f32 v0, v0, v1, v2424; SI-NEXT: v_cvt_f16_f32_e32 v0, v0425; SI-NEXT: buffer_store_short v0, off, s[8:11], 0426; SI-NEXT: s_endpgm427;428; VI-LABEL: test_fmax3_olt_0_f16:429; VI: ; %bb.0:430; VI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x24431; VI-NEXT: s_mov_b32 s11, 0xf000432; VI-NEXT: s_mov_b32 s10, -1433; VI-NEXT: s_mov_b32 s14, s10434; VI-NEXT: s_mov_b32 s15, s11435; VI-NEXT: s_waitcnt lgkmcnt(0)436; VI-NEXT: s_mov_b32 s12, s2437; VI-NEXT: s_mov_b32 s13, s3438; VI-NEXT: s_mov_b32 s16, s4439; VI-NEXT: s_mov_b32 s17, s5440; VI-NEXT: s_mov_b32 s18, s10441; VI-NEXT: s_mov_b32 s19, s11442; VI-NEXT: s_mov_b32 s4, s6443; VI-NEXT: s_mov_b32 s5, s7444; VI-NEXT: s_mov_b32 s6, s10445; VI-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc446; VI-NEXT: s_waitcnt vmcnt(0)447; VI-NEXT: buffer_load_ushort v1, off, s[16:19], 0 glc448; VI-NEXT: s_waitcnt vmcnt(0)449; VI-NEXT: s_mov_b32 s7, s11450; VI-NEXT: buffer_load_ushort v2, off, s[4:7], 0 glc451; VI-NEXT: s_waitcnt vmcnt(0)452; VI-NEXT: s_mov_b32 s8, s0453; VI-NEXT: s_mov_b32 s9, s1454; VI-NEXT: v_max_f16_e32 v0, v0, v0455; VI-NEXT: v_max_f16_e32 v1, v1, v1456; VI-NEXT: v_max_f16_e32 v0, v0, v1457; VI-NEXT: v_max_f16_e32 v1, v2, v2458; VI-NEXT: v_max_f16_e32 v0, v0, v1459; VI-NEXT: buffer_store_short v0, off, s[8:11], 0460; VI-NEXT: s_endpgm461;462; GFX9-LABEL: test_fmax3_olt_0_f16:463; GFX9: ; %bb.0:464; GFX9-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x24465; GFX9-NEXT: s_mov_b32 s3, 0xf000466; GFX9-NEXT: s_mov_b32 s2, -1467; GFX9-NEXT: s_mov_b32 s6, s2468; GFX9-NEXT: s_mov_b32 s7, s3469; GFX9-NEXT: s_waitcnt lgkmcnt(0)470; GFX9-NEXT: s_mov_b32 s4, s10471; GFX9-NEXT: s_mov_b32 s5, s11472; GFX9-NEXT: s_mov_b32 s16, s12473; GFX9-NEXT: s_mov_b32 s17, s13474; GFX9-NEXT: s_mov_b32 s18, s2475; GFX9-NEXT: s_mov_b32 s19, s3476; GFX9-NEXT: s_mov_b32 s12, s14477; GFX9-NEXT: s_mov_b32 s13, s15478; GFX9-NEXT: s_mov_b32 s14, s2479; GFX9-NEXT: s_mov_b32 s15, s3480; GFX9-NEXT: buffer_load_ushort v0, off, s[4:7], 0 glc481; GFX9-NEXT: s_waitcnt vmcnt(0)482; GFX9-NEXT: buffer_load_ushort v1, off, s[16:19], 0 glc483; GFX9-NEXT: s_waitcnt vmcnt(0)484; GFX9-NEXT: buffer_load_ushort v2, off, s[12:15], 0 glc485; GFX9-NEXT: s_waitcnt vmcnt(0)486; GFX9-NEXT: s_mov_b32 s0, s8487; GFX9-NEXT: s_mov_b32 s1, s9488; GFX9-NEXT: v_max3_f16 v0, v0, v1, v2489; GFX9-NEXT: buffer_store_short v0, off, s[0:3], 0490; GFX9-NEXT: s_endpgm491;492; GFX11-TRUE16-LABEL: test_fmax3_olt_0_f16:493; GFX11-TRUE16: ; %bb.0:494; GFX11-TRUE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24495; GFX11-TRUE16-NEXT: s_mov_b32 s10, -1496; GFX11-TRUE16-NEXT: s_mov_b32 s11, 0x31016000497; GFX11-TRUE16-NEXT: s_mov_b32 s14, s10498; GFX11-TRUE16-NEXT: s_mov_b32 s15, s11499; GFX11-TRUE16-NEXT: s_mov_b32 s18, s10500; GFX11-TRUE16-NEXT: s_mov_b32 s19, s11501; GFX11-TRUE16-NEXT: s_mov_b32 s22, s10502; GFX11-TRUE16-NEXT: s_mov_b32 s23, s11503; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)504; GFX11-TRUE16-NEXT: s_mov_b32 s12, s2505; GFX11-TRUE16-NEXT: s_mov_b32 s13, s3506; GFX11-TRUE16-NEXT: s_mov_b32 s16, s4507; GFX11-TRUE16-NEXT: s_mov_b32 s17, s5508; GFX11-TRUE16-NEXT: s_mov_b32 s20, s6509; GFX11-TRUE16-NEXT: s_mov_b32 s21, s7510; GFX11-TRUE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0 glc dlc511; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)512; GFX11-TRUE16-NEXT: buffer_load_u16 v1, off, s[16:19], 0 glc dlc513; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)514; GFX11-TRUE16-NEXT: buffer_load_u16 v2, off, s[20:23], 0 glc dlc515; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)516; GFX11-TRUE16-NEXT: s_mov_b32 s8, s0517; GFX11-TRUE16-NEXT: s_mov_b32 s9, s1518; GFX11-TRUE16-NEXT: v_max3_f16 v0.l, v0.l, v1.l, v2.l519; GFX11-TRUE16-NEXT: buffer_store_b16 v0, off, s[8:11], 0520; GFX11-TRUE16-NEXT: s_endpgm521;522; GFX11-FAKE16-LABEL: test_fmax3_olt_0_f16:523; GFX11-FAKE16: ; %bb.0:524; GFX11-FAKE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24525; GFX11-FAKE16-NEXT: s_mov_b32 s10, -1526; GFX11-FAKE16-NEXT: s_mov_b32 s11, 0x31016000527; GFX11-FAKE16-NEXT: s_mov_b32 s14, s10528; GFX11-FAKE16-NEXT: s_mov_b32 s15, s11529; GFX11-FAKE16-NEXT: s_mov_b32 s18, s10530; GFX11-FAKE16-NEXT: s_mov_b32 s19, s11531; GFX11-FAKE16-NEXT: s_mov_b32 s22, s10532; GFX11-FAKE16-NEXT: s_mov_b32 s23, s11533; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)534; GFX11-FAKE16-NEXT: s_mov_b32 s12, s2535; GFX11-FAKE16-NEXT: s_mov_b32 s13, s3536; GFX11-FAKE16-NEXT: s_mov_b32 s16, s4537; GFX11-FAKE16-NEXT: s_mov_b32 s17, s5538; GFX11-FAKE16-NEXT: s_mov_b32 s20, s6539; GFX11-FAKE16-NEXT: s_mov_b32 s21, s7540; GFX11-FAKE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0 glc dlc541; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)542; GFX11-FAKE16-NEXT: buffer_load_u16 v1, off, s[16:19], 0 glc dlc543; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)544; GFX11-FAKE16-NEXT: buffer_load_u16 v2, off, s[20:23], 0 glc dlc545; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)546; GFX11-FAKE16-NEXT: s_mov_b32 s8, s0547; GFX11-FAKE16-NEXT: s_mov_b32 s9, s1548; GFX11-FAKE16-NEXT: v_max3_f16 v0, v0, v1, v2549; GFX11-FAKE16-NEXT: buffer_store_b16 v0, off, s[8:11], 0550; GFX11-FAKE16-NEXT: s_endpgm551;552; GFX12-TRUE16-LABEL: test_fmax3_olt_0_f16:553; GFX12-TRUE16: ; %bb.0:554; GFX12-TRUE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24555; GFX12-TRUE16-NEXT: s_mov_b32 s10, -1556; GFX12-TRUE16-NEXT: s_mov_b32 s11, 0x31016000557; GFX12-TRUE16-NEXT: s_mov_b32 s14, s10558; GFX12-TRUE16-NEXT: s_mov_b32 s15, s11559; GFX12-TRUE16-NEXT: s_mov_b32 s18, s10560; GFX12-TRUE16-NEXT: s_mov_b32 s19, s11561; GFX12-TRUE16-NEXT: s_mov_b32 s22, s10562; GFX12-TRUE16-NEXT: s_mov_b32 s23, s11563; GFX12-TRUE16-NEXT: s_wait_kmcnt 0x0564; GFX12-TRUE16-NEXT: s_mov_b32 s12, s2565; GFX12-TRUE16-NEXT: s_mov_b32 s13, s3566; GFX12-TRUE16-NEXT: s_mov_b32 s16, s4567; GFX12-TRUE16-NEXT: s_mov_b32 s17, s5568; GFX12-TRUE16-NEXT: s_mov_b32 s20, s6569; GFX12-TRUE16-NEXT: s_mov_b32 s21, s7570; GFX12-TRUE16-NEXT: buffer_load_u16 v0, off, s[12:15], null scope:SCOPE_SYS571; GFX12-TRUE16-NEXT: s_wait_loadcnt 0x0572; GFX12-TRUE16-NEXT: buffer_load_u16 v1, off, s[16:19], null scope:SCOPE_SYS573; GFX12-TRUE16-NEXT: s_wait_loadcnt 0x0574; GFX12-TRUE16-NEXT: buffer_load_u16 v2, off, s[20:23], null scope:SCOPE_SYS575; GFX12-TRUE16-NEXT: s_wait_loadcnt 0x0576; GFX12-TRUE16-NEXT: s_mov_b32 s8, s0577; GFX12-TRUE16-NEXT: s_mov_b32 s9, s1578; GFX12-TRUE16-NEXT: v_max3_num_f16 v0.l, v0.l, v1.l, v2.l579; GFX12-TRUE16-NEXT: buffer_store_b16 v0, off, s[8:11], null580; GFX12-TRUE16-NEXT: s_endpgm581;582; GFX12-FAKE16-LABEL: test_fmax3_olt_0_f16:583; GFX12-FAKE16: ; %bb.0:584; GFX12-FAKE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24585; GFX12-FAKE16-NEXT: s_mov_b32 s10, -1586; GFX12-FAKE16-NEXT: s_mov_b32 s11, 0x31016000587; GFX12-FAKE16-NEXT: s_mov_b32 s14, s10588; GFX12-FAKE16-NEXT: s_mov_b32 s15, s11589; GFX12-FAKE16-NEXT: s_mov_b32 s18, s10590; GFX12-FAKE16-NEXT: s_mov_b32 s19, s11591; GFX12-FAKE16-NEXT: s_mov_b32 s22, s10592; GFX12-FAKE16-NEXT: s_mov_b32 s23, s11593; GFX12-FAKE16-NEXT: s_wait_kmcnt 0x0594; GFX12-FAKE16-NEXT: s_mov_b32 s12, s2595; GFX12-FAKE16-NEXT: s_mov_b32 s13, s3596; GFX12-FAKE16-NEXT: s_mov_b32 s16, s4597; GFX12-FAKE16-NEXT: s_mov_b32 s17, s5598; GFX12-FAKE16-NEXT: s_mov_b32 s20, s6599; GFX12-FAKE16-NEXT: s_mov_b32 s21, s7600; GFX12-FAKE16-NEXT: buffer_load_u16 v0, off, s[12:15], null scope:SCOPE_SYS601; GFX12-FAKE16-NEXT: s_wait_loadcnt 0x0602; GFX12-FAKE16-NEXT: buffer_load_u16 v1, off, s[16:19], null scope:SCOPE_SYS603; GFX12-FAKE16-NEXT: s_wait_loadcnt 0x0604; GFX12-FAKE16-NEXT: buffer_load_u16 v2, off, s[20:23], null scope:SCOPE_SYS605; GFX12-FAKE16-NEXT: s_wait_loadcnt 0x0606; GFX12-FAKE16-NEXT: s_mov_b32 s8, s0607; GFX12-FAKE16-NEXT: s_mov_b32 s9, s1608; GFX12-FAKE16-NEXT: v_max3_num_f16 v0, v0, v1, v2609; GFX12-FAKE16-NEXT: buffer_store_b16 v0, off, s[8:11], null610; GFX12-FAKE16-NEXT: s_endpgm611;612; GFX1250-TRUE16-LABEL: test_fmax3_olt_0_f16:613; GFX1250-TRUE16: ; %bb.0:614; GFX1250-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1615; GFX1250-TRUE16-NEXT: s_load_b256 s[8:15], s[4:5], 0x24616; GFX1250-TRUE16-NEXT: s_mov_b32 s2, -1617; GFX1250-TRUE16-NEXT: s_mov_b32 s3, 0x31016000618; GFX1250-TRUE16-NEXT: s_mov_b32 s6, s2619; GFX1250-TRUE16-NEXT: s_mov_b32 s7, s3620; GFX1250-TRUE16-NEXT: s_mov_b32 s18, s2621; GFX1250-TRUE16-NEXT: s_mov_b32 s19, s3622; GFX1250-TRUE16-NEXT: s_mov_b32 s22, s2623; GFX1250-TRUE16-NEXT: s_mov_b32 s23, s3624; GFX1250-TRUE16-NEXT: s_wait_kmcnt 0x0625; GFX1250-TRUE16-NEXT: s_mov_b32 s4, s10626; GFX1250-TRUE16-NEXT: s_mov_b32 s5, s11627; GFX1250-TRUE16-NEXT: s_mov_b32 s16, s12628; GFX1250-TRUE16-NEXT: s_mov_b32 s17, s13629; GFX1250-TRUE16-NEXT: s_mov_b32 s20, s14630; GFX1250-TRUE16-NEXT: s_mov_b32 s21, s15631; GFX1250-TRUE16-NEXT: buffer_load_u16 v0, off, s[4:7], null scope:SCOPE_SYS632; GFX1250-TRUE16-NEXT: s_wait_loadcnt 0x0633; GFX1250-TRUE16-NEXT: buffer_load_u16 v1, off, s[16:19], null scope:SCOPE_SYS634; GFX1250-TRUE16-NEXT: s_wait_loadcnt 0x0635; GFX1250-TRUE16-NEXT: buffer_load_u16 v2, off, s[20:23], null scope:SCOPE_SYS636; GFX1250-TRUE16-NEXT: s_wait_loadcnt 0x0637; GFX1250-TRUE16-NEXT: s_mov_b32 s0, s8638; GFX1250-TRUE16-NEXT: s_mov_b32 s1, s9639; GFX1250-TRUE16-NEXT: v_max3_num_f16 v0.l, v0.l, v1.l, v2.l640; GFX1250-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], null641; GFX1250-TRUE16-NEXT: s_endpgm642;643; GFX1250-FAKE16-LABEL: test_fmax3_olt_0_f16:644; GFX1250-FAKE16: ; %bb.0:645; GFX1250-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1646; GFX1250-FAKE16-NEXT: s_load_b256 s[8:15], s[4:5], 0x24647; GFX1250-FAKE16-NEXT: s_mov_b32 s2, -1648; GFX1250-FAKE16-NEXT: s_mov_b32 s3, 0x31016000649; GFX1250-FAKE16-NEXT: s_mov_b32 s6, s2650; GFX1250-FAKE16-NEXT: s_mov_b32 s7, s3651; GFX1250-FAKE16-NEXT: s_mov_b32 s18, s2652; GFX1250-FAKE16-NEXT: s_mov_b32 s19, s3653; GFX1250-FAKE16-NEXT: s_mov_b32 s22, s2654; GFX1250-FAKE16-NEXT: s_mov_b32 s23, s3655; GFX1250-FAKE16-NEXT: s_wait_kmcnt 0x0656; GFX1250-FAKE16-NEXT: s_mov_b32 s4, s10657; GFX1250-FAKE16-NEXT: s_mov_b32 s5, s11658; GFX1250-FAKE16-NEXT: s_mov_b32 s16, s12659; GFX1250-FAKE16-NEXT: s_mov_b32 s17, s13660; GFX1250-FAKE16-NEXT: s_mov_b32 s20, s14661; GFX1250-FAKE16-NEXT: s_mov_b32 s21, s15662; GFX1250-FAKE16-NEXT: buffer_load_u16 v0, off, s[4:7], null scope:SCOPE_SYS663; GFX1250-FAKE16-NEXT: s_wait_loadcnt 0x0664; GFX1250-FAKE16-NEXT: buffer_load_u16 v1, off, s[16:19], null scope:SCOPE_SYS665; GFX1250-FAKE16-NEXT: s_wait_loadcnt 0x0666; GFX1250-FAKE16-NEXT: buffer_load_u16 v2, off, s[20:23], null scope:SCOPE_SYS667; GFX1250-FAKE16-NEXT: s_wait_loadcnt 0x0668; GFX1250-FAKE16-NEXT: s_mov_b32 s0, s8669; GFX1250-FAKE16-NEXT: s_mov_b32 s1, s9670; GFX1250-FAKE16-NEXT: v_max3_num_f16 v0, v0, v1, v2671; GFX1250-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], null672; GFX1250-FAKE16-NEXT: s_endpgm673 %a = load volatile half, ptr addrspace(1) %aptr, align 2674 %b = load volatile half, ptr addrspace(1) %bptr, align 2675 %c = load volatile half, ptr addrspace(1) %cptr, align 2676 %f0 = call half @llvm.maxnum.f16(half %a, half %b)677 %f1 = call half @llvm.maxnum.f16(half %f0, half %c)678 store half %f1, ptr addrspace(1) %out, align 2679 ret void680}681 682; Commute operand of second fmax683define amdgpu_kernel void @test_fmax3_olt_1_f16(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {684; SI-LABEL: test_fmax3_olt_1_f16:685; SI: ; %bb.0:686; SI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x9687; SI-NEXT: s_mov_b32 s11, 0xf000688; SI-NEXT: s_mov_b32 s10, -1689; SI-NEXT: s_mov_b32 s14, s10690; SI-NEXT: s_mov_b32 s15, s11691; SI-NEXT: s_mov_b32 s18, s10692; SI-NEXT: s_mov_b32 s19, s11693; SI-NEXT: s_mov_b32 s22, s10694; SI-NEXT: s_mov_b32 s23, s11695; SI-NEXT: s_waitcnt lgkmcnt(0)696; SI-NEXT: s_mov_b32 s12, s2697; SI-NEXT: s_mov_b32 s13, s3698; SI-NEXT: s_mov_b32 s16, s4699; SI-NEXT: s_mov_b32 s17, s5700; SI-NEXT: s_mov_b32 s20, s6701; SI-NEXT: s_mov_b32 s21, s7702; SI-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc703; SI-NEXT: s_waitcnt vmcnt(0)704; SI-NEXT: buffer_load_ushort v1, off, s[16:19], 0 glc705; SI-NEXT: s_waitcnt vmcnt(0)706; SI-NEXT: buffer_load_ushort v2, off, s[20:23], 0 glc707; SI-NEXT: s_waitcnt vmcnt(0)708; SI-NEXT: s_mov_b32 s8, s0709; SI-NEXT: s_mov_b32 s9, s1710; SI-NEXT: v_cvt_f32_f16_e32 v0, v0711; SI-NEXT: v_cvt_f32_f16_e32 v1, v1712; SI-NEXT: v_cvt_f32_f16_e32 v2, v2713; SI-NEXT: v_max3_f32 v0, v2, v0, v1714; SI-NEXT: v_cvt_f16_f32_e32 v0, v0715; SI-NEXT: buffer_store_short v0, off, s[8:11], 0716; SI-NEXT: s_endpgm717;718; VI-LABEL: test_fmax3_olt_1_f16:719; VI: ; %bb.0:720; VI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x24721; VI-NEXT: s_mov_b32 s11, 0xf000722; VI-NEXT: s_mov_b32 s10, -1723; VI-NEXT: s_mov_b32 s14, s10724; VI-NEXT: s_mov_b32 s15, s11725; VI-NEXT: s_waitcnt lgkmcnt(0)726; VI-NEXT: s_mov_b32 s12, s2727; VI-NEXT: s_mov_b32 s13, s3728; VI-NEXT: s_mov_b32 s16, s4729; VI-NEXT: s_mov_b32 s17, s5730; VI-NEXT: s_mov_b32 s18, s10731; VI-NEXT: s_mov_b32 s19, s11732; VI-NEXT: s_mov_b32 s4, s6733; VI-NEXT: s_mov_b32 s5, s7734; VI-NEXT: s_mov_b32 s6, s10735; VI-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc736; VI-NEXT: s_waitcnt vmcnt(0)737; VI-NEXT: buffer_load_ushort v1, off, s[16:19], 0 glc738; VI-NEXT: s_waitcnt vmcnt(0)739; VI-NEXT: s_mov_b32 s7, s11740; VI-NEXT: buffer_load_ushort v2, off, s[4:7], 0 glc741; VI-NEXT: s_waitcnt vmcnt(0)742; VI-NEXT: s_mov_b32 s8, s0743; VI-NEXT: s_mov_b32 s9, s1744; VI-NEXT: v_max_f16_e32 v0, v0, v0745; VI-NEXT: v_max_f16_e32 v1, v1, v1746; VI-NEXT: v_max_f16_e32 v0, v0, v1747; VI-NEXT: v_max_f16_e32 v1, v2, v2748; VI-NEXT: v_max_f16_e32 v0, v1, v0749; VI-NEXT: buffer_store_short v0, off, s[8:11], 0750; VI-NEXT: s_endpgm751;752; GFX9-LABEL: test_fmax3_olt_1_f16:753; GFX9: ; %bb.0:754; GFX9-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x24755; GFX9-NEXT: s_mov_b32 s3, 0xf000756; GFX9-NEXT: s_mov_b32 s2, -1757; GFX9-NEXT: s_mov_b32 s6, s2758; GFX9-NEXT: s_mov_b32 s7, s3759; GFX9-NEXT: s_waitcnt lgkmcnt(0)760; GFX9-NEXT: s_mov_b32 s4, s10761; GFX9-NEXT: s_mov_b32 s5, s11762; GFX9-NEXT: s_mov_b32 s16, s12763; GFX9-NEXT: s_mov_b32 s17, s13764; GFX9-NEXT: s_mov_b32 s18, s2765; GFX9-NEXT: s_mov_b32 s19, s3766; GFX9-NEXT: s_mov_b32 s12, s14767; GFX9-NEXT: s_mov_b32 s13, s15768; GFX9-NEXT: s_mov_b32 s14, s2769; GFX9-NEXT: s_mov_b32 s15, s3770; GFX9-NEXT: buffer_load_ushort v0, off, s[4:7], 0 glc771; GFX9-NEXT: s_waitcnt vmcnt(0)772; GFX9-NEXT: buffer_load_ushort v1, off, s[16:19], 0 glc773; GFX9-NEXT: s_waitcnt vmcnt(0)774; GFX9-NEXT: buffer_load_ushort v2, off, s[12:15], 0 glc775; GFX9-NEXT: s_waitcnt vmcnt(0)776; GFX9-NEXT: s_mov_b32 s0, s8777; GFX9-NEXT: s_mov_b32 s1, s9778; GFX9-NEXT: v_max3_f16 v0, v2, v0, v1779; GFX9-NEXT: buffer_store_short v0, off, s[0:3], 0780; GFX9-NEXT: s_endpgm781;782; GFX11-TRUE16-LABEL: test_fmax3_olt_1_f16:783; GFX11-TRUE16: ; %bb.0:784; GFX11-TRUE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24785; GFX11-TRUE16-NEXT: s_mov_b32 s10, -1786; GFX11-TRUE16-NEXT: s_mov_b32 s11, 0x31016000787; GFX11-TRUE16-NEXT: s_mov_b32 s14, s10788; GFX11-TRUE16-NEXT: s_mov_b32 s15, s11789; GFX11-TRUE16-NEXT: s_mov_b32 s18, s10790; GFX11-TRUE16-NEXT: s_mov_b32 s19, s11791; GFX11-TRUE16-NEXT: s_mov_b32 s22, s10792; GFX11-TRUE16-NEXT: s_mov_b32 s23, s11793; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)794; GFX11-TRUE16-NEXT: s_mov_b32 s12, s2795; GFX11-TRUE16-NEXT: s_mov_b32 s13, s3796; GFX11-TRUE16-NEXT: s_mov_b32 s16, s4797; GFX11-TRUE16-NEXT: s_mov_b32 s17, s5798; GFX11-TRUE16-NEXT: s_mov_b32 s20, s6799; GFX11-TRUE16-NEXT: s_mov_b32 s21, s7800; GFX11-TRUE16-NEXT: buffer_load_u16 v1, off, s[12:15], 0 glc dlc801; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)802; GFX11-TRUE16-NEXT: buffer_load_u16 v2, off, s[16:19], 0 glc dlc803; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)804; GFX11-TRUE16-NEXT: buffer_load_u16 v0, off, s[20:23], 0 glc dlc805; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)806; GFX11-TRUE16-NEXT: s_mov_b32 s8, s0807; GFX11-TRUE16-NEXT: s_mov_b32 s9, s1808; GFX11-TRUE16-NEXT: v_max3_f16 v0.l, v0.l, v1.l, v2.l809; GFX11-TRUE16-NEXT: buffer_store_b16 v0, off, s[8:11], 0810; GFX11-TRUE16-NEXT: s_endpgm811;812; GFX11-FAKE16-LABEL: test_fmax3_olt_1_f16:813; GFX11-FAKE16: ; %bb.0:814; GFX11-FAKE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24815; GFX11-FAKE16-NEXT: s_mov_b32 s10, -1816; GFX11-FAKE16-NEXT: s_mov_b32 s11, 0x31016000817; GFX11-FAKE16-NEXT: s_mov_b32 s14, s10818; GFX11-FAKE16-NEXT: s_mov_b32 s15, s11819; GFX11-FAKE16-NEXT: s_mov_b32 s18, s10820; GFX11-FAKE16-NEXT: s_mov_b32 s19, s11821; GFX11-FAKE16-NEXT: s_mov_b32 s22, s10822; GFX11-FAKE16-NEXT: s_mov_b32 s23, s11823; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)824; GFX11-FAKE16-NEXT: s_mov_b32 s12, s2825; GFX11-FAKE16-NEXT: s_mov_b32 s13, s3826; GFX11-FAKE16-NEXT: s_mov_b32 s16, s4827; GFX11-FAKE16-NEXT: s_mov_b32 s17, s5828; GFX11-FAKE16-NEXT: s_mov_b32 s20, s6829; GFX11-FAKE16-NEXT: s_mov_b32 s21, s7830; GFX11-FAKE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0 glc dlc831; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)832; GFX11-FAKE16-NEXT: buffer_load_u16 v1, off, s[16:19], 0 glc dlc833; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)834; GFX11-FAKE16-NEXT: buffer_load_u16 v2, off, s[20:23], 0 glc dlc835; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)836; GFX11-FAKE16-NEXT: s_mov_b32 s8, s0837; GFX11-FAKE16-NEXT: s_mov_b32 s9, s1838; GFX11-FAKE16-NEXT: v_max3_f16 v0, v2, v0, v1839; GFX11-FAKE16-NEXT: buffer_store_b16 v0, off, s[8:11], 0840; GFX11-FAKE16-NEXT: s_endpgm841;842; GFX12-TRUE16-LABEL: test_fmax3_olt_1_f16:843; GFX12-TRUE16: ; %bb.0:844; GFX12-TRUE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24845; GFX12-TRUE16-NEXT: s_mov_b32 s10, -1846; GFX12-TRUE16-NEXT: s_mov_b32 s11, 0x31016000847; GFX12-TRUE16-NEXT: s_mov_b32 s14, s10848; GFX12-TRUE16-NEXT: s_mov_b32 s15, s11849; GFX12-TRUE16-NEXT: s_mov_b32 s18, s10850; GFX12-TRUE16-NEXT: s_mov_b32 s19, s11851; GFX12-TRUE16-NEXT: s_mov_b32 s22, s10852; GFX12-TRUE16-NEXT: s_mov_b32 s23, s11853; GFX12-TRUE16-NEXT: s_wait_kmcnt 0x0854; GFX12-TRUE16-NEXT: s_mov_b32 s12, s2855; GFX12-TRUE16-NEXT: s_mov_b32 s13, s3856; GFX12-TRUE16-NEXT: s_mov_b32 s16, s4857; GFX12-TRUE16-NEXT: s_mov_b32 s17, s5858; GFX12-TRUE16-NEXT: s_mov_b32 s20, s6859; GFX12-TRUE16-NEXT: s_mov_b32 s21, s7860; GFX12-TRUE16-NEXT: buffer_load_u16 v1, off, s[12:15], null scope:SCOPE_SYS861; GFX12-TRUE16-NEXT: s_wait_loadcnt 0x0862; GFX12-TRUE16-NEXT: buffer_load_u16 v2, off, s[16:19], null scope:SCOPE_SYS863; GFX12-TRUE16-NEXT: s_wait_loadcnt 0x0864; GFX12-TRUE16-NEXT: buffer_load_u16 v0, off, s[20:23], null scope:SCOPE_SYS865; GFX12-TRUE16-NEXT: s_wait_loadcnt 0x0866; GFX12-TRUE16-NEXT: s_mov_b32 s8, s0867; GFX12-TRUE16-NEXT: s_mov_b32 s9, s1868; GFX12-TRUE16-NEXT: v_max3_num_f16 v0.l, v0.l, v1.l, v2.l869; GFX12-TRUE16-NEXT: buffer_store_b16 v0, off, s[8:11], null870; GFX12-TRUE16-NEXT: s_endpgm871;872; GFX12-FAKE16-LABEL: test_fmax3_olt_1_f16:873; GFX12-FAKE16: ; %bb.0:874; GFX12-FAKE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24875; GFX12-FAKE16-NEXT: s_mov_b32 s10, -1876; GFX12-FAKE16-NEXT: s_mov_b32 s11, 0x31016000877; GFX12-FAKE16-NEXT: s_mov_b32 s14, s10878; GFX12-FAKE16-NEXT: s_mov_b32 s15, s11879; GFX12-FAKE16-NEXT: s_mov_b32 s18, s10880; GFX12-FAKE16-NEXT: s_mov_b32 s19, s11881; GFX12-FAKE16-NEXT: s_mov_b32 s22, s10882; GFX12-FAKE16-NEXT: s_mov_b32 s23, s11883; GFX12-FAKE16-NEXT: s_wait_kmcnt 0x0884; GFX12-FAKE16-NEXT: s_mov_b32 s12, s2885; GFX12-FAKE16-NEXT: s_mov_b32 s13, s3886; GFX12-FAKE16-NEXT: s_mov_b32 s16, s4887; GFX12-FAKE16-NEXT: s_mov_b32 s17, s5888; GFX12-FAKE16-NEXT: s_mov_b32 s20, s6889; GFX12-FAKE16-NEXT: s_mov_b32 s21, s7890; GFX12-FAKE16-NEXT: buffer_load_u16 v0, off, s[12:15], null scope:SCOPE_SYS891; GFX12-FAKE16-NEXT: s_wait_loadcnt 0x0892; GFX12-FAKE16-NEXT: buffer_load_u16 v1, off, s[16:19], null scope:SCOPE_SYS893; GFX12-FAKE16-NEXT: s_wait_loadcnt 0x0894; GFX12-FAKE16-NEXT: buffer_load_u16 v2, off, s[20:23], null scope:SCOPE_SYS895; GFX12-FAKE16-NEXT: s_wait_loadcnt 0x0896; GFX12-FAKE16-NEXT: s_mov_b32 s8, s0897; GFX12-FAKE16-NEXT: s_mov_b32 s9, s1898; GFX12-FAKE16-NEXT: v_max3_num_f16 v0, v2, v0, v1899; GFX12-FAKE16-NEXT: buffer_store_b16 v0, off, s[8:11], null900; GFX12-FAKE16-NEXT: s_endpgm901;902; GFX1250-TRUE16-LABEL: test_fmax3_olt_1_f16:903; GFX1250-TRUE16: ; %bb.0:904; GFX1250-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1905; GFX1250-TRUE16-NEXT: s_load_b256 s[8:15], s[4:5], 0x24906; GFX1250-TRUE16-NEXT: s_mov_b32 s2, -1907; GFX1250-TRUE16-NEXT: s_mov_b32 s3, 0x31016000908; GFX1250-TRUE16-NEXT: s_mov_b32 s6, s2909; GFX1250-TRUE16-NEXT: s_mov_b32 s7, s3910; GFX1250-TRUE16-NEXT: s_mov_b32 s18, s2911; GFX1250-TRUE16-NEXT: s_mov_b32 s19, s3912; GFX1250-TRUE16-NEXT: s_mov_b32 s22, s2913; GFX1250-TRUE16-NEXT: s_mov_b32 s23, s3914; GFX1250-TRUE16-NEXT: s_wait_kmcnt 0x0915; GFX1250-TRUE16-NEXT: s_mov_b32 s4, s10916; GFX1250-TRUE16-NEXT: s_mov_b32 s5, s11917; GFX1250-TRUE16-NEXT: s_mov_b32 s16, s12918; GFX1250-TRUE16-NEXT: s_mov_b32 s17, s13919; GFX1250-TRUE16-NEXT: s_mov_b32 s20, s14920; GFX1250-TRUE16-NEXT: s_mov_b32 s21, s15921; GFX1250-TRUE16-NEXT: buffer_load_u16 v1, off, s[4:7], null scope:SCOPE_SYS922; GFX1250-TRUE16-NEXT: s_wait_loadcnt 0x0923; GFX1250-TRUE16-NEXT: buffer_load_u16 v2, off, s[16:19], null scope:SCOPE_SYS924; GFX1250-TRUE16-NEXT: s_wait_loadcnt 0x0925; GFX1250-TRUE16-NEXT: buffer_load_u16 v0, off, s[20:23], null scope:SCOPE_SYS926; GFX1250-TRUE16-NEXT: s_wait_loadcnt 0x0927; GFX1250-TRUE16-NEXT: s_mov_b32 s0, s8928; GFX1250-TRUE16-NEXT: s_mov_b32 s1, s9929; GFX1250-TRUE16-NEXT: v_max3_num_f16 v0.l, v0.l, v1.l, v2.l930; GFX1250-TRUE16-NEXT: buffer_store_b16 v0, off, s[0:3], null931; GFX1250-TRUE16-NEXT: s_endpgm932;933; GFX1250-FAKE16-LABEL: test_fmax3_olt_1_f16:934; GFX1250-FAKE16: ; %bb.0:935; GFX1250-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1936; GFX1250-FAKE16-NEXT: s_load_b256 s[8:15], s[4:5], 0x24937; GFX1250-FAKE16-NEXT: s_mov_b32 s2, -1938; GFX1250-FAKE16-NEXT: s_mov_b32 s3, 0x31016000939; GFX1250-FAKE16-NEXT: s_mov_b32 s6, s2940; GFX1250-FAKE16-NEXT: s_mov_b32 s7, s3941; GFX1250-FAKE16-NEXT: s_mov_b32 s18, s2942; GFX1250-FAKE16-NEXT: s_mov_b32 s19, s3943; GFX1250-FAKE16-NEXT: s_mov_b32 s22, s2944; GFX1250-FAKE16-NEXT: s_mov_b32 s23, s3945; GFX1250-FAKE16-NEXT: s_wait_kmcnt 0x0946; GFX1250-FAKE16-NEXT: s_mov_b32 s4, s10947; GFX1250-FAKE16-NEXT: s_mov_b32 s5, s11948; GFX1250-FAKE16-NEXT: s_mov_b32 s16, s12949; GFX1250-FAKE16-NEXT: s_mov_b32 s17, s13950; GFX1250-FAKE16-NEXT: s_mov_b32 s20, s14951; GFX1250-FAKE16-NEXT: s_mov_b32 s21, s15952; GFX1250-FAKE16-NEXT: buffer_load_u16 v0, off, s[4:7], null scope:SCOPE_SYS953; GFX1250-FAKE16-NEXT: s_wait_loadcnt 0x0954; GFX1250-FAKE16-NEXT: buffer_load_u16 v1, off, s[16:19], null scope:SCOPE_SYS955; GFX1250-FAKE16-NEXT: s_wait_loadcnt 0x0956; GFX1250-FAKE16-NEXT: buffer_load_u16 v2, off, s[20:23], null scope:SCOPE_SYS957; GFX1250-FAKE16-NEXT: s_wait_loadcnt 0x0958; GFX1250-FAKE16-NEXT: s_mov_b32 s0, s8959; GFX1250-FAKE16-NEXT: s_mov_b32 s1, s9960; GFX1250-FAKE16-NEXT: v_max3_num_f16 v0, v2, v0, v1961; GFX1250-FAKE16-NEXT: buffer_store_b16 v0, off, s[0:3], null962; GFX1250-FAKE16-NEXT: s_endpgm963 %a = load volatile half, ptr addrspace(1) %aptr, align 2964 %b = load volatile half, ptr addrspace(1) %bptr, align 2965 %c = load volatile half, ptr addrspace(1) %cptr, align 2966 %f0 = call half @llvm.maxnum.f16(half %a, half %b)967 %f1 = call half @llvm.maxnum.f16(half %c, half %f0)968 store half %f1, ptr addrspace(1) %out, align 2969 ret void970}971 972; Checks whether the test passes; performMinMaxCombine() should not optimize vector patterns of max3973; since there are no pack instructions for fmax3.974define <2 x half> @no_fmax3_v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x half> %d) #2 {975; SI-LABEL: no_fmax3_v2f16:976; SI: ; %bb.0: ; %entry977; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)978; SI-NEXT: v_cvt_f16_f32_e32 v7, v7979; SI-NEXT: v_cvt_f16_f32_e32 v5, v5980; SI-NEXT: v_cvt_f16_f32_e32 v6, v6981; SI-NEXT: v_cvt_f16_f32_e32 v4, v4982; SI-NEXT: v_cvt_f16_f32_e32 v2, v2983; SI-NEXT: v_cvt_f16_f32_e32 v0, v0984; SI-NEXT: v_cvt_f16_f32_e32 v3, v3985; SI-NEXT: v_cvt_f16_f32_e32 v1, v1986; SI-NEXT: v_cvt_f32_f16_e32 v7, v7987; SI-NEXT: v_cvt_f32_f16_e32 v5, v5988; SI-NEXT: v_cvt_f32_f16_e32 v6, v6989; SI-NEXT: v_cvt_f32_f16_e32 v4, v4990; SI-NEXT: v_cvt_f32_f16_e32 v2, v2991; SI-NEXT: v_cvt_f32_f16_e32 v0, v0992; SI-NEXT: v_cvt_f32_f16_e32 v3, v3993; SI-NEXT: v_cvt_f32_f16_e32 v1, v1994; SI-NEXT: v_max_f32_e32 v1, v1, v3995; SI-NEXT: v_max_f32_e32 v0, v0, v2996; SI-NEXT: v_max3_f32 v0, v4, v0, v6997; SI-NEXT: v_max3_f32 v1, v5, v1, v7998; SI-NEXT: s_setpc_b64 s[30:31]999;1000; VI-LABEL: no_fmax3_v2f16:1001; VI: ; %bb.0: ; %entry1002; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1003; VI-NEXT: v_max_f16_sdwa v4, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11004; VI-NEXT: v_max_f16_e32 v0, v0, v11005; VI-NEXT: v_max_f16_sdwa v1, v2, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1006; VI-NEXT: v_max_f16_e32 v0, v2, v01007; VI-NEXT: v_max_f16_sdwa v1, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_11008; VI-NEXT: v_max_f16_e32 v0, v0, v31009; VI-NEXT: v_or_b32_e32 v0, v0, v11010; VI-NEXT: s_setpc_b64 s[30:31]1011;1012; GFX9-LABEL: no_fmax3_v2f16:1013; GFX9: ; %bb.0: ; %entry1014; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1015; GFX9-NEXT: v_pk_max_f16 v0, v0, v11016; GFX9-NEXT: v_pk_max_f16 v0, v2, v01017; GFX9-NEXT: v_pk_max_f16 v0, v0, v31018; GFX9-NEXT: s_setpc_b64 s[30:31]1019;1020; GFX11-LABEL: no_fmax3_v2f16:1021; GFX11: ; %bb.0: ; %entry1022; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1023; GFX11-NEXT: v_pk_max_f16 v0, v0, v11024; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1025; GFX11-NEXT: v_pk_max_f16 v0, v2, v01026; GFX11-NEXT: v_pk_max_f16 v0, v0, v31027; GFX11-NEXT: s_setpc_b64 s[30:31]1028;1029; GFX12-LABEL: no_fmax3_v2f16:1030; GFX12: ; %bb.0: ; %entry1031; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01032; GFX12-NEXT: s_wait_expcnt 0x01033; GFX12-NEXT: s_wait_samplecnt 0x01034; GFX12-NEXT: s_wait_bvhcnt 0x01035; GFX12-NEXT: s_wait_kmcnt 0x01036; GFX12-NEXT: v_pk_max_num_f16 v0, v0, v11037; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1038; GFX12-NEXT: v_pk_max_num_f16 v0, v2, v01039; GFX12-NEXT: v_pk_max_num_f16 v0, v0, v31040; GFX12-NEXT: s_setpc_b64 s[30:31]1041;1042; GFX1250-LABEL: no_fmax3_v2f16:1043; GFX1250: ; %bb.0: ; %entry1044; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01045; GFX1250-NEXT: s_wait_kmcnt 0x01046; GFX1250-NEXT: v_pk_max_num_f16 v0, v0, v11047; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1048; GFX1250-NEXT: v_pk_max3_num_f16 v0, v2, v0, v31049; GFX1250-NEXT: s_set_pc_i64 s[30:31]1050entry:1051 %max = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %a, <2 x half> %b)1052 %max1 = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %c, <2 x half> %max)1053 %res = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %max1, <2 x half> %d)1054 ret <2 x half> %res1055}1056 1057declare i32 @llvm.amdgcn.workitem.id.x() #11058declare float @llvm.maxnum.f32(float, float) #11059declare half @llvm.maxnum.f16(half, half) #11060declare <2 x half> @llvm.maxnum.v2f16(<2 x half>, <2 x half>)1061 1062attributes #0 = { nounwind }1063attributes #1 = { nounwind readnone speculatable }1064attributes #2 = { nounwind "no-nans-fp-math"="true" }1065