summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2019-10-15 06:10:11 +0000
committerCraig Topper <craig.topper@intel.com>2019-10-15 06:10:11 +0000
commitb2661a2d153f936e6f3f80d3634428f322926535 (patch)
tree9ee0f0808ed626166b592ae258911a2d91dc2a63 /llvm/lib
parent6bfdebb412d87890c9c727a5975aed9cda66bf33 (diff)
downloadbcm5719-llvm-b2661a2d153f936e6f3f80d3634428f322926535.tar.gz
bcm5719-llvm-b2661a2d153f936e6f3f80d3634428f322926535.zip
[X86] Don't check for VBROADCAST_LOAD being a user of the source of a VBROADCAST when trying to share broadcasts.
The only things VBROADCAST_LOAD uses is an address and a chain node. It has no vector inputs. So if its a user of the source of another broadcast that could only mean one of two things. The other broadcast is broadcasting the address of the broadcast_load. Or the source is a load and the use we're seeing is the chain result from that load. Neither of these cases make sense to combine here. This issue was reported post-commit r373871. Test case has not been reduced yet. llvm-svn: 374862
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp4
1 files changed, 1 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index c649a90ddff..0e5a397fa93 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -33450,9 +33450,7 @@ static SDValue combineTargetShuffle(SDValue N, SelectionDAG &DAG,
// Share broadcast with the longest vector and extract low subvector (free).
for (SDNode *User : Src->uses())
- if (User != N.getNode() &&
- (User->getOpcode() == X86ISD::VBROADCAST ||
- User->getOpcode() == X86ISD::VBROADCAST_LOAD) &&
+ if (User != N.getNode() && User->getOpcode() == X86ISD::VBROADCAST &&
User->getValueSizeInBits(0) > VT.getSizeInBits()) {
return extractSubVector(SDValue(User, 0), 0, DAG, DL,
VT.getSizeInBits());
OpenPOWER on IntegriCloud