forked from OSchip/llvm-project
[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:
parent
603256b1d7
commit
eaf6746db0
|
@ -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),
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue