diff options
| author | Jinsong Ji <jji@us.ibm.com> | 2019-09-26 15:11:33 +0000 |
|---|---|---|
| committer | Jinsong Ji <jji@us.ibm.com> | 2019-09-26 15:11:33 +0000 |
| commit | eaf6746db0797fbbe40bf9f8ffb07a54295bbb4f (patch) | |
| tree | 8ebf421f410014705b45b937ae59d5e67d2fa9a0 /llvm/lib | |
| parent | 603256b1d7488e6a9228d96118be2872abe5cfca (diff) | |
| download | bcm5719-llvm-eaf6746db0797fbbe40bf9f8ffb07a54295bbb4f.tar.gz bcm5719-llvm-eaf6746db0797fbbe40bf9f8ffb07a54295bbb4f.zip | |
[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
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCInstrVSX.td | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCInstrVSX.td b/llvm/lib/Target/PowerPC/PPCInstrVSX.td index 910d98dc108..bf15070203a 100644 --- a/llvm/lib/Target/PowerPC/PPCInstrVSX.td +++ b/llvm/lib/Target/PowerPC/PPCInstrVSX.td @@ -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), |

