Initial version: it adds 2 empty slots at the top of stack
authorAnand Shukla <ashukla@cs.uiuc.edu>
Sat, 21 Sep 2002 04:58:26 +0000 (04:58 +0000)
committerAnand Shukla <ashukla@cs.uiuc.edu>
Sat, 21 Sep 2002 04:58:26 +0000 (04:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3872 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/StackSlots.h [new file with mode: 0644]
lib/Target/SparcV9/SparcV9StackSlots.cpp [new file with mode: 0644]

diff --git a/include/llvm/CodeGen/StackSlots.h b/include/llvm/CodeGen/StackSlots.h
new file mode 100644 (file)
index 0000000..a8b69bb
--- /dev/null
@@ -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 (file)
index 0000000..053d501
--- /dev/null
@@ -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 &target;
+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);
+}
+