Move MachineCodeForInstruction.h and MachineFunctionInfo.h into lib/Target/SparcV9

llvm-svn: 15830
This commit is contained in:
Chris Lattner 2004-08-16 21:55:02 +00:00
parent 491a52cf22
commit 9fb30a4257
18 changed files with 248 additions and 31 deletions

View File

@ -13,12 +13,12 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "SchedPriorities.h" #include "SchedPriorities.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "../../Target/SparcV9/LiveVar/FunctionLiveVarInfo.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/BasicBlock.h" #include "llvm/BasicBlock.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/Target/TargetMachine.h"
#include "../../Target/SparcV9/MachineCodeForInstruction.h"
#include "../../Target/SparcV9/LiveVar/FunctionLiveVarInfo.h"
#include "Support/CommandLine.h" #include "Support/CommandLine.h"
#include <algorithm> #include <algorithm>
#include <iostream> #include <iostream>

View File

@ -16,10 +16,10 @@
#include "SchedGraph.h" #include "SchedGraph.h"
#include "llvm/Function.h" #include "llvm/Function.h"
#include "llvm/Instructions.h" #include "llvm/Instructions.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
#include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetMachine.h"
#include "../../Target/SparcV9/MachineCodeForInstruction.h"
#include "../../Target/SparcV9/SparcV9RegInfo.h" #include "../../Target/SparcV9/SparcV9RegInfo.h"
#include "Support/STLExtras.h" #include "Support/STLExtras.h"
#include <iostream> #include <iostream>

View File

@ -22,13 +22,13 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/CodeGen/MachineCodeForInstruction.h" #include "../Target/SparcV9/MachineCodeForInstruction.h"
#include "llvm/Function.h" #include "llvm/Function.h"
#include "llvm/Instructions.h" #include "llvm/Instructions.h"
#include "llvm/Type.h" #include "llvm/Type.h"
#include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionInfo.h" #include "../Target/SparcV9/MachineFunctionInfo.h"
#include "../Target/SparcV9/MachineInstrAnnot.h" #include "../Target/SparcV9/MachineInstrAnnot.h"
#include "../Target/SparcV9/SparcV9TmpInstr.h" #include "../Target/SparcV9/SparcV9TmpInstr.h"
using namespace llvm; using namespace llvm;

View File

@ -16,7 +16,6 @@
#include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/SSARegMap.h" #include "llvm/CodeGen/SSARegMap.h"
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineConstantPool.h" #include "llvm/CodeGen/MachineConstantPool.h"
#include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/Passes.h"
@ -25,6 +24,7 @@
#include "llvm/Function.h" #include "llvm/Function.h"
#include "llvm/Instructions.h" #include "llvm/Instructions.h"
#include "llvm/Type.h" #include "llvm/Type.h"
#include "../Target/SparcV9/MachineFunctionInfo.h" // FIXME
#include "Support/LeakDetector.h" #include "Support/LeakDetector.h"
#include "Support/GraphWriter.h" #include "Support/GraphWriter.h"
#include <fstream> #include <fstream>

View File

@ -18,10 +18,8 @@
#include "llvm/Instructions.h" #include "llvm/Instructions.h"
#include "llvm/Function.h" #include "llvm/Function.h"
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/Passes.h"
#include "llvm/Support/CFG.h" #include "llvm/Support/CFG.h"
#include "Support/Casting.h"
#include "llvm/Target/TargetSchedInfo.h" #include "llvm/Target/TargetSchedInfo.h"
#include "Support/Debug.h" #include "Support/Debug.h"
#include "Support/GraphWriter.h" #include "Support/GraphWriter.h"
@ -31,6 +29,7 @@
#include <sstream> #include <sstream>
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "../../Target/SparcV9/MachineCodeForInstruction.h"
#include "../../Target/SparcV9/SparcV9TmpInstr.h" #include "../../Target/SparcV9/SparcV9TmpInstr.h"
#include "../../Target/SparcV9/SparcV9Internals.h" #include "../../Target/SparcV9/SparcV9Internals.h"
#include "../../Target/SparcV9/SparcV9RegisterInfo.h" #include "../../Target/SparcV9/SparcV9RegisterInfo.h"

View File

