mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-14 06:37:33 +00:00
Don't crash on X^X if X is a vector. Instead, produce a vector of zeros.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27229 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f35b29765b
commit
4fbdd59f4f
@ -1396,8 +1396,16 @@ SDOperand DAGCombiner::visitXOR(SDNode *N) {
|
||||
DAG.getConstant(N1C->getValue()^N01C->getValue(), VT));
|
||||
}
|
||||
// fold (xor x, x) -> 0
|
||||
if (N0 == N1)
|
||||
return DAG.getConstant(0, VT);
|
||||
if (N0 == N1) {
|
||||
if (!MVT::isVector(VT)) {
|
||||
return DAG.getConstant(0, VT);
|
||||
} else if (!AfterLegalize || TLI.isOperationLegal(ISD::BUILD_VECTOR, VT)) {
|
||||
// Produce a vector of zeros.
|
||||
SDOperand El = DAG.getConstant(0, MVT::getVectorBaseType(VT));
|
||||
std::vector<SDOperand> Ops(MVT::getVectorNumElements(VT), El);
|
||||
return DAG.getNode(ISD::BUILD_VECTOR, VT, Ops);
|
||||
}
|
||||
}
|
||||
// fold (xor (zext x), (zext y)) -> (zext (xor x, y))
|
||||
if (N0.getOpcode() == ISD::ZERO_EXTEND &&
|
||||
N1.getOpcode() == ISD::ZERO_EXTEND &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user