[llvm-commits] CVS: llvm/lib/CodeGen/MachineFunction.cpp
Chris Lattner
lattner at cs.uiuc.edu
Sat Dec 20 04:22:05 PST 2003
Changes in directory llvm/lib/CodeGen:
MachineFunction.cpp updated: 1.45 -> 1.46
---
Log message:
Add a new target-independent machine code freeing pass
---
Diffs of the changes: (+33 -8)
Index: llvm/lib/CodeGen/MachineFunction.cpp
diff -u llvm/lib/CodeGen/MachineFunction.cpp:1.45 llvm/lib/CodeGen/MachineFunction.cpp:1.46
--- llvm/lib/CodeGen/MachineFunction.cpp:1.45 Sat Dec 20 03:17:07 2003
+++ llvm/lib/CodeGen/MachineFunction.cpp Sat Dec 20 04:20:58 2003
@@ -13,19 +13,19 @@
//
//===----------------------------------------------------------------------===//
-#include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/CodeGen/SSARegMap.h"
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineConstantPool.h"
+#include "llvm/CodeGen/Passes.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetFrameInfo.h"
#include "llvm/Target/TargetCacheInfo.h"
#include "llvm/Function.h"
#include "llvm/iOther.h"
-#include "llvm/Pass.h"
using namespace llvm;
static AnnotationID MF_AID(
@@ -33,15 +33,15 @@
namespace {
- struct Printer : public FunctionPass {
+ struct Printer : public MachineFunctionPass {
const char *getPassName() const { return "MachineFunction Printer"; }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
}
- bool runOnFunction(Function &F) {
- MachineFunction::get(&F).dump();
+ bool runOnMachineFunction(MachineFunction &MF) {
+ MF.dump();
return false;
}
};
@@ -51,6 +51,33 @@
return new Printer();
}
+namespace {
+ struct Deleter : public MachineFunctionPass {
+ const char *getPassName() const { return "Machine Code Deleter"; }
+
+ bool runOnMachineFunction(MachineFunction &MF) {
+ // Delete all of the MachineInstrs out of the function. When the sparc
+ // backend gets fixed, this can be dramatically simpler, but actually
+ // putting this stuff into the MachineBasicBlock destructor!
+ for (MachineFunction::iterator BB = MF.begin(), E = MF.end(); BB != E;
+ ++BB)
+ while (!BB->empty())
+ delete BB->pop_back();
+
+ // Delete the annotation from the function now.
+ MachineFunction::destruct(MF.getFunction());
+ return true;
+ }
+ };
+}
+
+/// MachineCodeDeletion Pass - This pass deletes all of the machine code for
+/// the current function, which should happen after the function has been
+/// emitted to a .s file or to memory.
+FunctionPass *llvm::createMachineCodeDeleter() {
+ return new Deleter();
+}
+
//===---------------------------------------------------------------------===//
// MachineFunction implementation
@@ -113,9 +140,7 @@
return *mcInfo;
}
-void
-MachineFunction::destruct(const Function *Fn)
-{
+void MachineFunction::destruct(const Function *Fn) {
bool Deleted = Fn->deleteAnnotation(MF_AID);
assert(Deleted && "Machine code did not exist for function!");
}
More information about the llvm-commits
mailing list