Reapply r77654 with a fix: MachineFunctionPass's getAnalysisUsage

shouldn't do AU.setPreservesCFG(), because even though CodeGen passes
don't modify the LLVM IR CFG, they may modify the MachineFunction CFG,
and passes like MachineLoop are registered with isCFGOnly set to true.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77691 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman
2009-07-31 18:16:33 +00:00
parent 56594f9884
commit ad2afc2a42
18 changed files with 189 additions and 136 deletions

View File

@ -67,7 +67,7 @@ struct MachineFunctionInfo {
};
class MachineFunction : private Annotation {
const Function *Fn;
Function *Fn;
const TargetMachine &Target;
// RegInfo - Information about each register in use in the function.
@ -115,12 +115,12 @@ class MachineFunction : private Annotation {
unsigned Alignment;
public:
MachineFunction(const Function *Fn, const TargetMachine &TM);
MachineFunction(Function *Fn, const TargetMachine &TM);
~MachineFunction();
/// getFunction - Return the LLVM function that this machine code represents
///
const Function *getFunction() const { return Fn; }
Function *getFunction() const { return Fn; }
/// getTarget - Return the target machine this machine code is compiled with
///
@ -229,21 +229,6 @@ public:
///
void dump() const;
/// construct - Allocate and initialize a MachineFunction for a given Function
/// and Target
///
static MachineFunction& construct(const Function *F, const TargetMachine &TM);
/// destruct - Destroy the MachineFunction corresponding to a given Function
///
static void destruct(const Function *F);
/// get - Return a handle to a MachineFunction corresponding to the given
/// Function. This should not be called before "construct()" for a given
/// Function.
///
static MachineFunction& get(const Function *F);
// Provide accessors for the MachineBasicBlock list...
typedef BasicBlockListType::iterator iterator;
typedef BasicBlockListType::const_iterator const_iterator;