mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	Move include/Config and include/Support into include/llvm/Config, include/llvm/ADT and include/llvm/Support. From here on out, all LLVM public header files must be under include/llvm/. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16137 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			126 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- SparcV9FunctionInfo.h -----------------------------------*- C++ -*-===//
 | |
| // 
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file was developed by the LLVM research group and is distributed under
 | |
| // the University of Illinois Open Source License. See LICENSE.TXT for details.
 | |
| // 
 | |
| //===----------------------------------------------------------------------===//
 | |
| // 
 | |
| // This class keeps track of information about the stack frame and about the
 | |
| // per-function constant pool.
 | |
| //
 | |
| // FIXME: This class is completely SparcV9 specific.  Do not use it for future
 | |
| // targets.  This file will be eliminated in future versions of LLVM.
 | |
| //   
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef MACHINEFUNCTIONINFO_H
 | |
| #define MACHINEFUNCTIONINFO_H
 | |
| 
 | |
| #include "MachineCodeForInstruction.h"
 | |
| #include "llvm/CodeGen/MachineFunction.h"
 | |
| #include "llvm/ADT/HashExtras.h"
 | |
| #include "llvm/ADT/hash_set"
 | |
| 
 | |
| namespace llvm {
 | |
| 
 | |
| class MachineFunction;
 | |
| class Constant;
 | |
| class Type;
 | |
| 
 | |
| class SparcV9FunctionInfo : public MachineFunctionInfo {
 | |
|   hash_set<const Constant*> constantsForConstPool;
 | |
|   hash_map<const Value*, int> offsets;
 | |
| 
 | |
|   unsigned	staticStackSize;
 | |
|   unsigned	automaticVarsSize;
 | |
|   unsigned	regSpillsSize;
 | |
|   unsigned	maxOptionalArgsSize;
 | |
|   unsigned	maxOptionalNumArgs;
 | |
|   unsigned	currentTmpValuesSize;
 | |
|   unsigned	maxTmpValuesSize;
 | |
|   bool          compiledAsLeaf;
 | |
|   bool          spillsAreaFrozen;
 | |
|   bool          automaticVarsAreaFrozen;
 | |
| 
 | |
|   MachineFunction &MF;
 | |
| public:
 | |
|   hash_map<const Instruction*, MachineCodeForInstruction> MCFIEntries;
 | |
| 
 | |
|   SparcV9FunctionInfo(MachineFunction &mf) : MF(mf) {
 | |
|     staticStackSize = automaticVarsSize = regSpillsSize = 0;
 | |
|     maxOptionalArgsSize = maxOptionalNumArgs = currentTmpValuesSize = 0;
 | |
|     maxTmpValuesSize = 0;
 | |
|     compiledAsLeaf = spillsAreaFrozen = automaticVarsAreaFrozen = false;
 | |
|   }
 | |
| 
 | |
|   /// CalculateArgSize - Call this method to fill in the maxOptionalArgsSize &
 | |
|   /// staticStackSize fields...
 | |
|   ///
 | |
|   void CalculateArgSize();
 | |
| 
 | |
|   //
 | |
|   // Accessors for global information about generated code for a method.
 | |
|   // 
 | |
|   bool     isCompiledAsLeafMethod() const { return compiledAsLeaf; }
 | |
|   unsigned getStaticStackSize()     const { return staticStackSize; }
 | |
|   unsigned getAutomaticVarsSize()   const { return automaticVarsSize; }
 | |
|   unsigned getRegSpillsSize()       const { return regSpillsSize; }
 | |
|   unsigned getMaxOptionalArgsSize() const { return maxOptionalArgsSize;}
 | |
|   unsigned getMaxOptionalNumArgs()  const { return maxOptionalNumArgs;}
 | |
|   const hash_set<const Constant*> &getConstantPoolValues() const {
 | |
|     return constantsForConstPool;
 | |
|   }
 | |
|   
 | |
|   //
 | |
|   // Modifiers used during code generation
 | |
|   // 
 | |
|   void            initializeFrameLayout    ();
 | |
|   
 | |
|   void            addToConstantPool        (const Constant* constVal) {
 | |
|     constantsForConstPool.insert(constVal);
 | |
|   }
 | |
|   
 | |
|   void markAsLeafMethod() { compiledAsLeaf = true; }
 | |
|   
 | |
|   int             computeOffsetforLocalVar (const Value*  local,
 | |
|                                             unsigned& getPaddedSize,
 | |
|                                             unsigned  sizeToUse = 0);
 | |
|   int             allocateLocalVar         (const Value* local,
 | |
|                                             unsigned sizeToUse = 0);
 | |
|   
 | |
|   int             allocateSpilledValue     (const Type* type);
 | |
|   int             pushTempValue            (unsigned size);
 | |
|   void            popAllTempValues         ();
 | |
|   
 | |
|   void            freezeSpillsArea         () { spillsAreaFrozen = true; } 
 | |
|   void            freezeAutomaticVarsArea  () { automaticVarsAreaFrozen=true; }
 | |
|   
 | |
| private:
 | |
|   void incrementAutomaticVarsSize(int incr) {
 | |
|     automaticVarsSize+= incr;
 | |
|     staticStackSize += incr;
 | |
|   }
 | |
|   void incrementRegSpillsSize(int incr) {
 | |
|     regSpillsSize+= incr;
 | |
|     staticStackSize += incr;
 | |
|   }
 | |
|   void incrementTmpAreaSize(int incr) {
 | |
|     currentTmpValuesSize += incr;
 | |
|     if (maxTmpValuesSize < currentTmpValuesSize)
 | |
|       {
 | |
|         staticStackSize += currentTmpValuesSize - maxTmpValuesSize;
 | |
|         maxTmpValuesSize = currentTmpValuesSize;
 | |
|       }
 | |
|   }
 | |
|   void resetTmpAreaSize() {
 | |
|     currentTmpValuesSize = 0;
 | |
|   }
 | |
|   int allocateOptionalArg(const Type* type);
 | |
| };
 | |
| 
 | |
| } // End llvm namespace
 | |
| 
 | |
| #endif
 |