brintos

brintos / llvm-project-archived public Read only

0
0
Text · 147.8 KiB · 956145f Raw
3372 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; FIXME: globalisel crashes on v33; RUN:  llc -mtriple=amdgcn -mcpu=gfx704 < %s  | FileCheck --check-prefixes=GFX7CHECK,GFX7SELDAG %s4; xUN:  llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx704 < %s  | FileCheck --check-prefixes=GFX7CHECK,GFX7GLISEL %s5; RUN:  llc -mtriple=amdgcn -mcpu=gfx803 < %s  | FileCheck --check-prefixes=GFX8CHECK,GFX8SELDAG %s6; xUN:  llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx803 < %s  | FileCheck --check-prefixes=GFX8CHECK,GFX8GLISEL %s7; RUN:  llc -mtriple=amdgcn -mcpu=gfx908 < %s  | FileCheck --check-prefixes=GFX9CHECK,GFX9SELDAG %s8; xUN:  llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx908 < %s  | FileCheck --check-prefixes=GFX9CHECK,GFX9GLISEL %s9; RUN:  llc -mtriple=amdgcn -mcpu=gfx1031 < %s | FileCheck --check-prefixes=GFX10CHECK,GFX10SELDAG %s10; xUN:  llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1031 < %s | FileCheck --check-prefixes=GFX10CHECK,GFX10GLISEL %s11; RUN:  llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -amdgpu-enable-delay-alu=0 < %s | FileCheck --check-prefixes=GFX11CHECK,GFX11SELDAG,GFX11SELDAG-TRUE16 %s12; RUN:  llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -amdgpu-enable-delay-alu=0 < %s | FileCheck --check-prefixes=GFX11CHECK,GFX11SELDAG,GFX11SELDAG-FAKE16 %s13; xUN:  llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -amdgpu-enable-delay-alu=0 < %s | FileCheck --check-prefixes=GFX11CHECK,GFX11GLISEL,GFX11GLISEL-TRUE16 %s14; xUN:  llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -amdgpu-enable-delay-alu=0 < %s | FileCheck --check-prefixes=GFX11CHECK,GFX11GLISEL,GFX11GLISEL-FAKE16 %s15 16define amdgpu_kernel void @sgpr_isnan_bf16(ptr addrspace(1) %out, bfloat %x) {17; GFX7CHECK-LABEL: sgpr_isnan_bf16:18; GFX7CHECK:       ; %bb.0:19; GFX7CHECK-NEXT:    s_load_dword s6, s[4:5], 0xb20; GFX7CHECK-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x921; GFX7CHECK-NEXT:    s_mov_b32 s3, 0xf00022; GFX7CHECK-NEXT:    s_mov_b32 s2, -123; GFX7CHECK-NEXT:    s_waitcnt lgkmcnt(0)24; GFX7CHECK-NEXT:    s_and_b32 s4, s6, 0x7fff25; GFX7CHECK-NEXT:    s_cmpk_gt_i32 s4, 0x7f8026; GFX7CHECK-NEXT:    s_cselect_b64 s[4:5], -1, 027; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, -1, s[4:5]28; GFX7CHECK-NEXT:    buffer_store_dword v0, off, s[0:3], 029; GFX7CHECK-NEXT:    s_endpgm30;31; GFX8CHECK-LABEL: sgpr_isnan_bf16:32; GFX8CHECK:       ; %bb.0:33; GFX8CHECK-NEXT:    s_load_dword s2, s[4:5], 0x2c34; GFX8CHECK-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2435; GFX8CHECK-NEXT:    s_waitcnt lgkmcnt(0)36; GFX8CHECK-NEXT:    s_and_b32 s2, s2, 0x7fff37; GFX8CHECK-NEXT:    s_cmpk_gt_i32 s2, 0x7f8038; GFX8CHECK-NEXT:    s_cselect_b64 s[2:3], -1, 039; GFX8CHECK-NEXT:    v_mov_b32_e32 v0, s040; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, -1, s[2:3]41; GFX8CHECK-NEXT:    v_mov_b32_e32 v1, s142; GFX8CHECK-NEXT:    flat_store_dword v[0:1], v243; GFX8CHECK-NEXT:    s_endpgm44;45; GFX9CHECK-LABEL: sgpr_isnan_bf16:46; GFX9CHECK:       ; %bb.0:47; GFX9CHECK-NEXT:    s_load_dword s2, s[4:5], 0x2c48; GFX9CHECK-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2449; GFX9CHECK-NEXT:    v_mov_b32_e32 v0, 050; GFX9CHECK-NEXT:    s_waitcnt lgkmcnt(0)51; GFX9CHECK-NEXT:    s_and_b32 s2, s2, 0x7fff52; GFX9CHECK-NEXT:    s_cmpk_gt_i32 s2, 0x7f8053; GFX9CHECK-NEXT:    s_cselect_b64 s[2:3], -1, 054; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, -1, s[2:3]55; GFX9CHECK-NEXT:    global_store_dword v0, v1, s[0:1]56; GFX9CHECK-NEXT:    s_endpgm57;58; GFX10CHECK-LABEL: sgpr_isnan_bf16:59; GFX10CHECK:       ; %bb.0:60; GFX10CHECK-NEXT:    s_clause 0x161; GFX10CHECK-NEXT:    s_load_dword s2, s[4:5], 0x2c62; GFX10CHECK-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2463; GFX10CHECK-NEXT:    v_mov_b32_e32 v0, 064; GFX10CHECK-NEXT:    s_waitcnt lgkmcnt(0)65; GFX10CHECK-NEXT:    s_and_b32 s2, s2, 0x7fff66; GFX10CHECK-NEXT:    s_cmpk_gt_i32 s2, 0x7f8067; GFX10CHECK-NEXT:    s_cselect_b32 s2, -1, 068; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, -1, s269; GFX10CHECK-NEXT:    global_store_dword v0, v1, s[0:1]70; GFX10CHECK-NEXT:    s_endpgm71;72; GFX11CHECK-LABEL: sgpr_isnan_bf16:73; GFX11CHECK:       ; %bb.0:74; GFX11CHECK-NEXT:    s_clause 0x175; GFX11CHECK-NEXT:    s_load_b32 s2, s[4:5], 0x2c76; GFX11CHECK-NEXT:    s_load_b64 s[0:1], s[4:5], 0x2477; GFX11CHECK-NEXT:    v_mov_b32_e32 v0, 078; GFX11CHECK-NEXT:    s_waitcnt lgkmcnt(0)79; GFX11CHECK-NEXT:    s_and_b32 s2, s2, 0x7fff80; GFX11CHECK-NEXT:    s_cmpk_gt_i32 s2, 0x7f8081; GFX11CHECK-NEXT:    s_cselect_b32 s2, -1, 082; GFX11CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, -1, s283; GFX11CHECK-NEXT:    global_store_b32 v0, v1, s[0:1]84; GFX11CHECK-NEXT:    s_endpgm85  %result = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 3)86  %sext = sext i1 %result to i3287  store i32 %sext, ptr addrspace(1) %out, align 488  ret void89}90 91define i1 @zeromask_bf16(bfloat %x) nounwind {92; GFX7CHECK-LABEL: zeromask_bf16:93; GFX7CHECK:       ; %bb.0:94; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)95; GFX7CHECK-NEXT:    v_mov_b32_e32 v0, 096; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]97;98; GFX8CHECK-LABEL: zeromask_bf16:99; GFX8CHECK:       ; %bb.0:100; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)101; GFX8CHECK-NEXT:    v_mov_b32_e32 v0, 0102; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]103;104; GFX9CHECK-LABEL: zeromask_bf16:105; GFX9CHECK:       ; %bb.0:106; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)107; GFX9CHECK-NEXT:    v_mov_b32_e32 v0, 0108; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]109;110; GFX10CHECK-LABEL: zeromask_bf16:111; GFX10CHECK:       ; %bb.0:112; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)113; GFX10CHECK-NEXT:    v_mov_b32_e32 v0, 0114; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]115;116; GFX11CHECK-LABEL: zeromask_bf16:117; GFX11CHECK:       ; %bb.0:118; GFX11CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)119; GFX11CHECK-NEXT:    v_mov_b32_e32 v0, 0120; GFX11CHECK-NEXT:    s_setpc_b64 s[30:31]121  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 0)122  ret i1 %1123}124 125; FIXME: DAG and GlobalISel return different values for i1 true126define i1 @allflags_bf16(bfloat %x) nounwind {127; GFX7CHECK-LABEL: allflags_bf16:128; GFX7CHECK:       ; %bb.0:129; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)130; GFX7CHECK-NEXT:    v_mov_b32_e32 v0, 1131; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]132;133; GFX8CHECK-LABEL: allflags_bf16:134; GFX8CHECK:       ; %bb.0:135; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)136; GFX8CHECK-NEXT:    v_mov_b32_e32 v0, 1137; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]138;139; GFX9CHECK-LABEL: allflags_bf16:140; GFX9CHECK:       ; %bb.0:141; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)142; GFX9CHECK-NEXT:    v_mov_b32_e32 v0, 1143; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]144;145; GFX10CHECK-LABEL: allflags_bf16:146; GFX10CHECK:       ; %bb.0:147; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)148; GFX10CHECK-NEXT:    v_mov_b32_e32 v0, 1149; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]150;151; GFX11CHECK-LABEL: allflags_bf16:152; GFX11CHECK:       ; %bb.0:153; GFX11CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)154; GFX11CHECK-NEXT:    v_mov_b32_e32 v0, 1155; GFX11CHECK-NEXT:    s_setpc_b64 s[30:31]156  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 1023) ; 0x3ff157  ret i1 %1158}159 160define i1 @snan_bf16(bfloat %x) nounwind {161; GFX7CHECK-LABEL: snan_bf16:162; GFX7CHECK:       ; %bb.0:163; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)164; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0165; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 15166; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7fc0167; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, s4, v0168; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f80169; GFX7CHECK-NEXT:    v_cmp_lt_i32_e64 s[4:5], s4, v0170; GFX7CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc171; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]172; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]173;174; GFX8CHECK-LABEL: snan_bf16:175; GFX8CHECK:       ; %bb.0:176; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)177; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0178; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7fc0179; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v0180; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f80181; GFX8CHECK-NEXT:    v_cmp_lt_i16_e64 s[4:5], s4, v0182; GFX8CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc183; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]184; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]185;186; GFX9CHECK-LABEL: snan_bf16:187; GFX9CHECK:       ; %bb.0:188; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)189; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0190; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7fc0191; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v0192; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f80193; GFX9CHECK-NEXT:    v_cmp_lt_i16_e64 s[4:5], s4, v0194; GFX9CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc195; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]196; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]197;198; GFX10CHECK-LABEL: snan_bf16:199; GFX10CHECK:       ; %bb.0:200; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)201; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0202; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7fc0, v0203; GFX10CHECK-NEXT:    v_cmp_lt_i16_e64 s4, 0x7f80, v0204; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo205; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s4206; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]207;208; GFX11SELDAG-TRUE16-LABEL: snan_bf16:209; GFX11SELDAG-TRUE16:       ; %bb.0:210; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)211; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l212; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7fc0, v0.l213; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e64 s0, 0x7f80, v0.l214; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo215; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0216; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]217;218; GFX11SELDAG-FAKE16-LABEL: snan_bf16:219; GFX11SELDAG-FAKE16:       ; %bb.0:220; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)221; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v0222; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7fc0, v0223; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e64 s0, 0x7f80, v0224; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo225; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0226; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]227  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 1)  ; 0x001228  ret i1 %1229}230 231define i1 @qnan_bf16(bfloat %x) nounwind {232; GFX7CHECK-LABEL: qnan_bf16:233; GFX7CHECK:       ; %bb.0:234; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)235; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0236; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 15237; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7fbf238; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v0239; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc240; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]241;242; GFX8CHECK-LABEL: qnan_bf16:243; GFX8CHECK:       ; %bb.0:244; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)245; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0246; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7fbf247; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v0248; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc249; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]250;251; GFX9CHECK-LABEL: qnan_bf16:252; GFX9CHECK:       ; %bb.0:253; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)254; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0255; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7fbf256; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v0257; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc258; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]259;260; GFX10CHECK-LABEL: qnan_bf16:261; GFX10CHECK:       ; %bb.0:262; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)263; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0264; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7fbf, v0265; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo266; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]267;268; GFX11SELDAG-TRUE16-LABEL: qnan_bf16:269; GFX11SELDAG-TRUE16:       ; %bb.0:270; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)271; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l272; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7fbf, v0.l273; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo274; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]275;276; GFX11SELDAG-FAKE16-LABEL: qnan_bf16:277; GFX11SELDAG-FAKE16:       ; %bb.0:278; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)279; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v0280; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7fbf, v0281; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo282; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]283  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 2)  ; 0x002284  ret i1 %1285}286 287define i1 @posinf_bf16(bfloat %x) nounwind {288; GFX7CHECK-LABEL: posinf_bf16:289; GFX7CHECK:       ; %bb.0:290; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)291; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0292; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v0, 16, v0293; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f80294; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, s4, v0295; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc296; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]297;298; GFX8CHECK-LABEL: posinf_bf16:299; GFX8CHECK:       ; %bb.0:300; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)301; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f80302; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v0303; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc304; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]305;306; GFX9CHECK-LABEL: posinf_bf16:307; GFX9CHECK:       ; %bb.0:308; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)309; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f80310; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v0311; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc312; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]313;314; GFX10CHECK-LABEL: posinf_bf16:315; GFX10CHECK:       ; %bb.0:316; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)317; GFX10CHECK-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v0318; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo319; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]320;321; GFX11SELDAG-TRUE16-LABEL: posinf_bf16:322; GFX11SELDAG-TRUE16:       ; %bb.0:323; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)324; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v0.l325; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo326; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]327;328; GFX11SELDAG-FAKE16-LABEL: posinf_bf16:329; GFX11SELDAG-FAKE16:       ; %bb.0:330; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)331; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v0332; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo333; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]334  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 512)  ; 0x200335  ret i1 %1336}337 338define i1 @neginf_bf16(bfloat %x) nounwind {339; GFX7CHECK-LABEL: neginf_bf16:340; GFX7CHECK:       ; %bb.0:341; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)342; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0343; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v0, 16, v0344; GFX7CHECK-NEXT:    s_mov_b32 s4, 0xff80345; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, s4, v0346; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc347; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]348;349; GFX8CHECK-LABEL: neginf_bf16:350; GFX8CHECK:       ; %bb.0:351; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)352; GFX8CHECK-NEXT:    s_movk_i32 s4, 0xff80353; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v0354; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc355; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]356;357; GFX9CHECK-LABEL: neginf_bf16:358; GFX9CHECK:       ; %bb.0:359; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)360; GFX9CHECK-NEXT:    s_movk_i32 s4, 0xff80361; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v0362; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc363; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]364;365; GFX10CHECK-LABEL: neginf_bf16:366; GFX10CHECK:       ; %bb.0:367; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)368; GFX10CHECK-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0xff80, v0369; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo370; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]371;372; GFX11SELDAG-TRUE16-LABEL: neginf_bf16:373; GFX11SELDAG-TRUE16:       ; %bb.0:374; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)375; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0xff80, v0.l376; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo377; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]378;379; GFX11SELDAG-FAKE16-LABEL: neginf_bf16:380; GFX11SELDAG-FAKE16:       ; %bb.0:381; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)382; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0xff80, v0383; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo384; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]385  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 4)  ; 0x004386  ret i1 %1387}388 389define i1 @posnormal_bf16(bfloat %x) nounwind {390; GFX7CHECK-LABEL: posnormal_bf16:391; GFX7CHECK:       ; %bb.0:392; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)393; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0394; GFX7CHECK-NEXT:    v_ashrrev_i32_e32 v1, 16, v0395; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 15396; GFX7CHECK-NEXT:    v_add_i32_e32 v0, vcc, 0xffffff80, v0397; GFX7CHECK-NEXT:    v_and_b32_e32 v0, 0xffff, v0398; GFX7CHECK-NEXT:    s_movk_i32 s6, 0x7f00399; GFX7CHECK-NEXT:    v_cmp_lt_i32_e64 s[4:5], -1, v1400; GFX7CHECK-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v0401; GFX7CHECK-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]402; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]403; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]404;405; GFX8CHECK-LABEL: posnormal_bf16:406; GFX8CHECK:       ; %bb.0:407; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)408; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, -1, v0409; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0410; GFX8CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v0411; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f00412; GFX8CHECK-NEXT:    v_cmp_gt_u16_e64 s[4:5], s4, v0413; GFX8CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc414; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]415; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]416;417; GFX9CHECK-LABEL: posnormal_bf16:418; GFX9CHECK:       ; %bb.0:419; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)420; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, -1, v0421; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0422; GFX9CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v0423; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f00424; GFX9CHECK-NEXT:    v_cmp_gt_u16_e64 s[4:5], s4, v0425; GFX9CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc426; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]427; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]428;429; GFX10CHECK-LABEL: posnormal_bf16:430; GFX10CHECK:       ; %bb.0:431; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)432; GFX10CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v0433; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, -1, v0434; GFX10CHECK-NEXT:    v_add_nc_u16 v1, 0xff80, v1435; GFX10CHECK-NEXT:    v_cmp_gt_u16_e64 s4, 0x7f00, v1436; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo437; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s4438; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]439;440; GFX11SELDAG-TRUE16-LABEL: posnormal_bf16:441; GFX11SELDAG-TRUE16:       ; %bb.0:442; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)443; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.h, 0x7fff, v0.l444; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, -1, v0.l445; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.h, 0xff80, v0.h446; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e64 s0, 0x7f00, v0.h447; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo448; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0449; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]450;451; GFX11SELDAG-FAKE16-LABEL: posnormal_bf16:452; GFX11SELDAG-FAKE16:       ; %bb.0:453; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)454; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff, v0455; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, -1, v0456; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v1, 0xff80, v1457; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e64 s0, 0x7f00, v1458; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo459; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0460; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]461  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 256)  ; 0x100462  ret i1 %1463}464 465define i1 @negnormal_bf16(bfloat %x) nounwind {466; GFX7CHECK-LABEL: negnormal_bf16:467; GFX7CHECK:       ; %bb.0:468; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)469; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0470; GFX7CHECK-NEXT:    v_ashrrev_i32_e32 v1, 16, v0471; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 15472; GFX7CHECK-NEXT:    v_add_i32_e32 v0, vcc, 0xffffff80, v0473; GFX7CHECK-NEXT:    v_and_b32_e32 v0, 0xffff, v0474; GFX7CHECK-NEXT:    s_movk_i32 s6, 0x7f00475; GFX7CHECK-NEXT:    v_cmp_gt_i32_e64 s[4:5], 0, v1476; GFX7CHECK-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v0477; GFX7CHECK-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]478; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]479; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]480;481; GFX8CHECK-LABEL: negnormal_bf16:482; GFX8CHECK:       ; %bb.0:483; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)484; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v0485; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0486; GFX8CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v0487; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f00488; GFX8CHECK-NEXT:    v_cmp_gt_u16_e64 s[4:5], s4, v0489; GFX8CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc490; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]491; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]492;493; GFX9CHECK-LABEL: negnormal_bf16:494; GFX9CHECK:       ; %bb.0:495; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)496; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v0497; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0498; GFX9CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v0499; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f00500; GFX9CHECK-NEXT:    v_cmp_gt_u16_e64 s[4:5], s4, v0501; GFX9CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc502; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]503; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]504;505; GFX10CHECK-LABEL: negnormal_bf16:506; GFX10CHECK:       ; %bb.0:507; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)508; GFX10CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v0509; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0510; GFX10CHECK-NEXT:    v_add_nc_u16 v1, 0xff80, v1511; GFX10CHECK-NEXT:    v_cmp_gt_u16_e64 s4, 0x7f00, v1512; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo513; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s4514; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]515;516; GFX11SELDAG-TRUE16-LABEL: negnormal_bf16:517; GFX11SELDAG-TRUE16:       ; %bb.0:518; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)519; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.h, 0x7fff, v0.l520; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0.l521; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.h, 0xff80, v0.h522; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e64 s0, 0x7f00, v0.h523; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo524; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0525; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]526;527; GFX11SELDAG-FAKE16-LABEL: negnormal_bf16:528; GFX11SELDAG-FAKE16:       ; %bb.0:529; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)530; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff, v0531; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0532; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v1, 0xff80, v1533; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e64 s0, 0x7f00, v1534; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo535; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0536; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]537  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 8)  ; 0x008538  ret i1 %1539}540 541define i1 @possubnormal_bf16(bfloat %x) nounwind {542; GFX7CHECK-LABEL: possubnormal_bf16:543; GFX7CHECK:       ; %bb.0:544; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)545; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0546; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v0, 16, v0547; GFX7CHECK-NEXT:    v_add_i32_e32 v0, vcc, -1, v0548; GFX7CHECK-NEXT:    v_and_b32_e32 v0, 0xffff, v0549; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f550; GFX7CHECK-NEXT:    v_cmp_gt_u32_e32 vcc, s4, v0551; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc552; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]553;554; GFX8CHECK-LABEL: possubnormal_bf16:555; GFX8CHECK:       ; %bb.0:556; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)557; GFX8CHECK-NEXT:    v_add_u16_e32 v0, -1, v0558; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f559; GFX8CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v0560; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc561; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]562;563; GFX9CHECK-LABEL: possubnormal_bf16:564; GFX9CHECK:       ; %bb.0:565; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)566; GFX9CHECK-NEXT:    v_add_u16_e32 v0, -1, v0567; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f568; GFX9CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v0569; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc570; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]571;572; GFX10CHECK-LABEL: possubnormal_bf16:573; GFX10CHECK:       ; %bb.0:574; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)575; GFX10CHECK-NEXT:    v_add_nc_u16 v0, v0, -1576; GFX10CHECK-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f, v0577; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo578; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]579;580; GFX11SELDAG-TRUE16-LABEL: possubnormal_bf16:581; GFX11SELDAG-TRUE16:       ; %bb.0:582; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)583; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.l, v0.l, -1584; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f, v0.l585; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo586; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]587;588; GFX11SELDAG-FAKE16-LABEL: possubnormal_bf16:589; GFX11SELDAG-FAKE16:       ; %bb.0:590; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)591; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v0, v0, -1592; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f, v0593; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo594; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]595  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 128)  ; 0x080596  ret i1 %1597}598 599define i1 @negsubnormal_bf16(bfloat %x) nounwind {600; GFX7CHECK-LABEL: negsubnormal_bf16:601; GFX7CHECK:       ; %bb.0:602; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)603; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0604; GFX7CHECK-NEXT:    v_ashrrev_i32_e32 v1, 16, v0605; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 15606; GFX7CHECK-NEXT:    v_add_i32_e64 v0, s[4:5], -1, v0607; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f608; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, 0, v1609; GFX7CHECK-NEXT:    v_cmp_gt_u32_e64 s[4:5], s4, v0610; GFX7CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc611; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]612; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]613;614; GFX8CHECK-LABEL: negsubnormal_bf16:615; GFX8CHECK:       ; %bb.0:616; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)617; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v0618; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0619; GFX8CHECK-NEXT:    v_add_u16_e32 v0, -1, v0620; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f621; GFX8CHECK-NEXT:    v_cmp_gt_u16_e64 s[4:5], s4, v0622; GFX8CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc623; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]624; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]625;626; GFX9CHECK-LABEL: negsubnormal_bf16:627; GFX9CHECK:       ; %bb.0:628; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)629; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v0630; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0631; GFX9CHECK-NEXT:    v_add_u16_e32 v0, -1, v0632; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f633; GFX9CHECK-NEXT:    v_cmp_gt_u16_e64 s[4:5], s4, v0634; GFX9CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc635; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]636; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]637;638; GFX10CHECK-LABEL: negsubnormal_bf16:639; GFX10CHECK:       ; %bb.0:640; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)641; GFX10CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v0642; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0643; GFX10CHECK-NEXT:    v_add_nc_u16 v1, v1, -1644; GFX10CHECK-NEXT:    v_cmp_gt_u16_e64 s4, 0x7f, v1645; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo646; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s4647; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]648;649; GFX11SELDAG-TRUE16-LABEL: negsubnormal_bf16:650; GFX11SELDAG-TRUE16:       ; %bb.0:651; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)652; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.h, 0x7fff, v0.l653; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0.l654; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.h, v0.h, -1655; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e64 s0, 0x7f, v0.h656; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo657; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0658; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]659;660; GFX11SELDAG-FAKE16-LABEL: negsubnormal_bf16:661; GFX11SELDAG-FAKE16:       ; %bb.0:662; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)663; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff, v0664; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0665; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v1, v1, -1666; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e64 s0, 0x7f, v1667; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo668; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0669; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]670  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 16)  ; 0x010671  ret i1 %1672}673 674define i1 @poszero_bf16(bfloat %x) nounwind {675; GFX7CHECK-LABEL: poszero_bf16:676; GFX7CHECK:       ; %bb.0:677; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)678; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0679; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v0, 16, v0680; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0681; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc682; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]683;684; GFX8CHECK-LABEL: poszero_bf16:685; GFX8CHECK:       ; %bb.0:686; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)687; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v0688; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc689; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]690;691; GFX9CHECK-LABEL: poszero_bf16:692; GFX9CHECK:       ; %bb.0:693; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)694; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v0695; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc696; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]697;698; GFX10CHECK-LABEL: poszero_bf16:699; GFX10CHECK:       ; %bb.0:700; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)701; GFX10CHECK-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v0702; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo703; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]704;705; GFX11SELDAG-TRUE16-LABEL: poszero_bf16:706; GFX11SELDAG-TRUE16:       ; %bb.0:707; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)708; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v0.l709; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo710; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]711;712; GFX11SELDAG-FAKE16-LABEL: poszero_bf16:713; GFX11SELDAG-FAKE16:       ; %bb.0:714; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)715; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v0716; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo717; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]718  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 64)  ; 0x040719  ret i1 %1720}721 722define i1 @negzero_bf16(bfloat %x) nounwind {723; GFX7CHECK-LABEL: negzero_bf16:724; GFX7CHECK:       ; %bb.0:725; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)726; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0727; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v0, 16, v0728; GFX7CHECK-NEXT:    s_mov_b32 s4, 0x8000729; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, s4, v0730; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc731; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]732;733; GFX8CHECK-LABEL: negzero_bf16:734; GFX8CHECK:       ; %bb.0:735; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)736; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x8000737; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v0738; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc739; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]740;741; GFX9CHECK-LABEL: negzero_bf16:742; GFX9CHECK:       ; %bb.0:743; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)744; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x8000745; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v0746; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc747; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]748;749; GFX10CHECK-LABEL: negzero_bf16:750; GFX10CHECK:       ; %bb.0:751; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)752; GFX10CHECK-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0753; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo754; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]755;756; GFX11SELDAG-TRUE16-LABEL: negzero_bf16:757; GFX11SELDAG-TRUE16:       ; %bb.0:758; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)759; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0.l760; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo761; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]762;763; GFX11SELDAG-FAKE16-LABEL: negzero_bf16:764; GFX11SELDAG-FAKE16:       ; %bb.0:765; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)766; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0767; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo768; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]769  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 32)  ; 0x020770  ret i1 %1771}772 773define i1 @posfinite_bf16(bfloat %x) nounwind {774; GFX7CHECK-LABEL: posfinite_bf16:775; GFX7CHECK:       ; %bb.0:776; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)777; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0778; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v0, 16, v0779; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f80780; GFX7CHECK-NEXT:    v_cmp_gt_u32_e32 vcc, s4, v0781; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc782; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]783;784; GFX8CHECK-LABEL: posfinite_bf16:785; GFX8CHECK:       ; %bb.0:786; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)787; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f80788; GFX8CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v0789; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc790; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]791;792; GFX9CHECK-LABEL: posfinite_bf16:793; GFX9CHECK:       ; %bb.0:794; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)795; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f80796; GFX9CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v0797; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc798; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]799;800; GFX10CHECK-LABEL: posfinite_bf16:801; GFX10CHECK:       ; %bb.0:802; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)803; GFX10CHECK-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f80, v0804; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo805; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]806;807; GFX11SELDAG-TRUE16-LABEL: posfinite_bf16:808; GFX11SELDAG-TRUE16:       ; %bb.0:809; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)810; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f80, v0.l811; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo812; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]813;814; GFX11SELDAG-FAKE16-LABEL: posfinite_bf16:815; GFX11SELDAG-FAKE16:       ; %bb.0:816; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)817; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f80, v0818; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo819; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]820  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 448)  ; 0x1c0821  ret i1 %1822}823 824define i1 @negfinite_bf16(bfloat %x) nounwind {825; GFX7CHECK-LABEL: negfinite_bf16:826; GFX7CHECK:       ; %bb.0:827; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)828; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0829; GFX7CHECK-NEXT:    v_ashrrev_i32_e32 v1, 16, v0830; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 15831; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f80832; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, 0, v1833; GFX7CHECK-NEXT:    v_cmp_gt_i32_e64 s[4:5], s4, v0834; GFX7CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc835; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]836; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]837;838; GFX8CHECK-LABEL: negfinite_bf16:839; GFX8CHECK:       ; %bb.0:840; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)841; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v0842; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0843; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f80844; GFX8CHECK-NEXT:    v_cmp_gt_i16_e64 s[4:5], s4, v0845; GFX8CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc846; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]847; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]848;849; GFX9CHECK-LABEL: negfinite_bf16:850; GFX9CHECK:       ; %bb.0:851; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)852; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v0853; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0854; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f80855; GFX9CHECK-NEXT:    v_cmp_gt_i16_e64 s[4:5], s4, v0856; GFX9CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc857; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]858; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]859;860; GFX10CHECK-LABEL: negfinite_bf16:861; GFX10CHECK:       ; %bb.0:862; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)863; GFX10CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v0864; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0865; GFX10CHECK-NEXT:    v_cmp_gt_i16_e64 s4, 0x7f80, v1866; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo867; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s4868; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]869;870; GFX11SELDAG-TRUE16-LABEL: negfinite_bf16:871; GFX11SELDAG-TRUE16:       ; %bb.0:872; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)873; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.h, 0x7fff, v0.l874; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0.l875; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e64 s0, 0x7f80, v0.h876; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo877; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0878; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]879;880; GFX11SELDAG-FAKE16-LABEL: negfinite_bf16:881; GFX11SELDAG-FAKE16:       ; %bb.0:882; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)883; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff, v0884; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0885; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e64 s0, 0x7f80, v1886; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo887; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0888; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]889  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 56)  ; 0x038890  ret i1 %1891}892 893define i1 @isnan_bf16(bfloat %x) nounwind {894; GFX7CHECK-LABEL: isnan_bf16:895; GFX7CHECK:       ; %bb.0:896; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)897; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0898; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 15899; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f80900; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v0901; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc902; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]903;904; GFX8CHECK-LABEL: isnan_bf16:905; GFX8CHECK:       ; %bb.0:906; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)907; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0908; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f80909; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v0910; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc911; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]912;913; GFX9CHECK-LABEL: isnan_bf16:914; GFX9CHECK:       ; %bb.0:915; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)916; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0917; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f80918; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v0919; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc920; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]921;922; GFX10CHECK-LABEL: isnan_bf16:923; GFX10CHECK:       ; %bb.0:924; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)925; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0926; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v0927; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo928; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]929;930; GFX11SELDAG-TRUE16-LABEL: isnan_bf16:931; GFX11SELDAG-TRUE16:       ; %bb.0:932; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)933; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l934; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v0.l935; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo936; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]937;938; GFX11SELDAG-FAKE16-LABEL: isnan_bf16:939; GFX11SELDAG-FAKE16:       ; %bb.0:940; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)941; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v0942; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v0943; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo944; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]945  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 3)  ; nan946  ret i1 %1947}948 949define i1 @not_isnan_bf16(bfloat %x) {950; GFX7CHECK-LABEL: not_isnan_bf16:951; GFX7CHECK:       ; %bb.0:952; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)953; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v0954; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 15955; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f81956; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, s4, v0957; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc958; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]959;960; GFX8CHECK-LABEL: not_isnan_bf16:961; GFX8CHECK:       ; %bb.0:962; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)963; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0964; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f81965; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v0966; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc967; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]968;969; GFX9CHECK-LABEL: not_isnan_bf16:970; GFX9CHECK:       ; %bb.0:971; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)972; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0973; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f81974; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v0975; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc976; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]977;978; GFX10CHECK-LABEL: not_isnan_bf16:979; GFX10CHECK:       ; %bb.0:980; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)981; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v0982; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v0983; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo984; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]985;986; GFX11SELDAG-TRUE16-LABEL: not_isnan_bf16:987; GFX11SELDAG-TRUE16:       ; %bb.0:988; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)989; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l990; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v0.l991; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo992; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]993;994; GFX11SELDAG-FAKE16-LABEL: not_isnan_bf16:995; GFX11SELDAG-FAKE16:       ; %bb.0:996; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)997; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v0998; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v0999; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1000; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1001  %class = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 1020)  ; ~nan1002  ret i1 %class1003}1004 1005define <2 x i1> @isnan_v2bf16(<2 x bfloat> %x) nounwind {1006; GFX7CHECK-LABEL: isnan_v2bf16:1007; GFX7CHECK:       ; %bb.0:1008; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1009; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01010; GFX7CHECK-NEXT:    v_mul_f32_e32 v1, 1.0, v11011; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f801012; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151013; GFX7CHECK-NEXT:    v_bfe_u32 v1, v1, 16, 151014; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v01015; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1016; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v11017; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc1018; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1019;1020; GFX8CHECK-LABEL: isnan_v2bf16:1021; GFX8CHECK:       ; %bb.0:1022; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1023; GFX8CHECK-NEXT:    v_bfe_u32 v1, v0, 16, 151024; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f801025; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v01026; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v01027; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1028; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v11029; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc1030; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1031;1032; GFX9CHECK-LABEL: isnan_v2bf16:1033; GFX9CHECK:       ; %bb.0:1034; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1035; GFX9CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v01036; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f801037; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v11038; GFX9CHECK-NEXT:    v_cmp_gt_i16_sdwa s[4:5], v1, s4 src0_sel:WORD_1 src1_sel:DWORD1039; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1040; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, s[4:5]1041; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1042;1043; GFX10CHECK-LABEL: isnan_v2bf16:1044; GFX10CHECK:       ; %bb.0:1045; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1046; GFX10CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v01047; GFX10CHECK-NEXT:    v_mov_b32_e32 v2, 0x7f801048; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v11049; GFX10CHECK-NEXT:    v_cmp_gt_i16_sdwa s4, v1, v2 src0_sel:WORD_1 src1_sel:DWORD1050; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1051; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, s41052; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1053;1054; GFX11SELDAG-TRUE16-LABEL: isnan_v2bf16:1055; GFX11SELDAG-TRUE16:       ; %bb.0:1056; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1057; GFX11SELDAG-TRUE16-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v01058; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v1.l1059; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1060; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v1.h1061; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc_lo1062; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1063;1064; GFX11SELDAG-FAKE16-LABEL: isnan_v2bf16:1065; GFX11SELDAG-FAKE16:       ; %bb.0:1066; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1067; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v01068; GFX11SELDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v01069; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v01070; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1071; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v11072; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc_lo1073; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1074  %1 = call <2 x i1> @llvm.is.fpclass.v2bf16(<2 x bfloat> %x, i32 3)  ; nan1075  ret <2 x i1> %11076}1077 1078define <3 x i1> @isnan_v3bf16(<3 x bfloat> %x) nounwind {1079; GFX7CHECK-LABEL: isnan_v3bf16:1080; GFX7CHECK:       ; %bb.0:1081; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1082; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01083; GFX7CHECK-NEXT:    v_mul_f32_e32 v1, 1.0, v11084; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f801085; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151086; GFX7CHECK-NEXT:    v_mul_f32_e32 v2, 1.0, v21087; GFX7CHECK-NEXT:    v_bfe_u32 v1, v1, 16, 151088; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v01089; GFX7CHECK-NEXT:    v_bfe_u32 v2, v2, 16, 151090; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1091; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v11092; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc1093; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v21094; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc1095; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1096;1097; GFX8CHECK-LABEL: isnan_v3bf16:1098; GFX8CHECK:       ; %bb.0:1099; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1100; GFX8CHECK-NEXT:    v_and_b32_e32 v2, 0x7fff, v11101; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f801102; GFX8CHECK-NEXT:    v_bfe_u32 v1, v0, 16, 151103; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v01104; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v01105; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1106; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v11107; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc1108; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v21109; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc1110; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1111;1112; GFX9CHECK-LABEL: isnan_v3bf16:1113; GFX9CHECK:       ; %bb.0:1114; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1115; GFX9CHECK-NEXT:    v_and_b32_e32 v3, 0x7fff7fff, v01116; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f801117; GFX9CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v11118; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v31119; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1120; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v11121; GFX9CHECK-NEXT:    v_cmp_gt_i16_sdwa s[4:5], v3, s4 src0_sel:WORD_1 src1_sel:DWORD1122; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc1123; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, s[4:5]1124; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1125;1126; GFX10CHECK-LABEL: isnan_v3bf16:1127; GFX10CHECK:       ; %bb.0:1128; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1129; GFX10CHECK-NEXT:    v_and_b32_e32 v2, 0x7fff7fff, v01130; GFX10CHECK-NEXT:    v_mov_b32_e32 v3, 0x7f801131; GFX10CHECK-NEXT:    v_and_b32_e32 v4, 0x7fff, v11132; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v21133; GFX10CHECK-NEXT:    v_cmp_gt_i16_sdwa s4, v2, v3 src0_sel:WORD_1 src1_sel:DWORD1134; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1135; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v41136; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, s41137; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc_lo1138; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1139;1140; GFX11SELDAG-TRUE16-LABEL: isnan_v3bf16:1141; GFX11SELDAG-TRUE16:       ; %bb.0:1142; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1143; GFX11SELDAG-TRUE16-NEXT:    v_and_b32_e32 v2, 0x7fff7fff, v01144; GFX11SELDAG-TRUE16-NEXT:    v_and_b32_e32 v3, 0x7fff, v11145; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v2.l1146; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1147; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v2.h1148; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc_lo1149; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v3.l1150; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc_lo1151; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1152;1153; GFX11SELDAG-FAKE16-LABEL: isnan_v3bf16:1154; GFX11SELDAG-FAKE16:       ; %bb.0:1155; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1156; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v01157; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v3, 0x7fff, v11158; GFX11SELDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v01159; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v01160; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1161; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v21162; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc_lo1163; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v31164; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc_lo1165; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1166  %1 = call <3 x i1> @llvm.is.fpclass.v3bf16(<3 x bfloat> %x, i32 3)  ; nan1167  ret <3 x i1> %11168}1169 1170define <4 x i1> @isnan_v4bf16(<4 x bfloat> %x) nounwind {1171; GFX7CHECK-LABEL: isnan_v4bf16:1172; GFX7CHECK:       ; %bb.0:1173; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1174; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01175; GFX7CHECK-NEXT:    v_mul_f32_e32 v1, 1.0, v11176; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f801177; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151178; GFX7CHECK-NEXT:    v_mul_f32_e32 v2, 1.0, v21179; GFX7CHECK-NEXT:    v_bfe_u32 v1, v1, 16, 151180; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v01181; GFX7CHECK-NEXT:    v_mul_f32_e32 v3, 1.0, v31182; GFX7CHECK-NEXT:    v_bfe_u32 v2, v2, 16, 151183; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1184; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v11185; GFX7CHECK-NEXT:    v_bfe_u32 v3, v3, 16, 151186; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc1187; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v21188; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc1189; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v31190; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc1191; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1192;1193; GFX8CHECK-LABEL: isnan_v4bf16:1194; GFX8CHECK:       ; %bb.0:1195; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1196; GFX8CHECK-NEXT:    v_bfe_u32 v3, v1, 16, 151197; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f801198; GFX8CHECK-NEXT:    v_and_b32_e32 v2, 0x7fff7fff, v11199; GFX8CHECK-NEXT:    v_bfe_u32 v1, v0, 16, 151200; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v01201; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v01202; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1203; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v11204; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc1205; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v21206; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc1207; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v31208; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc1209; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1210;1211; GFX9CHECK-LABEL: isnan_v4bf16:1212; GFX9CHECK:       ; %bb.0:1213; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1214; GFX9CHECK-NEXT:    v_and_b32_e32 v3, 0x7fff7fff, v11215; GFX9CHECK-NEXT:    s_movk_i32 s6, 0x7f801216; GFX9CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v01217; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s6, v11218; GFX9CHECK-NEXT:    v_cmp_gt_i16_sdwa s[4:5], v1, s6 src0_sel:WORD_1 src1_sel:DWORD1219; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1220; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s6, v31221; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, s[4:5]1222; GFX9CHECK-NEXT:    v_cmp_gt_i16_sdwa s[4:5], v3, s6 src0_sel:WORD_1 src1_sel:DWORD1223; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc1224; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 1, s[4:5]1225; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1226;1227; GFX10CHECK-LABEL: isnan_v4bf16:1228; GFX10CHECK:       ; %bb.0:1229; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1230; GFX10CHECK-NEXT:    v_and_b32_e32 v3, 0x7fff7fff, v01231; GFX10CHECK-NEXT:    v_mov_b32_e32 v5, 0x7f801232; GFX10CHECK-NEXT:    v_and_b32_e32 v4, 0x7fff7fff, v11233; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v31234; GFX10CHECK-NEXT:    v_cmp_gt_i16_sdwa s4, v3, v5 src0_sel:WORD_1 src1_sel:DWORD1235; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1236; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v41237; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, s41238; GFX10CHECK-NEXT:    v_cmp_gt_i16_sdwa s4, v4, v5 src0_sel:WORD_1 src1_sel:DWORD1239; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc_lo1240; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 1, s41241; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1242;1243; GFX11SELDAG-TRUE16-LABEL: isnan_v4bf16:1244; GFX11SELDAG-TRUE16:       ; %bb.0:1245; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1246; GFX11SELDAG-TRUE16-NEXT:    v_and_b32_e32 v3, 0x7fff7fff, v01247; GFX11SELDAG-TRUE16-NEXT:    v_and_b32_e32 v4, 0x7fff7fff, v11248; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v3.l1249; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1250; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v4.l1251; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc_lo1252; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v3.h1253; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc_lo1254; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v4.h1255; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc_lo1256; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1257;1258; GFX11SELDAG-FAKE16-LABEL: isnan_v4bf16:1259; GFX11SELDAG-FAKE16:       ; %bb.0:1260; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1261; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v01262; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v11263; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v01264; GFX11SELDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v4, 16, v01265; GFX11SELDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v3, 16, v11266; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1267; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v11268; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc_lo1269; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v41270; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc_lo1271; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v31272; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc_lo1273; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1274  %1 = call <4 x i1> @llvm.is.fpclass.v4bf16(<4 x bfloat> %x, i32 3)  ; nan1275  ret <4 x i1> %11276}1277 1278; FIXME: Broken for gfx6/71279; define i1 @isnan_bf16_strictfp(bfloat %x) strictfp nounwind {1280;   %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 3) strictfp ; nan1281;   ret i1 %11282; }1283 1284define i1 @isinf_bf16(bfloat %x) nounwind {1285; GFX7CHECK-LABEL: isinf_bf16:1286; GFX7CHECK:       ; %bb.0:1287; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1288; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01289; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151290; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f801291; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, s4, v01292; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1293; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1294;1295; GFX8CHECK-LABEL: isinf_bf16:1296; GFX8CHECK:       ; %bb.0:1297; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1298; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01299; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f801300; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v01301; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1302; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1303;1304; GFX9CHECK-LABEL: isinf_bf16:1305; GFX9CHECK:       ; %bb.0:1306; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1307; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01308; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f801309; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v01310; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1311; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1312;1313; GFX10CHECK-LABEL: isinf_bf16:1314; GFX10CHECK:       ; %bb.0:1315; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1316; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01317; GFX10CHECK-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v01318; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1319; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1320;1321; GFX11SELDAG-TRUE16-LABEL: isinf_bf16:1322; GFX11SELDAG-TRUE16:       ; %bb.0:1323; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1324; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l1325; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v0.l1326; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1327; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1328;1329; GFX11SELDAG-FAKE16-LABEL: isinf_bf16:1330; GFX11SELDAG-FAKE16:       ; %bb.0:1331; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1332; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v01333; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v01334; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1335; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1336  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 516)  ; 0x204 = "inf"1337  ret i1 %11338}1339 1340define i1 @isfinite_bf16(bfloat %x) nounwind {1341; GFX7CHECK-LABEL: isfinite_bf16:1342; GFX7CHECK:       ; %bb.0:1343; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1344; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01345; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151346; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f801347; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, s4, v01348; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1349; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1350;1351; GFX8CHECK-LABEL: isfinite_bf16:1352; GFX8CHECK:       ; %bb.0:1353; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1354; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01355; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f801356; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v01357; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1358; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1359;1360; GFX9CHECK-LABEL: isfinite_bf16:1361; GFX9CHECK:       ; %bb.0:1362; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1363; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01364; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f801365; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v01366; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1367; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1368;1369; GFX10CHECK-LABEL: isfinite_bf16:1370; GFX10CHECK:       ; %bb.0:1371; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1372; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01373; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f80, v01374; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1375; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1376;1377; GFX11SELDAG-TRUE16-LABEL: isfinite_bf16:1378; GFX11SELDAG-TRUE16:       ; %bb.0:1379; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1380; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l1381; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f80, v0.l1382; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1383; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1384;1385; GFX11SELDAG-FAKE16-LABEL: isfinite_bf16:1386; GFX11SELDAG-FAKE16:       ; %bb.0:1387; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1388; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v01389; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f80, v01390; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1391; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1392  %1 = call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 504)  ; 0x1f8 = "finite"1393  ret i1 %11394}1395 1396define i1 @issubnormal_or_zero_bf16(bfloat %x) {1397; GFX7CHECK-LABEL: issubnormal_or_zero_bf16:1398; GFX7CHECK:       ; %bb.0: ; %entry1399; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1400; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01401; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v0, 16, v01402; GFX7CHECK-NEXT:    v_and_b32_e32 v0, 0x7f80, v01403; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v01404; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1405; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1406;1407; GFX8CHECK-LABEL: issubnormal_or_zero_bf16:1408; GFX8CHECK:       ; %bb.0: ; %entry1409; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1410; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7f80, v01411; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v01412; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1413; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1414;1415; GFX9CHECK-LABEL: issubnormal_or_zero_bf16:1416; GFX9CHECK:       ; %bb.0: ; %entry1417; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1418; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7f80, v01419; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v01420; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1421; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1422;1423; GFX10CHECK-LABEL: issubnormal_or_zero_bf16:1424; GFX10CHECK:       ; %bb.0: ; %entry1425; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1426; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7f80, v01427; GFX10CHECK-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v01428; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1429; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1430;1431; GFX11SELDAG-TRUE16-LABEL: issubnormal_or_zero_bf16:1432; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry1433; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1434; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7f80, v0.l1435; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v0.l1436; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1437; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1438;1439; GFX11SELDAG-FAKE16-LABEL: issubnormal_or_zero_bf16:1440; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry1441; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1442; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7f80, v01443; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v01444; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1445; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1446entry:1447  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 240)  ; 0xf0 = "subnormal|zero"1448  ret i1 %class1449}1450 1451define i1 @not_issubnormal_or_zero_bf16(bfloat %x) {1452; GFX7CHECK-LABEL: not_issubnormal_or_zero_bf16:1453; GFX7CHECK:       ; %bb.0: ; %entry1454; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1455; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01456; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v0, 16, v01457; GFX7CHECK-NEXT:    v_and_b32_e32 v0, 0x7f80, v01458; GFX7CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v01459; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1460; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1461;1462; GFX8CHECK-LABEL: not_issubnormal_or_zero_bf16:1463; GFX8CHECK:       ; %bb.0: ; %entry1464; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1465; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7f80, v01466; GFX8CHECK-NEXT:    v_cmp_ne_u16_e32 vcc, 0, v01467; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1468; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1469;1470; GFX9CHECK-LABEL: not_issubnormal_or_zero_bf16:1471; GFX9CHECK:       ; %bb.0: ; %entry1472; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1473; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7f80, v01474; GFX9CHECK-NEXT:    v_cmp_ne_u16_e32 vcc, 0, v01475; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1476; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1477;1478; GFX10CHECK-LABEL: not_issubnormal_or_zero_bf16:1479; GFX10CHECK:       ; %bb.0: ; %entry1480; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1481; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7f80, v01482; GFX10CHECK-NEXT:    v_cmp_ne_u16_e32 vcc_lo, 0, v01483; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1484; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1485;1486; GFX11SELDAG-TRUE16-LABEL: not_issubnormal_or_zero_bf16:1487; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry1488; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1489; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7f80, v0.l1490; GFX11SELDAG-TRUE16-NEXT:    v_cmp_ne_u16_e32 vcc_lo, 0, v0.l1491; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1492; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1493;1494; GFX11SELDAG-FAKE16-LABEL: not_issubnormal_or_zero_bf16:1495; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry1496; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1497; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7f80, v01498; GFX11SELDAG-FAKE16-NEXT:    v_cmp_ne_u16_e32 vcc_lo, 0, v01499; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1500; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1501entry:1502    %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 783)  ; ~0xf0 = "~(subnormal|zero)"1503  ret i1 %class1504}1505 1506define i1 @isnormal_bf16(bfloat %x) {1507; GFX7CHECK-LABEL: isnormal_bf16:1508; GFX7CHECK:       ; %bb.0:1509; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1510; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01511; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151512; GFX7CHECK-NEXT:    v_add_i32_e32 v0, vcc, 0xffffff80, v01513; GFX7CHECK-NEXT:    v_and_b32_e32 v0, 0xffff, v01514; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f001515; GFX7CHECK-NEXT:    v_cmp_gt_u32_e32 vcc, s4, v01516; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1517; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1518;1519; GFX8CHECK-LABEL: isnormal_bf16:1520; GFX8CHECK:       ; %bb.0:1521; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1522; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01523; GFX8CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v01524; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f001525; GFX8CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v01526; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1527; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1528;1529; GFX9CHECK-LABEL: isnormal_bf16:1530; GFX9CHECK:       ; %bb.0:1531; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1532; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01533; GFX9CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v01534; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f001535; GFX9CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v01536; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1537; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1538;1539; GFX10CHECK-LABEL: isnormal_bf16:1540; GFX10CHECK:       ; %bb.0:1541; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1542; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01543; GFX10CHECK-NEXT:    v_add_nc_u16 v0, 0xff80, v01544; GFX10CHECK-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f00, v01545; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1546; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1547;1548; GFX11SELDAG-TRUE16-LABEL: isnormal_bf16:1549; GFX11SELDAG-TRUE16:       ; %bb.0:1550; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1551; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l1552; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0xff80, v0.l1553; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f00, v0.l1554; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1555; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1556;1557; GFX11SELDAG-FAKE16-LABEL: isnormal_bf16:1558; GFX11SELDAG-FAKE16:       ; %bb.0:1559; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1560; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v01561; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v0, 0xff80, v01562; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f00, v01563; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1564; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1565  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 264)  ; 0x108 = "normal"1566  ret i1 %class1567}1568 1569define i1 @not_isnormal_bf16(bfloat %x) {1570; GFX7CHECK-LABEL: not_isnormal_bf16:1571; GFX7CHECK:       ; %bb.0:1572; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1573; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01574; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151575; GFX7CHECK-NEXT:    v_add_i32_e32 v0, vcc, 0xffffff80, v01576; GFX7CHECK-NEXT:    v_and_b32_e32 v0, 0xffff, v01577; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7eff1578; GFX7CHECK-NEXT:    v_cmp_lt_u32_e32 vcc, s4, v01579; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1580; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1581;1582; GFX8CHECK-LABEL: not_isnormal_bf16:1583; GFX8CHECK:       ; %bb.0:1584; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1585; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01586; GFX8CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v01587; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7eff1588; GFX8CHECK-NEXT:    v_cmp_lt_u16_e32 vcc, s4, v01589; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1590; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1591;1592; GFX9CHECK-LABEL: not_isnormal_bf16:1593; GFX9CHECK:       ; %bb.0:1594; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1595; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01596; GFX9CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v01597; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7eff1598; GFX9CHECK-NEXT:    v_cmp_lt_u16_e32 vcc, s4, v01599; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1600; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1601;1602; GFX10CHECK-LABEL: not_isnormal_bf16:1603; GFX10CHECK:       ; %bb.0:1604; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1605; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01606; GFX10CHECK-NEXT:    v_add_nc_u16 v0, 0xff80, v01607; GFX10CHECK-NEXT:    v_cmp_lt_u16_e32 vcc_lo, 0x7eff, v01608; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1609; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1610;1611; GFX11SELDAG-TRUE16-LABEL: not_isnormal_bf16:1612; GFX11SELDAG-TRUE16:       ; %bb.0:1613; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1614; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l1615; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0xff80, v0.l1616; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_u16_e32 vcc_lo, 0x7eff, v0.l1617; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1618; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1619;1620; GFX11SELDAG-FAKE16-LABEL: not_isnormal_bf16:1621; GFX11SELDAG-FAKE16:       ; %bb.0:1622; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1623; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v01624; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v0, 0xff80, v01625; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_u16_e32 vcc_lo, 0x7eff, v01626; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1627; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1628  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 759)  ; ~0x108 = "~normal"1629  ret i1 %class1630}1631 1632define i1 @not_is_plus_normal_bf16(bfloat %x) {1633; GFX7CHECK-LABEL: not_is_plus_normal_bf16:1634; GFX7CHECK:       ; %bb.0:1635; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1636; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01637; GFX7CHECK-NEXT:    v_ashrrev_i32_e32 v1, 16, v01638; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151639; GFX7CHECK-NEXT:    v_add_i32_e32 v0, vcc, 0xffffff80, v01640; GFX7CHECK-NEXT:    v_and_b32_e32 v0, 0xffff, v01641; GFX7CHECK-NEXT:    s_movk_i32 s6, 0x7eff1642; GFX7CHECK-NEXT:    v_cmp_gt_i32_e64 s[4:5], 0, v11643; GFX7CHECK-NEXT:    v_cmp_lt_u32_e32 vcc, s6, v01644; GFX7CHECK-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1645; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]1646; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1647;1648; GFX8CHECK-LABEL: not_is_plus_normal_bf16:1649; GFX8CHECK:       ; %bb.0:1650; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1651; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v01652; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01653; GFX8CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v01654; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7eff1655; GFX8CHECK-NEXT:    v_cmp_lt_u16_e64 s[4:5], s4, v01656; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc1657; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]1658; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1659;1660; GFX9CHECK-LABEL: not_is_plus_normal_bf16:1661; GFX9CHECK:       ; %bb.0:1662; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1663; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v01664; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01665; GFX9CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v01666; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7eff1667; GFX9CHECK-NEXT:    v_cmp_lt_u16_e64 s[4:5], s4, v01668; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc1669; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]1670; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1671;1672; GFX10CHECK-LABEL: not_is_plus_normal_bf16:1673; GFX10CHECK:       ; %bb.0:1674; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1675; GFX10CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v01676; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v01677; GFX10CHECK-NEXT:    v_add_nc_u16 v1, 0xff80, v11678; GFX10CHECK-NEXT:    v_cmp_lt_u16_e64 s4, 0x7eff, v11679; GFX10CHECK-NEXT:    s_or_b32 s4, s4, vcc_lo1680; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s41681; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1682;1683; GFX11SELDAG-TRUE16-LABEL: not_is_plus_normal_bf16:1684; GFX11SELDAG-TRUE16:       ; %bb.0:1685; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1686; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.h, 0x7fff, v0.l1687; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0.l1688; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.h, 0xff80, v0.h1689; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_u16_e64 s0, 0x7eff, v0.h1690; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, vcc_lo1691; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s01692; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1693;1694; GFX11SELDAG-FAKE16-LABEL: not_is_plus_normal_bf16:1695; GFX11SELDAG-FAKE16:       ; %bb.0:1696; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1697; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff, v01698; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v01699; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v1, 0xff80, v11700; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_u16_e64 s0, 0x7eff, v11701; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, vcc_lo1702; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s01703; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1704  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 767)  ; ~0x100 = ~"+normal"1705  ret i1 %class1706}1707 1708define i1 @not_is_neg_normal_bf16(bfloat %x) {1709; GFX7CHECK-LABEL: not_is_neg_normal_bf16:1710; GFX7CHECK:       ; %bb.0:1711; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1712; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01713; GFX7CHECK-NEXT:    v_ashrrev_i32_e32 v1, 16, v01714; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151715; GFX7CHECK-NEXT:    v_add_i32_e32 v0, vcc, 0xffffff80, v01716; GFX7CHECK-NEXT:    v_and_b32_e32 v0, 0xffff, v01717; GFX7CHECK-NEXT:    s_movk_i32 s6, 0x7eff1718; GFX7CHECK-NEXT:    v_cmp_lt_i32_e64 s[4:5], -1, v11719; GFX7CHECK-NEXT:    v_cmp_lt_u32_e32 vcc, s6, v01720; GFX7CHECK-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1721; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]1722; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1723;1724; GFX8CHECK-LABEL: not_is_neg_normal_bf16:1725; GFX8CHECK:       ; %bb.0:1726; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1727; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, -1, v01728; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01729; GFX8CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v01730; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7eff1731; GFX8CHECK-NEXT:    v_cmp_lt_u16_e64 s[4:5], s4, v01732; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc1733; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]1734; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1735;1736; GFX9CHECK-LABEL: not_is_neg_normal_bf16:1737; GFX9CHECK:       ; %bb.0:1738; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1739; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, -1, v01740; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01741; GFX9CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v01742; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7eff1743; GFX9CHECK-NEXT:    v_cmp_lt_u16_e64 s[4:5], s4, v01744; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc1745; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]1746; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1747;1748; GFX10CHECK-LABEL: not_is_neg_normal_bf16:1749; GFX10CHECK:       ; %bb.0:1750; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1751; GFX10CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v01752; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, -1, v01753; GFX10CHECK-NEXT:    v_add_nc_u16 v1, 0xff80, v11754; GFX10CHECK-NEXT:    v_cmp_lt_u16_e64 s4, 0x7eff, v11755; GFX10CHECK-NEXT:    s_or_b32 s4, s4, vcc_lo1756; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s41757; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1758;1759; GFX11SELDAG-TRUE16-LABEL: not_is_neg_normal_bf16:1760; GFX11SELDAG-TRUE16:       ; %bb.0:1761; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1762; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.h, 0x7fff, v0.l1763; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, -1, v0.l1764; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.h, 0xff80, v0.h1765; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_u16_e64 s0, 0x7eff, v0.h1766; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, vcc_lo1767; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s01768; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1769;1770; GFX11SELDAG-FAKE16-LABEL: not_is_neg_normal_bf16:1771; GFX11SELDAG-FAKE16:       ; %bb.0:1772; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1773; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff, v01774; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, -1, v01775; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v1, 0xff80, v11776; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_u16_e64 s0, 0x7eff, v11777; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, vcc_lo1778; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s01779; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1780  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 1015)  ; ~0x008 = ~"-normal"1781  ret i1 %class1782}1783 1784define i1 @issubnormal_bf16(bfloat %x) {1785; GFX7CHECK-LABEL: issubnormal_bf16:1786; GFX7CHECK:       ; %bb.0:1787; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1788; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01789; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151790; GFX7CHECK-NEXT:    v_add_i32_e32 v0, vcc, -1, v01791; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f1792; GFX7CHECK-NEXT:    v_cmp_gt_u32_e32 vcc, s4, v01793; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1794; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1795;1796; GFX8CHECK-LABEL: issubnormal_bf16:1797; GFX8CHECK:       ; %bb.0:1798; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1799; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01800; GFX8CHECK-NEXT:    v_add_u16_e32 v0, -1, v01801; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f1802; GFX8CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v01803; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1804; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1805;1806; GFX9CHECK-LABEL: issubnormal_bf16:1807; GFX9CHECK:       ; %bb.0:1808; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1809; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01810; GFX9CHECK-NEXT:    v_add_u16_e32 v0, -1, v01811; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f1812; GFX9CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v01813; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1814; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1815;1816; GFX10CHECK-LABEL: issubnormal_bf16:1817; GFX10CHECK:       ; %bb.0:1818; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1819; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01820; GFX10CHECK-NEXT:    v_add_nc_u16 v0, v0, -11821; GFX10CHECK-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f, v01822; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1823; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1824;1825; GFX11SELDAG-TRUE16-LABEL: issubnormal_bf16:1826; GFX11SELDAG-TRUE16:       ; %bb.0:1827; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1828; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l1829; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.l, v0.l, -11830; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f, v0.l1831; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1832; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1833;1834; GFX11SELDAG-FAKE16-LABEL: issubnormal_bf16:1835; GFX11SELDAG-FAKE16:       ; %bb.0:1836; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1837; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v01838; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v0, v0, -11839; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f, v01840; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1841; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1842  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 144)  ; 0x90 = "subnormal"1843  ret i1 %class1844}1845 1846define i1 @not_issubnormal_bf16(bfloat %x) {1847; GFX7CHECK-LABEL: not_issubnormal_bf16:1848; GFX7CHECK:       ; %bb.0:1849; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1850; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01851; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151852; GFX7CHECK-NEXT:    v_add_i32_e32 v0, vcc, -1, v01853; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7e1854; GFX7CHECK-NEXT:    v_cmp_lt_u32_e32 vcc, s4, v01855; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1856; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1857;1858; GFX8CHECK-LABEL: not_issubnormal_bf16:1859; GFX8CHECK:       ; %bb.0:1860; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1861; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01862; GFX8CHECK-NEXT:    v_add_u16_e32 v0, -1, v01863; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7e1864; GFX8CHECK-NEXT:    v_cmp_lt_u16_e32 vcc, s4, v01865; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1866; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1867;1868; GFX9CHECK-LABEL: not_issubnormal_bf16:1869; GFX9CHECK:       ; %bb.0:1870; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1871; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01872; GFX9CHECK-NEXT:    v_add_u16_e32 v0, -1, v01873; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7e1874; GFX9CHECK-NEXT:    v_cmp_lt_u16_e32 vcc, s4, v01875; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1876; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1877;1878; GFX10CHECK-LABEL: not_issubnormal_bf16:1879; GFX10CHECK:       ; %bb.0:1880; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1881; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01882; GFX10CHECK-NEXT:    v_add_nc_u16 v0, v0, -11883; GFX10CHECK-NEXT:    v_cmp_lt_u16_e32 vcc_lo, 0x7e, v01884; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1885; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1886;1887; GFX11SELDAG-TRUE16-LABEL: not_issubnormal_bf16:1888; GFX11SELDAG-TRUE16:       ; %bb.0:1889; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1890; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l1891; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.l, v0.l, -11892; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_u16_e32 vcc_lo, 0x7e, v0.l1893; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1894; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1895;1896; GFX11SELDAG-FAKE16-LABEL: not_issubnormal_bf16:1897; GFX11SELDAG-FAKE16:       ; %bb.0:1898; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1899; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v01900; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v0, v0, -11901; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_u16_e32 vcc_lo, 0x7e, v01902; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1903; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1904  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 879)  ; ~0x90 = ~"subnormal"1905  ret i1 %class1906}1907 1908define i1 @iszero_bf16(bfloat %x) {1909; GFX7CHECK-LABEL: iszero_bf16:1910; GFX7CHECK:       ; %bb.0:1911; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1912; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01913; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151914; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v01915; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1916; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1917;1918; GFX8CHECK-LABEL: iszero_bf16:1919; GFX8CHECK:       ; %bb.0:1920; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1921; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01922; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v01923; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1924; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1925;1926; GFX9CHECK-LABEL: iszero_bf16:1927; GFX9CHECK:       ; %bb.0:1928; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1929; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01930; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v01931; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1932; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1933;1934; GFX10CHECK-LABEL: iszero_bf16:1935; GFX10CHECK:       ; %bb.0:1936; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1937; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01938; GFX10CHECK-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v01939; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1940; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1941;1942; GFX11SELDAG-TRUE16-LABEL: iszero_bf16:1943; GFX11SELDAG-TRUE16:       ; %bb.0:1944; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1945; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l1946; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v0.l1947; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1948; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1949;1950; GFX11SELDAG-FAKE16-LABEL: iszero_bf16:1951; GFX11SELDAG-FAKE16:       ; %bb.0:1952; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1953; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v01954; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v01955; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1956; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1957  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 96)  ; 0x60 = "zero"1958  ret i1 %class1959}1960 1961define i1 @not_iszero_bf16(bfloat %x) {1962; GFX7CHECK-LABEL: not_iszero_bf16:1963; GFX7CHECK:       ; %bb.0:1964; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1965; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v01966; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 151967; GFX7CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v01968; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1969; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]1970;1971; GFX8CHECK-LABEL: not_iszero_bf16:1972; GFX8CHECK:       ; %bb.0:1973; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1974; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01975; GFX8CHECK-NEXT:    v_cmp_ne_u16_e32 vcc, 0, v01976; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1977; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]1978;1979; GFX9CHECK-LABEL: not_iszero_bf16:1980; GFX9CHECK:       ; %bb.0:1981; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1982; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01983; GFX9CHECK-NEXT:    v_cmp_ne_u16_e32 vcc, 0, v01984; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc1985; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]1986;1987; GFX10CHECK-LABEL: not_iszero_bf16:1988; GFX10CHECK:       ; %bb.0:1989; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1990; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v01991; GFX10CHECK-NEXT:    v_cmp_ne_u16_e32 vcc_lo, 0, v01992; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo1993; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]1994;1995; GFX11SELDAG-TRUE16-LABEL: not_iszero_bf16:1996; GFX11SELDAG-TRUE16:       ; %bb.0:1997; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1998; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l1999; GFX11SELDAG-TRUE16-NEXT:    v_cmp_ne_u16_e32 vcc_lo, 0, v0.l2000; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo2001; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2002;2003; GFX11SELDAG-FAKE16-LABEL: not_iszero_bf16:2004; GFX11SELDAG-FAKE16:       ; %bb.0:2005; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2006; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v02007; GFX11SELDAG-FAKE16-NEXT:    v_cmp_ne_u16_e32 vcc_lo, 0, v02008; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo2009; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2010  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 927)  ; ~0x60 = ~"zero"2011  ret i1 %class2012}2013 2014define i1 @ispositive_bf16(bfloat %x) {2015; GFX7CHECK-LABEL: ispositive_bf16:2016; GFX7CHECK:       ; %bb.0:2017; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2018; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02019; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v0, 16, v02020; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f812021; GFX7CHECK-NEXT:    v_cmp_gt_u32_e32 vcc, s4, v02022; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc2023; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2024;2025; GFX8CHECK-LABEL: ispositive_bf16:2026; GFX8CHECK:       ; %bb.0:2027; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2028; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f812029; GFX8CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v02030; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc2031; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2032;2033; GFX9CHECK-LABEL: ispositive_bf16:2034; GFX9CHECK:       ; %bb.0:2035; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2036; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f812037; GFX9CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v02038; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc2039; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2040;2041; GFX10CHECK-LABEL: ispositive_bf16:2042; GFX10CHECK:       ; %bb.0:2043; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2044; GFX10CHECK-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f81, v02045; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo2046; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2047;2048; GFX11SELDAG-TRUE16-LABEL: ispositive_bf16:2049; GFX11SELDAG-TRUE16:       ; %bb.0:2050; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2051; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f81, v0.l2052; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo2053; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2054;2055; GFX11SELDAG-FAKE16-LABEL: ispositive_bf16:2056; GFX11SELDAG-FAKE16:       ; %bb.0:2057; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2058; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f81, v02059; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo2060; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2061  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 960)  ; fcPositive2062  ret i1 %class2063}2064 2065define i1 @not_ispositive_bf16(bfloat %x) {2066; GFX7CHECK-LABEL: not_ispositive_bf16:2067; GFX7CHECK:       ; %bb.0:2068; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2069; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02070; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v1, 16, v02071; GFX7CHECK-NEXT:    v_ashrrev_i32_e32 v2, 16, v02072; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152073; GFX7CHECK-NEXT:    s_movk_i32 s6, 0x7f802074; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, 0, v22075; GFX7CHECK-NEXT:    v_cmp_gt_i32_e64 s[4:5], s6, v02076; GFX7CHECK-NEXT:    s_mov_b32 s7, 0xff802077; GFX7CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2078; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, s7, v12079; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2080; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s6, v02081; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2082; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2083; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2084;2085; GFX8CHECK-LABEL: not_ispositive_bf16:2086; GFX8CHECK:       ; %bb.0:2087; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2088; GFX8CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v02089; GFX8CHECK-NEXT:    s_movk_i32 s6, 0x7f802090; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v02091; GFX8CHECK-NEXT:    v_cmp_gt_i16_e64 s[4:5], s6, v12092; GFX8CHECK-NEXT:    s_movk_i32 s7, 0xff802093; GFX8CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2094; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s7, v02095; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2096; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s6, v12097; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2098; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2099; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2100;2101; GFX9CHECK-LABEL: not_ispositive_bf16:2102; GFX9CHECK:       ; %bb.0:2103; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2104; GFX9CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v02105; GFX9CHECK-NEXT:    s_movk_i32 s6, 0x7f802106; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v02107; GFX9CHECK-NEXT:    v_cmp_gt_i16_e64 s[4:5], s6, v12108; GFX9CHECK-NEXT:    s_movk_i32 s7, 0xff802109; GFX9CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2110; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s7, v02111; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2112; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s6, v12113; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2114; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2115; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2116;2117; GFX10CHECK-LABEL: not_ispositive_bf16:2118; GFX10CHECK:       ; %bb.0:2119; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2120; GFX10CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v02121; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v02122; GFX10CHECK-NEXT:    v_cmp_eq_u16_e64 s5, 0xff80, v02123; GFX10CHECK-NEXT:    v_cmp_gt_i16_e64 s4, 0x7f80, v12124; GFX10CHECK-NEXT:    v_cmp_lt_i16_e64 s6, 0x7f80, v12125; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo2126; GFX10CHECK-NEXT:    s_or_b32 s4, s4, s52127; GFX10CHECK-NEXT:    s_or_b32 s4, s4, s62128; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42129; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2130;2131; GFX11SELDAG-TRUE16-LABEL: not_ispositive_bf16:2132; GFX11SELDAG-TRUE16:       ; %bb.0:2133; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2134; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.h, 0x7fff, v0.l2135; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0.l2136; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e64 s1, 0xff80, v0.l2137; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e64 s0, 0x7f80, v0.h2138; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e64 s2, 0x7f80, v0.h2139; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo2140; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, s12141; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, s22142; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02143; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2144;2145; GFX11SELDAG-FAKE16-LABEL: not_ispositive_bf16:2146; GFX11SELDAG-FAKE16:       ; %bb.0:2147; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2148; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff, v02149; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v02150; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e64 s1, 0xff80, v02151; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e64 s0, 0x7f80, v12152; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e64 s2, 0x7f80, v12153; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo2154; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, s12155; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, s22156; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02157; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2158  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 63)  ; ~fcPositive2159  ret i1 %class2160}2161 2162define i1 @isnegative_bf16(bfloat %x) {2163; GFX7CHECK-LABEL: isnegative_bf16:2164; GFX7CHECK:       ; %bb.0:2165; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2166; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02167; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v1, 16, v02168; GFX7CHECK-NEXT:    v_ashrrev_i32_e32 v2, 16, v02169; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152170; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f802171; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, 0, v22172; GFX7CHECK-NEXT:    v_cmp_gt_i32_e64 s[4:5], s4, v02173; GFX7CHECK-NEXT:    s_mov_b32 s6, 0xff802174; GFX7CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2175; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, s6, v12176; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2177; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2178; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2179;2180; GFX8CHECK-LABEL: isnegative_bf16:2181; GFX8CHECK:       ; %bb.0:2182; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2183; GFX8CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v02184; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f802185; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v02186; GFX8CHECK-NEXT:    v_cmp_gt_i16_e64 s[4:5], s4, v12187; GFX8CHECK-NEXT:    s_movk_i32 s6, 0xff802188; GFX8CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2189; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s6, v02190; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2191; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2192; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2193;2194; GFX9CHECK-LABEL: isnegative_bf16:2195; GFX9CHECK:       ; %bb.0:2196; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2197; GFX9CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v02198; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f802199; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, 0, v02200; GFX9CHECK-NEXT:    v_cmp_gt_i16_e64 s[4:5], s4, v12201; GFX9CHECK-NEXT:    s_movk_i32 s6, 0xff802202; GFX9CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2203; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s6, v02204; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2205; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2206; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2207;2208; GFX10CHECK-LABEL: isnegative_bf16:2209; GFX10CHECK:       ; %bb.0:2210; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2211; GFX10CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v02212; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v02213; GFX10CHECK-NEXT:    v_cmp_eq_u16_e64 s5, 0xff80, v02214; GFX10CHECK-NEXT:    v_cmp_gt_i16_e64 s4, 0x7f80, v12215; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo2216; GFX10CHECK-NEXT:    s_or_b32 s4, s4, s52217; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42218; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2219;2220; GFX11SELDAG-TRUE16-LABEL: isnegative_bf16:2221; GFX11SELDAG-TRUE16:       ; %bb.0:2222; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2223; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.h, 0x7fff, v0.l2224; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v0.l2225; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e64 s1, 0xff80, v0.l2226; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e64 s0, 0x7f80, v0.h2227; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo2228; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, s12229; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02230; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2231;2232; GFX11SELDAG-FAKE16-LABEL: isnegative_bf16:2233; GFX11SELDAG-FAKE16:       ; %bb.0:2234; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2235; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff, v02236; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0, v02237; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e64 s1, 0xff80, v02238; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e64 s0, 0x7f80, v12239; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo2240; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, s12241; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02242; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2243  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 60)  ; fcNegative2244  ret i1 %class2245}2246 2247define i1 @not_isnegative_bf16(bfloat %x) {2248; GFX7CHECK-LABEL: not_isnegative_bf16:2249; GFX7CHECK:       ; %bb.0:2250; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2251; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02252; GFX7CHECK-NEXT:    v_lshrrev_b32_e32 v1, 16, v02253; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152254; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f802255; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v02256; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f812257; GFX7CHECK-NEXT:    v_cmp_gt_u32_e64 s[4:5], s4, v12258; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2259; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2260; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2261;2262; GFX8CHECK-LABEL: not_isnegative_bf16:2263; GFX8CHECK:       ; %bb.0:2264; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2265; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f812266; GFX8CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v02267; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02268; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f802269; GFX8CHECK-NEXT:    v_cmp_lt_i16_e64 s[4:5], s4, v02270; GFX8CHECK-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2271; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2272; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2273;2274; GFX9CHECK-LABEL: not_isnegative_bf16:2275; GFX9CHECK:       ; %bb.0:2276; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2277; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f812278; GFX9CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s4, v02279; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02280; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f802281; GFX9CHECK-NEXT:    v_cmp_lt_i16_e64 s[4:5], s4, v02282; GFX9CHECK-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2283; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2284; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2285;2286; GFX10CHECK-LABEL: not_isnegative_bf16:2287; GFX10CHECK:       ; %bb.0:2288; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2289; GFX10CHECK-NEXT:    v_and_b32_e32 v1, 0x7fff, v02290; GFX10CHECK-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f81, v02291; GFX10CHECK-NEXT:    v_cmp_lt_i16_e64 s4, 0x7f80, v12292; GFX10CHECK-NEXT:    s_or_b32 s4, vcc_lo, s42293; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42294; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2295;2296; GFX11SELDAG-TRUE16-LABEL: not_isnegative_bf16:2297; GFX11SELDAG-TRUE16:       ; %bb.0:2298; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2299; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.h, 0x7fff, v0.l2300; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f81, v0.l2301; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e64 s0, 0x7f80, v0.h2302; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, vcc_lo, s02303; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02304; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2305;2306; GFX11SELDAG-FAKE16-LABEL: not_isnegative_bf16:2307; GFX11SELDAG-FAKE16:       ; %bb.0:2308; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2309; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff, v02310; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f81, v02311; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e64 s0, 0x7f80, v12312; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, vcc_lo, s02313; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02314; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2315  %class = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 963)  ; ~fcNegative2316  ret i1 %class2317}2318 2319define i1 @iszero_or_nan_bf16(bfloat %x) {2320; GFX7CHECK-LABEL: iszero_or_nan_bf16:2321; GFX7CHECK:       ; %bb.0: ; %entry2322; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2323; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02324; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152325; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f802326; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v02327; GFX7CHECK-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v02328; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2329; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2330; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2331;2332; GFX8CHECK-LABEL: iszero_or_nan_bf16:2333; GFX8CHECK:       ; %bb.0: ; %entry2334; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2335; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02336; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f802337; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v02338; GFX8CHECK-NEXT:    v_cmp_eq_u16_e64 s[4:5], 0, v02339; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2340; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2341; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2342;2343; GFX9CHECK-LABEL: iszero_or_nan_bf16:2344; GFX9CHECK:       ; %bb.0: ; %entry2345; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2346; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02347; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f802348; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v02349; GFX9CHECK-NEXT:    v_cmp_eq_u16_e64 s[4:5], 0, v02350; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2351; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2352; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2353;2354; GFX10CHECK-LABEL: iszero_or_nan_bf16:2355; GFX10CHECK:       ; %bb.0: ; %entry2356; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2357; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02358; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v02359; GFX10CHECK-NEXT:    v_cmp_eq_u16_e64 s4, 0, v02360; GFX10CHECK-NEXT:    s_or_b32 s4, s4, vcc_lo2361; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42362; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2363;2364; GFX11SELDAG-TRUE16-LABEL: iszero_or_nan_bf16:2365; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry2366; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2367; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l2368; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v0.l2369; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e64 s0, 0, v0.l2370; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, vcc_lo2371; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02372; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2373;2374; GFX11SELDAG-FAKE16-LABEL: iszero_or_nan_bf16:2375; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry2376; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2377; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v02378; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v02379; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e64 s0, 0, v02380; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, vcc_lo2381; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02382; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2383entry:2384  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 99)  ; 0x60|0x3 = "zero|nan"2385  ret i1 %02386}2387 2388define i1 @iszero_or_nan_f_daz(bfloat %x) #0 {2389; GFX7CHECK-LABEL: iszero_or_nan_f_daz:2390; GFX7CHECK:       ; %bb.0: ; %entry2391; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2392; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02393; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152394; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f802395; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v02396; GFX7CHECK-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v02397; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2398; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2399; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2400;2401; GFX8CHECK-LABEL: iszero_or_nan_f_daz:2402; GFX8CHECK:       ; %bb.0: ; %entry2403; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2404; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02405; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f802406; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v02407; GFX8CHECK-NEXT:    v_cmp_eq_u16_e64 s[4:5], 0, v02408; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2409; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2410; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2411;2412; GFX9CHECK-LABEL: iszero_or_nan_f_daz:2413; GFX9CHECK:       ; %bb.0: ; %entry2414; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2415; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02416; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f802417; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v02418; GFX9CHECK-NEXT:    v_cmp_eq_u16_e64 s[4:5], 0, v02419; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2420; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2421; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2422;2423; GFX10CHECK-LABEL: iszero_or_nan_f_daz:2424; GFX10CHECK:       ; %bb.0: ; %entry2425; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2426; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02427; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v02428; GFX10CHECK-NEXT:    v_cmp_eq_u16_e64 s4, 0, v02429; GFX10CHECK-NEXT:    s_or_b32 s4, s4, vcc_lo2430; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42431; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2432;2433; GFX11SELDAG-TRUE16-LABEL: iszero_or_nan_f_daz:2434; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry2435; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2436; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l2437; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v0.l2438; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e64 s0, 0, v0.l2439; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, vcc_lo2440; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02441; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2442;2443; GFX11SELDAG-FAKE16-LABEL: iszero_or_nan_f_daz:2444; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry2445; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2446; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v02447; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v02448; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e64 s0, 0, v02449; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, vcc_lo2450; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02451; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2452entry:2453  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 99)  ; 0x60|0x3 = "zero|nan"2454  ret i1 %02455}2456 2457define i1 @iszero_or_nan_f_maybe_daz(bfloat %x) #1 {2458; GFX7CHECK-LABEL: iszero_or_nan_f_maybe_daz:2459; GFX7CHECK:       ; %bb.0: ; %entry2460; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2461; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02462; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152463; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f802464; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v02465; GFX7CHECK-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v02466; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2467; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2468; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2469;2470; GFX8CHECK-LABEL: iszero_or_nan_f_maybe_daz:2471; GFX8CHECK:       ; %bb.0: ; %entry2472; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2473; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02474; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f802475; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v02476; GFX8CHECK-NEXT:    v_cmp_eq_u16_e64 s[4:5], 0, v02477; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2478; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2479; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2480;2481; GFX9CHECK-LABEL: iszero_or_nan_f_maybe_daz:2482; GFX9CHECK:       ; %bb.0: ; %entry2483; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2484; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02485; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f802486; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v02487; GFX9CHECK-NEXT:    v_cmp_eq_u16_e64 s[4:5], 0, v02488; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2489; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2490; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2491;2492; GFX10CHECK-LABEL: iszero_or_nan_f_maybe_daz:2493; GFX10CHECK:       ; %bb.0: ; %entry2494; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2495; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02496; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v02497; GFX10CHECK-NEXT:    v_cmp_eq_u16_e64 s4, 0, v02498; GFX10CHECK-NEXT:    s_or_b32 s4, s4, vcc_lo2499; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42500; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2501;2502; GFX11SELDAG-TRUE16-LABEL: iszero_or_nan_f_maybe_daz:2503; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry2504; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2505; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l2506; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v0.l2507; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e64 s0, 0, v0.l2508; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, vcc_lo2509; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02510; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2511;2512; GFX11SELDAG-FAKE16-LABEL: iszero_or_nan_f_maybe_daz:2513; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry2514; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2515; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v02516; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f80, v02517; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e64 s0, 0, v02518; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, vcc_lo2519; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02520; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2521entry:2522  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 99)  ; 0x60|0x3 = "zero|nan"2523  ret i1 %02524}2525 2526define i1 @not_iszero_or_nan_bf16(bfloat %x) {2527; GFX7CHECK-LABEL: not_iszero_or_nan_bf16:2528; GFX7CHECK:       ; %bb.0: ; %entry2529; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2530; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02531; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152532; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f812533; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, s4, v02534; GFX7CHECK-NEXT:    v_cmp_ne_u32_e64 s[4:5], 0, v02535; GFX7CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2536; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2537; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2538;2539; GFX8CHECK-LABEL: not_iszero_or_nan_bf16:2540; GFX8CHECK:       ; %bb.0: ; %entry2541; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2542; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02543; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f812544; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v02545; GFX8CHECK-NEXT:    v_cmp_ne_u16_e64 s[4:5], 0, v02546; GFX8CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2547; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2548; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2549;2550; GFX9CHECK-LABEL: not_iszero_or_nan_bf16:2551; GFX9CHECK:       ; %bb.0: ; %entry2552; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2553; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02554; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f812555; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v02556; GFX9CHECK-NEXT:    v_cmp_ne_u16_e64 s[4:5], 0, v02557; GFX9CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2558; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2559; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2560;2561; GFX10CHECK-LABEL: not_iszero_or_nan_bf16:2562; GFX10CHECK:       ; %bb.0: ; %entry2563; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2564; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02565; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v02566; GFX10CHECK-NEXT:    v_cmp_ne_u16_e64 s4, 0, v02567; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo2568; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42569; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2570;2571; GFX11SELDAG-TRUE16-LABEL: not_iszero_or_nan_bf16:2572; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry2573; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2574; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l2575; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v0.l2576; GFX11SELDAG-TRUE16-NEXT:    v_cmp_ne_u16_e64 s0, 0, v0.l2577; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo2578; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02579; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2580;2581; GFX11SELDAG-FAKE16-LABEL: not_iszero_or_nan_bf16:2582; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry2583; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2584; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v02585; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v02586; GFX11SELDAG-FAKE16-NEXT:    v_cmp_ne_u16_e64 s0, 0, v02587; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo2588; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02589; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2590entry:2591  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 924)  ; ~0x60 = "~(zero|nan)"2592  ret i1 %02593}2594 2595define i1 @not_iszero_or_nan_f_daz(bfloat %x) #0 {2596; GFX7CHECK-LABEL: not_iszero_or_nan_f_daz:2597; GFX7CHECK:       ; %bb.0: ; %entry2598; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2599; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02600; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152601; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f812602; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, s4, v02603; GFX7CHECK-NEXT:    v_cmp_ne_u32_e64 s[4:5], 0, v02604; GFX7CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2605; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2606; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2607;2608; GFX8CHECK-LABEL: not_iszero_or_nan_f_daz:2609; GFX8CHECK:       ; %bb.0: ; %entry2610; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2611; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02612; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f812613; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v02614; GFX8CHECK-NEXT:    v_cmp_ne_u16_e64 s[4:5], 0, v02615; GFX8CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2616; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2617; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2618;2619; GFX9CHECK-LABEL: not_iszero_or_nan_f_daz:2620; GFX9CHECK:       ; %bb.0: ; %entry2621; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2622; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02623; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f812624; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v02625; GFX9CHECK-NEXT:    v_cmp_ne_u16_e64 s[4:5], 0, v02626; GFX9CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2627; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2628; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2629;2630; GFX10CHECK-LABEL: not_iszero_or_nan_f_daz:2631; GFX10CHECK:       ; %bb.0: ; %entry2632; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2633; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02634; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v02635; GFX10CHECK-NEXT:    v_cmp_ne_u16_e64 s4, 0, v02636; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo2637; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42638; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2639;2640; GFX11SELDAG-TRUE16-LABEL: not_iszero_or_nan_f_daz:2641; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry2642; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2643; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l2644; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v0.l2645; GFX11SELDAG-TRUE16-NEXT:    v_cmp_ne_u16_e64 s0, 0, v0.l2646; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo2647; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02648; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2649;2650; GFX11SELDAG-FAKE16-LABEL: not_iszero_or_nan_f_daz:2651; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry2652; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2653; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v02654; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v02655; GFX11SELDAG-FAKE16-NEXT:    v_cmp_ne_u16_e64 s0, 0, v02656; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo2657; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02658; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2659entry:2660  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 924)  ; ~(0x60|0x3) = "~(zero|nan)"2661  ret i1 %02662}2663 2664define i1 @not_iszero_or_nan_f_maybe_daz(bfloat %x) #1 {2665; GFX7CHECK-LABEL: not_iszero_or_nan_f_maybe_daz:2666; GFX7CHECK:       ; %bb.0: ; %entry2667; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2668; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02669; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152670; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f812671; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, s4, v02672; GFX7CHECK-NEXT:    v_cmp_ne_u32_e64 s[4:5], 0, v02673; GFX7CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2674; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2675; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2676;2677; GFX8CHECK-LABEL: not_iszero_or_nan_f_maybe_daz:2678; GFX8CHECK:       ; %bb.0: ; %entry2679; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2680; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02681; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f812682; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v02683; GFX8CHECK-NEXT:    v_cmp_ne_u16_e64 s[4:5], 0, v02684; GFX8CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2685; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2686; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2687;2688; GFX9CHECK-LABEL: not_iszero_or_nan_f_maybe_daz:2689; GFX9CHECK:       ; %bb.0: ; %entry2690; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2691; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02692; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f812693; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v02694; GFX9CHECK-NEXT:    v_cmp_ne_u16_e64 s[4:5], 0, v02695; GFX9CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2696; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2697; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2698;2699; GFX10CHECK-LABEL: not_iszero_or_nan_f_maybe_daz:2700; GFX10CHECK:       ; %bb.0: ; %entry2701; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2702; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02703; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v02704; GFX10CHECK-NEXT:    v_cmp_ne_u16_e64 s4, 0, v02705; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo2706; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42707; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2708;2709; GFX11SELDAG-TRUE16-LABEL: not_iszero_or_nan_f_maybe_daz:2710; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry2711; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2712; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l2713; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v0.l2714; GFX11SELDAG-TRUE16-NEXT:    v_cmp_ne_u16_e64 s0, 0, v0.l2715; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo2716; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02717; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2718;2719; GFX11SELDAG-FAKE16-LABEL: not_iszero_or_nan_f_maybe_daz:2720; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry2721; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2722; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v02723; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f81, v02724; GFX11SELDAG-FAKE16-NEXT:    v_cmp_ne_u16_e64 s0, 0, v02725; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo2726; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02727; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2728entry:2729  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 924)  ; ~(0x60|0x3) = "~(zero|nan)"2730  ret i1 %02731}2732 2733define i1 @iszero_or_qnan_bf16(bfloat %x) {2734; GFX7CHECK-LABEL: iszero_or_qnan_bf16:2735; GFX7CHECK:       ; %bb.0: ; %entry2736; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2737; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02738; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152739; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7fbf2740; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v02741; GFX7CHECK-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v02742; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2743; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2744; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2745;2746; GFX8CHECK-LABEL: iszero_or_qnan_bf16:2747; GFX8CHECK:       ; %bb.0: ; %entry2748; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2749; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02750; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7fbf2751; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v02752; GFX8CHECK-NEXT:    v_cmp_eq_u16_e64 s[4:5], 0, v02753; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2754; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2755; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2756;2757; GFX9CHECK-LABEL: iszero_or_qnan_bf16:2758; GFX9CHECK:       ; %bb.0: ; %entry2759; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2760; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02761; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7fbf2762; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v02763; GFX9CHECK-NEXT:    v_cmp_eq_u16_e64 s[4:5], 0, v02764; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2765; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2766; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2767;2768; GFX10CHECK-LABEL: iszero_or_qnan_bf16:2769; GFX10CHECK:       ; %bb.0: ; %entry2770; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2771; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02772; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7fbf, v02773; GFX10CHECK-NEXT:    v_cmp_eq_u16_e64 s4, 0, v02774; GFX10CHECK-NEXT:    s_or_b32 s4, s4, vcc_lo2775; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42776; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2777;2778; GFX11SELDAG-TRUE16-LABEL: iszero_or_qnan_bf16:2779; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry2780; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2781; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l2782; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7fbf, v0.l2783; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e64 s0, 0, v0.l2784; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, vcc_lo2785; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02786; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2787;2788; GFX11SELDAG-FAKE16-LABEL: iszero_or_qnan_bf16:2789; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry2790; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2791; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v02792; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7fbf, v02793; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e64 s0, 0, v02794; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, vcc_lo2795; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02796; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2797entry:2798  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 98)  ; 0x60|0x2 = "zero|qnan"2799  ret i1 %02800}2801 2802define i1 @iszero_or_snan_bf16(bfloat %x) {2803; GFX7CHECK-LABEL: iszero_or_snan_bf16:2804; GFX7CHECK:       ; %bb.0: ; %entry2805; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2806; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02807; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152808; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7fc02809; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, s4, v02810; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f802811; GFX7CHECK-NEXT:    v_cmp_lt_i32_e64 s[4:5], s4, v02812; GFX7CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2813; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v02814; GFX7CHECK-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2815; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2816; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2817;2818; GFX8CHECK-LABEL: iszero_or_snan_bf16:2819; GFX8CHECK:       ; %bb.0: ; %entry2820; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2821; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02822; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7fc02823; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v02824; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f802825; GFX8CHECK-NEXT:    v_cmp_lt_i16_e64 s[4:5], s4, v02826; GFX8CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2827; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v02828; GFX8CHECK-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2829; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2830; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2831;2832; GFX9CHECK-LABEL: iszero_or_snan_bf16:2833; GFX9CHECK:       ; %bb.0: ; %entry2834; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2835; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02836; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7fc02837; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v02838; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f802839; GFX9CHECK-NEXT:    v_cmp_lt_i16_e64 s[4:5], s4, v02840; GFX9CHECK-NEXT:    s_and_b64 s[4:5], s[4:5], vcc2841; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v02842; GFX9CHECK-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2843; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2844; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2845;2846; GFX10CHECK-LABEL: iszero_or_snan_bf16:2847; GFX10CHECK:       ; %bb.0: ; %entry2848; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2849; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02850; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7fc0, v02851; GFX10CHECK-NEXT:    v_cmp_lt_i16_e64 s4, 0x7f80, v02852; GFX10CHECK-NEXT:    v_cmp_eq_u16_e64 s5, 0, v02853; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo2854; GFX10CHECK-NEXT:    s_or_b32 s4, s5, s42855; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42856; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2857;2858; GFX11SELDAG-TRUE16-LABEL: iszero_or_snan_bf16:2859; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry2860; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2861; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l2862; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7fc0, v0.l2863; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e64 s0, 0x7f80, v0.l2864; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e64 s1, 0, v0.l2865; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo2866; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s1, s02867; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02868; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2869;2870; GFX11SELDAG-FAKE16-LABEL: iszero_or_snan_bf16:2871; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry2872; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2873; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v02874; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7fc0, v02875; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e64 s0, 0x7f80, v02876; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e64 s1, 0, v02877; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo2878; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s1, s02879; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02880; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]2881entry:2882  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 97)  ; 0x60|0x1 = "zero|snan"2883  ret i1 %02884}2885 2886define i1 @not_iszero_or_qnan_bf16(bfloat %x) {2887; GFX7CHECK-LABEL: not_iszero_or_qnan_bf16:2888; GFX7CHECK:       ; %bb.0: ; %entry2889; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2890; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v02891; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 152892; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7fc02893; GFX7CHECK-NEXT:    s_movk_i32 s8, 0x7f802894; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, s4, v02895; GFX7CHECK-NEXT:    v_cmp_lt_i32_e64 s[4:5], s8, v02896; GFX7CHECK-NEXT:    s_and_b64 s[6:7], s[4:5], vcc2897; GFX7CHECK-NEXT:    v_add_i32_e64 v1, s[4:5], -1, v02898; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f2899; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, s8, v02900; GFX7CHECK-NEXT:    v_cmp_gt_u32_e64 s[4:5], s4, v12901; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2902; GFX7CHECK-NEXT:    v_add_i32_e32 v0, vcc, 0xffffff80, v02903; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], s[6:7]2904; GFX7CHECK-NEXT:    v_and_b32_e32 v0, 0xffff, v02905; GFX7CHECK-NEXT:    s_movk_i32 s6, 0x7f002906; GFX7CHECK-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v02907; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2908; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2909; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]2910;2911; GFX8CHECK-LABEL: not_iszero_or_qnan_bf16:2912; GFX8CHECK:       ; %bb.0: ; %entry2913; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2914; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02915; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7fc02916; GFX8CHECK-NEXT:    s_movk_i32 s8, 0x7f802917; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v02918; GFX8CHECK-NEXT:    v_cmp_lt_i16_e64 s[4:5], s8, v02919; GFX8CHECK-NEXT:    s_and_b64 s[6:7], s[4:5], vcc2920; GFX8CHECK-NEXT:    v_add_u16_e32 v1, -1, v02921; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f2922; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s8, v02923; GFX8CHECK-NEXT:    v_cmp_gt_u16_e64 s[4:5], s4, v12924; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2925; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], s[6:7]2926; GFX8CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v02927; GFX8CHECK-NEXT:    s_movk_i32 s6, 0x7f002928; GFX8CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s6, v02929; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2930; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2931; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]2932;2933; GFX9CHECK-LABEL: not_iszero_or_qnan_bf16:2934; GFX9CHECK:       ; %bb.0: ; %entry2935; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2936; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02937; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7fc02938; GFX9CHECK-NEXT:    s_movk_i32 s8, 0x7f802939; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v02940; GFX9CHECK-NEXT:    v_cmp_lt_i16_e64 s[4:5], s8, v02941; GFX9CHECK-NEXT:    s_and_b64 s[6:7], s[4:5], vcc2942; GFX9CHECK-NEXT:    v_add_u16_e32 v1, -1, v02943; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f2944; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s8, v02945; GFX9CHECK-NEXT:    v_cmp_gt_u16_e64 s[4:5], s4, v12946; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2947; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], s[6:7]2948; GFX9CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v02949; GFX9CHECK-NEXT:    s_movk_i32 s6, 0x7f002950; GFX9CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s6, v02951; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc2952; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]2953; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]2954;2955; GFX10CHECK-LABEL: not_iszero_or_qnan_bf16:2956; GFX10CHECK:       ; %bb.0: ; %entry2957; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2958; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v02959; GFX10CHECK-NEXT:    v_add_nc_u16 v1, v0, -12960; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7fc0, v02961; GFX10CHECK-NEXT:    v_cmp_lt_i16_e64 s4, 0x7f80, v02962; GFX10CHECK-NEXT:    v_cmp_eq_u16_e64 s5, 0x7f80, v02963; GFX10CHECK-NEXT:    v_add_nc_u16 v0, 0xff80, v02964; GFX10CHECK-NEXT:    v_cmp_gt_u16_e64 s6, 0x7f, v12965; GFX10CHECK-NEXT:    s_and_b32 s4, s4, vcc_lo2966; GFX10CHECK-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f00, v02967; GFX10CHECK-NEXT:    s_or_b32 s5, s6, s52968; GFX10CHECK-NEXT:    s_or_b32 s4, s5, s42969; GFX10CHECK-NEXT:    s_or_b32 s4, s4, vcc_lo2970; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s42971; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]2972;2973; GFX11SELDAG-TRUE16-LABEL: not_iszero_or_qnan_bf16:2974; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry2975; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2976; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l2977; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.h, v0.l, -12978; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7fc0, v0.l2979; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e64 s0, 0x7f80, v0.l2980; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e64 s1, 0x7f80, v0.l2981; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0xff80, v0.l2982; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e64 s2, 0x7f, v0.h2983; GFX11SELDAG-TRUE16-NEXT:    s_and_b32 s0, s0, vcc_lo2984; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f00, v0.l2985; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s1, s2, s12986; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s1, s02987; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, vcc_lo2988; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s02989; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]2990;2991; GFX11SELDAG-FAKE16-LABEL: not_iszero_or_qnan_bf16:2992; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry2993; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2994; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v02995; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v1, v0, -12996; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7fc0, v02997; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e64 s0, 0x7f80, v02998; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e64 s1, 0x7f80, v02999; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v0, 0xff80, v03000; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e64 s2, 0x7f, v13001; GFX11SELDAG-FAKE16-NEXT:    s_and_b32 s0, s0, vcc_lo3002; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x7f00, v03003; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s1, s2, s13004; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s1, s03005; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, vcc_lo3006; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s03007; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]3008entry:3009  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 925)  ; ~(0x60|0x2) = "~(zero|qnan)"3010  ret i1 %03011}3012 3013define i1 @not_iszero_or_snan_bf16(bfloat %x) {3014; GFX7CHECK-LABEL: not_iszero_or_snan_bf16:3015; GFX7CHECK:       ; %bb.0: ; %entry3016; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3017; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v03018; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 153019; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f803020; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, s4, v03021; GFX7CHECK-NEXT:    v_add_i32_e64 v1, s[4:5], -1, v03022; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f3023; GFX7CHECK-NEXT:    v_cmp_gt_u32_e64 s[4:5], s4, v13024; GFX7CHECK-NEXT:    s_movk_i32 s6, 0x7fbf3025; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc3026; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s6, v03027; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc3028; GFX7CHECK-NEXT:    v_add_i32_e32 v0, vcc, 0xffffff80, v03029; GFX7CHECK-NEXT:    v_and_b32_e32 v0, 0xffff, v03030; GFX7CHECK-NEXT:    s_movk_i32 s6, 0x7f003031; GFX7CHECK-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v03032; GFX7CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc3033; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]3034; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]3035;3036; GFX8CHECK-LABEL: not_iszero_or_snan_bf16:3037; GFX8CHECK:       ; %bb.0: ; %entry3038; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3039; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03040; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f803041; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v03042; GFX8CHECK-NEXT:    v_add_u16_e32 v1, -1, v03043; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f3044; GFX8CHECK-NEXT:    v_cmp_gt_u16_e64 s[4:5], s4, v13045; GFX8CHECK-NEXT:    s_movk_i32 s6, 0x7fbf3046; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc3047; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s6, v03048; GFX8CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v03049; GFX8CHECK-NEXT:    s_movk_i32 s6, 0x7f003050; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc3051; GFX8CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s6, v03052; GFX8CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc3053; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]3054; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]3055;3056; GFX9CHECK-LABEL: not_iszero_or_snan_bf16:3057; GFX9CHECK:       ; %bb.0: ; %entry3058; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3059; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03060; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f803061; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v03062; GFX9CHECK-NEXT:    v_add_u16_e32 v1, -1, v03063; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f3064; GFX9CHECK-NEXT:    v_cmp_gt_u16_e64 s[4:5], s4, v13065; GFX9CHECK-NEXT:    s_movk_i32 s6, 0x7fbf3066; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc3067; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s6, v03068; GFX9CHECK-NEXT:    v_add_u16_e32 v0, 0xff80, v03069; GFX9CHECK-NEXT:    s_movk_i32 s6, 0x7f003070; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc3071; GFX9CHECK-NEXT:    v_cmp_gt_u16_e32 vcc, s6, v03072; GFX9CHECK-NEXT:    s_or_b64 s[4:5], s[4:5], vcc3073; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]3074; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]3075;3076; GFX10CHECK-LABEL: not_iszero_or_snan_bf16:3077; GFX10CHECK:       ; %bb.0: ; %entry3078; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3079; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03080; GFX10CHECK-NEXT:    v_add_nc_u16 v1, v0, -13081; GFX10CHECK-NEXT:    v_add_nc_u16 v2, 0xff80, v03082; GFX10CHECK-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v03083; GFX10CHECK-NEXT:    v_cmp_lt_i16_e64 s5, 0x7fbf, v03084; GFX10CHECK-NEXT:    v_cmp_gt_u16_e64 s4, 0x7f, v13085; GFX10CHECK-NEXT:    v_cmp_gt_u16_e64 s6, 0x7f00, v23086; GFX10CHECK-NEXT:    s_or_b32 s4, s4, vcc_lo3087; GFX10CHECK-NEXT:    s_or_b32 s4, s4, s53088; GFX10CHECK-NEXT:    s_or_b32 s4, s4, s63089; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s43090; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]3091;3092; GFX11SELDAG-TRUE16-LABEL: not_iszero_or_snan_bf16:3093; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry3094; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3095; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l3096; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v0.h, v0.l, -13097; GFX11SELDAG-TRUE16-NEXT:    v_add_nc_u16 v1.l, 0xff80, v0.l3098; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v0.l3099; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e64 s1, 0x7fbf, v0.l3100; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e64 s0, 0x7f, v0.h3101; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_u16_e64 s2, 0x7f00, v1.l3102; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, vcc_lo3103; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, s13104; GFX11SELDAG-TRUE16-NEXT:    s_or_b32 s0, s0, s23105; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s03106; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]3107;3108; GFX11SELDAG-FAKE16-LABEL: not_iszero_or_snan_bf16:3109; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry3110; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3111; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v03112; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v1, v0, -13113; GFX11SELDAG-FAKE16-NEXT:    v_add_nc_u16 v2, 0xff80, v03114; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v03115; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e64 s1, 0x7fbf, v03116; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e64 s0, 0x7f, v13117; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_u16_e64 s2, 0x7f00, v23118; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, vcc_lo3119; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, s13120; GFX11SELDAG-FAKE16-NEXT:    s_or_b32 s0, s0, s23121; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s03122; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]3123entry:3124  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 926)  ; ~(0x60|0x1) = "~(zero|snan)"3125  ret i1 %03126}3127 3128define i1 @isinf_or_nan_bf16(bfloat %x) {3129; GFX7CHECK-LABEL: isinf_or_nan_bf16:3130; GFX7CHECK:       ; %bb.0: ; %entry3131; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3132; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v03133; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 153134; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f7f3135; GFX7CHECK-NEXT:    v_cmp_lt_i32_e32 vcc, s4, v03136; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3137; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]3138;3139; GFX8CHECK-LABEL: isinf_or_nan_bf16:3140; GFX8CHECK:       ; %bb.0: ; %entry3141; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3142; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03143; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f7f3144; GFX8CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v03145; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3146; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]3147;3148; GFX9CHECK-LABEL: isinf_or_nan_bf16:3149; GFX9CHECK:       ; %bb.0: ; %entry3150; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3151; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03152; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f7f3153; GFX9CHECK-NEXT:    v_cmp_lt_i16_e32 vcc, s4, v03154; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3155; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]3156;3157; GFX10CHECK-LABEL: isinf_or_nan_bf16:3158; GFX10CHECK:       ; %bb.0: ; %entry3159; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3160; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03161; GFX10CHECK-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f7f, v03162; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3163; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]3164;3165; GFX11SELDAG-TRUE16-LABEL: isinf_or_nan_bf16:3166; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry3167; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3168; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l3169; GFX11SELDAG-TRUE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f7f, v0.l3170; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3171; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]3172;3173; GFX11SELDAG-FAKE16-LABEL: isinf_or_nan_bf16:3174; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry3175; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3176; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v03177; GFX11SELDAG-FAKE16-NEXT:    v_cmp_lt_i16_e32 vcc_lo, 0x7f7f, v03178; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3179; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]3180entry:3181  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 519)  ; 0x204|0x3 = "inf|nan"3182  ret i1 %03183}3184 3185define i1 @not_isinf_or_nan_bf16(bfloat %x) {3186; GFX7CHECK-LABEL: not_isinf_or_nan_bf16:3187; GFX7CHECK:       ; %bb.0: ; %entry3188; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3189; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v03190; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 153191; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f803192; GFX7CHECK-NEXT:    v_cmp_gt_i32_e32 vcc, s4, v03193; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3194; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]3195;3196; GFX8CHECK-LABEL: not_isinf_or_nan_bf16:3197; GFX8CHECK:       ; %bb.0: ; %entry3198; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3199; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03200; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f803201; GFX8CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v03202; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3203; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]3204;3205; GFX9CHECK-LABEL: not_isinf_or_nan_bf16:3206; GFX9CHECK:       ; %bb.0: ; %entry3207; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3208; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03209; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f803210; GFX9CHECK-NEXT:    v_cmp_gt_i16_e32 vcc, s4, v03211; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3212; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]3213;3214; GFX10CHECK-LABEL: not_isinf_or_nan_bf16:3215; GFX10CHECK:       ; %bb.0: ; %entry3216; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3217; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03218; GFX10CHECK-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f80, v03219; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3220; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]3221;3222; GFX11SELDAG-TRUE16-LABEL: not_isinf_or_nan_bf16:3223; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry3224; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3225; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l3226; GFX11SELDAG-TRUE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f80, v0.l3227; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3228; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]3229;3230; GFX11SELDAG-FAKE16-LABEL: not_isinf_or_nan_bf16:3231; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry3232; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3233; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v03234; GFX11SELDAG-FAKE16-NEXT:    v_cmp_gt_i16_e32 vcc_lo, 0x7f80, v03235; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3236; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]3237entry:3238  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 504)  ; ~(0x204|0x3) = "~(inf|nan)"3239  ret i1 %03240}3241 3242define i1 @isfinite_or_nan_f(bfloat %x) {3243; GFX7CHECK-LABEL: isfinite_or_nan_f:3244; GFX7CHECK:       ; %bb.0: ; %entry3245; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3246; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v03247; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 153248; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f803249; GFX7CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, s4, v03250; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3251; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]3252;3253; GFX8CHECK-LABEL: isfinite_or_nan_f:3254; GFX8CHECK:       ; %bb.0: ; %entry3255; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3256; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03257; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f803258; GFX8CHECK-NEXT:    v_cmp_ne_u16_e32 vcc, s4, v03259; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3260; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]3261;3262; GFX9CHECK-LABEL: isfinite_or_nan_f:3263; GFX9CHECK:       ; %bb.0: ; %entry3264; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3265; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03266; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f803267; GFX9CHECK-NEXT:    v_cmp_ne_u16_e32 vcc, s4, v03268; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3269; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]3270;3271; GFX10CHECK-LABEL: isfinite_or_nan_f:3272; GFX10CHECK:       ; %bb.0: ; %entry3273; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3274; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03275; GFX10CHECK-NEXT:    v_cmp_ne_u16_e32 vcc_lo, 0x7f80, v03276; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3277; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]3278;3279; GFX11SELDAG-TRUE16-LABEL: isfinite_or_nan_f:3280; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry3281; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3282; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l3283; GFX11SELDAG-TRUE16-NEXT:    v_cmp_ne_u16_e32 vcc_lo, 0x7f80, v0.l3284; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3285; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]3286;3287; GFX11SELDAG-FAKE16-LABEL: isfinite_or_nan_f:3288; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry3289; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3290; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v03291; GFX11SELDAG-FAKE16-NEXT:    v_cmp_ne_u16_e32 vcc_lo, 0x7f80, v03292; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3293; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]3294entry:3295  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 507)  ; 0x1f8|0x3 = "finite|nan"3296  ret i1 %03297}3298 3299define i1 @not_isfinite_or_nan_f(bfloat %x) {3300; GFX7CHECK-LABEL: not_isfinite_or_nan_f:3301; GFX7CHECK:       ; %bb.0: ; %entry3302; GFX7CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3303; GFX7CHECK-NEXT:    v_mul_f32_e32 v0, 1.0, v03304; GFX7CHECK-NEXT:    v_bfe_u32 v0, v0, 16, 153305; GFX7CHECK-NEXT:    s_movk_i32 s4, 0x7f803306; GFX7CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, s4, v03307; GFX7CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3308; GFX7CHECK-NEXT:    s_setpc_b64 s[30:31]3309;3310; GFX8CHECK-LABEL: not_isfinite_or_nan_f:3311; GFX8CHECK:       ; %bb.0: ; %entry3312; GFX8CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3313; GFX8CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03314; GFX8CHECK-NEXT:    s_movk_i32 s4, 0x7f803315; GFX8CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v03316; GFX8CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3317; GFX8CHECK-NEXT:    s_setpc_b64 s[30:31]3318;3319; GFX9CHECK-LABEL: not_isfinite_or_nan_f:3320; GFX9CHECK:       ; %bb.0: ; %entry3321; GFX9CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3322; GFX9CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03323; GFX9CHECK-NEXT:    s_movk_i32 s4, 0x7f803324; GFX9CHECK-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v03325; GFX9CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc3326; GFX9CHECK-NEXT:    s_setpc_b64 s[30:31]3327;3328; GFX10CHECK-LABEL: not_isfinite_or_nan_f:3329; GFX10CHECK:       ; %bb.0: ; %entry3330; GFX10CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3331; GFX10CHECK-NEXT:    v_and_b32_e32 v0, 0x7fff, v03332; GFX10CHECK-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v03333; GFX10CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3334; GFX10CHECK-NEXT:    s_setpc_b64 s[30:31]3335;3336; GFX11SELDAG-TRUE16-LABEL: not_isfinite_or_nan_f:3337; GFX11SELDAG-TRUE16:       ; %bb.0: ; %entry3338; GFX11SELDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3339; GFX11SELDAG-TRUE16-NEXT:    v_and_b16 v0.l, 0x7fff, v0.l3340; GFX11SELDAG-TRUE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v0.l3341; GFX11SELDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3342; GFX11SELDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]3343;3344; GFX11SELDAG-FAKE16-LABEL: not_isfinite_or_nan_f:3345; GFX11SELDAG-FAKE16:       ; %bb.0: ; %entry3346; GFX11SELDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3347; GFX11SELDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v03348; GFX11SELDAG-FAKE16-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x7f80, v03349; GFX11SELDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo3350; GFX11SELDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]3351entry:3352  %0 = tail call i1 @llvm.is.fpclass.bf16(bfloat %x, i32 516)  ; ~(0x1f8|0x3) = "~(finite|nan)"3353  ret i1 %03354}3355 3356declare i1 @llvm.is.fpclass.bf16(bfloat, i32)3357declare <2 x i1> @llvm.is.fpclass.v2bf16(<2 x bfloat>, i32)3358declare <3 x i1> @llvm.is.fpclass.v3bf16(<3 x bfloat>, i32)3359declare <4 x i1> @llvm.is.fpclass.v4bf16(<4 x bfloat>, i32)3360 3361; Assume DAZ3362attributes #0 = { "denormal-fp-math"="ieee,preserve-sign" }3363 3364; Maybe daz3365attributes #1 = { "denormal-fp-math"="ieee,dynamic" }3366;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3367; GFX10SELDAG: {{.*}}3368; GFX11SELDAG: {{.*}}3369; GFX7SELDAG: {{.*}}3370; GFX8SELDAG: {{.*}}3371; GFX9SELDAG: {{.*}}3372