diff options
| author | Roman Lebedev <lebedev.ri@gmail.com> | 2018-07-09 19:06:42 +0000 |
|---|---|---|
| committer | Roman Lebedev <lebedev.ri@gmail.com> | 2018-07-09 19:06:42 +0000 |
| commit | 5ccae1750b26871670015755f2d2f1acd4860cb7 (patch) | |
| tree | 269c2d892dcba4907b3862e286146bf4d96ed295 /llvm/lib/Target | |
| parent | 22a0c8dbc8bc008928b319d44ad296738940fe72 (diff) | |
| download | bcm5719-llvm-5ccae1750b26871670015755f2d2f1acd4860cb7.tar.gz bcm5719-llvm-5ccae1750b26871670015755f2d2f1acd4860cb7.zip | |
[X86][TLI] DAGCombine: Unfold variable bit-clearing mask to two shifts.
Summary:
This adds a reverse transform for the instcombine canonicalizations
that were added in D47980, D47981.
As discussed later, that was worse at least for the code size,
and potentially for the performance, too.
https://rise4fun.com/Alive/Zmpl
Reviewers: craig.topper, RKSimon, spatel
Reviewed By: spatel
Subscribers: reames, llvm-commits
Differential Revision: https://reviews.llvm.org/D48768
llvm-svn: 336585
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 14 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.h | 2 |
2 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 321fb950310..b0efc4d1ed5 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -4786,6 +4786,20 @@ bool X86TargetLowering::hasAndNot(SDValue Y) const { return Subtarget.hasSSE2(); } +bool X86TargetLowering::preferShiftsToClearExtremeBits(SDValue Y) const { + EVT VT = Y.getValueType(); + + // For vectors, we don't have a preference, but we probably want a mask. + if (VT.isVector()) + return false; + + // 64-bit shifts on 32-bit targets produce really bad bloated code. + if (VT == MVT::i64 && !Subtarget.is64Bit()) + return false; + + return true; +} + MVT X86TargetLowering::hasFastEqualityCompare(unsigned NumBits) const { MVT VT = MVT::getIntegerVT(NumBits); if (isTypeLegal(VT)) diff --git a/llvm/lib/Target/X86/X86ISelLowering.h b/llvm/lib/Target/X86/X86ISelLowering.h index d7e33442181..4fadf0543c6 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.h +++ b/llvm/lib/Target/X86/X86ISelLowering.h @@ -828,6 +828,8 @@ namespace llvm { bool hasAndNot(SDValue Y) const override; + bool preferShiftsToClearExtremeBits(SDValue Y) const override; + bool convertSetCCLogicToBitwiseLogic(EVT VT) const override { return VT.isScalarInteger(); } |

