diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2007-09-25 21:52:30 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2007-09-25 21:52:30 +0000 |
commit | 2fe1259d0ab75fdc49bc368cfa62f3260dc3a2df (patch) | |
tree | 28ae246fd1b5578f595481b99c0594fcd8ce9aad /lib | |
parent | ee143ade09db933ea027579f57fe3cfda460e603 (diff) |
Partly revert invalid r41774
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42322 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/X86/X86ISelDAGToDAG.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp index 117d2734c5..94803cea27 100644 --- a/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -130,6 +130,8 @@ namespace { /// SelectionDAGISel when it has created a SelectionDAG for us to codegen. virtual void InstructionSelectBasicBlock(SelectionDAG &DAG); + virtual void EmitFunctionEntryCode(Function &Fn, MachineFunction &MF); + virtual bool CanBeFoldedBy(SDNode *N, SDNode *U, SDNode *Root) const; // Include the pieces autogenerated from the target description. @@ -162,6 +164,8 @@ namespace { std::vector<SDOperand> &OutOps, SelectionDAG &DAG); + void EmitSpecialCodeForMain(MachineBasicBlock *BB, MachineFrameInfo *MFI); + inline void getAddressOperands(X86ISelAddressMode &AM, SDOperand &Base, SDOperand &Scale, SDOperand &Index, SDOperand &Disp) { @@ -540,6 +544,22 @@ void X86DAGToDAGISel::InstructionSelectBasicBlock(SelectionDAG &DAG) { } while (&*(MBBI++) != BB); } +/// EmitSpecialCodeForMain - Emit any code that needs to be executed only in +/// the main function. +void X86DAGToDAGISel::EmitSpecialCodeForMain(MachineBasicBlock *BB, + MachineFrameInfo *MFI) { + const TargetInstrInfo *TII = TM.getInstrInfo(); + if (Subtarget->isTargetCygMing()) + BuildMI(BB, TII->get(X86::CALLpcrel32)).addExternalSymbol("__main"); +} + +void X86DAGToDAGISel::EmitFunctionEntryCode(Function &Fn, MachineFunction &MF) { + // If this is main, emit special code for main. + MachineBasicBlock *BB = MF.begin(); + if (Fn.hasExternalLinkage() && Fn.getName() == "main") + EmitSpecialCodeForMain(BB, MF.getFrameInfo()); +} + /// MatchAddress - Add the specified node to the specified addressing mode, /// returning true if it cannot be done. This just pattern matches for the /// addressing mode |