[llvm] [NFC][AMDGPU] Pre-commit tests for IR variant - isFMAFasterThanFMulAdd (PR #121925)
Chinmay Deshpande via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 8 08:04:13 PST 2025
================
@@ -0,0 +1,406 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -S -passes='simplifycfg<hoist-common-insts>' -mtriple=amdgcn-- --fp-contract=fast -mcpu=gfx1030 < %s | FileCheck -check-prefix=GFX -check-prefix=FP-CONTRACT-FAST %s
+; RUN: opt -S -passes='simplifycfg<hoist-common-insts>' -mtriple=amdgcn-- --fp-contract=off --enable-unsafe-fp-math -mcpu=gfx1030 < %s | FileCheck -check-prefix=GFX -check-prefix=UNSAFE-FP-MATH %s
+; RUN: opt -S -passes='simplifycfg<hoist-common-insts>' -mtriple=amdgcn-- --fp-contract=off -mcpu=gfx1030 < %s | FileCheck -check-prefix=GFX -check-prefix=NO-UNSAFE-FP-MATH %s
+
+define double @is_profitable_f64_contract(ptr dereferenceable(8) %ptr_x, ptr dereferenceable(8) %ptr_y, ptr dereferenceable(8) %ptr_a) #0 {
+; GFX-LABEL: define double @is_profitable_f64_contract(
+; GFX-SAME: ptr dereferenceable(8) [[PTR_X:%.*]], ptr dereferenceable(8) [[PTR_Y:%.*]], ptr dereferenceable(8) [[PTR_A:%.*]]) #[[ATTR0:[0-9]+]] {
+; GFX-NEXT: [[ENTRY:.*:]]
+; GFX-NEXT: [[Y:%.*]] = load double, ptr [[PTR_Y]], align 8
+; GFX-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y]], 0.000000e+00
+; GFX-NEXT: [[X:%.*]] = load double, ptr [[PTR_X]], align 8
+; GFX-NEXT: [[A_1:%.*]] = load double, ptr [[PTR_A]], align 8
+; GFX-NEXT: [[MUL:%.*]] = fmul contract double [[X]], [[A_1]]
+; GFX-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
+; GFX: [[COMMON_RET:.*]]:
+; GFX-NEXT: [[COMMON_RET_OP:%.*]] = phi double [ [[ADD:%.*]], %[[IF_THEN]] ], [ [[SUB:%.*]], %[[IF_ELSE]] ]
+; GFX-NEXT: ret double [[COMMON_RET_OP]]
+; GFX: [[IF_THEN]]:
+; GFX-NEXT: [[ADD]] = fadd contract double 1.000000e+00, [[MUL]]
+; GFX-NEXT: br label %[[COMMON_RET]]
+; GFX: [[IF_ELSE]]:
+; GFX-NEXT: [[SUB]] = fsub contract double [[MUL]], [[Y]]
+; GFX-NEXT: br label %[[COMMON_RET]]
+;
+entry:
+ %y = load double, ptr %ptr_y, align 8
+ %cmp = fcmp oeq double %y, 0.000000e+00
+ %x = load double, ptr %ptr_x, align 8
+ br i1 %cmp, label %if.then, label %if.else
+
+if.then: ; preds = %entry
+ %a_1 = load double, ptr %ptr_a, align 8
+ %mul = fmul contract double %x, %a_1
+ %add = fadd contract double 1.000000e+00, %mul
+ ret double %add
+
+if.else: ; preds = %entry
+ %a_2 = load double, ptr %ptr_a, align 8
+ %mul1 = fmul contract double %x, %a_2
+ %sub = fsub contract double %mul1, %y
+ ret double %sub
+}
+
+define double @is_profitable_f64_modifiers(ptr dereferenceable(8) %ptr_x, ptr dereferenceable(8) %ptr_y, ptr dereferenceable(8) %ptr_a) #0 {
+; GFX-LABEL: define double @is_profitable_f64_modifiers(
+; GFX-SAME: ptr dereferenceable(8) [[PTR_X:%.*]], ptr dereferenceable(8) [[PTR_Y:%.*]], ptr dereferenceable(8) [[PTR_A:%.*]]) #[[ATTR0]] {
+; GFX-NEXT: [[ENTRY:.*:]]
+; GFX-NEXT: [[Y:%.*]] = load double, ptr [[PTR_Y]], align 8
+; GFX-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y]], 0.000000e+00
+; GFX-NEXT: [[X:%.*]] = load double, ptr [[PTR_X]], align 8
+; GFX-NEXT: [[A_1:%.*]] = load double, ptr [[PTR_A]], align 8
+; GFX-NEXT: [[MUL:%.*]] = fmul contract double [[X]], [[A_1]]
+; GFX-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
+; GFX: [[COMMON_RET:.*]]:
+; GFX-NEXT: [[COMMON_RET_OP:%.*]] = phi double [ [[FNEG:%.*]], %[[IF_THEN]] ], [ [[FABS:%.*]], %[[IF_ELSE]] ]
+; GFX-NEXT: ret double [[COMMON_RET_OP]]
+; GFX: [[IF_THEN]]:
+; GFX-NEXT: [[ADD:%.*]] = fadd contract double 1.000000e+00, [[MUL]]
+; GFX-NEXT: [[FNEG]] = fneg double [[ADD]]
+; GFX-NEXT: br label %[[COMMON_RET]]
+; GFX: [[IF_ELSE]]:
+; GFX-NEXT: [[SUB:%.*]] = fsub contract double [[MUL]], [[Y]]
+; GFX-NEXT: [[FABS]] = call double @llvm.fabs.f64(double [[SUB]])
+; GFX-NEXT: br label %[[COMMON_RET]]
+;
+entry:
+ %y = load double, ptr %ptr_y, align 8
+ %cmp = fcmp oeq double %y, 0.000000e+00
+ %x = load double, ptr %ptr_x, align 8
+ br i1 %cmp, label %if.then, label %if.else
+
+if.then: ; preds = %entry
+ %a_1 = load double, ptr %ptr_a, align 8
+ %mul = fmul contract double %x, %a_1
+ %add = fadd contract double 1.000000e+00, %mul
+ %fneg = fneg double %add
----------------
chinmaydd wrote:
@arsenm gentle ping
https://github.com/llvm/llvm-project/pull/121925
More information about the llvm-commits
mailing list