diff options
author | Anand Shukla <ashukla@cs.uiuc.edu> | 2002-09-21 04:58:26 +0000 |
---|---|---|
committer | Anand Shukla <ashukla@cs.uiuc.edu> | 2002-09-21 04:58:26 +0000 |
commit | 33db9bae15637ed1396f4e44dee69cccbbd6c6d1 (patch) | |
tree | bd10c4ff7f2616f0e75183739441b5e4c6502686 | |
parent | d1cf1b458a952e9d8a28ea50bef165eee093b569 (diff) | |
download | external_llvm-33db9bae15637ed1396f4e44dee69cccbbd6c6d1.zip external_llvm-33db9bae15637ed1396f4e44dee69cccbbd6c6d1.tar.gz external_llvm-33db9bae15637ed1396f4e44dee69cccbbd6c6d1.tar.bz2 |
Initial version: it adds 2 empty slots at the top of stack
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3872 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/StackSlots.h | 16 | ||||
-rw-r--r-- | lib/Target/SparcV9/SparcV9StackSlots.cpp | 41 |
2 files changed, 57 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/StackSlots.h b/include/llvm/CodeGen/StackSlots.h new file mode 100644 index 0000000..a8b69bb --- /dev/null +++ b/include/llvm/CodeGen/StackSlots.h @@ -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 diff --git a/lib/Target/SparcV9/SparcV9StackSlots.cpp b/lib/Target/SparcV9/SparcV9StackSlots.cpp new file mode 100644 index 0000000..053d501 --- /dev/null +++ b/lib/Target/SparcV9/SparcV9StackSlots.cpp @@ -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); +} + |