summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-10-11 18:06:07 +0000
committerCraig Topper <craig.topper@intel.com>2018-10-11 18:06:07 +0000
commitfb2ac8969e4bf1fb545f27128faa1ad852e18760 (patch)
tree3bf2231c2b6465db8d772f2087c26d298add0532 /clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp
parente502f8b3158e7534f5c78a12d3ded3f15ebec216 (diff)
downloadbcm5719-llvm-fb2ac8969e4bf1fb545f27128faa1ad852e18760.tar.gz
bcm5719-llvm-fb2ac8969e4bf1fb545f27128faa1ad852e18760.zip
[X86] Restore X86ISelDAGToDAG::matchBEXTRFromAnd. Teach address matching to create a BEXTR pattern from a (shl (and X, mask >> C1) if C1 can be folded into addressing mode.
This is an alternative to D53080 since I think using a BEXTR for a shifted mask is definitely an improvement when the shl can be absorbed into addressing mode. The other cases I'm less sure about. We already have several tricks for handling an and of a shift in address matching. This adds a new case for BEXTR. I've moved the BEXTR matching code back to X86ISelDAGToDAG to allow it to match. I suppose alternatively we could directly emit a X86ISD::BEXTR node that isel could pattern match. But I'm trying to view BEXTR matching as an isel concern so DAG combine can see 'and' and 'shift' operations that are well understood. We did lose a couple cases from tbm_patterns.ll, but I think there are ways to recover that. I've also put back the manual load folding code in matchBEXTRFromAnd that I removed a few months ago in r324939. This gives us some more freedom to make decisions based on the ability to fold a load. I haven't done anything with that yet. Differential Revision: https://reviews.llvm.org/D53126 llvm-svn: 344270
Diffstat (limited to 'clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud