@@ -222,25 +222,52 @@ define double @frem_f64_ninf(double %a, double %b) {
222
222
ret double %r
223
223
}
224
224
225
- define float @frem_f32_imm1 (float %a ) {
226
- ; FAST-LABEL: frem_f32_imm1 (
225
+ define float @frem_f32_imm1_fast (float %a ) {
226
+ ; FAST-LABEL: frem_f32_imm1_fast (
227
227
; FAST: {
228
228
; FAST-NEXT: .reg .b32 %r<5>;
229
229
; FAST-EMPTY:
230
230
; FAST-NEXT: // %bb.0:
231
- ; FAST-NEXT: ld.param.b32 %r1, [frem_f32_imm1_param_0 ];
231
+ ; FAST-NEXT: ld.param.b32 %r1, [frem_f32_imm1_fast_param_0 ];
232
232
; FAST-NEXT: mul.f32 %r2, %r1, 0f3E124925;
233
233
; FAST-NEXT: cvt.rzi.f32.f32 %r3, %r2;
234
234
; FAST-NEXT: fma.rn.f32 %r4, %r3, 0fC0E00000, %r1;
235
235
; FAST-NEXT: st.param.b32 [func_retval0], %r4;
236
236
; FAST-NEXT: ret;
237
237
;
238
- ; NORMAL-LABEL: frem_f32_imm1 (
238
+ ; NORMAL-LABEL: frem_f32_imm1_fast (
239
239
; NORMAL: {
240
240
; NORMAL-NEXT: .reg .b32 %r<5>;
241
241
; NORMAL-EMPTY:
242
242
; NORMAL-NEXT: // %bb.0:
243
- ; NORMAL-NEXT: ld.param.b32 %r1, [frem_f32_imm1_param_0];
243
+ ; NORMAL-NEXT: ld.param.b32 %r1, [frem_f32_imm1_fast_param_0];
244
+ ; NORMAL-NEXT: mul.rn.f32 %r2, %r1, 0f3E124925;
245
+ ; NORMAL-NEXT: cvt.rzi.f32.f32 %r3, %r2;
246
+ ; NORMAL-NEXT: fma.rn.f32 %r4, %r3, 0fC0E00000, %r1;
247
+ ; NORMAL-NEXT: st.param.b32 [func_retval0], %r4;
248
+ ; NORMAL-NEXT: ret;
249
+ %r = frem arcp float %a , 7 .0
250
+ ret float %r
251
+ }
252
+ define float @frem_f32_imm1_normal (float %a ) {
253
+ ; FAST-LABEL: frem_f32_imm1_normal(
254
+ ; FAST: {
255
+ ; FAST-NEXT: .reg .b32 %r<5>;
256
+ ; FAST-EMPTY:
257
+ ; FAST-NEXT: // %bb.0:
258
+ ; FAST-NEXT: ld.param.b32 %r1, [frem_f32_imm1_normal_param_0];
259
+ ; FAST-NEXT: div.approx.f32 %r2, %r1, 0f40E00000;
260
+ ; FAST-NEXT: cvt.rzi.f32.f32 %r3, %r2;
261
+ ; FAST-NEXT: fma.rn.f32 %r4, %r3, 0fC0E00000, %r1;
262
+ ; FAST-NEXT: st.param.b32 [func_retval0], %r4;
263
+ ; FAST-NEXT: ret;
264
+ ;
265
+ ; NORMAL-LABEL: frem_f32_imm1_normal(
266
+ ; NORMAL: {
267
+ ; NORMAL-NEXT: .reg .b32 %r<5>;
268
+ ; NORMAL-EMPTY:
269
+ ; NORMAL-NEXT: // %bb.0:
270
+ ; NORMAL-NEXT: ld.param.b32 %r1, [frem_f32_imm1_normal_param_0];
244
271
; NORMAL-NEXT: div.rn.f32 %r2, %r1, 0f40E00000;
245
272
; NORMAL-NEXT: cvt.rzi.f32.f32 %r3, %r2;
246
273
; NORMAL-NEXT: fma.rn.f32 %r4, %r3, 0fC0E00000, %r1;
0 commit comments