llvm-6502/lib/Target/SparcV9/SparcV9StackSlots.cpp

42 lines
1.1 KiB
C++
Raw Normal View History

//===- StackSlots.cpp - Specialize LLVM code for target machine ---------===//
//
// This pass adds 2 empty slots at the top of function stack.
// These two slots are later used during code reoptimization
// for spilling the resgiter values when rewriting branches.
//
//===----------------------------------------------------------------------===//
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/MachineInstrInfo.h"
#include "llvm/Constants.h"
#include "llvm/Function.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Pass.h"
#include "llvm/CodeGen/MachineCodeForMethod.h"
using std::map;
using std::cerr;
class StackSlots : public FunctionPass{
private:
const TargetMachine ⌖
public:
StackSlots (const TargetMachine &T): target(T) {}
bool runOnFunction(Function &F) {
Value *v = ConstantSInt::get(Type::IntTy,0);
MachineCodeForMethod &mcInfo = MachineCodeForMethod::get(&F);
mcInfo.allocateLocalVar
(target, v, 2*target.DataLayout.getTypeSize(PointerType::get(Type::IntTy)));
return true;
}
};
Pass* createStackSlotsPass(TargetMachine &T){
return new StackSlots(T);
}