@ -0,0 +1,97 @@
//===-- MachineCodeForInstruction.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.
//
//===----------------------------------------------------------------------===//
//
// FIXME: This file is SparcV9 specific. Do not rely on this class for new
// targets, it will go away in the future.
//
// Representation of the sequence of machine instructions created for a single
// VM instruction. Additionally records information about hidden and implicit
// values used by the machine instructions: about hidden values used by the
// machine instructions:
//
// "Temporary values" are intermediate values used in the machine instruction
// sequence, but not in the VM instruction Note that such values should be
// treated as pure SSA values with no interpretation of their operands (i.e., as
// a TmpInstruction object which actually represents such a value).
//
// (2) "Implicit uses" are values used in the VM instruction but not in
// the machine instruction sequence
//
//===----------------------------------------------------------------------===//
#ifndef MACHINECODE_FOR_INSTRUCTION_H
#define MACHINECODE_FOR_INSTRUCTION_H
#include <vector>
namespace llvm {
class MachineInstr;
class Instruction;
class Value;
class CallArgsDescriptor;
class MachineCodeForInstruction {
std::vector<Value*> tempVec; // used by m/c instr but not VM instr
std::vector<MachineInstr*> Contents; // the machine instr for this VM instr
CallArgsDescriptor* callArgsDesc; // only used for CALL instructions
public:
MachineCodeForInstruction() : callArgsDesc(NULL) {}
~MachineCodeForInstruction();
static MachineCodeForInstruction &get(const Instruction *I);
static void destroy(const Instruction *I);
// Access to underlying machine instructions...
typedef std::vector<MachineInstr*>::iterator iterator;
typedef std::vector<MachineInstr*>::const_iterator const_iterator;
unsigned size() const { return Contents.size(); }
bool empty() const { return Contents.empty(); }
MachineInstr *front() const { return Contents.front(); }
MachineInstr *back() const { return Contents.back(); }
MachineInstr *&operator[](unsigned i) { return Contents[i]; }
MachineInstr *operator[](unsigned i) const { return Contents[i]; }
void pop_back() { Contents.pop_back(); }
iterator begin() { return Contents.begin(); }
iterator end() { return Contents.end(); }
const_iterator begin() const { return Contents.begin(); }
const_iterator end() const { return Contents.end(); }
template<class InIt>
void insert(iterator where, InIt first, InIt last) {
Contents.insert(where, first, last);
}
iterator erase(iterator where) { return Contents.erase(where); }
iterator erase(iterator s, iterator e) { return Contents.erase(s, e); }
// dropAllReferences() - This function drops all references within
// temporary (hidden) instructions created in implementing the original
// VM intruction. This ensures there are no remaining "uses" within
// these hidden instructions, before the values of a method are freed.
//
void dropAllReferences();
const std::vector<Value*> &getTempValues() const { return tempVec; }
std::vector<Value*> &getTempValues() { return tempVec; }
MachineCodeForInstruction &addTemp(Value *tmp) {
tempVec.push_back(tmp);
return *this;
}
void setCallArgsDescriptor(CallArgsDescriptor* desc) { callArgsDesc = desc; }
CallArgsDescriptor* getCallArgsDescriptor() const { return callArgsDesc; }
};
} // End llvm namespace
#endif

View File

