forked from OSchip/llvm-project
Fix a major regression last night that prevented us from producing [mem] op= reg
operations. The body of the if is less indented but unmodified in this patch. llvm-svn: 19638
This commit is contained in:
parent
16f64df93a
commit
9098879472
|
@ -2489,17 +2489,21 @@ void ISel::Select(SDOperand N) {
|
||||||
|
|
||||||
// Check to see if this is a load/op/store combination.
|
// Check to see if this is a load/op/store combination.
|
||||||
if (N.getOperand(1).Val->hasOneUse() &&
|
if (N.getOperand(1).Val->hasOneUse() &&
|
||||||
|
N.getOperand(0).getOpcode() == ISD::LOAD &&
|
||||||
N.getOperand(1).Val->getNumOperands() == 2 &&
|
N.getOperand(1).Val->getNumOperands() == 2 &&
|
||||||
!MVT::isFloatingPoint(N.getOperand(0).getValue(0).getValueType()) &&
|
!MVT::isFloatingPoint(N.getOperand(0).getValue(0).getValueType())) {
|
||||||
isFoldableLoad(N.getOperand(0).getValue(0),
|
|
||||||
N.getOperand(0).getValue(1))) {
|
|
||||||
SDOperand TheLoad = N.getOperand(0).getValue(0);
|
SDOperand TheLoad = N.getOperand(0).getValue(0);
|
||||||
// Check to see if we are loading the same pointer that we're storing to.
|
|
||||||
if (TheLoad.getOperand(1) == N.getOperand(2)) {
|
// See if the stored value is a simple binary operator that uses the load
|
||||||
// See if the stored value is a simple binary operator that uses the
|
// as one of its operands.
|
||||||
// load as one of its operands.
|
|
||||||
SDOperand Op = N.getOperand(1);
|
SDOperand Op = N.getOperand(1);
|
||||||
if ((Op.getOperand(0) == TheLoad || Op.getOperand(1) == TheLoad)) {
|
|
||||||
|
// Check to see if we are loading the same pointer that we're storing to.
|
||||||
|
if (TheLoad.getOperand(1) == N.getOperand(2) &&
|
||||||
|
((Op.getOperand(0) == TheLoad &&
|
||||||
|
isFoldableLoad(TheLoad, Op.getOperand(1))) ||
|
||||||
|
(Op.getOperand(1) == TheLoad &&
|
||||||
|
isFoldableLoad(TheLoad, Op.getOperand(0))))) {
|
||||||
// Finally, check to see if this is one of the ops we can handle!
|
// Finally, check to see if this is one of the ops we can handle!
|
||||||
static const unsigned ADDTAB[] = {
|
static const unsigned ADDTAB[] = {
|
||||||
X86::ADD8mi, X86::ADD16mi, X86::ADD32mi,
|
X86::ADD8mi, X86::ADD16mi, X86::ADD32mi,
|
||||||
|
@ -2608,8 +2612,6 @@ void ISel::Select(SDOperand N) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
switch (N.getOperand(1).getValueType()) {
|
switch (N.getOperand(1).getValueType()) {
|
||||||
default: assert(0 && "Cannot store this type!");
|
default: assert(0 && "Cannot store this type!");
|
||||||
|
|
Loading…
Reference in New Issue