[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

llvm-svn: 372985
This commit is contained in:
Jinsong Ji 2019-09-26 15:11:33 +00:00
parent 603256b1d7
commit eaf6746db0
2 changed files with 7 additions and 2 deletions

View File

@ -1512,6 +1512,12 @@ let AddedComplexity = 400 in { // Prefer VSX patterns over non-VSX patterns.
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),

View File

@ -5,9 +5,8 @@ define dso_local float @foo(float %0, float %1) local_unnamed_addr {
; 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