[llvm] [NFC][AMDGPU] Add tests for an fmul split from its fadd/fsub user (PR #213303)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 31 10:02:05 PDT 2026
================
@@ -0,0 +1,59 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -S -passes='require<profile-summary>,function(codegenprepare)' -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -fp-contract=fast < %s | FileCheck %s
+
+; -fp-contract=fast fuses without the per-instruction contract flags.
+
+define float @sink_fmul_fadd_f32(i1 %cond, float %a, float %b, float %c) #0 {
+; CHECK-LABEL: define float @sink_fmul_fadd_f32(
+; CHECK-SAME: i1 [[COND:%.*]], float [[A:%.*]], float [[B:%.*]], float [[C:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT: [[ENTRY:.*]]:
+; CHECK-NEXT: [[TMP0:%.*]] = fmul float [[A]], [[B]]
+; CHECK-NEXT: br i1 [[COND]], label %[[IF:.*]], label %[[EXIT:.*]]
+; CHECK: [[IF]]:
+; CHECK-NEXT: [[ADD:%.*]] = fadd float [[TMP0]], [[C]]
+; CHECK-NEXT: br label %[[EXIT]]
+; CHECK: [[EXIT]]:
+; CHECK-NEXT: [[R:%.*]] = phi float [ [[ADD]], %[[IF]] ], [ 0.000000e+00, %[[ENTRY]] ]
+; CHECK-NEXT: ret float [[R]]
+;
+entry:
+ %mul = fmul float %a, %b
+ br i1 %cond, label %if, label %exit
+
+if:
+ %add = fadd float %mul, %c
+ br label %exit
+
+exit:
+ %r = phi float [ %add, %if ], [ 0.000000e+00, %entry ]
+ ret float %r
+}
+
+; A multi-use fmul is still left alone.
+define float @no_sink_fmul_multi_use(i1 %cond, float %a, float %b, float %c) #0 {
+; CHECK-LABEL: define float @no_sink_fmul_multi_use(
+; CHECK-SAME: i1 [[COND:%.*]], float [[A:%.*]], float [[B:%.*]], float [[C:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT: [[ENTRY:.*]]:
+; CHECK-NEXT: [[MUL:%.*]] = fmul float [[A]], [[B]]
+; CHECK-NEXT: br i1 [[COND]], label %[[IF:.*]], label %[[EXIT:.*]]
+; CHECK: [[IF]]:
+; CHECK-NEXT: [[ADD:%.*]] = fadd float [[MUL]], [[C]]
+; CHECK-NEXT: br label %[[EXIT]]
+; CHECK: [[EXIT]]:
+; CHECK-NEXT: [[R:%.*]] = phi float [ [[ADD]], %[[IF]] ], [ [[MUL]], %[[ENTRY]] ]
+; CHECK-NEXT: ret float [[R]]
+;
+entry:
+ %mul = fmul float %a, %b
+ br i1 %cond, label %if, label %exit
+
+if:
+ %add = fadd float %mul, %c
+ br label %exit
+
+exit:
+ %r = phi float [ %add, %if ], [ %mul, %entry ]
+ ret float %r
+}
+
+attributes #0 = { denormal_fpenv(ieee) }
----------------
arsenm wrote:
This is the default
https://github.com/llvm/llvm-project/pull/213303
More information about the llvm-commits
mailing list