mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-04-01 07:11:45 +00:00
Re-apply 91623 now that I actually know what I was trying to do.
llvm-svn: 91655
This commit is contained in:
parent
0f8f7f179d
commit
a647318eb3
@ -50,9 +50,6 @@
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
using namespace llvm;
|
||||
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
static cl::opt<bool> AvoidDupAddrCompute("x86-avoid-dup-address", cl::Hidden);
|
||||
|
||||
STATISTIC(NumLoadMoved, "Number of loads moved below TokenFactor");
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -1275,28 +1272,7 @@ bool X86DAGToDAGISel::SelectAddr(SDValue Op, SDValue N, SDValue &Base,
|
||||
SDValue &Scale, SDValue &Index,
|
||||
SDValue &Disp, SDValue &Segment) {
|
||||
X86ISelAddressMode AM;
|
||||
bool Done = false;
|
||||
if (AvoidDupAddrCompute && !N.hasOneUse()) {
|
||||
unsigned Opcode = N.getOpcode();
|
||||
if (Opcode != ISD::Constant && Opcode != ISD::FrameIndex &&
|
||||
Opcode != X86ISD::Wrapper && Opcode != X86ISD::WrapperRIP) {
|
||||
// If we are able to fold N into addressing mode, then we'll allow it even
|
||||
// if N has multiple uses. In general, addressing computation is used as
|
||||
// addresses by all of its uses. But watch out for CopyToReg uses, that
|
||||
// means the address computation is liveout. It will be computed by a LEA
|
||||
// so we want to avoid computing the address twice.
|
||||
for (SDNode::use_iterator UI = N.getNode()->use_begin(),
|
||||
UE = N.getNode()->use_end(); UI != UE; ++UI) {
|
||||
if (UI->getOpcode() == ISD::CopyToReg) {
|
||||
MatchAddressBase(N, AM);
|
||||
Done = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!Done && MatchAddress(N, AM))
|
||||
if (MatchAddress(N, AM))
|
||||
return false;
|
||||
|
||||
EVT VT = N.getValueType();
|
||||
|
Loading…
x
Reference in New Issue
Block a user