[llvm] r372985 - [PowerPC] Add missing pattern for VSX Scalar Negative Multiply-Subtract Single Precision

Jinsong Ji via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 26 08:11:33 PDT 2019


Author: jsji
Date: Thu Sep 26 08:11:33 2019
New Revision: 372985

URL: http://llvm.org/viewvc/llvm-project?rev=372985&view=rev
Log:
[PowerPC] Add missing pattern for VSX Scalar Negative Multiply-Subtract Single Precision

Summary:
This was found during review of https://reviews.llvm.org/D66050.
In the simple test of fdiv, we miss to fold
```
        fneg 2, 2
        xsmaddasp 3, 2, 0
```
to
```
        xsnmsubasp 3, 2, 0
```
We have the patterns for Double Precision and vectors, just missing
Single Precision, the patch add that.

Reviewers: #powerpc, hfinkel, nemanjai, steven.zhang

Reviewed By: #powerpc, steven.zhang

Subscribers: wuzish, hiraditya, kbarton, MaskRay, shchenz, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D67595

Modified:
    llvm/trunk/lib/Target/PowerPC/PPCInstrVSX.td
    llvm/trunk/test/CodeGen/PowerPC/fdiv.ll

Modified: llvm/trunk/lib/Target/PowerPC/PPCInstrVSX.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstrVSX.td?rev=372985&r1=372984&r2=372985&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCInstrVSX.td (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCInstrVSX.td Thu Sep 26 08:11:33 2019
@@ -1512,6 +1512,12 @@ let AddedComplexity = 400 in { // Prefer
                           AltVSXFMARel;
   }
 
+  // Additional xsnmsubasp patterns: -a*b + c == -(a*b - c)
+  def : Pat<(fma (fneg f32:$A), f32:$B, f32:$C),
+            (XSNMSUBASP $C, $A, $B)>;
+  def : Pat<(fma f32:$A, (fneg f32:$C), f32:$B),
+            (XSNMSUBASP $C, $A, $B)>;
+
   // Single Precision Conversions (FP <-> INT)
   def XSCVSXDSP : XX2Form<60, 312,
                       (outs vssrc:$XT), (ins vsfrc:$XB),

Modified: llvm/trunk/test/CodeGen/PowerPC/fdiv.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/fdiv.ll?rev=372985&r1=372984&r2=372985&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/fdiv.ll (original)
+++ llvm/trunk/test/CodeGen/PowerPC/fdiv.ll Thu Sep 26 08:11:33 2019
@@ -5,9 +5,8 @@ define dso_local float @foo(float %0, fl
 ; CHECK-LABEL: foo:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    xsresp 3, 2
-; CHECK-NEXT:    fneg 2, 2
 ; CHECK-NEXT:    xsmulsp 0, 1, 3
-; CHECK-NEXT:    xsmaddasp 1, 2, 0
+; CHECK-NEXT:    xsnmsubasp 1, 2, 0
 ; CHECK-NEXT:    xsmaddasp 0, 3, 1
 ; CHECK-NEXT:    fmr 1, 0
 ; CHECK-NEXT:    blr




More information about the llvm-commits mailing list