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);
}
|