[llvm-commits] [llvm] r77654 - in /llvm/trunk: include/llvm/ include/llvm/CodeGen/ lib/CodeGen/ lib/CodeGen/SelectionDAG/ lib/Target/CellSPU/ lib/Target/PowerPC/
Daniel Dunbar
daniel at zuster.org
Thu Jul 30 20:04:43 PDT 2009
Hi Dan,
I reverted this, it appears to be causing llvm-gcc bootstrap to fail,
and assorted projects fail when building with clang.
- Daniel
On Thu, Jul 30, 2009 at 6:52 PM, Dan Gohman<gohman at apple.com> wrote:
> Author: djg
> Date: Thu Jul 30 20:52:50 2009
> New Revision: 77654
>
> URL: http://llvm.org/viewvc/llvm-project?rev=77654&view=rev
> Log:
> Manage MachineFunctions with an analysis Pass instead of the Annotable
> mechanism. To support this, make MachineFunctionPass a little more
> complete.
>
> Added:
> llvm/trunk/include/llvm/CodeGen/MachineFunctionAnalysis.h
> llvm/trunk/lib/CodeGen/MachineFunctionAnalysis.cpp
> llvm/trunk/lib/CodeGen/MachineFunctionPass.cpp
> Modified:
> llvm/trunk/include/llvm/CodeGen/LazyLiveness.h
> llvm/trunk/include/llvm/CodeGen/MachineFunction.h
> llvm/trunk/include/llvm/CodeGen/MachineFunctionPass.h
> llvm/trunk/include/llvm/CodeGen/Passes.h
> llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
> llvm/trunk/include/llvm/Function.h
> llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp
> llvm/trunk/lib/CodeGen/LiveVariables.cpp
> llvm/trunk/lib/CodeGen/MachineFunction.cpp
> llvm/trunk/lib/CodeGen/MachineLoopInfo.cpp
> llvm/trunk/lib/CodeGen/MachineVerifier.cpp
> llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
> llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
> llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp
> llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
>
> Modified: llvm/trunk/include/llvm/CodeGen/LazyLiveness.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LazyLiveness.h?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/LazyLiveness.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/LazyLiveness.h Thu Jul 30 20:52:50 2009
> @@ -34,6 +34,7 @@
> void getAnalysisUsage(AnalysisUsage &AU) const {
> AU.setPreservesAll();
> AU.addRequired<MachineDominatorTree>();
> + MachineFunctionPass::getAnalysisUsage(AU);
> }
>
> bool runOnMachineFunction(MachineFunction &mf);
>
> Modified: llvm/trunk/include/llvm/CodeGen/MachineFunction.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineFunction.h?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineFunction.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineFunction.h Thu Jul 30 20:52:50 2009
> @@ -67,7 +67,7 @@
> };
>
> 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 @@
> 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 @@
> ///
> 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;
>
> Added: llvm/trunk/include/llvm/CodeGen/MachineFunctionAnalysis.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineFunctionAnalysis.h?rev=77654&view=auto
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineFunctionAnalysis.h (added)
> +++ llvm/trunk/include/llvm/CodeGen/MachineFunctionAnalysis.h Thu Jul 30 20:52:50 2009
> @@ -0,0 +1,49 @@
> +//===-- MachineFunctionAnalysis.h - Owner of MachineFunctions ----*-C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +// This file declares the MachineFunctionAnalysis class.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_CODEGEN_MACHINE_FUNCTION_ANALYSIS_H
> +#define LLVM_CODEGEN_MACHINE_FUNCTION_ANALYSIS_H
> +
> +#include "llvm/Pass.h"
> +#include "llvm/Target/TargetMachine.h"
> +
> +namespace llvm {
> +
> +class MachineFunction;
> +
> +/// MachineFunctionAnalysis - This class is a Pass that manages a
> +/// MachineFunction object.
> +struct MachineFunctionAnalysis : public FunctionPass {
> +private:
> + const TargetMachine &TM;
> + CodeGenOpt::Level OptLevel;
> + MachineFunction *MF;
> +
> +public:
> + static char ID;
> + explicit MachineFunctionAnalysis(TargetMachine &tm,
> + CodeGenOpt::Level OL = CodeGenOpt::Default);
> +
> +
> + MachineFunction &getMF() const { return *MF; }
> + CodeGenOpt::Level getOptLevel() const { return OptLevel; }
> +
> +private:
> + virtual bool runOnFunction(Function &F);
> + virtual void releaseMemory();
> + virtual void getAnalysisUsage(AnalysisUsage &AU) const;
> +};
> +
> +} // End llvm namespace
> +
> +#endif
>
> Modified: llvm/trunk/include/llvm/CodeGen/MachineFunctionPass.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineFunctionPass.h?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineFunctionPass.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineFunctionPass.h Thu Jul 30 20:52:50 2009
> @@ -24,19 +24,25 @@
>
> namespace llvm {
>
> - // FIXME: This pass should declare that the pass does not invalidate any LLVM
> - // passes.
> -struct MachineFunctionPass : public FunctionPass {
> +/// MachineFunctionPass - This class adapts the FunctionPass interface to
> +/// allow convenient creation of passes that operate on the MachineFunction
> +/// representation. Instead of overriding runOnFunction, subclasses
> +/// override runOnMachineFunction.
> +class MachineFunctionPass : public FunctionPass {
> +protected:
> explicit MachineFunctionPass(intptr_t ID) : FunctionPass(ID) {}
> explicit MachineFunctionPass(void *ID) : FunctionPass(ID) {}
>
> -protected:
> /// runOnMachineFunction - This method must be overloaded to perform the
> /// desired machine code transformation or analysis.
> ///
> virtual bool runOnMachineFunction(MachineFunction &MF) = 0;
>
> -public:
> + /// getAnalysisUsage - Subclasses that override getAnalysisUsage
> + /// must call this.
> + virtual void getAnalysisUsage(AnalysisUsage &AU) const;
> +
> +private:
> bool runOnFunction(Function &F);
> };
>
>
> Modified: llvm/trunk/include/llvm/CodeGen/Passes.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/Passes.h?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/Passes.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/Passes.h Thu Jul 30 20:52:50 2009
> @@ -146,11 +146,6 @@
> /// by seeing if the labels map to the same reduced label.
> FunctionPass *createDebugLabelFoldingPass();
>
> - /// 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 *createMachineCodeDeleter();
> -
> /// getRegisterAllocator - This creates an instance of the register allocator
> /// for the Sparc.
> FunctionPass *getRegisterAllocator(TargetMachine &T);
>
> Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h Thu Jul 30 20:52:50 2009
> @@ -19,6 +19,7 @@
> #include "llvm/Pass.h"
> #include "llvm/Constant.h"
> #include "llvm/CodeGen/SelectionDAG.h"
> +#include "llvm/CodeGen/MachineFunctionPass.h"
>
> namespace llvm {
> class FastISel;
> @@ -39,7 +40,7 @@
>
> /// SelectionDAGISel - This is the common base class used for SelectionDAG-based
> /// pattern-matching instruction selectors.
> -class SelectionDAGISel : public FunctionPass {
> +class SelectionDAGISel : public MachineFunctionPass {
> public:
> const TargetMachine &TM;
> TargetLowering &TLI;
> @@ -62,7 +63,7 @@
>
> virtual void getAnalysisUsage(AnalysisUsage &AU) const;
>
> - virtual bool runOnFunction(Function &Fn);
> + virtual bool runOnMachineFunction(MachineFunction &MF);
>
> unsigned MakeReg(MVT VT);
>
>
> Modified: llvm/trunk/include/llvm/Function.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Function.h?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Function.h (original)
> +++ llvm/trunk/include/llvm/Function.h Thu Jul 30 20:52:50 2009
> @@ -21,7 +21,6 @@
> #include "llvm/GlobalValue.h"
> #include "llvm/BasicBlock.h"
> #include "llvm/Argument.h"
> -#include "llvm/Support/Annotation.h"
> #include "llvm/Attributes.h"
>
> namespace llvm {
> @@ -66,7 +65,7 @@
> mutable ilist_node<Argument> Sentinel;
> };
>
> -class Function : public GlobalValue, public Annotable,
> +class Function : public GlobalValue,
> public ilist_node<Function> {
> public:
> typedef iplist<Argument> ArgumentListType;
>
> Modified: llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp (original)
> +++ llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp Thu Jul 30 20:52:50 2009
> @@ -18,6 +18,7 @@
> #include "llvm/Analysis/LoopPass.h"
> #include "llvm/CodeGen/Passes.h"
> #include "llvm/CodeGen/GCStrategy.h"
> +#include "llvm/CodeGen/MachineFunctionAnalysis.h"
> #include "llvm/Target/TargetOptions.h"
> #include "llvm/Target/TargetAsmInfo.h"
> #include "llvm/Target/TargetRegistry.h"
> @@ -118,9 +119,6 @@
>
> PM.add(createGCInfoDeleter());
>
> - // Delete machine code for this function
> - PM.add(createMachineCodeDeleter());
> -
> return false; // success!
> }
>
> @@ -137,9 +135,6 @@
>
> PM.add(createGCInfoDeleter());
>
> - // Delete machine code for this function
> - PM.add(createMachineCodeDeleter());
> -
> return false; // success!
> }
>
> @@ -156,9 +151,6 @@
>
> PM.add(createGCInfoDeleter());
>
> - // Delete machine code for this function
> - PM.add(createMachineCodeDeleter());
> -
> return false; // success!
> }
>
> @@ -184,9 +176,6 @@
>
> PM.add(createGCInfoDeleter());
>
> - // Delete machine code for this function
> - PM.add(createMachineCodeDeleter());
> -
> return false; // success!
> }
>
> @@ -212,9 +201,6 @@
>
> PM.add(createGCInfoDeleter());
>
> - // Delete machine code for this function
> - PM.add(createMachineCodeDeleter());
> -
> return false; // success!
> }
>
> @@ -265,6 +251,9 @@
>
> // Standard Lower-Level Passes.
>
> + // Set up a MachineFunction for the rest of CodeGen to work on.
> + PM.add(new MachineFunctionAnalysis(*this, OptLevel));
> +
> // Enable FastISel with -fast, but allow that to be overridden.
> if (EnableFastISelOption == cl::BOU_TRUE ||
> (OptLevel == CodeGenOpt::None && EnableFastISelOption != cl::BOU_FALSE))
>
> Modified: llvm/trunk/lib/CodeGen/LiveVariables.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveVariables.cpp?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/LiveVariables.cpp (original)
> +++ llvm/trunk/lib/CodeGen/LiveVariables.cpp Thu Jul 30 20:52:50 2009
> @@ -48,6 +48,7 @@
> void LiveVariables::getAnalysisUsage(AnalysisUsage &AU) const {
> AU.addRequiredID(UnreachableMachineBlockElimID);
> AU.setPreservesAll();
> + MachineFunctionPass::getAnalysisUsage(AU);
> }
>
> void LiveVariables::VarInfo::dump() const {
>
> Modified: llvm/trunk/lib/CodeGen/MachineFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineFunction.cpp?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineFunction.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineFunction.cpp Thu Jul 30 20:52:50 2009
> @@ -36,15 +36,6 @@
> #include <sstream>
> using namespace llvm;
>
> -bool MachineFunctionPass::runOnFunction(Function &F) {
> - // Do not codegen any 'available_externally' functions at all, they have
> - // definitions outside the translation unit.
> - if (F.hasAvailableExternallyLinkage())
> - return false;
> -
> - return runOnMachineFunction(MachineFunction::get(&F));
> -}
> -
> namespace {
> struct VISIBILITY_HIDDEN Printer : public MachineFunctionPass {
> static char ID;
> @@ -59,6 +50,7 @@
>
> virtual void getAnalysisUsage(AnalysisUsage &AU) const {
> AU.setPreservesAll();
> + MachineFunctionPass::getAnalysisUsage(AU);
> }
>
> bool runOnMachineFunction(MachineFunction &MF) {
> @@ -78,31 +70,6 @@
> return new Printer(OS, Banner);
> }
>
> -namespace {
> - struct VISIBILITY_HIDDEN Deleter : public MachineFunctionPass {
> - static char ID;
> - Deleter() : MachineFunctionPass(&ID) {}
> -
> - const char *getPassName() const { return "Machine Code Deleter"; }
> -
> - bool runOnMachineFunction(MachineFunction &MF) {
> - // Delete the annotation from the function now.
> - MachineFunction::destruct(MF.getFunction());
> - return true;
> - }
> - };
> - char Deleter::ID = 0;
> -}
> -
> -/// 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
> //===---------------------------------------------------------------------===//
> @@ -111,7 +78,7 @@
> MBB->getParent()->DeleteMachineBasicBlock(MBB);
> }
>
> -MachineFunction::MachineFunction(const Function *F,
> +MachineFunction::MachineFunction(Function *F,
> const TargetMachine &TM)
> : Annotation(AnnotationManager::getID("CodeGen::MachineCodeForFunction")),
> Fn(F), Target(TM) {
> @@ -356,42 +323,6 @@
> #endif // NDEBUG
> }
>
> -// The next two methods are used to construct and to retrieve
> -// the MachineCodeForFunction object for the given function.
> -// construct() -- Allocates and initializes for a given function and target
> -// get() -- Returns a handle to the object.
> -// This should not be called before "construct()"
> -// for a given Function.
> -//
> -MachineFunction&
> -MachineFunction::construct(const Function *Fn, const TargetMachine &Tar)
> -{
> - AnnotationID MF_AID =
> - AnnotationManager::getID("CodeGen::MachineCodeForFunction");
> - assert(Fn->getAnnotation(MF_AID) == 0 &&
> - "Object already exists for this function!");
> - MachineFunction* mcInfo = new MachineFunction(Fn, Tar);
> - Fn->addAnnotation(mcInfo);
> - return *mcInfo;
> -}
> -
> -void MachineFunction::destruct(const Function *Fn) {
> - AnnotationID MF_AID =
> - AnnotationManager::getID("CodeGen::MachineCodeForFunction");
> - bool Deleted = Fn->deleteAnnotation(MF_AID);
> - assert(Deleted && "Machine code did not exist for function!");
> - Deleted = Deleted; // silence warning when no assertions.
> -}
> -
> -MachineFunction& MachineFunction::get(const Function *F)
> -{
> - AnnotationID MF_AID =
> - AnnotationManager::getID("CodeGen::MachineCodeForFunction");
> - MachineFunction *mc = (MachineFunction*)F->getAnnotation(MF_AID);
> - assert(mc && "Call construct() method first to allocate the object");
> - return *mc;
> -}
> -
> /// addLiveIn - Add the specified physical register as a live-in value and
> /// create a corresponding virtual register for it.
> unsigned MachineFunction::addLiveIn(unsigned PReg,
>
> Added: llvm/trunk/lib/CodeGen/MachineFunctionAnalysis.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineFunctionAnalysis.cpp?rev=77654&view=auto
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineFunctionAnalysis.cpp (added)
> +++ llvm/trunk/lib/CodeGen/MachineFunctionAnalysis.cpp Thu Jul 30 20:52:50 2009
> @@ -0,0 +1,45 @@
> +//===-- MachineFunctionAnalysis.cpp ---------------------------------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +// This file contains the definitions of the MachineFunctionAnalysis members.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/CodeGen/MachineFunctionAnalysis.h"
> +#include "llvm/CodeGen/MachineFunction.h"
> +using namespace llvm;
> +
> +// Register this pass with PassInfo directly to avoid having to define
> +// a default constructor.
> +static PassInfo
> +X("Machine Function Analysis", "machine-function-analysis",
> + intptr_t(&MachineFunctionAnalysis::ID), 0,
> + /*CFGOnly=*/false, /*is_analysis=*/true);
> +
> +char MachineFunctionAnalysis::ID = 0;
> +
> +MachineFunctionAnalysis::MachineFunctionAnalysis(TargetMachine &tm,
> + CodeGenOpt::Level OL) :
> + FunctionPass(&ID), TM(tm), OptLevel(OL), MF(0) {
> +}
> +
> +bool MachineFunctionAnalysis::runOnFunction(Function &F) {
> + assert(!MF && "MachineFunctionAnalysis already initialized!");
> + MF = new MachineFunction(&F, TM);
> + return false;
> +}
> +
> +void MachineFunctionAnalysis::releaseMemory() {
> + delete MF;
> + MF = 0;
> +}
> +
> +void MachineFunctionAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {
> + AU.setPreservesAll();
> +}
>
> Added: llvm/trunk/lib/CodeGen/MachineFunctionPass.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineFunctionPass.cpp?rev=77654&view=auto
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineFunctionPass.cpp (added)
> +++ llvm/trunk/lib/CodeGen/MachineFunctionPass.cpp Thu Jul 30 20:52:50 2009
> @@ -0,0 +1,50 @@
> +//===-- MachineFunctionPass.cpp -------------------------------------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +// This file contains the definitions of the MachineFunctionPass members.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/Analysis/AliasAnalysis.h"
> +#include "llvm/Analysis/ScalarEvolution.h"
> +#include "llvm/Analysis/IVUsers.h"
> +#include "llvm/Analysis/LiveValues.h"
> +#include "llvm/Analysis/LoopDependenceAnalysis.h"
> +#include "llvm/Analysis/MemoryDependenceAnalysis.h"
> +#include "llvm/CodeGen/MachineFunctionAnalysis.h"
> +#include "llvm/CodeGen/MachineFunctionPass.h"
> +using namespace llvm;
> +
> +bool MachineFunctionPass::runOnFunction(Function &F) {
> + // Do not codegen any 'available_externally' functions at all, they have
> + // definitions outside the translation unit.
> + if (F.hasAvailableExternallyLinkage())
> + return false;
> +
> + MachineFunction &MF = getAnalysis<MachineFunctionAnalysis>().getMF();
> + return runOnMachineFunction(MF);
> +}
> +
> +void MachineFunctionPass::getAnalysisUsage(AnalysisUsage &AU) const {
> + AU.addRequired<MachineFunctionAnalysis>();
> +
> + // MachineFunctionPass preserves all LLVM IR passes, but there's no
> + // high-level way to express this. Instead, just list a bunch of
> + // passes explicitly.
> + AU.addPreserved<AliasAnalysis>();
> + AU.addPreserved<ScalarEvolution>();
> + AU.addPreserved<IVUsers>();
> + AU.addPreserved<LoopDependenceAnalysis>();
> + AU.addPreserved<MemoryDependenceAnalysis>();
> + AU.addPreserved<LiveValues>();
> + AU.addPreserved<MachineFunctionAnalysis>();
> + AU.setPreservesCFG();
> +
> + FunctionPass::getAnalysisUsage(AU);
> +}
>
> Modified: llvm/trunk/lib/CodeGen/MachineLoopInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineLoopInfo.cpp?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineLoopInfo.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineLoopInfo.cpp Thu Jul 30 20:52:50 2009
> @@ -41,4 +41,5 @@
> void MachineLoopInfo::getAnalysisUsage(AnalysisUsage &AU) const {
> AU.setPreservesAll();
> AU.addRequired<MachineDominatorTree>();
> + MachineFunctionPass::getAnalysisUsage(AU);
> }
>
> Modified: llvm/trunk/lib/CodeGen/MachineVerifier.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineVerifier.cpp?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineVerifier.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineVerifier.cpp Thu Jul 30 20:52:50 2009
> @@ -55,6 +55,7 @@
>
> void getAnalysisUsage(AnalysisUsage &AU) const {
> AU.setPreservesAll();
> + MachineFunctionPass::getAnalysisUsage(AU);
> }
>
> bool runOnMachineFunction(MachineFunction &MF);
>
> Modified: llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Thu Jul 30 20:52:50 2009
> @@ -111,7 +111,6 @@
>
> #if 0
> void PEI::getAnalysisUsage(AnalysisUsage &AU) const {
> - AU.setPreservesCFG();
> if (ShrinkWrapping || ShrinkWrapFunc != "") {
> AU.addRequired<MachineLoopInfo>();
> AU.addRequired<MachineDominatorTree>();
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Thu Jul 30 20:52:50 2009
> @@ -29,6 +29,7 @@
> #include "llvm/CodeGen/GCStrategy.h"
> #include "llvm/CodeGen/GCMetadata.h"
> #include "llvm/CodeGen/MachineFunction.h"
> +#include "llvm/CodeGen/MachineFunctionAnalysis.h"
> #include "llvm/CodeGen/MachineFrameInfo.h"
> #include "llvm/CodeGen/MachineInstrBuilder.h"
> #include "llvm/CodeGen/MachineJumpTableInfo.h"
> @@ -267,7 +268,7 @@
> //===----------------------------------------------------------------------===//
>
> SelectionDAGISel::SelectionDAGISel(TargetMachine &tm, CodeGenOpt::Level OL) :
> - FunctionPass(&ID), TM(tm), TLI(*tm.getTargetLowering()),
> + MachineFunctionPass(&ID), TM(tm), TLI(*tm.getTargetLowering()),
> FuncInfo(new FunctionLoweringInfo(TLI)),
> CurDAG(new SelectionDAG(TLI, *FuncInfo)),
> SDL(new SelectionDAGLowering(*CurDAG, TLI, *FuncInfo, OL)),
> @@ -291,9 +292,12 @@
> AU.addRequired<GCModuleInfo>();
> AU.addRequired<DwarfWriter>();
> AU.setPreservesAll();
> + MachineFunctionPass::getAnalysisUsage(AU);
> }
>
> -bool SelectionDAGISel::runOnFunction(Function &Fn) {
> +bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {
> + Function &Fn = *mf.getFunction();
> +
> // Do some sanity-checking on the command-line options.
> assert((!EnableFastISelVerbose || EnableFastISel) &&
> "-fast-isel-verbose requires -fast-isel");
> @@ -305,12 +309,11 @@
> if (Fn.hasAvailableExternallyLinkage())
> return false;
>
> -
> // Get alias analysis for load/store combining.
> AA = &getAnalysis<AliasAnalysis>();
>
> TargetMachine &TM = TLI.getTargetMachine();
> - MF = &MachineFunction::construct(&Fn, TM);
> + MF = &mf;
> const TargetInstrInfo &TII = *TM.getInstrInfo();
> const TargetRegisterInfo &TRI = *TM.getRegisterInfo();
>
>
> Modified: llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp (original)
> +++ llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp Thu Jul 30 20:52:50 2009
> @@ -253,10 +253,10 @@
> SPUtli(*tm.getTargetLowering())
> { }
>
> - virtual bool runOnFunction(Function &Fn) {
> + virtual bool runOnMachineFunction(MachineFunction &MF) {
> // Make sure we re-emit a set of the global base reg if necessary
> GlobalBaseReg = 0;
> - SelectionDAGISel::runOnFunction(Fn);
> + SelectionDAGISel::runOnMachineFunction(MF);
> return true;
> }
>
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp?rev=77654&r1=77653&r2=77654&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp Thu Jul 30 20:52:50 2009
> @@ -20,6 +20,7 @@
> #include "PPCHazardRecognizers.h"
> #include "llvm/CodeGen/MachineInstrBuilder.h"
> #include "llvm/CodeGen/MachineFunction.h"
> +#include "llvm/CodeGen/MachineFunctionAnalysis.h"
> #include "llvm/CodeGen/MachineRegisterInfo.h"
> #include "llvm/CodeGen/SelectionDAG.h"
> #include "llvm/CodeGen/SelectionDAGISel.h"
> @@ -51,17 +52,12 @@
> PPCLowering(*TM.getTargetLowering()),
> PPCSubTarget(*TM.getSubtargetImpl()) {}
>
> - virtual bool runOnFunction(Function &Fn) {
> - // Do not codegen any 'available_externally' functions at all, they have
> - // definitions outside the translation unit.
> - if (Fn.hasAvailableExternallyLinkage())
> - return false;
> -
> + virtual bool runOnMachineFunction(MachineFunction &MF) {
> // Make sure we re-emit a set of the global base reg if necessary
> GlobalBaseReg = 0;
> - SelectionDAGISel::runOnFunction(Fn);
> + SelectionDAGISel::runOnMachineFunction(MF);
>
> - InsertVRSaveCode(Fn);
> + InsertVRSaveCode(MF);
> return true;
> }
>
> @@ -181,7 +177,7 @@
> /// SelectionDAGISel when it has created a SelectionDAG for us to codegen.
> virtual void InstructionSelect();
>
> - void InsertVRSaveCode(Function &Fn);
> + void InsertVRSaveCode(MachineFunction &MF);
>
> virtual const char *getPassName() const {
> return "PowerPC DAG->DAG Pattern Instruction Selection";
> @@ -218,13 +214,12 @@
> /// InsertVRSaveCode - Once the entire function has been instruction selected,
> /// all virtual registers are created and all machine instructions are built,
> /// check to see if we need to save/restore VRSAVE. If so, do it.
> -void PPCDAGToDAGISel::InsertVRSaveCode(Function &F) {
> +void PPCDAGToDAGISel::InsertVRSaveCode(MachineFunction &Fn) {
> // Check to see if this function uses vector registers, which means we have to
> // save and restore the VRSAVE register and update it with the regs we use.
> //
> // In this case, there will be virtual registers of vector type type created
> // by the scheduler. Detect them now.
> - MachineFunction &Fn = MachineFunction::get(&F);
> bool HasVectorVReg = false;
> for (unsigned i = TargetRegisterInfo::FirstVirtualRegister,
> e = RegInfo->getLastVirtReg()+1; i != e; ++i)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list