4077 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -enable-var-scope -check-prefixes=VI %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -enable-var-scope -check-prefixes=GFX9 %s4; RUN: llc -mtriple=amdgcn -mcpu=kaveri < %s | FileCheck -enable-var-scope -check-prefixes=CI %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11,GFX11-TRUE16 %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11,GFX11-FAKE16 %s7 8declare half @llvm.fabs.f16(half) #09declare half @llvm.canonicalize.f16(half) #010declare <2 x half> @llvm.fabs.v2f16(<2 x half>) #011declare <2 x half> @llvm.canonicalize.v2f16(<2 x half>) #012declare <3 x half> @llvm.canonicalize.v3f16(<3 x half>) #013declare <4 x half> @llvm.canonicalize.v4f16(<4 x half>) #014declare <6 x half> @llvm.canonicalize.v6f16(<6 x half>) #015declare <8 x half> @llvm.canonicalize.v8f16(<8 x half>) #016declare <12 x half> @llvm.canonicalize.v12f16(<12 x half>) #017declare <16 x half> @llvm.canonicalize.v16f16(<16 x half>) #018declare <32 x half> @llvm.canonicalize.v32f16(<32 x half>) #019declare <64 x half> @llvm.canonicalize.v64f16(<64 x half>) #020declare i32 @llvm.amdgcn.workitem.id.x() #021 22define amdgpu_kernel void @test_fold_canonicalize_undef_value_f16(ptr addrspace(1) %out) #1 {23; VI-LABEL: test_fold_canonicalize_undef_value_f16:24; VI: ; %bb.0:25; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2426; VI-NEXT: v_mov_b32_e32 v2, 027; VI-NEXT: s_waitcnt lgkmcnt(0)28; VI-NEXT: v_mov_b32_e32 v0, s029; VI-NEXT: v_mov_b32_e32 v1, s130; VI-NEXT: flat_store_short v[0:1], v231; VI-NEXT: s_endpgm32;33; GFX9-LABEL: test_fold_canonicalize_undef_value_f16:34; GFX9: ; %bb.0:35; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2436; GFX9-NEXT: v_mov_b32_e32 v0, 037; GFX9-NEXT: s_waitcnt lgkmcnt(0)38; GFX9-NEXT: global_store_short v0, v0, s[0:1]39; GFX9-NEXT: s_endpgm40;41; CI-LABEL: test_fold_canonicalize_undef_value_f16:42; CI: ; %bb.0:43; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x944; CI-NEXT: s_mov_b32 s3, 0xf00045; CI-NEXT: s_mov_b32 s2, -146; CI-NEXT: v_mov_b32_e32 v0, 047; CI-NEXT: s_waitcnt lgkmcnt(0)48; CI-NEXT: buffer_store_short v0, off, s[0:3], 049; CI-NEXT: s_endpgm50;51; GFX11-TRUE16-LABEL: test_fold_canonicalize_undef_value_f16:52; GFX11-TRUE16: ; %bb.0:53; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x2454; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 055; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 056; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)57; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]58; GFX11-TRUE16-NEXT: s_endpgm59;60; GFX11-FAKE16-LABEL: test_fold_canonicalize_undef_value_f16:61; GFX11-FAKE16: ; %bb.0:62; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x2463; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, 064; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)65; GFX11-FAKE16-NEXT: global_store_b16 v0, v0, s[0:1]66; GFX11-FAKE16-NEXT: s_endpgm67 %canonicalized = call half @llvm.canonicalize.f16(half undef)68 store half %canonicalized, ptr addrspace(1) %out69 ret void70}71 72define amdgpu_kernel void @v_test_canonicalize_var_f16(ptr addrspace(1) %out) #1 {73; VI-LABEL: v_test_canonicalize_var_f16:74; VI: ; %bb.0:75; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2476; VI-NEXT: s_waitcnt lgkmcnt(0)77; VI-NEXT: v_mov_b32_e32 v0, s078; VI-NEXT: v_mov_b32_e32 v1, s179; VI-NEXT: flat_load_ushort v0, v[0:1]80; VI-NEXT: s_waitcnt vmcnt(0)81; VI-NEXT: v_max_f16_e32 v0, v0, v082; VI-NEXT: flat_store_short v[0:1], v083; VI-NEXT: s_endpgm84;85; GFX9-LABEL: v_test_canonicalize_var_f16:86; GFX9: ; %bb.0:87; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2488; GFX9-NEXT: v_mov_b32_e32 v0, 089; GFX9-NEXT: s_waitcnt lgkmcnt(0)90; GFX9-NEXT: global_load_ushort v0, v0, s[0:1]91; GFX9-NEXT: s_waitcnt vmcnt(0)92; GFX9-NEXT: v_max_f16_e32 v0, v0, v093; GFX9-NEXT: global_store_short v[0:1], v0, off94; GFX9-NEXT: s_endpgm95;96; CI-LABEL: v_test_canonicalize_var_f16:97; CI: ; %bb.0:98; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x999; CI-NEXT: s_mov_b32 s3, 0xf000100; CI-NEXT: s_mov_b32 s2, -1101; CI-NEXT: s_waitcnt lgkmcnt(0)102; CI-NEXT: buffer_load_ushort v0, off, s[0:3], 0103; CI-NEXT: s_waitcnt vmcnt(0)104; CI-NEXT: v_cvt_f32_f16_e32 v0, v0105; CI-NEXT: v_cvt_f16_f32_e32 v0, v0106; CI-NEXT: buffer_store_short v0, off, s[0:3], 0107; CI-NEXT: s_endpgm108;109; GFX11-TRUE16-LABEL: v_test_canonicalize_var_f16:110; GFX11-TRUE16: ; %bb.0:111; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24112; GFX11-TRUE16-NEXT: v_mov_b32_e32 v0, 0113; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)114; GFX11-TRUE16-NEXT: global_load_d16_b16 v0, v0, s[0:1]115; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)116; GFX11-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.l117; GFX11-TRUE16-NEXT: global_store_b16 v[0:1], v0, off118; GFX11-TRUE16-NEXT: s_endpgm119;120; GFX11-FAKE16-LABEL: v_test_canonicalize_var_f16:121; GFX11-FAKE16: ; %bb.0:122; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24123; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, 0124; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)125; GFX11-FAKE16-NEXT: global_load_u16 v0, v0, s[0:1]126; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)127; GFX11-FAKE16-NEXT: v_max_f16_e32 v0, v0, v0128; GFX11-FAKE16-NEXT: global_store_b16 v[0:1], v0, off129; GFX11-FAKE16-NEXT: s_endpgm130 %val = load half, ptr addrspace(1) %out131 %canonicalized = call half @llvm.canonicalize.f16(half %val)132 store half %canonicalized, ptr addrspace(1) poison133 ret void134}135 136define amdgpu_kernel void @s_test_canonicalize_var_f16(ptr addrspace(1) %out, i16 zeroext %val.arg) #1 {137; VI-LABEL: s_test_canonicalize_var_f16:138; VI: ; %bb.0:139; VI-NEXT: s_load_dword s2, s[4:5], 0x2c140; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24141; VI-NEXT: s_waitcnt lgkmcnt(0)142; VI-NEXT: v_max_f16_e64 v2, s2, s2143; VI-NEXT: v_mov_b32_e32 v0, s0144; VI-NEXT: v_mov_b32_e32 v1, s1145; VI-NEXT: flat_store_short v[0:1], v2146; VI-NEXT: s_endpgm147;148; GFX9-LABEL: s_test_canonicalize_var_f16:149; GFX9: ; %bb.0:150; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c151; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24152; GFX9-NEXT: v_mov_b32_e32 v0, 0153; GFX9-NEXT: s_waitcnt lgkmcnt(0)154; GFX9-NEXT: v_max_f16_e64 v1, s2, s2155; GFX9-NEXT: global_store_short v0, v1, s[0:1]156; GFX9-NEXT: s_endpgm157;158; CI-LABEL: s_test_canonicalize_var_f16:159; CI: ; %bb.0:160; CI-NEXT: s_load_dword s0, s[4:5], 0xb161; CI-NEXT: s_mov_b32 s3, 0xf000162; CI-NEXT: s_mov_b32 s2, -1163; CI-NEXT: s_waitcnt lgkmcnt(0)164; CI-NEXT: v_cvt_f32_f16_e32 v0, s0165; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9166; CI-NEXT: v_cvt_f16_f32_e32 v0, v0167; CI-NEXT: s_waitcnt lgkmcnt(0)168; CI-NEXT: buffer_store_short v0, off, s[0:3], 0169; CI-NEXT: s_endpgm170;171; GFX11-TRUE16-LABEL: s_test_canonicalize_var_f16:172; GFX11-TRUE16: ; %bb.0:173; GFX11-TRUE16-NEXT: s_clause 0x1174; GFX11-TRUE16-NEXT: s_load_b32 s2, s[4:5], 0x2c175; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24176; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0177; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)178; GFX11-TRUE16-NEXT: v_max_f16_e64 v0.l, s2, s2179; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]180; GFX11-TRUE16-NEXT: s_endpgm181;182; GFX11-FAKE16-LABEL: s_test_canonicalize_var_f16:183; GFX11-FAKE16: ; %bb.0:184; GFX11-FAKE16-NEXT: s_clause 0x1185; GFX11-FAKE16-NEXT: s_load_b32 s2, s[4:5], 0x2c186; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24187; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, 0188; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)189; GFX11-FAKE16-NEXT: v_max_f16_e64 v1, s2, s2190; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]191; GFX11-FAKE16-NEXT: s_endpgm192 %val = bitcast i16 %val.arg to half193 %canonicalized = call half @llvm.canonicalize.f16(half %val)194 store half %canonicalized, ptr addrspace(1) %out195 ret void196}197 198define <2 x half> @v_test_canonicalize_build_vector_v2f16(half %lo, half %hi) #1 {199; VI-LABEL: v_test_canonicalize_build_vector_v2f16:200; VI: ; %bb.0:201; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)202; VI-NEXT: v_max_f16_sdwa v1, v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD203; VI-NEXT: v_max_f16_e32 v0, v0, v0204; VI-NEXT: v_or_b32_e32 v0, v0, v1205; VI-NEXT: s_setpc_b64 s[30:31]206;207; GFX9-LABEL: v_test_canonicalize_build_vector_v2f16:208; GFX9: ; %bb.0:209; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)210; GFX9-NEXT: s_mov_b32 s4, 0x5040100211; GFX9-NEXT: v_perm_b32 v0, v1, v0, s4212; GFX9-NEXT: v_pk_max_f16 v0, v0, v0213; GFX9-NEXT: s_setpc_b64 s[30:31]214;215; CI-LABEL: v_test_canonicalize_build_vector_v2f16:216; CI: ; %bb.0:217; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)218; CI-NEXT: v_cvt_f16_f32_e32 v0, v0219; CI-NEXT: v_cvt_f16_f32_e32 v1, v1220; CI-NEXT: v_cvt_f32_f16_e32 v0, v0221; CI-NEXT: v_cvt_f32_f16_e32 v1, v1222; CI-NEXT: s_setpc_b64 s[30:31]223;224; GFX11-TRUE16-LABEL: v_test_canonicalize_build_vector_v2f16:225; GFX11-TRUE16: ; %bb.0:226; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)227; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l228; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)229; GFX11-TRUE16-NEXT: v_pk_max_f16 v0, v0, v0230; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]231;232; GFX11-FAKE16-LABEL: v_test_canonicalize_build_vector_v2f16:233; GFX11-FAKE16: ; %bb.0:234; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)235; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x5040100236; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)237; GFX11-FAKE16-NEXT: v_pk_max_f16 v0, v0, v0238; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]239 %ins0 = insertelement <2 x half> poison, half %lo, i32 0240 %ins1 = insertelement <2 x half> %ins0, half %hi, i32 1241 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %ins1)242 ret <2 x half> %canonicalized243}244 245define amdgpu_kernel void @v_test_canonicalize_fabs_var_f16(ptr addrspace(1) %out) #1 {246; VI-LABEL: v_test_canonicalize_fabs_var_f16:247; VI: ; %bb.0:248; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24249; VI-NEXT: s_waitcnt lgkmcnt(0)250; VI-NEXT: v_mov_b32_e32 v0, s0251; VI-NEXT: v_mov_b32_e32 v1, s1252; VI-NEXT: flat_load_ushort v2, v[0:1]253; VI-NEXT: s_waitcnt vmcnt(0)254; VI-NEXT: v_max_f16_e64 v2, |v2|, |v2|255; VI-NEXT: flat_store_short v[0:1], v2256; VI-NEXT: s_endpgm257;258; GFX9-LABEL: v_test_canonicalize_fabs_var_f16:259; GFX9: ; %bb.0:260; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24261; GFX9-NEXT: v_mov_b32_e32 v0, 0262; GFX9-NEXT: s_waitcnt lgkmcnt(0)263; GFX9-NEXT: global_load_ushort v1, v0, s[0:1]264; GFX9-NEXT: s_waitcnt vmcnt(0)265; GFX9-NEXT: v_max_f16_e64 v1, |v1|, |v1|266; GFX9-NEXT: global_store_short v0, v1, s[0:1]267; GFX9-NEXT: s_endpgm268;269; CI-LABEL: v_test_canonicalize_fabs_var_f16:270; CI: ; %bb.0:271; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9272; CI-NEXT: s_mov_b32 s3, 0xf000273; CI-NEXT: s_mov_b32 s2, -1274; CI-NEXT: s_waitcnt lgkmcnt(0)275; CI-NEXT: buffer_load_ushort v0, off, s[0:3], 0276; CI-NEXT: s_waitcnt vmcnt(0)277; CI-NEXT: v_cvt_f32_f16_e64 v0, |v0|278; CI-NEXT: v_cvt_f16_f32_e32 v0, v0279; CI-NEXT: buffer_store_short v0, off, s[0:3], 0280; CI-NEXT: s_endpgm281;282; GFX11-TRUE16-LABEL: v_test_canonicalize_fabs_var_f16:283; GFX11-TRUE16: ; %bb.0:284; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24285; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0286; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)287; GFX11-TRUE16-NEXT: global_load_d16_b16 v0, v1, s[0:1]288; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)289; GFX11-TRUE16-NEXT: v_max_f16_e64 v0.l, |v0.l|, |v0.l|290; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]291; GFX11-TRUE16-NEXT: s_endpgm292;293; GFX11-FAKE16-LABEL: v_test_canonicalize_fabs_var_f16:294; GFX11-FAKE16: ; %bb.0:295; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24296; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, 0297; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)298; GFX11-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1]299; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)300; GFX11-FAKE16-NEXT: v_max_f16_e64 v1, |v1|, |v1|301; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]302; GFX11-FAKE16-NEXT: s_endpgm303 %val = load half, ptr addrspace(1) %out304 %val.fabs = call half @llvm.fabs.f16(half %val)305 %canonicalized = call half @llvm.canonicalize.f16(half %val.fabs)306 store half %canonicalized, ptr addrspace(1) %out307 ret void308}309 310define amdgpu_kernel void @v_test_canonicalize_fneg_fabs_var_f16(ptr addrspace(1) %out) #1 {311; VI-LABEL: v_test_canonicalize_fneg_fabs_var_f16:312; VI: ; %bb.0:313; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24314; VI-NEXT: s_waitcnt lgkmcnt(0)315; VI-NEXT: v_mov_b32_e32 v0, s0316; VI-NEXT: v_mov_b32_e32 v1, s1317; VI-NEXT: flat_load_ushort v2, v[0:1]318; VI-NEXT: s_waitcnt vmcnt(0)319; VI-NEXT: v_max_f16_e64 v2, -|v2|, -|v2|320; VI-NEXT: flat_store_short v[0:1], v2321; VI-NEXT: s_endpgm322;323; GFX9-LABEL: v_test_canonicalize_fneg_fabs_var_f16:324; GFX9: ; %bb.0:325; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24326; GFX9-NEXT: v_mov_b32_e32 v0, 0327; GFX9-NEXT: s_waitcnt lgkmcnt(0)328; GFX9-NEXT: global_load_ushort v1, v0, s[0:1]329; GFX9-NEXT: s_waitcnt vmcnt(0)330; GFX9-NEXT: v_max_f16_e64 v1, -|v1|, -|v1|331; GFX9-NEXT: global_store_short v0, v1, s[0:1]332; GFX9-NEXT: s_endpgm333;334; CI-LABEL: v_test_canonicalize_fneg_fabs_var_f16:335; CI: ; %bb.0:336; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9337; CI-NEXT: s_mov_b32 s3, 0xf000338; CI-NEXT: s_mov_b32 s2, -1339; CI-NEXT: s_waitcnt lgkmcnt(0)340; CI-NEXT: buffer_load_ushort v0, off, s[0:3], 0341; CI-NEXT: s_waitcnt vmcnt(0)342; CI-NEXT: v_cvt_f32_f16_e64 v0, -|v0|343; CI-NEXT: v_cvt_f16_f32_e32 v0, v0344; CI-NEXT: buffer_store_short v0, off, s[0:3], 0345; CI-NEXT: s_endpgm346;347; GFX11-TRUE16-LABEL: v_test_canonicalize_fneg_fabs_var_f16:348; GFX11-TRUE16: ; %bb.0:349; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24350; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0351; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)352; GFX11-TRUE16-NEXT: global_load_d16_b16 v0, v1, s[0:1]353; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)354; GFX11-TRUE16-NEXT: v_max_f16_e64 v0.l, -|v0.l|, -|v0.l|355; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]356; GFX11-TRUE16-NEXT: s_endpgm357;358; GFX11-FAKE16-LABEL: v_test_canonicalize_fneg_fabs_var_f16:359; GFX11-FAKE16: ; %bb.0:360; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24361; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, 0362; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)363; GFX11-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1]364; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)365; GFX11-FAKE16-NEXT: v_max_f16_e64 v1, -|v1|, -|v1|366; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]367; GFX11-FAKE16-NEXT: s_endpgm368 %val = load half, ptr addrspace(1) %out369 %val.fabs = call half @llvm.fabs.f16(half %val)370 %val.fabs.fneg = fneg half %val.fabs371 %canonicalized = call half @llvm.canonicalize.f16(half %val.fabs.fneg)372 store half %canonicalized, ptr addrspace(1) %out373 ret void374}375 376define amdgpu_kernel void @v_test_canonicalize_fneg_var_f16(ptr addrspace(1) %out) #1 {377; VI-LABEL: v_test_canonicalize_fneg_var_f16:378; VI: ; %bb.0:379; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24380; VI-NEXT: s_waitcnt lgkmcnt(0)381; VI-NEXT: v_mov_b32_e32 v0, s0382; VI-NEXT: v_mov_b32_e32 v1, s1383; VI-NEXT: flat_load_ushort v2, v[0:1]384; VI-NEXT: s_waitcnt vmcnt(0)385; VI-NEXT: v_max_f16_e64 v2, -v2, -v2386; VI-NEXT: flat_store_short v[0:1], v2387; VI-NEXT: s_endpgm388;389; GFX9-LABEL: v_test_canonicalize_fneg_var_f16:390; GFX9: ; %bb.0:391; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24392; GFX9-NEXT: v_mov_b32_e32 v0, 0393; GFX9-NEXT: s_waitcnt lgkmcnt(0)394; GFX9-NEXT: global_load_ushort v1, v0, s[0:1]395; GFX9-NEXT: s_waitcnt vmcnt(0)396; GFX9-NEXT: v_max_f16_e64 v1, -v1, -v1397; GFX9-NEXT: global_store_short v0, v1, s[0:1]398; GFX9-NEXT: s_endpgm399;400; CI-LABEL: v_test_canonicalize_fneg_var_f16:401; CI: ; %bb.0:402; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9403; CI-NEXT: s_mov_b32 s3, 0xf000404; CI-NEXT: s_mov_b32 s2, -1405; CI-NEXT: s_waitcnt lgkmcnt(0)406; CI-NEXT: buffer_load_ushort v0, off, s[0:3], 0407; CI-NEXT: s_waitcnt vmcnt(0)408; CI-NEXT: v_cvt_f32_f16_e64 v0, -v0409; CI-NEXT: v_cvt_f16_f32_e32 v0, v0410; CI-NEXT: buffer_store_short v0, off, s[0:3], 0411; CI-NEXT: s_endpgm412;413; GFX11-TRUE16-LABEL: v_test_canonicalize_fneg_var_f16:414; GFX11-TRUE16: ; %bb.0:415; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24416; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0417; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)418; GFX11-TRUE16-NEXT: global_load_d16_b16 v0, v1, s[0:1]419; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)420; GFX11-TRUE16-NEXT: v_max_f16_e64 v0.l, -v0.l, -v0.l421; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]422; GFX11-TRUE16-NEXT: s_endpgm423;424; GFX11-FAKE16-LABEL: v_test_canonicalize_fneg_var_f16:425; GFX11-FAKE16: ; %bb.0:426; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24427; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, 0428; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)429; GFX11-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1]430; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)431; GFX11-FAKE16-NEXT: v_max_f16_e64 v1, -v1, -v1432; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]433; GFX11-FAKE16-NEXT: s_endpgm434 %val = load half, ptr addrspace(1) %out435 %val.fneg = fneg half %val436 %canonicalized = call half @llvm.canonicalize.f16(half %val.fneg)437 store half %canonicalized, ptr addrspace(1) %out438 ret void439}440 441define amdgpu_kernel void @v_test_no_denormals_canonicalize_fneg_var_f16(ptr addrspace(1) %out) #2 {442; VI-LABEL: v_test_no_denormals_canonicalize_fneg_var_f16:443; VI: ; %bb.0:444; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24445; VI-NEXT: s_waitcnt lgkmcnt(0)446; VI-NEXT: v_mov_b32_e32 v0, s0447; VI-NEXT: v_mov_b32_e32 v1, s1448; VI-NEXT: flat_load_ushort v2, v[0:1]449; VI-NEXT: s_waitcnt vmcnt(0)450; VI-NEXT: v_mul_f16_e32 v2, -1.0, v2451; VI-NEXT: flat_store_short v[0:1], v2452; VI-NEXT: s_endpgm453;454; GFX9-LABEL: v_test_no_denormals_canonicalize_fneg_var_f16:455; GFX9: ; %bb.0:456; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24457; GFX9-NEXT: v_mov_b32_e32 v0, 0458; GFX9-NEXT: s_waitcnt lgkmcnt(0)459; GFX9-NEXT: global_load_ushort v1, v0, s[0:1]460; GFX9-NEXT: s_waitcnt vmcnt(0)461; GFX9-NEXT: v_max_f16_e64 v1, -v1, -v1462; GFX9-NEXT: global_store_short v0, v1, s[0:1]463; GFX9-NEXT: s_endpgm464;465; CI-LABEL: v_test_no_denormals_canonicalize_fneg_var_f16:466; CI: ; %bb.0:467; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9468; CI-NEXT: s_mov_b32 s3, 0xf000469; CI-NEXT: s_mov_b32 s2, -1470; CI-NEXT: s_waitcnt lgkmcnt(0)471; CI-NEXT: buffer_load_ushort v0, off, s[0:3], 0472; CI-NEXT: s_waitcnt vmcnt(0)473; CI-NEXT: v_cvt_f32_f16_e64 v0, -v0474; CI-NEXT: v_cvt_f16_f32_e32 v0, v0475; CI-NEXT: buffer_store_short v0, off, s[0:3], 0476; CI-NEXT: s_endpgm477;478; GFX11-TRUE16-LABEL: v_test_no_denormals_canonicalize_fneg_var_f16:479; GFX11-TRUE16: ; %bb.0:480; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24481; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0482; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)483; GFX11-TRUE16-NEXT: global_load_d16_b16 v0, v1, s[0:1]484; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)485; GFX11-TRUE16-NEXT: v_max_f16_e64 v0.l, -v0.l, -v0.l486; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]487; GFX11-TRUE16-NEXT: s_endpgm488;489; GFX11-FAKE16-LABEL: v_test_no_denormals_canonicalize_fneg_var_f16:490; GFX11-FAKE16: ; %bb.0:491; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24492; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, 0493; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)494; GFX11-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1]495; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)496; GFX11-FAKE16-NEXT: v_max_f16_e64 v1, -v1, -v1497; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]498; GFX11-FAKE16-NEXT: s_endpgm499 %val = load half, ptr addrspace(1) %out500 %val.fneg = fneg half %val501 %canonicalized = call half @llvm.canonicalize.f16(half %val.fneg)502 store half %canonicalized, ptr addrspace(1) %out503 ret void504}505 506define amdgpu_kernel void @v_test_no_denormals_canonicalize_fneg_fabs_var_f16(ptr addrspace(1) %out) #2 {507; VI-LABEL: v_test_no_denormals_canonicalize_fneg_fabs_var_f16:508; VI: ; %bb.0:509; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24510; VI-NEXT: s_waitcnt lgkmcnt(0)511; VI-NEXT: v_mov_b32_e32 v0, s0512; VI-NEXT: v_mov_b32_e32 v1, s1513; VI-NEXT: flat_load_ushort v2, v[0:1]514; VI-NEXT: s_waitcnt vmcnt(0)515; VI-NEXT: v_mul_f16_e64 v2, -1.0, |v2|516; VI-NEXT: flat_store_short v[0:1], v2517; VI-NEXT: s_endpgm518;519; GFX9-LABEL: v_test_no_denormals_canonicalize_fneg_fabs_var_f16:520; GFX9: ; %bb.0:521; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24522; GFX9-NEXT: v_mov_b32_e32 v0, 0523; GFX9-NEXT: s_waitcnt lgkmcnt(0)524; GFX9-NEXT: global_load_ushort v1, v0, s[0:1]525; GFX9-NEXT: s_waitcnt vmcnt(0)526; GFX9-NEXT: v_max_f16_e64 v1, -|v1|, -|v1|527; GFX9-NEXT: global_store_short v0, v1, s[0:1]528; GFX9-NEXT: s_endpgm529;530; CI-LABEL: v_test_no_denormals_canonicalize_fneg_fabs_var_f16:531; CI: ; %bb.0:532; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9533; CI-NEXT: s_mov_b32 s3, 0xf000534; CI-NEXT: s_mov_b32 s2, -1535; CI-NEXT: s_waitcnt lgkmcnt(0)536; CI-NEXT: buffer_load_ushort v0, off, s[0:3], 0537; CI-NEXT: s_waitcnt vmcnt(0)538; CI-NEXT: v_cvt_f32_f16_e64 v0, -|v0|539; CI-NEXT: v_cvt_f16_f32_e32 v0, v0540; CI-NEXT: buffer_store_short v0, off, s[0:3], 0541; CI-NEXT: s_endpgm542;543; GFX11-TRUE16-LABEL: v_test_no_denormals_canonicalize_fneg_fabs_var_f16:544; GFX11-TRUE16: ; %bb.0:545; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24546; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0547; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)548; GFX11-TRUE16-NEXT: global_load_d16_b16 v0, v1, s[0:1]549; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)550; GFX11-TRUE16-NEXT: v_max_f16_e64 v0.l, -|v0.l|, -|v0.l|551; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]552; GFX11-TRUE16-NEXT: s_endpgm553;554; GFX11-FAKE16-LABEL: v_test_no_denormals_canonicalize_fneg_fabs_var_f16:555; GFX11-FAKE16: ; %bb.0:556; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24557; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, 0558; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)559; GFX11-FAKE16-NEXT: global_load_u16 v1, v0, s[0:1]560; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)561; GFX11-FAKE16-NEXT: v_max_f16_e64 v1, -|v1|, -|v1|562; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]563; GFX11-FAKE16-NEXT: s_endpgm564 %val = load half, ptr addrspace(1) %out565 %val.fabs = call half @llvm.fabs.f16(half %val)566 %val.fabs.fneg = fneg half %val.fabs567 %canonicalized = call half @llvm.canonicalize.f16(half %val.fabs.fneg)568 store half %canonicalized, ptr addrspace(1) %out569 ret void570}571 572define amdgpu_kernel void @test_fold_canonicalize_p0_f16(ptr addrspace(1) %out) #1 {573; VI-LABEL: test_fold_canonicalize_p0_f16:574; VI: ; %bb.0:575; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24576; VI-NEXT: v_mov_b32_e32 v2, 0577; VI-NEXT: s_waitcnt lgkmcnt(0)578; VI-NEXT: v_mov_b32_e32 v0, s0579; VI-NEXT: v_mov_b32_e32 v1, s1580; VI-NEXT: flat_store_short v[0:1], v2581; VI-NEXT: s_endpgm582;583; GFX9-LABEL: test_fold_canonicalize_p0_f16:584; GFX9: ; %bb.0:585; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24586; GFX9-NEXT: v_mov_b32_e32 v0, 0587; GFX9-NEXT: s_waitcnt lgkmcnt(0)588; GFX9-NEXT: global_store_short v0, v0, s[0:1]589; GFX9-NEXT: s_endpgm590;591; CI-LABEL: test_fold_canonicalize_p0_f16:592; CI: ; %bb.0:593; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9594; CI-NEXT: s_mov_b32 s3, 0xf000595; CI-NEXT: s_mov_b32 s2, -1596; CI-NEXT: v_mov_b32_e32 v0, 0597; CI-NEXT: s_waitcnt lgkmcnt(0)598; CI-NEXT: buffer_store_short v0, off, s[0:3], 0599; CI-NEXT: s_endpgm600;601; GFX11-TRUE16-LABEL: test_fold_canonicalize_p0_f16:602; GFX11-TRUE16: ; %bb.0:603; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24604; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0605; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0606; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)607; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]608; GFX11-TRUE16-NEXT: s_endpgm609;610; GFX11-FAKE16-LABEL: test_fold_canonicalize_p0_f16:611; GFX11-FAKE16: ; %bb.0:612; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24613; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, 0614; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)615; GFX11-FAKE16-NEXT: global_store_b16 v0, v0, s[0:1]616; GFX11-FAKE16-NEXT: s_endpgm617 %canonicalized = call half @llvm.canonicalize.f16(half 0.0)618 store half %canonicalized, ptr addrspace(1) %out619 ret void620}621 622define amdgpu_kernel void @test_fold_canonicalize_n0_f16(ptr addrspace(1) %out) #1 {623; VI-LABEL: test_fold_canonicalize_n0_f16:624; VI: ; %bb.0:625; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24626; VI-NEXT: v_mov_b32_e32 v2, 0xffff8000627; VI-NEXT: s_waitcnt lgkmcnt(0)628; VI-NEXT: v_mov_b32_e32 v0, s0629; VI-NEXT: v_mov_b32_e32 v1, s1630; VI-NEXT: flat_store_short v[0:1], v2631; VI-NEXT: s_endpgm632;633; GFX9-LABEL: test_fold_canonicalize_n0_f16:634; GFX9: ; %bb.0:635; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24636; GFX9-NEXT: v_mov_b32_e32 v0, 0637; GFX9-NEXT: v_mov_b32_e32 v1, 0xffff8000638; GFX9-NEXT: s_waitcnt lgkmcnt(0)639; GFX9-NEXT: global_store_short v0, v1, s[0:1]640; GFX9-NEXT: s_endpgm641;642; CI-LABEL: test_fold_canonicalize_n0_f16:643; CI: ; %bb.0:644; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9645; CI-NEXT: s_mov_b32 s3, 0xf000646; CI-NEXT: s_mov_b32 s2, -1647; CI-NEXT: v_mov_b32_e32 v0, 0x8000648; CI-NEXT: s_waitcnt lgkmcnt(0)649; CI-NEXT: buffer_store_short v0, off, s[0:3], 0650; CI-NEXT: s_endpgm651;652; GFX11-TRUE16-LABEL: test_fold_canonicalize_n0_f16:653; GFX11-TRUE16: ; %bb.0:654; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24655; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0656; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x8000657; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)658; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]659; GFX11-TRUE16-NEXT: s_endpgm660;661; GFX11-FAKE16-LABEL: test_fold_canonicalize_n0_f16:662; GFX11-FAKE16: ; %bb.0:663; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24664; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xffff8000665; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)666; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]667; GFX11-FAKE16-NEXT: s_endpgm668 %canonicalized = call half @llvm.canonicalize.f16(half -0.0)669 store half %canonicalized, ptr addrspace(1) %out670 ret void671}672 673define amdgpu_kernel void @test_fold_canonicalize_p1_f16(ptr addrspace(1) %out) #1 {674; VI-LABEL: test_fold_canonicalize_p1_f16:675; VI: ; %bb.0:676; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24677; VI-NEXT: v_mov_b32_e32 v2, 0x3c00678; VI-NEXT: s_waitcnt lgkmcnt(0)679; VI-NEXT: v_mov_b32_e32 v0, s0680; VI-NEXT: v_mov_b32_e32 v1, s1681; VI-NEXT: flat_store_short v[0:1], v2682; VI-NEXT: s_endpgm683;684; GFX9-LABEL: test_fold_canonicalize_p1_f16:685; GFX9: ; %bb.0:686; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24687; GFX9-NEXT: v_mov_b32_e32 v0, 0688; GFX9-NEXT: v_mov_b32_e32 v1, 0x3c00689; GFX9-NEXT: s_waitcnt lgkmcnt(0)690; GFX9-NEXT: global_store_short v0, v1, s[0:1]691; GFX9-NEXT: s_endpgm692;693; CI-LABEL: test_fold_canonicalize_p1_f16:694; CI: ; %bb.0:695; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9696; CI-NEXT: s_mov_b32 s3, 0xf000697; CI-NEXT: s_mov_b32 s2, -1698; CI-NEXT: v_mov_b32_e32 v0, 0x3c00699; CI-NEXT: s_waitcnt lgkmcnt(0)700; CI-NEXT: buffer_store_short v0, off, s[0:3], 0701; CI-NEXT: s_endpgm702;703; GFX11-TRUE16-LABEL: test_fold_canonicalize_p1_f16:704; GFX11-TRUE16: ; %bb.0:705; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24706; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0707; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x3c00708; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)709; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]710; GFX11-TRUE16-NEXT: s_endpgm711;712; GFX11-FAKE16-LABEL: test_fold_canonicalize_p1_f16:713; GFX11-FAKE16: ; %bb.0:714; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24715; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3c00716; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)717; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]718; GFX11-FAKE16-NEXT: s_endpgm719 %canonicalized = call half @llvm.canonicalize.f16(half 1.0)720 store half %canonicalized, ptr addrspace(1) %out721 ret void722}723 724define amdgpu_kernel void @test_fold_canonicalize_n1_f16(ptr addrspace(1) %out) #1 {725; VI-LABEL: test_fold_canonicalize_n1_f16:726; VI: ; %bb.0:727; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24728; VI-NEXT: v_mov_b32_e32 v2, 0xffffbc00729; VI-NEXT: s_waitcnt lgkmcnt(0)730; VI-NEXT: v_mov_b32_e32 v0, s0731; VI-NEXT: v_mov_b32_e32 v1, s1732; VI-NEXT: flat_store_short v[0:1], v2733; VI-NEXT: s_endpgm734;735; GFX9-LABEL: test_fold_canonicalize_n1_f16:736; GFX9: ; %bb.0:737; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24738; GFX9-NEXT: v_mov_b32_e32 v0, 0739; GFX9-NEXT: v_mov_b32_e32 v1, 0xffffbc00740; GFX9-NEXT: s_waitcnt lgkmcnt(0)741; GFX9-NEXT: global_store_short v0, v1, s[0:1]742; GFX9-NEXT: s_endpgm743;744; CI-LABEL: test_fold_canonicalize_n1_f16:745; CI: ; %bb.0:746; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9747; CI-NEXT: s_mov_b32 s3, 0xf000748; CI-NEXT: s_mov_b32 s2, -1749; CI-NEXT: v_mov_b32_e32 v0, 0xbc00750; CI-NEXT: s_waitcnt lgkmcnt(0)751; CI-NEXT: buffer_store_short v0, off, s[0:3], 0752; CI-NEXT: s_endpgm753;754; GFX11-TRUE16-LABEL: test_fold_canonicalize_n1_f16:755; GFX11-TRUE16: ; %bb.0:756; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24757; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0758; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0xbc00759; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)760; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]761; GFX11-TRUE16-NEXT: s_endpgm762;763; GFX11-FAKE16-LABEL: test_fold_canonicalize_n1_f16:764; GFX11-FAKE16: ; %bb.0:765; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24766; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xffffbc00767; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)768; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]769; GFX11-FAKE16-NEXT: s_endpgm770 %canonicalized = call half @llvm.canonicalize.f16(half -1.0)771 store half %canonicalized, ptr addrspace(1) %out772 ret void773}774 775define amdgpu_kernel void @test_fold_canonicalize_literal_f16(ptr addrspace(1) %out) #1 {776; VI-LABEL: test_fold_canonicalize_literal_f16:777; VI: ; %bb.0:778; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24779; VI-NEXT: v_mov_b32_e32 v2, 0x4c00780; VI-NEXT: s_waitcnt lgkmcnt(0)781; VI-NEXT: v_mov_b32_e32 v0, s0782; VI-NEXT: v_mov_b32_e32 v1, s1783; VI-NEXT: flat_store_short v[0:1], v2784; VI-NEXT: s_endpgm785;786; GFX9-LABEL: test_fold_canonicalize_literal_f16:787; GFX9: ; %bb.0:788; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24789; GFX9-NEXT: v_mov_b32_e32 v0, 0790; GFX9-NEXT: v_mov_b32_e32 v1, 0x4c00791; GFX9-NEXT: s_waitcnt lgkmcnt(0)792; GFX9-NEXT: global_store_short v0, v1, s[0:1]793; GFX9-NEXT: s_endpgm794;795; CI-LABEL: test_fold_canonicalize_literal_f16:796; CI: ; %bb.0:797; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9798; CI-NEXT: s_mov_b32 s3, 0xf000799; CI-NEXT: s_mov_b32 s2, -1800; CI-NEXT: v_mov_b32_e32 v0, 0x4c00801; CI-NEXT: s_waitcnt lgkmcnt(0)802; CI-NEXT: buffer_store_short v0, off, s[0:3], 0803; CI-NEXT: s_endpgm804;805; GFX11-TRUE16-LABEL: test_fold_canonicalize_literal_f16:806; GFX11-TRUE16: ; %bb.0:807; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24808; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0809; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x4c00810; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)811; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]812; GFX11-TRUE16-NEXT: s_endpgm813;814; GFX11-FAKE16-LABEL: test_fold_canonicalize_literal_f16:815; GFX11-FAKE16: ; %bb.0:816; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24817; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x4c00818; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)819; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]820; GFX11-FAKE16-NEXT: s_endpgm821 %canonicalized = call half @llvm.canonicalize.f16(half 16.0)822 store half %canonicalized, ptr addrspace(1) %out823 ret void824}825 826define amdgpu_kernel void @test_default_denormals_fold_canonicalize_denormal0_f16(ptr addrspace(1) %out) #1 {827; VI-LABEL: test_default_denormals_fold_canonicalize_denormal0_f16:828; VI: ; %bb.0:829; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24830; VI-NEXT: v_mov_b32_e32 v2, 0x3ff831; VI-NEXT: s_waitcnt lgkmcnt(0)832; VI-NEXT: v_mov_b32_e32 v0, s0833; VI-NEXT: v_mov_b32_e32 v1, s1834; VI-NEXT: flat_store_short v[0:1], v2835; VI-NEXT: s_endpgm836;837; GFX9-LABEL: test_default_denormals_fold_canonicalize_denormal0_f16:838; GFX9: ; %bb.0:839; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24840; GFX9-NEXT: v_mov_b32_e32 v0, 0841; GFX9-NEXT: v_mov_b32_e32 v1, 0x3ff842; GFX9-NEXT: s_waitcnt lgkmcnt(0)843; GFX9-NEXT: global_store_short v0, v1, s[0:1]844; GFX9-NEXT: s_endpgm845;846; CI-LABEL: test_default_denormals_fold_canonicalize_denormal0_f16:847; CI: ; %bb.0:848; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9849; CI-NEXT: s_mov_b32 s3, 0xf000850; CI-NEXT: s_mov_b32 s2, -1851; CI-NEXT: v_mov_b32_e32 v0, 0x3ff852; CI-NEXT: s_waitcnt lgkmcnt(0)853; CI-NEXT: buffer_store_short v0, off, s[0:3], 0854; CI-NEXT: s_endpgm855;856; GFX11-TRUE16-LABEL: test_default_denormals_fold_canonicalize_denormal0_f16:857; GFX11-TRUE16: ; %bb.0:858; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24859; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0860; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x3ff861; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)862; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]863; GFX11-TRUE16-NEXT: s_endpgm864;865; GFX11-FAKE16-LABEL: test_default_denormals_fold_canonicalize_denormal0_f16:866; GFX11-FAKE16: ; %bb.0:867; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24868; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3ff869; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)870; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]871; GFX11-FAKE16-NEXT: s_endpgm872 %canonicalized = call half @llvm.canonicalize.f16(half 0xH03FF)873 store half %canonicalized, ptr addrspace(1) %out874 ret void875}876 877define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal0_f16(ptr addrspace(1) %out) #3 {878; VI-LABEL: test_denormals_fold_canonicalize_denormal0_f16:879; VI: ; %bb.0:880; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24881; VI-NEXT: v_mov_b32_e32 v2, 0x3ff882; VI-NEXT: s_waitcnt lgkmcnt(0)883; VI-NEXT: v_mov_b32_e32 v0, s0884; VI-NEXT: v_mov_b32_e32 v1, s1885; VI-NEXT: flat_store_short v[0:1], v2886; VI-NEXT: s_endpgm887;888; GFX9-LABEL: test_denormals_fold_canonicalize_denormal0_f16:889; GFX9: ; %bb.0:890; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24891; GFX9-NEXT: v_mov_b32_e32 v0, 0892; GFX9-NEXT: v_mov_b32_e32 v1, 0x3ff893; GFX9-NEXT: s_waitcnt lgkmcnt(0)894; GFX9-NEXT: global_store_short v0, v1, s[0:1]895; GFX9-NEXT: s_endpgm896;897; CI-LABEL: test_denormals_fold_canonicalize_denormal0_f16:898; CI: ; %bb.0:899; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9900; CI-NEXT: s_mov_b32 s3, 0xf000901; CI-NEXT: s_mov_b32 s2, -1902; CI-NEXT: v_mov_b32_e32 v0, 0x3ff903; CI-NEXT: s_waitcnt lgkmcnt(0)904; CI-NEXT: buffer_store_short v0, off, s[0:3], 0905; CI-NEXT: s_endpgm906;907; GFX11-TRUE16-LABEL: test_denormals_fold_canonicalize_denormal0_f16:908; GFX11-TRUE16: ; %bb.0:909; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24910; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0911; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x3ff912; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)913; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]914; GFX11-TRUE16-NEXT: s_endpgm915;916; GFX11-FAKE16-LABEL: test_denormals_fold_canonicalize_denormal0_f16:917; GFX11-FAKE16: ; %bb.0:918; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24919; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3ff920; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)921; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]922; GFX11-FAKE16-NEXT: s_endpgm923 %canonicalized = call half @llvm.canonicalize.f16(half 0xH03FF)924 store half %canonicalized, ptr addrspace(1) %out925 ret void926}927 928define amdgpu_kernel void @test_default_denormals_fold_canonicalize_denormal1_f16(ptr addrspace(1) %out) #1 {929; VI-LABEL: test_default_denormals_fold_canonicalize_denormal1_f16:930; VI: ; %bb.0:931; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24932; VI-NEXT: v_mov_b32_e32 v2, 0xffff83ff933; VI-NEXT: s_waitcnt lgkmcnt(0)934; VI-NEXT: v_mov_b32_e32 v0, s0935; VI-NEXT: v_mov_b32_e32 v1, s1936; VI-NEXT: flat_store_short v[0:1], v2937; VI-NEXT: s_endpgm938;939; GFX9-LABEL: test_default_denormals_fold_canonicalize_denormal1_f16:940; GFX9: ; %bb.0:941; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24942; GFX9-NEXT: v_mov_b32_e32 v0, 0943; GFX9-NEXT: v_mov_b32_e32 v1, 0xffff83ff944; GFX9-NEXT: s_waitcnt lgkmcnt(0)945; GFX9-NEXT: global_store_short v0, v1, s[0:1]946; GFX9-NEXT: s_endpgm947;948; CI-LABEL: test_default_denormals_fold_canonicalize_denormal1_f16:949; CI: ; %bb.0:950; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9951; CI-NEXT: s_mov_b32 s3, 0xf000952; CI-NEXT: s_mov_b32 s2, -1953; CI-NEXT: v_mov_b32_e32 v0, 0x83ff954; CI-NEXT: s_waitcnt lgkmcnt(0)955; CI-NEXT: buffer_store_short v0, off, s[0:3], 0956; CI-NEXT: s_endpgm957;958; GFX11-TRUE16-LABEL: test_default_denormals_fold_canonicalize_denormal1_f16:959; GFX11-TRUE16: ; %bb.0:960; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24961; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0962; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x83ff963; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)964; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]965; GFX11-TRUE16-NEXT: s_endpgm966;967; GFX11-FAKE16-LABEL: test_default_denormals_fold_canonicalize_denormal1_f16:968; GFX11-FAKE16: ; %bb.0:969; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24970; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xffff83ff971; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)972; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]973; GFX11-FAKE16-NEXT: s_endpgm974 %canonicalized = call half @llvm.canonicalize.f16(half 0xH83FF)975 store half %canonicalized, ptr addrspace(1) %out976 ret void977}978 979define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal1_f16(ptr addrspace(1) %out) #3 {980; VI-LABEL: test_denormals_fold_canonicalize_denormal1_f16:981; VI: ; %bb.0:982; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24983; VI-NEXT: v_mov_b32_e32 v2, 0xffff83ff984; VI-NEXT: s_waitcnt lgkmcnt(0)985; VI-NEXT: v_mov_b32_e32 v0, s0986; VI-NEXT: v_mov_b32_e32 v1, s1987; VI-NEXT: flat_store_short v[0:1], v2988; VI-NEXT: s_endpgm989;990; GFX9-LABEL: test_denormals_fold_canonicalize_denormal1_f16:991; GFX9: ; %bb.0:992; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24993; GFX9-NEXT: v_mov_b32_e32 v0, 0994; GFX9-NEXT: v_mov_b32_e32 v1, 0xffff83ff995; GFX9-NEXT: s_waitcnt lgkmcnt(0)996; GFX9-NEXT: global_store_short v0, v1, s[0:1]997; GFX9-NEXT: s_endpgm998;999; CI-LABEL: test_denormals_fold_canonicalize_denormal1_f16:1000; CI: ; %bb.0:1001; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91002; CI-NEXT: s_mov_b32 s3, 0xf0001003; CI-NEXT: s_mov_b32 s2, -11004; CI-NEXT: v_mov_b32_e32 v0, 0x83ff1005; CI-NEXT: s_waitcnt lgkmcnt(0)1006; CI-NEXT: buffer_store_short v0, off, s[0:3], 01007; CI-NEXT: s_endpgm1008;1009; GFX11-TRUE16-LABEL: test_denormals_fold_canonicalize_denormal1_f16:1010; GFX11-TRUE16: ; %bb.0:1011; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241012; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 01013; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x83ff1014; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1015; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]1016; GFX11-TRUE16-NEXT: s_endpgm1017;1018; GFX11-FAKE16-LABEL: test_denormals_fold_canonicalize_denormal1_f16:1019; GFX11-FAKE16: ; %bb.0:1020; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241021; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xffff83ff1022; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1023; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]1024; GFX11-FAKE16-NEXT: s_endpgm1025 %canonicalized = call half @llvm.canonicalize.f16(half 0xH83FF)1026 store half %canonicalized, ptr addrspace(1) %out1027 ret void1028}1029 1030define amdgpu_kernel void @test_fold_canonicalize_qnan_f16(ptr addrspace(1) %out) #1 {1031; VI-LABEL: test_fold_canonicalize_qnan_f16:1032; VI: ; %bb.0:1033; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241034; VI-NEXT: v_mov_b32_e32 v2, 0x7c001035; VI-NEXT: s_waitcnt lgkmcnt(0)1036; VI-NEXT: v_mov_b32_e32 v0, s01037; VI-NEXT: v_mov_b32_e32 v1, s11038; VI-NEXT: flat_store_short v[0:1], v21039; VI-NEXT: s_endpgm1040;1041; GFX9-LABEL: test_fold_canonicalize_qnan_f16:1042; GFX9: ; %bb.0:1043; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241044; GFX9-NEXT: v_mov_b32_e32 v0, 01045; GFX9-NEXT: v_mov_b32_e32 v1, 0x7c001046; GFX9-NEXT: s_waitcnt lgkmcnt(0)1047; GFX9-NEXT: global_store_short v0, v1, s[0:1]1048; GFX9-NEXT: s_endpgm1049;1050; CI-LABEL: test_fold_canonicalize_qnan_f16:1051; CI: ; %bb.0:1052; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91053; CI-NEXT: s_mov_b32 s3, 0xf0001054; CI-NEXT: s_mov_b32 s2, -11055; CI-NEXT: v_mov_b32_e32 v0, 0x7c001056; CI-NEXT: s_waitcnt lgkmcnt(0)1057; CI-NEXT: buffer_store_short v0, off, s[0:3], 01058; CI-NEXT: s_endpgm1059;1060; GFX11-TRUE16-LABEL: test_fold_canonicalize_qnan_f16:1061; GFX11-TRUE16: ; %bb.0:1062; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241063; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 01064; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x7c001065; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1066; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]1067; GFX11-TRUE16-NEXT: s_endpgm1068;1069; GFX11-FAKE16-LABEL: test_fold_canonicalize_qnan_f16:1070; GFX11-FAKE16: ; %bb.0:1071; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241072; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7c001073; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1074; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]1075; GFX11-FAKE16-NEXT: s_endpgm1076 %canonicalized = call half @llvm.canonicalize.f16(half 0xH7C00)1077 store half %canonicalized, ptr addrspace(1) %out1078 ret void1079}1080 1081define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg1_f16(ptr addrspace(1) %out) #1 {1082; VI-LABEL: test_fold_canonicalize_qnan_value_neg1_f16:1083; VI: ; %bb.0:1084; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241085; VI-NEXT: v_mov_b32_e32 v2, 0x7e001086; VI-NEXT: s_waitcnt lgkmcnt(0)1087; VI-NEXT: v_mov_b32_e32 v0, s01088; VI-NEXT: v_mov_b32_e32 v1, s11089; VI-NEXT: flat_store_short v[0:1], v21090; VI-NEXT: s_endpgm1091;1092; GFX9-LABEL: test_fold_canonicalize_qnan_value_neg1_f16:1093; GFX9: ; %bb.0:1094; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241095; GFX9-NEXT: v_mov_b32_e32 v0, 01096; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e001097; GFX9-NEXT: s_waitcnt lgkmcnt(0)1098; GFX9-NEXT: global_store_short v0, v1, s[0:1]1099; GFX9-NEXT: s_endpgm1100;1101; CI-LABEL: test_fold_canonicalize_qnan_value_neg1_f16:1102; CI: ; %bb.0:1103; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91104; CI-NEXT: s_mov_b32 s3, 0xf0001105; CI-NEXT: s_mov_b32 s2, -11106; CI-NEXT: v_mov_b32_e32 v0, 0x7e001107; CI-NEXT: s_waitcnt lgkmcnt(0)1108; CI-NEXT: buffer_store_short v0, off, s[0:3], 01109; CI-NEXT: s_endpgm1110;1111; GFX11-TRUE16-LABEL: test_fold_canonicalize_qnan_value_neg1_f16:1112; GFX11-TRUE16: ; %bb.0:1113; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241114; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 01115; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x7e001116; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1117; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]1118; GFX11-TRUE16-NEXT: s_endpgm1119;1120; GFX11-FAKE16-LABEL: test_fold_canonicalize_qnan_value_neg1_f16:1121; GFX11-FAKE16: ; %bb.0:1122; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241123; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e001124; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1125; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]1126; GFX11-FAKE16-NEXT: s_endpgm1127 %canonicalized = call half @llvm.canonicalize.f16(half bitcast (i16 -1 to half))1128 store half %canonicalized, ptr addrspace(1) %out1129 ret void1130}1131 1132define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg2_f16(ptr addrspace(1) %out) #1 {1133; VI-LABEL: test_fold_canonicalize_qnan_value_neg2_f16:1134; VI: ; %bb.0:1135; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241136; VI-NEXT: v_mov_b32_e32 v2, 0x7e001137; VI-NEXT: s_waitcnt lgkmcnt(0)1138; VI-NEXT: v_mov_b32_e32 v0, s01139; VI-NEXT: v_mov_b32_e32 v1, s11140; VI-NEXT: flat_store_short v[0:1], v21141; VI-NEXT: s_endpgm1142;1143; GFX9-LABEL: test_fold_canonicalize_qnan_value_neg2_f16:1144; GFX9: ; %bb.0:1145; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241146; GFX9-NEXT: v_mov_b32_e32 v0, 01147; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e001148; GFX9-NEXT: s_waitcnt lgkmcnt(0)1149; GFX9-NEXT: global_store_short v0, v1, s[0:1]1150; GFX9-NEXT: s_endpgm1151;1152; CI-LABEL: test_fold_canonicalize_qnan_value_neg2_f16:1153; CI: ; %bb.0:1154; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91155; CI-NEXT: s_mov_b32 s3, 0xf0001156; CI-NEXT: s_mov_b32 s2, -11157; CI-NEXT: v_mov_b32_e32 v0, 0x7e001158; CI-NEXT: s_waitcnt lgkmcnt(0)1159; CI-NEXT: buffer_store_short v0, off, s[0:3], 01160; CI-NEXT: s_endpgm1161;1162; GFX11-TRUE16-LABEL: test_fold_canonicalize_qnan_value_neg2_f16:1163; GFX11-TRUE16: ; %bb.0:1164; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241165; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 01166; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x7e001167; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1168; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]1169; GFX11-TRUE16-NEXT: s_endpgm1170;1171; GFX11-FAKE16-LABEL: test_fold_canonicalize_qnan_value_neg2_f16:1172; GFX11-FAKE16: ; %bb.0:1173; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241174; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e001175; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1176; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]1177; GFX11-FAKE16-NEXT: s_endpgm1178 %canonicalized = call half @llvm.canonicalize.f16(half bitcast (i16 -2 to half))1179 store half %canonicalized, ptr addrspace(1) %out1180 ret void1181}1182 1183define amdgpu_kernel void @test_fold_canonicalize_snan0_value_f16(ptr addrspace(1) %out) #1 {1184; VI-LABEL: test_fold_canonicalize_snan0_value_f16:1185; VI: ; %bb.0:1186; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241187; VI-NEXT: v_mov_b32_e32 v2, 0x7e001188; VI-NEXT: s_waitcnt lgkmcnt(0)1189; VI-NEXT: v_mov_b32_e32 v0, s01190; VI-NEXT: v_mov_b32_e32 v1, s11191; VI-NEXT: flat_store_short v[0:1], v21192; VI-NEXT: s_endpgm1193;1194; GFX9-LABEL: test_fold_canonicalize_snan0_value_f16:1195; GFX9: ; %bb.0:1196; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241197; GFX9-NEXT: v_mov_b32_e32 v0, 01198; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e001199; GFX9-NEXT: s_waitcnt lgkmcnt(0)1200; GFX9-NEXT: global_store_short v0, v1, s[0:1]1201; GFX9-NEXT: s_endpgm1202;1203; CI-LABEL: test_fold_canonicalize_snan0_value_f16:1204; CI: ; %bb.0:1205; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91206; CI-NEXT: s_mov_b32 s3, 0xf0001207; CI-NEXT: s_mov_b32 s2, -11208; CI-NEXT: v_mov_b32_e32 v0, 0x7e001209; CI-NEXT: s_waitcnt lgkmcnt(0)1210; CI-NEXT: buffer_store_short v0, off, s[0:3], 01211; CI-NEXT: s_endpgm1212;1213; GFX11-TRUE16-LABEL: test_fold_canonicalize_snan0_value_f16:1214; GFX11-TRUE16: ; %bb.0:1215; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241216; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 01217; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x7e001218; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1219; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]1220; GFX11-TRUE16-NEXT: s_endpgm1221;1222; GFX11-FAKE16-LABEL: test_fold_canonicalize_snan0_value_f16:1223; GFX11-FAKE16: ; %bb.0:1224; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241225; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e001226; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1227; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]1228; GFX11-FAKE16-NEXT: s_endpgm1229 %canonicalized = call half @llvm.canonicalize.f16(half 0xH7C01)1230 store half %canonicalized, ptr addrspace(1) %out1231 ret void1232}1233 1234define amdgpu_kernel void @test_fold_canonicalize_snan1_value_f16(ptr addrspace(1) %out) #1 {1235; VI-LABEL: test_fold_canonicalize_snan1_value_f16:1236; VI: ; %bb.0:1237; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241238; VI-NEXT: v_mov_b32_e32 v2, 0x7e001239; VI-NEXT: s_waitcnt lgkmcnt(0)1240; VI-NEXT: v_mov_b32_e32 v0, s01241; VI-NEXT: v_mov_b32_e32 v1, s11242; VI-NEXT: flat_store_short v[0:1], v21243; VI-NEXT: s_endpgm1244;1245; GFX9-LABEL: test_fold_canonicalize_snan1_value_f16:1246; GFX9: ; %bb.0:1247; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241248; GFX9-NEXT: v_mov_b32_e32 v0, 01249; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e001250; GFX9-NEXT: s_waitcnt lgkmcnt(0)1251; GFX9-NEXT: global_store_short v0, v1, s[0:1]1252; GFX9-NEXT: s_endpgm1253;1254; CI-LABEL: test_fold_canonicalize_snan1_value_f16:1255; CI: ; %bb.0:1256; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91257; CI-NEXT: s_mov_b32 s3, 0xf0001258; CI-NEXT: s_mov_b32 s2, -11259; CI-NEXT: v_mov_b32_e32 v0, 0x7e001260; CI-NEXT: s_waitcnt lgkmcnt(0)1261; CI-NEXT: buffer_store_short v0, off, s[0:3], 01262; CI-NEXT: s_endpgm1263;1264; GFX11-TRUE16-LABEL: test_fold_canonicalize_snan1_value_f16:1265; GFX11-TRUE16: ; %bb.0:1266; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241267; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 01268; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x7e001269; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1270; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]1271; GFX11-TRUE16-NEXT: s_endpgm1272;1273; GFX11-FAKE16-LABEL: test_fold_canonicalize_snan1_value_f16:1274; GFX11-FAKE16: ; %bb.0:1275; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241276; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e001277; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1278; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]1279; GFX11-FAKE16-NEXT: s_endpgm1280 %canonicalized = call half @llvm.canonicalize.f16(half 0xH7DFF)1281 store half %canonicalized, ptr addrspace(1) %out1282 ret void1283}1284 1285define amdgpu_kernel void @test_fold_canonicalize_snan2_value_f16(ptr addrspace(1) %out) #1 {1286; VI-LABEL: test_fold_canonicalize_snan2_value_f16:1287; VI: ; %bb.0:1288; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241289; VI-NEXT: v_mov_b32_e32 v2, 0x7e001290; VI-NEXT: s_waitcnt lgkmcnt(0)1291; VI-NEXT: v_mov_b32_e32 v0, s01292; VI-NEXT: v_mov_b32_e32 v1, s11293; VI-NEXT: flat_store_short v[0:1], v21294; VI-NEXT: s_endpgm1295;1296; GFX9-LABEL: test_fold_canonicalize_snan2_value_f16:1297; GFX9: ; %bb.0:1298; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241299; GFX9-NEXT: v_mov_b32_e32 v0, 01300; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e001301; GFX9-NEXT: s_waitcnt lgkmcnt(0)1302; GFX9-NEXT: global_store_short v0, v1, s[0:1]1303; GFX9-NEXT: s_endpgm1304;1305; CI-LABEL: test_fold_canonicalize_snan2_value_f16:1306; CI: ; %bb.0:1307; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91308; CI-NEXT: s_mov_b32 s3, 0xf0001309; CI-NEXT: s_mov_b32 s2, -11310; CI-NEXT: v_mov_b32_e32 v0, 0x7e001311; CI-NEXT: s_waitcnt lgkmcnt(0)1312; CI-NEXT: buffer_store_short v0, off, s[0:3], 01313; CI-NEXT: s_endpgm1314;1315; GFX11-TRUE16-LABEL: test_fold_canonicalize_snan2_value_f16:1316; GFX11-TRUE16: ; %bb.0:1317; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241318; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 01319; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x7e001320; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1321; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]1322; GFX11-TRUE16-NEXT: s_endpgm1323;1324; GFX11-FAKE16-LABEL: test_fold_canonicalize_snan2_value_f16:1325; GFX11-FAKE16: ; %bb.0:1326; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241327; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e001328; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1329; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]1330; GFX11-FAKE16-NEXT: s_endpgm1331 %canonicalized = call half @llvm.canonicalize.f16(half 0xHFDFF)1332 store half %canonicalized, ptr addrspace(1) %out1333 ret void1334}1335 1336define amdgpu_kernel void @test_fold_canonicalize_snan3_value_f16(ptr addrspace(1) %out) #1 {1337; VI-LABEL: test_fold_canonicalize_snan3_value_f16:1338; VI: ; %bb.0:1339; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241340; VI-NEXT: v_mov_b32_e32 v2, 0x7e001341; VI-NEXT: s_waitcnt lgkmcnt(0)1342; VI-NEXT: v_mov_b32_e32 v0, s01343; VI-NEXT: v_mov_b32_e32 v1, s11344; VI-NEXT: flat_store_short v[0:1], v21345; VI-NEXT: s_endpgm1346;1347; GFX9-LABEL: test_fold_canonicalize_snan3_value_f16:1348; GFX9: ; %bb.0:1349; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241350; GFX9-NEXT: v_mov_b32_e32 v0, 01351; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e001352; GFX9-NEXT: s_waitcnt lgkmcnt(0)1353; GFX9-NEXT: global_store_short v0, v1, s[0:1]1354; GFX9-NEXT: s_endpgm1355;1356; CI-LABEL: test_fold_canonicalize_snan3_value_f16:1357; CI: ; %bb.0:1358; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91359; CI-NEXT: s_mov_b32 s3, 0xf0001360; CI-NEXT: s_mov_b32 s2, -11361; CI-NEXT: v_mov_b32_e32 v0, 0x7e001362; CI-NEXT: s_waitcnt lgkmcnt(0)1363; CI-NEXT: buffer_store_short v0, off, s[0:3], 01364; CI-NEXT: s_endpgm1365;1366; GFX11-TRUE16-LABEL: test_fold_canonicalize_snan3_value_f16:1367; GFX11-TRUE16: ; %bb.0:1368; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241369; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 01370; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, 0x7e001371; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1372; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]1373; GFX11-TRUE16-NEXT: s_endpgm1374;1375; GFX11-FAKE16-LABEL: test_fold_canonicalize_snan3_value_f16:1376; GFX11-FAKE16: ; %bb.0:1377; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x241378; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e001379; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1380; GFX11-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]1381; GFX11-FAKE16-NEXT: s_endpgm1382 %canonicalized = call half @llvm.canonicalize.f16(half 0xHFC01)1383 store half %canonicalized, ptr addrspace(1) %out1384 ret void1385}1386 1387define amdgpu_kernel void @v_test_canonicalize_var_v2f16(ptr addrspace(1) %out) #1 {1388; VI-LABEL: v_test_canonicalize_var_v2f16:1389; VI: ; %bb.0:1390; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241391; VI-NEXT: v_lshlrev_b32_e32 v0, 2, v01392; VI-NEXT: s_waitcnt lgkmcnt(0)1393; VI-NEXT: v_mov_b32_e32 v1, s11394; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v01395; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1396; VI-NEXT: flat_load_dword v0, v[0:1]1397; VI-NEXT: s_waitcnt vmcnt(0)1398; VI-NEXT: v_max_f16_sdwa v1, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11399; VI-NEXT: v_max_f16_e32 v0, v0, v01400; VI-NEXT: v_or_b32_e32 v2, v0, v11401; VI-NEXT: v_mov_b32_e32 v0, s01402; VI-NEXT: v_mov_b32_e32 v1, s11403; VI-NEXT: flat_store_dword v[0:1], v21404; VI-NEXT: s_endpgm1405;1406; GFX9-LABEL: v_test_canonicalize_var_v2f16:1407; GFX9: ; %bb.0:1408; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241409; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01410; GFX9-NEXT: v_mov_b32_e32 v1, 01411; GFX9-NEXT: s_waitcnt lgkmcnt(0)1412; GFX9-NEXT: global_load_dword v0, v0, s[0:1]1413; GFX9-NEXT: s_waitcnt vmcnt(0)1414; GFX9-NEXT: v_pk_max_f16 v0, v0, v01415; GFX9-NEXT: global_store_dword v1, v0, s[0:1]1416; GFX9-NEXT: s_endpgm1417;1418; CI-LABEL: v_test_canonicalize_var_v2f16:1419; CI: ; %bb.0:1420; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91421; CI-NEXT: s_mov_b32 s3, 0xf0001422; CI-NEXT: s_mov_b32 s6, 01423; CI-NEXT: s_mov_b32 s7, s31424; CI-NEXT: v_lshlrev_b32_e32 v0, 2, v01425; CI-NEXT: s_waitcnt lgkmcnt(0)1426; CI-NEXT: s_mov_b64 s[4:5], s[0:1]1427; CI-NEXT: v_mov_b32_e32 v1, 01428; CI-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr641429; CI-NEXT: s_mov_b32 s2, -11430; CI-NEXT: s_waitcnt vmcnt(0)1431; CI-NEXT: v_lshrrev_b32_e32 v1, 16, v01432; CI-NEXT: v_cvt_f32_f16_e32 v1, v11433; CI-NEXT: v_cvt_f32_f16_e32 v0, v01434; CI-NEXT: v_cvt_f16_f32_e32 v1, v11435; CI-NEXT: v_cvt_f16_f32_e32 v0, v01436; CI-NEXT: v_lshlrev_b32_e32 v1, 16, v11437; CI-NEXT: v_or_b32_e32 v0, v0, v11438; CI-NEXT: buffer_store_dword v0, off, s[0:3], 01439; CI-NEXT: s_endpgm1440;1441; GFX11-LABEL: v_test_canonicalize_var_v2f16:1442; GFX11: ; %bb.0:1443; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241444; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v01445; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1446; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v01447; GFX11-NEXT: s_waitcnt lgkmcnt(0)1448; GFX11-NEXT: global_load_b32 v0, v0, s[0:1]1449; GFX11-NEXT: s_waitcnt vmcnt(0)1450; GFX11-NEXT: v_pk_max_f16 v0, v0, v01451; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]1452; GFX11-NEXT: s_endpgm1453 %tid = call i32 @llvm.amdgcn.workitem.id.x()1454 %gep = getelementptr <2 x half>, ptr addrspace(1) %out, i32 %tid1455 %val = load <2 x half>, ptr addrspace(1) %gep1456 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %val)1457 store <2 x half> %canonicalized, ptr addrspace(1) %out1458 ret void1459}1460 1461define amdgpu_kernel void @v_test_canonicalize_fabs_var_v2f16(ptr addrspace(1) %out) #1 {1462; VI-LABEL: v_test_canonicalize_fabs_var_v2f16:1463; VI: ; %bb.0:1464; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241465; VI-NEXT: v_lshlrev_b32_e32 v0, 2, v01466; VI-NEXT: s_waitcnt lgkmcnt(0)1467; VI-NEXT: v_mov_b32_e32 v1, s11468; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v01469; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1470; VI-NEXT: flat_load_dword v0, v[0:1]1471; VI-NEXT: s_waitcnt vmcnt(0)1472; VI-NEXT: v_max_f16_sdwa v1, |v0|, |v0| dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11473; VI-NEXT: v_max_f16_e64 v0, |v0|, |v0|1474; VI-NEXT: v_or_b32_e32 v2, v0, v11475; VI-NEXT: v_mov_b32_e32 v0, s01476; VI-NEXT: v_mov_b32_e32 v1, s11477; VI-NEXT: flat_store_dword v[0:1], v21478; VI-NEXT: s_endpgm1479;1480; GFX9-LABEL: v_test_canonicalize_fabs_var_v2f16:1481; GFX9: ; %bb.0:1482; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241483; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01484; GFX9-NEXT: v_mov_b32_e32 v1, 01485; GFX9-NEXT: s_waitcnt lgkmcnt(0)1486; GFX9-NEXT: global_load_dword v0, v0, s[0:1]1487; GFX9-NEXT: s_waitcnt vmcnt(0)1488; GFX9-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v01489; GFX9-NEXT: v_pk_max_f16 v0, v0, v01490; GFX9-NEXT: global_store_dword v1, v0, s[0:1]1491; GFX9-NEXT: s_endpgm1492;1493; CI-LABEL: v_test_canonicalize_fabs_var_v2f16:1494; CI: ; %bb.0:1495; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91496; CI-NEXT: s_mov_b32 s3, 0xf0001497; CI-NEXT: s_mov_b32 s6, 01498; CI-NEXT: s_mov_b32 s7, s31499; CI-NEXT: v_lshlrev_b32_e32 v0, 2, v01500; CI-NEXT: s_waitcnt lgkmcnt(0)1501; CI-NEXT: s_mov_b64 s[4:5], s[0:1]1502; CI-NEXT: v_mov_b32_e32 v1, 01503; CI-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr641504; CI-NEXT: s_mov_b32 s2, -11505; CI-NEXT: s_waitcnt vmcnt(0)1506; CI-NEXT: v_lshrrev_b32_e32 v1, 16, v01507; CI-NEXT: v_cvt_f32_f16_e64 v1, |v1|1508; CI-NEXT: v_cvt_f32_f16_e64 v0, |v0|1509; CI-NEXT: v_cvt_f16_f32_e32 v1, v11510; CI-NEXT: v_cvt_f16_f32_e32 v0, v01511; CI-NEXT: v_lshlrev_b32_e32 v1, 16, v11512; CI-NEXT: v_or_b32_e32 v0, v0, v11513; CI-NEXT: buffer_store_dword v0, off, s[0:3], 01514; CI-NEXT: s_endpgm1515;1516; GFX11-LABEL: v_test_canonicalize_fabs_var_v2f16:1517; GFX11: ; %bb.0:1518; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241519; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v01520; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)1521; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v01522; GFX11-NEXT: s_waitcnt lgkmcnt(0)1523; GFX11-NEXT: global_load_b32 v0, v0, s[0:1]1524; GFX11-NEXT: s_waitcnt vmcnt(0)1525; GFX11-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v01526; GFX11-NEXT: v_pk_max_f16 v0, v0, v01527; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]1528; GFX11-NEXT: s_endpgm1529 %tid = call i32 @llvm.amdgcn.workitem.id.x()1530 %gep = getelementptr <2 x half>, ptr addrspace(1) %out, i32 %tid1531 %val = load <2 x half>, ptr addrspace(1) %gep1532 %val.fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %val)1533 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %val.fabs)1534 store <2 x half> %canonicalized, ptr addrspace(1) %out1535 ret void1536}1537 1538define amdgpu_kernel void @v_test_canonicalize_fneg_fabs_var_v2f16(ptr addrspace(1) %out) #1 {1539; VI-LABEL: v_test_canonicalize_fneg_fabs_var_v2f16:1540; VI: ; %bb.0:1541; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241542; VI-NEXT: v_lshlrev_b32_e32 v0, 2, v01543; VI-NEXT: s_waitcnt lgkmcnt(0)1544; VI-NEXT: v_mov_b32_e32 v1, s11545; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v01546; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1547; VI-NEXT: flat_load_dword v0, v[0:1]1548; VI-NEXT: s_waitcnt vmcnt(0)1549; VI-NEXT: v_max_f16_sdwa v1, -|v0|, -|v0| dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11550; VI-NEXT: v_max_f16_e64 v0, -|v0|, -|v0|1551; VI-NEXT: v_or_b32_e32 v2, v0, v11552; VI-NEXT: v_mov_b32_e32 v0, s01553; VI-NEXT: v_mov_b32_e32 v1, s11554; VI-NEXT: flat_store_dword v[0:1], v21555; VI-NEXT: s_endpgm1556;1557; GFX9-LABEL: v_test_canonicalize_fneg_fabs_var_v2f16:1558; GFX9: ; %bb.0:1559; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241560; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01561; GFX9-NEXT: v_mov_b32_e32 v1, 01562; GFX9-NEXT: s_waitcnt lgkmcnt(0)1563; GFX9-NEXT: global_load_dword v0, v0, s[0:1]1564; GFX9-NEXT: s_waitcnt vmcnt(0)1565; GFX9-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v01566; GFX9-NEXT: v_pk_max_f16 v0, v0, v0 neg_lo:[1,1] neg_hi:[1,1]1567; GFX9-NEXT: global_store_dword v1, v0, s[0:1]1568; GFX9-NEXT: s_endpgm1569;1570; CI-LABEL: v_test_canonicalize_fneg_fabs_var_v2f16:1571; CI: ; %bb.0:1572; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91573; CI-NEXT: s_mov_b32 s3, 0xf0001574; CI-NEXT: s_mov_b32 s6, 01575; CI-NEXT: s_mov_b32 s7, s31576; CI-NEXT: v_lshlrev_b32_e32 v0, 2, v01577; CI-NEXT: s_waitcnt lgkmcnt(0)1578; CI-NEXT: s_mov_b64 s[4:5], s[0:1]1579; CI-NEXT: v_mov_b32_e32 v1, 01580; CI-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr641581; CI-NEXT: s_mov_b32 s2, -11582; CI-NEXT: s_waitcnt vmcnt(0)1583; CI-NEXT: v_or_b32_e32 v0, 0x80008000, v01584; CI-NEXT: v_lshrrev_b32_e32 v1, 16, v01585; CI-NEXT: v_cvt_f32_f16_e32 v1, v11586; CI-NEXT: v_cvt_f32_f16_e32 v0, v01587; CI-NEXT: v_cvt_f16_f32_e32 v1, v11588; CI-NEXT: v_cvt_f16_f32_e32 v0, v01589; CI-NEXT: v_lshlrev_b32_e32 v1, 16, v11590; CI-NEXT: v_or_b32_e32 v0, v0, v11591; CI-NEXT: buffer_store_dword v0, off, s[0:3], 01592; CI-NEXT: s_endpgm1593;1594; GFX11-LABEL: v_test_canonicalize_fneg_fabs_var_v2f16:1595; GFX11: ; %bb.0:1596; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241597; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v01598; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)1599; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v01600; GFX11-NEXT: s_waitcnt lgkmcnt(0)1601; GFX11-NEXT: global_load_b32 v0, v0, s[0:1]1602; GFX11-NEXT: s_waitcnt vmcnt(0)1603; GFX11-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v01604; GFX11-NEXT: v_pk_max_f16 v0, v0, v0 neg_lo:[1,1] neg_hi:[1,1]1605; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]1606; GFX11-NEXT: s_endpgm1607 %tid = call i32 @llvm.amdgcn.workitem.id.x()1608 %gep = getelementptr <2 x half>, ptr addrspace(1) %out, i32 %tid1609 %val = load <2 x half>, ptr addrspace(1) %gep1610 %val.fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %val)1611 %val.fabs.fneg = fneg <2 x half> %val.fabs1612 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %val.fabs.fneg)1613 store <2 x half> %canonicalized, ptr addrspace(1) %out1614 ret void1615}1616 1617define amdgpu_kernel void @v_test_canonicalize_fneg_var_v2f16(ptr addrspace(1) %out) #1 {1618; VI-LABEL: v_test_canonicalize_fneg_var_v2f16:1619; VI: ; %bb.0:1620; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241621; VI-NEXT: v_lshlrev_b32_e32 v0, 2, v01622; VI-NEXT: s_waitcnt lgkmcnt(0)1623; VI-NEXT: v_mov_b32_e32 v1, s11624; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v01625; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1626; VI-NEXT: flat_load_dword v0, v[0:1]1627; VI-NEXT: s_waitcnt vmcnt(0)1628; VI-NEXT: v_max_f16_sdwa v1, -v0, -v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11629; VI-NEXT: v_max_f16_e64 v0, -v0, -v01630; VI-NEXT: v_or_b32_e32 v2, v0, v11631; VI-NEXT: v_mov_b32_e32 v0, s01632; VI-NEXT: v_mov_b32_e32 v1, s11633; VI-NEXT: flat_store_dword v[0:1], v21634; VI-NEXT: s_endpgm1635;1636; GFX9-LABEL: v_test_canonicalize_fneg_var_v2f16:1637; GFX9: ; %bb.0:1638; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241639; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01640; GFX9-NEXT: v_mov_b32_e32 v1, 01641; GFX9-NEXT: s_waitcnt lgkmcnt(0)1642; GFX9-NEXT: global_load_dword v0, v0, s[0:1]1643; GFX9-NEXT: s_waitcnt vmcnt(0)1644; GFX9-NEXT: v_pk_max_f16 v0, v0, v0 neg_lo:[1,1] neg_hi:[1,1]1645; GFX9-NEXT: global_store_dword v1, v0, s[0:1]1646; GFX9-NEXT: s_endpgm1647;1648; CI-LABEL: v_test_canonicalize_fneg_var_v2f16:1649; CI: ; %bb.0:1650; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91651; CI-NEXT: s_mov_b32 s3, 0xf0001652; CI-NEXT: s_mov_b32 s6, 01653; CI-NEXT: s_mov_b32 s7, s31654; CI-NEXT: v_lshlrev_b32_e32 v0, 2, v01655; CI-NEXT: s_waitcnt lgkmcnt(0)1656; CI-NEXT: s_mov_b64 s[4:5], s[0:1]1657; CI-NEXT: v_mov_b32_e32 v1, 01658; CI-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr641659; CI-NEXT: s_mov_b32 s2, -11660; CI-NEXT: s_waitcnt vmcnt(0)1661; CI-NEXT: v_xor_b32_e32 v0, 0x80008000, v01662; CI-NEXT: v_lshrrev_b32_e32 v1, 16, v01663; CI-NEXT: v_cvt_f32_f16_e32 v1, v11664; CI-NEXT: v_cvt_f32_f16_e32 v0, v01665; CI-NEXT: v_cvt_f16_f32_e32 v1, v11666; CI-NEXT: v_cvt_f16_f32_e32 v0, v01667; CI-NEXT: v_lshlrev_b32_e32 v1, 16, v11668; CI-NEXT: v_or_b32_e32 v0, v0, v11669; CI-NEXT: buffer_store_dword v0, off, s[0:3], 01670; CI-NEXT: s_endpgm1671;1672; GFX11-LABEL: v_test_canonicalize_fneg_var_v2f16:1673; GFX11: ; %bb.0:1674; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241675; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v01676; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1677; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v01678; GFX11-NEXT: s_waitcnt lgkmcnt(0)1679; GFX11-NEXT: global_load_b32 v0, v0, s[0:1]1680; GFX11-NEXT: s_waitcnt vmcnt(0)1681; GFX11-NEXT: v_pk_max_f16 v0, v0, v0 neg_lo:[1,1] neg_hi:[1,1]1682; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]1683; GFX11-NEXT: s_endpgm1684 %tid = call i32 @llvm.amdgcn.workitem.id.x()1685 %gep = getelementptr <2 x half>, ptr addrspace(1) %out, i32 %tid1686 %val = load <2 x half>, ptr addrspace(1) %gep1687 %fneg.val = fneg <2 x half> %val1688 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %fneg.val)1689 store <2 x half> %canonicalized, ptr addrspace(1) %out1690 ret void1691}1692 1693define amdgpu_kernel void @s_test_canonicalize_var_v2f16(ptr addrspace(1) %out, i32 zeroext %val.arg) #1 {1694; VI-LABEL: s_test_canonicalize_var_v2f16:1695; VI: ; %bb.0:1696; VI-NEXT: s_load_dword s2, s[4:5], 0x2c1697; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241698; VI-NEXT: s_waitcnt lgkmcnt(0)1699; VI-NEXT: s_lshr_b32 s3, s2, 161700; VI-NEXT: v_mov_b32_e32 v1, s31701; VI-NEXT: v_max_f16_e64 v0, s2, s21702; VI-NEXT: v_max_f16_sdwa v1, v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1703; VI-NEXT: v_or_b32_e32 v2, v0, v11704; VI-NEXT: v_mov_b32_e32 v0, s01705; VI-NEXT: v_mov_b32_e32 v1, s11706; VI-NEXT: flat_store_dword v[0:1], v21707; VI-NEXT: s_endpgm1708;1709; GFX9-LABEL: s_test_canonicalize_var_v2f16:1710; GFX9: ; %bb.0:1711; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c1712; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241713; GFX9-NEXT: v_mov_b32_e32 v0, 01714; GFX9-NEXT: s_waitcnt lgkmcnt(0)1715; GFX9-NEXT: v_pk_max_f16 v1, s2, s21716; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1717; GFX9-NEXT: s_endpgm1718;1719; CI-LABEL: s_test_canonicalize_var_v2f16:1720; CI: ; %bb.0:1721; CI-NEXT: s_load_dword s0, s[4:5], 0xb1722; CI-NEXT: s_mov_b32 s3, 0xf0001723; CI-NEXT: s_mov_b32 s2, -11724; CI-NEXT: s_waitcnt lgkmcnt(0)1725; CI-NEXT: s_lshr_b32 s1, s0, 161726; CI-NEXT: v_cvt_f32_f16_e32 v0, s11727; CI-NEXT: v_cvt_f32_f16_e32 v1, s01728; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91729; CI-NEXT: v_cvt_f16_f32_e32 v0, v01730; CI-NEXT: v_cvt_f16_f32_e32 v1, v11731; CI-NEXT: v_lshlrev_b32_e32 v0, 16, v01732; CI-NEXT: v_or_b32_e32 v0, v1, v01733; CI-NEXT: s_waitcnt lgkmcnt(0)1734; CI-NEXT: buffer_store_dword v0, off, s[0:3], 01735; CI-NEXT: s_endpgm1736;1737; GFX11-LABEL: s_test_canonicalize_var_v2f16:1738; GFX11: ; %bb.0:1739; GFX11-NEXT: s_clause 0x11740; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x2c1741; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241742; GFX11-NEXT: v_mov_b32_e32 v0, 01743; GFX11-NEXT: s_waitcnt lgkmcnt(0)1744; GFX11-NEXT: v_pk_max_f16 v1, s2, s21745; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]1746; GFX11-NEXT: s_endpgm1747 %val = bitcast i32 %val.arg to <2 x half>1748 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %val)1749 store <2 x half> %canonicalized, ptr addrspace(1) %out1750 ret void1751}1752 1753define amdgpu_kernel void @test_fold_canonicalize_p0_v2f16(ptr addrspace(1) %out) #1 {1754; VI-LABEL: test_fold_canonicalize_p0_v2f16:1755; VI: ; %bb.0:1756; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241757; VI-NEXT: v_mov_b32_e32 v2, 01758; VI-NEXT: s_waitcnt lgkmcnt(0)1759; VI-NEXT: v_mov_b32_e32 v0, s01760; VI-NEXT: v_mov_b32_e32 v1, s11761; VI-NEXT: flat_store_dword v[0:1], v21762; VI-NEXT: s_endpgm1763;1764; GFX9-LABEL: test_fold_canonicalize_p0_v2f16:1765; GFX9: ; %bb.0:1766; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241767; GFX9-NEXT: v_mov_b32_e32 v0, 01768; GFX9-NEXT: s_waitcnt lgkmcnt(0)1769; GFX9-NEXT: global_store_dword v0, v0, s[0:1]1770; GFX9-NEXT: s_endpgm1771;1772; CI-LABEL: test_fold_canonicalize_p0_v2f16:1773; CI: ; %bb.0:1774; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91775; CI-NEXT: s_mov_b32 s3, 0xf0001776; CI-NEXT: s_mov_b32 s2, -11777; CI-NEXT: v_mov_b32_e32 v0, 01778; CI-NEXT: s_waitcnt lgkmcnt(0)1779; CI-NEXT: buffer_store_dword v0, off, s[0:3], 01780; CI-NEXT: s_endpgm1781;1782; GFX11-LABEL: test_fold_canonicalize_p0_v2f16:1783; GFX11: ; %bb.0:1784; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241785; GFX11-NEXT: v_mov_b32_e32 v0, 01786; GFX11-NEXT: s_waitcnt lgkmcnt(0)1787; GFX11-NEXT: global_store_b32 v0, v0, s[0:1]1788; GFX11-NEXT: s_endpgm1789 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> zeroinitializer)1790 store <2 x half> %canonicalized, ptr addrspace(1) %out1791 ret void1792}1793 1794define amdgpu_kernel void @test_fold_canonicalize_n0_v2f16(ptr addrspace(1) %out) #1 {1795; VI-LABEL: test_fold_canonicalize_n0_v2f16:1796; VI: ; %bb.0:1797; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241798; VI-NEXT: v_mov_b32_e32 v2, 0x800080001799; VI-NEXT: s_waitcnt lgkmcnt(0)1800; VI-NEXT: v_mov_b32_e32 v0, s01801; VI-NEXT: v_mov_b32_e32 v1, s11802; VI-NEXT: flat_store_dword v[0:1], v21803; VI-NEXT: s_endpgm1804;1805; GFX9-LABEL: test_fold_canonicalize_n0_v2f16:1806; GFX9: ; %bb.0:1807; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241808; GFX9-NEXT: v_mov_b32_e32 v0, 01809; GFX9-NEXT: v_mov_b32_e32 v1, 0x800080001810; GFX9-NEXT: s_waitcnt lgkmcnt(0)1811; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1812; GFX9-NEXT: s_endpgm1813;1814; CI-LABEL: test_fold_canonicalize_n0_v2f16:1815; CI: ; %bb.0:1816; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91817; CI-NEXT: s_mov_b32 s3, 0xf0001818; CI-NEXT: s_mov_b32 s2, -11819; CI-NEXT: v_mov_b32_e32 v0, 0x800080001820; CI-NEXT: s_waitcnt lgkmcnt(0)1821; CI-NEXT: buffer_store_dword v0, off, s[0:3], 01822; CI-NEXT: s_endpgm1823;1824; GFX11-LABEL: test_fold_canonicalize_n0_v2f16:1825; GFX11: ; %bb.0:1826; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241827; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x800080001828; GFX11-NEXT: s_waitcnt lgkmcnt(0)1829; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]1830; GFX11-NEXT: s_endpgm1831 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half -0.0, half -0.0>)1832 store <2 x half> %canonicalized, ptr addrspace(1) %out1833 ret void1834}1835 1836define amdgpu_kernel void @test_fold_canonicalize_p1_v2f16(ptr addrspace(1) %out) #1 {1837; VI-LABEL: test_fold_canonicalize_p1_v2f16:1838; VI: ; %bb.0:1839; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241840; VI-NEXT: v_mov_b32_e32 v2, 0x3c003c001841; VI-NEXT: s_waitcnt lgkmcnt(0)1842; VI-NEXT: v_mov_b32_e32 v0, s01843; VI-NEXT: v_mov_b32_e32 v1, s11844; VI-NEXT: flat_store_dword v[0:1], v21845; VI-NEXT: s_endpgm1846;1847; GFX9-LABEL: test_fold_canonicalize_p1_v2f16:1848; GFX9: ; %bb.0:1849; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241850; GFX9-NEXT: v_mov_b32_e32 v0, 01851; GFX9-NEXT: v_mov_b32_e32 v1, 0x3c003c001852; GFX9-NEXT: s_waitcnt lgkmcnt(0)1853; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1854; GFX9-NEXT: s_endpgm1855;1856; CI-LABEL: test_fold_canonicalize_p1_v2f16:1857; CI: ; %bb.0:1858; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91859; CI-NEXT: s_mov_b32 s3, 0xf0001860; CI-NEXT: s_mov_b32 s2, -11861; CI-NEXT: v_mov_b32_e32 v0, 0x3c003c001862; CI-NEXT: s_waitcnt lgkmcnt(0)1863; CI-NEXT: buffer_store_dword v0, off, s[0:3], 01864; CI-NEXT: s_endpgm1865;1866; GFX11-LABEL: test_fold_canonicalize_p1_v2f16:1867; GFX11: ; %bb.0:1868; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241869; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3c003c001870; GFX11-NEXT: s_waitcnt lgkmcnt(0)1871; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]1872; GFX11-NEXT: s_endpgm1873 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 1.0, half 1.0>)1874 store <2 x half> %canonicalized, ptr addrspace(1) %out1875 ret void1876}1877 1878define amdgpu_kernel void @test_fold_canonicalize_n1_v2f16(ptr addrspace(1) %out) #1 {1879; VI-LABEL: test_fold_canonicalize_n1_v2f16:1880; VI: ; %bb.0:1881; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241882; VI-NEXT: v_mov_b32_e32 v2, 0xbc00bc001883; VI-NEXT: s_waitcnt lgkmcnt(0)1884; VI-NEXT: v_mov_b32_e32 v0, s01885; VI-NEXT: v_mov_b32_e32 v1, s11886; VI-NEXT: flat_store_dword v[0:1], v21887; VI-NEXT: s_endpgm1888;1889; GFX9-LABEL: test_fold_canonicalize_n1_v2f16:1890; GFX9: ; %bb.0:1891; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241892; GFX9-NEXT: v_mov_b32_e32 v0, 01893; GFX9-NEXT: v_mov_b32_e32 v1, 0xbc00bc001894; GFX9-NEXT: s_waitcnt lgkmcnt(0)1895; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1896; GFX9-NEXT: s_endpgm1897;1898; CI-LABEL: test_fold_canonicalize_n1_v2f16:1899; CI: ; %bb.0:1900; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91901; CI-NEXT: s_mov_b32 s3, 0xf0001902; CI-NEXT: s_mov_b32 s2, -11903; CI-NEXT: v_mov_b32_e32 v0, 0xbc00bc001904; CI-NEXT: s_waitcnt lgkmcnt(0)1905; CI-NEXT: buffer_store_dword v0, off, s[0:3], 01906; CI-NEXT: s_endpgm1907;1908; GFX11-LABEL: test_fold_canonicalize_n1_v2f16:1909; GFX11: ; %bb.0:1910; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241911; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xbc00bc001912; GFX11-NEXT: s_waitcnt lgkmcnt(0)1913; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]1914; GFX11-NEXT: s_endpgm1915 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half -1.0, half -1.0>)1916 store <2 x half> %canonicalized, ptr addrspace(1) %out1917 ret void1918}1919 1920define amdgpu_kernel void @test_fold_canonicalize_literal_v2f16(ptr addrspace(1) %out) #1 {1921; VI-LABEL: test_fold_canonicalize_literal_v2f16:1922; VI: ; %bb.0:1923; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241924; VI-NEXT: v_mov_b32_e32 v2, 0x4c004c001925; VI-NEXT: s_waitcnt lgkmcnt(0)1926; VI-NEXT: v_mov_b32_e32 v0, s01927; VI-NEXT: v_mov_b32_e32 v1, s11928; VI-NEXT: flat_store_dword v[0:1], v21929; VI-NEXT: s_endpgm1930;1931; GFX9-LABEL: test_fold_canonicalize_literal_v2f16:1932; GFX9: ; %bb.0:1933; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241934; GFX9-NEXT: v_mov_b32_e32 v0, 01935; GFX9-NEXT: v_mov_b32_e32 v1, 0x4c004c001936; GFX9-NEXT: s_waitcnt lgkmcnt(0)1937; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1938; GFX9-NEXT: s_endpgm1939;1940; CI-LABEL: test_fold_canonicalize_literal_v2f16:1941; CI: ; %bb.0:1942; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91943; CI-NEXT: s_mov_b32 s3, 0xf0001944; CI-NEXT: s_mov_b32 s2, -11945; CI-NEXT: v_mov_b32_e32 v0, 0x4c004c001946; CI-NEXT: s_waitcnt lgkmcnt(0)1947; CI-NEXT: buffer_store_dword v0, off, s[0:3], 01948; CI-NEXT: s_endpgm1949;1950; GFX11-LABEL: test_fold_canonicalize_literal_v2f16:1951; GFX11: ; %bb.0:1952; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241953; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x4c004c001954; GFX11-NEXT: s_waitcnt lgkmcnt(0)1955; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]1956; GFX11-NEXT: s_endpgm1957 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 16.0, half 16.0>)1958 store <2 x half> %canonicalized, ptr addrspace(1) %out1959 ret void1960}1961 1962define amdgpu_kernel void @test_no_denormals_fold_canonicalize_denormal0_v2f16(ptr addrspace(1) %out) #1 {1963; VI-LABEL: test_no_denormals_fold_canonicalize_denormal0_v2f16:1964; VI: ; %bb.0:1965; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241966; VI-NEXT: v_mov_b32_e32 v2, 0x3ff03ff1967; VI-NEXT: s_waitcnt lgkmcnt(0)1968; VI-NEXT: v_mov_b32_e32 v0, s01969; VI-NEXT: v_mov_b32_e32 v1, s11970; VI-NEXT: flat_store_dword v[0:1], v21971; VI-NEXT: s_endpgm1972;1973; GFX9-LABEL: test_no_denormals_fold_canonicalize_denormal0_v2f16:1974; GFX9: ; %bb.0:1975; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241976; GFX9-NEXT: v_mov_b32_e32 v0, 01977; GFX9-NEXT: v_mov_b32_e32 v1, 0x3ff03ff1978; GFX9-NEXT: s_waitcnt lgkmcnt(0)1979; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1980; GFX9-NEXT: s_endpgm1981;1982; CI-LABEL: test_no_denormals_fold_canonicalize_denormal0_v2f16:1983; CI: ; %bb.0:1984; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91985; CI-NEXT: s_mov_b32 s3, 0xf0001986; CI-NEXT: s_mov_b32 s2, -11987; CI-NEXT: v_mov_b32_e32 v0, 0x3ff03ff1988; CI-NEXT: s_waitcnt lgkmcnt(0)1989; CI-NEXT: buffer_store_dword v0, off, s[0:3], 01990; CI-NEXT: s_endpgm1991;1992; GFX11-LABEL: test_no_denormals_fold_canonicalize_denormal0_v2f16:1993; GFX11: ; %bb.0:1994; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241995; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3ff03ff1996; GFX11-NEXT: s_waitcnt lgkmcnt(0)1997; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]1998; GFX11-NEXT: s_endpgm1999 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH03FF, half 0xH03FF>)2000 store <2 x half> %canonicalized, ptr addrspace(1) %out2001 ret void2002}2003 2004define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal0_v2f16(ptr addrspace(1) %out) #3 {2005; VI-LABEL: test_denormals_fold_canonicalize_denormal0_v2f16:2006; VI: ; %bb.0:2007; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242008; VI-NEXT: v_mov_b32_e32 v2, 0x3ff03ff2009; VI-NEXT: s_waitcnt lgkmcnt(0)2010; VI-NEXT: v_mov_b32_e32 v0, s02011; VI-NEXT: v_mov_b32_e32 v1, s12012; VI-NEXT: flat_store_dword v[0:1], v22013; VI-NEXT: s_endpgm2014;2015; GFX9-LABEL: test_denormals_fold_canonicalize_denormal0_v2f16:2016; GFX9: ; %bb.0:2017; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242018; GFX9-NEXT: v_mov_b32_e32 v0, 02019; GFX9-NEXT: v_mov_b32_e32 v1, 0x3ff03ff2020; GFX9-NEXT: s_waitcnt lgkmcnt(0)2021; GFX9-NEXT: global_store_dword v0, v1, s[0:1]2022; GFX9-NEXT: s_endpgm2023;2024; CI-LABEL: test_denormals_fold_canonicalize_denormal0_v2f16:2025; CI: ; %bb.0:2026; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92027; CI-NEXT: s_mov_b32 s3, 0xf0002028; CI-NEXT: s_mov_b32 s2, -12029; CI-NEXT: v_mov_b32_e32 v0, 0x3ff03ff2030; CI-NEXT: s_waitcnt lgkmcnt(0)2031; CI-NEXT: buffer_store_dword v0, off, s[0:3], 02032; CI-NEXT: s_endpgm2033;2034; GFX11-LABEL: test_denormals_fold_canonicalize_denormal0_v2f16:2035; GFX11: ; %bb.0:2036; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242037; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3ff03ff2038; GFX11-NEXT: s_waitcnt lgkmcnt(0)2039; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]2040; GFX11-NEXT: s_endpgm2041 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH03FF, half 0xH03FF>)2042 store <2 x half> %canonicalized, ptr addrspace(1) %out2043 ret void2044}2045 2046define amdgpu_kernel void @test_no_denormals_fold_canonicalize_denormal1_v2f16(ptr addrspace(1) %out) #1 {2047; VI-LABEL: test_no_denormals_fold_canonicalize_denormal1_v2f16:2048; VI: ; %bb.0:2049; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242050; VI-NEXT: v_mov_b32_e32 v2, 0x83ff83ff2051; VI-NEXT: s_waitcnt lgkmcnt(0)2052; VI-NEXT: v_mov_b32_e32 v0, s02053; VI-NEXT: v_mov_b32_e32 v1, s12054; VI-NEXT: flat_store_dword v[0:1], v22055; VI-NEXT: s_endpgm2056;2057; GFX9-LABEL: test_no_denormals_fold_canonicalize_denormal1_v2f16:2058; GFX9: ; %bb.0:2059; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242060; GFX9-NEXT: v_mov_b32_e32 v0, 02061; GFX9-NEXT: v_mov_b32_e32 v1, 0x83ff83ff2062; GFX9-NEXT: s_waitcnt lgkmcnt(0)2063; GFX9-NEXT: global_store_dword v0, v1, s[0:1]2064; GFX9-NEXT: s_endpgm2065;2066; CI-LABEL: test_no_denormals_fold_canonicalize_denormal1_v2f16:2067; CI: ; %bb.0:2068; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92069; CI-NEXT: s_mov_b32 s3, 0xf0002070; CI-NEXT: s_mov_b32 s2, -12071; CI-NEXT: v_mov_b32_e32 v0, 0x83ff83ff2072; CI-NEXT: s_waitcnt lgkmcnt(0)2073; CI-NEXT: buffer_store_dword v0, off, s[0:3], 02074; CI-NEXT: s_endpgm2075;2076; GFX11-LABEL: test_no_denormals_fold_canonicalize_denormal1_v2f16:2077; GFX11: ; %bb.0:2078; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242079; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x83ff83ff2080; GFX11-NEXT: s_waitcnt lgkmcnt(0)2081; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]2082; GFX11-NEXT: s_endpgm2083 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH83FF, half 0xH83FF>)2084 store <2 x half> %canonicalized, ptr addrspace(1) %out2085 ret void2086}2087 2088define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal1_v2f16(ptr addrspace(1) %out) #3 {2089; VI-LABEL: test_denormals_fold_canonicalize_denormal1_v2f16:2090; VI: ; %bb.0:2091; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242092; VI-NEXT: v_mov_b32_e32 v2, 0x83ff83ff2093; VI-NEXT: s_waitcnt lgkmcnt(0)2094; VI-NEXT: v_mov_b32_e32 v0, s02095; VI-NEXT: v_mov_b32_e32 v1, s12096; VI-NEXT: flat_store_dword v[0:1], v22097; VI-NEXT: s_endpgm2098;2099; GFX9-LABEL: test_denormals_fold_canonicalize_denormal1_v2f16:2100; GFX9: ; %bb.0:2101; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242102; GFX9-NEXT: v_mov_b32_e32 v0, 02103; GFX9-NEXT: v_mov_b32_e32 v1, 0x83ff83ff2104; GFX9-NEXT: s_waitcnt lgkmcnt(0)2105; GFX9-NEXT: global_store_dword v0, v1, s[0:1]2106; GFX9-NEXT: s_endpgm2107;2108; CI-LABEL: test_denormals_fold_canonicalize_denormal1_v2f16:2109; CI: ; %bb.0:2110; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92111; CI-NEXT: s_mov_b32 s3, 0xf0002112; CI-NEXT: s_mov_b32 s2, -12113; CI-NEXT: v_mov_b32_e32 v0, 0x83ff83ff2114; CI-NEXT: s_waitcnt lgkmcnt(0)2115; CI-NEXT: buffer_store_dword v0, off, s[0:3], 02116; CI-NEXT: s_endpgm2117;2118; GFX11-LABEL: test_denormals_fold_canonicalize_denormal1_v2f16:2119; GFX11: ; %bb.0:2120; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242121; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x83ff83ff2122; GFX11-NEXT: s_waitcnt lgkmcnt(0)2123; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]2124; GFX11-NEXT: s_endpgm2125 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH83FF, half 0xH83FF>)2126 store <2 x half> %canonicalized, ptr addrspace(1) %out2127 ret void2128}2129 2130define amdgpu_kernel void @test_fold_canonicalize_qnan_v2f16(ptr addrspace(1) %out) #1 {2131; VI-LABEL: test_fold_canonicalize_qnan_v2f16:2132; VI: ; %bb.0:2133; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242134; VI-NEXT: v_mov_b32_e32 v2, 0x7c007c002135; VI-NEXT: s_waitcnt lgkmcnt(0)2136; VI-NEXT: v_mov_b32_e32 v0, s02137; VI-NEXT: v_mov_b32_e32 v1, s12138; VI-NEXT: flat_store_dword v[0:1], v22139; VI-NEXT: s_endpgm2140;2141; GFX9-LABEL: test_fold_canonicalize_qnan_v2f16:2142; GFX9: ; %bb.0:2143; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242144; GFX9-NEXT: v_mov_b32_e32 v0, 02145; GFX9-NEXT: v_mov_b32_e32 v1, 0x7c007c002146; GFX9-NEXT: s_waitcnt lgkmcnt(0)2147; GFX9-NEXT: global_store_dword v0, v1, s[0:1]2148; GFX9-NEXT: s_endpgm2149;2150; CI-LABEL: test_fold_canonicalize_qnan_v2f16:2151; CI: ; %bb.0:2152; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92153; CI-NEXT: s_mov_b32 s3, 0xf0002154; CI-NEXT: s_mov_b32 s2, -12155; CI-NEXT: v_mov_b32_e32 v0, 0x7c007c002156; CI-NEXT: s_waitcnt lgkmcnt(0)2157; CI-NEXT: buffer_store_dword v0, off, s[0:3], 02158; CI-NEXT: s_endpgm2159;2160; GFX11-LABEL: test_fold_canonicalize_qnan_v2f16:2161; GFX11: ; %bb.0:2162; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242163; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7c007c002164; GFX11-NEXT: s_waitcnt lgkmcnt(0)2165; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]2166; GFX11-NEXT: s_endpgm2167 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH7C00, half 0xH7C00>)2168 store <2 x half> %canonicalized, ptr addrspace(1) %out2169 ret void2170}2171 2172define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg1_v2f16(ptr addrspace(1) %out) #1 {2173; VI-LABEL: test_fold_canonicalize_qnan_value_neg1_v2f16:2174; VI: ; %bb.0:2175; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242176; VI-NEXT: v_mov_b32_e32 v2, 0x7e007e002177; VI-NEXT: s_waitcnt lgkmcnt(0)2178; VI-NEXT: v_mov_b32_e32 v0, s02179; VI-NEXT: v_mov_b32_e32 v1, s12180; VI-NEXT: flat_store_dword v[0:1], v22181; VI-NEXT: s_endpgm2182;2183; GFX9-LABEL: test_fold_canonicalize_qnan_value_neg1_v2f16:2184; GFX9: ; %bb.0:2185; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242186; GFX9-NEXT: v_mov_b32_e32 v0, 02187; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e007e002188; GFX9-NEXT: s_waitcnt lgkmcnt(0)2189; GFX9-NEXT: global_store_dword v0, v1, s[0:1]2190; GFX9-NEXT: s_endpgm2191;2192; CI-LABEL: test_fold_canonicalize_qnan_value_neg1_v2f16:2193; CI: ; %bb.0:2194; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92195; CI-NEXT: s_mov_b32 s3, 0xf0002196; CI-NEXT: s_mov_b32 s2, -12197; CI-NEXT: v_mov_b32_e32 v0, 0x7e007e002198; CI-NEXT: s_waitcnt lgkmcnt(0)2199; CI-NEXT: buffer_store_dword v0, off, s[0:3], 02200; CI-NEXT: s_endpgm2201;2202; GFX11-LABEL: test_fold_canonicalize_qnan_value_neg1_v2f16:2203; GFX11: ; %bb.0:2204; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242205; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e007e002206; GFX11-NEXT: s_waitcnt lgkmcnt(0)2207; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]2208; GFX11-NEXT: s_endpgm2209 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> bitcast (i32 -1 to <2 x half>))2210 store <2 x half> %canonicalized, ptr addrspace(1) %out2211 ret void2212}2213 2214define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg2_v2f16(ptr addrspace(1) %out) #1 {2215; VI-LABEL: test_fold_canonicalize_qnan_value_neg2_v2f16:2216; VI: ; %bb.0:2217; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242218; VI-NEXT: v_mov_b32_e32 v2, 0x7e007e002219; VI-NEXT: s_waitcnt lgkmcnt(0)2220; VI-NEXT: v_mov_b32_e32 v0, s02221; VI-NEXT: v_mov_b32_e32 v1, s12222; VI-NEXT: flat_store_dword v[0:1], v22223; VI-NEXT: s_endpgm2224;2225; GFX9-LABEL: test_fold_canonicalize_qnan_value_neg2_v2f16:2226; GFX9: ; %bb.0:2227; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242228; GFX9-NEXT: v_mov_b32_e32 v0, 02229; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e007e002230; GFX9-NEXT: s_waitcnt lgkmcnt(0)2231; GFX9-NEXT: global_store_dword v0, v1, s[0:1]2232; GFX9-NEXT: s_endpgm2233;2234; CI-LABEL: test_fold_canonicalize_qnan_value_neg2_v2f16:2235; CI: ; %bb.0:2236; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92237; CI-NEXT: s_mov_b32 s3, 0xf0002238; CI-NEXT: s_mov_b32 s2, -12239; CI-NEXT: v_mov_b32_e32 v0, 0x7e007e002240; CI-NEXT: s_waitcnt lgkmcnt(0)2241; CI-NEXT: buffer_store_dword v0, off, s[0:3], 02242; CI-NEXT: s_endpgm2243;2244; GFX11-LABEL: test_fold_canonicalize_qnan_value_neg2_v2f16:2245; GFX11: ; %bb.0:2246; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242247; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e007e002248; GFX11-NEXT: s_waitcnt lgkmcnt(0)2249; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]2250; GFX11-NEXT: s_endpgm2251 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half bitcast (i16 -2 to half), half bitcast (i16 -2 to half)>)2252 store <2 x half> %canonicalized, ptr addrspace(1) %out2253 ret void2254}2255 2256define amdgpu_kernel void @test_fold_canonicalize_snan0_value_v2f16(ptr addrspace(1) %out) #1 {2257; VI-LABEL: test_fold_canonicalize_snan0_value_v2f16:2258; VI: ; %bb.0:2259; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242260; VI-NEXT: v_mov_b32_e32 v2, 0x7e007e002261; VI-NEXT: s_waitcnt lgkmcnt(0)2262; VI-NEXT: v_mov_b32_e32 v0, s02263; VI-NEXT: v_mov_b32_e32 v1, s12264; VI-NEXT: flat_store_dword v[0:1], v22265; VI-NEXT: s_endpgm2266;2267; GFX9-LABEL: test_fold_canonicalize_snan0_value_v2f16:2268; GFX9: ; %bb.0:2269; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242270; GFX9-NEXT: v_mov_b32_e32 v0, 02271; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e007e002272; GFX9-NEXT: s_waitcnt lgkmcnt(0)2273; GFX9-NEXT: global_store_dword v0, v1, s[0:1]2274; GFX9-NEXT: s_endpgm2275;2276; CI-LABEL: test_fold_canonicalize_snan0_value_v2f16:2277; CI: ; %bb.0:2278; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92279; CI-NEXT: s_mov_b32 s3, 0xf0002280; CI-NEXT: s_mov_b32 s2, -12281; CI-NEXT: v_mov_b32_e32 v0, 0x7e007e002282; CI-NEXT: s_waitcnt lgkmcnt(0)2283; CI-NEXT: buffer_store_dword v0, off, s[0:3], 02284; CI-NEXT: s_endpgm2285;2286; GFX11-LABEL: test_fold_canonicalize_snan0_value_v2f16:2287; GFX11: ; %bb.0:2288; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242289; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e007e002290; GFX11-NEXT: s_waitcnt lgkmcnt(0)2291; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]2292; GFX11-NEXT: s_endpgm2293 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH7C01, half 0xH7C01>)2294 store <2 x half> %canonicalized, ptr addrspace(1) %out2295 ret void2296}2297 2298define amdgpu_kernel void @test_fold_canonicalize_snan1_value_v2f16(ptr addrspace(1) %out) #1 {2299; VI-LABEL: test_fold_canonicalize_snan1_value_v2f16:2300; VI: ; %bb.0:2301; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242302; VI-NEXT: v_mov_b32_e32 v2, 0x7e007e002303; VI-NEXT: s_waitcnt lgkmcnt(0)2304; VI-NEXT: v_mov_b32_e32 v0, s02305; VI-NEXT: v_mov_b32_e32 v1, s12306; VI-NEXT: flat_store_dword v[0:1], v22307; VI-NEXT: s_endpgm2308;2309; GFX9-LABEL: test_fold_canonicalize_snan1_value_v2f16:2310; GFX9: ; %bb.0:2311; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242312; GFX9-NEXT: v_mov_b32_e32 v0, 02313; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e007e002314; GFX9-NEXT: s_waitcnt lgkmcnt(0)2315; GFX9-NEXT: global_store_dword v0, v1, s[0:1]2316; GFX9-NEXT: s_endpgm2317;2318; CI-LABEL: test_fold_canonicalize_snan1_value_v2f16:2319; CI: ; %bb.0:2320; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92321; CI-NEXT: s_mov_b32 s3, 0xf0002322; CI-NEXT: s_mov_b32 s2, -12323; CI-NEXT: v_mov_b32_e32 v0, 0x7e007e002324; CI-NEXT: s_waitcnt lgkmcnt(0)2325; CI-NEXT: buffer_store_dword v0, off, s[0:3], 02326; CI-NEXT: s_endpgm2327;2328; GFX11-LABEL: test_fold_canonicalize_snan1_value_v2f16:2329; GFX11: ; %bb.0:2330; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242331; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e007e002332; GFX11-NEXT: s_waitcnt lgkmcnt(0)2333; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]2334; GFX11-NEXT: s_endpgm2335 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH7DFF, half 0xH7DFF>)2336 store <2 x half> %canonicalized, ptr addrspace(1) %out2337 ret void2338}2339 2340define amdgpu_kernel void @test_fold_canonicalize_snan2_value_v2f16(ptr addrspace(1) %out) #1 {2341; VI-LABEL: test_fold_canonicalize_snan2_value_v2f16:2342; VI: ; %bb.0:2343; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242344; VI-NEXT: v_mov_b32_e32 v2, 0x7e007e002345; VI-NEXT: s_waitcnt lgkmcnt(0)2346; VI-NEXT: v_mov_b32_e32 v0, s02347; VI-NEXT: v_mov_b32_e32 v1, s12348; VI-NEXT: flat_store_dword v[0:1], v22349; VI-NEXT: s_endpgm2350;2351; GFX9-LABEL: test_fold_canonicalize_snan2_value_v2f16:2352; GFX9: ; %bb.0:2353; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242354; GFX9-NEXT: v_mov_b32_e32 v0, 02355; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e007e002356; GFX9-NEXT: s_waitcnt lgkmcnt(0)2357; GFX9-NEXT: global_store_dword v0, v1, s[0:1]2358; GFX9-NEXT: s_endpgm2359;2360; CI-LABEL: test_fold_canonicalize_snan2_value_v2f16:2361; CI: ; %bb.0:2362; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92363; CI-NEXT: s_mov_b32 s3, 0xf0002364; CI-NEXT: s_mov_b32 s2, -12365; CI-NEXT: v_mov_b32_e32 v0, 0x7e007e002366; CI-NEXT: s_waitcnt lgkmcnt(0)2367; CI-NEXT: buffer_store_dword v0, off, s[0:3], 02368; CI-NEXT: s_endpgm2369;2370; GFX11-LABEL: test_fold_canonicalize_snan2_value_v2f16:2371; GFX11: ; %bb.0:2372; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242373; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e007e002374; GFX11-NEXT: s_waitcnt lgkmcnt(0)2375; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]2376; GFX11-NEXT: s_endpgm2377 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xHFDFF, half 0xHFDFF>)2378 store <2 x half> %canonicalized, ptr addrspace(1) %out2379 ret void2380}2381 2382define amdgpu_kernel void @test_fold_canonicalize_snan3_value_v2f16(ptr addrspace(1) %out) #1 {2383; VI-LABEL: test_fold_canonicalize_snan3_value_v2f16:2384; VI: ; %bb.0:2385; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242386; VI-NEXT: v_mov_b32_e32 v2, 0x7e007e002387; VI-NEXT: s_waitcnt lgkmcnt(0)2388; VI-NEXT: v_mov_b32_e32 v0, s02389; VI-NEXT: v_mov_b32_e32 v1, s12390; VI-NEXT: flat_store_dword v[0:1], v22391; VI-NEXT: s_endpgm2392;2393; GFX9-LABEL: test_fold_canonicalize_snan3_value_v2f16:2394; GFX9: ; %bb.0:2395; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242396; GFX9-NEXT: v_mov_b32_e32 v0, 02397; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e007e002398; GFX9-NEXT: s_waitcnt lgkmcnt(0)2399; GFX9-NEXT: global_store_dword v0, v1, s[0:1]2400; GFX9-NEXT: s_endpgm2401;2402; CI-LABEL: test_fold_canonicalize_snan3_value_v2f16:2403; CI: ; %bb.0:2404; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92405; CI-NEXT: s_mov_b32 s3, 0xf0002406; CI-NEXT: s_mov_b32 s2, -12407; CI-NEXT: v_mov_b32_e32 v0, 0x7e007e002408; CI-NEXT: s_waitcnt lgkmcnt(0)2409; CI-NEXT: buffer_store_dword v0, off, s[0:3], 02410; CI-NEXT: s_endpgm2411;2412; GFX11-LABEL: test_fold_canonicalize_snan3_value_v2f16:2413; GFX11: ; %bb.0:2414; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242415; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7e007e002416; GFX11-NEXT: s_waitcnt lgkmcnt(0)2417; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]2418; GFX11-NEXT: s_endpgm2419 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xHFC01, half 0xHFC01>)2420 store <2 x half> %canonicalized, ptr addrspace(1) %out2421 ret void2422}2423 2424define <3 x half> @v_test_canonicalize_var_v3f16(<3 x half> %val) #1 {2425; VI-LABEL: v_test_canonicalize_var_v3f16:2426; VI: ; %bb.0:2427; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2428; VI-NEXT: v_max_f16_sdwa v2, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_12429; VI-NEXT: v_max_f16_e32 v0, v0, v02430; VI-NEXT: v_max_f16_e32 v1, v1, v12431; VI-NEXT: v_or_b32_e32 v0, v0, v22432; VI-NEXT: s_setpc_b64 s[30:31]2433;2434; GFX9-LABEL: v_test_canonicalize_var_v3f16:2435; GFX9: ; %bb.0:2436; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2437; GFX9-NEXT: v_pk_max_f16 v0, v0, v02438; GFX9-NEXT: v_pk_max_f16 v1, v1, v12439; GFX9-NEXT: s_setpc_b64 s[30:31]2440;2441; CI-LABEL: v_test_canonicalize_var_v3f16:2442; CI: ; %bb.0:2443; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2444; CI-NEXT: v_cvt_f16_f32_e32 v0, v02445; CI-NEXT: v_cvt_f16_f32_e32 v1, v12446; CI-NEXT: v_cvt_f16_f32_e32 v2, v22447; CI-NEXT: v_cvt_f32_f16_e32 v0, v02448; CI-NEXT: v_cvt_f32_f16_e32 v1, v12449; CI-NEXT: v_cvt_f32_f16_e32 v2, v22450; CI-NEXT: s_setpc_b64 s[30:31]2451;2452; GFX11-LABEL: v_test_canonicalize_var_v3f16:2453; GFX11: ; %bb.0:2454; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2455; GFX11-NEXT: v_pk_max_f16 v0, v0, v02456; GFX11-NEXT: v_pk_max_f16 v1, v1, v12457; GFX11-NEXT: s_setpc_b64 s[30:31]2458 %canonicalized = call <3 x half> @llvm.canonicalize.v3f16(<3 x half> %val)2459 ret <3 x half> %canonicalized2460}2461 2462define <4 x half> @v_test_canonicalize_var_v4f16(<4 x half> %val) #1 {2463; VI-LABEL: v_test_canonicalize_var_v4f16:2464; VI: ; %bb.0:2465; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2466; VI-NEXT: v_max_f16_sdwa v2, v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_12467; VI-NEXT: v_max_f16_sdwa v3, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_12468; VI-NEXT: v_max_f16_e32 v1, v1, v12469; VI-NEXT: v_max_f16_e32 v0, v0, v02470; VI-NEXT: v_or_b32_e32 v0, v0, v32471; VI-NEXT: v_or_b32_e32 v1, v1, v22472; VI-NEXT: s_setpc_b64 s[30:31]2473;2474; GFX9-LABEL: v_test_canonicalize_var_v4f16:2475; GFX9: ; %bb.0:2476; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2477; GFX9-NEXT: v_pk_max_f16 v0, v0, v02478; GFX9-NEXT: v_pk_max_f16 v1, v1, v12479; GFX9-NEXT: s_setpc_b64 s[30:31]2480;2481; CI-LABEL: v_test_canonicalize_var_v4f16:2482; CI: ; %bb.0:2483; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2484; CI-NEXT: v_cvt_f16_f32_e32 v0, v02485; CI-NEXT: v_cvt_f16_f32_e32 v1, v12486; CI-NEXT: v_cvt_f16_f32_e32 v2, v22487; CI-NEXT: v_cvt_f16_f32_e32 v3, v32488; CI-NEXT: v_cvt_f32_f16_e32 v0, v02489; CI-NEXT: v_cvt_f32_f16_e32 v1, v12490; CI-NEXT: v_cvt_f32_f16_e32 v2, v22491; CI-NEXT: v_cvt_f32_f16_e32 v3, v32492; CI-NEXT: s_setpc_b64 s[30:31]2493;2494; GFX11-LABEL: v_test_canonicalize_var_v4f16:2495; GFX11: ; %bb.0:2496; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2497; GFX11-NEXT: v_pk_max_f16 v0, v0, v02498; GFX11-NEXT: v_pk_max_f16 v1, v1, v12499; GFX11-NEXT: s_setpc_b64 s[30:31]2500 %canonicalized = call <4 x half> @llvm.canonicalize.v4f16(<4 x half> %val)2501 ret <4 x half> %canonicalized2502}2503 2504define amdgpu_kernel void @s_test_canonicalize_undef_v2f16(ptr addrspace(1) %out) #1 {2505; VI-LABEL: s_test_canonicalize_undef_v2f16:2506; VI: ; %bb.0:2507; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242508; VI-NEXT: v_mov_b32_e32 v2, 02509; VI-NEXT: s_waitcnt lgkmcnt(0)2510; VI-NEXT: v_mov_b32_e32 v0, s02511; VI-NEXT: v_mov_b32_e32 v1, s12512; VI-NEXT: flat_store_dword v[0:1], v22513; VI-NEXT: s_endpgm2514;2515; GFX9-LABEL: s_test_canonicalize_undef_v2f16:2516; GFX9: ; %bb.0:2517; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242518; GFX9-NEXT: v_mov_b32_e32 v0, 02519; GFX9-NEXT: s_waitcnt lgkmcnt(0)2520; GFX9-NEXT: global_store_dword v0, v0, s[0:1]2521; GFX9-NEXT: s_endpgm2522;2523; CI-LABEL: s_test_canonicalize_undef_v2f16:2524; CI: ; %bb.0:2525; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92526; CI-NEXT: s_mov_b32 s3, 0xf0002527; CI-NEXT: s_mov_b32 s2, -12528; CI-NEXT: v_mov_b32_e32 v0, 02529; CI-NEXT: s_waitcnt lgkmcnt(0)2530; CI-NEXT: buffer_store_dword v0, off, s[0:3], 02531; CI-NEXT: s_endpgm2532;2533; GFX11-LABEL: s_test_canonicalize_undef_v2f16:2534; GFX11: ; %bb.0:2535; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242536; GFX11-NEXT: v_mov_b32_e32 v0, 02537; GFX11-NEXT: s_waitcnt lgkmcnt(0)2538; GFX11-NEXT: global_store_b32 v0, v0, s[0:1]2539; GFX11-NEXT: s_endpgm2540 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> undef)2541 store <2 x half> %canonicalized, ptr addrspace(1) %out2542 ret void2543}2544 2545define <2 x half> @v_test_canonicalize_reg_undef_v2f16(half %val) #1 {2546; VI-LABEL: v_test_canonicalize_reg_undef_v2f16:2547; VI: ; %bb.0:2548; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2549; VI-NEXT: v_max_f16_e32 v0, v0, v02550; VI-NEXT: s_setpc_b64 s[30:31]2551;2552; GFX9-LABEL: v_test_canonicalize_reg_undef_v2f16:2553; GFX9: ; %bb.0:2554; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2555; GFX9-NEXT: v_max_f16_e32 v0, v0, v02556; GFX9-NEXT: v_pack_b32_f16 v0, v0, 02557; GFX9-NEXT: s_setpc_b64 s[30:31]2558;2559; CI-LABEL: v_test_canonicalize_reg_undef_v2f16:2560; CI: ; %bb.0:2561; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2562; CI-NEXT: v_cvt_f16_f32_e32 v0, v02563; CI-NEXT: v_mov_b32_e32 v1, 0x7fc000002564; CI-NEXT: v_cvt_f32_f16_e32 v0, v02565; CI-NEXT: s_setpc_b64 s[30:31]2566;2567; GFX11-TRUE16-LABEL: v_test_canonicalize_reg_undef_v2f16:2568; GFX11-TRUE16: ; %bb.0:2569; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2570; GFX11-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.l2571; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2572; GFX11-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, 02573; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2574;2575; GFX11-FAKE16-LABEL: v_test_canonicalize_reg_undef_v2f16:2576; GFX11-FAKE16: ; %bb.0:2577; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2578; GFX11-FAKE16-NEXT: v_max_f16_e32 v0, v0, v02579; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2580; GFX11-FAKE16-NEXT: v_pack_b32_f16 v0, v0, 02581; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2582 %vec = insertelement <2 x half> poison, half %val, i32 02583 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %vec)2584 ret <2 x half> %canonicalized2585}2586 2587define <2 x half> @v_test_canonicalize_undef_reg_v2f16(half %val) #1 {2588; VI-LABEL: v_test_canonicalize_undef_reg_v2f16:2589; VI: ; %bb.0:2590; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2591; VI-NEXT: v_max_f16_sdwa v0, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2592; VI-NEXT: s_setpc_b64 s[30:31]2593;2594; GFX9-LABEL: v_test_canonicalize_undef_reg_v2f16:2595; GFX9: ; %bb.0:2596; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2597; GFX9-NEXT: v_max_f16_sdwa v0, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2598; GFX9-NEXT: s_setpc_b64 s[30:31]2599;2600; CI-LABEL: v_test_canonicalize_undef_reg_v2f16:2601; CI: ; %bb.0:2602; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2603; CI-NEXT: v_cvt_f16_f32_e32 v0, v02604; CI-NEXT: v_cvt_f32_f16_e32 v1, v02605; CI-NEXT: v_mov_b32_e32 v0, 0x7fc000002606; CI-NEXT: s_setpc_b64 s[30:31]2607;2608; GFX11-TRUE16-LABEL: v_test_canonicalize_undef_reg_v2f16:2609; GFX11-TRUE16: ; %bb.0:2610; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2611; GFX11-TRUE16-NEXT: v_max_f16_e32 v0.h, v0.l, v0.l2612; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2613;2614; GFX11-FAKE16-LABEL: v_test_canonicalize_undef_reg_v2f16:2615; GFX11-FAKE16: ; %bb.0:2616; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2617; GFX11-FAKE16-NEXT: v_max_f16_e32 v0, v0, v02618; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2619; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v02620; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2621 %vec = insertelement <2 x half> poison, half %val, i32 12622 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %vec)2623 ret <2 x half> %canonicalized2624}2625 2626define <2 x half> @v_test_canonicalize_undef_lo_imm_hi_v2f16() #1 {2627; VI-LABEL: v_test_canonicalize_undef_lo_imm_hi_v2f16:2628; VI: ; %bb.0:2629; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2630; VI-NEXT: v_bfrev_b32_e32 v0, 602631; VI-NEXT: s_setpc_b64 s[30:31]2632;2633; GFX9-LABEL: v_test_canonicalize_undef_lo_imm_hi_v2f16:2634; GFX9: ; %bb.0:2635; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2636; GFX9-NEXT: v_bfrev_b32_e32 v0, 602637; GFX9-NEXT: s_setpc_b64 s[30:31]2638;2639; CI-LABEL: v_test_canonicalize_undef_lo_imm_hi_v2f16:2640; CI: ; %bb.0:2641; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2642; CI-NEXT: v_mov_b32_e32 v0, 02643; CI-NEXT: v_mov_b32_e32 v1, 1.02644; CI-NEXT: s_setpc_b64 s[30:31]2645;2646; GFX11-LABEL: v_test_canonicalize_undef_lo_imm_hi_v2f16:2647; GFX11: ; %bb.0:2648; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2649; GFX11-NEXT: v_bfrev_b32_e32 v0, 602650; GFX11-NEXT: s_setpc_b64 s[30:31]2651 %vec = insertelement <2 x half> undef, half 1.0, i32 12652 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %vec)2653 ret <2 x half> %canonicalized2654}2655 2656define <2 x half> @v_test_canonicalize_imm_lo_undef_hi_v2f16() #1 {2657; VI-LABEL: v_test_canonicalize_imm_lo_undef_hi_v2f16:2658; VI: ; %bb.0:2659; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2660; VI-NEXT: v_mov_b32_e32 v0, 0x3c002661; VI-NEXT: s_setpc_b64 s[30:31]2662;2663; GFX9-LABEL: v_test_canonicalize_imm_lo_undef_hi_v2f16:2664; GFX9: ; %bb.0:2665; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2666; GFX9-NEXT: v_mov_b32_e32 v0, 0x3c002667; GFX9-NEXT: s_setpc_b64 s[30:31]2668;2669; CI-LABEL: v_test_canonicalize_imm_lo_undef_hi_v2f16:2670; CI: ; %bb.0:2671; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2672; CI-NEXT: v_mov_b32_e32 v0, 1.02673; CI-NEXT: v_mov_b32_e32 v1, 02674; CI-NEXT: s_setpc_b64 s[30:31]2675;2676; GFX11-LABEL: v_test_canonicalize_imm_lo_undef_hi_v2f16:2677; GFX11: ; %bb.0:2678; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2679; GFX11-NEXT: v_mov_b32_e32 v0, 0x3c002680; GFX11-NEXT: s_setpc_b64 s[30:31]2681 %vec = insertelement <2 x half> undef, half 1.0, i32 02682 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %vec)2683 ret <2 x half> %canonicalized2684}2685 2686define <2 x half> @v_test_canonicalize_undef_lo_k_hi_v2f16() #1 {2687; VI-LABEL: v_test_canonicalize_undef_lo_k_hi_v2f16:2688; VI: ; %bb.0:2689; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2690; VI-NEXT: v_bfrev_b32_e32 v0, 502691; VI-NEXT: s_setpc_b64 s[30:31]2692;2693; GFX9-LABEL: v_test_canonicalize_undef_lo_k_hi_v2f16:2694; GFX9: ; %bb.0:2695; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2696; GFX9-NEXT: v_bfrev_b32_e32 v0, 502697; GFX9-NEXT: s_setpc_b64 s[30:31]2698;2699; CI-LABEL: v_test_canonicalize_undef_lo_k_hi_v2f16:2700; CI: ; %bb.0:2701; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2702; CI-NEXT: v_mov_b32_e32 v0, 02703; CI-NEXT: v_mov_b32_e32 v1, 0x418000002704; CI-NEXT: s_setpc_b64 s[30:31]2705;2706; GFX11-LABEL: v_test_canonicalize_undef_lo_k_hi_v2f16:2707; GFX11: ; %bb.0:2708; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2709; GFX11-NEXT: v_bfrev_b32_e32 v0, 502710; GFX11-NEXT: s_setpc_b64 s[30:31]2711 %vec = insertelement <2 x half> undef, half 16.0, i32 12712 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %vec)2713 ret <2 x half> %canonicalized2714}2715 2716define <2 x half> @v_test_canonicalize_k_lo_undef_hi_v2f16() #1 {2717; VI-LABEL: v_test_canonicalize_k_lo_undef_hi_v2f16:2718; VI: ; %bb.0:2719; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2720; VI-NEXT: v_mov_b32_e32 v0, 0x4c002721; VI-NEXT: s_setpc_b64 s[30:31]2722;2723; GFX9-LABEL: v_test_canonicalize_k_lo_undef_hi_v2f16:2724; GFX9: ; %bb.0:2725; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2726; GFX9-NEXT: v_mov_b32_e32 v0, 0x4c002727; GFX9-NEXT: s_setpc_b64 s[30:31]2728;2729; CI-LABEL: v_test_canonicalize_k_lo_undef_hi_v2f16:2730; CI: ; %bb.0:2731; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2732; CI-NEXT: v_mov_b32_e32 v0, 0x418000002733; CI-NEXT: v_mov_b32_e32 v1, 02734; CI-NEXT: s_setpc_b64 s[30:31]2735;2736; GFX11-LABEL: v_test_canonicalize_k_lo_undef_hi_v2f16:2737; GFX11: ; %bb.0:2738; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2739; GFX11-NEXT: v_mov_b32_e32 v0, 0x4c002740; GFX11-NEXT: s_setpc_b64 s[30:31]2741 %vec = insertelement <2 x half> undef, half 16.0, i32 02742 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %vec)2743 ret <2 x half> %canonicalized2744}2745 2746define <2 x half> @v_test_canonicalize_reg_k_v2f16(half %val) #1 {2747; VI-LABEL: v_test_canonicalize_reg_k_v2f16:2748; VI: ; %bb.0:2749; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2750; VI-NEXT: v_max_f16_e32 v0, v0, v02751; VI-NEXT: v_or_b32_e32 v0, 2.0, v02752; VI-NEXT: s_setpc_b64 s[30:31]2753;2754; GFX9-LABEL: v_test_canonicalize_reg_k_v2f16:2755; GFX9: ; %bb.0:2756; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2757; GFX9-NEXT: v_max_f16_e32 v0, v0, v02758; GFX9-NEXT: v_pack_b32_f16 v0, v0, 2.02759; GFX9-NEXT: s_setpc_b64 s[30:31]2760;2761; CI-LABEL: v_test_canonicalize_reg_k_v2f16:2762; CI: ; %bb.0:2763; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2764; CI-NEXT: v_cvt_f16_f32_e32 v0, v02765; CI-NEXT: v_mov_b32_e32 v1, 2.02766; CI-NEXT: v_cvt_f32_f16_e32 v0, v02767; CI-NEXT: s_setpc_b64 s[30:31]2768;2769; GFX11-TRUE16-LABEL: v_test_canonicalize_reg_k_v2f16:2770; GFX11-TRUE16: ; %bb.0:2771; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2772; GFX11-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.l2773; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2774; GFX11-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, 2.02775; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2776;2777; GFX11-FAKE16-LABEL: v_test_canonicalize_reg_k_v2f16:2778; GFX11-FAKE16: ; %bb.0:2779; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2780; GFX11-FAKE16-NEXT: v_max_f16_e32 v0, v0, v02781; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2782; GFX11-FAKE16-NEXT: v_pack_b32_f16 v0, v0, 2.02783; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2784 %vec0 = insertelement <2 x half> poison, half %val, i32 02785 %vec1 = insertelement <2 x half> %vec0, half 2.0, i32 12786 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %vec1)2787 ret <2 x half> %canonicalized2788}2789 2790define <2 x half> @v_test_canonicalize_k_reg_v2f16(half %val) #1 {2791; VI-LABEL: v_test_canonicalize_k_reg_v2f16:2792; VI: ; %bb.0:2793; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2794; VI-NEXT: v_max_f16_sdwa v0, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2795; VI-NEXT: v_or_b32_e32 v0, 0x4000, v02796; VI-NEXT: s_setpc_b64 s[30:31]2797;2798; GFX9-LABEL: v_test_canonicalize_k_reg_v2f16:2799; GFX9: ; %bb.0:2800; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2801; GFX9-NEXT: v_max_f16_e32 v0, v0, v02802; GFX9-NEXT: v_pack_b32_f16 v0, 2.0, v02803; GFX9-NEXT: s_setpc_b64 s[30:31]2804;2805; CI-LABEL: v_test_canonicalize_k_reg_v2f16:2806; CI: ; %bb.0:2807; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2808; CI-NEXT: v_cvt_f16_f32_e32 v0, v02809; CI-NEXT: v_cvt_f32_f16_e32 v1, v02810; CI-NEXT: v_mov_b32_e32 v0, 2.02811; CI-NEXT: s_setpc_b64 s[30:31]2812;2813; GFX11-TRUE16-LABEL: v_test_canonicalize_k_reg_v2f16:2814; GFX11-TRUE16: ; %bb.0:2815; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2816; GFX11-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.l2817; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2818; GFX11-TRUE16-NEXT: v_pack_b32_f16 v0, 2.0, v0.l2819; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2820;2821; GFX11-FAKE16-LABEL: v_test_canonicalize_k_reg_v2f16:2822; GFX11-FAKE16: ; %bb.0:2823; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2824; GFX11-FAKE16-NEXT: v_max_f16_e32 v0, v0, v02825; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2826; GFX11-FAKE16-NEXT: v_pack_b32_f16 v0, 2.0, v02827; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2828 %vec0 = insertelement <2 x half> poison, half 2.0, i32 02829 %vec1 = insertelement <2 x half> %vec0, half %val, i32 12830 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %vec1)2831 ret <2 x half> %canonicalized2832}2833 2834define amdgpu_kernel void @s_test_canonicalize_undef_v4f16(ptr addrspace(1) %out) #1 {2835; VI-LABEL: s_test_canonicalize_undef_v4f16:2836; VI: ; %bb.0:2837; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242838; VI-NEXT: v_mov_b32_e32 v0, 02839; VI-NEXT: v_mov_b32_e32 v1, v02840; VI-NEXT: s_waitcnt lgkmcnt(0)2841; VI-NEXT: v_mov_b32_e32 v3, s12842; VI-NEXT: v_mov_b32_e32 v2, s02843; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2844; VI-NEXT: s_endpgm2845;2846; GFX9-LABEL: s_test_canonicalize_undef_v4f16:2847; GFX9: ; %bb.0:2848; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242849; GFX9-NEXT: v_mov_b32_e32 v0, 02850; GFX9-NEXT: v_mov_b32_e32 v1, v02851; GFX9-NEXT: s_waitcnt lgkmcnt(0)2852; GFX9-NEXT: global_store_dwordx2 v0, v[0:1], s[0:1]2853; GFX9-NEXT: s_endpgm2854;2855; CI-LABEL: s_test_canonicalize_undef_v4f16:2856; CI: ; %bb.0:2857; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x92858; CI-NEXT: v_mov_b32_e32 v0, 02859; CI-NEXT: s_mov_b32 s3, 0xf0002860; CI-NEXT: s_mov_b32 s2, -12861; CI-NEXT: v_mov_b32_e32 v1, v02862; CI-NEXT: s_waitcnt lgkmcnt(0)2863; CI-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 02864; CI-NEXT: s_endpgm2865;2866; GFX11-LABEL: s_test_canonicalize_undef_v4f16:2867; GFX11: ; %bb.0:2868; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242869; GFX11-NEXT: v_mov_b32_e32 v0, 02870; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2871; GFX11-NEXT: v_mov_b32_e32 v1, v02872; GFX11-NEXT: s_waitcnt lgkmcnt(0)2873; GFX11-NEXT: global_store_b64 v0, v[0:1], s[0:1]2874; GFX11-NEXT: s_endpgm2875 %canonicalized = call <4 x half> @llvm.canonicalize.v4f16(<4 x half> undef)2876 store <4 x half> %canonicalized, ptr addrspace(1) %out2877 ret void2878}2879 2880define <4 x half> @v_test_canonicalize_reg_undef_undef_undef_v4f16(half %val) #1 {2881; VI-LABEL: v_test_canonicalize_reg_undef_undef_undef_v4f16:2882; VI: ; %bb.0:2883; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2884; VI-NEXT: v_max_f16_e32 v0, v0, v02885; VI-NEXT: v_or_b32_e32 v0, 0x7e000000, v02886; VI-NEXT: v_mov_b32_e32 v1, 0x7e007e002887; VI-NEXT: s_setpc_b64 s[30:31]2888;2889; GFX9-LABEL: v_test_canonicalize_reg_undef_undef_undef_v4f16:2890; GFX9: ; %bb.0:2891; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2892; GFX9-NEXT: v_max_f16_e32 v0, v0, v02893; GFX9-NEXT: v_pack_b32_f16 v0, v0, 02894; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e007e002895; GFX9-NEXT: s_setpc_b64 s[30:31]2896;2897; CI-LABEL: v_test_canonicalize_reg_undef_undef_undef_v4f16:2898; CI: ; %bb.0:2899; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2900; CI-NEXT: v_cvt_f16_f32_e32 v0, v02901; CI-NEXT: v_mov_b32_e32 v1, 0x7fc000002902; CI-NEXT: v_mov_b32_e32 v2, 0x7fc000002903; CI-NEXT: v_mov_b32_e32 v3, 0x7fc000002904; CI-NEXT: v_cvt_f32_f16_e32 v0, v02905; CI-NEXT: s_setpc_b64 s[30:31]2906;2907; GFX11-TRUE16-LABEL: v_test_canonicalize_reg_undef_undef_undef_v4f16:2908; GFX11-TRUE16: ; %bb.0:2909; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2910; GFX11-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.l2911; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0x7e007e002912; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)2913; GFX11-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, 02914; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2915;2916; GFX11-FAKE16-LABEL: v_test_canonicalize_reg_undef_undef_undef_v4f16:2917; GFX11-FAKE16: ; %bb.0:2918; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2919; GFX11-FAKE16-NEXT: v_max_f16_e32 v0, v0, v02920; GFX11-FAKE16-NEXT: v_mov_b32_e32 v1, 0x7e007e002921; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)2922; GFX11-FAKE16-NEXT: v_pack_b32_f16 v0, v0, 02923; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2924 %vec = insertelement <4 x half> poison, half %val, i32 02925 %canonicalized = call <4 x half> @llvm.canonicalize.v4f16(<4 x half> %vec)2926 ret <4 x half> %canonicalized2927}2928 2929define <4 x half> @v_test_canonicalize_reg_reg_undef_undef_v4f16(half %val0, half %val1) #1 {2930; VI-LABEL: v_test_canonicalize_reg_reg_undef_undef_v4f16:2931; VI: ; %bb.0:2932; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2933; VI-NEXT: v_max_f16_e32 v0, v0, v02934; VI-NEXT: v_max_f16_sdwa v1, v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2935; VI-NEXT: v_or_b32_e32 v0, v0, v12936; VI-NEXT: v_mov_b32_e32 v1, 0x7e007e002937; VI-NEXT: s_setpc_b64 s[30:31]2938;2939; GFX9-LABEL: v_test_canonicalize_reg_reg_undef_undef_v4f16:2940; GFX9: ; %bb.0:2941; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2942; GFX9-NEXT: s_mov_b32 s4, 0x50401002943; GFX9-NEXT: v_perm_b32 v0, v1, v0, s42944; GFX9-NEXT: v_pk_max_f16 v0, v0, v02945; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e007e002946; GFX9-NEXT: s_setpc_b64 s[30:31]2947;2948; CI-LABEL: v_test_canonicalize_reg_reg_undef_undef_v4f16:2949; CI: ; %bb.0:2950; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2951; CI-NEXT: v_cvt_f16_f32_e32 v0, v02952; CI-NEXT: v_cvt_f16_f32_e32 v1, v12953; CI-NEXT: v_mov_b32_e32 v2, 0x7fc000002954; CI-NEXT: v_mov_b32_e32 v3, 0x7fc000002955; CI-NEXT: v_cvt_f32_f16_e32 v0, v02956; CI-NEXT: v_cvt_f32_f16_e32 v1, v12957; CI-NEXT: s_setpc_b64 s[30:31]2958;2959; GFX11-TRUE16-LABEL: v_test_canonicalize_reg_reg_undef_undef_v4f16:2960; GFX11-TRUE16: ; %bb.0:2961; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2962; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l2963; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0x7e007e002964; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)2965; GFX11-TRUE16-NEXT: v_pk_max_f16 v0, v0, v02966; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2967;2968; GFX11-FAKE16-LABEL: v_test_canonicalize_reg_reg_undef_undef_v4f16:2969; GFX11-FAKE16: ; %bb.0:2970; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2971; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x50401002972; GFX11-FAKE16-NEXT: v_mov_b32_e32 v1, 0x7e007e002973; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)2974; GFX11-FAKE16-NEXT: v_pk_max_f16 v0, v0, v02975; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2976 %vec0 = insertelement <4 x half> poison, half %val0, i32 02977 %vec1 = insertelement <4 x half> %vec0, half %val1, i32 12978 %canonicalized = call <4 x half> @llvm.canonicalize.v4f16(<4 x half> %vec1)2979 ret <4 x half> %canonicalized2980}2981 2982define <4 x half> @v_test_canonicalize_reg_undef_reg_reg_v4f16(half %val0, half %val1, half %val2) #1 {2983; VI-LABEL: v_test_canonicalize_reg_undef_reg_reg_v4f16:2984; VI: ; %bb.0:2985; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2986; VI-NEXT: v_max_f16_e32 v1, v1, v12987; VI-NEXT: v_max_f16_sdwa v2, v2, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2988; VI-NEXT: v_max_f16_e32 v0, v0, v02989; VI-NEXT: v_or_b32_e32 v0, 0x7e000000, v02990; VI-NEXT: v_or_b32_e32 v1, v1, v22991; VI-NEXT: s_setpc_b64 s[30:31]2992;2993; GFX9-LABEL: v_test_canonicalize_reg_undef_reg_reg_v4f16:2994; GFX9: ; %bb.0:2995; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2996; GFX9-NEXT: s_mov_b32 s4, 0x50401002997; GFX9-NEXT: v_perm_b32 v1, v2, v1, s42998; GFX9-NEXT: v_max_f16_e32 v0, v0, v02999; GFX9-NEXT: v_pk_max_f16 v1, v1, v13000; GFX9-NEXT: v_pack_b32_f16 v0, v0, 03001; GFX9-NEXT: s_setpc_b64 s[30:31]3002;3003; CI-LABEL: v_test_canonicalize_reg_undef_reg_reg_v4f16:3004; CI: ; %bb.0:3005; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3006; CI-NEXT: v_cvt_f16_f32_e32 v0, v03007; CI-NEXT: v_cvt_f16_f32_e32 v1, v13008; CI-NEXT: v_cvt_f16_f32_e32 v3, v23009; CI-NEXT: v_cvt_f32_f16_e32 v0, v03010; CI-NEXT: v_cvt_f32_f16_e32 v2, v13011; CI-NEXT: v_cvt_f32_f16_e32 v3, v33012; CI-NEXT: v_mov_b32_e32 v1, 0x7fc000003013; CI-NEXT: s_setpc_b64 s[30:31]3014;3015; GFX11-TRUE16-LABEL: v_test_canonicalize_reg_undef_reg_reg_v4f16:3016; GFX11-TRUE16: ; %bb.0:3017; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3018; GFX11-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.l3019; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v2.l3020; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)3021; GFX11-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, 03022; GFX11-TRUE16-NEXT: v_pk_max_f16 v1, v1, v13023; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]3024;3025; GFX11-FAKE16-LABEL: v_test_canonicalize_reg_undef_reg_reg_v4f16:3026; GFX11-FAKE16: ; %bb.0:3027; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3028; GFX11-FAKE16-NEXT: v_max_f16_e32 v0, v0, v03029; GFX11-FAKE16-NEXT: v_perm_b32 v1, v2, v1, 0x50401003030; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)3031; GFX11-FAKE16-NEXT: v_pack_b32_f16 v0, v0, 03032; GFX11-FAKE16-NEXT: v_pk_max_f16 v1, v1, v13033; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]3034 %vec0 = insertelement <4 x half> poison, half %val0, i32 03035 %vec1 = insertelement <4 x half> %vec0, half %val1, i32 23036 %vec2 = insertelement <4 x half> %vec1, half %val2, i32 33037 %canonicalized = call <4 x half> @llvm.canonicalize.v4f16(<4 x half> %vec2)3038 ret <4 x half> %canonicalized3039}3040 3041define <6 x half> @v_test_canonicalize_var_v6f16(<6 x half> %val) #1 {3042; VI-LABEL: v_test_canonicalize_var_v6f16:3043; VI: ; %bb.0:3044; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3045; VI-NEXT: v_max_f16_sdwa v3, v2, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13046; VI-NEXT: v_max_f16_sdwa v4, v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13047; VI-NEXT: v_max_f16_sdwa v5, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13048; VI-NEXT: v_max_f16_e32 v2, v2, v23049; VI-NEXT: v_max_f16_e32 v1, v1, v13050; VI-NEXT: v_max_f16_e32 v0, v0, v03051; VI-NEXT: v_or_b32_e32 v0, v0, v53052; VI-NEXT: v_or_b32_e32 v1, v1, v43053; VI-NEXT: v_or_b32_e32 v2, v2, v33054; VI-NEXT: s_setpc_b64 s[30:31]3055;3056; GFX9-LABEL: v_test_canonicalize_var_v6f16:3057; GFX9: ; %bb.0:3058; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3059; GFX9-NEXT: v_pk_max_f16 v0, v0, v03060; GFX9-NEXT: v_pk_max_f16 v1, v1, v13061; GFX9-NEXT: v_pk_max_f16 v2, v2, v23062; GFX9-NEXT: s_setpc_b64 s[30:31]3063;3064; CI-LABEL: v_test_canonicalize_var_v6f16:3065; CI: ; %bb.0:3066; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3067; CI-NEXT: v_cvt_f16_f32_e32 v5, v53068; CI-NEXT: v_cvt_f16_f32_e32 v4, v43069; CI-NEXT: v_cvt_f16_f32_e32 v0, v03070; CI-NEXT: v_cvt_f16_f32_e32 v1, v13071; CI-NEXT: v_cvt_f16_f32_e32 v2, v23072; CI-NEXT: v_cvt_f16_f32_e32 v3, v33073; CI-NEXT: v_cvt_f32_f16_e32 v5, v53074; CI-NEXT: v_cvt_f32_f16_e32 v4, v43075; CI-NEXT: v_cvt_f32_f16_e32 v0, v03076; CI-NEXT: v_cvt_f32_f16_e32 v1, v13077; CI-NEXT: v_cvt_f32_f16_e32 v2, v23078; CI-NEXT: v_cvt_f32_f16_e32 v3, v33079; CI-NEXT: s_setpc_b64 s[30:31]3080;3081; GFX11-LABEL: v_test_canonicalize_var_v6f16:3082; GFX11: ; %bb.0:3083; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3084; GFX11-NEXT: v_pk_max_f16 v0, v0, v03085; GFX11-NEXT: v_pk_max_f16 v1, v1, v13086; GFX11-NEXT: v_pk_max_f16 v2, v2, v23087; GFX11-NEXT: s_setpc_b64 s[30:31]3088 %canonicalized = call <6 x half> @llvm.canonicalize.v6f16(<6 x half> %val)3089 ret <6 x half> %canonicalized3090}3091 3092define <8 x half> @v_test_canonicalize_var_v8f16(<8 x half> %val) #1 {3093; VI-LABEL: v_test_canonicalize_var_v8f16:3094; VI: ; %bb.0:3095; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3096; VI-NEXT: v_max_f16_sdwa v4, v3, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13097; VI-NEXT: v_max_f16_sdwa v5, v2, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13098; VI-NEXT: v_max_f16_sdwa v6, v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13099; VI-NEXT: v_max_f16_sdwa v7, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13100; VI-NEXT: v_max_f16_e32 v3, v3, v33101; VI-NEXT: v_max_f16_e32 v2, v2, v23102; VI-NEXT: v_max_f16_e32 v1, v1, v13103; VI-NEXT: v_max_f16_e32 v0, v0, v03104; VI-NEXT: v_or_b32_e32 v0, v0, v73105; VI-NEXT: v_or_b32_e32 v1, v1, v63106; VI-NEXT: v_or_b32_e32 v2, v2, v53107; VI-NEXT: v_or_b32_e32 v3, v3, v43108; VI-NEXT: s_setpc_b64 s[30:31]3109;3110; GFX9-LABEL: v_test_canonicalize_var_v8f16:3111; GFX9: ; %bb.0:3112; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3113; GFX9-NEXT: v_pk_max_f16 v0, v0, v03114; GFX9-NEXT: v_pk_max_f16 v1, v1, v13115; GFX9-NEXT: v_pk_max_f16 v2, v2, v23116; GFX9-NEXT: v_pk_max_f16 v3, v3, v33117; GFX9-NEXT: s_setpc_b64 s[30:31]3118;3119; CI-LABEL: v_test_canonicalize_var_v8f16:3120; CI: ; %bb.0:3121; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3122; CI-NEXT: v_cvt_f16_f32_e32 v7, v73123; CI-NEXT: v_cvt_f16_f32_e32 v6, v63124; CI-NEXT: v_cvt_f16_f32_e32 v5, v53125; CI-NEXT: v_cvt_f16_f32_e32 v4, v43126; CI-NEXT: v_cvt_f16_f32_e32 v0, v03127; CI-NEXT: v_cvt_f16_f32_e32 v1, v13128; CI-NEXT: v_cvt_f16_f32_e32 v2, v23129; CI-NEXT: v_cvt_f16_f32_e32 v3, v33130; CI-NEXT: v_cvt_f32_f16_e32 v7, v73131; CI-NEXT: v_cvt_f32_f16_e32 v6, v63132; CI-NEXT: v_cvt_f32_f16_e32 v5, v53133; CI-NEXT: v_cvt_f32_f16_e32 v4, v43134; CI-NEXT: v_cvt_f32_f16_e32 v0, v03135; CI-NEXT: v_cvt_f32_f16_e32 v1, v13136; CI-NEXT: v_cvt_f32_f16_e32 v2, v23137; CI-NEXT: v_cvt_f32_f16_e32 v3, v33138; CI-NEXT: s_setpc_b64 s[30:31]3139;3140; GFX11-LABEL: v_test_canonicalize_var_v8f16:3141; GFX11: ; %bb.0:3142; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3143; GFX11-NEXT: v_pk_max_f16 v0, v0, v03144; GFX11-NEXT: v_pk_max_f16 v1, v1, v13145; GFX11-NEXT: v_pk_max_f16 v2, v2, v23146; GFX11-NEXT: v_pk_max_f16 v3, v3, v33147; GFX11-NEXT: s_setpc_b64 s[30:31]3148 %canonicalized = call <8 x half> @llvm.canonicalize.v8f16(<8 x half> %val)3149 ret <8 x half> %canonicalized3150}3151 3152define <12 x half> @v_test_canonicalize_var_v12f16(<12 x half> %val) #1 {3153; VI-LABEL: v_test_canonicalize_var_v12f16:3154; VI: ; %bb.0:3155; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3156; VI-NEXT: v_max_f16_sdwa v6, v5, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13157; VI-NEXT: v_max_f16_sdwa v7, v4, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13158; VI-NEXT: v_max_f16_sdwa v8, v3, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13159; VI-NEXT: v_max_f16_sdwa v9, v2, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13160; VI-NEXT: v_max_f16_sdwa v10, v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13161; VI-NEXT: v_max_f16_sdwa v11, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13162; VI-NEXT: v_max_f16_e32 v5, v5, v53163; VI-NEXT: v_max_f16_e32 v4, v4, v43164; VI-NEXT: v_max_f16_e32 v3, v3, v33165; VI-NEXT: v_max_f16_e32 v2, v2, v23166; VI-NEXT: v_max_f16_e32 v1, v1, v13167; VI-NEXT: v_max_f16_e32 v0, v0, v03168; VI-NEXT: v_or_b32_e32 v0, v0, v113169; VI-NEXT: v_or_b32_e32 v1, v1, v103170; VI-NEXT: v_or_b32_e32 v2, v2, v93171; VI-NEXT: v_or_b32_e32 v3, v3, v83172; VI-NEXT: v_or_b32_e32 v4, v4, v73173; VI-NEXT: v_or_b32_e32 v5, v5, v63174; VI-NEXT: s_setpc_b64 s[30:31]3175;3176; GFX9-LABEL: v_test_canonicalize_var_v12f16:3177; GFX9: ; %bb.0:3178; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3179; GFX9-NEXT: v_pk_max_f16 v0, v0, v03180; GFX9-NEXT: v_pk_max_f16 v1, v1, v13181; GFX9-NEXT: v_pk_max_f16 v2, v2, v23182; GFX9-NEXT: v_pk_max_f16 v3, v3, v33183; GFX9-NEXT: v_pk_max_f16 v4, v4, v43184; GFX9-NEXT: v_pk_max_f16 v5, v5, v53185; GFX9-NEXT: s_setpc_b64 s[30:31]3186;3187; CI-LABEL: v_test_canonicalize_var_v12f16:3188; CI: ; %bb.0:3189; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3190; CI-NEXT: v_cvt_f16_f32_e32 v11, v113191; CI-NEXT: v_cvt_f16_f32_e32 v10, v103192; CI-NEXT: v_cvt_f16_f32_e32 v9, v93193; CI-NEXT: v_cvt_f16_f32_e32 v8, v83194; CI-NEXT: v_cvt_f16_f32_e32 v7, v73195; CI-NEXT: v_cvt_f16_f32_e32 v6, v63196; CI-NEXT: v_cvt_f16_f32_e32 v5, v53197; CI-NEXT: v_cvt_f16_f32_e32 v4, v43198; CI-NEXT: v_cvt_f16_f32_e32 v0, v03199; CI-NEXT: v_cvt_f16_f32_e32 v1, v13200; CI-NEXT: v_cvt_f16_f32_e32 v2, v23201; CI-NEXT: v_cvt_f16_f32_e32 v3, v33202; CI-NEXT: v_cvt_f32_f16_e32 v11, v113203; CI-NEXT: v_cvt_f32_f16_e32 v10, v103204; CI-NEXT: v_cvt_f32_f16_e32 v9, v93205; CI-NEXT: v_cvt_f32_f16_e32 v8, v83206; CI-NEXT: v_cvt_f32_f16_e32 v7, v73207; CI-NEXT: v_cvt_f32_f16_e32 v6, v63208; CI-NEXT: v_cvt_f32_f16_e32 v5, v53209; CI-NEXT: v_cvt_f32_f16_e32 v4, v43210; CI-NEXT: v_cvt_f32_f16_e32 v0, v03211; CI-NEXT: v_cvt_f32_f16_e32 v1, v13212; CI-NEXT: v_cvt_f32_f16_e32 v2, v23213; CI-NEXT: v_cvt_f32_f16_e32 v3, v33214; CI-NEXT: s_setpc_b64 s[30:31]3215;3216; GFX11-LABEL: v_test_canonicalize_var_v12f16:3217; GFX11: ; %bb.0:3218; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3219; GFX11-NEXT: v_pk_max_f16 v0, v0, v03220; GFX11-NEXT: v_pk_max_f16 v1, v1, v13221; GFX11-NEXT: v_pk_max_f16 v2, v2, v23222; GFX11-NEXT: v_pk_max_f16 v3, v3, v33223; GFX11-NEXT: v_pk_max_f16 v4, v4, v43224; GFX11-NEXT: v_pk_max_f16 v5, v5, v53225; GFX11-NEXT: s_setpc_b64 s[30:31]3226 %canonicalized = call <12 x half> @llvm.canonicalize.v12f16(<12 x half> %val)3227 ret <12 x half> %canonicalized3228}3229 3230define <16 x half> @v_test_canonicalize_var_v16f16(<16 x half> %val) #1 {3231; VI-LABEL: v_test_canonicalize_var_v16f16:3232; VI: ; %bb.0:3233; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3234; VI-NEXT: v_max_f16_sdwa v8, v7, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13235; VI-NEXT: v_max_f16_sdwa v9, v6, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13236; VI-NEXT: v_max_f16_sdwa v10, v5, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13237; VI-NEXT: v_max_f16_sdwa v11, v4, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13238; VI-NEXT: v_max_f16_sdwa v12, v3, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13239; VI-NEXT: v_max_f16_sdwa v13, v2, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13240; VI-NEXT: v_max_f16_sdwa v14, v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13241; VI-NEXT: v_max_f16_sdwa v15, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13242; VI-NEXT: v_max_f16_e32 v7, v7, v73243; VI-NEXT: v_max_f16_e32 v6, v6, v63244; VI-NEXT: v_max_f16_e32 v5, v5, v53245; VI-NEXT: v_max_f16_e32 v4, v4, v43246; VI-NEXT: v_max_f16_e32 v3, v3, v33247; VI-NEXT: v_max_f16_e32 v2, v2, v23248; VI-NEXT: v_max_f16_e32 v1, v1, v13249; VI-NEXT: v_max_f16_e32 v0, v0, v03250; VI-NEXT: v_or_b32_e32 v0, v0, v153251; VI-NEXT: v_or_b32_e32 v1, v1, v143252; VI-NEXT: v_or_b32_e32 v2, v2, v133253; VI-NEXT: v_or_b32_e32 v3, v3, v123254; VI-NEXT: v_or_b32_e32 v4, v4, v113255; VI-NEXT: v_or_b32_e32 v5, v5, v103256; VI-NEXT: v_or_b32_e32 v6, v6, v93257; VI-NEXT: v_or_b32_e32 v7, v7, v83258; VI-NEXT: s_setpc_b64 s[30:31]3259;3260; GFX9-LABEL: v_test_canonicalize_var_v16f16:3261; GFX9: ; %bb.0:3262; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3263; GFX9-NEXT: v_pk_max_f16 v0, v0, v03264; GFX9-NEXT: v_pk_max_f16 v1, v1, v13265; GFX9-NEXT: v_pk_max_f16 v2, v2, v23266; GFX9-NEXT: v_pk_max_f16 v3, v3, v33267; GFX9-NEXT: v_pk_max_f16 v4, v4, v43268; GFX9-NEXT: v_pk_max_f16 v5, v5, v53269; GFX9-NEXT: v_pk_max_f16 v6, v6, v63270; GFX9-NEXT: v_pk_max_f16 v7, v7, v73271; GFX9-NEXT: s_setpc_b64 s[30:31]3272;3273; CI-LABEL: v_test_canonicalize_var_v16f16:3274; CI: ; %bb.0:3275; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3276; CI-NEXT: v_cvt_f16_f32_e32 v15, v153277; CI-NEXT: v_cvt_f16_f32_e32 v14, v143278; CI-NEXT: v_cvt_f16_f32_e32 v13, v133279; CI-NEXT: v_cvt_f16_f32_e32 v12, v123280; CI-NEXT: v_cvt_f16_f32_e32 v11, v113281; CI-NEXT: v_cvt_f16_f32_e32 v10, v103282; CI-NEXT: v_cvt_f16_f32_e32 v9, v93283; CI-NEXT: v_cvt_f16_f32_e32 v8, v83284; CI-NEXT: v_cvt_f16_f32_e32 v7, v73285; CI-NEXT: v_cvt_f16_f32_e32 v6, v63286; CI-NEXT: v_cvt_f16_f32_e32 v5, v53287; CI-NEXT: v_cvt_f16_f32_e32 v4, v43288; CI-NEXT: v_cvt_f16_f32_e32 v0, v03289; CI-NEXT: v_cvt_f16_f32_e32 v1, v13290; CI-NEXT: v_cvt_f16_f32_e32 v2, v23291; CI-NEXT: v_cvt_f16_f32_e32 v3, v33292; CI-NEXT: v_cvt_f32_f16_e32 v15, v153293; CI-NEXT: v_cvt_f32_f16_e32 v14, v143294; CI-NEXT: v_cvt_f32_f16_e32 v13, v133295; CI-NEXT: v_cvt_f32_f16_e32 v12, v123296; CI-NEXT: v_cvt_f32_f16_e32 v11, v113297; CI-NEXT: v_cvt_f32_f16_e32 v10, v103298; CI-NEXT: v_cvt_f32_f16_e32 v9, v93299; CI-NEXT: v_cvt_f32_f16_e32 v8, v83300; CI-NEXT: v_cvt_f32_f16_e32 v7, v73301; CI-NEXT: v_cvt_f32_f16_e32 v6, v63302; CI-NEXT: v_cvt_f32_f16_e32 v5, v53303; CI-NEXT: v_cvt_f32_f16_e32 v4, v43304; CI-NEXT: v_cvt_f32_f16_e32 v0, v03305; CI-NEXT: v_cvt_f32_f16_e32 v1, v13306; CI-NEXT: v_cvt_f32_f16_e32 v2, v23307; CI-NEXT: v_cvt_f32_f16_e32 v3, v33308; CI-NEXT: s_setpc_b64 s[30:31]3309;3310; GFX11-LABEL: v_test_canonicalize_var_v16f16:3311; GFX11: ; %bb.0:3312; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3313; GFX11-NEXT: v_pk_max_f16 v0, v0, v03314; GFX11-NEXT: v_pk_max_f16 v1, v1, v13315; GFX11-NEXT: v_pk_max_f16 v2, v2, v23316; GFX11-NEXT: v_pk_max_f16 v3, v3, v33317; GFX11-NEXT: v_pk_max_f16 v4, v4, v43318; GFX11-NEXT: v_pk_max_f16 v5, v5, v53319; GFX11-NEXT: v_pk_max_f16 v6, v6, v63320; GFX11-NEXT: v_pk_max_f16 v7, v7, v73321; GFX11-NEXT: s_setpc_b64 s[30:31]3322 %canonicalized = call <16 x half> @llvm.canonicalize.v16f16(<16 x half> %val)3323 ret <16 x half> %canonicalized3324}3325 3326define <32 x half> @v_test_canonicalize_var_v32f16(<32 x half> %val) #1 {3327; VI-LABEL: v_test_canonicalize_var_v32f16:3328; VI: ; %bb.0:3329; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3330; VI-NEXT: v_max_f16_sdwa v19, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13331; VI-NEXT: v_max_f16_e32 v0, v0, v03332; VI-NEXT: v_or_b32_e32 v0, v0, v193333; VI-NEXT: v_max_f16_sdwa v19, v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13334; VI-NEXT: v_max_f16_e32 v1, v1, v13335; VI-NEXT: v_or_b32_e32 v1, v1, v193336; VI-NEXT: v_max_f16_sdwa v19, v2, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13337; VI-NEXT: v_max_f16_e32 v2, v2, v23338; VI-NEXT: v_or_b32_e32 v2, v2, v193339; VI-NEXT: v_max_f16_sdwa v19, v3, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13340; VI-NEXT: v_max_f16_e32 v3, v3, v33341; VI-NEXT: v_or_b32_e32 v3, v3, v193342; VI-NEXT: v_max_f16_sdwa v19, v4, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13343; VI-NEXT: v_max_f16_e32 v4, v4, v43344; VI-NEXT: v_or_b32_e32 v4, v4, v193345; VI-NEXT: v_max_f16_sdwa v19, v5, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13346; VI-NEXT: v_max_f16_e32 v5, v5, v53347; VI-NEXT: v_or_b32_e32 v5, v5, v193348; VI-NEXT: v_max_f16_sdwa v19, v6, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13349; VI-NEXT: v_max_f16_e32 v6, v6, v63350; VI-NEXT: v_or_b32_e32 v6, v6, v193351; VI-NEXT: v_max_f16_sdwa v19, v7, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13352; VI-NEXT: v_max_f16_e32 v7, v7, v73353; VI-NEXT: v_or_b32_e32 v7, v7, v193354; VI-NEXT: v_max_f16_sdwa v19, v8, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13355; VI-NEXT: v_max_f16_e32 v8, v8, v83356; VI-NEXT: v_or_b32_e32 v8, v8, v193357; VI-NEXT: v_max_f16_sdwa v19, v9, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13358; VI-NEXT: v_max_f16_e32 v9, v9, v93359; VI-NEXT: v_or_b32_e32 v9, v9, v193360; VI-NEXT: v_max_f16_sdwa v19, v10, v10 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13361; VI-NEXT: v_max_f16_e32 v10, v10, v103362; VI-NEXT: v_or_b32_e32 v10, v10, v193363; VI-NEXT: v_max_f16_sdwa v19, v11, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13364; VI-NEXT: v_max_f16_e32 v11, v11, v113365; VI-NEXT: v_max_f16_sdwa v16, v15, v15 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13366; VI-NEXT: v_max_f16_sdwa v17, v14, v14 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13367; VI-NEXT: v_max_f16_sdwa v18, v13, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13368; VI-NEXT: v_or_b32_e32 v11, v11, v193369; VI-NEXT: v_max_f16_sdwa v19, v12, v12 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13370; VI-NEXT: v_max_f16_e32 v15, v15, v153371; VI-NEXT: v_max_f16_e32 v14, v14, v143372; VI-NEXT: v_max_f16_e32 v13, v13, v133373; VI-NEXT: v_max_f16_e32 v12, v12, v123374; VI-NEXT: v_or_b32_e32 v12, v12, v193375; VI-NEXT: v_or_b32_e32 v13, v13, v183376; VI-NEXT: v_or_b32_e32 v14, v14, v173377; VI-NEXT: v_or_b32_e32 v15, v15, v163378; VI-NEXT: s_setpc_b64 s[30:31]3379;3380; GFX9-LABEL: v_test_canonicalize_var_v32f16:3381; GFX9: ; %bb.0:3382; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3383; GFX9-NEXT: v_pk_max_f16 v0, v0, v03384; GFX9-NEXT: v_pk_max_f16 v1, v1, v13385; GFX9-NEXT: v_pk_max_f16 v2, v2, v23386; GFX9-NEXT: v_pk_max_f16 v3, v3, v33387; GFX9-NEXT: v_pk_max_f16 v4, v4, v43388; GFX9-NEXT: v_pk_max_f16 v5, v5, v53389; GFX9-NEXT: v_pk_max_f16 v6, v6, v63390; GFX9-NEXT: v_pk_max_f16 v7, v7, v73391; GFX9-NEXT: v_pk_max_f16 v8, v8, v83392; GFX9-NEXT: v_pk_max_f16 v9, v9, v93393; GFX9-NEXT: v_pk_max_f16 v10, v10, v103394; GFX9-NEXT: v_pk_max_f16 v11, v11, v113395; GFX9-NEXT: v_pk_max_f16 v12, v12, v123396; GFX9-NEXT: v_pk_max_f16 v13, v13, v133397; GFX9-NEXT: v_pk_max_f16 v14, v14, v143398; GFX9-NEXT: v_pk_max_f16 v15, v15, v153399; GFX9-NEXT: s_setpc_b64 s[30:31]3400;3401; CI-LABEL: v_test_canonicalize_var_v32f16:3402; CI: ; %bb.0:3403; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3404; CI-NEXT: buffer_load_dword v31, off, s[0:3], s323405; CI-NEXT: v_cvt_f16_f32_e32 v30, v303406; CI-NEXT: v_cvt_f16_f32_e32 v29, v293407; CI-NEXT: v_cvt_f16_f32_e32 v28, v283408; CI-NEXT: v_cvt_f16_f32_e32 v27, v273409; CI-NEXT: v_cvt_f16_f32_e32 v26, v263410; CI-NEXT: v_cvt_f16_f32_e32 v25, v253411; CI-NEXT: v_cvt_f16_f32_e32 v24, v243412; CI-NEXT: v_cvt_f16_f32_e32 v23, v233413; CI-NEXT: v_cvt_f16_f32_e32 v22, v223414; CI-NEXT: v_cvt_f16_f32_e32 v21, v213415; CI-NEXT: v_cvt_f16_f32_e32 v20, v203416; CI-NEXT: v_cvt_f16_f32_e32 v19, v193417; CI-NEXT: v_cvt_f16_f32_e32 v18, v183418; CI-NEXT: v_cvt_f16_f32_e32 v17, v173419; CI-NEXT: v_cvt_f16_f32_e32 v16, v163420; CI-NEXT: v_cvt_f16_f32_e32 v15, v153421; CI-NEXT: v_cvt_f16_f32_e32 v14, v143422; CI-NEXT: v_cvt_f16_f32_e32 v13, v133423; CI-NEXT: v_cvt_f16_f32_e32 v12, v123424; CI-NEXT: v_cvt_f16_f32_e32 v11, v113425; CI-NEXT: v_cvt_f16_f32_e32 v10, v103426; CI-NEXT: v_cvt_f16_f32_e32 v9, v93427; CI-NEXT: v_cvt_f16_f32_e32 v8, v83428; CI-NEXT: v_cvt_f16_f32_e32 v7, v73429; CI-NEXT: v_cvt_f16_f32_e32 v6, v63430; CI-NEXT: v_cvt_f16_f32_e32 v5, v53431; CI-NEXT: v_cvt_f16_f32_e32 v4, v43432; CI-NEXT: v_cvt_f16_f32_e32 v0, v03433; CI-NEXT: v_cvt_f16_f32_e32 v1, v13434; CI-NEXT: v_cvt_f16_f32_e32 v2, v23435; CI-NEXT: v_cvt_f16_f32_e32 v3, v33436; CI-NEXT: v_cvt_f32_f16_e32 v30, v303437; CI-NEXT: v_cvt_f32_f16_e32 v29, v293438; CI-NEXT: v_cvt_f32_f16_e32 v28, v283439; CI-NEXT: v_cvt_f32_f16_e32 v27, v273440; CI-NEXT: v_cvt_f32_f16_e32 v26, v263441; CI-NEXT: v_cvt_f32_f16_e32 v25, v253442; CI-NEXT: v_cvt_f32_f16_e32 v24, v243443; CI-NEXT: v_cvt_f32_f16_e32 v23, v233444; CI-NEXT: v_cvt_f32_f16_e32 v22, v223445; CI-NEXT: v_cvt_f32_f16_e32 v21, v213446; CI-NEXT: v_cvt_f32_f16_e32 v20, v203447; CI-NEXT: v_cvt_f32_f16_e32 v19, v193448; CI-NEXT: v_cvt_f32_f16_e32 v18, v183449; CI-NEXT: v_cvt_f32_f16_e32 v17, v173450; CI-NEXT: v_cvt_f32_f16_e32 v16, v163451; CI-NEXT: v_cvt_f32_f16_e32 v15, v153452; CI-NEXT: v_cvt_f32_f16_e32 v14, v143453; CI-NEXT: v_cvt_f32_f16_e32 v13, v133454; CI-NEXT: v_cvt_f32_f16_e32 v12, v123455; CI-NEXT: v_cvt_f32_f16_e32 v11, v113456; CI-NEXT: v_cvt_f32_f16_e32 v10, v103457; CI-NEXT: v_cvt_f32_f16_e32 v9, v93458; CI-NEXT: v_cvt_f32_f16_e32 v8, v83459; CI-NEXT: v_cvt_f32_f16_e32 v7, v73460; CI-NEXT: v_cvt_f32_f16_e32 v6, v63461; CI-NEXT: v_cvt_f32_f16_e32 v5, v53462; CI-NEXT: v_cvt_f32_f16_e32 v4, v43463; CI-NEXT: v_cvt_f32_f16_e32 v0, v03464; CI-NEXT: v_cvt_f32_f16_e32 v1, v13465; CI-NEXT: v_cvt_f32_f16_e32 v2, v23466; CI-NEXT: v_cvt_f32_f16_e32 v3, v33467; CI-NEXT: s_waitcnt vmcnt(0)3468; CI-NEXT: v_cvt_f16_f32_e32 v31, v313469; CI-NEXT: v_cvt_f32_f16_e32 v31, v313470; CI-NEXT: s_setpc_b64 s[30:31]3471;3472; GFX11-LABEL: v_test_canonicalize_var_v32f16:3473; GFX11: ; %bb.0:3474; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3475; GFX11-NEXT: v_pk_max_f16 v0, v0, v03476; GFX11-NEXT: v_pk_max_f16 v1, v1, v13477; GFX11-NEXT: v_pk_max_f16 v2, v2, v23478; GFX11-NEXT: v_pk_max_f16 v3, v3, v33479; GFX11-NEXT: v_pk_max_f16 v4, v4, v43480; GFX11-NEXT: v_pk_max_f16 v5, v5, v53481; GFX11-NEXT: v_pk_max_f16 v6, v6, v63482; GFX11-NEXT: v_pk_max_f16 v7, v7, v73483; GFX11-NEXT: v_pk_max_f16 v8, v8, v83484; GFX11-NEXT: v_pk_max_f16 v9, v9, v93485; GFX11-NEXT: v_pk_max_f16 v10, v10, v103486; GFX11-NEXT: v_pk_max_f16 v11, v11, v113487; GFX11-NEXT: v_pk_max_f16 v12, v12, v123488; GFX11-NEXT: v_pk_max_f16 v13, v13, v133489; GFX11-NEXT: v_pk_max_f16 v14, v14, v143490; GFX11-NEXT: v_pk_max_f16 v15, v15, v153491; GFX11-NEXT: s_setpc_b64 s[30:31]3492 %canonicalized = call <32 x half> @llvm.canonicalize.v32f16(<32 x half> %val)3493 ret <32 x half> %canonicalized3494}3495 3496define <64 x half> @v_test_canonicalize_var_v64f16(<64 x half> %val) #1 {3497; VI-LABEL: v_test_canonicalize_var_v64f16:3498; VI: ; %bb.0:3499; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3500; VI-NEXT: v_max_f16_sdwa v31, v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13501; VI-NEXT: v_max_f16_e32 v0, v0, v03502; VI-NEXT: v_or_b32_e32 v0, v0, v313503; VI-NEXT: v_max_f16_sdwa v31, v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13504; VI-NEXT: v_max_f16_e32 v1, v1, v13505; VI-NEXT: v_or_b32_e32 v1, v1, v313506; VI-NEXT: v_max_f16_sdwa v31, v2, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13507; VI-NEXT: v_max_f16_e32 v2, v2, v23508; VI-NEXT: v_or_b32_e32 v2, v2, v313509; VI-NEXT: v_max_f16_sdwa v31, v3, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13510; VI-NEXT: v_max_f16_e32 v3, v3, v33511; VI-NEXT: v_or_b32_e32 v3, v3, v313512; VI-NEXT: v_max_f16_sdwa v31, v4, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13513; VI-NEXT: v_max_f16_e32 v4, v4, v43514; VI-NEXT: v_or_b32_e32 v4, v4, v313515; VI-NEXT: v_max_f16_sdwa v31, v5, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13516; VI-NEXT: v_max_f16_e32 v5, v5, v53517; VI-NEXT: v_or_b32_e32 v5, v5, v313518; VI-NEXT: v_max_f16_sdwa v31, v6, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13519; VI-NEXT: v_max_f16_e32 v6, v6, v63520; VI-NEXT: v_or_b32_e32 v6, v6, v313521; VI-NEXT: v_max_f16_sdwa v31, v7, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13522; VI-NEXT: v_max_f16_e32 v7, v7, v73523; VI-NEXT: v_or_b32_e32 v7, v7, v313524; VI-NEXT: v_max_f16_sdwa v31, v8, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13525; VI-NEXT: v_max_f16_e32 v8, v8, v83526; VI-NEXT: v_or_b32_e32 v8, v8, v313527; VI-NEXT: v_max_f16_sdwa v31, v9, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13528; VI-NEXT: v_max_f16_e32 v9, v9, v93529; VI-NEXT: v_or_b32_e32 v9, v9, v313530; VI-NEXT: v_max_f16_sdwa v31, v10, v10 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13531; VI-NEXT: v_max_f16_e32 v10, v10, v103532; VI-NEXT: v_or_b32_e32 v10, v10, v313533; VI-NEXT: v_max_f16_sdwa v31, v11, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13534; VI-NEXT: v_max_f16_e32 v11, v11, v113535; VI-NEXT: v_or_b32_e32 v11, v11, v313536; VI-NEXT: v_max_f16_sdwa v31, v12, v12 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13537; VI-NEXT: v_max_f16_e32 v12, v12, v123538; VI-NEXT: v_or_b32_e32 v12, v12, v313539; VI-NEXT: v_max_f16_sdwa v31, v13, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13540; VI-NEXT: v_max_f16_e32 v13, v13, v133541; VI-NEXT: v_or_b32_e32 v13, v13, v313542; VI-NEXT: v_max_f16_sdwa v31, v14, v14 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13543; VI-NEXT: v_max_f16_e32 v14, v14, v143544; VI-NEXT: v_or_b32_e32 v14, v14, v313545; VI-NEXT: v_max_f16_sdwa v31, v15, v15 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13546; VI-NEXT: v_max_f16_e32 v15, v15, v153547; VI-NEXT: v_or_b32_e32 v15, v15, v313548; VI-NEXT: v_max_f16_sdwa v31, v16, v16 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13549; VI-NEXT: v_max_f16_e32 v16, v16, v163550; VI-NEXT: v_or_b32_e32 v16, v16, v313551; VI-NEXT: v_max_f16_sdwa v31, v17, v17 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13552; VI-NEXT: v_max_f16_e32 v17, v17, v173553; VI-NEXT: v_or_b32_e32 v17, v17, v313554; VI-NEXT: v_max_f16_sdwa v31, v18, v18 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13555; VI-NEXT: v_max_f16_e32 v18, v18, v183556; VI-NEXT: v_or_b32_e32 v18, v18, v313557; VI-NEXT: v_max_f16_sdwa v31, v19, v19 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13558; VI-NEXT: v_max_f16_e32 v19, v19, v193559; VI-NEXT: v_or_b32_e32 v19, v19, v313560; VI-NEXT: v_max_f16_sdwa v31, v20, v20 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13561; VI-NEXT: v_max_f16_e32 v20, v20, v203562; VI-NEXT: v_or_b32_e32 v20, v20, v313563; VI-NEXT: v_max_f16_sdwa v31, v21, v21 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13564; VI-NEXT: v_max_f16_e32 v21, v21, v213565; VI-NEXT: v_or_b32_e32 v21, v21, v313566; VI-NEXT: v_max_f16_sdwa v31, v22, v22 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13567; VI-NEXT: v_max_f16_e32 v22, v22, v223568; VI-NEXT: v_or_b32_e32 v22, v22, v313569; VI-NEXT: v_max_f16_sdwa v31, v23, v23 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13570; VI-NEXT: v_max_f16_e32 v23, v23, v233571; VI-NEXT: v_or_b32_e32 v23, v23, v313572; VI-NEXT: v_max_f16_sdwa v31, v24, v24 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13573; VI-NEXT: v_max_f16_e32 v24, v24, v243574; VI-NEXT: v_or_b32_e32 v24, v24, v313575; VI-NEXT: v_max_f16_sdwa v31, v25, v25 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13576; VI-NEXT: v_max_f16_e32 v25, v25, v253577; VI-NEXT: v_or_b32_e32 v25, v25, v313578; VI-NEXT: v_max_f16_sdwa v31, v26, v26 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13579; VI-NEXT: v_max_f16_e32 v26, v26, v263580; VI-NEXT: v_or_b32_e32 v26, v26, v313581; VI-NEXT: v_max_f16_sdwa v31, v27, v27 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13582; VI-NEXT: v_max_f16_e32 v27, v27, v273583; VI-NEXT: v_or_b32_e32 v27, v27, v313584; VI-NEXT: v_max_f16_sdwa v31, v28, v28 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13585; VI-NEXT: v_max_f16_e32 v28, v28, v283586; VI-NEXT: v_or_b32_e32 v28, v28, v313587; VI-NEXT: v_max_f16_sdwa v31, v29, v29 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13588; VI-NEXT: v_max_f16_e32 v29, v29, v293589; VI-NEXT: v_or_b32_e32 v29, v29, v313590; VI-NEXT: v_max_f16_sdwa v31, v30, v30 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13591; VI-NEXT: v_max_f16_e32 v30, v30, v303592; VI-NEXT: v_or_b32_e32 v30, v30, v313593; VI-NEXT: buffer_load_dword v31, off, s[0:3], s323594; VI-NEXT: s_waitcnt vmcnt(0)3595; VI-NEXT: v_max_f16_sdwa v32, v31, v31 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13596; VI-NEXT: v_max_f16_e32 v31, v31, v313597; VI-NEXT: v_or_b32_e32 v31, v31, v323598; VI-NEXT: s_setpc_b64 s[30:31]3599;3600; GFX9-LABEL: v_test_canonicalize_var_v64f16:3601; GFX9: ; %bb.0:3602; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3603; GFX9-NEXT: buffer_load_dword v31, off, s[0:3], s323604; GFX9-NEXT: v_pk_max_f16 v0, v0, v03605; GFX9-NEXT: v_pk_max_f16 v1, v1, v13606; GFX9-NEXT: v_pk_max_f16 v2, v2, v23607; GFX9-NEXT: v_pk_max_f16 v3, v3, v33608; GFX9-NEXT: v_pk_max_f16 v4, v4, v43609; GFX9-NEXT: v_pk_max_f16 v5, v5, v53610; GFX9-NEXT: v_pk_max_f16 v6, v6, v63611; GFX9-NEXT: v_pk_max_f16 v7, v7, v73612; GFX9-NEXT: v_pk_max_f16 v8, v8, v83613; GFX9-NEXT: v_pk_max_f16 v9, v9, v93614; GFX9-NEXT: v_pk_max_f16 v10, v10, v103615; GFX9-NEXT: v_pk_max_f16 v11, v11, v113616; GFX9-NEXT: v_pk_max_f16 v12, v12, v123617; GFX9-NEXT: v_pk_max_f16 v13, v13, v133618; GFX9-NEXT: v_pk_max_f16 v14, v14, v143619; GFX9-NEXT: v_pk_max_f16 v15, v15, v153620; GFX9-NEXT: v_pk_max_f16 v16, v16, v163621; GFX9-NEXT: v_pk_max_f16 v17, v17, v173622; GFX9-NEXT: v_pk_max_f16 v18, v18, v183623; GFX9-NEXT: v_pk_max_f16 v19, v19, v193624; GFX9-NEXT: v_pk_max_f16 v20, v20, v203625; GFX9-NEXT: v_pk_max_f16 v21, v21, v213626; GFX9-NEXT: v_pk_max_f16 v22, v22, v223627; GFX9-NEXT: v_pk_max_f16 v23, v23, v233628; GFX9-NEXT: v_pk_max_f16 v24, v24, v243629; GFX9-NEXT: v_pk_max_f16 v25, v25, v253630; GFX9-NEXT: v_pk_max_f16 v26, v26, v263631; GFX9-NEXT: v_pk_max_f16 v27, v27, v273632; GFX9-NEXT: v_pk_max_f16 v28, v28, v283633; GFX9-NEXT: v_pk_max_f16 v29, v29, v293634; GFX9-NEXT: v_pk_max_f16 v30, v30, v303635; GFX9-NEXT: s_waitcnt vmcnt(0)3636; GFX9-NEXT: v_pk_max_f16 v31, v31, v313637; GFX9-NEXT: s_setpc_b64 s[30:31]3638;3639; CI-LABEL: v_test_canonicalize_var_v64f16:3640; CI: ; %bb.0:3641; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3642; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:1323643; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:1283644; CI-NEXT: v_cvt_f16_f32_e32 v2, v23645; CI-NEXT: v_cvt_f16_f32_e32 v1, v13646; CI-NEXT: v_cvt_f16_f32_e32 v3, v33647; CI-NEXT: v_cvt_f32_f16_e32 v2, v23648; CI-NEXT: v_cvt_f32_f16_e32 v1, v13649; CI-NEXT: v_cvt_f32_f16_e32 v3, v33650; CI-NEXT: v_cvt_f16_f32_e32 v2, v23651; CI-NEXT: v_cvt_f16_f32_e32 v1, v13652; CI-NEXT: v_cvt_f16_f32_e32 v3, v33653; CI-NEXT: v_lshlrev_b32_e32 v2, 16, v23654; CI-NEXT: v_or_b32_e32 v1, v1, v23655; CI-NEXT: v_cvt_f16_f32_e32 v2, v43656; CI-NEXT: v_cvt_f16_f32_e32 v4, v53657; CI-NEXT: v_cvt_f16_f32_e32 v5, v73658; CI-NEXT: v_cvt_f16_f32_e32 v7, v113659; CI-NEXT: v_cvt_f32_f16_e32 v2, v23660; CI-NEXT: v_cvt_f32_f16_e32 v4, v43661; CI-NEXT: v_cvt_f32_f16_e32 v5, v53662; CI-NEXT: v_cvt_f32_f16_e32 v7, v73663; CI-NEXT: v_cvt_f16_f32_e32 v2, v23664; CI-NEXT: v_cvt_f16_f32_e32 v4, v43665; CI-NEXT: v_cvt_f16_f32_e32 v5, v53666; CI-NEXT: v_cvt_f16_f32_e32 v7, v73667; CI-NEXT: v_lshlrev_b32_e32 v2, 16, v23668; CI-NEXT: v_or_b32_e32 v2, v3, v23669; CI-NEXT: v_cvt_f16_f32_e32 v3, v63670; CI-NEXT: v_cvt_f16_f32_e32 v6, v93671; CI-NEXT: v_cvt_f16_f32_e32 v9, v163672; CI-NEXT: v_cvt_f16_f32_e32 v16, v213673; CI-NEXT: v_cvt_f32_f16_e32 v3, v33674; CI-NEXT: v_cvt_f32_f16_e32 v6, v63675; CI-NEXT: v_cvt_f32_f16_e32 v9, v93676; CI-NEXT: v_cvt_f32_f16_e32 v16, v163677; CI-NEXT: v_cvt_f16_f32_e32 v3, v33678; CI-NEXT: v_cvt_f16_f32_e32 v6, v63679; CI-NEXT: v_cvt_f16_f32_e32 v9, v93680; CI-NEXT: v_cvt_f16_f32_e32 v16, v163681; CI-NEXT: v_lshlrev_b32_e32 v3, 16, v33682; CI-NEXT: v_or_b32_e32 v3, v4, v33683; CI-NEXT: v_cvt_f16_f32_e32 v4, v83684; CI-NEXT: v_cvt_f16_f32_e32 v8, v133685; CI-NEXT: v_cvt_f16_f32_e32 v13, v203686; CI-NEXT: v_cvt_f16_f32_e32 v20, v253687; CI-NEXT: v_cvt_f32_f16_e32 v4, v43688; CI-NEXT: v_cvt_f32_f16_e32 v8, v83689; CI-NEXT: v_cvt_f32_f16_e32 v13, v133690; CI-NEXT: v_cvt_f16_f32_e32 v21, v283691; CI-NEXT: v_cvt_f16_f32_e32 v4, v43692; CI-NEXT: v_cvt_f16_f32_e32 v8, v83693; CI-NEXT: v_cvt_f16_f32_e32 v13, v133694; CI-NEXT: v_cvt_f32_f16_e32 v20, v203695; CI-NEXT: v_lshlrev_b32_e32 v4, 16, v43696; CI-NEXT: v_or_b32_e32 v4, v5, v43697; CI-NEXT: v_cvt_f16_f32_e32 v5, v103698; CI-NEXT: v_cvt_f16_f32_e32 v10, v153699; CI-NEXT: v_cvt_f32_f16_e32 v21, v213700; CI-NEXT: v_cvt_f16_f32_e32 v20, v203701; CI-NEXT: v_cvt_f32_f16_e32 v5, v53702; CI-NEXT: v_cvt_f32_f16_e32 v10, v103703; CI-NEXT: v_cvt_f16_f32_e32 v21, v213704; CI-NEXT: buffer_load_dword v11, off, s[0:3], s32 offset:203705; CI-NEXT: v_cvt_f16_f32_e32 v5, v53706; CI-NEXT: v_cvt_f16_f32_e32 v10, v103707; CI-NEXT: v_lshlrev_b32_e32 v5, 16, v53708; CI-NEXT: v_or_b32_e32 v5, v6, v53709; CI-NEXT: v_cvt_f16_f32_e32 v6, v123710; CI-NEXT: buffer_load_dword v12, off, s[0:3], s32 offset:83711; CI-NEXT: v_cvt_f32_f16_e32 v6, v63712; CI-NEXT: s_waitcnt vmcnt(3)3713; CI-NEXT: v_cvt_f16_f32_e32 v31, v313714; CI-NEXT: s_waitcnt vmcnt(2)3715; CI-NEXT: v_cvt_f16_f32_e32 v32, v323716; CI-NEXT: v_cvt_f16_f32_e32 v6, v63717; CI-NEXT: v_cvt_f32_f16_e32 v31, v313718; CI-NEXT: v_cvt_f32_f16_e32 v32, v323719; CI-NEXT: v_lshlrev_b32_e32 v6, 16, v63720; CI-NEXT: v_or_b32_e32 v6, v7, v63721; CI-NEXT: v_cvt_f16_f32_e32 v31, v313722; CI-NEXT: v_cvt_f16_f32_e32 v32, v323723; CI-NEXT: v_cvt_f16_f32_e32 v7, v143724; CI-NEXT: v_cvt_f16_f32_e32 v14, v193725; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313726; CI-NEXT: v_or_b32_e32 v31, v32, v313727; CI-NEXT: v_add_i32_e32 v32, vcc, 0x7c, v03728; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3729; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:1243730; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:1203731; CI-NEXT: v_cvt_f32_f16_e32 v7, v73732; CI-NEXT: v_cvt_f32_f16_e32 v14, v143733; CI-NEXT: v_cvt_f16_f32_e32 v19, v263734; CI-NEXT: v_cvt_f16_f32_e32 v7, v73735; CI-NEXT: v_cvt_f16_f32_e32 v14, v143736; CI-NEXT: v_cvt_f32_f16_e32 v19, v193737; CI-NEXT: v_lshlrev_b32_e32 v7, 16, v73738; CI-NEXT: v_or_b32_e32 v7, v8, v73739; CI-NEXT: v_lshlrev_b32_e32 v8, 16, v93740; CI-NEXT: v_cvt_f16_f32_e32 v9, v183741; CI-NEXT: v_or_b32_e32 v8, v10, v83742; CI-NEXT: v_cvt_f16_f32_e32 v10, v173743; CI-NEXT: v_cvt_f16_f32_e32 v17, v243744; CI-NEXT: v_cvt_f32_f16_e32 v9, v93745; CI-NEXT: v_cvt_f16_f32_e32 v18, v233746; CI-NEXT: v_cvt_f32_f16_e32 v10, v103747; CI-NEXT: v_cvt_f32_f16_e32 v17, v173748; CI-NEXT: v_cvt_f16_f32_e32 v9, v93749; CI-NEXT: v_cvt_f32_f16_e32 v18, v183750; CI-NEXT: v_cvt_f16_f32_e32 v10, v103751; CI-NEXT: v_cvt_f16_f32_e32 v17, v173752; CI-NEXT: v_lshlrev_b32_e32 v9, 16, v93753; CI-NEXT: v_cvt_f16_f32_e32 v18, v183754; CI-NEXT: v_or_b32_e32 v9, v10, v93755; CI-NEXT: v_lshlrev_b32_e32 v10, 16, v133756; CI-NEXT: v_cvt_f16_f32_e32 v13, v223757; CI-NEXT: v_or_b32_e32 v10, v14, v103758; CI-NEXT: buffer_load_dword v14, off, s[0:3], s32 offset:43759; CI-NEXT: buffer_load_dword v15, off, s[0:3], s323760; CI-NEXT: v_lshlrev_b32_e32 v17, 16, v173761; CI-NEXT: v_cvt_f32_f16_e32 v13, v133762; CI-NEXT: v_or_b32_e32 v17, v18, v173763; CI-NEXT: buffer_load_dword v18, off, s[0:3], s32 offset:163764; CI-NEXT: v_cvt_f16_f32_e32 v22, v273765; CI-NEXT: v_cvt_f16_f32_e32 v13, v133766; CI-NEXT: v_cvt_f16_f32_e32 v19, v193767; CI-NEXT: v_cvt_f32_f16_e32 v22, v223768; CI-NEXT: v_lshlrev_b32_e32 v13, 16, v133769; CI-NEXT: v_or_b32_e32 v13, v16, v133770; CI-NEXT: buffer_load_dword v16, off, s[0:3], s32 offset:123771; CI-NEXT: v_cvt_f16_f32_e32 v22, v223772; CI-NEXT: v_lshlrev_b32_e32 v19, 16, v193773; CI-NEXT: v_or_b32_e32 v19, v20, v193774; CI-NEXT: v_lshlrev_b32_e32 v20, 16, v213775; CI-NEXT: v_cvt_f16_f32_e32 v21, v303776; CI-NEXT: v_or_b32_e32 v20, v22, v203777; CI-NEXT: v_cvt_f16_f32_e32 v22, v293778; CI-NEXT: s_waitcnt vmcnt(8)3779; CI-NEXT: v_cvt_f16_f32_e32 v11, v113780; CI-NEXT: v_cvt_f32_f16_e32 v21, v213781; CI-NEXT: v_cvt_f32_f16_e32 v22, v223782; CI-NEXT: v_cvt_f32_f16_e32 v11, v113783; CI-NEXT: s_waitcnt vmcnt(7)3784; CI-NEXT: v_cvt_f16_f32_e32 v12, v123785; CI-NEXT: v_cvt_f16_f32_e32 v21, v213786; CI-NEXT: v_cvt_f16_f32_e32 v22, v223787; CI-NEXT: v_cvt_f16_f32_e32 v11, v113788; CI-NEXT: v_cvt_f32_f16_e32 v12, v123789; CI-NEXT: v_lshlrev_b32_e32 v21, 16, v213790; CI-NEXT: v_or_b32_e32 v21, v22, v213791; CI-NEXT: v_lshlrev_b32_e32 v11, 16, v113792; CI-NEXT: v_cvt_f16_f32_e32 v12, v123793; CI-NEXT: s_waitcnt vmcnt(5)3794; CI-NEXT: v_cvt_f16_f32_e32 v31, v313795; CI-NEXT: s_waitcnt vmcnt(4)3796; CI-NEXT: v_cvt_f16_f32_e32 v32, v323797; CI-NEXT: v_cvt_f32_f16_e32 v31, v313798; CI-NEXT: v_cvt_f32_f16_e32 v32, v323799; CI-NEXT: v_cvt_f16_f32_e32 v31, v313800; CI-NEXT: v_cvt_f16_f32_e32 v32, v323801; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313802; CI-NEXT: v_or_b32_e32 v31, v32, v313803; CI-NEXT: v_add_i32_e32 v32, vcc, 0x78, v03804; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3805; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:1163806; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:1123807; CI-NEXT: s_waitcnt vmcnt(6)3808; CI-NEXT: v_cvt_f16_f32_e32 v14, v143809; CI-NEXT: s_waitcnt vmcnt(5)3810; CI-NEXT: v_cvt_f16_f32_e32 v15, v153811; CI-NEXT: v_cvt_f32_f16_e32 v14, v143812; CI-NEXT: v_cvt_f32_f16_e32 v15, v153813; CI-NEXT: v_cvt_f16_f32_e32 v14, v143814; CI-NEXT: v_cvt_f16_f32_e32 v15, v153815; CI-NEXT: v_lshlrev_b32_e32 v14, 16, v143816; CI-NEXT: v_or_b32_e32 v14, v15, v143817; CI-NEXT: s_waitcnt vmcnt(3)3818; CI-NEXT: v_cvt_f16_f32_e32 v15, v163819; CI-NEXT: v_cvt_f16_f32_e32 v16, v183820; CI-NEXT: v_cvt_f32_f16_e32 v15, v153821; CI-NEXT: v_cvt_f32_f16_e32 v16, v163822; CI-NEXT: v_cvt_f16_f32_e32 v15, v153823; CI-NEXT: v_cvt_f16_f32_e32 v16, v163824; CI-NEXT: v_lshlrev_b32_e32 v15, 16, v153825; CI-NEXT: v_or_b32_e32 v12, v12, v153826; CI-NEXT: v_add_i32_e32 v15, vcc, 0x44, v03827; CI-NEXT: v_or_b32_e32 v11, v16, v113828; CI-NEXT: s_waitcnt vmcnt(1)3829; CI-NEXT: v_cvt_f16_f32_e32 v31, v313830; CI-NEXT: s_waitcnt vmcnt(0)3831; CI-NEXT: v_cvt_f16_f32_e32 v32, v323832; CI-NEXT: v_cvt_f32_f16_e32 v31, v313833; CI-NEXT: v_cvt_f32_f16_e32 v32, v323834; CI-NEXT: v_cvt_f16_f32_e32 v31, v313835; CI-NEXT: v_cvt_f16_f32_e32 v32, v323836; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313837; CI-NEXT: v_or_b32_e32 v31, v32, v313838; CI-NEXT: v_add_i32_e32 v32, vcc, 0x74, v03839; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3840; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:1083841; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:1043842; CI-NEXT: s_waitcnt vmcnt(1)3843; CI-NEXT: v_cvt_f16_f32_e32 v31, v313844; CI-NEXT: s_waitcnt vmcnt(0)3845; CI-NEXT: v_cvt_f16_f32_e32 v32, v323846; CI-NEXT: v_cvt_f32_f16_e32 v31, v313847; CI-NEXT: v_cvt_f32_f16_e32 v32, v323848; CI-NEXT: v_cvt_f16_f32_e32 v31, v313849; CI-NEXT: v_cvt_f16_f32_e32 v32, v323850; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313851; CI-NEXT: v_or_b32_e32 v31, v32, v313852; CI-NEXT: v_add_i32_e32 v32, vcc, 0x70, v03853; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3854; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:1003855; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:963856; CI-NEXT: s_waitcnt vmcnt(1)3857; CI-NEXT: v_cvt_f16_f32_e32 v31, v313858; CI-NEXT: s_waitcnt vmcnt(0)3859; CI-NEXT: v_cvt_f16_f32_e32 v32, v323860; CI-NEXT: v_cvt_f32_f16_e32 v31, v313861; CI-NEXT: v_cvt_f32_f16_e32 v32, v323862; CI-NEXT: v_cvt_f16_f32_e32 v31, v313863; CI-NEXT: v_cvt_f16_f32_e32 v32, v323864; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313865; CI-NEXT: v_or_b32_e32 v31, v32, v313866; CI-NEXT: v_add_i32_e32 v32, vcc, 0x6c, v03867; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3868; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:923869; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:883870; CI-NEXT: s_waitcnt vmcnt(1)3871; CI-NEXT: v_cvt_f16_f32_e32 v31, v313872; CI-NEXT: s_waitcnt vmcnt(0)3873; CI-NEXT: v_cvt_f16_f32_e32 v32, v323874; CI-NEXT: v_cvt_f32_f16_e32 v31, v313875; CI-NEXT: v_cvt_f32_f16_e32 v32, v323876; CI-NEXT: v_cvt_f16_f32_e32 v31, v313877; CI-NEXT: v_cvt_f16_f32_e32 v32, v323878; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313879; CI-NEXT: v_or_b32_e32 v31, v32, v313880; CI-NEXT: v_add_i32_e32 v32, vcc, 0x68, v03881; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3882; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:843883; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:803884; CI-NEXT: s_waitcnt vmcnt(1)3885; CI-NEXT: v_cvt_f16_f32_e32 v31, v313886; CI-NEXT: s_waitcnt vmcnt(0)3887; CI-NEXT: v_cvt_f16_f32_e32 v32, v323888; CI-NEXT: v_cvt_f32_f16_e32 v31, v313889; CI-NEXT: v_cvt_f32_f16_e32 v32, v323890; CI-NEXT: v_cvt_f16_f32_e32 v31, v313891; CI-NEXT: v_cvt_f16_f32_e32 v32, v323892; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313893; CI-NEXT: v_or_b32_e32 v31, v32, v313894; CI-NEXT: v_add_i32_e32 v32, vcc, 0x64, v03895; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3896; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:763897; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:723898; CI-NEXT: s_waitcnt vmcnt(1)3899; CI-NEXT: v_cvt_f16_f32_e32 v31, v313900; CI-NEXT: s_waitcnt vmcnt(0)3901; CI-NEXT: v_cvt_f16_f32_e32 v32, v323902; CI-NEXT: v_cvt_f32_f16_e32 v31, v313903; CI-NEXT: v_cvt_f32_f16_e32 v32, v323904; CI-NEXT: v_cvt_f16_f32_e32 v31, v313905; CI-NEXT: v_cvt_f16_f32_e32 v32, v323906; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313907; CI-NEXT: v_or_b32_e32 v31, v32, v313908; CI-NEXT: v_add_i32_e32 v32, vcc, 0x60, v03909; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3910; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:683911; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:643912; CI-NEXT: s_waitcnt vmcnt(1)3913; CI-NEXT: v_cvt_f16_f32_e32 v31, v313914; CI-NEXT: s_waitcnt vmcnt(0)3915; CI-NEXT: v_cvt_f16_f32_e32 v32, v323916; CI-NEXT: v_cvt_f32_f16_e32 v31, v313917; CI-NEXT: v_cvt_f32_f16_e32 v32, v323918; CI-NEXT: v_cvt_f16_f32_e32 v31, v313919; CI-NEXT: v_cvt_f16_f32_e32 v32, v323920; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313921; CI-NEXT: v_or_b32_e32 v31, v32, v313922; CI-NEXT: v_add_i32_e32 v32, vcc, 0x5c, v03923; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3924; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:603925; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:563926; CI-NEXT: s_waitcnt vmcnt(1)3927; CI-NEXT: v_cvt_f16_f32_e32 v31, v313928; CI-NEXT: s_waitcnt vmcnt(0)3929; CI-NEXT: v_cvt_f16_f32_e32 v32, v323930; CI-NEXT: v_cvt_f32_f16_e32 v31, v313931; CI-NEXT: v_cvt_f32_f16_e32 v32, v323932; CI-NEXT: v_cvt_f16_f32_e32 v31, v313933; CI-NEXT: v_cvt_f16_f32_e32 v32, v323934; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313935; CI-NEXT: v_or_b32_e32 v31, v32, v313936; CI-NEXT: v_add_i32_e32 v32, vcc, 0x58, v03937; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3938; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:523939; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:483940; CI-NEXT: s_waitcnt vmcnt(1)3941; CI-NEXT: v_cvt_f16_f32_e32 v31, v313942; CI-NEXT: s_waitcnt vmcnt(0)3943; CI-NEXT: v_cvt_f16_f32_e32 v32, v323944; CI-NEXT: v_cvt_f32_f16_e32 v31, v313945; CI-NEXT: v_cvt_f32_f16_e32 v32, v323946; CI-NEXT: v_cvt_f16_f32_e32 v31, v313947; CI-NEXT: v_cvt_f16_f32_e32 v32, v323948; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313949; CI-NEXT: v_or_b32_e32 v31, v32, v313950; CI-NEXT: v_add_i32_e32 v32, vcc, 0x54, v03951; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3952; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:443953; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:403954; CI-NEXT: s_waitcnt vmcnt(1)3955; CI-NEXT: v_cvt_f16_f32_e32 v31, v313956; CI-NEXT: s_waitcnt vmcnt(0)3957; CI-NEXT: v_cvt_f16_f32_e32 v32, v323958; CI-NEXT: v_cvt_f32_f16_e32 v31, v313959; CI-NEXT: v_cvt_f32_f16_e32 v32, v323960; CI-NEXT: v_cvt_f16_f32_e32 v31, v313961; CI-NEXT: v_cvt_f16_f32_e32 v32, v323962; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313963; CI-NEXT: v_or_b32_e32 v31, v32, v313964; CI-NEXT: v_add_i32_e32 v32, vcc, 0x50, v03965; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3966; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:363967; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:323968; CI-NEXT: s_waitcnt vmcnt(1)3969; CI-NEXT: v_cvt_f16_f32_e32 v31, v313970; CI-NEXT: s_waitcnt vmcnt(0)3971; CI-NEXT: v_cvt_f16_f32_e32 v32, v323972; CI-NEXT: v_cvt_f32_f16_e32 v31, v313973; CI-NEXT: v_cvt_f32_f16_e32 v32, v323974; CI-NEXT: v_cvt_f16_f32_e32 v31, v313975; CI-NEXT: v_cvt_f16_f32_e32 v32, v323976; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313977; CI-NEXT: v_or_b32_e32 v31, v32, v313978; CI-NEXT: v_add_i32_e32 v32, vcc, 0x4c, v03979; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3980; CI-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:283981; CI-NEXT: buffer_load_dword v32, off, s[0:3], s32 offset:243982; CI-NEXT: s_waitcnt vmcnt(1)3983; CI-NEXT: v_cvt_f16_f32_e32 v31, v313984; CI-NEXT: s_waitcnt vmcnt(0)3985; CI-NEXT: v_cvt_f16_f32_e32 v32, v323986; CI-NEXT: v_cvt_f32_f16_e32 v31, v313987; CI-NEXT: v_cvt_f32_f16_e32 v32, v323988; CI-NEXT: v_cvt_f16_f32_e32 v31, v313989; CI-NEXT: v_cvt_f16_f32_e32 v32, v323990; CI-NEXT: v_lshlrev_b32_e32 v31, 16, v313991; CI-NEXT: v_or_b32_e32 v31, v32, v313992; CI-NEXT: v_add_i32_e32 v32, vcc, 0x48, v03993; CI-NEXT: buffer_store_dword v31, v32, s[0:3], 0 offen3994; CI-NEXT: buffer_store_dword v11, v15, s[0:3], 0 offen3995; CI-NEXT: v_add_i32_e32 v11, vcc, 64, v03996; CI-NEXT: buffer_store_dword v12, v11, s[0:3], 0 offen3997; CI-NEXT: v_add_i32_e32 v11, vcc, 60, v03998; CI-NEXT: buffer_store_dword v14, v11, s[0:3], 0 offen3999; CI-NEXT: v_add_i32_e32 v11, vcc, 56, v04000; CI-NEXT: buffer_store_dword v21, v11, s[0:3], 0 offen4001; CI-NEXT: v_add_i32_e32 v11, vcc, 52, v04002; CI-NEXT: buffer_store_dword v20, v11, s[0:3], 0 offen4003; CI-NEXT: v_add_i32_e32 v11, vcc, 48, v04004; CI-NEXT: buffer_store_dword v19, v11, s[0:3], 0 offen4005; CI-NEXT: v_add_i32_e32 v11, vcc, 44, v04006; CI-NEXT: buffer_store_dword v17, v11, s[0:3], 0 offen4007; CI-NEXT: v_add_i32_e32 v11, vcc, 40, v04008; CI-NEXT: buffer_store_dword v13, v11, s[0:3], 0 offen4009; CI-NEXT: v_add_i32_e32 v11, vcc, 36, v04010; CI-NEXT: buffer_store_dword v10, v11, s[0:3], 0 offen4011; CI-NEXT: v_add_i32_e32 v10, vcc, 32, v04012; CI-NEXT: buffer_store_dword v9, v10, s[0:3], 0 offen4013; CI-NEXT: v_add_i32_e32 v9, vcc, 28, v04014; CI-NEXT: buffer_store_dword v8, v9, s[0:3], 0 offen4015; CI-NEXT: v_add_i32_e32 v8, vcc, 24, v04016; CI-NEXT: buffer_store_dword v7, v8, s[0:3], 0 offen4017; CI-NEXT: v_add_i32_e32 v7, vcc, 20, v04018; CI-NEXT: buffer_store_dword v6, v7, s[0:3], 0 offen4019; CI-NEXT: v_add_i32_e32 v6, vcc, 16, v04020; CI-NEXT: buffer_store_dword v5, v6, s[0:3], 0 offen4021; CI-NEXT: v_add_i32_e32 v5, vcc, 12, v04022; CI-NEXT: buffer_store_dword v4, v5, s[0:3], 0 offen4023; CI-NEXT: v_add_i32_e32 v4, vcc, 8, v04024; CI-NEXT: buffer_store_dword v3, v4, s[0:3], 0 offen4025; CI-NEXT: v_add_i32_e32 v3, vcc, 4, v04026; CI-NEXT: buffer_store_dword v2, v3, s[0:3], 0 offen4027; CI-NEXT: buffer_store_dword v1, v0, s[0:3], 0 offen4028; CI-NEXT: s_waitcnt vmcnt(0)4029; CI-NEXT: s_setpc_b64 s[30:31]4030;4031; GFX11-LABEL: v_test_canonicalize_var_v64f16:4032; GFX11: ; %bb.0:4033; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4034; GFX11-NEXT: scratch_load_b32 v31, off, s324035; GFX11-NEXT: v_pk_max_f16 v0, v0, v04036; GFX11-NEXT: v_pk_max_f16 v1, v1, v14037; GFX11-NEXT: v_pk_max_f16 v2, v2, v24038; GFX11-NEXT: v_pk_max_f16 v3, v3, v34039; GFX11-NEXT: v_pk_max_f16 v4, v4, v44040; GFX11-NEXT: v_pk_max_f16 v5, v5, v54041; GFX11-NEXT: v_pk_max_f16 v6, v6, v64042; GFX11-NEXT: v_pk_max_f16 v7, v7, v74043; GFX11-NEXT: v_pk_max_f16 v8, v8, v84044; GFX11-NEXT: v_pk_max_f16 v9, v9, v94045; GFX11-NEXT: v_pk_max_f16 v10, v10, v104046; GFX11-NEXT: v_pk_max_f16 v11, v11, v114047; GFX11-NEXT: v_pk_max_f16 v12, v12, v124048; GFX11-NEXT: v_pk_max_f16 v13, v13, v134049; GFX11-NEXT: v_pk_max_f16 v14, v14, v144050; GFX11-NEXT: v_pk_max_f16 v15, v15, v154051; GFX11-NEXT: v_pk_max_f16 v16, v16, v164052; GFX11-NEXT: v_pk_max_f16 v17, v17, v174053; GFX11-NEXT: v_pk_max_f16 v18, v18, v184054; GFX11-NEXT: v_pk_max_f16 v19, v19, v194055; GFX11-NEXT: v_pk_max_f16 v20, v20, v204056; GFX11-NEXT: v_pk_max_f16 v21, v21, v214057; GFX11-NEXT: v_pk_max_f16 v22, v22, v224058; GFX11-NEXT: v_pk_max_f16 v23, v23, v234059; GFX11-NEXT: v_pk_max_f16 v24, v24, v244060; GFX11-NEXT: v_pk_max_f16 v25, v25, v254061; GFX11-NEXT: v_pk_max_f16 v26, v26, v264062; GFX11-NEXT: v_pk_max_f16 v27, v27, v274063; GFX11-NEXT: v_pk_max_f16 v28, v28, v284064; GFX11-NEXT: v_pk_max_f16 v29, v29, v294065; GFX11-NEXT: v_pk_max_f16 v30, v30, v304066; GFX11-NEXT: s_waitcnt vmcnt(0)4067; GFX11-NEXT: v_pk_max_f16 v31, v31, v314068; GFX11-NEXT: s_setpc_b64 s[30:31]4069 %canonicalized = call <64 x half> @llvm.canonicalize.v64f16(<64 x half> %val)4070 ret <64 x half> %canonicalized4071}4072 4073attributes #0 = { nounwind readnone }4074attributes #1 = { nounwind "denormal-fp-math-f32"="preserve-sign,preserve-sign" }4075attributes #2 = { nounwind "denormal-fp-math"="preserve-sign,preserve-sign" }4076attributes #3 = { nounwind "denormal-fp-math-f32"="preserve-sign,preserve-sign" }4077