@@ -4990,6 +4990,32 @@ define i1 @clang_builtin_isnormal_inf_check_copysign(half %x, half %y) {
49904990 ret i1 %and
49914991}
49924992
4993+ define i1 @clang_builtin_isnormal_inf_check_copysign_logical_select (half %x , half %y ) {
4994+ ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_copysign_logical_select(
4995+ ; CHECK-NEXT: [[COPYSIGN_X:%.*]] = call half @llvm.copysign.f16(half [[X:%.*]], half [[Y:%.*]])
4996+ ; CHECK-NEXT: [[AND:%.*]] = fcmp oeq half [[COPYSIGN_X]], 0xH7C00
4997+ ; CHECK-NEXT: ret i1 [[AND]]
4998+ ;
4999+ %copysign.x = call half @llvm.copysign.f16 (half %x , half %y )
5000+ %ord = fcmp ord half %x , 0 .0
5001+ %cmp = fcmp uge half %copysign.x , 0xH7C00
5002+ %and = select i1 %ord , i1 %cmp , i1 false
5003+ ret i1 %and
5004+ }
5005+
5006+ define i1 @clang_builtin_isnormal_inf_check_fabs_nnan_logical_select (half %x ) {
5007+ ; CHECK-LABEL: @clang_builtin_isnormal_inf_check_fabs_nnan_logical_select(
5008+ ; CHECK-NEXT: [[COPYSIGN_X:%.*]] = call nnan half @llvm.fabs.f16(half [[X:%.*]])
5009+ ; CHECK-NEXT: [[AND:%.*]] = fcmp oeq half [[COPYSIGN_X]], 0xH7C00
5010+ ; CHECK-NEXT: ret i1 [[AND]]
5011+ ;
5012+ %copysign.x = call nnan half @llvm.fabs.f16 (half %x )
5013+ %ord = fcmp ord half %x , 0 .0
5014+ %cmp = fcmp uge half %copysign.x , 0xH7C00
5015+ %and = select i1 %ord , i1 %cmp , i1 false
5016+ ret i1 %and
5017+ }
5018+
49935019define i1 @isnormal_logical_select_0 (half %x ) {
49945020; CHECK-LABEL: @isnormal_logical_select_0(
49955021; CHECK-NEXT: [[FABS_X:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
0 commit comments