Initial version: it adds 2 empty slots at the top of stack

llvm-svn: 3872
This commit is contained in:
Anand Shukla 2002-09-21 04:58:26 +00:00
parent 230d832e38
commit ca15c99c4d
2 changed files with 57 additions and 0 deletions

View File

@ -0,0 +1,16 @@
//===-- llvm/CodeGen/StackSots.h -------------------------------*- C++ -*--===//
//
// External interface to stack-slots pass that enters 2 empty slots
// at the top of each function stack
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_CODEGEN_STACKSLOTS_H
#define LLVM_CODEGEN_STACKSLOTS_H
class TargetMachine;
class Pass;
Pass *createStackSlotsPass(TargetMachine &Target);
#endif

View File

@ -0,0 +1,41 @@
//===- 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);
}