@ -0,0 +1,124 @@
//===-- MachineFunctionInfo.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 "Support/HashExtras.h"
#include "Support/hash_set"
namespace llvm {
class MachineFunction;
class Constant;
class Type;
class 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;
MachineFunctionInfo(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

View File

@ -46,7 +46,7 @@
#include "llvm/Pass.h" #include "llvm/Pass.h"
#include "llvm/Module.h" #include "llvm/Module.h"
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h" #include "MachineCodeForInstruction.h"
#include "Support/StringExtras.h" #include "Support/StringExtras.h"
namespace llvm { namespace llvm {

View File

@ -26,6 +26,8 @@
#include "RegAllocCommon.h" #include "RegAllocCommon.h"
#include "RegClass.h" #include "RegClass.h"
#include "../LiveVar/FunctionLiveVarInfo.h" #include "../LiveVar/FunctionLiveVarInfo.h"
#include "../MachineCodeForInstruction.h"
#include "../MachineFunctionInfo.h"
#include "../SparcV9InstrInfo.h" #include "../SparcV9InstrInfo.h"
#include "../SparcV9TmpInstr.h" #include "../SparcV9TmpInstr.h"
#include "llvm/Constants.h" #include "llvm/Constants.h"
@ -34,9 +36,7 @@
#include "llvm/Module.h" #include "llvm/Module.h"
#include "llvm/Type.h" #include "llvm/Type.h"
#include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/LoopInfo.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineInstrBuilder.h"
#include "../MachineInstrAnnot.h" #include "../MachineInstrAnnot.h"

View File

@ -25,12 +25,12 @@
#include "llvm/Assembly/Writer.h" #include "llvm/Assembly/Writer.h"
#include "llvm/CodeGen/MachineConstantPool.h" #include "llvm/CodeGen/MachineConstantPool.h"
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstr.h"
#include "llvm/Support/Mangler.h" #include "llvm/Support/Mangler.h"
#include "Support/StringExtras.h" #include "Support/StringExtras.h"
#include "Support/Statistic.h" #include "Support/Statistic.h"
#include "SparcV9Internals.h" #include "SparcV9Internals.h"
#include "MachineFunctionInfo.h"
#include <string> #include <string>
using namespace llvm; using namespace llvm;

View File

@ -21,15 +21,14 @@
#include "SparcV9TmpInstr.h" #include "SparcV9TmpInstr.h"
#include "SparcV9FrameInfo.h" #include "SparcV9FrameInfo.h"
#include "SparcV9RegisterInfo.h" #include "SparcV9RegisterInfo.h"
#include "MachineFunctionInfo.h"
#include "llvm/CodeGen/IntrinsicLowering.h" #include "llvm/CodeGen/IntrinsicLowering.h"
#include "llvm/CodeGen/MachineConstantPool.h" #include "llvm/CodeGen/MachineConstantPool.h"
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/Constants.h" #include "llvm/Constants.h"
#include "llvm/DerivedTypes.h" #include "llvm/DerivedTypes.h"
#include "llvm/GlobalValue.h"
#include "llvm/Instructions.h" #include "llvm/Instructions.h"
#include "llvm/Intrinsics.h" #include "llvm/Intrinsics.h"
#include "llvm/Module.h" #include "llvm/Module.h"

View File

@ -26,7 +26,6 @@
#include "llvm/PassManager.h" #include "llvm/PassManager.h"
#include "llvm/CodeGen/MachineCodeEmitter.h" #include "llvm/CodeGen/MachineCodeEmitter.h"
#include "llvm/CodeGen/MachineConstantPool.h" #include "llvm/CodeGen/MachineConstantPool.h"
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstr.h"
#include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetMachine.h"
@ -38,6 +37,7 @@
#include "SparcV9TargetMachine.h" #include "SparcV9TargetMachine.h"
#include "SparcV9RegInfo.h" #include "SparcV9RegInfo.h"
#include "SparcV9CodeEmitter.h" #include "SparcV9CodeEmitter.h"
#include "MachineFunctionInfo.h"
#include "Config/alloca.h" #include "Config/alloca.h"
namespace llvm { namespace llvm {

View File

@ -12,8 +12,8 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/Target/TargetFrameInfo.h" #include "llvm/Target/TargetFrameInfo.h"
#include "MachineFunctionInfo.h"
#include "SparcV9FrameInfo.h" #include "SparcV9FrameInfo.h"
using namespace llvm; using namespace llvm;

View File

@ -20,9 +20,9 @@
#include "SparcV9RegClassInfo.h" #include "SparcV9RegClassInfo.h"
#include "SparcV9RegisterInfo.h" #include "SparcV9RegisterInfo.h"
#include "SparcV9FrameInfo.h" #include "SparcV9FrameInfo.h"
#include "MachineFunctionInfo.h"
#include "MachineCodeForInstruction.h"
#include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/Pass.h" #include "llvm/Pass.h"
#include "llvm/Function.h" #include "llvm/Function.h"

View File

@ -13,9 +13,9 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h" #include "MachineFunctionInfo.h"
#include "MachineCodeForInstruction.h"
#include "MachineInstrAnnot.h" #include "MachineInstrAnnot.h"
#include "RegAlloc/LiveRangeInfo.h" #include "RegAlloc/LiveRangeInfo.h"
#include "RegAlloc/LiveRange.h" #include "RegAlloc/LiveRange.h"

View File

@ -17,10 +17,9 @@
#include "llvm/Constant.h" #include "llvm/Constant.h"
#include "llvm/DerivedTypes.h" #include "llvm/DerivedTypes.h"
#include "llvm/Function.h" #include "llvm/Function.h"
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineFunctionPass.h"
#include "MachineFunctionInfo.h"
namespace llvm { using namespace llvm;
namespace { namespace {
class StackSlots : public MachineFunctionPass { class StackSlots : public MachineFunctionPass {
@ -47,8 +46,7 @@ namespace {
}; };
} }
Pass *createStackSlotsPass(const TargetMachine &Target) { Pass *llvm::createStackSlotsPass(const TargetMachine &Target) {
return new StackSlots(Target); return new StackSlots(Target);
} }
} // End llvm namespace

View File

@ -19,13 +19,13 @@
#include "llvm/CodeGen/InstrScheduling.h" #include "llvm/CodeGen/InstrScheduling.h"
#include "llvm/CodeGen/IntrinsicLowering.h" #include "llvm/CodeGen/IntrinsicLowering.h"
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/Passes.h"
#include "llvm/Target/TargetOptions.h" #include "llvm/Target/TargetOptions.h"
#include "llvm/Target/TargetMachineRegistry.h" #include "llvm/Target/TargetMachineRegistry.h"
#include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Scalar.h"
#include "MappingInfo.h" #include "MappingInfo.h"
#include "MachineFunctionInfo.h"
#include "MachineCodeForInstruction.h"
#include "SparcV9Internals.h" #include "SparcV9Internals.h"
#include "SparcV9TargetMachine.h" #include "SparcV9TargetMachine.h"
#include "SparcV9BurgISel.h" #include "SparcV9BurgISel.h"

View File

@ -16,7 +16,7 @@
#define SPARCV9TMPINSTR_H #define SPARCV9TMPINSTR_H
#include "llvm/Instruction.h" #include "llvm/Instruction.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h" #include "MachineCodeForInstruction.h"
namespace llvm { namespace llvm {