@@ -82,14 +82,34 @@ define float @not_known_positive_sign_arg(float %x, float %y) {
8282
8383define float @copysign_sign_arg (float %x , float %y , float %z ) {
8484; CHECK-LABEL: @copysign_sign_arg(
85- ; CHECK-NEXT: [[R:%.*]] = call ninf float @llvm.copysign.f32(float [[X:%.*]], float [[Z:%.*]])
85+ ; CHECK-NEXT: [[R:%.*]] = call float @llvm.copysign.f32(float [[X:%.*]], float [[Z:%.*]])
8686; CHECK-NEXT: ret float [[R]]
8787;
8888 %s = call reassoc float @llvm.copysign.f32 (float %y , float %z )
8989 %r = call ninf float @llvm.copysign.f32 (float %x , float %s )
9090 ret float %r
9191}
9292
93+ define float @copysign_sign_arg_nnan (float %x , float %y , float %z ) {
94+ ; CHECK-LABEL: @copysign_sign_arg_nnan(
95+ ; CHECK-NEXT: [[R:%.*]] = call nnan float @llvm.copysign.f32(float [[X:%.*]], float [[Z:%.*]])
96+ ; CHECK-NEXT: ret float [[R]]
97+ ;
98+ %s = call nnan float @llvm.copysign.f32 (float %y , float %z )
99+ %r = call nnan float @llvm.copysign.f32 (float %x , float %s )
100+ ret float %r
101+ }
102+
103+ define float @copysign_sign_arg_mixed (float %x , float %y , float %z ) {
104+ ; CHECK-LABEL: @copysign_sign_arg_mixed(
105+ ; CHECK-NEXT: [[R:%.*]] = call nsz float @llvm.copysign.f32(float [[X:%.*]], float [[Z:%.*]])
106+ ; CHECK-NEXT: ret float [[R]]
107+ ;
108+ %s = call ninf nsz float @llvm.copysign.f32 (float %y , float %z )
109+ %r = call nnan nsz float @llvm.copysign.f32 (float %x , float %s )
110+ ret float %r
111+ }
112+
93113define float @fneg_mag (float %x , float %y ) {
94114; CHECK-LABEL: @fneg_mag(
95115; CHECK-NEXT: [[R:%.*]] = call float @llvm.copysign.f32(float [[X:%.*]], float [[Y:%.*]])
0 commit comments