aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/SparcV9/SparcV9StackSlots.cpp
blob: 053d5013b00d3a3f9e5e9e46ef65f6b232f72a64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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);
}