[llvm-commits] CVS: llvm/lib/Target/X86/X86MachineFunctionInfo.h X86ISelLowering.cpp X86RegisterInfo.cpp

Evan Cheng evan.cheng at apple.com
Tue Jun 6 16:30:37 PDT 2006



Changes in directory llvm/lib/Target/X86:

X86MachineFunctionInfo.h added (r1.1)
X86ISelLowering.cpp updated: 1.226 -> 1.227
X86RegisterInfo.cpp updated: 1.156 -> 1.157
---
Log message:

Added X86FunctionInfo subclass of MachineFunction to record whether the
function that is being lowered is forced to use FP. Currently this is only
true for main() / Cygwin.


---
Diffs of the changes:  (+41 -7)

 X86ISelLowering.cpp      |    8 ++++++++
 X86MachineFunctionInfo.h |   30 ++++++++++++++++++++++++++++++
 X86RegisterInfo.cpp      |   10 +++-------
 3 files changed, 41 insertions(+), 7 deletions(-)


Index: llvm/lib/Target/X86/X86MachineFunctionInfo.h
diff -c /dev/null llvm/lib/Target/X86/X86MachineFunctionInfo.h:1.1
*** /dev/null	Tue Jun  6 18:30:35 2006
--- llvm/lib/Target/X86/X86MachineFunctionInfo.h	Tue Jun  6 18:30:24 2006
***************
*** 0 ****
--- 1,30 ----
+ //====- X86MachineFuctionInfo.h - X86 machine function info -----*- C++ -*-===//
+ // 
+ //                     The LLVM Compiler Infrastructure
+ //
+ // This file was developed by the Evan Cheng and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ // 
+ //===----------------------------------------------------------------------===//
+ //
+ // This file declares X86-specific per-machine-function information.
+ //
+ //===----------------------------------------------------------------------===//
+ 
+ #ifndef X86MACHINEFUNCTIONINFO_H
+ #define X86MACHINEFUNCTIONINFO_H
+ 
+ #include "llvm/CodeGen/MachineFunction.h"
+ 
+ namespace llvm {
+ 
+ class X86FunctionInfo : public MachineFunctionInfo {
+   bool ForceFramePointer;  // Function requires use of frame pointer.
+ public:
+   X86FunctionInfo(MachineFunction& MF) : ForceFramePointer(false) {}
+   bool getForceFramePointer() const { return ForceFramePointer;} 
+   void setForceFramePointer(bool forceFP) { ForceFramePointer = forceFP; }
+ };
+ } // End llvm namespace
+ 
+ #endif


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.226 llvm/lib/Target/X86/X86ISelLowering.cpp:1.227
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.226	Thu Jun  1 00:53:27 2006
+++ llvm/lib/Target/X86/X86ISelLowering.cpp	Tue Jun  6 18:30:24 2006
@@ -15,6 +15,7 @@
 #include "X86.h"
 #include "X86InstrBuilder.h"
 #include "X86ISelLowering.h"
+#include "X86MachineFunctionInfo.h"
 #include "X86TargetMachine.h"
 #include "llvm/CallingConv.h"
 #include "llvm/Constants.h"
@@ -3409,6 +3410,13 @@
 
 SDOperand
 X86TargetLowering::LowerFORMAL_ARGUMENTS(SDOperand Op, SelectionDAG &DAG) {
+  MachineFunction &MF = DAG.getMachineFunction();
+  const Function* Fn = MF.getFunction();
+  if (Fn->hasExternalLinkage() &&
+      Fn->getName() == "main" &&
+      Subtarget->TargetType == X86Subtarget::isCygwin)
+    MF.getInfo<X86FunctionInfo>()->setForceFramePointer(true);
+
   unsigned CC = cast<ConstantSDNode>(Op.getOperand(1))->getValue();
   if (CC == CallingConv::Fast && EnableFastCC)
     return LowerFastCCArguments(Op, DAG);


Index: llvm/lib/Target/X86/X86RegisterInfo.cpp
diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.156 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.157
--- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.156	Fri Jun  2 17:38:37 2006
+++ llvm/lib/Target/X86/X86RegisterInfo.cpp	Tue Jun  6 18:30:24 2006
@@ -15,8 +15,9 @@
 #include "X86.h"
 #include "X86RegisterInfo.h"
 #include "X86Subtarget.h"
-#include "X86TargetMachine.h"
 #include "X86InstrBuilder.h"
+#include "X86MachineFunctionInfo.h"
+#include "X86TargetMachine.h"
 #include "llvm/Constants.h"
 #include "llvm/Type.h"
 #include "llvm/Function.h"
@@ -638,14 +639,9 @@
 // if frame pointer elimination is disabled.
 //
 static bool hasFP(MachineFunction &MF) {
-  const Function* Fn = MF.getFunction();
-  const X86Subtarget* Subtarget =  &MF.getTarget().getSubtarget<X86Subtarget>();
-         
   return (NoFramePointerElim || 
           MF.getFrameInfo()->hasVarSizedObjects() ||
-          (Fn->hasExternalLinkage() &&
-           Fn->getName() == "main" &&
-           Subtarget->TargetType == X86Subtarget::isCygwin));
+          MF.getInfo<X86FunctionInfo>()->getForceFramePointer());
 }
 
 void X86RegisterInfo::






More information about the llvm-commits mailing list