@@ -678,7 +678,7 @@ define nofpclass(inf) float @ret_nofpclass_inf__copysign_negative_select_pinf_rh
678678 ret float %copysign
679679}
680680
681- ; can fold to fneg(fabs(x))
681+ ; can't fold to fneg(fabs(x))
682682define nofpclass(pinf pnorm psub pzero) float @ret_nofpclass_nopositives_copysign (float %x , float %unknown.sign ) {
683683; CHECK-LABEL: define nofpclass(pinf pzero psub pnorm) float @ret_nofpclass_nopositives_copysign
684684; CHECK-SAME: (float [[X:%.*]], float [[UNKNOWN_SIGN:%.*]]) {
@@ -702,6 +702,18 @@ define nofpclass(pinf pnorm psub pzero) float @ret_nofpclass_nopositives_copysig
702702}
703703
704704; can fold to fneg(fabs(x))
705+ define nofpclass(pnorm psub pzero) float @ret_nofpclass_nopositive_finites_copysign_nnan_ninf_flag (float %x , float %unknown.sign ) {
706+ ; CHECK-LABEL: define nofpclass(pzero psub pnorm) float @ret_nofpclass_nopositive_finites_copysign_nnan_ninf_flag
707+ ; CHECK-SAME: (float [[X:%.*]], float [[UNKNOWN_SIGN:%.*]]) {
708+ ; CHECK-NEXT: [[TMP1:%.*]] = call nnan ninf float @llvm.fabs.f32(float [[X]])
709+ ; CHECK-NEXT: [[COPYSIGN:%.*]] = fneg nnan ninf float [[TMP1]]
710+ ; CHECK-NEXT: ret float [[COPYSIGN]]
711+ ;
712+ %copysign = call nnan ninf float @llvm.copysign.f32 (float %x , float %unknown.sign )
713+ ret float %copysign
714+ }
715+
716+ ; can't fold to fneg(fabs(x))
705717define nofpclass(nan pinf pnorm psub pzero) float @ret_nofpclass_nopositives_nonan_copysign (float %x , float %unknown.sign ) {
706718; CHECK-LABEL: define nofpclass(nan pinf pzero psub pnorm) float @ret_nofpclass_nopositives_nonan_copysign
707719; CHECK-SAME: (float [[X:%.*]], float [[UNKNOWN_SIGN:%.*]]) {
@@ -713,7 +725,7 @@ define nofpclass(nan pinf pnorm psub pzero) float @ret_nofpclass_nopositives_non
713725 ret float %copysign
714726}
715727
716- ; can fold to fabs(x)
728+ ; can't fold to fabs(x)
717729define nofpclass(ninf nnorm nsub nzero) float @ret_nofpclass_nonegatives_copysign (float %x , float %unknown.sign ) {
718730; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_nofpclass_nonegatives_copysign
719731; CHECK-SAME: (float [[X:%.*]], float [[UNKNOWN_SIGN:%.*]]) {
0 commit comments