brintos

brintos / llvm-project-archived public Read only

0
0
Text · 68.3 KiB · b236458 Raw
1395 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx1250  < %s | FileCheck -enable-var-scope -check-prefixes=GFX1250 %s3 4declare bfloat @llvm.fabs.bf16(bfloat) #05declare bfloat @llvm.canonicalize.bf16(bfloat) #06declare <2 x bfloat> @llvm.fabs.v2bf16(<2 x bfloat>) #07declare <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat>) #08declare <3 x bfloat> @llvm.canonicalize.v3bf16(<3 x bfloat>) #09declare <4 x bfloat> @llvm.canonicalize.v4bf16(<4 x bfloat>) #010declare <6 x bfloat> @llvm.canonicalize.v6bf16(<6 x bfloat>) #011declare <8 x bfloat> @llvm.canonicalize.v8bf16(<8 x bfloat>) #012declare <12 x bfloat> @llvm.canonicalize.v12bf16(<12 x bfloat>) #013declare <16 x bfloat> @llvm.canonicalize.v16bf16(<16 x bfloat>) #014declare <32 x bfloat> @llvm.canonicalize.v32bf16(<32 x bfloat>) #015declare <64 x bfloat> @llvm.canonicalize.v64bf16(<64 x bfloat>) #016declare i32 @llvm.amdgcn.workitem.id.x() #017 18define amdgpu_kernel void @test_fold_canonicalize_undef_value_bf16(ptr addrspace(1) %out) #1 {19; GFX1250-LABEL: test_fold_canonicalize_undef_value_bf16:20; GFX1250:       ; %bb.0:21; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 122; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x2423; GFX1250-NEXT:    v_mov_b32_e32 v0, 024; GFX1250-NEXT:    s_wait_kmcnt 0x025; GFX1250-NEXT:    global_store_b16 v0, v0, s[0:1]26; GFX1250-NEXT:    s_endpgm27  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat undef)28  store bfloat %canonicalized, ptr addrspace(1) %out29  ret void30}31 32define amdgpu_kernel void @v_test_canonicalize_var_bf16(ptr addrspace(1) %out) #1 {33; GFX1250-LABEL: v_test_canonicalize_var_bf16:34; GFX1250:       ; %bb.0:35; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 136; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x2437; GFX1250-NEXT:    v_mov_b32_e32 v0, 038; GFX1250-NEXT:    s_wait_kmcnt 0x039; GFX1250-NEXT:    global_load_u16 v0, v0, s[0:1]40; GFX1250-NEXT:    s_wait_loadcnt 0x041; GFX1250-NEXT:    v_lshlrev_b32_e32 v0, 16, v042; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)43; GFX1250-NEXT:    v_max_num_f32_e32 v0, v0, v044; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, s045; GFX1250-NEXT:    global_store_b16 v[0:1], v0, off46; GFX1250-NEXT:    s_endpgm47  %val = load bfloat, ptr addrspace(1) %out48  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat %val)49  store bfloat %canonicalized, ptr addrspace(1) poison50  ret void51}52 53define amdgpu_kernel void @s_test_canonicalize_var_bf16(ptr addrspace(1) %out, i16 zeroext %val.arg) #1 {54; GFX1250-LABEL: s_test_canonicalize_var_bf16:55; GFX1250:       ; %bb.0:56; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 157; GFX1250-NEXT:    s_load_b96 s[0:2], s[4:5], 0x2458; GFX1250-NEXT:    v_mov_b32_e32 v1, 059; GFX1250-NEXT:    s_wait_kmcnt 0x060; GFX1250-NEXT:    s_lshl_b32 s2, s2, 1661; GFX1250-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)62; GFX1250-NEXT:    v_max_num_f32_e64 v0, s2, s263; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, s064; GFX1250-NEXT:    global_store_b16 v1, v0, s[0:1]65; GFX1250-NEXT:    s_endpgm66  %val = bitcast i16 %val.arg to bfloat67  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat %val)68  store bfloat %canonicalized, ptr addrspace(1) %out69  ret void70}71 72define <2 x bfloat> @v_test_canonicalize_build_vector_v2bf16(bfloat %lo, bfloat %hi) #1 {73; GFX1250-LABEL: v_test_canonicalize_build_vector_v2bf16:74; GFX1250:       ; %bb.0:75; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x076; GFX1250-NEXT:    s_wait_kmcnt 0x077; GFX1250-NEXT:    v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v0, 16, v078; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)79; GFX1250-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v080; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v181; GFX1250-NEXT:    s_set_pc_i64 s[30:31]82  %ins0 = insertelement <2 x bfloat> poison, bfloat %lo, i32 083  %ins1 = insertelement <2 x bfloat> %ins0, bfloat %hi, i32 184  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %ins1)85  ret <2 x bfloat> %canonicalized86}87 88 89define amdgpu_kernel void @v_test_canonicalize_fabs_var_bf16(ptr addrspace(1) %out) #1 {90; GFX1250-LABEL: v_test_canonicalize_fabs_var_bf16:91; GFX1250:       ; %bb.0:92; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 193; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x2494; GFX1250-NEXT:    v_mov_b32_e32 v0, 095; GFX1250-NEXT:    s_wait_kmcnt 0x096; GFX1250-NEXT:    global_load_u16 v1, v0, s[0:1]97; GFX1250-NEXT:    s_wait_loadcnt 0x098; GFX1250-NEXT:    v_and_b32_e32 v1, 0x7fff, v199; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)100; GFX1250-NEXT:    v_lshlrev_b32_e32 v1, 16, v1101; GFX1250-NEXT:    v_max_num_f32_e32 v1, v1, v1102; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)103; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, s0104; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]105; GFX1250-NEXT:    s_endpgm106  %val = load bfloat, ptr addrspace(1) %out107  %val.fabs = call bfloat @llvm.fabs.bf16(bfloat %val)108  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat %val.fabs)109  store bfloat %canonicalized, ptr addrspace(1) %out110  ret void111}112 113 114define amdgpu_kernel void @v_test_canonicalize_fneg_fabs_var_bf16(ptr addrspace(1) %out) #1 {115; GFX1250-LABEL: v_test_canonicalize_fneg_fabs_var_bf16:116; GFX1250:       ; %bb.0:117; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1118; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24119; GFX1250-NEXT:    v_mov_b32_e32 v0, 0120; GFX1250-NEXT:    s_wait_kmcnt 0x0121; GFX1250-NEXT:    global_load_u16 v1, v0, s[0:1]122; GFX1250-NEXT:    s_wait_loadcnt 0x0123; GFX1250-NEXT:    v_or_b32_e32 v1, 0x8000, v1124; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)125; GFX1250-NEXT:    v_lshlrev_b32_e32 v1, 16, v1126; GFX1250-NEXT:    v_max_num_f32_e32 v1, v1, v1127; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)128; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, s0129; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]130; GFX1250-NEXT:    s_endpgm131  %val = load bfloat, ptr addrspace(1) %out132  %val.fabs = call bfloat @llvm.fabs.bf16(bfloat %val)133  %val.fabs.fneg = fneg bfloat %val.fabs134  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat %val.fabs.fneg)135  store bfloat %canonicalized, ptr addrspace(1) %out136  ret void137}138 139define amdgpu_kernel void @v_test_canonicalize_fneg_var_bf16(ptr addrspace(1) %out) #1 {140; GFX1250-LABEL: v_test_canonicalize_fneg_var_bf16:141; GFX1250:       ; %bb.0:142; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1143; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24144; GFX1250-NEXT:    v_mov_b32_e32 v0, 0145; GFX1250-NEXT:    s_wait_kmcnt 0x0146; GFX1250-NEXT:    global_load_u16 v1, v0, s[0:1]147; GFX1250-NEXT:    s_wait_loadcnt 0x0148; GFX1250-NEXT:    v_xor_b32_e32 v1, 0x8000, v1149; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)150; GFX1250-NEXT:    v_lshlrev_b32_e32 v1, 16, v1151; GFX1250-NEXT:    v_max_num_f32_e32 v1, v1, v1152; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)153; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, s0154; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]155; GFX1250-NEXT:    s_endpgm156  %val = load bfloat, ptr addrspace(1) %out157  %val.fneg = fneg bfloat %val158  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat %val.fneg)159  store bfloat %canonicalized, ptr addrspace(1) %out160  ret void161}162 163define amdgpu_kernel void @v_test_no_denormals_canonicalize_fneg_var_bf16(ptr addrspace(1) %out) #2 {164; GFX1250-LABEL: v_test_no_denormals_canonicalize_fneg_var_bf16:165; GFX1250:       ; %bb.0:166; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1167; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24168; GFX1250-NEXT:    v_mov_b32_e32 v0, 0169; GFX1250-NEXT:    s_wait_kmcnt 0x0170; GFX1250-NEXT:    global_load_u16 v1, v0, s[0:1]171; GFX1250-NEXT:    s_wait_loadcnt 0x0172; GFX1250-NEXT:    v_xor_b32_e32 v1, 0x8000, v1173; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)174; GFX1250-NEXT:    v_lshlrev_b32_e32 v1, 16, v1175; GFX1250-NEXT:    v_max_num_f32_e32 v1, v1, v1176; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)177; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, s0178; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]179; GFX1250-NEXT:    s_endpgm180  %val = load bfloat, ptr addrspace(1) %out181  %val.fneg = fneg bfloat %val182  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat %val.fneg)183  store bfloat %canonicalized, ptr addrspace(1) %out184  ret void185}186 187define amdgpu_kernel void @v_test_no_denormals_canonicalize_fneg_fabs_var_bf16(ptr addrspace(1) %out) #2 {188; GFX1250-LABEL: v_test_no_denormals_canonicalize_fneg_fabs_var_bf16:189; GFX1250:       ; %bb.0:190; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1191; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24192; GFX1250-NEXT:    v_mov_b32_e32 v0, 0193; GFX1250-NEXT:    s_wait_kmcnt 0x0194; GFX1250-NEXT:    global_load_u16 v1, v0, s[0:1]195; GFX1250-NEXT:    s_wait_loadcnt 0x0196; GFX1250-NEXT:    v_or_b32_e32 v1, 0x8000, v1197; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)198; GFX1250-NEXT:    v_lshlrev_b32_e32 v1, 16, v1199; GFX1250-NEXT:    v_max_num_f32_e32 v1, v1, v1200; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)201; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, s0202; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]203; GFX1250-NEXT:    s_endpgm204  %val = load bfloat, ptr addrspace(1) %out205  %val.fabs = call bfloat @llvm.fabs.bf16(bfloat %val)206  %val.fabs.fneg = fneg bfloat %val.fabs207  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat %val.fabs.fneg)208  store bfloat %canonicalized, ptr addrspace(1) %out209  ret void210}211 212define amdgpu_kernel void @test_fold_canonicalize_p0_bf16(ptr addrspace(1) %out) #1 {213; GFX1250-LABEL: test_fold_canonicalize_p0_bf16:214; GFX1250:       ; %bb.0:215; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1216; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24217; GFX1250-NEXT:    v_mov_b32_e32 v0, 0218; GFX1250-NEXT:    s_wait_kmcnt 0x0219; GFX1250-NEXT:    global_store_b16 v0, v0, s[0:1]220; GFX1250-NEXT:    s_endpgm221   %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 0.0)222   store bfloat %canonicalized, ptr addrspace(1) %out223   ret void224}225 226define amdgpu_kernel void @test_fold_canonicalize_n0_bf16(ptr addrspace(1) %out) #1 {227; GFX1250-LABEL: test_fold_canonicalize_n0_bf16:228; GFX1250:       ; %bb.0:229; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1230; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24231; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xffff8000232; GFX1250-NEXT:    s_wait_kmcnt 0x0233; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]234; GFX1250-NEXT:    s_endpgm235  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat -0.0)236  store bfloat %canonicalized, ptr addrspace(1) %out237  ret void238}239 240define amdgpu_kernel void @test_fold_canonicalize_p1_bf16(ptr addrspace(1) %out) #1 {241; GFX1250-LABEL: test_fold_canonicalize_p1_bf16:242; GFX1250:       ; %bb.0:243; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1244; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24245; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3f80246; GFX1250-NEXT:    s_wait_kmcnt 0x0247; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]248; GFX1250-NEXT:    s_endpgm249  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 1.0)250  store bfloat %canonicalized, ptr addrspace(1) %out251  ret void252}253 254define amdgpu_kernel void @test_fold_canonicalize_n1_bf16(ptr addrspace(1) %out) #1 {255; GFX1250-LABEL: test_fold_canonicalize_n1_bf16:256; GFX1250:       ; %bb.0:257; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1258; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24259; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xffffbf80260; GFX1250-NEXT:    s_wait_kmcnt 0x0261; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]262; GFX1250-NEXT:    s_endpgm263  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat -1.0)264  store bfloat %canonicalized, ptr addrspace(1) %out265  ret void266}267 268define amdgpu_kernel void @test_fold_canonicalize_literal_bf16(ptr addrspace(1) %out) #1 {269; GFX1250-LABEL: test_fold_canonicalize_literal_bf16:270; GFX1250:       ; %bb.0:271; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1272; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24273; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x4180274; GFX1250-NEXT:    s_wait_kmcnt 0x0275; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]276; GFX1250-NEXT:    s_endpgm277  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 16.0)278  store bfloat %canonicalized, ptr addrspace(1) %out279  ret void280}281 282define amdgpu_kernel void @test_default_denormals_fold_canonicalize_denormal0_bf16(ptr addrspace(1) %out) #1 {283; GFX1250-LABEL: test_default_denormals_fold_canonicalize_denormal0_bf16:284; GFX1250:       ; %bb.0:285; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1286; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24287; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3ff288; GFX1250-NEXT:    s_wait_kmcnt 0x0289; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]290; GFX1250-NEXT:    s_endpgm291  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 0xR03FF)292  store bfloat %canonicalized, ptr addrspace(1) %out293  ret void294}295 296define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal0_bf16(ptr addrspace(1) %out) #3 {297; GFX1250-LABEL: test_denormals_fold_canonicalize_denormal0_bf16:298; GFX1250:       ; %bb.0:299; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1300; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24301; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3ff302; GFX1250-NEXT:    s_wait_kmcnt 0x0303; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]304; GFX1250-NEXT:    s_endpgm305  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 0xR03FF)306  store bfloat %canonicalized, ptr addrspace(1) %out307  ret void308}309 310define amdgpu_kernel void @test_default_denormals_fold_canonicalize_denormal1_bf16(ptr addrspace(1) %out) #1 {311; GFX1250-LABEL: test_default_denormals_fold_canonicalize_denormal1_bf16:312; GFX1250:       ; %bb.0:313; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1314; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24315; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xffff83ff316; GFX1250-NEXT:    s_wait_kmcnt 0x0317; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]318; GFX1250-NEXT:    s_endpgm319  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 0xR83FF)320  store bfloat %canonicalized, ptr addrspace(1) %out321  ret void322}323 324define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal1_bf16(ptr addrspace(1) %out) #3 {325; GFX1250-LABEL: test_denormals_fold_canonicalize_denormal1_bf16:326; GFX1250:       ; %bb.0:327; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1328; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24329; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xffff83ff330; GFX1250-NEXT:    s_wait_kmcnt 0x0331; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]332; GFX1250-NEXT:    s_endpgm333  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 0xR83FF)334  store bfloat %canonicalized, ptr addrspace(1) %out335  ret void336}337 338define amdgpu_kernel void @test_fold_canonicalize_qnan_bf16(ptr addrspace(1) %out) #1 {339; GFX1250-LABEL: test_fold_canonicalize_qnan_bf16:340; GFX1250:       ; %bb.0:341; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1342; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24343; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7c00344; GFX1250-NEXT:    s_wait_kmcnt 0x0345; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]346; GFX1250-NEXT:    s_endpgm347  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 0xR7C00)348  store bfloat %canonicalized, ptr addrspace(1) %out349  ret void350}351 352define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg1_bf16(ptr addrspace(1) %out) #1 {353; GFX1250-LABEL: test_fold_canonicalize_qnan_value_neg1_bf16:354; GFX1250:       ; %bb.0:355; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1356; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24357; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7fc0358; GFX1250-NEXT:    s_wait_kmcnt 0x0359; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]360; GFX1250-NEXT:    s_endpgm361  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat bitcast (i16 -1 to bfloat))362  store bfloat %canonicalized, ptr addrspace(1) %out363  ret void364}365 366define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg2_bf16(ptr addrspace(1) %out) #1 {367; GFX1250-LABEL: test_fold_canonicalize_qnan_value_neg2_bf16:368; GFX1250:       ; %bb.0:369; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1370; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24371; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7fc0372; GFX1250-NEXT:    s_wait_kmcnt 0x0373; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]374; GFX1250-NEXT:    s_endpgm375  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat bitcast (i16 -2 to bfloat))376  store bfloat %canonicalized, ptr addrspace(1) %out377  ret void378}379 380define amdgpu_kernel void @test_fold_canonicalize_snan0_value_bf16(ptr addrspace(1) %out) #1 {381; GFX1250-LABEL: test_fold_canonicalize_snan0_value_bf16:382; GFX1250:       ; %bb.0:383; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1384; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24385; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7c01386; GFX1250-NEXT:    s_wait_kmcnt 0x0387; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]388; GFX1250-NEXT:    s_endpgm389  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 0xR7C01)390  store bfloat %canonicalized, ptr addrspace(1) %out391  ret void392}393 394define amdgpu_kernel void @test_fold_canonicalize_snan1_value_bf16(ptr addrspace(1) %out) #1 {395; GFX1250-LABEL: test_fold_canonicalize_snan1_value_bf16:396; GFX1250:       ; %bb.0:397; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1398; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24399; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7dff400; GFX1250-NEXT:    s_wait_kmcnt 0x0401; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]402; GFX1250-NEXT:    s_endpgm403  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 0xR7DFF)404  store bfloat %canonicalized, ptr addrspace(1) %out405  ret void406}407 408define amdgpu_kernel void @test_fold_canonicalize_snan2_value_bf16(ptr addrspace(1) %out) #1 {409; GFX1250-LABEL: test_fold_canonicalize_snan2_value_bf16:410; GFX1250:       ; %bb.0:411; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1412; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24413; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xfffffdff414; GFX1250-NEXT:    s_wait_kmcnt 0x0415; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]416; GFX1250-NEXT:    s_endpgm417  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 0xRFDFF)418  store bfloat %canonicalized, ptr addrspace(1) %out419  ret void420}421 422define amdgpu_kernel void @test_fold_canonicalize_snan3_value_bf16(ptr addrspace(1) %out) #1 {423; GFX1250-LABEL: test_fold_canonicalize_snan3_value_bf16:424; GFX1250:       ; %bb.0:425; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1426; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24427; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xfffffc01428; GFX1250-NEXT:    s_wait_kmcnt 0x0429; GFX1250-NEXT:    global_store_b16 v0, v1, s[0:1]430; GFX1250-NEXT:    s_endpgm431  %canonicalized = call bfloat @llvm.canonicalize.bf16(bfloat 0xRFC01)432  store bfloat %canonicalized, ptr addrspace(1) %out433  ret void434}435 436define amdgpu_kernel void @v_test_canonicalize_var_v2bf16(ptr addrspace(1) %out) #1 {437; GFX1250-LABEL: v_test_canonicalize_var_v2bf16:438; GFX1250:       ; %bb.0:439; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1440; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24441; GFX1250-NEXT:    v_and_b32_e32 v0, 0x3ff, v0442; GFX1250-NEXT:    v_mov_b32_e32 v2, 0443; GFX1250-NEXT:    s_wait_kmcnt 0x0444; GFX1250-NEXT:    global_load_b32 v0, v0, s[0:1] scale_offset445; GFX1250-NEXT:    s_wait_loadcnt 0x0446; GFX1250-NEXT:    v_and_b32_e32 v1, 0xffff0000, v0447; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)448; GFX1250-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_lshlrev_b32 v0, 16, v0449; GFX1250-NEXT:    v_max_num_f32_e32 v0, v0, v0450; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)451; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v1452; GFX1250-NEXT:    global_store_b32 v2, v0, s[0:1]453; GFX1250-NEXT:    s_endpgm454  %tid = call i32 @llvm.amdgcn.workitem.id.x()455  %gep = getelementptr <2 x bfloat>, ptr addrspace(1) %out, i32 %tid456  %val = load <2 x bfloat>, ptr addrspace(1) %gep457  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %val)458  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out459  ret void460}461 462define amdgpu_kernel void @v_test_canonicalize_fabs_var_v2bf16(ptr addrspace(1) %out) #1 {463; GFX1250-LABEL: v_test_canonicalize_fabs_var_v2bf16:464; GFX1250:       ; %bb.0:465; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1466; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24467; GFX1250-NEXT:    v_and_b32_e32 v0, 0x3ff, v0468; GFX1250-NEXT:    v_mov_b32_e32 v2, 0469; GFX1250-NEXT:    s_wait_kmcnt 0x0470; GFX1250-NEXT:    global_load_b32 v0, v0, s[0:1] scale_offset471; GFX1250-NEXT:    s_wait_loadcnt 0x0472; GFX1250-NEXT:    v_lshrrev_b32_e32 v1, 16, v0473; GFX1250-NEXT:    v_and_b32_e32 v0, 0x7fff, v0474; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)475; GFX1250-NEXT:    v_lshlrev_b32_e32 v0, 16, v0476; GFX1250-NEXT:    v_and_b32_e32 v1, 0x7fff, v1477; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)478; GFX1250-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_lshlrev_b32 v1, 16, v1479; GFX1250-NEXT:    v_max_num_f32_e32 v1, v1, v1480; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)481; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v1482; GFX1250-NEXT:    global_store_b32 v2, v0, s[0:1]483; GFX1250-NEXT:    s_endpgm484  %tid = call i32 @llvm.amdgcn.workitem.id.x()485  %gep = getelementptr <2 x bfloat>, ptr addrspace(1) %out, i32 %tid486  %val = load <2 x bfloat>, ptr addrspace(1) %gep487  %val.fabs = call <2 x bfloat> @llvm.fabs.v2bf16(<2 x bfloat> %val)488  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %val.fabs)489  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out490  ret void491}492 493define amdgpu_kernel void @v_test_canonicalize_fneg_fabs_var_v2bf16(ptr addrspace(1) %out) #1 {494; GFX1250-LABEL: v_test_canonicalize_fneg_fabs_var_v2bf16:495; GFX1250:       ; %bb.0:496; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1497; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24498; GFX1250-NEXT:    v_and_b32_e32 v0, 0x3ff, v0499; GFX1250-NEXT:    v_mov_b32_e32 v2, 0500; GFX1250-NEXT:    s_wait_kmcnt 0x0501; GFX1250-NEXT:    global_load_b32 v0, v0, s[0:1] scale_offset502; GFX1250-NEXT:    s_wait_loadcnt 0x0503; GFX1250-NEXT:    v_lshrrev_b32_e32 v1, 16, v0504; GFX1250-NEXT:    v_or_b32_e32 v0, 0x8000, v0505; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)506; GFX1250-NEXT:    v_lshlrev_b32_e32 v0, 16, v0507; GFX1250-NEXT:    v_or_b32_e32 v1, 0x8000, v1508; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)509; GFX1250-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_lshlrev_b32 v1, 16, v1510; GFX1250-NEXT:    v_max_num_f32_e32 v1, v1, v1511; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)512; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v1513; GFX1250-NEXT:    global_store_b32 v2, v0, s[0:1]514; GFX1250-NEXT:    s_endpgm515  %tid = call i32 @llvm.amdgcn.workitem.id.x()516  %gep = getelementptr <2 x bfloat>, ptr addrspace(1) %out, i32 %tid517  %val = load <2 x bfloat>, ptr addrspace(1) %gep518  %val.fabs = call <2 x bfloat> @llvm.fabs.v2bf16(<2 x bfloat> %val)519  %val.fabs.fneg = fneg <2 x bfloat> %val.fabs520  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %val.fabs.fneg)521  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out522  ret void523}524 525define amdgpu_kernel void @v_test_canonicalize_fneg_var_v2bf16(ptr addrspace(1) %out) #1 {526; GFX1250-LABEL: v_test_canonicalize_fneg_var_v2bf16:527; GFX1250:       ; %bb.0:528; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1529; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24530; GFX1250-NEXT:    v_and_b32_e32 v0, 0x3ff, v0531; GFX1250-NEXT:    v_mov_b32_e32 v2, 0532; GFX1250-NEXT:    s_wait_kmcnt 0x0533; GFX1250-NEXT:    global_load_b32 v0, v0, s[0:1] scale_offset534; GFX1250-NEXT:    s_wait_loadcnt 0x0535; GFX1250-NEXT:    v_lshrrev_b32_e32 v1, 16, v0536; GFX1250-NEXT:    v_xor_b32_e32 v0, 0x8000, v0537; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)538; GFX1250-NEXT:    v_lshlrev_b32_e32 v0, 16, v0539; GFX1250-NEXT:    v_xor_b32_e32 v1, 0x8000, v1540; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)541; GFX1250-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_lshlrev_b32 v1, 16, v1542; GFX1250-NEXT:    v_max_num_f32_e32 v1, v1, v1543; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)544; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v1545; GFX1250-NEXT:    global_store_b32 v2, v0, s[0:1]546; GFX1250-NEXT:    s_endpgm547  %tid = call i32 @llvm.amdgcn.workitem.id.x()548  %gep = getelementptr <2 x bfloat>, ptr addrspace(1) %out, i32 %tid549  %val = load <2 x bfloat>, ptr addrspace(1) %gep550  %fneg.val = fneg <2 x bfloat> %val551  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %fneg.val)552  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out553  ret void554}555 556define amdgpu_kernel void @s_test_canonicalize_var_v2bf16(ptr addrspace(1) %out, i32 zeroext %val.arg) #1 {557; GFX1250-LABEL: s_test_canonicalize_var_v2bf16:558; GFX1250:       ; %bb.0:559; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1560; GFX1250-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24561; GFX1250-NEXT:    v_mov_b32_e32 v2, 0562; GFX1250-NEXT:    s_wait_kmcnt 0x0563; GFX1250-NEXT:    s_and_b32 s3, s2, 0xffff0000564; GFX1250-NEXT:    s_lshl_b32 s2, s2, 16565; GFX1250-NEXT:    v_max_num_f32_e64 v0, s3, s3566; GFX1250-NEXT:    v_max_num_f32_e64 v1, s2, s2567; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)568; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v1, v0569; GFX1250-NEXT:    global_store_b32 v2, v0, s[0:1]570; GFX1250-NEXT:    s_endpgm571  %val = bitcast i32 %val.arg to <2 x bfloat>572  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %val)573  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out574  ret void575}576 577define amdgpu_kernel void @test_fold_canonicalize_p0_v2bf16(ptr addrspace(1) %out) #1 {578; GFX1250-LABEL: test_fold_canonicalize_p0_v2bf16:579; GFX1250:       ; %bb.0:580; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1581; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24582; GFX1250-NEXT:    v_mov_b32_e32 v0, 0583; GFX1250-NEXT:    s_wait_kmcnt 0x0584; GFX1250-NEXT:    global_store_b32 v0, v0, s[0:1]585; GFX1250-NEXT:    s_endpgm586  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> zeroinitializer)587  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out588  ret void589}590 591define amdgpu_kernel void @test_fold_canonicalize_n0_v2bf16(ptr addrspace(1) %out) #1 {592; GFX1250-LABEL: test_fold_canonicalize_n0_v2bf16:593; GFX1250:       ; %bb.0:594; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1595; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24596; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x80008000597; GFX1250-NEXT:    s_wait_kmcnt 0x0598; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]599; GFX1250-NEXT:    s_endpgm600  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat -0.0, bfloat -0.0>)601  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out602  ret void603}604 605define amdgpu_kernel void @test_fold_canonicalize_p1_v2bf16(ptr addrspace(1) %out) #1 {606; GFX1250-LABEL: test_fold_canonicalize_p1_v2bf16:607; GFX1250:       ; %bb.0:608; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1609; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24610; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3f803f80611; GFX1250-NEXT:    s_wait_kmcnt 0x0612; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]613; GFX1250-NEXT:    s_endpgm614  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat 1.0, bfloat 1.0>)615  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out616  ret void617}618 619define amdgpu_kernel void @test_fold_canonicalize_n1_v2bf16(ptr addrspace(1) %out) #1 {620; GFX1250-LABEL: test_fold_canonicalize_n1_v2bf16:621; GFX1250:       ; %bb.0:622; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1623; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24624; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xbf80bf80625; GFX1250-NEXT:    s_wait_kmcnt 0x0626; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]627; GFX1250-NEXT:    s_endpgm628  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat -1.0, bfloat -1.0>)629  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out630  ret void631}632 633define amdgpu_kernel void @test_fold_canonicalize_literal_v2bf16(ptr addrspace(1) %out) #1 {634; GFX1250-LABEL: test_fold_canonicalize_literal_v2bf16:635; GFX1250:       ; %bb.0:636; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1637; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24638; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x41804180639; GFX1250-NEXT:    s_wait_kmcnt 0x0640; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]641; GFX1250-NEXT:    s_endpgm642  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat 16.0, bfloat 16.0>)643  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out644  ret void645}646 647define amdgpu_kernel void @test_no_denormals_fold_canonicalize_denormal0_v2bf16(ptr addrspace(1) %out) #1 {648; GFX1250-LABEL: test_no_denormals_fold_canonicalize_denormal0_v2bf16:649; GFX1250:       ; %bb.0:650; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1651; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24652; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3ff03ff653; GFX1250-NEXT:    s_wait_kmcnt 0x0654; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]655; GFX1250-NEXT:    s_endpgm656  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat 0xR03FF, bfloat 0xR03FF>)657  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out658  ret void659}660 661define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal0_v2bf16(ptr addrspace(1) %out) #3 {662; GFX1250-LABEL: test_denormals_fold_canonicalize_denormal0_v2bf16:663; GFX1250:       ; %bb.0:664; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1665; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24666; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x3ff03ff667; GFX1250-NEXT:    s_wait_kmcnt 0x0668; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]669; GFX1250-NEXT:    s_endpgm670  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat 0xR03FF, bfloat 0xR03FF>)671  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out672  ret void673}674 675define amdgpu_kernel void @test_no_denormals_fold_canonicalize_denormal1_v2bf16(ptr addrspace(1) %out) #1 {676; GFX1250-LABEL: test_no_denormals_fold_canonicalize_denormal1_v2bf16:677; GFX1250:       ; %bb.0:678; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1679; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24680; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x83ff83ff681; GFX1250-NEXT:    s_wait_kmcnt 0x0682; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]683; GFX1250-NEXT:    s_endpgm684  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat 0xR83FF, bfloat 0xR83FF>)685  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out686  ret void687}688 689define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal1_v2bf16(ptr addrspace(1) %out) #3 {690; GFX1250-LABEL: test_denormals_fold_canonicalize_denormal1_v2bf16:691; GFX1250:       ; %bb.0:692; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1693; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24694; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x83ff83ff695; GFX1250-NEXT:    s_wait_kmcnt 0x0696; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]697; GFX1250-NEXT:    s_endpgm698  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat 0xR83FF, bfloat 0xR83FF>)699  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out700  ret void701}702 703define amdgpu_kernel void @test_fold_canonicalize_qnan_v2bf16(ptr addrspace(1) %out) #1 {704; GFX1250-LABEL: test_fold_canonicalize_qnan_v2bf16:705; GFX1250:       ; %bb.0:706; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1707; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24708; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7c007c00709; GFX1250-NEXT:    s_wait_kmcnt 0x0710; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]711; GFX1250-NEXT:    s_endpgm712  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat 0xR7C00, bfloat 0xR7C00>)713  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out714  ret void715}716 717define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg1_v2bf16(ptr addrspace(1) %out) #1 {718; GFX1250-LABEL: test_fold_canonicalize_qnan_value_neg1_v2bf16:719; GFX1250:       ; %bb.0:720; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1721; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24722; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7fc07fc0723; GFX1250-NEXT:    s_wait_kmcnt 0x0724; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]725; GFX1250-NEXT:    s_endpgm726  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> bitcast (i32 -1 to <2 x bfloat>))727  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out728  ret void729}730 731define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg2_v2bf16(ptr addrspace(1) %out) #1 {732; GFX1250-LABEL: test_fold_canonicalize_qnan_value_neg2_v2bf16:733; GFX1250:       ; %bb.0:734; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1735; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24736; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7fc07fc0737; GFX1250-NEXT:    s_wait_kmcnt 0x0738; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]739; GFX1250-NEXT:    s_endpgm740  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat bitcast (i16 -2 to bfloat), bfloat bitcast (i16 -2 to bfloat)>)741  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out742  ret void743}744 745define amdgpu_kernel void @test_fold_canonicalize_snan0_value_v2bf16(ptr addrspace(1) %out) #1 {746; GFX1250-LABEL: test_fold_canonicalize_snan0_value_v2bf16:747; GFX1250:       ; %bb.0:748; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1749; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24750; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7c017c01751; GFX1250-NEXT:    s_wait_kmcnt 0x0752; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]753; GFX1250-NEXT:    s_endpgm754  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat 0xR7C01, bfloat 0xR7C01>)755  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out756  ret void757}758 759define amdgpu_kernel void @test_fold_canonicalize_snan1_value_v2bf16(ptr addrspace(1) %out) #1 {760; GFX1250-LABEL: test_fold_canonicalize_snan1_value_v2bf16:761; GFX1250:       ; %bb.0:762; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1763; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24764; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x7dff7dff765; GFX1250-NEXT:    s_wait_kmcnt 0x0766; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]767; GFX1250-NEXT:    s_endpgm768  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat 0xR7DFF, bfloat 0xR7DFF>)769  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out770  ret void771}772 773define amdgpu_kernel void @test_fold_canonicalize_snan2_value_v2bf16(ptr addrspace(1) %out) #1 {774; GFX1250-LABEL: test_fold_canonicalize_snan2_value_v2bf16:775; GFX1250:       ; %bb.0:776; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1777; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24778; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xfdfffdff779; GFX1250-NEXT:    s_wait_kmcnt 0x0780; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]781; GFX1250-NEXT:    s_endpgm782  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat 0xRFDFF, bfloat 0xRFDFF>)783  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out784  ret void785}786 787define amdgpu_kernel void @test_fold_canonicalize_snan3_value_v2bf16(ptr addrspace(1) %out) #1 {788; GFX1250-LABEL: test_fold_canonicalize_snan3_value_v2bf16:789; GFX1250:       ; %bb.0:790; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1791; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24792; GFX1250-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0xfc01fc01793; GFX1250-NEXT:    s_wait_kmcnt 0x0794; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]795; GFX1250-NEXT:    s_endpgm796  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> <bfloat 0xRFC01, bfloat 0xRFC01>)797  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out798  ret void799}800 801define <3 x bfloat> @v_test_canonicalize_var_v3bf16(<3 x bfloat> %val) #1 {802; GFX1250-LABEL: v_test_canonicalize_var_v3bf16:803; GFX1250:       ; %bb.0:804; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0805; GFX1250-NEXT:    s_wait_kmcnt 0x0806; GFX1250-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0807; GFX1250-NEXT:    v_dual_lshlrev_b32 v0, 16, v0 :: v_dual_lshlrev_b32 v1, 16, v1808; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)809; GFX1250-NEXT:    v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v0, v0, v0810; GFX1250-NEXT:    v_max_num_f32_e32 v1, v1, v1811; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)812; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v2813; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, s0814; GFX1250-NEXT:    s_set_pc_i64 s[30:31]815  %canonicalized = call <3 x bfloat> @llvm.canonicalize.v3bf16(<3 x bfloat> %val)816  ret <3 x bfloat> %canonicalized817}818 819define <4 x bfloat> @v_test_canonicalize_var_v4bf16(<4 x bfloat> %val) #1 {820; GFX1250-LABEL: v_test_canonicalize_var_v4bf16:821; GFX1250:       ; %bb.0:822; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0823; GFX1250-NEXT:    s_wait_kmcnt 0x0824; GFX1250-NEXT:    v_and_b32_e32 v2, 0xffff0000, v1825; GFX1250-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0826; GFX1250-NEXT:    v_dual_lshlrev_b32 v0, 16, v0 :: v_dual_lshlrev_b32 v1, 16, v1827; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)828; GFX1250-NEXT:    v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v3, v3, v3829; GFX1250-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1830; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)831; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v3832; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, v2833; GFX1250-NEXT:    s_set_pc_i64 s[30:31]834  %canonicalized = call <4 x bfloat> @llvm.canonicalize.v4bf16(<4 x bfloat> %val)835  ret <4 x bfloat> %canonicalized836}837 838define amdgpu_kernel void @s_test_canonicalize_undef_v2bf16(ptr addrspace(1) %out) #1 {839; GFX1250-LABEL: s_test_canonicalize_undef_v2bf16:840; GFX1250:       ; %bb.0:841; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1842; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24843; GFX1250-NEXT:    v_mov_b32_e32 v0, 0844; GFX1250-NEXT:    s_wait_kmcnt 0x0845; GFX1250-NEXT:    global_store_b32 v0, v0, s[0:1]846; GFX1250-NEXT:    s_endpgm847  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> undef)848  store <2 x bfloat> %canonicalized, ptr addrspace(1) %out849  ret void850}851 852define <2 x bfloat> @v_test_canonicalize_reg_undef_v2bf16(bfloat %val) #1 {853; GFX1250-LABEL: v_test_canonicalize_reg_undef_v2bf16:854; GFX1250:       ; %bb.0:855; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0856; GFX1250-NEXT:    s_wait_kmcnt 0x0857; GFX1250-NEXT:    v_lshlrev_b32_e32 v0, 16, v0858; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)859; GFX1250-NEXT:    v_max_num_f32_e32 v0, v0, v0860; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, s0861; GFX1250-NEXT:    s_movk_i32 s0, 0x7fc0862; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)863; GFX1250-NEXT:    v_perm_b32 v0, s0, v0, 0x5040100864; GFX1250-NEXT:    s_set_pc_i64 s[30:31]865  %vec = insertelement <2 x bfloat> poison, bfloat %val, i32 0866  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %vec)867  ret <2 x bfloat> %canonicalized868}869 870define <2 x bfloat> @v_test_canonicalize_undef_reg_v2bf16(bfloat %val) #1 {871; GFX1250-LABEL: v_test_canonicalize_undef_reg_v2bf16:872; GFX1250:       ; %bb.0:873; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0874; GFX1250-NEXT:    s_wait_kmcnt 0x0875; GFX1250-NEXT:    v_lshlrev_b32_e32 v0, 16, v0876; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)877; GFX1250-NEXT:    v_max_num_f32_e32 v0, v0, v0878; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, s0879; GFX1250-NEXT:    s_movk_i32 s0, 0x7fc0880; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)881; GFX1250-NEXT:    v_perm_b32 v0, v0, s0, 0x5040100882; GFX1250-NEXT:    s_set_pc_i64 s[30:31]883  %vec = insertelement <2 x bfloat> poison, bfloat %val, i32 1884  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %vec)885  ret <2 x bfloat> %canonicalized886}887 888define <2 x bfloat> @v_test_canonicalize_undef_lo_imm_hi_v2bf16() #1 {889; GFX1250-LABEL: v_test_canonicalize_undef_lo_imm_hi_v2bf16:890; GFX1250:       ; %bb.0:891; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0892; GFX1250-NEXT:    s_wait_kmcnt 0x0893; GFX1250-NEXT:    v_mov_b32_e32 v0, 1.0894; GFX1250-NEXT:    s_set_pc_i64 s[30:31]895  %vec = insertelement <2 x bfloat> undef, bfloat 1.0, i32 1896  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %vec)897  ret <2 x bfloat> %canonicalized898}899 900define <2 x bfloat> @v_test_canonicalize_imm_lo_undef_hi_v2bf16() #1 {901; GFX1250-LABEL: v_test_canonicalize_imm_lo_undef_hi_v2bf16:902; GFX1250:       ; %bb.0:903; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0904; GFX1250-NEXT:    s_wait_kmcnt 0x0905; GFX1250-NEXT:    v_mov_b32_e32 v0, 0x3f80906; GFX1250-NEXT:    s_set_pc_i64 s[30:31]907  %vec = insertelement <2 x bfloat> undef, bfloat 1.0, i32 0908  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %vec)909  ret <2 x bfloat> %canonicalized910}911 912define <2 x bfloat> @v_test_canonicalize_undef_lo_k_hi_v2bf16() #1 {913; GFX1250-LABEL: v_test_canonicalize_undef_lo_k_hi_v2bf16:914; GFX1250:       ; %bb.0:915; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0916; GFX1250-NEXT:    s_wait_kmcnt 0x0917; GFX1250-NEXT:    v_mov_b32_e32 v0, 0x41800000918; GFX1250-NEXT:    s_set_pc_i64 s[30:31]919  %vec = insertelement <2 x bfloat> undef, bfloat 16.0, i32 1920  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %vec)921  ret <2 x bfloat> %canonicalized922}923 924define <2 x bfloat> @v_test_canonicalize_k_lo_undef_hi_v2bf16() #1 {925; GFX1250-LABEL: v_test_canonicalize_k_lo_undef_hi_v2bf16:926; GFX1250:       ; %bb.0:927; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0928; GFX1250-NEXT:    s_wait_kmcnt 0x0929; GFX1250-NEXT:    v_mov_b32_e32 v0, 0x4180930; GFX1250-NEXT:    s_set_pc_i64 s[30:31]931  %vec = insertelement <2 x bfloat> undef, bfloat 16.0, i32 0932  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %vec)933  ret <2 x bfloat> %canonicalized934}935 936define <2 x bfloat> @v_test_canonicalize_reg_k_v2bf16(bfloat %val) #1 {937; GFX1250-LABEL: v_test_canonicalize_reg_k_v2bf16:938; GFX1250:       ; %bb.0:939; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0940; GFX1250-NEXT:    s_wait_kmcnt 0x0941; GFX1250-NEXT:    v_lshlrev_b32_e32 v0, 16, v0942; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)943; GFX1250-NEXT:    v_max_num_f32_e32 v0, v0, v0944; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, s0945; GFX1250-NEXT:    s_movk_i32 s0, 0x4000946; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)947; GFX1250-NEXT:    v_perm_b32 v0, s0, v0, 0x5040100948; GFX1250-NEXT:    s_set_pc_i64 s[30:31]949  %vec0 = insertelement <2 x bfloat> poison, bfloat %val, i32 0950  %vec1 = insertelement <2 x bfloat> %vec0, bfloat 2.0, i32 1951  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %vec1)952  ret <2 x bfloat> %canonicalized953}954 955define <2 x bfloat> @v_test_canonicalize_k_reg_v2bf16(bfloat %val) #1 {956; GFX1250-LABEL: v_test_canonicalize_k_reg_v2bf16:957; GFX1250:       ; %bb.0:958; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0959; GFX1250-NEXT:    s_wait_kmcnt 0x0960; GFX1250-NEXT:    v_lshlrev_b32_e32 v0, 16, v0961; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)962; GFX1250-NEXT:    v_max_num_f32_e32 v0, v0, v0963; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, s0964; GFX1250-NEXT:    s_movk_i32 s0, 0x4000965; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)966; GFX1250-NEXT:    v_perm_b32 v0, v0, s0, 0x5040100967; GFX1250-NEXT:    s_set_pc_i64 s[30:31]968  %vec0 = insertelement <2 x bfloat> poison, bfloat 2.0, i32 0969  %vec1 = insertelement <2 x bfloat> %vec0, bfloat %val, i32 1970  %canonicalized = call <2 x bfloat> @llvm.canonicalize.v2bf16(<2 x bfloat> %vec1)971  ret <2 x bfloat> %canonicalized972}973 974define amdgpu_kernel void @s_test_canonicalize_undef_v4bf16(ptr addrspace(1) %out) #1 {975; GFX1250-LABEL: s_test_canonicalize_undef_v4bf16:976; GFX1250:       ; %bb.0:977; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1978; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24979; GFX1250-NEXT:    v_mov_b32_e32 v0, 0980; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)981; GFX1250-NEXT:    v_mov_b32_e32 v1, v0982; GFX1250-NEXT:    s_wait_kmcnt 0x0983; GFX1250-NEXT:    global_store_b64 v0, v[0:1], s[0:1]984; GFX1250-NEXT:    s_endpgm985  %canonicalized = call <4 x bfloat> @llvm.canonicalize.v4bf16(<4 x bfloat> undef)986  store <4 x bfloat> %canonicalized, ptr addrspace(1) %out987  ret void988}989 990define <4 x bfloat> @v_test_canonicalize_reg_undef_undef_undef_v4bf16(bfloat %val) #1 {991; GFX1250-LABEL: v_test_canonicalize_reg_undef_undef_undef_v4bf16:992; GFX1250:       ; %bb.0:993; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0994; GFX1250-NEXT:    s_wait_kmcnt 0x0995; GFX1250-NEXT:    v_dual_mov_b32 v1, 0x7fc07fc0 :: v_dual_lshlrev_b32 v0, 16, v0996; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)997; GFX1250-NEXT:    v_max_num_f32_e32 v0, v0, v0998; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, s0999; GFX1250-NEXT:    s_movk_i32 s0, 0x7fc01000; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1001; GFX1250-NEXT:    v_perm_b32 v0, s0, v0, 0x50401001002; GFX1250-NEXT:    s_set_pc_i64 s[30:31]1003  %vec = insertelement <4 x bfloat> poison, bfloat %val, i32 01004  %canonicalized = call <4 x bfloat> @llvm.canonicalize.v4bf16(<4 x bfloat> %vec)1005  ret <4 x bfloat> %canonicalized1006}1007 1008define <4 x bfloat> @v_test_canonicalize_reg_reg_undef_undef_v4bf16(bfloat %val0, bfloat %val1) #1 {1009; GFX1250-LABEL: v_test_canonicalize_reg_reg_undef_undef_v4bf16:1010; GFX1250:       ; %bb.0:1011; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x01012; GFX1250-NEXT:    s_wait_kmcnt 0x01013; GFX1250-NEXT:    v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v0, 16, v01014; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1015; GFX1250-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v01016; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v11017; GFX1250-NEXT:    v_mov_b32_e32 v1, 0x7fc07fc01018; GFX1250-NEXT:    s_set_pc_i64 s[30:31]1019  %vec0 = insertelement <4 x bfloat> poison, bfloat %val0, i32 01020  %vec1 = insertelement <4 x bfloat> %vec0, bfloat %val1, i32 11021  %canonicalized = call <4 x bfloat> @llvm.canonicalize.v4bf16(<4 x bfloat> %vec1)1022  ret <4 x bfloat> %canonicalized1023}1024 1025define <4 x bfloat> @v_test_canonicalize_reg_undef_reg_reg_v4bf16(bfloat %val0, bfloat %val1, bfloat %val2) #1 {1026; GFX1250-LABEL: v_test_canonicalize_reg_undef_reg_reg_v4bf16:1027; GFX1250:       ; %bb.0:1028; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x01029; GFX1250-NEXT:    s_wait_kmcnt 0x01030; GFX1250-NEXT:    v_dual_lshlrev_b32 v0, 16, v0 :: v_dual_lshlrev_b32 v2, 16, v21031; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1032; GFX1250-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_lshlrev_b32 v1, 16, v11033; GFX1250-NEXT:    v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v1, v1, v11034; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)1035; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, s01036; GFX1250-NEXT:    s_movk_i32 s0, 0x7fc01037; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, v21038; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_2)1039; GFX1250-NEXT:    v_perm_b32 v0, s0, v0, 0x50401001040; GFX1250-NEXT:    s_set_pc_i64 s[30:31]1041  %vec0 = insertelement <4 x bfloat> poison, bfloat %val0, i32 01042  %vec1 = insertelement <4 x bfloat> %vec0, bfloat %val1, i32 21043  %vec2 = insertelement <4 x bfloat> %vec1, bfloat %val2, i32 31044  %canonicalized = call <4 x bfloat> @llvm.canonicalize.v4bf16(<4 x bfloat> %vec2)1045  ret <4 x bfloat> %canonicalized1046}1047 1048define <6 x bfloat> @v_test_canonicalize_var_v6bf16(<6 x bfloat> %val) #1 {1049; GFX1250-LABEL: v_test_canonicalize_var_v6bf16:1050; GFX1250:       ; %bb.0:1051; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x01052; GFX1250-NEXT:    s_wait_kmcnt 0x01053; GFX1250-NEXT:    v_and_b32_e32 v3, 0xffff0000, v21054; GFX1250-NEXT:    v_lshlrev_b32_e32 v2, 16, v21055; GFX1250-NEXT:    v_and_b32_e32 v4, 0xffff0000, v11056; GFX1250-NEXT:    v_and_b32_e32 v5, 0xffff0000, v01057; GFX1250-NEXT:    v_dual_lshlrev_b32 v0, 16, v0 :: v_dual_lshlrev_b32 v1, 16, v11058; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)1059; GFX1250-NEXT:    v_dual_max_num_f32 v3, v3, v3 :: v_dual_max_num_f32 v4, v4, v41060; GFX1250-NEXT:    v_dual_max_num_f32 v5, v5, v5 :: v_dual_max_num_f32 v0, v0, v01061; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)1062; GFX1250-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v2, v2, v21063; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v51064; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)1065; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, v41066; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v2, v2, v31067; GFX1250-NEXT:    s_set_pc_i64 s[30:31]1068  %canonicalized = call <6 x bfloat> @llvm.canonicalize.v6bf16(<6 x bfloat> %val)1069  ret <6 x bfloat> %canonicalized1070}1071 1072define <8 x bfloat> @v_test_canonicalize_var_v8bf16(<8 x bfloat> %val) #1 {1073; GFX1250-LABEL: v_test_canonicalize_var_v8bf16:1074; GFX1250:       ; %bb.0:1075; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x01076; GFX1250-NEXT:    s_wait_kmcnt 0x01077; GFX1250-NEXT:    v_and_b32_e32 v5, 0xffff0000, v21078; GFX1250-NEXT:    v_and_b32_e32 v4, 0xffff0000, v31079; GFX1250-NEXT:    v_lshlrev_b32_e32 v3, 16, v31080; GFX1250-NEXT:    v_and_b32_e32 v6, 0xffff0000, v11081; GFX1250-NEXT:    v_and_b32_e32 v7, 0xffff0000, v01082; GFX1250-NEXT:    v_dual_max_num_f32 v5, v5, v5 :: v_dual_lshlrev_b32 v0, 16, v01083; GFX1250-NEXT:    v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v2, 16, v21084; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)1085; GFX1250-NEXT:    v_dual_max_num_f32 v4, v4, v4 :: v_dual_max_num_f32 v6, v6, v61086; GFX1250-NEXT:    v_dual_max_num_f32 v7, v7, v7 :: v_dual_max_num_f32 v0, v0, v01087; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)1088; GFX1250-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v2, v2, v21089; GFX1250-NEXT:    v_max_num_f32_e32 v3, v3, v31090; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v71091; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)1092; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, v61093; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v2, v2, v51094; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_4)1095; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v3, v3, v41096; GFX1250-NEXT:    s_set_pc_i64 s[30:31]1097  %canonicalized = call <8 x bfloat> @llvm.canonicalize.v8bf16(<8 x bfloat> %val)1098  ret <8 x bfloat> %canonicalized1099}1100 1101define <12 x bfloat> @v_test_canonicalize_var_v12bf16(<12 x bfloat> %val) #1 {1102; GFX1250-LABEL: v_test_canonicalize_var_v12bf16:1103; GFX1250:       ; %bb.0:1104; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x01105; GFX1250-NEXT:    s_wait_kmcnt 0x01106; GFX1250-NEXT:    v_and_b32_e32 v6, 0xffff0000, v51107; GFX1250-NEXT:    v_lshlrev_b32_e32 v5, 16, v51108; GFX1250-NEXT:    v_and_b32_e32 v7, 0xffff0000, v41109; GFX1250-NEXT:    v_and_b32_e32 v8, 0xffff0000, v31110; GFX1250-NEXT:    v_and_b32_e32 v9, 0xffff0000, v21111; GFX1250-NEXT:    v_dual_lshlrev_b32 v4, 16, v4 :: v_dual_lshlrev_b32 v3, 16, v31112; GFX1250-NEXT:    v_and_b32_e32 v10, 0xffff0000, v11113; GFX1250-NEXT:    v_and_b32_e32 v11, 0xffff0000, v01114; GFX1250-NEXT:    v_dual_lshlrev_b32 v0, 16, v0 :: v_dual_lshlrev_b32 v1, 16, v11115; GFX1250-NEXT:    v_lshlrev_b32_e32 v2, 16, v21116; GFX1250-NEXT:    v_dual_max_num_f32 v6, v6, v6 :: v_dual_max_num_f32 v5, v5, v51117; GFX1250-NEXT:    v_dual_max_num_f32 v7, v7, v7 :: v_dual_max_num_f32 v8, v8, v81118; GFX1250-NEXT:    v_dual_max_num_f32 v9, v9, v9 :: v_dual_max_num_f32 v10, v10, v101119; GFX1250-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v11, v11, v111120; GFX1250-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v2, v2, v21121; GFX1250-NEXT:    v_dual_max_num_f32 v3, v3, v3 :: v_dual_max_num_f32 v4, v4, v41122; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)1123; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v111124; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, v101125; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1126; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v2, v2, v91127; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v3, v3, v81128; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v4, v4, v71129; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v5, v5, v61130; GFX1250-NEXT:    s_set_pc_i64 s[30:31]1131  %canonicalized = call <12 x bfloat> @llvm.canonicalize.v12bf16(<12 x bfloat> %val)1132  ret <12 x bfloat> %canonicalized1133}1134 1135define <16 x bfloat> @v_test_canonicalize_var_v16bf16(<16 x bfloat> %val) #1 {1136; GFX1250-LABEL: v_test_canonicalize_var_v16bf16:1137; GFX1250:       ; %bb.0:1138; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x01139; GFX1250-NEXT:    s_wait_kmcnt 0x01140; GFX1250-NEXT:    v_and_b32_e32 v8, 0xffff0000, v71141; GFX1250-NEXT:    v_lshlrev_b32_e32 v7, 16, v71142; GFX1250-NEXT:    v_and_b32_e32 v9, 0xffff0000, v61143; GFX1250-NEXT:    v_and_b32_e32 v10, 0xffff0000, v51144; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1145; GFX1250-NEXT:    v_dual_max_num_f32 v8, v8, v8 :: v_dual_lshlrev_b32 v5, 16, v51146; GFX1250-NEXT:    v_dual_max_num_f32 v7, v7, v7 :: v_dual_lshlrev_b32 v6, 16, v61147; GFX1250-NEXT:    v_and_b32_e32 v11, 0xffff0000, v41148; GFX1250-NEXT:    v_and_b32_e32 v12, 0xffff0000, v31149; GFX1250-NEXT:    v_and_b32_e32 v13, 0xffff0000, v21150; GFX1250-NEXT:    v_dual_lshlrev_b32 v4, 16, v4 :: v_dual_lshlrev_b32 v3, 16, v31151; GFX1250-NEXT:    v_and_b32_e32 v14, 0xffff0000, v11152; GFX1250-NEXT:    v_and_b32_e32 v15, 0xffff0000, v01153; GFX1250-NEXT:    v_dual_lshlrev_b32 v0, 16, v0 :: v_dual_lshlrev_b32 v1, 16, v11154; GFX1250-NEXT:    v_dual_max_num_f32 v9, v9, v9 :: v_dual_lshlrev_b32 v2, 16, v21155; GFX1250-NEXT:    v_max_num_f32_e32 v6, v6, v61156; GFX1250-NEXT:    v_dual_max_num_f32 v10, v10, v10 :: v_dual_max_num_f32 v5, v5, v51157; GFX1250-NEXT:    v_dual_max_num_f32 v11, v11, v11 :: v_dual_max_num_f32 v12, v12, v121158; GFX1250-NEXT:    v_dual_max_num_f32 v13, v13, v13 :: v_dual_max_num_f32 v14, v14, v141159; GFX1250-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v15, v15, v151160; GFX1250-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v2, v2, v21161; GFX1250-NEXT:    v_dual_max_num_f32 v3, v3, v3 :: v_dual_max_num_f32 v4, v4, v41162; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)1163; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v151164; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, v141165; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1166; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v2, v2, v131167; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v3, v3, v121168; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v4, v4, v111169; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v5, v5, v101170; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v6, v6, v91171; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v7, v7, v81172; GFX1250-NEXT:    s_set_pc_i64 s[30:31]1173  %canonicalized = call <16 x bfloat> @llvm.canonicalize.v16bf16(<16 x bfloat> %val)1174  ret <16 x bfloat> %canonicalized1175}1176 1177define <32 x bfloat> @v_test_canonicalize_var_v32bf16(<32 x bfloat> %val) #1 {1178; GFX1250-LABEL: v_test_canonicalize_var_v32bf16:1179; GFX1250:       ; %bb.0:1180; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x01181; GFX1250-NEXT:    s_wait_kmcnt 0x01182; GFX1250-NEXT:    v_and_b32_e32 v16, 0xffff0000, v151183; GFX1250-NEXT:    v_and_b32_e32 v18, 0xffff0000, v131184; GFX1250-NEXT:    v_and_b32_e32 v20, 0xffff0000, v111185; GFX1250-NEXT:    v_and_b32_e32 v22, 0xffff0000, v91186; GFX1250-NEXT:    v_and_b32_e32 v24, 0xffff0000, v71187; GFX1250-NEXT:    v_dual_max_num_f32 v16, v16, v16 :: v_dual_lshlrev_b32 v15, 16, v151188; GFX1250-NEXT:    v_and_b32_e32 v17, 0xffff0000, v141189; GFX1250-NEXT:    v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v13, 16, v131190; GFX1250-NEXT:    v_max_num_f32_e32 v18, v18, v181191; GFX1250-NEXT:    v_and_b32_e32 v19, 0xffff0000, v121192; GFX1250-NEXT:    v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_lshlrev_b32 v11, 16, v111193; GFX1250-NEXT:    v_max_num_f32_e32 v20, v20, v201194; GFX1250-NEXT:    v_and_b32_e32 v21, 0xffff0000, v101195; GFX1250-NEXT:    v_dual_lshlrev_b32 v10, 16, v10 :: v_dual_lshlrev_b32 v9, 16, v91196; GFX1250-NEXT:    v_max_num_f32_e32 v22, v22, v221197; GFX1250-NEXT:    v_and_b32_e32 v23, 0xffff0000, v81198; GFX1250-NEXT:    v_dual_lshlrev_b32 v8, 16, v8 :: v_dual_lshlrev_b32 v7, 16, v71199; GFX1250-NEXT:    v_max_num_f32_e32 v24, v24, v241200; GFX1250-NEXT:    v_and_b32_e32 v25, 0xffff0000, v61201; GFX1250-NEXT:    v_lshlrev_b32_e32 v6, 16, v61202; GFX1250-NEXT:    v_and_b32_e32 v26, 0xffff0000, v51203; GFX1250-NEXT:    v_lshlrev_b32_e32 v5, 16, v51204; GFX1250-NEXT:    v_and_b32_e32 v27, 0xffff0000, v41205; GFX1250-NEXT:    v_and_b32_e32 v28, 0xffff0000, v31206; GFX1250-NEXT:    v_and_b32_e32 v29, 0xffff0000, v21207; GFX1250-NEXT:    v_dual_lshlrev_b32 v4, 16, v4 :: v_dual_lshlrev_b32 v3, 16, v31208; GFX1250-NEXT:    v_and_b32_e32 v30, 0xffff0000, v11209; GFX1250-NEXT:    v_and_b32_e32 v31, 0xffff0000, v01210; GFX1250-NEXT:    v_dual_lshlrev_b32 v0, 16, v0 :: v_dual_lshlrev_b32 v1, 16, v11211; GFX1250-NEXT:    v_dual_max_num_f32 v15, v15, v15 :: v_dual_lshlrev_b32 v2, 16, v21212; GFX1250-NEXT:    v_dual_max_num_f32 v17, v17, v17 :: v_dual_max_num_f32 v14, v14, v141213; GFX1250-NEXT:    v_dual_max_num_f32 v13, v13, v13 :: v_dual_max_num_f32 v19, v19, v191214; GFX1250-NEXT:    v_dual_max_num_f32 v12, v12, v12 :: v_dual_max_num_f32 v11, v11, v111215; GFX1250-NEXT:    v_dual_max_num_f32 v21, v21, v21 :: v_dual_max_num_f32 v10, v10, v101216; GFX1250-NEXT:    v_dual_max_num_f32 v9, v9, v9 :: v_dual_max_num_f32 v23, v23, v231217; GFX1250-NEXT:    v_dual_max_num_f32 v8, v8, v8 :: v_dual_max_num_f32 v7, v7, v71218; GFX1250-NEXT:    v_dual_max_num_f32 v25, v25, v25 :: v_dual_max_num_f32 v6, v6, v61219; GFX1250-NEXT:    v_dual_max_num_f32 v26, v26, v26 :: v_dual_max_num_f32 v5, v5, v51220; GFX1250-NEXT:    v_dual_max_num_f32 v27, v27, v27 :: v_dual_max_num_f32 v28, v28, v281221; GFX1250-NEXT:    v_dual_max_num_f32 v29, v29, v29 :: v_dual_max_num_f32 v30, v30, v301222; GFX1250-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v31, v31, v311223; GFX1250-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v2, v2, v21224; GFX1250-NEXT:    v_dual_max_num_f32 v3, v3, v3 :: v_dual_max_num_f32 v4, v4, v41225; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)1226; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v311227; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, v301228; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1229; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v2, v2, v291230; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v3, v3, v281231; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v4, v4, v271232; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v5, v5, v261233; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v6, v6, v251234; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v7, v7, v241235; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v8, v8, v231236; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v9, v9, v221237; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v10, v10, v211238; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v11, v11, v201239; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v12, v12, v191240; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v13, v13, v181241; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v14, v14, v171242; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v15, v15, v161243; GFX1250-NEXT:    s_set_pc_i64 s[30:31]1244  %canonicalized = call <32 x bfloat> @llvm.canonicalize.v32bf16(<32 x bfloat> %val)1245  ret <32 x bfloat> %canonicalized1246}1247 1248define <64 x bfloat> @v_test_canonicalize_var_v64bf16(<64 x bfloat> %val) #1 {1249; GFX1250-LABEL: v_test_canonicalize_var_v64bf16:1250; GFX1250:       ; %bb.0:1251; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x01252; GFX1250-NEXT:    s_wait_kmcnt 0x01253; GFX1250-NEXT:    scratch_load_b32 v31, off, s321254; GFX1250-NEXT:    v_and_b32_e32 v81, 0xffff0000, v01255; GFX1250-NEXT:    v_and_b32_e32 v38, 0xffff0000, v241256; GFX1250-NEXT:    v_lshlrev_b32_e32 v24, 16, v241257; GFX1250-NEXT:    v_and_b32_e32 v39, 0xffff0000, v231258; GFX1250-NEXT:    v_lshlrev_b32_e32 v23, 16, v231259; GFX1250-NEXT:    v_and_b32_e32 v80, 0xffff0000, v61260; GFX1250-NEXT:    v_dual_lshlrev_b32 v0, 16, v0 :: v_dual_lshlrev_b32 v6, 16, v61261; GFX1250-NEXT:    v_and_b32_e32 v82, 0xffff0000, v11262; GFX1250-NEXT:    v_lshlrev_b32_e32 v1, 16, v11263; GFX1250-NEXT:    v_max_num_f32_e32 v81, v81, v811264; GFX1250-NEXT:    v_and_b32_e32 v83, 0xffff0000, v21265; GFX1250-NEXT:    v_lshlrev_b32_e32 v2, 16, v21266; GFX1250-NEXT:    v_and_b32_e32 v34, 0xffff0000, v281267; GFX1250-NEXT:    v_lshlrev_b32_e32 v28, 16, v281268; GFX1250-NEXT:    v_and_b32_e32 v35, 0xffff0000, v271269; GFX1250-NEXT:    v_lshlrev_b32_e32 v27, 16, v271270; GFX1250-NEXT:    v_and_b32_e32 v36, 0xffff0000, v261271; GFX1250-NEXT:    v_lshlrev_b32_e32 v26, 16, v261272; GFX1250-NEXT:    v_and_b32_e32 v48, 0xffff0000, v221273; GFX1250-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v82, v82, v821274; GFX1250-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v83, v83, v831275; GFX1250-NEXT:    v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v24, v24, v241276; GFX1250-NEXT:    v_max_num_f32_e32 v39, v39, v391277; GFX1250-NEXT:    v_dual_max_num_f32 v23, v23, v23 :: v_dual_max_num_f32 v48, v48, v481278; GFX1250-NEXT:    v_and_b32_e32 v32, 0xffff0000, v301279; GFX1250-NEXT:    v_lshlrev_b32_e32 v30, 16, v301280; GFX1250-NEXT:    v_and_b32_e32 v33, 0xffff0000, v291281; GFX1250-NEXT:    v_lshlrev_b32_e32 v29, 16, v291282; GFX1250-NEXT:    v_and_b32_e32 v37, 0xffff0000, v251283; GFX1250-NEXT:    v_dual_lshlrev_b32 v25, 16, v25 :: v_dual_lshlrev_b32 v22, 16, v221284; GFX1250-NEXT:    v_and_b32_e32 v49, 0xffff0000, v211285; GFX1250-NEXT:    v_lshlrev_b32_e32 v21, 16, v211286; GFX1250-NEXT:    v_and_b32_e32 v50, 0xffff0000, v201287; GFX1250-NEXT:    v_lshlrev_b32_e32 v20, 16, v201288; GFX1250-NEXT:    v_and_b32_e32 v51, 0xffff0000, v191289; GFX1250-NEXT:    v_lshlrev_b32_e32 v19, 16, v191290; GFX1250-NEXT:    v_and_b32_e32 v52, 0xffff0000, v181291; GFX1250-NEXT:    v_lshlrev_b32_e32 v18, 16, v181292; GFX1250-NEXT:    v_and_b32_e32 v53, 0xffff0000, v171293; GFX1250-NEXT:    v_lshlrev_b32_e32 v17, 16, v171294; GFX1250-NEXT:    v_and_b32_e32 v54, 0xffff0000, v161295; GFX1250-NEXT:    v_lshlrev_b32_e32 v16, 16, v161296; GFX1250-NEXT:    v_and_b32_e32 v55, 0xffff0000, v151297; GFX1250-NEXT:    v_lshlrev_b32_e32 v15, 16, v151298; GFX1250-NEXT:    v_and_b32_e32 v64, 0xffff0000, v141299; GFX1250-NEXT:    v_lshlrev_b32_e32 v14, 16, v141300; GFX1250-NEXT:    v_and_b32_e32 v65, 0xffff0000, v131301; GFX1250-NEXT:    v_lshlrev_b32_e32 v13, 16, v131302; GFX1250-NEXT:    v_and_b32_e32 v66, 0xffff0000, v121303; GFX1250-NEXT:    v_lshlrev_b32_e32 v12, 16, v121304; GFX1250-NEXT:    v_and_b32_e32 v67, 0xffff0000, v111305; GFX1250-NEXT:    v_lshlrev_b32_e32 v11, 16, v111306; GFX1250-NEXT:    v_and_b32_e32 v68, 0xffff0000, v101307; GFX1250-NEXT:    v_lshlrev_b32_e32 v10, 16, v101308; GFX1250-NEXT:    v_and_b32_e32 v69, 0xffff0000, v91309; GFX1250-NEXT:    v_lshlrev_b32_e32 v9, 16, v91310; GFX1250-NEXT:    v_and_b32_e32 v70, 0xffff0000, v81311; GFX1250-NEXT:    v_lshlrev_b32_e32 v8, 16, v81312; GFX1250-NEXT:    v_and_b32_e32 v71, 0xffff0000, v71313; GFX1250-NEXT:    v_lshlrev_b32_e32 v7, 16, v71314; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v0, v0, v811315; GFX1250-NEXT:    v_and_b32_e32 v81, 0xffff0000, v51316; GFX1250-NEXT:    v_lshlrev_b32_e32 v5, 16, v51317; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v1, v1, v821318; GFX1250-NEXT:    v_and_b32_e32 v82, 0xffff0000, v41319; GFX1250-NEXT:    v_lshlrev_b32_e32 v4, 16, v41320; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v2, v2, v831321; GFX1250-NEXT:    v_and_b32_e32 v83, 0xffff0000, v31322; GFX1250-NEXT:    v_dual_max_num_f32 v32, v32, v32 :: v_dual_lshlrev_b32 v3, 16, v31323; GFX1250-NEXT:    v_dual_max_num_f32 v27, v27, v27 :: v_dual_max_num_f32 v36, v36, v361324; GFX1250-NEXT:    v_dual_max_num_f32 v26, v26, v26 :: v_dual_max_num_f32 v37, v37, v371325; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v23, v23, v391326; GFX1250-NEXT:    v_dual_max_num_f32 v30, v30, v30 :: v_dual_max_num_f32 v33, v33, v331327; GFX1250-NEXT:    v_dual_max_num_f32 v29, v29, v29 :: v_dual_max_num_f32 v34, v34, v341328; GFX1250-NEXT:    v_dual_max_num_f32 v28, v28, v28 :: v_dual_max_num_f32 v35, v35, v351329; GFX1250-NEXT:    v_dual_max_num_f32 v25, v25, v25 :: v_dual_max_num_f32 v38, v38, v381330; GFX1250-NEXT:    v_dual_max_num_f32 v22, v22, v22 :: v_dual_max_num_f32 v49, v49, v491331; GFX1250-NEXT:    v_dual_max_num_f32 v21, v21, v21 :: v_dual_max_num_f32 v50, v50, v501332; GFX1250-NEXT:    v_dual_max_num_f32 v20, v20, v20 :: v_dual_max_num_f32 v51, v51, v511333; GFX1250-NEXT:    v_dual_max_num_f32 v19, v19, v19 :: v_dual_max_num_f32 v52, v52, v521334; GFX1250-NEXT:    v_dual_max_num_f32 v18, v18, v18 :: v_dual_max_num_f32 v53, v53, v531335; GFX1250-NEXT:    v_dual_max_num_f32 v17, v17, v17 :: v_dual_max_num_f32 v54, v54, v541336; GFX1250-NEXT:    v_dual_max_num_f32 v16, v16, v16 :: v_dual_max_num_f32 v55, v55, v551337; GFX1250-NEXT:    v_dual_max_num_f32 v15, v15, v15 :: v_dual_max_num_f32 v64, v64, v641338; GFX1250-NEXT:    v_dual_max_num_f32 v14, v14, v14 :: v_dual_max_num_f32 v65, v65, v651339; GFX1250-NEXT:    v_dual_max_num_f32 v13, v13, v13 :: v_dual_max_num_f32 v66, v66, v661340; GFX1250-NEXT:    v_dual_max_num_f32 v12, v12, v12 :: v_dual_max_num_f32 v67, v67, v671341; GFX1250-NEXT:    v_dual_max_num_f32 v11, v11, v11 :: v_dual_max_num_f32 v68, v68, v681342; GFX1250-NEXT:    v_dual_max_num_f32 v10, v10, v10 :: v_dual_max_num_f32 v69, v69, v691343; GFX1250-NEXT:    v_dual_max_num_f32 v9, v9, v9 :: v_dual_max_num_f32 v70, v70, v701344; GFX1250-NEXT:    v_dual_max_num_f32 v8, v8, v8 :: v_dual_max_num_f32 v71, v71, v711345; GFX1250-NEXT:    v_dual_max_num_f32 v80, v80, v80 :: v_dual_max_num_f32 v81, v81, v811346; GFX1250-NEXT:    v_dual_max_num_f32 v82, v82, v82 :: v_dual_max_num_f32 v83, v83, v831347; GFX1250-NEXT:    v_dual_max_num_f32 v3, v3, v3 :: v_dual_max_num_f32 v4, v4, v41348; GFX1250-NEXT:    v_dual_max_num_f32 v5, v5, v5 :: v_dual_max_num_f32 v6, v6, v61349; GFX1250-NEXT:    v_max_num_f32_e32 v7, v7, v71350; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v26, v26, v361351; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_4)1352; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v3, v3, v831353; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v4, v4, v821354; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v5, v5, v811355; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v6, v6, v801356; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v7, v7, v711357; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v8, v8, v701358; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v9, v9, v691359; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v10, v10, v681360; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v11, v11, v671361; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v12, v12, v661362; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v13, v13, v651363; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v14, v14, v641364; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v15, v15, v551365; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v16, v16, v541366; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v17, v17, v531367; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v18, v18, v521368; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v19, v19, v511369; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v20, v20, v501370; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v21, v21, v491371; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v22, v22, v481372; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v24, v24, v381373; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v25, v25, v371374; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v27, v27, v351375; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v28, v28, v341376; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v29, v29, v331377; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v30, v30, v321378; GFX1250-NEXT:    s_wait_loadcnt 0x01379; GFX1250-NEXT:    v_and_b32_e32 v39, 0xffff0000, v311380; GFX1250-NEXT:    v_lshlrev_b32_e32 v31, 16, v311381; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1382; GFX1250-NEXT:    v_max_num_f32_e32 v36, v39, v391383; GFX1250-NEXT:    v_max_num_f32_e32 v31, v31, v311384; GFX1250-NEXT:    s_delay_alu instid0(VALU_DEP_1)1385; GFX1250-NEXT:    v_cvt_pk_bf16_f32 v31, v31, v361386; GFX1250-NEXT:    s_set_pc_i64 s[30:31]1387  %canonicalized = call <64 x bfloat> @llvm.canonicalize.v64bf16(<64 x bfloat> %val)1388  ret <64 x bfloat> %canonicalized1389}1390 1391attributes #0 = { nounwind readnone }1392attributes #1 = { nounwind "denormal-fp-math-f32"="preserve-sign,preserve-sign" }1393attributes #2 = { nounwind "denormal-fp-math"="preserve-sign,preserve-sign" }1394attributes #3 = { nounwind "denormal-fp-math-f32"="preserve-sign,preserve-sign" }1395