summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2017-07-31 05:55:54 +0000
committerCraig Topper <craig.topper@intel.com>2017-07-31 05:55:54 +0000
commit97e9fa795450235a2cc312e7c67e2589acc01ca8 (patch)
treef176534f54930638c23e57214dd6c4c880b91545 /llvm/lib/Target
parent5ca19556270f7d44cc2731be5d6c4fb6cc245f98 (diff)
downloadbcm5719-llvm-97e9fa795450235a2cc312e7c67e2589acc01ca8.tar.gz
bcm5719-llvm-97e9fa795450235a2cc312e7c67e2589acc01ca8.zip
[X86] Add pattern to use bzhi for 64-bit 'and' with a mask when there is a load involved.
We already had a pattern without load, but with a load we were falling back to a regular 'and' due to pattern complexity priority. llvm-svn: 309535
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/X86/X86InstrInfo.td4
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86InstrInfo.td b/llvm/lib/Target/X86/X86InstrInfo.td
index e3e8d2d613c..75638f24bfe 100644
--- a/llvm/lib/Target/X86/X86InstrInfo.td
+++ b/llvm/lib/Target/X86/X86InstrInfo.td
@@ -2361,6 +2361,10 @@ let Predicates = [HasBMI2] in {
(BZHI64rr GR64:$src,
(INSERT_SUBREG (i64 (IMPLICIT_DEF)),
(MOV8ri (CountTrailingOnes imm:$mask)), sub_8bit))>;
+ def : Pat<(and (loadi64 addr:$src), BZHIMask:$mask),
+ (BZHI64rm addr:$src,
+ (INSERT_SUBREG (i64 (IMPLICIT_DEF)),
+ (MOV8ri (CountTrailingOnes imm:$mask)), sub_8bit))>;
def : Pat<(and GR32:$src, (add (shl 1, GR8:$lz), -1)),
(BZHI32rr GR32:$src,
OpenPOWER on IntegriCloud