@@ -11,17 +11,16 @@ define double @is_profitable_f64_contract(ptr dereferenceable(8) %ptr_x, ptr der
11
11
; GFX-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y]], 0.000000e+00
12
12
; GFX-NEXT: [[X:%.*]] = load double, ptr [[PTR_X]], align 8
13
13
; GFX-NEXT: [[A_1:%.*]] = load double, ptr [[PTR_A]], align 8
14
+ ; GFX-NEXT: [[MUL:%.*]] = fmul contract double [[X]], [[A_1]]
14
15
; GFX-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
15
16
; GFX: [[COMMON_RET:.*]]:
16
17
; GFX-NEXT: [[COMMON_RET_OP:%.*]] = phi double [ [[ADD:%.*]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
17
18
; GFX-NEXT: ret double [[COMMON_RET_OP]]
18
19
; GFX: [[IF_THEN]]:
19
- ; GFX-NEXT: [[MUL:%.*]] = fmul contract double [[X]], [[A_1]]
20
20
; GFX-NEXT: [[ADD]] = fadd contract double 1.000000e+00, [[MUL]]
21
21
; GFX-NEXT: br label %[[COMMON_RET]]
22
22
; GFX: [[IF_ELSE]]:
23
- ; GFX-NEXT: [[MUL1:%.*]] = fmul contract double [[X]], [[A_1]]
24
- ; GFX-NEXT: [[SUB]] = fsub contract double [[MUL1]], [[Y]]
23
+ ; GFX-NEXT: [[SUB]] = fsub contract double [[MUL]], [[Y]]
25
24
; GFX-NEXT: br label %[[COMMON_RET]]
26
25
;
27
26
entry:
@@ -94,17 +93,16 @@ define float @is_profitable_f32(ptr dereferenceable(8) %ptr_x, ptr dereferenceab
94
93
; GFX-NEXT: [[CMP:%.*]] = fcmp oeq float [[Y]], 0.000000e+00
95
94
; GFX-NEXT: [[X:%.*]] = load float, ptr [[PTR_X]], align 8
96
95
; GFX-NEXT: [[A_1:%.*]] = load float, ptr [[PTR_A]], align 8
96
+ ; GFX-NEXT: [[MUL:%.*]] = fmul contract float [[X]], [[A_1]]
97
97
; GFX-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
98
98
; GFX: [[COMMON_RET:.*]]:
99
- ; GFX-NEXT: [[COMMON_RET_OP:%.*]] = phi float [ [[MUL:%.* ]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
99
+ ; GFX-NEXT: [[COMMON_RET_OP:%.*]] = phi float [ [[MUL]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
100
100
; GFX-NEXT: ret float [[COMMON_RET_OP]]
101
101
; GFX: [[IF_THEN]]:
102
- ; GFX-NEXT: [[MUL]] = fmul contract float [[X]], [[A_1]]
103
102
; GFX-NEXT: [[ADD:%.*]] = fadd contract float 1.000000e+00, [[MUL]]
104
103
; GFX-NEXT: br label %[[COMMON_RET]]
105
104
; GFX: [[IF_ELSE]]:
106
- ; GFX-NEXT: [[MUL1:%.*]] = fmul contract float [[X]], [[A_1]]
107
- ; GFX-NEXT: [[SUB]] = fsub contract float [[MUL1]], [[Y]]
105
+ ; GFX-NEXT: [[SUB]] = fsub contract float [[MUL]], [[Y]]
108
106
; GFX-NEXT: br label %[[COMMON_RET]]
109
107
;
110
108
entry:
@@ -113,6 +111,7 @@ entry:
113
111
%x = load float , ptr %ptr_x , align 8
114
112
br i1 %cmp , label %if.then , label %if.else
115
113
114
+
116
115
if.then: ; preds = %entry
117
116
%a_1 = load float , ptr %ptr_a , align 8
118
117
%mul = fmul contract float %x , %a_1
@@ -173,17 +172,16 @@ define half @is_profitable_f16_ieee(ptr dereferenceable(8) %ptr_x, ptr dereferen
173
172
; GFX-NEXT: [[CMP:%.*]] = fcmp oeq half [[Y]], 0xH0000
174
173
; GFX-NEXT: [[X:%.*]] = load half, ptr [[PTR_X]], align 8
175
174
; GFX-NEXT: [[A_1:%.*]] = load half, ptr [[PTR_A]], align 8
175
+ ; GFX-NEXT: [[MUL:%.*]] = fmul contract half [[X]], [[A_1]]
176
176
; GFX-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
177
177
; GFX: [[COMMON_RET:.*]]:
178
- ; GFX-NEXT: [[COMMON_RET_OP:%.*]] = phi half [ [[MUL:%.* ]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
178
+ ; GFX-NEXT: [[COMMON_RET_OP:%.*]] = phi half [ [[MUL]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
179
179
; GFX-NEXT: ret half [[COMMON_RET_OP]]
180
180
; GFX: [[IF_THEN]]:
181
- ; GFX-NEXT: [[MUL]] = fmul contract half [[X]], [[A_1]]
182
181
; GFX-NEXT: [[ADD:%.*]] = fadd contract half [[Y]], [[MUL]]
183
182
; GFX-NEXT: br label %[[COMMON_RET]]
184
183
; GFX: [[IF_ELSE]]:
185
- ; GFX-NEXT: [[MUL1:%.*]] = fmul contract half [[X]], [[A_1]]
186
- ; GFX-NEXT: [[SUB]] = fsub contract half [[MUL1]], [[Y]]
184
+ ; GFX-NEXT: [[SUB]] = fsub contract half [[MUL]], [[Y]]
187
185
; GFX-NEXT: br label %[[COMMON_RET]]
188
186
;
189
187
entry:
@@ -252,17 +250,16 @@ define bfloat @is_profitable_bfloat_ieee(ptr dereferenceable(8) %ptr_x, ptr dere
252
250
; GFX-NEXT: [[CMP:%.*]] = fcmp oeq bfloat [[Y]], 0xR0000
253
251
; GFX-NEXT: [[X:%.*]] = load bfloat, ptr [[PTR_X]], align 8
254
252
; GFX-NEXT: [[A_1:%.*]] = load bfloat, ptr [[PTR_A]], align 8
253
+ ; GFX-NEXT: [[MUL:%.*]] = fmul contract bfloat [[X]], [[A_1]]
255
254
; GFX-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
256
255
; GFX: [[COMMON_RET:.*]]:
257
- ; GFX-NEXT: [[COMMON_RET_OP:%.*]] = phi bfloat [ [[MUL:%.* ]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
256
+ ; GFX-NEXT: [[COMMON_RET_OP:%.*]] = phi bfloat [ [[MUL]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
258
257
; GFX-NEXT: ret bfloat [[COMMON_RET_OP]]
259
258
; GFX: [[IF_THEN]]:
260
- ; GFX-NEXT: [[MUL]] = fmul contract bfloat [[X]], [[A_1]]
261
259
; GFX-NEXT: [[ADD:%.*]] = fadd contract bfloat 0xR3F80, [[MUL]]
262
260
; GFX-NEXT: br label %[[COMMON_RET]]
263
261
; GFX: [[IF_ELSE]]:
264
- ; GFX-NEXT: [[MUL1:%.*]] = fmul contract bfloat [[X]], [[A_1]]
265
- ; GFX-NEXT: [[SUB]] = fsub contract bfloat [[MUL1]], [[Y]]
262
+ ; GFX-NEXT: [[SUB]] = fsub contract bfloat [[MUL]], [[Y]]
266
263
; GFX-NEXT: br label %[[COMMON_RET]]
267
264
;
268
265
entry:
@@ -333,17 +330,16 @@ define <8 x half> @is_profitable_vector(ptr dereferenceable(8) %ptr_x, ptr deref
333
330
; GFX-NEXT: [[V1:%.*]] = load <8 x half>, ptr addrspace(3) @v1_ptr, align 16
334
331
; GFX-NEXT: [[V2:%.*]] = load <8 x half>, ptr addrspace(3) @v2_ptr, align 16
335
332
; GFX-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y]], 0.000000e+00
333
+ ; GFX-NEXT: [[MUL:%.*]] = fmul contract <8 x half> [[V1]], [[X]]
336
334
; GFX-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
337
335
; GFX: [[COMMON_RET:.*]]:
338
336
; GFX-NEXT: [[COMMON_RET_OP:%.*]] = phi <8 x half> [ [[ADD:%.*]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
339
337
; GFX-NEXT: ret <8 x half> [[COMMON_RET_OP]]
340
338
; GFX: [[IF_THEN]]:
341
- ; GFX-NEXT: [[MUL:%.*]] = fmul contract <8 x half> [[V1]], [[X]]
342
339
; GFX-NEXT: [[ADD]] = fadd contract <8 x half> [[V2]], [[MUL]]
343
340
; GFX-NEXT: br label %[[COMMON_RET]]
344
341
; GFX: [[IF_ELSE]]:
345
- ; GFX-NEXT: [[MUL1:%.*]] = fmul contract <8 x half> [[V1]], [[X]]
346
- ; GFX-NEXT: [[SUB]] = fsub contract <8 x half> [[MUL1]], [[V2]]
342
+ ; GFX-NEXT: [[SUB]] = fsub contract <8 x half> [[MUL]], [[V2]]
347
343
; GFX-NEXT: br label %[[COMMON_RET]]
348
344
;
349
345
entry:
@@ -366,61 +362,23 @@ if.else: ; preds = %entry
366
362
}
367
363
368
364
define double @is_profitable_f64_nocontract (ptr dereferenceable (8 ) %ptr_x , ptr dereferenceable (8 ) %ptr_y , ptr dereferenceable (8 ) %ptr_a ) #0 {
369
- ; FP-CONTRACT-FAST-LABEL: define double @is_profitable_f64_nocontract(
370
- ; FP-CONTRACT-FAST-SAME: ptr dereferenceable(8) [[PTR_X:%.*]], ptr dereferenceable(8) [[PTR_Y:%.*]], ptr dereferenceable(8) [[PTR_A:%.*]]) #[[ATTR0]] {
371
- ; FP-CONTRACT-FAST-NEXT: [[Y:%.*]] = load double, ptr [[PTR_Y]], align 8
372
- ; FP-CONTRACT-FAST-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y]], 0.000000e+00
373
- ; FP-CONTRACT-FAST-NEXT: [[X:%.*]] = load double, ptr [[PTR_X]], align 8
374
- ; FP-CONTRACT-FAST-NEXT: [[A_1:%.*]] = load double, ptr [[PTR_A]], align 8
375
- ; FP-CONTRACT-FAST-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
376
- ; FP-CONTRACT-FAST: [[COMMON_RET:.*]]:
377
- ; FP-CONTRACT-FAST-NEXT: [[COMMON_RET_OP:%.*]] = phi double [ [[PTR_ADD:%.*]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
378
- ; FP-CONTRACT-FAST-NEXT: ret double [[COMMON_RET_OP]]
379
- ; FP-CONTRACT-FAST: [[IF_THEN]]:
380
- ; FP-CONTRACT-FAST-NEXT: [[MUL:%.*]] = fmul double [[X]], [[A_1]]
381
- ; FP-CONTRACT-FAST-NEXT: [[PTR_ADD]] = fadd double 1.000000e+00, [[MUL]]
382
- ; FP-CONTRACT-FAST-NEXT: br label %[[COMMON_RET]]
383
- ; FP-CONTRACT-FAST: [[IF_ELSE]]:
384
- ; FP-CONTRACT-FAST-NEXT: [[MUL1:%.*]] = fmul double [[X]], [[A_1]]
385
- ; FP-CONTRACT-FAST-NEXT: [[SUB]] = fsub double [[MUL1]], [[Y]]
386
- ; FP-CONTRACT-FAST-NEXT: br label %[[COMMON_RET]]
387
- ;
388
- ; UNSAFE-FP-MATH-LABEL: define double @is_profitable_f64_nocontract(
389
- ; UNSAFE-FP-MATH-SAME: ptr dereferenceable(8) [[PTR_X:%.*]], ptr dereferenceable(8) [[PTR_Y:%.*]], ptr dereferenceable(8) [[PTR_A:%.*]]) #[[ATTR0]] {
390
- ; UNSAFE-FP-MATH-NEXT: [[Y:%.*]] = load double, ptr [[PTR_Y]], align 8
391
- ; UNSAFE-FP-MATH-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y]], 0.000000e+00
392
- ; UNSAFE-FP-MATH-NEXT: [[X:%.*]] = load double, ptr [[PTR_X]], align 8
393
- ; UNSAFE-FP-MATH-NEXT: [[A_1:%.*]] = load double, ptr [[PTR_A]], align 8
394
- ; UNSAFE-FP-MATH-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
395
- ; UNSAFE-FP-MATH: [[COMMON_RET:.*]]:
396
- ; UNSAFE-FP-MATH-NEXT: [[COMMON_RET_OP:%.*]] = phi double [ [[PTR_ADD:%.*]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
397
- ; UNSAFE-FP-MATH-NEXT: ret double [[COMMON_RET_OP]]
398
- ; UNSAFE-FP-MATH: [[IF_THEN]]:
399
- ; UNSAFE-FP-MATH-NEXT: [[MUL:%.*]] = fmul double [[X]], [[A_1]]
400
- ; UNSAFE-FP-MATH-NEXT: [[PTR_ADD]] = fadd double 1.000000e+00, [[MUL]]
401
- ; UNSAFE-FP-MATH-NEXT: br label %[[COMMON_RET]]
402
- ; UNSAFE-FP-MATH: [[IF_ELSE]]:
403
- ; UNSAFE-FP-MATH-NEXT: [[MUL1:%.*]] = fmul double [[X]], [[A_1]]
404
- ; UNSAFE-FP-MATH-NEXT: [[SUB]] = fsub double [[MUL1]], [[Y]]
405
- ; UNSAFE-FP-MATH-NEXT: br label %[[COMMON_RET]]
406
- ;
407
- ; NO-UNSAFE-FP-MATH-LABEL: define double @is_profitable_f64_nocontract(
408
- ; NO-UNSAFE-FP-MATH-SAME: ptr dereferenceable(8) [[PTR_X:%.*]], ptr dereferenceable(8) [[PTR_Y:%.*]], ptr dereferenceable(8) [[PTR_A:%.*]]) #[[ATTR0]] {
409
- ; NO-UNSAFE-FP-MATH-NEXT: [[Y:%.*]] = load double, ptr [[PTR_Y]], align 8
410
- ; NO-UNSAFE-FP-MATH-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y]], 0.000000e+00
411
- ; NO-UNSAFE-FP-MATH-NEXT: [[X:%.*]] = load double, ptr [[PTR_X]], align 8
412
- ; NO-UNSAFE-FP-MATH-NEXT: [[A_1:%.*]] = load double, ptr [[PTR_A]], align 8
413
- ; NO-UNSAFE-FP-MATH-NEXT: [[MUL:%.*]] = fmul double [[X]], [[A_1]]
414
- ; NO-UNSAFE-FP-MATH-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
415
- ; NO-UNSAFE-FP-MATH: [[COMMON_RET:.*]]:
416
- ; NO-UNSAFE-FP-MATH-NEXT: [[COMMON_RET_OP:%.*]] = phi double [ [[PTR_ADD:%.*]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
417
- ; NO-UNSAFE-FP-MATH-NEXT: ret double [[COMMON_RET_OP]]
418
- ; NO-UNSAFE-FP-MATH: [[IF_THEN]]:
419
- ; NO-UNSAFE-FP-MATH-NEXT: [[PTR_ADD]] = fadd double 1.000000e+00, [[MUL]]
420
- ; NO-UNSAFE-FP-MATH-NEXT: br label %[[COMMON_RET]]
421
- ; NO-UNSAFE-FP-MATH: [[IF_ELSE]]:
422
- ; NO-UNSAFE-FP-MATH-NEXT: [[SUB]] = fsub double [[MUL]], [[Y]]
423
- ; NO-UNSAFE-FP-MATH-NEXT: br label %[[COMMON_RET]]
365
+ ; GFX-LABEL: define double @is_profitable_f64_nocontract(
366
+ ; GFX-SAME: ptr dereferenceable(8) [[PTR_X:%.*]], ptr dereferenceable(8) [[PTR_Y:%.*]], ptr dereferenceable(8) [[PTR_A:%.*]]) #[[ATTR0]] {
367
+ ; GFX-NEXT: [[Y:%.*]] = load double, ptr [[PTR_Y]], align 8
368
+ ; GFX-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y]], 0.000000e+00
369
+ ; GFX-NEXT: [[X:%.*]] = load double, ptr [[PTR_X]], align 8
370
+ ; GFX-NEXT: [[A_1:%.*]] = load double, ptr [[PTR_A]], align 8
371
+ ; GFX-NEXT: [[MUL:%.*]] = fmul double [[X]], [[A_1]]
372
+ ; GFX-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
373
+ ; GFX: [[COMMON_RET:.*]]:
374
+ ; GFX-NEXT: [[COMMON_RET_OP:%.*]] = phi double [ [[PTR_ADD:%.*]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
375
+ ; GFX-NEXT: ret double [[COMMON_RET_OP]]
376
+ ; GFX: [[IF_THEN]]:
377
+ ; GFX-NEXT: [[PTR_ADD]] = fadd double 1.000000e+00, [[MUL]]
378
+ ; GFX-NEXT: br label %[[COMMON_RET]]
379
+ ; GFX: [[IF_ELSE]]:
380
+ ; GFX-NEXT: [[SUB]] = fsub double [[MUL]], [[Y]]
381
+ ; GFX-NEXT: br label %[[COMMON_RET]]
424
382
;
425
383
%y = load double , ptr %ptr_y , align 8
426
384
%cmp = fcmp oeq double %y , 0 .000000e+00
@@ -442,3 +400,7 @@ if.else: ; preds = %entry
442
400
443
401
attributes #0 = { nounwind "denormal-fp-math" ="preserve-sign,preserve-sign" }
444
402
attributes #1 = { nounwind "denormal-fp-math" ="ieee,ieee" }
403
+ ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
404
+ ; FP-CONTRACT-FAST: {{.*}}
405
+ ; NO-UNSAFE-FP-MATH: {{.*}}
406
+ ; UNSAFE-FP-MATH: {{.*}}
0 commit comments