4490 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx704 < %s | FileCheck --check-prefixes=GFX7CHECK,GFX7SELDAG %s3; RUN: llc -global-isel=1 -new-reg-bank-select -mtriple=amdgcn -mcpu=gfx704 < %s | FileCheck --check-prefixes=GFX7CHECK,GFX7GLISEL %s4; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx803 < %s | FileCheck --check-prefixes=GFX8CHECK,GFX8SELDAG %s5; RUN: llc -global-isel=1 -new-reg-bank-select -mtriple=amdgcn -mcpu=gfx803 < %s | FileCheck --check-prefixes=GFX8CHECK,GFX8GLISEL %s6; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx908 < %s | FileCheck --check-prefixes=GFX9CHECK,GFX9SELDAG %s7; RUN: llc -global-isel=1 -new-reg-bank-select -mtriple=amdgcn -mcpu=gfx908 < %s | FileCheck --check-prefixes=GFX9CHECK,GFX9GLISEL %s8; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1031 < %s | FileCheck --check-prefixes=GFX10CHECK,GFX10SELDAG %s9; RUN: llc -global-isel=1 -new-reg-bank-select -mtriple=amdgcn -mcpu=gfx1031 < %s | FileCheck --check-prefixes=GFX10CHECK,GFX10GLISEL %s10; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -amdgpu-enable-delay-alu=0 < %s | FileCheck --check-prefixes=GFX11CHECK,GFX11SELDAG,GFX11SELDAG-TRUE16 %s11; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -amdgpu-enable-delay-alu=0 < %s | FileCheck --check-prefixes=GFX11CHECK,GFX11SELDAG,GFX11SELDAG-FAKE16 %s12; RUN: llc -global-isel=1 -new-reg-bank-select -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -amdgpu-enable-delay-alu=0 < %s | FileCheck --check-prefixes=GFX11CHECK,GFX11GLISEL,GFX11GLISEL-TRUE16 %s13; RUN: llc -global-isel=1 -new-reg-bank-select -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -amdgpu-enable-delay-alu=0 < %s | FileCheck --check-prefixes=GFX11CHECK,GFX11GLISEL,GFX11GLISEL-FAKE16 %s14 15; FIXME: There are code size regressions in GlobalISel due to use of SGPRs and16; moving those SGPRs into VGPRs.17 18define amdgpu_kernel void @sgpr_isnan_f16(ptr addrspace(1) %out, half %x) {19; GFX7SELDAG-LABEL: sgpr_isnan_f16:20; GFX7SELDAG: ; %bb.0:21; GFX7SELDAG-NEXT: s_load_dword s6, s[4:5], 0xb22; GFX7SELDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x923; GFX7SELDAG-NEXT: s_mov_b32 s3, 0xf00024; GFX7SELDAG-NEXT: s_mov_b32 s2, -125; GFX7SELDAG-NEXT: s_waitcnt lgkmcnt(0)26; GFX7SELDAG-NEXT: s_and_b32 s4, s6, 0x7fff27; GFX7SELDAG-NEXT: s_cmpk_gt_i32 s4, 0x7c0028; GFX7SELDAG-NEXT: s_cselect_b64 s[4:5], -1, 029; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, -1, s[4:5]30; GFX7SELDAG-NEXT: buffer_store_dword v0, off, s[0:3], 031; GFX7SELDAG-NEXT: s_endpgm32;33; GFX7GLISEL-LABEL: sgpr_isnan_f16:34; GFX7GLISEL: ; %bb.0:35; GFX7GLISEL-NEXT: s_load_dword s3, s[4:5], 0xb36; GFX7GLISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x937; GFX7GLISEL-NEXT: s_mov_b32 s2, -138; GFX7GLISEL-NEXT: s_waitcnt lgkmcnt(0)39; GFX7GLISEL-NEXT: s_and_b32 s3, s3, 0x7fff40; GFX7GLISEL-NEXT: s_and_b32 s3, 0xffff, s341; GFX7GLISEL-NEXT: s_cmpk_gt_u32 s3, 0x7c0042; GFX7GLISEL-NEXT: s_cselect_b32 s3, -1, 043; GFX7GLISEL-NEXT: v_mov_b32_e32 v0, s344; GFX7GLISEL-NEXT: s_mov_b32 s3, 0xf00045; GFX7GLISEL-NEXT: buffer_store_dword v0, off, s[0:3], 046; GFX7GLISEL-NEXT: s_endpgm47;48; GFX8SELDAG-LABEL: sgpr_isnan_f16:49; GFX8SELDAG: ; %bb.0:50; GFX8SELDAG-NEXT: s_load_dword s2, s[4:5], 0x2c51; GFX8SELDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2452; GFX8SELDAG-NEXT: s_waitcnt lgkmcnt(0)53; GFX8SELDAG-NEXT: v_cmp_class_f16_e64 s[2:3], s2, 354; GFX8SELDAG-NEXT: v_mov_b32_e32 v0, s055; GFX8SELDAG-NEXT: v_cndmask_b32_e64 v2, 0, -1, s[2:3]56; GFX8SELDAG-NEXT: v_mov_b32_e32 v1, s157; GFX8SELDAG-NEXT: flat_store_dword v[0:1], v258; GFX8SELDAG-NEXT: s_endpgm59;60; GFX8GLISEL-LABEL: sgpr_isnan_f16:61; GFX8GLISEL: ; %bb.0:62; GFX8GLISEL-NEXT: s_load_dword s2, s[4:5], 0x2c63; GFX8GLISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2464; GFX8GLISEL-NEXT: s_waitcnt lgkmcnt(0)65; GFX8GLISEL-NEXT: v_cmp_class_f16_e64 s[2:3], s2, 366; GFX8GLISEL-NEXT: s_cmp_lg_u64 s[2:3], 067; GFX8GLISEL-NEXT: s_cselect_b32 s2, 1, 068; GFX8GLISEL-NEXT: s_and_b32 s2, s2, 169; GFX8GLISEL-NEXT: s_cmp_lg_u32 s2, 070; GFX8GLISEL-NEXT: s_cselect_b32 s2, -1, 071; GFX8GLISEL-NEXT: v_mov_b32_e32 v0, s072; GFX8GLISEL-NEXT: v_mov_b32_e32 v2, s273; GFX8GLISEL-NEXT: v_mov_b32_e32 v1, s174; GFX8GLISEL-NEXT: flat_store_dword v[0:1], v275; GFX8GLISEL-NEXT: s_endpgm76;77; GFX9SELDAG-LABEL: sgpr_isnan_f16:78; GFX9SELDAG: ; %bb.0:79; GFX9SELDAG-NEXT: s_load_dword s2, s[4:5], 0x2c80; GFX9SELDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2481; GFX9SELDAG-NEXT: v_mov_b32_e32 v0, 082; GFX9SELDAG-NEXT: s_waitcnt lgkmcnt(0)83; GFX9SELDAG-NEXT: v_cmp_class_f16_e64 s[2:3], s2, 384; GFX9SELDAG-NEXT: v_cndmask_b32_e64 v1, 0, -1, s[2:3]85; GFX9SELDAG-NEXT: global_store_dword v0, v1, s[0:1]86; GFX9SELDAG-NEXT: s_endpgm87;88; GFX9GLISEL-LABEL: sgpr_isnan_f16:89; GFX9GLISEL: ; %bb.0:90; GFX9GLISEL-NEXT: s_load_dword s2, s[4:5], 0x2c91; GFX9GLISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2492; GFX9GLISEL-NEXT: v_mov_b32_e32 v1, 093; GFX9GLISEL-NEXT: s_waitcnt lgkmcnt(0)94; GFX9GLISEL-NEXT: v_cmp_class_f16_e64 s[2:3], s2, 395; GFX9GLISEL-NEXT: s_cmp_lg_u64 s[2:3], 096; GFX9GLISEL-NEXT: s_cselect_b32 s2, 1, 097; GFX9GLISEL-NEXT: s_and_b32 s2, s2, 198; GFX9GLISEL-NEXT: s_cmp_lg_u32 s2, 099; GFX9GLISEL-NEXT: s_cselect_b32 s2, -1, 0100; GFX9GLISEL-NEXT: v_mov_b32_e32 v0, s2101; GFX9GLISEL-NEXT: global_store_dword v1, v0, s[0:1]102; GFX9GLISEL-NEXT: s_endpgm103;104; GFX10SELDAG-LABEL: sgpr_isnan_f16:105; GFX10SELDAG: ; %bb.0:106; GFX10SELDAG-NEXT: s_clause 0x1107; GFX10SELDAG-NEXT: s_load_dword s2, s[4:5], 0x2c108; GFX10SELDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24109; GFX10SELDAG-NEXT: v_mov_b32_e32 v0, 0110; GFX10SELDAG-NEXT: s_waitcnt lgkmcnt(0)111; GFX10SELDAG-NEXT: v_cmp_class_f16_e64 s2, s2, 3112; GFX10SELDAG-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2113; GFX10SELDAG-NEXT: global_store_dword v0, v1, s[0:1]114; GFX10SELDAG-NEXT: s_endpgm115;116; GFX10GLISEL-LABEL: sgpr_isnan_f16:117; GFX10GLISEL: ; %bb.0:118; GFX10GLISEL-NEXT: s_load_dword s0, s[4:5], 0x2c119; GFX10GLISEL-NEXT: v_mov_b32_e32 v1, 0120; GFX10GLISEL-NEXT: s_waitcnt lgkmcnt(0)121; GFX10GLISEL-NEXT: v_cmp_class_f16_e64 s2, s0, 3122; GFX10GLISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24123; GFX10GLISEL-NEXT: s_cmp_lg_u32 s2, 0124; GFX10GLISEL-NEXT: s_cselect_b32 s2, 1, 0125; GFX10GLISEL-NEXT: s_and_b32 s2, s2, 1126; GFX10GLISEL-NEXT: s_cmp_lg_u32 s2, 0127; GFX10GLISEL-NEXT: s_cselect_b32 s2, -1, 0128; GFX10GLISEL-NEXT: v_mov_b32_e32 v0, s2129; GFX10GLISEL-NEXT: s_waitcnt lgkmcnt(0)130; GFX10GLISEL-NEXT: global_store_dword v1, v0, s[0:1]131; GFX10GLISEL-NEXT: s_endpgm132;133; GFX11SELDAG-TRUE16-LABEL: sgpr_isnan_f16:134; GFX11SELDAG-TRUE16: ; %bb.0:135; GFX11SELDAG-TRUE16-NEXT: s_clause 0x1136; GFX11SELDAG-TRUE16-NEXT: s_load_b32 s2, s[4:5], 0x2c137; GFX11SELDAG-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24138; GFX11SELDAG-TRUE16-NEXT: v_dual_mov_b32 v0, 3 :: v_dual_mov_b32 v1, 0139; GFX11SELDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)140; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, s2, v0.l141; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc_lo142; GFX11SELDAG-TRUE16-NEXT: global_store_b32 v1, v0, s[0:1]143; GFX11SELDAG-TRUE16-NEXT: s_endpgm144;145; GFX11SELDAG-FAKE16-LABEL: sgpr_isnan_f16:146; GFX11SELDAG-FAKE16: ; %bb.0:147; GFX11SELDAG-FAKE16-NEXT: s_clause 0x1148; GFX11SELDAG-FAKE16-NEXT: s_load_b32 s2, s[4:5], 0x2c149; GFX11SELDAG-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24150; GFX11SELDAG-FAKE16-NEXT: v_mov_b32_e32 v0, 0151; GFX11SELDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)152; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s2, s2, 3153; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2154; GFX11SELDAG-FAKE16-NEXT: global_store_b32 v0, v1, s[0:1]155; GFX11SELDAG-FAKE16-NEXT: s_endpgm156;157; GFX11GLISEL-TRUE16-LABEL: sgpr_isnan_f16:158; GFX11GLISEL-TRUE16: ; %bb.0:159; GFX11GLISEL-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x2c160; GFX11GLISEL-TRUE16-NEXT: v_dual_mov_b32 v0, 3 :: v_dual_mov_b32 v1, 0161; GFX11GLISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)162; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, s0, v0.l163; GFX11GLISEL-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24164; GFX11GLISEL-TRUE16-NEXT: s_cmp_lg_u32 vcc_lo, 0165; GFX11GLISEL-TRUE16-NEXT: s_cselect_b32 s2, 1, 0166; GFX11GLISEL-TRUE16-NEXT: s_and_b32 s2, s2, 1167; GFX11GLISEL-TRUE16-NEXT: s_cmp_lg_u32 s2, 0168; GFX11GLISEL-TRUE16-NEXT: s_cselect_b32 s2, -1, 0169; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v0, s2170; GFX11GLISEL-TRUE16-NEXT: s_waitcnt lgkmcnt(0)171; GFX11GLISEL-TRUE16-NEXT: global_store_b32 v1, v0, s[0:1]172; GFX11GLISEL-TRUE16-NEXT: s_endpgm173;174; GFX11GLISEL-FAKE16-LABEL: sgpr_isnan_f16:175; GFX11GLISEL-FAKE16: ; %bb.0:176; GFX11GLISEL-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x2c177; GFX11GLISEL-FAKE16-NEXT: v_mov_b32_e32 v1, 0178; GFX11GLISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)179; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s2, s0, 3180; GFX11GLISEL-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x24181; GFX11GLISEL-FAKE16-NEXT: s_cmp_lg_u32 s2, 0182; GFX11GLISEL-FAKE16-NEXT: s_cselect_b32 s2, 1, 0183; GFX11GLISEL-FAKE16-NEXT: s_and_b32 s2, s2, 1184; GFX11GLISEL-FAKE16-NEXT: s_cmp_lg_u32 s2, 0185; GFX11GLISEL-FAKE16-NEXT: s_cselect_b32 s2, -1, 0186; GFX11GLISEL-FAKE16-NEXT: v_mov_b32_e32 v0, s2187; GFX11GLISEL-FAKE16-NEXT: s_waitcnt lgkmcnt(0)188; GFX11GLISEL-FAKE16-NEXT: global_store_b32 v1, v0, s[0:1]189; GFX11GLISEL-FAKE16-NEXT: s_endpgm190 %result = call i1 @llvm.is.fpclass.f16(half %x, i32 3)191 %sext = sext i1 %result to i32192 store i32 %sext, ptr addrspace(1) %out, align 4193 ret void194}195 196define i1 @zeromask_f16(half %x) nounwind {197; GFX7CHECK-LABEL: zeromask_f16:198; GFX7CHECK: ; %bb.0:199; GFX7CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)200; GFX7CHECK-NEXT: v_mov_b32_e32 v0, 0201; GFX7CHECK-NEXT: s_setpc_b64 s[30:31]202;203; GFX8CHECK-LABEL: zeromask_f16:204; GFX8CHECK: ; %bb.0:205; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)206; GFX8CHECK-NEXT: v_mov_b32_e32 v0, 0207; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]208;209; GFX9CHECK-LABEL: zeromask_f16:210; GFX9CHECK: ; %bb.0:211; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)212; GFX9CHECK-NEXT: v_mov_b32_e32 v0, 0213; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]214;215; GFX10CHECK-LABEL: zeromask_f16:216; GFX10CHECK: ; %bb.0:217; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)218; GFX10CHECK-NEXT: v_mov_b32_e32 v0, 0219; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]220;221; GFX11CHECK-LABEL: zeromask_f16:222; GFX11CHECK: ; %bb.0:223; GFX11CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)224; GFX11CHECK-NEXT: v_mov_b32_e32 v0, 0225; GFX11CHECK-NEXT: s_setpc_b64 s[30:31]226 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 0)227 ret i1 %1228}229 230; FIXME: DAG and GlobalISel return different values for i1 true231define i1 @allflags_f16(half %x) nounwind {232; GFX7CHECK-LABEL: allflags_f16:233; GFX7CHECK: ; %bb.0:234; GFX7CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)235; GFX7CHECK-NEXT: v_mov_b32_e32 v0, 1236; GFX7CHECK-NEXT: s_setpc_b64 s[30:31]237;238; GFX8CHECK-LABEL: allflags_f16:239; GFX8CHECK: ; %bb.0:240; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)241; GFX8CHECK-NEXT: v_mov_b32_e32 v0, 1242; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]243;244; GFX9CHECK-LABEL: allflags_f16:245; GFX9CHECK: ; %bb.0:246; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)247; GFX9CHECK-NEXT: v_mov_b32_e32 v0, 1248; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]249;250; GFX10CHECK-LABEL: allflags_f16:251; GFX10CHECK: ; %bb.0:252; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)253; GFX10CHECK-NEXT: v_mov_b32_e32 v0, 1254; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]255;256; GFX11CHECK-LABEL: allflags_f16:257; GFX11CHECK: ; %bb.0:258; GFX11CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)259; GFX11CHECK-NEXT: v_mov_b32_e32 v0, 1260; GFX11CHECK-NEXT: s_setpc_b64 s[30:31]261 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 1023) ; 0x3ff262 ret i1 %1263}264 265define i1 @snan_f16(half %x) nounwind {266; GFX7SELDAG-LABEL: snan_f16:267; GFX7SELDAG: ; %bb.0:268; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)269; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v0270; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7e00271; GFX7SELDAG-NEXT: s_movk_i32 s5, 0x7c00272; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v0273; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, s4, v0274; GFX7SELDAG-NEXT: v_cmp_lt_i32_e64 s[4:5], s5, v0275; GFX7SELDAG-NEXT: s_and_b64 s[4:5], s[4:5], vcc276; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]277; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]278;279; GFX7GLISEL-LABEL: snan_f16:280; GFX7GLISEL: ; %bb.0:281; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)282; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v0283; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0284; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xffff83ff, v0285; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x1ff286; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v1287; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc288; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]289;290; GFX8CHECK-LABEL: snan_f16:291; GFX8CHECK: ; %bb.0:292; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)293; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 1294; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]295; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]296;297; GFX9CHECK-LABEL: snan_f16:298; GFX9CHECK: ; %bb.0:299; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)300; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 1301; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]302; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]303;304; GFX10CHECK-LABEL: snan_f16:305; GFX10CHECK: ; %bb.0:306; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)307; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 1308; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4309; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]310;311; GFX11SELDAG-TRUE16-LABEL: snan_f16:312; GFX11SELDAG-TRUE16: ; %bb.0:313; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)314; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 1315; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l316; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo317; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]318;319; GFX11SELDAG-FAKE16-LABEL: snan_f16:320; GFX11SELDAG-FAKE16: ; %bb.0:321; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)322; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 1323; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0324; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]325;326; GFX11GLISEL-TRUE16-LABEL: snan_f16:327; GFX11GLISEL-TRUE16: ; %bb.0:328; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)329; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 1330; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l331; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo332; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]333;334; GFX11GLISEL-FAKE16-LABEL: snan_f16:335; GFX11GLISEL-FAKE16: ; %bb.0:336; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)337; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 1338; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0339; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]340 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 1) ; 0x001341 ret i1 %1342}343 344define i1 @qnan_f16(half %x) nounwind {345; GFX7SELDAG-LABEL: qnan_f16:346; GFX7SELDAG: ; %bb.0:347; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)348; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v0349; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7dff350; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v0351; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v0352; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc353; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]354;355; GFX7GLISEL-LABEL: qnan_f16:356; GFX7GLISEL: ; %bb.0:357; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)358; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v0359; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0360; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7e00361; GFX7GLISEL-NEXT: v_cmp_ge_u32_e32 vcc, v0, v1362; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc363; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]364;365; GFX8CHECK-LABEL: qnan_f16:366; GFX8CHECK: ; %bb.0:367; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)368; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 2369; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]370; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]371;372; GFX9CHECK-LABEL: qnan_f16:373; GFX9CHECK: ; %bb.0:374; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)375; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 2376; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]377; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]378;379; GFX10CHECK-LABEL: qnan_f16:380; GFX10CHECK: ; %bb.0:381; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)382; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 2383; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4384; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]385;386; GFX11SELDAG-TRUE16-LABEL: qnan_f16:387; GFX11SELDAG-TRUE16: ; %bb.0:388; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)389; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 2390; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l391; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo392; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]393;394; GFX11SELDAG-FAKE16-LABEL: qnan_f16:395; GFX11SELDAG-FAKE16: ; %bb.0:396; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)397; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 2398; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0399; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]400;401; GFX11GLISEL-TRUE16-LABEL: qnan_f16:402; GFX11GLISEL-TRUE16: ; %bb.0:403; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)404; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 2405; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l406; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo407; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]408;409; GFX11GLISEL-FAKE16-LABEL: qnan_f16:410; GFX11GLISEL-FAKE16: ; %bb.0:411; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)412; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 2413; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0414; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]415 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 2) ; 0x002416 ret i1 %1417}418 419define i1 @posinf_f16(half %x) nounwind {420; GFX7SELDAG-LABEL: posinf_f16:421; GFX7SELDAG: ; %bb.0:422; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)423; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v0424; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c00425; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, s4, v0426; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc427; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]428;429; GFX7GLISEL-LABEL: posinf_f16:430; GFX7GLISEL: ; %bb.0:431; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)432; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0433; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c00434; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1435; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc436; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]437;438; GFX8CHECK-LABEL: posinf_f16:439; GFX8CHECK: ; %bb.0:440; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)441; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x200442; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v1443; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc444; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]445;446; GFX9CHECK-LABEL: posinf_f16:447; GFX9CHECK: ; %bb.0:448; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)449; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x200450; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v1451; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc452; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]453;454; GFX10CHECK-LABEL: posinf_f16:455; GFX10CHECK: ; %bb.0:456; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)457; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x200458; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4459; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]460;461; GFX11SELDAG-TRUE16-LABEL: posinf_f16:462; GFX11SELDAG-TRUE16: ; %bb.0:463; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)464; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x200465; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l466; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo467; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]468;469; GFX11SELDAG-FAKE16-LABEL: posinf_f16:470; GFX11SELDAG-FAKE16: ; %bb.0:471; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)472; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x200473; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0474; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]475;476; GFX11GLISEL-TRUE16-LABEL: posinf_f16:477; GFX11GLISEL-TRUE16: ; %bb.0:478; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)479; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x200480; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l481; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo482; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]483;484; GFX11GLISEL-FAKE16-LABEL: posinf_f16:485; GFX11GLISEL-FAKE16: ; %bb.0:486; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)487; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x200488; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0489; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]490 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 512) ; 0x200491 ret i1 %1492}493 494define i1 @neginf_f16(half %x) nounwind {495; GFX7SELDAG-LABEL: neginf_f16:496; GFX7SELDAG: ; %bb.0:497; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)498; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v0499; GFX7SELDAG-NEXT: s_mov_b32 s4, 0xfc00500; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, s4, v0501; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc502; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]503;504; GFX7GLISEL-LABEL: neginf_f16:505; GFX7GLISEL: ; %bb.0:506; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)507; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0508; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0xfc00509; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1510; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc511; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]512;513; GFX8CHECK-LABEL: neginf_f16:514; GFX8CHECK: ; %bb.0:515; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)516; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 4517; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]518; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]519;520; GFX9CHECK-LABEL: neginf_f16:521; GFX9CHECK: ; %bb.0:522; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)523; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 4524; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]525; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]526;527; GFX10CHECK-LABEL: neginf_f16:528; GFX10CHECK: ; %bb.0:529; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)530; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 4531; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4532; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]533;534; GFX11SELDAG-TRUE16-LABEL: neginf_f16:535; GFX11SELDAG-TRUE16: ; %bb.0:536; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)537; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 4538; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l539; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo540; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]541;542; GFX11SELDAG-FAKE16-LABEL: neginf_f16:543; GFX11SELDAG-FAKE16: ; %bb.0:544; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)545; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 4546; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0547; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]548;549; GFX11GLISEL-TRUE16-LABEL: neginf_f16:550; GFX11GLISEL-TRUE16: ; %bb.0:551; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)552; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 4553; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l554; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo555; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]556;557; GFX11GLISEL-FAKE16-LABEL: neginf_f16:558; GFX11GLISEL-FAKE16: ; %bb.0:559; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)560; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 4561; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0562; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]563 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 4) ; 0x004564 ret i1 %1565}566 567define i1 @posnormal_f16(half %x) nounwind {568; GFX7SELDAG-LABEL: posnormal_f16:569; GFX7SELDAG: ; %bb.0:570; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)571; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v0572; GFX7SELDAG-NEXT: s_movk_i32 s6, 0x7800573; GFX7SELDAG-NEXT: v_bfe_i32 v1, v0, 0, 16574; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v0575; GFX7SELDAG-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v0576; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0xffff, v0577; GFX7SELDAG-NEXT: v_cmp_lt_i32_e64 s[4:5], -1, v1578; GFX7SELDAG-NEXT: v_cmp_gt_u32_e32 vcc, s6, v0579; GFX7SELDAG-NEXT: s_and_b64 s[4:5], vcc, s[4:5]580; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]581; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]582;583; GFX7GLISEL-LABEL: posnormal_f16:584; GFX7GLISEL: ; %bb.0:585; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)586; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v0587; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0588; GFX7GLISEL-NEXT: v_and_b32_e32 v2, 0xffff, v1589; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v0, v2590; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v1591; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0592; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7800593; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v1594; GFX7GLISEL-NEXT: s_and_b64 s[4:5], vcc, s[4:5]595; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]596; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]597;598; GFX8CHECK-LABEL: posnormal_f16:599; GFX8CHECK: ; %bb.0:600; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)601; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x100602; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v1603; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc604; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]605;606; GFX9CHECK-LABEL: posnormal_f16:607; GFX9CHECK: ; %bb.0:608; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)609; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x100610; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v1611; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc612; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]613;614; GFX10CHECK-LABEL: posnormal_f16:615; GFX10CHECK: ; %bb.0:616; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)617; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x100618; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4619; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]620;621; GFX11SELDAG-TRUE16-LABEL: posnormal_f16:622; GFX11SELDAG-TRUE16: ; %bb.0:623; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)624; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x100625; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l626; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo627; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]628;629; GFX11SELDAG-FAKE16-LABEL: posnormal_f16:630; GFX11SELDAG-FAKE16: ; %bb.0:631; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)632; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x100633; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0634; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]635;636; GFX11GLISEL-TRUE16-LABEL: posnormal_f16:637; GFX11GLISEL-TRUE16: ; %bb.0:638; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)639; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x100640; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l641; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo642; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]643;644; GFX11GLISEL-FAKE16-LABEL: posnormal_f16:645; GFX11GLISEL-FAKE16: ; %bb.0:646; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)647; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x100648; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0649; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]650 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 256) ; 0x100651 ret i1 %1652}653 654define i1 @negnormal_f16(half %x) nounwind {655; GFX7SELDAG-LABEL: negnormal_f16:656; GFX7SELDAG: ; %bb.0:657; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)658; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v0659; GFX7SELDAG-NEXT: s_movk_i32 s6, 0x7800660; GFX7SELDAG-NEXT: v_bfe_i32 v1, v0, 0, 16661; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v0662; GFX7SELDAG-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v0663; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0xffff, v0664; GFX7SELDAG-NEXT: v_cmp_gt_i32_e64 s[4:5], 0, v1665; GFX7SELDAG-NEXT: v_cmp_gt_u32_e32 vcc, s6, v0666; GFX7SELDAG-NEXT: s_and_b64 s[4:5], vcc, s[4:5]667; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]668; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]669;670; GFX7GLISEL-LABEL: negnormal_f16:671; GFX7GLISEL: ; %bb.0:672; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)673; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v0674; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0675; GFX7GLISEL-NEXT: v_and_b32_e32 v2, 0xffff, v1676; GFX7GLISEL-NEXT: v_cmp_ne_u32_e64 s[4:5], v0, v2677; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v1678; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0679; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7800680; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v1681; GFX7GLISEL-NEXT: s_and_b64 s[4:5], vcc, s[4:5]682; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]683; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]684;685; GFX8CHECK-LABEL: negnormal_f16:686; GFX8CHECK: ; %bb.0:687; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)688; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 8689; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]690; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]691;692; GFX9CHECK-LABEL: negnormal_f16:693; GFX9CHECK: ; %bb.0:694; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)695; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 8696; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]697; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]698;699; GFX10CHECK-LABEL: negnormal_f16:700; GFX10CHECK: ; %bb.0:701; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)702; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 8703; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4704; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]705;706; GFX11SELDAG-TRUE16-LABEL: negnormal_f16:707; GFX11SELDAG-TRUE16: ; %bb.0:708; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)709; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 8710; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l711; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo712; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]713;714; GFX11SELDAG-FAKE16-LABEL: negnormal_f16:715; GFX11SELDAG-FAKE16: ; %bb.0:716; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)717; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 8718; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0719; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]720;721; GFX11GLISEL-TRUE16-LABEL: negnormal_f16:722; GFX11GLISEL-TRUE16: ; %bb.0:723; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)724; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 8725; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l726; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo727; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]728;729; GFX11GLISEL-FAKE16-LABEL: negnormal_f16:730; GFX11GLISEL-FAKE16: ; %bb.0:731; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)732; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 8733; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0734; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]735 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 8) ; 0x008736 ret i1 %1737}738 739define i1 @possubnormal_f16(half %x) nounwind {740; GFX7SELDAG-LABEL: possubnormal_f16:741; GFX7SELDAG: ; %bb.0:742; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)743; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v0744; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x3ff745; GFX7SELDAG-NEXT: v_add_i32_e32 v0, vcc, -1, v0746; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0xffff, v0747; GFX7SELDAG-NEXT: v_cmp_gt_u32_e32 vcc, s4, v0748; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc749; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]750;751; GFX7GLISEL-LABEL: possubnormal_f16:752; GFX7GLISEL: ; %bb.0:753; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)754; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, -1, v0755; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0756; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x3ff757; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v1758; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc759; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]760;761; GFX8CHECK-LABEL: possubnormal_f16:762; GFX8CHECK: ; %bb.0:763; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)764; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x80765; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v1766; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc767; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]768;769; GFX9CHECK-LABEL: possubnormal_f16:770; GFX9CHECK: ; %bb.0:771; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)772; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x80773; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v1774; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc775; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]776;777; GFX10CHECK-LABEL: possubnormal_f16:778; GFX10CHECK: ; %bb.0:779; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)780; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x80781; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4782; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]783;784; GFX11SELDAG-TRUE16-LABEL: possubnormal_f16:785; GFX11SELDAG-TRUE16: ; %bb.0:786; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)787; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x80788; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l789; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo790; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]791;792; GFX11SELDAG-FAKE16-LABEL: possubnormal_f16:793; GFX11SELDAG-FAKE16: ; %bb.0:794; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)795; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x80796; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0797; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]798;799; GFX11GLISEL-TRUE16-LABEL: possubnormal_f16:800; GFX11GLISEL-TRUE16: ; %bb.0:801; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)802; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x80803; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l804; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo805; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]806;807; GFX11GLISEL-FAKE16-LABEL: possubnormal_f16:808; GFX11GLISEL-FAKE16: ; %bb.0:809; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)810; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x80811; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0812; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]813 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 128) ; 0x080814 ret i1 %1815}816 817define i1 @negsubnormal_f16(half %x) nounwind {818; GFX7SELDAG-LABEL: negsubnormal_f16:819; GFX7SELDAG: ; %bb.0:820; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)821; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v0822; GFX7SELDAG-NEXT: v_bfe_i32 v1, v0, 0, 16823; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v0824; GFX7SELDAG-NEXT: v_add_i32_e64 v0, s[4:5], -1, v0825; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x3ff826; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, 0, v1827; GFX7SELDAG-NEXT: v_cmp_gt_u32_e64 s[4:5], s4, v0828; GFX7SELDAG-NEXT: s_and_b64 s[4:5], s[4:5], vcc829; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]830; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]831;832; GFX7GLISEL-LABEL: negsubnormal_f16:833; GFX7GLISEL: ; %bb.0:834; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)835; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v0836; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0837; GFX7GLISEL-NEXT: v_and_b32_e32 v2, 0xffff, v1838; GFX7GLISEL-NEXT: v_cmp_ne_u32_e32 vcc, v0, v2839; GFX7GLISEL-NEXT: v_add_i32_e64 v0, s[4:5], -1, v1840; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0841; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x3ff842; GFX7GLISEL-NEXT: v_cmp_lt_u32_e64 s[4:5], v0, v1843; GFX7GLISEL-NEXT: s_and_b64 s[4:5], s[4:5], vcc844; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]845; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]846;847; GFX8CHECK-LABEL: negsubnormal_f16:848; GFX8CHECK: ; %bb.0:849; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)850; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 16851; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]852; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]853;854; GFX9CHECK-LABEL: negsubnormal_f16:855; GFX9CHECK: ; %bb.0:856; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)857; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 16858; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]859; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]860;861; GFX10CHECK-LABEL: negsubnormal_f16:862; GFX10CHECK: ; %bb.0:863; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)864; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 16865; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4866; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]867;868; GFX11SELDAG-TRUE16-LABEL: negsubnormal_f16:869; GFX11SELDAG-TRUE16: ; %bb.0:870; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)871; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 16872; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l873; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo874; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]875;876; GFX11SELDAG-FAKE16-LABEL: negsubnormal_f16:877; GFX11SELDAG-FAKE16: ; %bb.0:878; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)879; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 16880; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0881; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]882;883; GFX11GLISEL-TRUE16-LABEL: negsubnormal_f16:884; GFX11GLISEL-TRUE16: ; %bb.0:885; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)886; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 16887; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l888; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo889; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]890;891; GFX11GLISEL-FAKE16-LABEL: negsubnormal_f16:892; GFX11GLISEL-FAKE16: ; %bb.0:893; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)894; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 16895; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0896; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]897 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 16) ; 0x010898 ret i1 %1899}900 901define i1 @poszero_f16(half %x) nounwind {902; GFX7SELDAG-LABEL: poszero_f16:903; GFX7SELDAG: ; %bb.0:904; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)905; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v0906; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0907; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc908; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]909;910; GFX7GLISEL-LABEL: poszero_f16:911; GFX7GLISEL: ; %bb.0:912; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)913; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0914; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0915; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc916; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]917;918; GFX8CHECK-LABEL: poszero_f16:919; GFX8CHECK: ; %bb.0:920; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)921; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 64922; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]923; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]924;925; GFX9CHECK-LABEL: poszero_f16:926; GFX9CHECK: ; %bb.0:927; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)928; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 64929; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]930; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]931;932; GFX10CHECK-LABEL: poszero_f16:933; GFX10CHECK: ; %bb.0:934; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)935; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 64936; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4937; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]938;939; GFX11SELDAG-TRUE16-LABEL: poszero_f16:940; GFX11SELDAG-TRUE16: ; %bb.0:941; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)942; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 64943; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l944; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo945; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]946;947; GFX11SELDAG-FAKE16-LABEL: poszero_f16:948; GFX11SELDAG-FAKE16: ; %bb.0:949; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)950; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 64951; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0952; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]953;954; GFX11GLISEL-TRUE16-LABEL: poszero_f16:955; GFX11GLISEL-TRUE16: ; %bb.0:956; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)957; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 64958; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l959; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo960; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]961;962; GFX11GLISEL-FAKE16-LABEL: poszero_f16:963; GFX11GLISEL-FAKE16: ; %bb.0:964; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)965; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 64966; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0967; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]968 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 64) ; 0x040969 ret i1 %1970}971 972define i1 @negzero_f16(half %x) nounwind {973; GFX7SELDAG-LABEL: negzero_f16:974; GFX7SELDAG: ; %bb.0:975; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)976; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v0977; GFX7SELDAG-NEXT: s_mov_b32 s4, 0x8000978; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, s4, v0979; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc980; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]981;982; GFX7GLISEL-LABEL: negzero_f16:983; GFX7GLISEL: ; %bb.0:984; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)985; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0986; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x8000987; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v1988; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc989; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]990;991; GFX8CHECK-LABEL: negzero_f16:992; GFX8CHECK: ; %bb.0:993; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)994; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 32995; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]996; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]997;998; GFX9CHECK-LABEL: negzero_f16:999; GFX9CHECK: ; %bb.0:1000; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1001; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 321002; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1003; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]1004;1005; GFX10CHECK-LABEL: negzero_f16:1006; GFX10CHECK: ; %bb.0:1007; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1008; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 321009; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s41010; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]1011;1012; GFX11SELDAG-TRUE16-LABEL: negzero_f16:1013; GFX11SELDAG-TRUE16: ; %bb.0:1014; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1015; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 321016; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1017; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1018; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1019;1020; GFX11SELDAG-FAKE16-LABEL: negzero_f16:1021; GFX11SELDAG-FAKE16: ; %bb.0:1022; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1023; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 321024; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01025; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1026;1027; GFX11GLISEL-TRUE16-LABEL: negzero_f16:1028; GFX11GLISEL-TRUE16: ; %bb.0:1029; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1030; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 321031; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1032; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1033; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]1034;1035; GFX11GLISEL-FAKE16-LABEL: negzero_f16:1036; GFX11GLISEL-FAKE16: ; %bb.0:1037; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1038; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 321039; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01040; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]1041 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 32) ; 0x0201042 ret i1 %11043}1044 1045define i1 @posfinite_f16(half %x) nounwind {1046; GFX7SELDAG-LABEL: posfinite_f16:1047; GFX7SELDAG: ; %bb.0:1048; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1049; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v01050; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c001051; GFX7SELDAG-NEXT: v_cmp_gt_u32_e32 vcc, s4, v01052; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1053; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]1054;1055; GFX7GLISEL-LABEL: posfinite_f16:1056; GFX7GLISEL: ; %bb.0:1057; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1058; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v01059; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c001060; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v11061; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1062; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]1063;1064; GFX8CHECK-LABEL: posfinite_f16:1065; GFX8CHECK: ; %bb.0:1066; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1067; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x1c01068; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v11069; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1070; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]1071;1072; GFX9CHECK-LABEL: posfinite_f16:1073; GFX9CHECK: ; %bb.0:1074; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1075; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x1c01076; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v11077; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1078; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]1079;1080; GFX10CHECK-LABEL: posfinite_f16:1081; GFX10CHECK: ; %bb.0:1082; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1083; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x1c01084; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s41085; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]1086;1087; GFX11SELDAG-TRUE16-LABEL: posfinite_f16:1088; GFX11SELDAG-TRUE16: ; %bb.0:1089; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1090; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x1c01091; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1092; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1093; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1094;1095; GFX11SELDAG-FAKE16-LABEL: posfinite_f16:1096; GFX11SELDAG-FAKE16: ; %bb.0:1097; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1098; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x1c01099; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01100; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1101;1102; GFX11GLISEL-TRUE16-LABEL: posfinite_f16:1103; GFX11GLISEL-TRUE16: ; %bb.0:1104; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1105; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x1c01106; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1107; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1108; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]1109;1110; GFX11GLISEL-FAKE16-LABEL: posfinite_f16:1111; GFX11GLISEL-FAKE16: ; %bb.0:1112; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1113; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x1c01114; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01115; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]1116 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 448) ; 0x1c01117 ret i1 %11118}1119 1120define i1 @negfinite_f16(half %x) nounwind {1121; GFX7SELDAG-LABEL: negfinite_f16:1122; GFX7SELDAG: ; %bb.0:1123; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1124; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v01125; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c001126; GFX7SELDAG-NEXT: v_bfe_i32 v1, v0, 0, 161127; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v01128; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, 0, v11129; GFX7SELDAG-NEXT: v_cmp_gt_i32_e64 s[4:5], s4, v01130; GFX7SELDAG-NEXT: s_and_b64 s[4:5], s[4:5], vcc1131; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1132; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]1133;1134; GFX7GLISEL-LABEL: negfinite_f16:1135; GFX7GLISEL: ; %bb.0:1136; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1137; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v01138; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v01139; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v11140; GFX7GLISEL-NEXT: v_cmp_ne_u32_e32 vcc, v0, v11141; GFX7GLISEL-NEXT: v_mov_b32_e32 v0, 0x7c001142; GFX7GLISEL-NEXT: v_cmp_lt_u32_e64 s[4:5], v1, v01143; GFX7GLISEL-NEXT: s_and_b64 s[4:5], s[4:5], vcc1144; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1145; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]1146;1147; GFX8CHECK-LABEL: negfinite_f16:1148; GFX8CHECK: ; %bb.0:1149; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1150; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 561151; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1152; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]1153;1154; GFX9CHECK-LABEL: negfinite_f16:1155; GFX9CHECK: ; %bb.0:1156; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1157; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 561158; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1159; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]1160;1161; GFX10CHECK-LABEL: negfinite_f16:1162; GFX10CHECK: ; %bb.0:1163; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1164; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 561165; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s41166; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]1167;1168; GFX11SELDAG-TRUE16-LABEL: negfinite_f16:1169; GFX11SELDAG-TRUE16: ; %bb.0:1170; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1171; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 561172; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1173; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1174; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1175;1176; GFX11SELDAG-FAKE16-LABEL: negfinite_f16:1177; GFX11SELDAG-FAKE16: ; %bb.0:1178; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1179; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 561180; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01181; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1182;1183; GFX11GLISEL-TRUE16-LABEL: negfinite_f16:1184; GFX11GLISEL-TRUE16: ; %bb.0:1185; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1186; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 561187; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1188; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1189; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]1190;1191; GFX11GLISEL-FAKE16-LABEL: negfinite_f16:1192; GFX11GLISEL-FAKE16: ; %bb.0:1193; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1194; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 561195; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01196; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]1197 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 56) ; 0x0381198 ret i1 %11199}1200 1201define i1 @isnan_f16(half %x) nounwind {1202; GFX7SELDAG-LABEL: isnan_f16:1203; GFX7SELDAG: ; %bb.0:1204; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1205; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v01206; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c001207; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v01208; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v01209; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1210; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]1211;1212; GFX7GLISEL-LABEL: isnan_f16:1213; GFX7GLISEL: ; %bb.0:1214; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1215; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v01216; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v01217; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c001218; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v0, v11219; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1220; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]1221;1222; GFX8CHECK-LABEL: isnan_f16:1223; GFX8CHECK: ; %bb.0:1224; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1225; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 31226; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1227; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]1228;1229; GFX9CHECK-LABEL: isnan_f16:1230; GFX9CHECK: ; %bb.0:1231; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1232; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 31233; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1234; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]1235;1236; GFX10CHECK-LABEL: isnan_f16:1237; GFX10CHECK: ; %bb.0:1238; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1239; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 31240; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s41241; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]1242;1243; GFX11SELDAG-TRUE16-LABEL: isnan_f16:1244; GFX11SELDAG-TRUE16: ; %bb.0:1245; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1246; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 31247; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1248; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1249; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1250;1251; GFX11SELDAG-FAKE16-LABEL: isnan_f16:1252; GFX11SELDAG-FAKE16: ; %bb.0:1253; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1254; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 31255; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01256; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1257;1258; GFX11GLISEL-TRUE16-LABEL: isnan_f16:1259; GFX11GLISEL-TRUE16: ; %bb.0:1260; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1261; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 31262; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1263; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1264; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]1265;1266; GFX11GLISEL-FAKE16-LABEL: isnan_f16:1267; GFX11GLISEL-FAKE16: ; %bb.0:1268; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1269; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 31270; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01271; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]1272 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 3) ; nan1273 ret i1 %11274}1275 1276define i1 @not_isnan_f16(half %x) {1277; GFX7SELDAG-LABEL: not_isnan_f16:1278; GFX7SELDAG: ; %bb.0:1279; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1280; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v01281; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c011282; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v01283; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, s4, v01284; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1285; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]1286;1287; GFX7GLISEL-LABEL: not_isnan_f16:1288; GFX7GLISEL: ; %bb.0:1289; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1290; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v01291; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v01292; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c011293; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v11294; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1295; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]1296;1297; GFX8CHECK-LABEL: not_isnan_f16:1298; GFX8CHECK: ; %bb.0:1299; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1300; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x3fc1301; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v11302; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1303; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]1304;1305; GFX9CHECK-LABEL: not_isnan_f16:1306; GFX9CHECK: ; %bb.0:1307; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1308; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x3fc1309; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v11310; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1311; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]1312;1313; GFX10CHECK-LABEL: not_isnan_f16:1314; GFX10CHECK: ; %bb.0:1315; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1316; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x3fc1317; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s41318; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]1319;1320; GFX11SELDAG-TRUE16-LABEL: not_isnan_f16:1321; GFX11SELDAG-TRUE16: ; %bb.0:1322; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1323; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x3fc1324; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1325; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1326; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1327;1328; GFX11SELDAG-FAKE16-LABEL: not_isnan_f16:1329; GFX11SELDAG-FAKE16: ; %bb.0:1330; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1331; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x3fc1332; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01333; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1334;1335; GFX11GLISEL-TRUE16-LABEL: not_isnan_f16:1336; GFX11GLISEL-TRUE16: ; %bb.0:1337; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1338; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x3fc1339; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1340; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1341; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]1342;1343; GFX11GLISEL-FAKE16-LABEL: not_isnan_f16:1344; GFX11GLISEL-FAKE16: ; %bb.0:1345; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1346; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x3fc1347; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01348; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]1349 %class = call i1 @llvm.is.fpclass.f16(half %x, i32 1020) ; ~nan1350 ret i1 %class1351}1352 1353define <2 x i1> @isnan_v2f16(<2 x half> %x) nounwind {1354; GFX7SELDAG-LABEL: isnan_v2f16:1355; GFX7SELDAG: ; %bb.0:1356; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1357; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v01358; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v1, v11359; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c001360; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v01361; GFX7SELDAG-NEXT: v_and_b32_e32 v1, 0x7fff, v11362; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v01363; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1364; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v11365; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1366; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]1367;1368; GFX7GLISEL-LABEL: isnan_v2f16:1369; GFX7GLISEL: ; %bb.0:1370; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1371; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v01372; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v01373; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c001374; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v11375; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v11376; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v0, v21377; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1378; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v1, v21379; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1380; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]1381;1382; GFX8SELDAG-LABEL: isnan_v2f16:1383; GFX8SELDAG: ; %bb.0:1384; GFX8SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1385; GFX8SELDAG-NEXT: v_lshrrev_b32_e32 v1, 16, v01386; GFX8SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v1, v11387; GFX8SELDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1388; GFX8SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v0, v01389; GFX8SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1390; GFX8SELDAG-NEXT: s_setpc_b64 s[30:31]1391;1392; GFX8GLISEL-LABEL: isnan_v2f16:1393; GFX8GLISEL: ; %bb.0:1394; GFX8GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1395; GFX8GLISEL-NEXT: v_lshrrev_b32_e32 v1, 16, v01396; GFX8GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 31397; GFX8GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1398; GFX8GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v1, 31399; GFX8GLISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[4:5]1400; GFX8GLISEL-NEXT: s_setpc_b64 s[30:31]1401;1402; GFX9SELDAG-LABEL: isnan_v2f16:1403; GFX9SELDAG: ; %bb.0:1404; GFX9SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1405; GFX9SELDAG-NEXT: v_cmp_u_f16_sdwa s[4:5], v0, v0 src0_sel:WORD_1 src1_sel:WORD_11406; GFX9SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v0, v01407; GFX9SELDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[4:5]1408; GFX9SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1409; GFX9SELDAG-NEXT: s_setpc_b64 s[30:31]1410;1411; GFX9GLISEL-LABEL: isnan_v2f16:1412; GFX9GLISEL: ; %bb.0:1413; GFX9GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1414; GFX9GLISEL-NEXT: v_mov_b32_e32 v1, 31415; GFX9GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 31416; GFX9GLISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[4:5]1417; GFX9GLISEL-NEXT: v_cmp_class_f16_sdwa s[4:5], v0, v1 src0_sel:WORD_1 src1_sel:DWORD1418; GFX9GLISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[4:5]1419; GFX9GLISEL-NEXT: v_mov_b32_e32 v0, v21420; GFX9GLISEL-NEXT: s_setpc_b64 s[30:31]1421;1422; GFX10SELDAG-LABEL: isnan_v2f16:1423; GFX10SELDAG: ; %bb.0:1424; GFX10SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1425; GFX10SELDAG-NEXT: v_cmp_u_f16_e32 vcc_lo, v0, v01426; GFX10SELDAG-NEXT: v_cmp_u_f16_sdwa s4, v0, v0 src0_sel:WORD_1 src1_sel:WORD_11427; GFX10SELDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo1428; GFX10SELDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, s41429; GFX10SELDAG-NEXT: v_mov_b32_e32 v0, v21430; GFX10SELDAG-NEXT: s_setpc_b64 s[30:31]1431;1432; GFX10GLISEL-LABEL: isnan_v2f16:1433; GFX10GLISEL: ; %bb.0:1434; GFX10GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1435; GFX10GLISEL-NEXT: v_mov_b32_e32 v1, 31436; GFX10GLISEL-NEXT: v_cmp_class_f16_e64 s4, v0, 31437; GFX10GLISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s41438; GFX10GLISEL-NEXT: v_cmp_class_f16_sdwa s4, v0, v1 src0_sel:WORD_1 src1_sel:DWORD1439; GFX10GLISEL-NEXT: v_mov_b32_e32 v0, v21440; GFX10GLISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s41441; GFX10GLISEL-NEXT: s_setpc_b64 s[30:31]1442;1443; GFX11SELDAG-TRUE16-LABEL: isnan_v2f16:1444; GFX11SELDAG-TRUE16: ; %bb.0:1445; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1446; GFX11SELDAG-TRUE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v0.l, v0.l1447; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo1448; GFX11SELDAG-TRUE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v0.h, v0.h1449; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v0, v21450; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo1451; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1452;1453; GFX11SELDAG-FAKE16-LABEL: isnan_v2f16:1454; GFX11SELDAG-FAKE16: ; %bb.0:1455; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1456; GFX11SELDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v01457; GFX11SELDAG-FAKE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v0, v01458; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1459; GFX11SELDAG-FAKE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v1, v11460; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo1461; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1462;1463; GFX11GLISEL-TRUE16-LABEL: isnan_v2f16:1464; GFX11GLISEL-TRUE16: ; %bb.0:1465; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1466; GFX11GLISEL-TRUE16-NEXT: v_dual_mov_b32 v1, 3 :: v_dual_mov_b32 v2, 31467; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1468; GFX11GLISEL-TRUE16-NEXT: v_mov_b16_e32 v3.l, v2.l1469; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo1470; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.h, v3.l1471; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v0, v21472; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo1473; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]1474;1475; GFX11GLISEL-FAKE16-LABEL: isnan_v2f16:1476; GFX11GLISEL-FAKE16: ; %bb.0:1477; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1478; GFX11GLISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v01479; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 31480; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01481; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v1, 31482; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, s01483; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]1484 %1 = call <2 x i1> @llvm.is.fpclass.v2f16(<2 x half> %x, i32 3) ; nan1485 ret <2 x i1> %11486}1487 1488define <3 x i1> @isnan_v3f16(<3 x half> %x) nounwind {1489; GFX7SELDAG-LABEL: isnan_v3f16:1490; GFX7SELDAG: ; %bb.0:1491; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1492; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v01493; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v1, v11494; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v2, v21495; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c001496; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v01497; GFX7SELDAG-NEXT: v_and_b32_e32 v1, 0x7fff, v11498; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v01499; GFX7SELDAG-NEXT: v_and_b32_e32 v2, 0x7fff, v21500; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1501; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v11502; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1503; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v21504; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1505; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]1506;1507; GFX7GLISEL-LABEL: isnan_v3f16:1508; GFX7GLISEL: ; %bb.0:1509; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1510; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v01511; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v01512; GFX7GLISEL-NEXT: v_mov_b32_e32 v3, 0x7c001513; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v11514; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v11515; GFX7GLISEL-NEXT: v_and_b32_e32 v2, 0x7fff, v21516; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v0, v31517; GFX7GLISEL-NEXT: v_and_b32_e32 v2, 0xffff, v21518; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1519; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v1, v31520; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1521; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v2, v31522; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1523; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]1524;1525; GFX8SELDAG-LABEL: isnan_v3f16:1526; GFX8SELDAG: ; %bb.0:1527; GFX8SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1528; GFX8SELDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v01529; GFX8SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v2, v21530; GFX8SELDAG-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc1531; GFX8SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v0, v01532; GFX8SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1533; GFX8SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v1, v11534; GFX8SELDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1535; GFX8SELDAG-NEXT: v_mov_b32_e32 v1, v31536; GFX8SELDAG-NEXT: s_setpc_b64 s[30:31]1537;1538; GFX8GLISEL-LABEL: isnan_v3f16:1539; GFX8GLISEL: ; %bb.0:1540; GFX8GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1541; GFX8GLISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v01542; GFX8GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 31543; GFX8GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1544; GFX8GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v2, 31545; GFX8GLISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, s[4:5]1546; GFX8GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v1, 31547; GFX8GLISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[4:5]1548; GFX8GLISEL-NEXT: v_mov_b32_e32 v1, v31549; GFX8GLISEL-NEXT: s_setpc_b64 s[30:31]1550;1551; GFX9SELDAG-LABEL: isnan_v3f16:1552; GFX9SELDAG: ; %bb.0:1553; GFX9SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1554; GFX9SELDAG-NEXT: v_cmp_u_f16_sdwa s[4:5], v0, v0 src0_sel:WORD_1 src1_sel:WORD_11555; GFX9SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v0, v01556; GFX9SELDAG-NEXT: v_cndmask_b32_e64 v3, 0, 1, s[4:5]1557; GFX9SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1558; GFX9SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v1, v11559; GFX9SELDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1560; GFX9SELDAG-NEXT: v_mov_b32_e32 v1, v31561; GFX9SELDAG-NEXT: s_setpc_b64 s[30:31]1562;1563; GFX9GLISEL-LABEL: isnan_v3f16:1564; GFX9GLISEL: ; %bb.0:1565; GFX9GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1566; GFX9GLISEL-NEXT: v_mov_b32_e32 v2, 31567; GFX9GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 31568; GFX9GLISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]1569; GFX9GLISEL-NEXT: v_cmp_class_f16_sdwa s[4:5], v0, v2 src0_sel:WORD_1 src1_sel:DWORD1570; GFX9GLISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, s[4:5]1571; GFX9GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v1, 31572; GFX9GLISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[4:5]1573; GFX9GLISEL-NEXT: v_mov_b32_e32 v0, v41574; GFX9GLISEL-NEXT: v_mov_b32_e32 v1, v31575; GFX9GLISEL-NEXT: s_setpc_b64 s[30:31]1576;1577; GFX10SELDAG-LABEL: isnan_v3f16:1578; GFX10SELDAG: ; %bb.0:1579; GFX10SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1580; GFX10SELDAG-NEXT: v_cmp_u_f16_sdwa s4, v0, v0 src0_sel:WORD_1 src1_sel:WORD_11581; GFX10SELDAG-NEXT: v_cmp_u_f16_e32 vcc_lo, v0, v01582; GFX10SELDAG-NEXT: v_cndmask_b32_e64 v3, 0, 1, s41583; GFX10SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1584; GFX10SELDAG-NEXT: v_cmp_u_f16_e32 vcc_lo, v1, v11585; GFX10SELDAG-NEXT: v_mov_b32_e32 v1, v31586; GFX10SELDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo1587; GFX10SELDAG-NEXT: s_setpc_b64 s[30:31]1588;1589; GFX10GLISEL-LABEL: isnan_v3f16:1590; GFX10GLISEL: ; %bb.0:1591; GFX10GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1592; GFX10GLISEL-NEXT: v_mov_b32_e32 v2, 31593; GFX10GLISEL-NEXT: v_cmp_class_f16_e64 s4, v0, 31594; GFX10GLISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, s41595; GFX10GLISEL-NEXT: v_cmp_class_f16_sdwa s4, v0, v2 src0_sel:WORD_1 src1_sel:DWORD1596; GFX10GLISEL-NEXT: v_mov_b32_e32 v0, v41597; GFX10GLISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, s41598; GFX10GLISEL-NEXT: v_cmp_class_f16_e64 s4, v1, 31599; GFX10GLISEL-NEXT: v_mov_b32_e32 v1, v31600; GFX10GLISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s41601; GFX10GLISEL-NEXT: s_setpc_b64 s[30:31]1602;1603; GFX11SELDAG-TRUE16-LABEL: isnan_v3f16:1604; GFX11SELDAG-TRUE16: ; %bb.0:1605; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1606; GFX11SELDAG-TRUE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v0.h, v0.h1607; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo1608; GFX11SELDAG-TRUE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v0.l, v0.l1609; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1610; GFX11SELDAG-TRUE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v1.l, v1.l1611; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, v31612; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo1613; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1614;1615; GFX11SELDAG-FAKE16-LABEL: isnan_v3f16:1616; GFX11SELDAG-FAKE16: ; %bb.0:1617; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1618; GFX11SELDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v01619; GFX11SELDAG-FAKE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v0, v01620; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1621; GFX11SELDAG-FAKE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v2, v21622; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo1623; GFX11SELDAG-FAKE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v1, v11624; GFX11SELDAG-FAKE16-NEXT: v_mov_b32_e32 v1, v31625; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo1626; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1627;1628; GFX11GLISEL-TRUE16-LABEL: isnan_v3f16:1629; GFX11GLISEL-TRUE16: ; %bb.0:1630; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1631; GFX11GLISEL-TRUE16-NEXT: v_dual_mov_b32 v2, 3 :: v_dual_mov_b32 v3, 31632; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v4, 31633; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v2.l1634; GFX11GLISEL-TRUE16-NEXT: v_mov_b16_e32 v5.l, v4.l1635; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc_lo1636; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.h, v3.l1637; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v0, v41638; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo1639; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v1.l, v5.l1640; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, v31641; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo1642; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]1643;1644; GFX11GLISEL-FAKE16-LABEL: isnan_v3f16:1645; GFX11GLISEL-FAKE16: ; %bb.0:1646; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1647; GFX11GLISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v01648; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 31649; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01650; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v2, 31651; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v3, 0, 1, s01652; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v1, 31653; GFX11GLISEL-FAKE16-NEXT: v_mov_b32_e32 v1, v31654; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, s01655; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]1656 %1 = call <3 x i1> @llvm.is.fpclass.v3f16(<3 x half> %x, i32 3) ; nan1657 ret <3 x i1> %11658}1659 1660define <4 x i1> @isnan_v4f16(<4 x half> %x) nounwind {1661; GFX7SELDAG-LABEL: isnan_v4f16:1662; GFX7SELDAG: ; %bb.0:1663; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1664; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v01665; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v1, v11666; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v2, v21667; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v3, v31668; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c001669; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v01670; GFX7SELDAG-NEXT: v_and_b32_e32 v1, 0x7fff, v11671; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v01672; GFX7SELDAG-NEXT: v_and_b32_e32 v2, 0x7fff, v21673; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1674; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v11675; GFX7SELDAG-NEXT: v_and_b32_e32 v3, 0x7fff, v31676; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1677; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v21678; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1679; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v31680; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc1681; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]1682;1683; GFX7GLISEL-LABEL: isnan_v4f16:1684; GFX7GLISEL: ; %bb.0:1685; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1686; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v01687; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v01688; GFX7GLISEL-NEXT: v_mov_b32_e32 v4, 0x7c001689; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v11690; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v11691; GFX7GLISEL-NEXT: v_and_b32_e32 v2, 0x7fff, v21692; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v0, v41693; GFX7GLISEL-NEXT: v_and_b32_e32 v2, 0xffff, v21694; GFX7GLISEL-NEXT: v_and_b32_e32 v3, 0x7fff, v31695; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1696; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v1, v41697; GFX7GLISEL-NEXT: v_and_b32_e32 v3, 0xffff, v31698; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1699; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v2, v41700; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1701; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v3, v41702; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc1703; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]1704;1705; GFX8SELDAG-LABEL: isnan_v4f16:1706; GFX8SELDAG: ; %bb.0:1707; GFX8SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1708; GFX8SELDAG-NEXT: v_lshrrev_b32_e32 v3, 16, v01709; GFX8SELDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v11710; GFX8SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v3, v31711; GFX8SELDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc1712; GFX8SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v2, v21713; GFX8SELDAG-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc1714; GFX8SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v0, v01715; GFX8SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1716; GFX8SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v1, v11717; GFX8SELDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1718; GFX8SELDAG-NEXT: v_mov_b32_e32 v1, v41719; GFX8SELDAG-NEXT: s_setpc_b64 s[30:31]1720;1721; GFX8GLISEL-LABEL: isnan_v4f16:1722; GFX8GLISEL: ; %bb.0:1723; GFX8GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1724; GFX8GLISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v01725; GFX8GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 31726; GFX8GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1727; GFX8GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v2, 31728; GFX8GLISEL-NEXT: v_lshrrev_b32_e32 v3, 16, v11729; GFX8GLISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]1730; GFX8GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v1, 31731; GFX8GLISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[4:5]1732; GFX8GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v3, 31733; GFX8GLISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, s[4:5]1734; GFX8GLISEL-NEXT: v_mov_b32_e32 v1, v41735; GFX8GLISEL-NEXT: s_setpc_b64 s[30:31]1736;1737; GFX9SELDAG-LABEL: isnan_v4f16:1738; GFX9SELDAG: ; %bb.0:1739; GFX9SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1740; GFX9SELDAG-NEXT: v_cmp_u_f16_sdwa s[4:5], v0, v0 src0_sel:WORD_1 src1_sel:WORD_11741; GFX9SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v0, v01742; GFX9SELDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]1743; GFX9SELDAG-NEXT: v_cmp_u_f16_sdwa s[4:5], v1, v1 src0_sel:WORD_1 src1_sel:WORD_11744; GFX9SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1745; GFX9SELDAG-NEXT: v_cmp_u_f16_e32 vcc, v1, v11746; GFX9SELDAG-NEXT: v_cndmask_b32_e64 v3, 0, 1, s[4:5]1747; GFX9SELDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1748; GFX9SELDAG-NEXT: v_mov_b32_e32 v1, v41749; GFX9SELDAG-NEXT: s_setpc_b64 s[30:31]1750;1751; GFX9GLISEL-LABEL: isnan_v4f16:1752; GFX9GLISEL: ; %bb.0:1753; GFX9GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1754; GFX9GLISEL-NEXT: v_mov_b32_e32 v3, 31755; GFX9GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 31756; GFX9GLISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]1757; GFX9GLISEL-NEXT: v_cmp_class_f16_sdwa s[4:5], v0, v3 src0_sel:WORD_1 src1_sel:DWORD1758; GFX9GLISEL-NEXT: v_cndmask_b32_e64 v5, 0, 1, s[4:5]1759; GFX9GLISEL-NEXT: v_cmp_class_f16_e64 s[4:5], v1, 31760; GFX9GLISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[4:5]1761; GFX9GLISEL-NEXT: v_cmp_class_f16_sdwa s[4:5], v1, v3 src0_sel:WORD_1 src1_sel:DWORD1762; GFX9GLISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, s[4:5]1763; GFX9GLISEL-NEXT: v_mov_b32_e32 v0, v41764; GFX9GLISEL-NEXT: v_mov_b32_e32 v1, v51765; GFX9GLISEL-NEXT: s_setpc_b64 s[30:31]1766;1767; GFX10SELDAG-LABEL: isnan_v4f16:1768; GFX10SELDAG: ; %bb.0:1769; GFX10SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1770; GFX10SELDAG-NEXT: v_cmp_u_f16_sdwa s4, v0, v0 src0_sel:WORD_1 src1_sel:WORD_11771; GFX10SELDAG-NEXT: v_cmp_u_f16_e32 vcc_lo, v0, v01772; GFX10SELDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, s41773; GFX10SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1774; GFX10SELDAG-NEXT: v_cmp_u_f16_e32 vcc_lo, v1, v11775; GFX10SELDAG-NEXT: v_cmp_u_f16_sdwa s4, v1, v1 src0_sel:WORD_1 src1_sel:WORD_11776; GFX10SELDAG-NEXT: v_mov_b32_e32 v1, v41777; GFX10SELDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo1778; GFX10SELDAG-NEXT: v_cndmask_b32_e64 v3, 0, 1, s41779; GFX10SELDAG-NEXT: s_setpc_b64 s[30:31]1780;1781; GFX10GLISEL-LABEL: isnan_v4f16:1782; GFX10GLISEL: ; %bb.0:1783; GFX10GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1784; GFX10GLISEL-NEXT: v_mov_b32_e32 v3, 31785; GFX10GLISEL-NEXT: v_cmp_class_f16_e64 s4, v0, 31786; GFX10GLISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, s41787; GFX10GLISEL-NEXT: v_cmp_class_f16_sdwa s4, v0, v3 src0_sel:WORD_1 src1_sel:DWORD1788; GFX10GLISEL-NEXT: v_mov_b32_e32 v0, v41789; GFX10GLISEL-NEXT: v_cndmask_b32_e64 v5, 0, 1, s41790; GFX10GLISEL-NEXT: v_cmp_class_f16_e64 s4, v1, 31791; GFX10GLISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s41792; GFX10GLISEL-NEXT: v_cmp_class_f16_sdwa s4, v1, v3 src0_sel:WORD_1 src1_sel:DWORD1793; GFX10GLISEL-NEXT: v_mov_b32_e32 v1, v51794; GFX10GLISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, s41795; GFX10GLISEL-NEXT: s_setpc_b64 s[30:31]1796;1797; GFX11SELDAG-TRUE16-LABEL: isnan_v4f16:1798; GFX11SELDAG-TRUE16: ; %bb.0:1799; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1800; GFX11SELDAG-TRUE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v0.h, v0.h1801; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc_lo1802; GFX11SELDAG-TRUE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v0.l, v0.l1803; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1804; GFX11SELDAG-TRUE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v1.l, v1.l1805; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo1806; GFX11SELDAG-TRUE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v1.h, v1.h1807; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, v41808; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo1809; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1810;1811; GFX11SELDAG-FAKE16-LABEL: isnan_v4f16:1812; GFX11SELDAG-FAKE16: ; %bb.0:1813; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1814; GFX11SELDAG-FAKE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v0, v01815; GFX11SELDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v4, 16, v01816; GFX11SELDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v11817; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1818; GFX11SELDAG-FAKE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v1, v11819; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo1820; GFX11SELDAG-FAKE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v4, v41821; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo1822; GFX11SELDAG-FAKE16-NEXT: v_cmp_u_f16_e32 vcc_lo, v3, v31823; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo1824; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1825;1826; GFX11GLISEL-TRUE16-LABEL: isnan_v4f16:1827; GFX11GLISEL-TRUE16: ; %bb.0:1828; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1829; GFX11GLISEL-TRUE16-NEXT: v_dual_mov_b32 v2, 3 :: v_dual_mov_b32 v3, 31830; GFX11GLISEL-TRUE16-NEXT: v_dual_mov_b32 v4, 3 :: v_dual_mov_b32 v5, 31831; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v2.l1832; GFX11GLISEL-TRUE16-NEXT: v_mov_b16_e32 v6.l, v4.l1833; GFX11GLISEL-TRUE16-NEXT: v_mov_b16_e32 v7.l, v5.l1834; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc_lo1835; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.h, v3.l1836; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v5, 0, 1, vcc_lo1837; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v1.l, v6.l1838; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v0, v41839; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo1840; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v1.h, v7.l1841; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, v51842; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo1843; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]1844;1845; GFX11GLISEL-FAKE16-LABEL: isnan_v4f16:1846; GFX11GLISEL-FAKE16: ; %bb.0:1847; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1848; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 31849; GFX11GLISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v01850; GFX11GLISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v4, 16, v11851; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01852; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v1, 31853; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v2, 0, 1, s01854; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v3, 31855; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, s01856; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v4, 31857; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v3, 0, 1, s01858; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]1859 %1 = call <4 x i1> @llvm.is.fpclass.v4f16(<4 x half> %x, i32 3) ; nan1860 ret <4 x i1> %11861}1862 1863define i1 @isnan_f16_strictfp(half %x) strictfp nounwind {1864; GFX7SELDAG-LABEL: isnan_f16_strictfp:1865; GFX7SELDAG: ; %bb.0:1866; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1867; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v01868; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c001869; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0xffff, v01870; GFX7SELDAG-NEXT: v_cvt_f32_f16_e32 v0, v01871; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v01872; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v01873; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v01874; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1875; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]1876;1877; GFX7GLISEL-LABEL: isnan_f16_strictfp:1878; GFX7GLISEL: ; %bb.0:1879; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1880; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v01881; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v01882; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c001883; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v0, v11884; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1885; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]1886;1887; GFX8CHECK-LABEL: isnan_f16_strictfp:1888; GFX8CHECK: ; %bb.0:1889; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1890; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 31891; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1892; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]1893;1894; GFX9CHECK-LABEL: isnan_f16_strictfp:1895; GFX9CHECK: ; %bb.0:1896; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1897; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 31898; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]1899; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]1900;1901; GFX10CHECK-LABEL: isnan_f16_strictfp:1902; GFX10CHECK: ; %bb.0:1903; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1904; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 31905; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s41906; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]1907;1908; GFX11SELDAG-TRUE16-LABEL: isnan_f16_strictfp:1909; GFX11SELDAG-TRUE16: ; %bb.0:1910; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1911; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 31912; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1913; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1914; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1915;1916; GFX11SELDAG-FAKE16-LABEL: isnan_f16_strictfp:1917; GFX11SELDAG-FAKE16: ; %bb.0:1918; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1919; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 31920; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01921; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1922;1923; GFX11GLISEL-TRUE16-LABEL: isnan_f16_strictfp:1924; GFX11GLISEL-TRUE16: ; %bb.0:1925; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1926; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 31927; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1928; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1929; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]1930;1931; GFX11GLISEL-FAKE16-LABEL: isnan_f16_strictfp:1932; GFX11GLISEL-FAKE16: ; %bb.0:1933; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1934; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 31935; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01936; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]1937 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 3) strictfp ; nan1938 ret i1 %11939}1940 1941define i1 @isinf_f16(half %x) nounwind {1942; GFX7SELDAG-LABEL: isinf_f16:1943; GFX7SELDAG: ; %bb.0:1944; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1945; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v01946; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c001947; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v01948; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, s4, v01949; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1950; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]1951;1952; GFX7GLISEL-LABEL: isinf_f16:1953; GFX7GLISEL: ; %bb.0:1954; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1955; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v01956; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v01957; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c001958; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v11959; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1960; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]1961;1962; GFX8CHECK-LABEL: isinf_f16:1963; GFX8CHECK: ; %bb.0:1964; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1965; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x2041966; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v11967; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1968; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]1969;1970; GFX9CHECK-LABEL: isinf_f16:1971; GFX9CHECK: ; %bb.0:1972; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1973; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x2041974; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v11975; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1976; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]1977;1978; GFX10CHECK-LABEL: isinf_f16:1979; GFX10CHECK: ; %bb.0:1980; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1981; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x2041982; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s41983; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]1984;1985; GFX11SELDAG-TRUE16-LABEL: isinf_f16:1986; GFX11SELDAG-TRUE16: ; %bb.0:1987; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1988; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x2041989; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l1990; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo1991; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1992;1993; GFX11SELDAG-FAKE16-LABEL: isinf_f16:1994; GFX11SELDAG-FAKE16: ; %bb.0:1995; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1996; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x2041997; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s01998; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1999;2000; GFX11GLISEL-TRUE16-LABEL: isinf_f16:2001; GFX11GLISEL-TRUE16: ; %bb.0:2002; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2003; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x2042004; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2005; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2006; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2007;2008; GFX11GLISEL-FAKE16-LABEL: isinf_f16:2009; GFX11GLISEL-FAKE16: ; %bb.0:2010; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2011; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x2042012; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02013; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2014 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 516) ; 0x204 = "inf"2015 ret i1 %12016}2017 2018define i1 @isfinite_f16(half %x) nounwind {2019; GFX7SELDAG-LABEL: isfinite_f16:2020; GFX7SELDAG: ; %bb.0:2021; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2022; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02023; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c002024; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v02025; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, s4, v02026; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2027; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2028;2029; GFX7GLISEL-LABEL: isfinite_f16:2030; GFX7GLISEL: ; %bb.0:2031; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2032; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v02033; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02034; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c002035; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v12036; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2037; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2038;2039; GFX8CHECK-LABEL: isfinite_f16:2040; GFX8CHECK: ; %bb.0:2041; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2042; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x1f82043; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12044; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2045; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2046;2047; GFX9CHECK-LABEL: isfinite_f16:2048; GFX9CHECK: ; %bb.0:2049; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2050; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x1f82051; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12052; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2053; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2054;2055; GFX10CHECK-LABEL: isfinite_f16:2056; GFX10CHECK: ; %bb.0:2057; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2058; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x1f82059; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42060; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2061;2062; GFX11SELDAG-TRUE16-LABEL: isfinite_f16:2063; GFX11SELDAG-TRUE16: ; %bb.0:2064; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2065; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x1f82066; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2067; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2068; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2069;2070; GFX11SELDAG-FAKE16-LABEL: isfinite_f16:2071; GFX11SELDAG-FAKE16: ; %bb.0:2072; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2073; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x1f82074; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02075; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2076;2077; GFX11GLISEL-TRUE16-LABEL: isfinite_f16:2078; GFX11GLISEL-TRUE16: ; %bb.0:2079; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2080; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x1f82081; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2082; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2083; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2084;2085; GFX11GLISEL-FAKE16-LABEL: isfinite_f16:2086; GFX11GLISEL-FAKE16: ; %bb.0:2087; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2088; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x1f82089; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02090; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2091 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 504) ; 0x1f8 = "finite"2092 ret i1 %12093}2094 2095define i1 @issubnormal_or_zero_f16(half %x) {2096; GFX7SELDAG-LABEL: issubnormal_or_zero_f16:2097; GFX7SELDAG: ; %bb.0: ; %entry2098; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2099; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02100; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7c00, v02101; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02102; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2103; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2104;2105; GFX7GLISEL-LABEL: issubnormal_or_zero_f16:2106; GFX7GLISEL: ; %bb.0: ; %entry2107; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2108; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7c00, v02109; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02110; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02111; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2112; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2113;2114; GFX8CHECK-LABEL: issubnormal_or_zero_f16:2115; GFX8CHECK: ; %bb.0: ; %entry2116; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2117; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0xf02118; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12119; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2120; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2121;2122; GFX9CHECK-LABEL: issubnormal_or_zero_f16:2123; GFX9CHECK: ; %bb.0: ; %entry2124; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2125; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0xf02126; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12127; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2128; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2129;2130; GFX10CHECK-LABEL: issubnormal_or_zero_f16:2131; GFX10CHECK: ; %bb.0: ; %entry2132; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2133; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0xf02134; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42135; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2136;2137; GFX11SELDAG-TRUE16-LABEL: issubnormal_or_zero_f16:2138; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry2139; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2140; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0xf02141; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2142; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2143; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2144;2145; GFX11SELDAG-FAKE16-LABEL: issubnormal_or_zero_f16:2146; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry2147; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2148; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0xf02149; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02150; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2151;2152; GFX11GLISEL-TRUE16-LABEL: issubnormal_or_zero_f16:2153; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry2154; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2155; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0xf02156; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2157; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2158; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2159;2160; GFX11GLISEL-FAKE16-LABEL: issubnormal_or_zero_f16:2161; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry2162; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2163; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0xf02164; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02165; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2166entry:2167 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 240) ; 0xf0 = "subnormal|zero"2168 ret i1 %class2169}2170 2171define i1 @not_issubnormal_or_zero_f16(half %x) {2172; GFX7SELDAG-LABEL: not_issubnormal_or_zero_f16:2173; GFX7SELDAG: ; %bb.0: ; %entry2174; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2175; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02176; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7c00, v02177; GFX7SELDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02178; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2179; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2180;2181; GFX7GLISEL-LABEL: not_issubnormal_or_zero_f16:2182; GFX7GLISEL: ; %bb.0: ; %entry2183; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2184; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v02185; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v02186; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c002187; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v02188; GFX7GLISEL-NEXT: v_cmp_ge_u32_e64 s[4:5], v1, v22189; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02190; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x78002191; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v12192; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc2193; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]2194; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2195;2196; GFX8CHECK-LABEL: not_issubnormal_or_zero_f16:2197; GFX8CHECK: ; %bb.0: ; %entry2198; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2199; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x30f2200; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12201; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2202; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2203;2204; GFX9CHECK-LABEL: not_issubnormal_or_zero_f16:2205; GFX9CHECK: ; %bb.0: ; %entry2206; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2207; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x30f2208; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12209; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2210; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2211;2212; GFX10CHECK-LABEL: not_issubnormal_or_zero_f16:2213; GFX10CHECK: ; %bb.0: ; %entry2214; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2215; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x30f2216; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42217; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2218;2219; GFX11SELDAG-TRUE16-LABEL: not_issubnormal_or_zero_f16:2220; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry2221; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2222; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x30f2223; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2224; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2225; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2226;2227; GFX11SELDAG-FAKE16-LABEL: not_issubnormal_or_zero_f16:2228; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry2229; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2230; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x30f2231; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02232; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2233;2234; GFX11GLISEL-TRUE16-LABEL: not_issubnormal_or_zero_f16:2235; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry2236; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2237; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x30f2238; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2239; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2240; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2241;2242; GFX11GLISEL-FAKE16-LABEL: not_issubnormal_or_zero_f16:2243; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry2244; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2245; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x30f2246; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02247; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2248entry:2249 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 783) ; ~0xf0 = "~(subnormal|zero)"2250 ret i1 %class2251}2252 2253define i1 @isnormal_f16(half %x) {2254; GFX7SELDAG-LABEL: isnormal_f16:2255; GFX7SELDAG: ; %bb.0:2256; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2257; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02258; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x78002259; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v02260; GFX7SELDAG-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v02261; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0xffff, v02262; GFX7SELDAG-NEXT: v_cmp_gt_u32_e32 vcc, s4, v02263; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2264; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2265;2266; GFX7GLISEL-LABEL: isnormal_f16:2267; GFX7GLISEL: ; %bb.0:2268; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2269; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v02270; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v02271; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02272; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x78002273; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v12274; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2275; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2276;2277; GFX8CHECK-LABEL: isnormal_f16:2278; GFX8CHECK: ; %bb.0:2279; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2280; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x1082281; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12282; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2283; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2284;2285; GFX9CHECK-LABEL: isnormal_f16:2286; GFX9CHECK: ; %bb.0:2287; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2288; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x1082289; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12290; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2291; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2292;2293; GFX10CHECK-LABEL: isnormal_f16:2294; GFX10CHECK: ; %bb.0:2295; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2296; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x1082297; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42298; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2299;2300; GFX11SELDAG-TRUE16-LABEL: isnormal_f16:2301; GFX11SELDAG-TRUE16: ; %bb.0:2302; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2303; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x1082304; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2305; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2306; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2307;2308; GFX11SELDAG-FAKE16-LABEL: isnormal_f16:2309; GFX11SELDAG-FAKE16: ; %bb.0:2310; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2311; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x1082312; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02313; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2314;2315; GFX11GLISEL-TRUE16-LABEL: isnormal_f16:2316; GFX11GLISEL-TRUE16: ; %bb.0:2317; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2318; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x1082319; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2320; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2321; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2322;2323; GFX11GLISEL-FAKE16-LABEL: isnormal_f16:2324; GFX11GLISEL-FAKE16: ; %bb.0:2325; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2326; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x1082327; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02328; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2329 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 264) ; 0x108 = "normal"2330 ret i1 %class2331}2332 2333define i1 @not_isnormal_f16(half %x) {2334; GFX7SELDAG-LABEL: not_isnormal_f16:2335; GFX7SELDAG: ; %bb.0:2336; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2337; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02338; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x77ff2339; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v02340; GFX7SELDAG-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v02341; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0xffff, v02342; GFX7SELDAG-NEXT: v_cmp_lt_u32_e32 vcc, s4, v02343; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2344; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2345;2346; GFX7GLISEL-LABEL: not_isnormal_f16:2347; GFX7GLISEL: ; %bb.0:2348; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2349; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v02350; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7c00, v02351; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02352; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c002353; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02354; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v12355; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v0, v22356; GFX7GLISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5]2357; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v0, v22358; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc2359; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]2360; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2361;2362; GFX8CHECK-LABEL: not_isnormal_f16:2363; GFX8CHECK: ; %bb.0:2364; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2365; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x2f72366; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12367; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2368; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2369;2370; GFX9CHECK-LABEL: not_isnormal_f16:2371; GFX9CHECK: ; %bb.0:2372; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2373; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x2f72374; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12375; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2376; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2377;2378; GFX10CHECK-LABEL: not_isnormal_f16:2379; GFX10CHECK: ; %bb.0:2380; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2381; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x2f72382; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42383; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2384;2385; GFX11SELDAG-TRUE16-LABEL: not_isnormal_f16:2386; GFX11SELDAG-TRUE16: ; %bb.0:2387; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2388; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x2f72389; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2390; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2391; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2392;2393; GFX11SELDAG-FAKE16-LABEL: not_isnormal_f16:2394; GFX11SELDAG-FAKE16: ; %bb.0:2395; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2396; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x2f72397; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02398; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2399;2400; GFX11GLISEL-TRUE16-LABEL: not_isnormal_f16:2401; GFX11GLISEL-TRUE16: ; %bb.0:2402; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2403; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x2f72404; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2405; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2406; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2407;2408; GFX11GLISEL-FAKE16-LABEL: not_isnormal_f16:2409; GFX11GLISEL-FAKE16: ; %bb.0:2410; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2411; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x2f72412; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02413; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2414 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 759) ; ~0x108 = "~normal"2415 ret i1 %class2416}2417 2418define i1 @not_is_plus_normal_f16(half %x) {2419; GFX7SELDAG-LABEL: not_is_plus_normal_f16:2420; GFX7SELDAG: ; %bb.0:2421; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2422; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02423; GFX7SELDAG-NEXT: s_movk_i32 s6, 0x77ff2424; GFX7SELDAG-NEXT: v_bfe_i32 v1, v0, 0, 162425; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v02426; GFX7SELDAG-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v02427; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0xffff, v02428; GFX7SELDAG-NEXT: v_cmp_gt_i32_e64 s[4:5], 0, v12429; GFX7SELDAG-NEXT: v_cmp_lt_u32_e32 vcc, s6, v02430; GFX7SELDAG-NEXT: s_or_b64 s[4:5], vcc, s[4:5]2431; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]2432; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2433;2434; GFX7GLISEL-LABEL: not_is_plus_normal_f16:2435; GFX7GLISEL: ; %bb.0:2436; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2437; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v02438; GFX7GLISEL-NEXT: v_and_b32_e32 v2, 0xffff, v02439; GFX7GLISEL-NEXT: v_and_b32_e32 v3, 0xffff, v12440; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7c00, v02441; GFX7GLISEL-NEXT: v_cmp_ne_u32_e64 s[4:5], v2, v32442; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c002443; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02444; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02445; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[6:7], v3, v22446; GFX7GLISEL-NEXT: s_or_b64 s[6:7], vcc, s[6:7]2447; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v3, v22448; GFX7GLISEL-NEXT: s_or_b64 s[6:7], s[6:7], vcc2449; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v12450; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02451; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x78002452; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v12453; GFX7GLISEL-NEXT: s_and_b64 s[4:5], vcc, s[4:5]2454; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[6:7], s[4:5]2455; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]2456; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2457;2458; GFX8CHECK-LABEL: not_is_plus_normal_f16:2459; GFX8CHECK: ; %bb.0:2460; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2461; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x2ff2462; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12463; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2464; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2465;2466; GFX9CHECK-LABEL: not_is_plus_normal_f16:2467; GFX9CHECK: ; %bb.0:2468; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2469; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x2ff2470; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12471; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2472; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2473;2474; GFX10CHECK-LABEL: not_is_plus_normal_f16:2475; GFX10CHECK: ; %bb.0:2476; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2477; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x2ff2478; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42479; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2480;2481; GFX11SELDAG-TRUE16-LABEL: not_is_plus_normal_f16:2482; GFX11SELDAG-TRUE16: ; %bb.0:2483; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2484; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x2ff2485; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2486; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2487; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2488;2489; GFX11SELDAG-FAKE16-LABEL: not_is_plus_normal_f16:2490; GFX11SELDAG-FAKE16: ; %bb.0:2491; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2492; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x2ff2493; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02494; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2495;2496; GFX11GLISEL-TRUE16-LABEL: not_is_plus_normal_f16:2497; GFX11GLISEL-TRUE16: ; %bb.0:2498; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2499; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x2ff2500; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2501; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2502; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2503;2504; GFX11GLISEL-FAKE16-LABEL: not_is_plus_normal_f16:2505; GFX11GLISEL-FAKE16: ; %bb.0:2506; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2507; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x2ff2508; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02509; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2510 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 767) ; ~0x100 = ~"+normal"2511 ret i1 %class2512}2513 2514define i1 @not_is_neg_normal_f16(half %x) {2515; GFX7SELDAG-LABEL: not_is_neg_normal_f16:2516; GFX7SELDAG: ; %bb.0:2517; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2518; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02519; GFX7SELDAG-NEXT: s_movk_i32 s6, 0x77ff2520; GFX7SELDAG-NEXT: v_bfe_i32 v1, v0, 0, 162521; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v02522; GFX7SELDAG-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v02523; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0xffff, v02524; GFX7SELDAG-NEXT: v_cmp_lt_i32_e64 s[4:5], -1, v12525; GFX7SELDAG-NEXT: v_cmp_lt_u32_e32 vcc, s6, v02526; GFX7SELDAG-NEXT: s_or_b64 s[4:5], vcc, s[4:5]2527; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]2528; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2529;2530; GFX7GLISEL-LABEL: not_is_neg_normal_f16:2531; GFX7GLISEL: ; %bb.0:2532; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2533; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v02534; GFX7GLISEL-NEXT: v_and_b32_e32 v2, 0xffff, v02535; GFX7GLISEL-NEXT: v_and_b32_e32 v3, 0xffff, v12536; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7c00, v02537; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v2, v32538; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c002539; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02540; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02541; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[6:7], v3, v22542; GFX7GLISEL-NEXT: s_or_b64 s[6:7], vcc, s[6:7]2543; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v3, v22544; GFX7GLISEL-NEXT: s_or_b64 s[6:7], s[6:7], vcc2545; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v12546; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02547; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x78002548; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v12549; GFX7GLISEL-NEXT: s_and_b64 s[4:5], vcc, s[4:5]2550; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[6:7], s[4:5]2551; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]2552; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2553;2554; GFX8CHECK-LABEL: not_is_neg_normal_f16:2555; GFX8CHECK: ; %bb.0:2556; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2557; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x3f72558; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12559; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2560; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2561;2562; GFX9CHECK-LABEL: not_is_neg_normal_f16:2563; GFX9CHECK: ; %bb.0:2564; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2565; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x3f72566; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12567; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2568; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2569;2570; GFX10CHECK-LABEL: not_is_neg_normal_f16:2571; GFX10CHECK: ; %bb.0:2572; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2573; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x3f72574; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42575; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2576;2577; GFX11SELDAG-TRUE16-LABEL: not_is_neg_normal_f16:2578; GFX11SELDAG-TRUE16: ; %bb.0:2579; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2580; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x3f72581; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2582; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2583; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2584;2585; GFX11SELDAG-FAKE16-LABEL: not_is_neg_normal_f16:2586; GFX11SELDAG-FAKE16: ; %bb.0:2587; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2588; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x3f72589; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02590; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2591;2592; GFX11GLISEL-TRUE16-LABEL: not_is_neg_normal_f16:2593; GFX11GLISEL-TRUE16: ; %bb.0:2594; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2595; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x3f72596; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2597; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2598; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2599;2600; GFX11GLISEL-FAKE16-LABEL: not_is_neg_normal_f16:2601; GFX11GLISEL-FAKE16: ; %bb.0:2602; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2603; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x3f72604; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02605; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2606 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 1015) ; ~0x008 = ~"-normal"2607 ret i1 %class2608}2609 2610define i1 @issubnormal_f16(half %x) {2611; GFX7SELDAG-LABEL: issubnormal_f16:2612; GFX7SELDAG: ; %bb.0:2613; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2614; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02615; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x3ff2616; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v02617; GFX7SELDAG-NEXT: v_add_i32_e32 v0, vcc, -1, v02618; GFX7SELDAG-NEXT: v_cmp_gt_u32_e32 vcc, s4, v02619; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2620; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2621;2622; GFX7GLISEL-LABEL: issubnormal_f16:2623; GFX7GLISEL: ; %bb.0:2624; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2625; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v02626; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, -1, v02627; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02628; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x3ff2629; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v12630; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2631; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2632;2633; GFX8CHECK-LABEL: issubnormal_f16:2634; GFX8CHECK: ; %bb.0:2635; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2636; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x902637; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12638; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2639; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2640;2641; GFX9CHECK-LABEL: issubnormal_f16:2642; GFX9CHECK: ; %bb.0:2643; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2644; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x902645; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12646; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2647; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2648;2649; GFX10CHECK-LABEL: issubnormal_f16:2650; GFX10CHECK: ; %bb.0:2651; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2652; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x902653; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42654; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2655;2656; GFX11SELDAG-TRUE16-LABEL: issubnormal_f16:2657; GFX11SELDAG-TRUE16: ; %bb.0:2658; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2659; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x902660; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2661; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2662; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2663;2664; GFX11SELDAG-FAKE16-LABEL: issubnormal_f16:2665; GFX11SELDAG-FAKE16: ; %bb.0:2666; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2667; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x902668; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02669; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2670;2671; GFX11GLISEL-TRUE16-LABEL: issubnormal_f16:2672; GFX11GLISEL-TRUE16: ; %bb.0:2673; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2674; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x902675; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2676; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2677; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2678;2679; GFX11GLISEL-FAKE16-LABEL: issubnormal_f16:2680; GFX11GLISEL-FAKE16: ; %bb.0:2681; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2682; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x902683; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02684; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2685 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 144) ; 0x90 = "subnormal"2686 ret i1 %class2687}2688 2689define i1 @not_issubnormal_f16(half %x) {2690; GFX7SELDAG-LABEL: not_issubnormal_f16:2691; GFX7SELDAG: ; %bb.0:2692; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2693; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02694; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x3fe2695; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v02696; GFX7SELDAG-NEXT: v_add_i32_e32 v0, vcc, -1, v02697; GFX7SELDAG-NEXT: v_cmp_lt_u32_e32 vcc, s4, v02698; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2699; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2700;2701; GFX7GLISEL-LABEL: not_issubnormal_f16:2702; GFX7GLISEL: ; %bb.0:2703; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2704; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v02705; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v02706; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c002707; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v12708; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v22709; GFX7GLISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5]2710; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v1, v22711; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc2712; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v02713; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02714; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x78002715; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v12716; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc2717; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]2718; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2719;2720; GFX8CHECK-LABEL: not_issubnormal_f16:2721; GFX8CHECK: ; %bb.0:2722; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2723; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x36f2724; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12725; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2726; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2727;2728; GFX9CHECK-LABEL: not_issubnormal_f16:2729; GFX9CHECK: ; %bb.0:2730; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2731; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x36f2732; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12733; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2734; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2735;2736; GFX10CHECK-LABEL: not_issubnormal_f16:2737; GFX10CHECK: ; %bb.0:2738; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2739; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x36f2740; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42741; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2742;2743; GFX11SELDAG-TRUE16-LABEL: not_issubnormal_f16:2744; GFX11SELDAG-TRUE16: ; %bb.0:2745; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2746; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x36f2747; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2748; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2749; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2750;2751; GFX11SELDAG-FAKE16-LABEL: not_issubnormal_f16:2752; GFX11SELDAG-FAKE16: ; %bb.0:2753; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2754; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x36f2755; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02756; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2757;2758; GFX11GLISEL-TRUE16-LABEL: not_issubnormal_f16:2759; GFX11GLISEL-TRUE16: ; %bb.0:2760; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2761; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x36f2762; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2763; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2764; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2765;2766; GFX11GLISEL-FAKE16-LABEL: not_issubnormal_f16:2767; GFX11GLISEL-FAKE16: ; %bb.0:2768; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2769; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x36f2770; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02771; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2772 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 879) ; ~0x90 = ~"subnormal"2773 ret i1 %class2774}2775 2776define i1 @iszero_f16(half %x) {2777; GFX7SELDAG-LABEL: iszero_f16:2778; GFX7SELDAG: ; %bb.0:2779; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2780; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02781; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v02782; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02783; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2784; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2785;2786; GFX7GLISEL-LABEL: iszero_f16:2787; GFX7GLISEL: ; %bb.0:2788; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2789; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v02790; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02791; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02792; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2793; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2794;2795; GFX8CHECK-LABEL: iszero_f16:2796; GFX8CHECK: ; %bb.0:2797; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2798; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x602799; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12800; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2801; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2802;2803; GFX9CHECK-LABEL: iszero_f16:2804; GFX9CHECK: ; %bb.0:2805; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2806; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x602807; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12808; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2809; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2810;2811; GFX10CHECK-LABEL: iszero_f16:2812; GFX10CHECK: ; %bb.0:2813; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2814; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x602815; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42816; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2817;2818; GFX11SELDAG-TRUE16-LABEL: iszero_f16:2819; GFX11SELDAG-TRUE16: ; %bb.0:2820; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2821; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x602822; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2823; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2824; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2825;2826; GFX11SELDAG-FAKE16-LABEL: iszero_f16:2827; GFX11SELDAG-FAKE16: ; %bb.0:2828; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2829; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x602830; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02831; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2832;2833; GFX11GLISEL-TRUE16-LABEL: iszero_f16:2834; GFX11GLISEL-TRUE16: ; %bb.0:2835; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2836; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x602837; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2838; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2839; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2840;2841; GFX11GLISEL-FAKE16-LABEL: iszero_f16:2842; GFX11GLISEL-FAKE16: ; %bb.0:2843; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2844; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x602845; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02846; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2847 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 96) ; 0x60 = "zero"2848 ret i1 %class2849}2850 2851define i1 @not_iszero_f16(half %x) {2852; GFX7SELDAG-LABEL: not_iszero_f16:2853; GFX7SELDAG: ; %bb.0:2854; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2855; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02856; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v02857; GFX7SELDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02858; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2859; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2860;2861; GFX7GLISEL-LABEL: not_iszero_f16:2862; GFX7GLISEL: ; %bb.0:2863; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2864; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v02865; GFX7GLISEL-NEXT: v_add_i32_e32 v1, vcc, -1, v02866; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v12867; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x3ff2868; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v1, v22869; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v02870; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c002871; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v22872; GFX7GLISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5]2873; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v1, v22874; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc2875; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v02876; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02877; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x78002878; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v12879; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc2880; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]2881; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2882;2883; GFX8CHECK-LABEL: not_iszero_f16:2884; GFX8CHECK: ; %bb.0:2885; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2886; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x39f2887; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12888; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2889; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2890;2891; GFX9CHECK-LABEL: not_iszero_f16:2892; GFX9CHECK: ; %bb.0:2893; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2894; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x39f2895; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12896; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2897; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2898;2899; GFX10CHECK-LABEL: not_iszero_f16:2900; GFX10CHECK: ; %bb.0:2901; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2902; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x39f2903; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42904; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2905;2906; GFX11SELDAG-TRUE16-LABEL: not_iszero_f16:2907; GFX11SELDAG-TRUE16: ; %bb.0:2908; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2909; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39f2910; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2911; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2912; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2913;2914; GFX11SELDAG-FAKE16-LABEL: not_iszero_f16:2915; GFX11SELDAG-FAKE16: ; %bb.0:2916; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2917; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39f2918; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02919; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2920;2921; GFX11GLISEL-TRUE16-LABEL: not_iszero_f16:2922; GFX11GLISEL-TRUE16: ; %bb.0:2923; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2924; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39f2925; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2926; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2927; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]2928;2929; GFX11GLISEL-FAKE16-LABEL: not_iszero_f16:2930; GFX11GLISEL-FAKE16: ; %bb.0:2931; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2932; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39f2933; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02934; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]2935 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 927) ; ~0x60 = ~"zero"2936 ret i1 %class2937}2938 2939define i1 @ispositive_f16(half %x) {2940; GFX7SELDAG-LABEL: ispositive_f16:2941; GFX7SELDAG: ; %bb.0:2942; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2943; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v02944; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c012945; GFX7SELDAG-NEXT: v_cmp_gt_u32_e32 vcc, s4, v02946; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2947; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]2948;2949; GFX7GLISEL-LABEL: ispositive_f16:2950; GFX7GLISEL: ; %bb.0:2951; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2952; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02953; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c012954; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v12955; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2956; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]2957;2958; GFX8CHECK-LABEL: ispositive_f16:2959; GFX8CHECK: ; %bb.0:2960; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2961; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x3c02962; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12963; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2964; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]2965;2966; GFX9CHECK-LABEL: ispositive_f16:2967; GFX9CHECK: ; %bb.0:2968; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2969; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x3c02970; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v12971; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc2972; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]2973;2974; GFX10CHECK-LABEL: ispositive_f16:2975; GFX10CHECK: ; %bb.0:2976; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2977; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x3c02978; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s42979; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]2980;2981; GFX11SELDAG-TRUE16-LABEL: ispositive_f16:2982; GFX11SELDAG-TRUE16: ; %bb.0:2983; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2984; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x3c02985; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l2986; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo2987; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]2988;2989; GFX11SELDAG-FAKE16-LABEL: ispositive_f16:2990; GFX11SELDAG-FAKE16: ; %bb.0:2991; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2992; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x3c02993; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s02994; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]2995;2996; GFX11GLISEL-TRUE16-LABEL: ispositive_f16:2997; GFX11GLISEL-TRUE16: ; %bb.0:2998; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2999; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x3c03000; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3001; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3002; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3003;3004; GFX11GLISEL-FAKE16-LABEL: ispositive_f16:3005; GFX11GLISEL-FAKE16: ; %bb.0:3006; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3007; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x3c03008; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03009; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3010 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 960) ; fcPositive3011 ret i1 %class3012}3013 3014define i1 @not_ispositive_f16(half %x) {3015; GFX7SELDAG-LABEL: not_ispositive_f16:3016; GFX7SELDAG: ; %bb.0:3017; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3018; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03019; GFX7SELDAG-NEXT: s_movk_i32 s6, 0x7c003020; GFX7SELDAG-NEXT: s_mov_b32 s7, 0xfc003021; GFX7SELDAG-NEXT: v_bfe_i32 v1, v0, 0, 163022; GFX7SELDAG-NEXT: v_and_b32_e32 v2, 0x7fff, v03023; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, 0, v13024; GFX7SELDAG-NEXT: v_cmp_gt_i32_e64 s[4:5], s6, v23025; GFX7SELDAG-NEXT: s_and_b64 s[4:5], s[4:5], vcc3026; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, s7, v03027; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc3028; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s6, v23029; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc3030; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3031; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3032;3033; GFX7GLISEL-LABEL: not_ispositive_f16:3034; GFX7GLISEL: ; %bb.0:3035; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3036; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v03037; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03038; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v13039; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c003040; GFX7GLISEL-NEXT: v_cmp_ne_u32_e32 vcc, v0, v13041; GFX7GLISEL-NEXT: v_cmp_lt_u32_e64 s[4:5], v1, v23042; GFX7GLISEL-NEXT: v_mov_b32_e32 v3, 0xfc003043; GFX7GLISEL-NEXT: s_and_b64 s[4:5], s[4:5], vcc3044; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v33045; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc3046; GFX7GLISEL-NEXT: v_cmp_gt_u32_e32 vcc, v1, v23047; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc3048; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3049; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]3050;3051; GFX8CHECK-LABEL: not_ispositive_f16:3052; GFX8CHECK: ; %bb.0:3053; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3054; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 633055; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3056; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]3057;3058; GFX9CHECK-LABEL: not_ispositive_f16:3059; GFX9CHECK: ; %bb.0:3060; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3061; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 633062; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3063; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]3064;3065; GFX10CHECK-LABEL: not_ispositive_f16:3066; GFX10CHECK: ; %bb.0:3067; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3068; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 633069; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s43070; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]3071;3072; GFX11SELDAG-TRUE16-LABEL: not_ispositive_f16:3073; GFX11SELDAG-TRUE16: ; %bb.0:3074; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3075; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 633076; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3077; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3078; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3079;3080; GFX11SELDAG-FAKE16-LABEL: not_ispositive_f16:3081; GFX11SELDAG-FAKE16: ; %bb.0:3082; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3083; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 633084; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03085; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3086;3087; GFX11GLISEL-TRUE16-LABEL: not_ispositive_f16:3088; GFX11GLISEL-TRUE16: ; %bb.0:3089; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3090; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 633091; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3092; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3093; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3094;3095; GFX11GLISEL-FAKE16-LABEL: not_ispositive_f16:3096; GFX11GLISEL-FAKE16: ; %bb.0:3097; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3098; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 633099; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03100; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3101 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 63) ; ~fcPositive3102 ret i1 %class3103}3104 3105define i1 @isnegative_f16(half %x) {3106; GFX7SELDAG-LABEL: isnegative_f16:3107; GFX7SELDAG: ; %bb.0:3108; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3109; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03110; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c003111; GFX7SELDAG-NEXT: s_mov_b32 s6, 0xfc003112; GFX7SELDAG-NEXT: v_bfe_i32 v1, v0, 0, 163113; GFX7SELDAG-NEXT: v_and_b32_e32 v2, 0x7fff, v03114; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, 0, v13115; GFX7SELDAG-NEXT: v_cmp_gt_i32_e64 s[4:5], s4, v23116; GFX7SELDAG-NEXT: s_and_b64 s[4:5], s[4:5], vcc3117; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, s6, v03118; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc3119; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3120; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3121;3122; GFX7GLISEL-LABEL: isnegative_f16:3123; GFX7GLISEL: ; %bb.0:3124; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3125; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v03126; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03127; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v13128; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c003129; GFX7GLISEL-NEXT: v_cmp_ne_u32_e32 vcc, v0, v13130; GFX7GLISEL-NEXT: v_cmp_lt_u32_e64 s[4:5], v1, v23131; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0xfc003132; GFX7GLISEL-NEXT: s_and_b64 s[4:5], s[4:5], vcc3133; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v13134; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc3135; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3136; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]3137;3138; GFX8CHECK-LABEL: isnegative_f16:3139; GFX8CHECK: ; %bb.0:3140; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3141; GFX8CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 603142; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3143; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]3144;3145; GFX9CHECK-LABEL: isnegative_f16:3146; GFX9CHECK: ; %bb.0:3147; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3148; GFX9CHECK-NEXT: v_cmp_class_f16_e64 s[4:5], v0, 603149; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3150; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]3151;3152; GFX10CHECK-LABEL: isnegative_f16:3153; GFX10CHECK: ; %bb.0:3154; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3155; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 603156; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s43157; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]3158;3159; GFX11SELDAG-TRUE16-LABEL: isnegative_f16:3160; GFX11SELDAG-TRUE16: ; %bb.0:3161; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3162; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 603163; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3164; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3165; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3166;3167; GFX11SELDAG-FAKE16-LABEL: isnegative_f16:3168; GFX11SELDAG-FAKE16: ; %bb.0:3169; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3170; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 603171; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03172; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3173;3174; GFX11GLISEL-TRUE16-LABEL: isnegative_f16:3175; GFX11GLISEL-TRUE16: ; %bb.0:3176; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3177; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 603178; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3179; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3180; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3181;3182; GFX11GLISEL-FAKE16-LABEL: isnegative_f16:3183; GFX11GLISEL-FAKE16: ; %bb.0:3184; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3185; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 603186; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03187; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3188 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 60) ; fcNegative3189 ret i1 %class3190}3191 3192define i1 @not_isnegative_f16(half %x) {3193; GFX7SELDAG-LABEL: not_isnegative_f16:3194; GFX7SELDAG: ; %bb.0:3195; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3196; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03197; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c013198; GFX7SELDAG-NEXT: s_movk_i32 s5, 0x7c003199; GFX7SELDAG-NEXT: v_cmp_gt_u32_e32 vcc, s4, v03200; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v03201; GFX7SELDAG-NEXT: v_cmp_lt_i32_e64 s[4:5], s5, v03202; GFX7SELDAG-NEXT: s_or_b64 s[4:5], vcc, s[4:5]3203; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3204; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3205;3206; GFX7GLISEL-LABEL: not_isnegative_f16:3207; GFX7GLISEL: ; %bb.0:3208; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3209; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0x7fff, v03210; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03211; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c013212; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v23213; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v13214; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c003215; GFX7GLISEL-NEXT: v_cmp_gt_u32_e64 s[4:5], v0, v13216; GFX7GLISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5]3217; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3218; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]3219;3220; GFX8CHECK-LABEL: not_isnegative_f16:3221; GFX8CHECK: ; %bb.0:3222; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3223; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x3c33224; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13225; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3226; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]3227;3228; GFX9CHECK-LABEL: not_isnegative_f16:3229; GFX9CHECK: ; %bb.0:3230; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3231; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x3c33232; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13233; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3234; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]3235;3236; GFX10CHECK-LABEL: not_isnegative_f16:3237; GFX10CHECK: ; %bb.0:3238; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3239; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x3c33240; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s43241; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]3242;3243; GFX11SELDAG-TRUE16-LABEL: not_isnegative_f16:3244; GFX11SELDAG-TRUE16: ; %bb.0:3245; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3246; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x3c33247; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3248; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3249; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3250;3251; GFX11SELDAG-FAKE16-LABEL: not_isnegative_f16:3252; GFX11SELDAG-FAKE16: ; %bb.0:3253; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3254; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x3c33255; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03256; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3257;3258; GFX11GLISEL-TRUE16-LABEL: not_isnegative_f16:3259; GFX11GLISEL-TRUE16: ; %bb.0:3260; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3261; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x3c33262; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3263; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3264; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3265;3266; GFX11GLISEL-FAKE16-LABEL: not_isnegative_f16:3267; GFX11GLISEL-FAKE16: ; %bb.0:3268; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3269; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x3c33270; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03271; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3272 %class = tail call i1 @llvm.is.fpclass.f16(half %x, i32 963) ; ~fcNegative3273 ret i1 %class3274}3275 3276define i1 @iszero_or_nan_f16(half %x) {3277; GFX7SELDAG-LABEL: iszero_or_nan_f16:3278; GFX7SELDAG: ; %bb.0: ; %entry3279; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3280; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03281; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c003282; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v03283; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v03284; GFX7SELDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v03285; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc3286; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3287; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3288;3289; GFX7GLISEL-LABEL: iszero_or_nan_f16:3290; GFX7GLISEL: ; %bb.0: ; %entry3291; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3292; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v03293; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03294; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xffff83ff, v03295; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0xffff84003296; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v13297; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3298; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]3299;3300; GFX8CHECK-LABEL: iszero_or_nan_f16:3301; GFX8CHECK: ; %bb.0: ; %entry3302; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3303; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x633304; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13305; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3306; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]3307;3308; GFX9CHECK-LABEL: iszero_or_nan_f16:3309; GFX9CHECK: ; %bb.0: ; %entry3310; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3311; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x633312; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13313; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3314; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]3315;3316; GFX10CHECK-LABEL: iszero_or_nan_f16:3317; GFX10CHECK: ; %bb.0: ; %entry3318; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3319; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x633320; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s43321; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]3322;3323; GFX11SELDAG-TRUE16-LABEL: iszero_or_nan_f16:3324; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry3325; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3326; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x633327; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3328; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3329; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3330;3331; GFX11SELDAG-FAKE16-LABEL: iszero_or_nan_f16:3332; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry3333; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3334; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x633335; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03336; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3337;3338; GFX11GLISEL-TRUE16-LABEL: iszero_or_nan_f16:3339; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry3340; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3341; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x633342; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3343; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3344; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3345;3346; GFX11GLISEL-FAKE16-LABEL: iszero_or_nan_f16:3347; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry3348; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3349; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x633350; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03351; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3352entry:3353 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 99) ; 0x60|0x3 = "zero|nan"3354 ret i1 %03355}3356 3357define i1 @iszero_or_nan_f_daz(half %x) #0 {3358; GFX7SELDAG-LABEL: iszero_or_nan_f_daz:3359; GFX7SELDAG: ; %bb.0: ; %entry3360; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3361; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03362; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c003363; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v03364; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v03365; GFX7SELDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v03366; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc3367; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3368; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3369;3370; GFX7GLISEL-LABEL: iszero_or_nan_f_daz:3371; GFX7GLISEL: ; %bb.0: ; %entry3372; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3373; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v03374; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03375; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xffff83ff, v03376; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0xffff84003377; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v13378; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3379; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]3380;3381; GFX8CHECK-LABEL: iszero_or_nan_f_daz:3382; GFX8CHECK: ; %bb.0: ; %entry3383; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3384; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x633385; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13386; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3387; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]3388;3389; GFX9CHECK-LABEL: iszero_or_nan_f_daz:3390; GFX9CHECK: ; %bb.0: ; %entry3391; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3392; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x633393; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13394; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3395; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]3396;3397; GFX10CHECK-LABEL: iszero_or_nan_f_daz:3398; GFX10CHECK: ; %bb.0: ; %entry3399; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3400; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x633401; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s43402; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]3403;3404; GFX11SELDAG-TRUE16-LABEL: iszero_or_nan_f_daz:3405; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry3406; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3407; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x633408; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3409; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3410; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3411;3412; GFX11SELDAG-FAKE16-LABEL: iszero_or_nan_f_daz:3413; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry3414; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3415; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x633416; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03417; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3418;3419; GFX11GLISEL-TRUE16-LABEL: iszero_or_nan_f_daz:3420; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry3421; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3422; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x633423; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3424; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3425; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3426;3427; GFX11GLISEL-FAKE16-LABEL: iszero_or_nan_f_daz:3428; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry3429; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3430; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x633431; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03432; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3433entry:3434 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 99) ; 0x60|0x3 = "zero|nan"3435 ret i1 %03436}3437 3438define i1 @iszero_or_nan_f_maybe_daz(half %x) #1 {3439; GFX7SELDAG-LABEL: iszero_or_nan_f_maybe_daz:3440; GFX7SELDAG: ; %bb.0: ; %entry3441; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3442; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03443; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c003444; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v03445; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v03446; GFX7SELDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v03447; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc3448; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3449; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3450;3451; GFX7GLISEL-LABEL: iszero_or_nan_f_maybe_daz:3452; GFX7GLISEL: ; %bb.0: ; %entry3453; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3454; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v03455; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03456; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xffff83ff, v03457; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0xffff84003458; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v13459; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3460; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]3461;3462; GFX8CHECK-LABEL: iszero_or_nan_f_maybe_daz:3463; GFX8CHECK: ; %bb.0: ; %entry3464; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3465; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x633466; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13467; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3468; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]3469;3470; GFX9CHECK-LABEL: iszero_or_nan_f_maybe_daz:3471; GFX9CHECK: ; %bb.0: ; %entry3472; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3473; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x633474; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13475; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3476; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]3477;3478; GFX10CHECK-LABEL: iszero_or_nan_f_maybe_daz:3479; GFX10CHECK: ; %bb.0: ; %entry3480; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3481; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x633482; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s43483; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]3484;3485; GFX11SELDAG-TRUE16-LABEL: iszero_or_nan_f_maybe_daz:3486; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry3487; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3488; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x633489; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3490; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3491; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3492;3493; GFX11SELDAG-FAKE16-LABEL: iszero_or_nan_f_maybe_daz:3494; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry3495; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3496; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x633497; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03498; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3499;3500; GFX11GLISEL-TRUE16-LABEL: iszero_or_nan_f_maybe_daz:3501; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry3502; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3503; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x633504; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3505; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3506; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3507;3508; GFX11GLISEL-FAKE16-LABEL: iszero_or_nan_f_maybe_daz:3509; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry3510; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3511; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x633512; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03513; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3514entry:3515 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 99) ; 0x60|0x3 = "zero|nan"3516 ret i1 %03517}3518 3519define i1 @not_iszero_or_nan_f16(half %x) {3520; GFX7SELDAG-LABEL: not_iszero_or_nan_f16:3521; GFX7SELDAG: ; %bb.0: ; %entry3522; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3523; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03524; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c013525; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v03526; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, s4, v03527; GFX7SELDAG-NEXT: v_cmp_ne_u32_e64 s[4:5], 0, v03528; GFX7SELDAG-NEXT: s_and_b64 s[4:5], s[4:5], vcc3529; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3530; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3531;3532; GFX7GLISEL-LABEL: not_iszero_or_nan_f16:3533; GFX7GLISEL: ; %bb.0: ; %entry3534; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3535; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v03536; GFX7GLISEL-NEXT: v_add_i32_e32 v1, vcc, -1, v03537; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v13538; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x3ff3539; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v1, v23540; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v03541; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c003542; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v23543; GFX7GLISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5]3544; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v03545; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03546; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x78003547; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v13548; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc3549; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3550; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]3551;3552; GFX8CHECK-LABEL: not_iszero_or_nan_f16:3553; GFX8CHECK: ; %bb.0: ; %entry3554; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3555; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x39c3556; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13557; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3558; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]3559;3560; GFX9CHECK-LABEL: not_iszero_or_nan_f16:3561; GFX9CHECK: ; %bb.0: ; %entry3562; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3563; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x39c3564; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13565; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3566; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]3567;3568; GFX10CHECK-LABEL: not_iszero_or_nan_f16:3569; GFX10CHECK: ; %bb.0: ; %entry3570; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3571; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x39c3572; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s43573; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]3574;3575; GFX11SELDAG-TRUE16-LABEL: not_iszero_or_nan_f16:3576; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry3577; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3578; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39c3579; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3580; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3581; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3582;3583; GFX11SELDAG-FAKE16-LABEL: not_iszero_or_nan_f16:3584; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry3585; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3586; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39c3587; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03588; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3589;3590; GFX11GLISEL-TRUE16-LABEL: not_iszero_or_nan_f16:3591; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry3592; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3593; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39c3594; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3595; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3596; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3597;3598; GFX11GLISEL-FAKE16-LABEL: not_iszero_or_nan_f16:3599; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry3600; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3601; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39c3602; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03603; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3604entry:3605 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 924) ; ~0x60 = "~(zero|nan)"3606 ret i1 %03607}3608 3609define i1 @not_iszero_or_nan_f_daz(half %x) #0 {3610; GFX7SELDAG-LABEL: not_iszero_or_nan_f_daz:3611; GFX7SELDAG: ; %bb.0: ; %entry3612; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3613; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03614; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c013615; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v03616; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, s4, v03617; GFX7SELDAG-NEXT: v_cmp_ne_u32_e64 s[4:5], 0, v03618; GFX7SELDAG-NEXT: s_and_b64 s[4:5], s[4:5], vcc3619; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3620; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3621;3622; GFX7GLISEL-LABEL: not_iszero_or_nan_f_daz:3623; GFX7GLISEL: ; %bb.0: ; %entry3624; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3625; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v03626; GFX7GLISEL-NEXT: v_add_i32_e32 v1, vcc, -1, v03627; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v13628; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x3ff3629; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v1, v23630; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v03631; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c003632; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v23633; GFX7GLISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5]3634; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v03635; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03636; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x78003637; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v13638; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc3639; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3640; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]3641;3642; GFX8CHECK-LABEL: not_iszero_or_nan_f_daz:3643; GFX8CHECK: ; %bb.0: ; %entry3644; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3645; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x39c3646; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13647; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3648; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]3649;3650; GFX9CHECK-LABEL: not_iszero_or_nan_f_daz:3651; GFX9CHECK: ; %bb.0: ; %entry3652; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3653; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x39c3654; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13655; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3656; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]3657;3658; GFX10CHECK-LABEL: not_iszero_or_nan_f_daz:3659; GFX10CHECK: ; %bb.0: ; %entry3660; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3661; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x39c3662; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s43663; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]3664;3665; GFX11SELDAG-TRUE16-LABEL: not_iszero_or_nan_f_daz:3666; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry3667; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3668; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39c3669; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3670; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3671; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3672;3673; GFX11SELDAG-FAKE16-LABEL: not_iszero_or_nan_f_daz:3674; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry3675; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3676; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39c3677; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03678; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3679;3680; GFX11GLISEL-TRUE16-LABEL: not_iszero_or_nan_f_daz:3681; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry3682; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3683; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39c3684; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3685; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3686; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3687;3688; GFX11GLISEL-FAKE16-LABEL: not_iszero_or_nan_f_daz:3689; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry3690; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3691; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39c3692; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03693; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3694entry:3695 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 924) ; ~(0x60|0x3) = "~(zero|nan)"3696 ret i1 %03697}3698 3699define i1 @not_iszero_or_nan_f_maybe_daz(half %x) #1 {3700; GFX7SELDAG-LABEL: not_iszero_or_nan_f_maybe_daz:3701; GFX7SELDAG: ; %bb.0: ; %entry3702; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3703; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03704; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c013705; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v03706; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, s4, v03707; GFX7SELDAG-NEXT: v_cmp_ne_u32_e64 s[4:5], 0, v03708; GFX7SELDAG-NEXT: s_and_b64 s[4:5], s[4:5], vcc3709; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3710; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3711;3712; GFX7GLISEL-LABEL: not_iszero_or_nan_f_maybe_daz:3713; GFX7GLISEL: ; %bb.0: ; %entry3714; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3715; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v03716; GFX7GLISEL-NEXT: v_add_i32_e32 v1, vcc, -1, v03717; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v13718; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x3ff3719; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v1, v23720; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v03721; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c003722; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v23723; GFX7GLISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5]3724; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v03725; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03726; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x78003727; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v13728; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc3729; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3730; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]3731;3732; GFX8CHECK-LABEL: not_iszero_or_nan_f_maybe_daz:3733; GFX8CHECK: ; %bb.0: ; %entry3734; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3735; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x39c3736; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13737; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3738; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]3739;3740; GFX9CHECK-LABEL: not_iszero_or_nan_f_maybe_daz:3741; GFX9CHECK: ; %bb.0: ; %entry3742; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3743; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x39c3744; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13745; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3746; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]3747;3748; GFX10CHECK-LABEL: not_iszero_or_nan_f_maybe_daz:3749; GFX10CHECK: ; %bb.0: ; %entry3750; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3751; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x39c3752; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s43753; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]3754;3755; GFX11SELDAG-TRUE16-LABEL: not_iszero_or_nan_f_maybe_daz:3756; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry3757; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3758; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39c3759; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3760; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3761; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3762;3763; GFX11SELDAG-FAKE16-LABEL: not_iszero_or_nan_f_maybe_daz:3764; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry3765; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3766; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39c3767; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03768; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3769;3770; GFX11GLISEL-TRUE16-LABEL: not_iszero_or_nan_f_maybe_daz:3771; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry3772; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3773; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39c3774; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3775; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3776; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3777;3778; GFX11GLISEL-FAKE16-LABEL: not_iszero_or_nan_f_maybe_daz:3779; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry3780; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3781; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39c3782; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03783; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3784entry:3785 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 924) ; ~(0x60|0x3) = "~(zero|nan)"3786 ret i1 %03787}3788 3789define i1 @iszero_or_qnan_f16(half %x) {3790; GFX7SELDAG-LABEL: iszero_or_qnan_f16:3791; GFX7SELDAG: ; %bb.0: ; %entry3792; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3793; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03794; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7dff3795; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v03796; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v03797; GFX7SELDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v03798; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc3799; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3800; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3801;3802; GFX7GLISEL-LABEL: iszero_or_qnan_f16:3803; GFX7GLISEL: ; %bb.0: ; %entry3804; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3805; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v03806; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03807; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xffff8200, v03808; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0xffff82013809; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v13810; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3811; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]3812;3813; GFX8CHECK-LABEL: iszero_or_qnan_f16:3814; GFX8CHECK: ; %bb.0: ; %entry3815; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3816; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x623817; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13818; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3819; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]3820;3821; GFX9CHECK-LABEL: iszero_or_qnan_f16:3822; GFX9CHECK: ; %bb.0: ; %entry3823; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3824; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x623825; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13826; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3827; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]3828;3829; GFX10CHECK-LABEL: iszero_or_qnan_f16:3830; GFX10CHECK: ; %bb.0: ; %entry3831; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3832; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x623833; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s43834; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]3835;3836; GFX11SELDAG-TRUE16-LABEL: iszero_or_qnan_f16:3837; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry3838; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3839; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x623840; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3841; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3842; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3843;3844; GFX11SELDAG-FAKE16-LABEL: iszero_or_qnan_f16:3845; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry3846; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3847; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x623848; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03849; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3850;3851; GFX11GLISEL-TRUE16-LABEL: iszero_or_qnan_f16:3852; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry3853; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3854; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x623855; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3856; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3857; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3858;3859; GFX11GLISEL-FAKE16-LABEL: iszero_or_qnan_f16:3860; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry3861; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3862; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x623863; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03864; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3865entry:3866 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 98) ; 0x60|0x2 = "zero|qnan"3867 ret i1 %03868}3869 3870define i1 @iszero_or_snan_f16(half %x) {3871; GFX7SELDAG-LABEL: iszero_or_snan_f16:3872; GFX7SELDAG: ; %bb.0: ; %entry3873; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3874; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03875; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7e003876; GFX7SELDAG-NEXT: s_movk_i32 s5, 0x7c003877; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v03878; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, s4, v03879; GFX7SELDAG-NEXT: v_cmp_lt_i32_e64 s[4:5], s5, v03880; GFX7SELDAG-NEXT: s_and_b64 s[4:5], s[4:5], vcc3881; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, 0, v03882; GFX7SELDAG-NEXT: s_or_b64 s[4:5], vcc, s[4:5]3883; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3884; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3885;3886; GFX7GLISEL-LABEL: iszero_or_snan_f16:3887; GFX7GLISEL: ; %bb.0: ; %entry3888; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3889; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v03890; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03891; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v03892; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xffff83ff, v03893; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x1ff3894; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v13895; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc3896; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3897; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]3898;3899; GFX8CHECK-LABEL: iszero_or_snan_f16:3900; GFX8CHECK: ; %bb.0: ; %entry3901; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3902; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x613903; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13904; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3905; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]3906;3907; GFX9CHECK-LABEL: iszero_or_snan_f16:3908; GFX9CHECK: ; %bb.0: ; %entry3909; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3910; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x613911; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v13912; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc3913; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]3914;3915; GFX10CHECK-LABEL: iszero_or_snan_f16:3916; GFX10CHECK: ; %bb.0: ; %entry3917; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3918; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x613919; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s43920; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]3921;3922; GFX11SELDAG-TRUE16-LABEL: iszero_or_snan_f16:3923; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry3924; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3925; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x613926; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3927; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3928; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3929;3930; GFX11SELDAG-FAKE16-LABEL: iszero_or_snan_f16:3931; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry3932; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3933; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x613934; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03935; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3936;3937; GFX11GLISEL-TRUE16-LABEL: iszero_or_snan_f16:3938; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry3939; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3940; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x613941; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l3942; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo3943; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3944;3945; GFX11GLISEL-FAKE16-LABEL: iszero_or_snan_f16:3946; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry3947; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3948; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x613949; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s03950; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3951entry:3952 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 97) ; 0x60|0x1 = "zero|snan"3953 ret i1 %03954}3955 3956define i1 @not_iszero_or_qnan_f16(half %x) {3957; GFX7SELDAG-LABEL: not_iszero_or_qnan_f16:3958; GFX7SELDAG: ; %bb.0: ; %entry3959; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3960; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v03961; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7e003962; GFX7SELDAG-NEXT: s_movk_i32 s8, 0x7c003963; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v03964; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, s4, v03965; GFX7SELDAG-NEXT: v_cmp_lt_i32_e64 s[4:5], s8, v03966; GFX7SELDAG-NEXT: s_and_b64 s[6:7], s[4:5], vcc3967; GFX7SELDAG-NEXT: v_add_i32_e64 v1, s[4:5], -1, v03968; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x3ff3969; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, s8, v03970; GFX7SELDAG-NEXT: v_cmp_gt_u32_e64 s[4:5], s4, v13971; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc3972; GFX7SELDAG-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v03973; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], s[6:7]3974; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0xffff, v03975; GFX7SELDAG-NEXT: s_movk_i32 s6, 0x78003976; GFX7SELDAG-NEXT: v_cmp_gt_u32_e32 vcc, s6, v03977; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc3978; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]3979; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]3980;3981; GFX7GLISEL-LABEL: not_iszero_or_qnan_f16:3982; GFX7GLISEL: ; %bb.0: ; %entry3983; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3984; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v03985; GFX7GLISEL-NEXT: v_add_i32_e32 v1, vcc, -1, v03986; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v13987; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x3ff3988; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v1, v23989; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v03990; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c003991; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v23992; GFX7GLISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5]3993; GFX7GLISEL-NEXT: v_add_i32_e32 v1, vcc, 0xffff83ff, v13994; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x1ff3995; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v1, v23996; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc3997; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v03998; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v03999; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x78004000; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v14001; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc4002; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]4003; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]4004;4005; GFX8CHECK-LABEL: not_iszero_or_qnan_f16:4006; GFX8CHECK: ; %bb.0: ; %entry4007; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4008; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x39d4009; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14010; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4011; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]4012;4013; GFX9CHECK-LABEL: not_iszero_or_qnan_f16:4014; GFX9CHECK: ; %bb.0: ; %entry4015; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4016; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x39d4017; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14018; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4019; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]4020;4021; GFX10CHECK-LABEL: not_iszero_or_qnan_f16:4022; GFX10CHECK: ; %bb.0: ; %entry4023; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4024; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x39d4025; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s44026; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]4027;4028; GFX11SELDAG-TRUE16-LABEL: not_iszero_or_qnan_f16:4029; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry4030; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4031; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39d4032; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4033; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4034; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4035;4036; GFX11SELDAG-FAKE16-LABEL: not_iszero_or_qnan_f16:4037; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry4038; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4039; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39d4040; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04041; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4042;4043; GFX11GLISEL-TRUE16-LABEL: not_iszero_or_qnan_f16:4044; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry4045; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4046; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39d4047; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4048; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4049; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4050;4051; GFX11GLISEL-FAKE16-LABEL: not_iszero_or_qnan_f16:4052; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry4053; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4054; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39d4055; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04056; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4057entry:4058 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 925) ; ~(0x60|0x2) = "~(zero|qnan)"4059 ret i1 %04060}4061 4062define i1 @not_iszero_or_snan_f16(half %x) {4063; GFX7SELDAG-LABEL: not_iszero_or_snan_f16:4064; GFX7SELDAG: ; %bb.0: ; %entry4065; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4066; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v04067; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c004068; GFX7SELDAG-NEXT: s_movk_i32 s6, 0x7dff4069; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v04070; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, s4, v04071; GFX7SELDAG-NEXT: v_add_i32_e64 v1, s[4:5], -1, v04072; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x3ff4073; GFX7SELDAG-NEXT: v_cmp_gt_u32_e64 s[4:5], s4, v14074; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc4075; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s6, v04076; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc4077; GFX7SELDAG-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v04078; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0xffff, v04079; GFX7SELDAG-NEXT: s_movk_i32 s6, 0x78004080; GFX7SELDAG-NEXT: v_cmp_gt_u32_e32 vcc, s6, v04081; GFX7SELDAG-NEXT: s_or_b64 s[4:5], s[4:5], vcc4082; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]4083; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]4084;4085; GFX7GLISEL-LABEL: not_iszero_or_snan_f16:4086; GFX7GLISEL: ; %bb.0: ; %entry4087; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4088; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v04089; GFX7GLISEL-NEXT: v_add_i32_e32 v1, vcc, -1, v04090; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v14091; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x3ff4092; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v1, v24093; GFX7GLISEL-NEXT: v_and_b32_e32 v1, 0xffff, v04094; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7c004095; GFX7GLISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v24096; GFX7GLISEL-NEXT: v_mov_b32_e32 v2, 0x7e004097; GFX7GLISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5]4098; GFX7GLISEL-NEXT: v_cmp_ge_u32_e32 vcc, v1, v24099; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc4100; GFX7GLISEL-NEXT: v_add_i32_e32 v0, vcc, 0xfffffc00, v04101; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v04102; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x78004103; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v14104; GFX7GLISEL-NEXT: s_or_b64 s[4:5], s[4:5], vcc4105; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]4106; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]4107;4108; GFX8CHECK-LABEL: not_iszero_or_snan_f16:4109; GFX8CHECK: ; %bb.0: ; %entry4110; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4111; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x39e4112; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14113; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4114; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]4115;4116; GFX9CHECK-LABEL: not_iszero_or_snan_f16:4117; GFX9CHECK: ; %bb.0: ; %entry4118; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4119; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x39e4120; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14121; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4122; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]4123;4124; GFX10CHECK-LABEL: not_iszero_or_snan_f16:4125; GFX10CHECK: ; %bb.0: ; %entry4126; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4127; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x39e4128; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s44129; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]4130;4131; GFX11SELDAG-TRUE16-LABEL: not_iszero_or_snan_f16:4132; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry4133; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4134; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39e4135; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4136; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4137; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4138;4139; GFX11SELDAG-FAKE16-LABEL: not_iszero_or_snan_f16:4140; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry4141; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4142; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39e4143; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04144; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4145;4146; GFX11GLISEL-TRUE16-LABEL: not_iszero_or_snan_f16:4147; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry4148; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4149; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x39e4150; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4151; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4152; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4153;4154; GFX11GLISEL-FAKE16-LABEL: not_iszero_or_snan_f16:4155; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry4156; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4157; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x39e4158; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04159; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4160entry:4161 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 926) ; ~(0x60|0x1) = "~(zero|snan)"4162 ret i1 %04163}4164 4165define i1 @isinf_or_nan_f16(half %x) {4166; GFX7SELDAG-LABEL: isinf_or_nan_f16:4167; GFX7SELDAG: ; %bb.0: ; %entry4168; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4169; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v04170; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7bff4171; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v04172; GFX7SELDAG-NEXT: v_cmp_lt_i32_e32 vcc, s4, v04173; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4174; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]4175;4176; GFX7GLISEL-LABEL: isinf_or_nan_f16:4177; GFX7GLISEL: ; %bb.0: ; %entry4178; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4179; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v04180; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v04181; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c004182; GFX7GLISEL-NEXT: v_cmp_ge_u32_e32 vcc, v0, v14183; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4184; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]4185;4186; GFX8CHECK-LABEL: isinf_or_nan_f16:4187; GFX8CHECK: ; %bb.0: ; %entry4188; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4189; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x2074190; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14191; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4192; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]4193;4194; GFX9CHECK-LABEL: isinf_or_nan_f16:4195; GFX9CHECK: ; %bb.0: ; %entry4196; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4197; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x2074198; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14199; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4200; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]4201;4202; GFX10CHECK-LABEL: isinf_or_nan_f16:4203; GFX10CHECK: ; %bb.0: ; %entry4204; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4205; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x2074206; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s44207; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]4208;4209; GFX11SELDAG-TRUE16-LABEL: isinf_or_nan_f16:4210; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry4211; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4212; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x2074213; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4214; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4215; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4216;4217; GFX11SELDAG-FAKE16-LABEL: isinf_or_nan_f16:4218; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry4219; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4220; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x2074221; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04222; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4223;4224; GFX11GLISEL-TRUE16-LABEL: isinf_or_nan_f16:4225; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry4226; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4227; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x2074228; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4229; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4230; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4231;4232; GFX11GLISEL-FAKE16-LABEL: isinf_or_nan_f16:4233; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry4234; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4235; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x2074236; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04237; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4238entry:4239 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 519) ; 0x204|0x3 = "inf|nan"4240 ret i1 %04241}4242 4243define i1 @not_isinf_or_nan_f16(half %x) {4244; GFX7SELDAG-LABEL: not_isinf_or_nan_f16:4245; GFX7SELDAG: ; %bb.0: ; %entry4246; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4247; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v04248; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c004249; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v04250; GFX7SELDAG-NEXT: v_cmp_gt_i32_e32 vcc, s4, v04251; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4252; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]4253;4254; GFX7GLISEL-LABEL: not_isinf_or_nan_f16:4255; GFX7GLISEL: ; %bb.0: ; %entry4256; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4257; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v04258; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v04259; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c004260; GFX7GLISEL-NEXT: v_cmp_lt_u32_e32 vcc, v0, v14261; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4262; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]4263;4264; GFX8CHECK-LABEL: not_isinf_or_nan_f16:4265; GFX8CHECK: ; %bb.0: ; %entry4266; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4267; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x1f84268; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14269; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4270; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]4271;4272; GFX9CHECK-LABEL: not_isinf_or_nan_f16:4273; GFX9CHECK: ; %bb.0: ; %entry4274; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4275; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x1f84276; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14277; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4278; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]4279;4280; GFX10CHECK-LABEL: not_isinf_or_nan_f16:4281; GFX10CHECK: ; %bb.0: ; %entry4282; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4283; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x1f84284; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s44285; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]4286;4287; GFX11SELDAG-TRUE16-LABEL: not_isinf_or_nan_f16:4288; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry4289; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4290; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x1f84291; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4292; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4293; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4294;4295; GFX11SELDAG-FAKE16-LABEL: not_isinf_or_nan_f16:4296; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry4297; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4298; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x1f84299; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04300; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4301;4302; GFX11GLISEL-TRUE16-LABEL: not_isinf_or_nan_f16:4303; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry4304; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4305; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x1f84306; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4307; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4308; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4309;4310; GFX11GLISEL-FAKE16-LABEL: not_isinf_or_nan_f16:4311; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry4312; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4313; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x1f84314; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04315; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4316entry:4317 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 504) ; ~(0x204|0x3) = "~(inf|nan)"4318 ret i1 %04319}4320 4321define i1 @isfinite_or_nan_f(half %x) {4322; GFX7SELDAG-LABEL: isfinite_or_nan_f:4323; GFX7SELDAG: ; %bb.0: ; %entry4324; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4325; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v04326; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c004327; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v04328; GFX7SELDAG-NEXT: v_cmp_ne_u32_e32 vcc, s4, v04329; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4330; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]4331;4332; GFX7GLISEL-LABEL: isfinite_or_nan_f:4333; GFX7GLISEL: ; %bb.0: ; %entry4334; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4335; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v04336; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v04337; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c004338; GFX7GLISEL-NEXT: v_cmp_ne_u32_e32 vcc, v0, v14339; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4340; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]4341;4342; GFX8CHECK-LABEL: isfinite_or_nan_f:4343; GFX8CHECK: ; %bb.0: ; %entry4344; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4345; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x1fb4346; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14347; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4348; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]4349;4350; GFX9CHECK-LABEL: isfinite_or_nan_f:4351; GFX9CHECK: ; %bb.0: ; %entry4352; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4353; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x1fb4354; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14355; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4356; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]4357;4358; GFX10CHECK-LABEL: isfinite_or_nan_f:4359; GFX10CHECK: ; %bb.0: ; %entry4360; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4361; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x1fb4362; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s44363; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]4364;4365; GFX11SELDAG-TRUE16-LABEL: isfinite_or_nan_f:4366; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry4367; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4368; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x1fb4369; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4370; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4371; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4372;4373; GFX11SELDAG-FAKE16-LABEL: isfinite_or_nan_f:4374; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry4375; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4376; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x1fb4377; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04378; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4379;4380; GFX11GLISEL-TRUE16-LABEL: isfinite_or_nan_f:4381; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry4382; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4383; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x1fb4384; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4385; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4386; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4387;4388; GFX11GLISEL-FAKE16-LABEL: isfinite_or_nan_f:4389; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry4390; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4391; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x1fb4392; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04393; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4394entry:4395 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 507) ; 0x1f8|0x3 = "finite|nan"4396 ret i1 %04397}4398 4399define i1 @not_isfinite_or_nan_f(half %x) {4400; GFX7SELDAG-LABEL: not_isfinite_or_nan_f:4401; GFX7SELDAG: ; %bb.0: ; %entry4402; GFX7SELDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4403; GFX7SELDAG-NEXT: v_cvt_f16_f32_e32 v0, v04404; GFX7SELDAG-NEXT: s_movk_i32 s4, 0x7c004405; GFX7SELDAG-NEXT: v_and_b32_e32 v0, 0x7fff, v04406; GFX7SELDAG-NEXT: v_cmp_eq_u32_e32 vcc, s4, v04407; GFX7SELDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4408; GFX7SELDAG-NEXT: s_setpc_b64 s[30:31]4409;4410; GFX7GLISEL-LABEL: not_isfinite_or_nan_f:4411; GFX7GLISEL: ; %bb.0: ; %entry4412; GFX7GLISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4413; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0x7fff, v04414; GFX7GLISEL-NEXT: v_and_b32_e32 v0, 0xffff, v04415; GFX7GLISEL-NEXT: v_mov_b32_e32 v1, 0x7c004416; GFX7GLISEL-NEXT: v_cmp_eq_u32_e32 vcc, v0, v14417; GFX7GLISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4418; GFX7GLISEL-NEXT: s_setpc_b64 s[30:31]4419;4420; GFX8CHECK-LABEL: not_isfinite_or_nan_f:4421; GFX8CHECK: ; %bb.0: ; %entry4422; GFX8CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4423; GFX8CHECK-NEXT: v_mov_b32_e32 v1, 0x2044424; GFX8CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14425; GFX8CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4426; GFX8CHECK-NEXT: s_setpc_b64 s[30:31]4427;4428; GFX9CHECK-LABEL: not_isfinite_or_nan_f:4429; GFX9CHECK: ; %bb.0: ; %entry4430; GFX9CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4431; GFX9CHECK-NEXT: v_mov_b32_e32 v1, 0x2044432; GFX9CHECK-NEXT: v_cmp_class_f16_e32 vcc, v0, v14433; GFX9CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc4434; GFX9CHECK-NEXT: s_setpc_b64 s[30:31]4435;4436; GFX10CHECK-LABEL: not_isfinite_or_nan_f:4437; GFX10CHECK: ; %bb.0: ; %entry4438; GFX10CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4439; GFX10CHECK-NEXT: v_cmp_class_f16_e64 s4, v0, 0x2044440; GFX10CHECK-NEXT: v_cndmask_b32_e64 v0, 0, 1, s44441; GFX10CHECK-NEXT: s_setpc_b64 s[30:31]4442;4443; GFX11SELDAG-TRUE16-LABEL: not_isfinite_or_nan_f:4444; GFX11SELDAG-TRUE16: ; %bb.0: ; %entry4445; GFX11SELDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4446; GFX11SELDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0x2044447; GFX11SELDAG-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4448; GFX11SELDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4449; GFX11SELDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4450;4451; GFX11SELDAG-FAKE16-LABEL: not_isfinite_or_nan_f:4452; GFX11SELDAG-FAKE16: ; %bb.0: ; %entry4453; GFX11SELDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4454; GFX11SELDAG-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x2044455; GFX11SELDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04456; GFX11SELDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4457;4458; GFX11GLISEL-TRUE16-LABEL: not_isfinite_or_nan_f:4459; GFX11GLISEL-TRUE16: ; %bb.0: ; %entry4460; GFX11GLISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4461; GFX11GLISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x2044462; GFX11GLISEL-TRUE16-NEXT: v_cmp_class_f16_e32 vcc_lo, v0.l, v1.l4463; GFX11GLISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo4464; GFX11GLISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4465;4466; GFX11GLISEL-FAKE16-LABEL: not_isfinite_or_nan_f:4467; GFX11GLISEL-FAKE16: ; %bb.0: ; %entry4468; GFX11GLISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4469; GFX11GLISEL-FAKE16-NEXT: v_cmp_class_f16_e64 s0, v0, 0x2044470; GFX11GLISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s04471; GFX11GLISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4472entry:4473 %0 = tail call i1 @llvm.is.fpclass.f16(half %x, i32 516) ; ~(0x1f8|0x3) = "~(finite|nan)"4474 ret i1 %04475}4476 4477declare i1 @llvm.is.fpclass.f16(half, i32)4478declare <2 x i1> @llvm.is.fpclass.v2f16(<2 x half>, i32)4479declare <3 x i1> @llvm.is.fpclass.v3f16(<3 x half>, i32)4480declare <4 x i1> @llvm.is.fpclass.v4f16(<4 x half>, i32)4481 4482; Assume DAZ4483attributes #0 = { "denormal-fp-math"="ieee,preserve-sign" }4484 4485; Maybe daz4486attributes #1 = { "denormal-fp-math"="ieee,dynamic" }4487;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:4488; GFX11GLISEL: {{.*}}4489; GFX11SELDAG: {{.*}}4490