mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 21:29:20 +00:00
Fix CodeGen/Generic/2006-03-01-dagcombineinfloop.ll, an infinite loop
in the dag combiner on 176.gcc on x86. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26459 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
358d5afcbd
commit
1ec05d1bb4
@ -1018,14 +1018,19 @@ SDOperand DAGCombiner::visitAND(SDNode *N) {
|
||||
return N1;
|
||||
// fold (and (any_ext V), c) -> (zero_ext V) if 'and' only clears top bits.
|
||||
if (N1C && N0.getOpcode() == ISD::ANY_EXTEND) {
|
||||
unsigned InBits = MVT::getSizeInBits(N0.getOperand(0).getValueType());
|
||||
unsigned InMask = MVT::getIntVTBitMask(N0.getOperand(0).getValueType());
|
||||
if (TLI.MaskedValueIsZero(N0.getOperand(0),
|
||||
~N1C->getValue() & ((1ULL << InBits)-1))) {
|
||||
~N1C->getValue() & InMask)) {
|
||||
SDOperand Zext = DAG.getNode(ISD::ZERO_EXTEND, N0.getValueType(),
|
||||
N0.getOperand(0));
|
||||
|
||||
// Replace uses of the AND with uses of the Zero extend node.
|
||||
CombineTo(N, Zext);
|
||||
|
||||
// We actually want to replace all uses of the any_extend with the
|
||||
// zero_extend, to avoid duplicating things. This will later cause this
|
||||
// AND to be folded.
|
||||
CombineTo(N0.Val, DAG.getNode(ISD::ZERO_EXTEND, N0.getValueType(),
|
||||
N0.getOperand(0)));
|
||||
CombineTo(N0.Val, Zext);
|
||||
return SDOperand();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user