[llvm-commits] [llvm] r131710 - /llvm/trunk/lib/Target/Mips/MipsMachineFunction.h

Akira Hatanaka ahatanak at gmail.com
Thu May 19 18:17:58 PDT 2011


Author: ahatanak
Date: Thu May 19 20:17:58 2011
New Revision: 131710

URL: http://llvm.org/viewvc/llvm-project?rev=131710&view=rev
Log:
Define variables and functions in MipsFunctionInfo.

This is the first of a series of patches that attempt to simplify handling of 
stack frame objects. 

Modified:
    llvm/trunk/lib/Target/Mips/MipsMachineFunction.h

Modified: llvm/trunk/lib/Target/Mips/MipsMachineFunction.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsMachineFunction.h?rev=131710&r1=131709&r2=131710&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MipsMachineFunction.h (original)
+++ llvm/trunk/lib/Target/Mips/MipsMachineFunction.h Thu May 19 20:17:58 2011
@@ -14,6 +14,7 @@
 #ifndef MIPS_MACHINE_FUNCTION_INFO_H
 #define MIPS_MACHINE_FUNCTION_INFO_H
 
+#include <utility>
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/VectorExtras.h"
 #include "llvm/CodeGen/MachineFunction.h"
@@ -83,12 +84,21 @@
   /// VarArgsFrameIndex - FrameIndex for start of varargs area.
   int VarArgsFrameIndex;
 
+  // Range of frame object indices.
+  // InArgFIRange: Range of indices of all frame objects created during call to
+  //               LowerFormalArguments.
+  // OutArgFIRange: Range of indices of all frame objects created during call to
+  //                LowerCall except for the frame object for restoring $gp. 
+  std::pair<int, int> InArgFIRange, OutArgFIRange;
+  int GPFI; // Index of the frame object for restoring $gp 
+  bool HasCall; // True if function has a function call.
 public:
   MipsFunctionInfo(MachineFunction& MF)
   : FPStackOffset(0), RAStackOffset(0), CPUTopSavedRegOff(0),
     FPUTopSavedRegOff(0), GPHolder(-1,-1), HasLoadArgs(false),
     HasStoreVarArgs(false), SRetReturnReg(0), GlobalBaseReg(0),
-    VarArgsFrameIndex(0)
+    VarArgsFrameIndex(0), InArgFIRange(std::make_pair(-1, 0)),
+    OutArgFIRange(std::make_pair(-1, 0)), GPFI(0), HasCall(false)
   {}
 
   int getFPStackOffset() const { return FPStackOffset; }
@@ -103,11 +113,27 @@
   int getFPUTopSavedRegOff() const { return FPUTopSavedRegOff; }
   void setFPUTopSavedRegOff(int Off) { FPUTopSavedRegOff = Off; }
 
+  bool isInArgFI(int FI) const {
+    return FI <= InArgFIRange.first && FI >= InArgFIRange.second;
+  }
+  void setLastInArgFI(int FI) { InArgFIRange.second = FI; }
+
+  bool isOutArgFI(int FI) const { 
+    return FI <= OutArgFIRange.first && FI >= OutArgFIRange.second;
+  }
+  void extendOutArgFIRange(int FirstFI, int LastFI) {
+    if (!OutArgFIRange.second)
+      // this must be the first time this function was called.
+      OutArgFIRange.first = FirstFI;
+    OutArgFIRange.second = LastFI;
+  }
+
   int getGPStackOffset() const { return GPHolder.SPOffset; }
   int getGPFI() const { return GPHolder.FI; }
   void setGPStackOffset(int Off) { GPHolder.SPOffset = Off; }
   void setGPFI(int FI) { GPHolder.FI = FI; }
   bool needGPSaveRestore() const { return GPHolder.SPOffset != -1; }
+  bool isGPFI(int FI) const { return GPFI && GPFI == FI; }
 
   bool hasLoadArgs() const { return HasLoadArgs; }
   bool hasStoreVarArgs() const { return HasStoreVarArgs; }
@@ -140,6 +166,9 @@
 
   int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
   void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; }
+
+  bool hasCall() const { return HasCall; };
+  void setHasCall() { HasCall = true; }
 };
 
 } // end of namespace llvm





More information about the llvm-commits mailing list