@@ -92,3 +92,54 @@ define float @test5(i1 zeroext %arg, float %div) {
92
92
ret float %mul
93
93
}
94
94
95
+ define float @fmul_nnan_nsz (i1 %cond , float %val ) {
96
+ ; CHECK-LABEL: @fmul_nnan_nsz(
97
+ ; CHECK-NEXT: [[LHS:%.*]] = select i1 [[COND:%.*]], float [[VAL:%.*]], float 0.000000e+00
98
+ ; CHECK-NEXT: [[RHS:%.*]] = select i1 [[COND]], float -0.000000e+00, float [[VAL]]
99
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan nsz float [[LHS]], [[RHS]]
100
+ ; CHECK-NEXT: ret float [[MUL]]
101
+ ;
102
+ %lhs = select i1 %cond , float %val , float +0 .0
103
+ %rhs = select i1 %cond , float -0 .0 , float %val
104
+ %mul = fmul nnan nsz float %lhs , %rhs
105
+ ret float %mul
106
+ }
107
+
108
+ define <2 x float > @fadd_nsz (<2 x i1 > %cond , <2 x float > %val ) {
109
+ ; CHECK-LABEL: @fadd_nsz(
110
+ ; CHECK-NEXT: [[LHS:%.*]] = select <2 x i1> [[COND:%.*]], <2 x float> [[VAL:%.*]], <2 x float> zeroinitializer
111
+ ; CHECK-NEXT: [[RHS:%.*]] = select <2 x i1> [[COND]], <2 x float> zeroinitializer, <2 x float> [[VAL]]
112
+ ; CHECK-NEXT: [[ADD:%.*]] = fadd nsz <2 x float> [[LHS]], [[RHS]]
113
+ ; CHECK-NEXT: ret <2 x float> [[ADD]]
114
+ ;
115
+ %lhs = select <2 x i1 > %cond , <2 x float > %val , <2 x float > <float +0 .0 , float +0 .0 >
116
+ %rhs = select <2 x i1 > %cond , <2 x float > <float +0 .0 , float +0 .0 >, <2 x float > %val
117
+ %add = fadd nsz <2 x float > %lhs , %rhs
118
+ ret <2 x float > %add
119
+ }
120
+
121
+ define double @fsub_nnan (i1 %cond , double %val , double %val2 ) {
122
+ ; CHECK-LABEL: @fsub_nnan(
123
+ ; CHECK-NEXT: [[LHS:%.*]] = select i1 [[COND:%.*]], double [[VAL:%.*]], double [[VAL2:%.*]]
124
+ ; CHECK-NEXT: [[RHS:%.*]] = select i1 [[COND]], double [[VAL]], double 7.000000e+00
125
+ ; CHECK-NEXT: [[ADD:%.*]] = fsub nnan double [[LHS]], [[RHS]]
126
+ ; CHECK-NEXT: ret double [[ADD]]
127
+ ;
128
+ %lhs = select i1 %cond , double %val , double %val2
129
+ %rhs = select i1 %cond , double %val , double 7 .0
130
+ %add = fsub nnan double %lhs , %rhs
131
+ ret double %add
132
+ }
133
+
134
+ define double @fdiv_nnan_nsz (i1 %cond , double %val , double %val2 ) {
135
+ ; CHECK-LABEL: @fdiv_nnan_nsz(
136
+ ; CHECK-NEXT: [[LHS:%.*]] = select i1 [[COND:%.*]], double [[VAL2:%.*]], double 0.000000e+00
137
+ ; CHECK-NEXT: [[RHS:%.*]] = select i1 [[COND]], double 4.200000e+01, double [[VAL:%.*]]
138
+ ; CHECK-NEXT: [[ADD:%.*]] = fdiv nnan nsz double [[LHS]], [[RHS]]
139
+ ; CHECK-NEXT: ret double [[ADD]]
140
+ ;
141
+ %lhs = select i1 %cond , double %val2 , double 0 .0
142
+ %rhs = select i1 %cond , double 42 .0 , double %val
143
+ %add = fdiv nnan nsz double %lhs , %rhs
144
+ ret double %add
145
+ }
0 commit comments