mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
Rather than avoiding to wrap ISD::DECLARE GV operand in X86ISD::Wrapper, simply handle it at dagisel time with x86 specific isel code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52377 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fc196f9ee9
commit
851bc04533
@ -1578,6 +1578,28 @@ SDNode *X86DAGToDAGISel::Select(SDOperand N) {
|
||||
return ResNode;
|
||||
break;
|
||||
}
|
||||
|
||||
case ISD::DECLARE: {
|
||||
// Handle DECLARE nodes here because the second operand may have been
|
||||
// wrapped in X86ISD::Wrapper.
|
||||
SDOperand Chain = Node->getOperand(0);
|
||||
SDOperand N1 = Node->getOperand(1);
|
||||
SDOperand N2 = Node->getOperand(2);
|
||||
if (isa<FrameIndexSDNode>(N1) &&
|
||||
N2.getOpcode() == X86ISD::Wrapper &&
|
||||
isa<GlobalAddressSDNode>(N2.getOperand(0))) {
|
||||
int FI = cast<FrameIndexSDNode>(N1)->getIndex();
|
||||
GlobalValue *GV =
|
||||
cast<GlobalAddressSDNode>(N2.getOperand(0))->getGlobal();
|
||||
SDOperand Tmp1 = CurDAG->getTargetFrameIndex(FI, TLI.getPointerTy());
|
||||
SDOperand Tmp2 = CurDAG->getTargetGlobalAddress(GV, TLI.getPointerTy());
|
||||
AddToISelQueue(Chain);
|
||||
SDOperand Ops[] = { Tmp1, Tmp2, Chain };
|
||||
return CurDAG->getTargetNode(TargetInstrInfo::DECLARE,
|
||||
MVT::Other, Ops, 3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SDNode *ResNode = SelectCode(N);
|
||||
|
@ -4173,9 +4173,6 @@ SDOperand
|
||||
X86TargetLowering::LowerGlobalAddress(SDOperand Op, SelectionDAG &DAG) {
|
||||
GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();
|
||||
SDOperand Result = DAG.getTargetGlobalAddress(GV, getPointerTy());
|
||||
// If it's a debug information descriptor, don't mess with it.
|
||||
if (DAG.isVerifiedDebugInfoDesc(Op))
|
||||
return Result;
|
||||
Result = DAG.getNode(X86ISD::Wrapper, getPointerTy(), Result);
|
||||
// With PIC, the address is actually $g + Offset.
|
||||
if (getTargetMachine().getRelocationModel() == Reloc::PIC_ &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user