diff options
author | Sanjay Patel <spatel@rotateright.com> | 2018-10-15 16:54:07 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2018-10-15 16:54:07 +0000 |
commit | 2ef4e14af3ffff12baf279eff50f4e4792c97c34 (patch) | |
tree | a311d10c32103a4eff9a7177d95860fba904494c | |
parent | 9e0d834cc5697eeefc8b74b2fdf17895a20d4718 (diff) |
[DAGCombiner] allow undef elts in vector fmul matching
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344534 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 2 | ||||
-rw-r--r-- | test/CodeGen/AArch64/fadd-combines.ll | 10 |
2 files changed, 5 insertions, 7 deletions
diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index ab871a25d07..11cc699ffe1 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -10898,7 +10898,7 @@ SDValue DAGCombiner::visitFADD(SDNode *N) { auto isFMulNegTwo = [](SDValue FMul) { if (!FMul.hasOneUse() || FMul.getOpcode() != ISD::FMUL) return false; - auto *C = isConstOrConstSplatFP(FMul.getOperand(1)); + auto *C = isConstOrConstSplatFP(FMul.getOperand(1), true); return C && C->isExactlyValue(-2.0); }; diff --git a/test/CodeGen/AArch64/fadd-combines.ll b/test/CodeGen/AArch64/fadd-combines.ll index c2e4430029a..7332101a481 100644 --- a/test/CodeGen/AArch64/fadd-combines.ll +++ b/test/CodeGen/AArch64/fadd-combines.ll @@ -76,9 +76,8 @@ define <4 x float> @fmulnegtwo_vec_commute(<4 x float> %a, <4 x float> %b) { define <4 x float> @fmulnegtwo_vec_undefs(<4 x float> %a, <4 x float> %b) { ; CHECK-LABEL: fmulnegtwo_vec_undefs: ; CHECK: // %bb.0: -; CHECK-NEXT: movi v2.4s, #192, lsl #24 -; CHECK-NEXT: fmul v1.4s, v1.4s, v2.4s -; CHECK-NEXT: fadd v0.4s, v0.4s, v1.4s +; CHECK-NEXT: fadd v1.4s, v1.4s, v1.4s +; CHECK-NEXT: fsub v0.4s, v0.4s, v1.4s ; CHECK-NEXT: ret %mul = fmul <4 x float> %b, <float undef, float -2.0, float undef, float -2.0> %add = fadd <4 x float> %a, %mul @@ -88,9 +87,8 @@ define <4 x float> @fmulnegtwo_vec_undefs(<4 x float> %a, <4 x float> %b) { define <4 x float> @fmulnegtwo_vec_commute_undefs(<4 x float> %a, <4 x float> %b) { ; CHECK-LABEL: fmulnegtwo_vec_commute_undefs: ; CHECK: // %bb.0: -; CHECK-NEXT: movi v2.4s, #192, lsl #24 -; CHECK-NEXT: fmul v1.4s, v1.4s, v2.4s -; CHECK-NEXT: fadd v0.4s, v1.4s, v0.4s +; CHECK-NEXT: fadd v1.4s, v1.4s, v1.4s +; CHECK-NEXT: fsub v0.4s, v0.4s, v1.4s ; CHECK-NEXT: ret %mul = fmul <4 x float> %b, <float -2.0, float undef, float -2.0, float -2.0> %add = fadd <4 x float> %mul, %a |