mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-02 09:33:59 +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;
|
return ResNode;
|
||||||
break;
|
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);
|
SDNode *ResNode = SelectCode(N);
|
||||||
|
@ -4173,9 +4173,6 @@ SDOperand
|
|||||||
X86TargetLowering::LowerGlobalAddress(SDOperand Op, SelectionDAG &DAG) {
|
X86TargetLowering::LowerGlobalAddress(SDOperand Op, SelectionDAG &DAG) {
|
||||||
GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();
|
GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();
|
||||||
SDOperand Result = DAG.getTargetGlobalAddress(GV, getPointerTy());
|
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);
|
Result = DAG.getNode(X86ISD::Wrapper, getPointerTy(), Result);
|
||||||
// With PIC, the address is actually $g + Offset.
|
// With PIC, the address is actually $g + Offset.
|
||||||
if (getTargetMachine().getRelocationModel() == Reloc::PIC_ &&
|
if (getTargetMachine().getRelocationModel() == Reloc::PIC_ &&
|
||||||
|
Loading…
x
Reference in New Issue
Block a user