[llvm-branch-commits] [SPARC] Use op-then-neg instructions when we have VIS3 (PR #135717)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Apr 17 17:22:50 PDT 2025
================
@@ -0,0 +1,59 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=sparc64 -mattr=+vis3 < %s | FileCheck %s
+
+define float @fnadds(float %a, float %b) nounwind {
+; CHECK-LABEL: fnadds:
+; CHECK: ! %bb.0: ! %entry
+; CHECK-NEXT: retl
+; CHECK-NEXT: fnadds %f1, %f3, %f0
+entry:
+ %add = fadd float %a, %b
+ %fneg = fneg float %add
+ ret float %fneg
+}
+
+define double @fnaddd(double %a, double %b) nounwind {
+; CHECK-LABEL: fnaddd:
+; CHECK: ! %bb.0: ! %entry
+; CHECK-NEXT: retl
+; CHECK-NEXT: fnaddd %f0, %f2, %f0
+entry:
+ %add = fadd double %a, %b
+ %fneg = fneg double %add
+ ret double %fneg
+}
+
+define float @fnmuls(float %a, float %b) nounwind {
+; CHECK-LABEL: fnmuls:
+; CHECK: ! %bb.0: ! %entry
+; CHECK-NEXT: retl
+; CHECK-NEXT: fnmuls %f1, %f3, %f0
+entry:
+ %mul = fmul float %a, %b
+ %fneg = fneg float %mul
+ ret float %fneg
+}
+
+define double @fnmuld(double %a, double %b) nounwind {
+; CHECK-LABEL: fnmuld:
+; CHECK: ! %bb.0: ! %entry
+; CHECK-NEXT: retl
+; CHECK-NEXT: fnmuld %f0, %f2, %f0
+entry:
+ %mul = fmul double %a, %b
+ %fneg = fneg double %mul
+ ret double %fneg
+}
+
+define double @fnsmuld(float %a, float %b) nounwind {
+; CHECK-LABEL: fnsmuld:
+; CHECK: ! %bb.0: ! %entry
+; CHECK-NEXT: retl
+; CHECK-NEXT: fnsmuld %f1, %f3, %f0
+entry:
+ %conv.i = fpext float %a to double
+ %conv1.i = fpext float %b to double
+ %mul = fmul double %conv.i, %conv1.i
+ %fneg = fneg double %mul
+ ret double %fneg
+}
----------------
koachan wrote:
I added some tests for other patterns and vectors, is that enough?
https://github.com/llvm/llvm-project/pull/135717
More information about the llvm-branch-commits
mailing list