diff options
| author | Hans Wennborg <hans@hanshq.net> | 2017-12-04 20:48:50 +0000 |
|---|---|---|
| committer | Hans Wennborg <hans@hanshq.net> | 2017-12-04 20:48:50 +0000 |
| commit | e117129ef7a4bec25e8105bb498fcc9049402687 (patch) | |
| tree | e128644f574a28062b68671dd1e99cae23edba32 | |
| parent | 05b618e31f3e9b23675364a87001c496eab1cea4 (diff) | |
| download | bcm5719-llvm-e117129ef7a4bec25e8105bb498fcc9049402687.tar.gz bcm5719-llvm-e117129ef7a4bec25e8105bb498fcc9049402687.zip | |
DAG: Follow-up to r319692 check the truncates inputs have the same type
MatchRotate assumes the types of the types of LHS and RHS are equal,
which is always the case then they come from an OR node, but here
we're getting them from two different TRUNC nodes, so we have to check
the types.
llvm-svn: 319695
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 30195ff4e91..ffce8545a14 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -4653,7 +4653,8 @@ SDNode *DAGCombiner::MatchRotate(SDValue LHS, SDValue RHS, const SDLoc &DL) { if (!HasROTL && !HasROTR) return nullptr; // Check for truncated rotate. - if (LHS.getOpcode() == ISD::TRUNCATE && RHS.getOpcode() == ISD::TRUNCATE) { + if (LHS.getOpcode() == ISD::TRUNCATE && RHS.getOpcode() == ISD::TRUNCATE && + LHS.getOperand(0).getValueType() == RHS.getOperand(0).getValueType()) { assert(LHS.getValueType() == RHS.getValueType()); if (SDNode *Rot = MatchRotate(LHS.getOperand(0), RHS.getOperand(0), DL)) { return DAG.getNode(ISD::TRUNCATE, SDLoc(LHS), LHS.getValueType(), |

