diff options
author | Alkis Evlogimenos <alkis@evlogimenos.com> | 2003-12-18 22:40:24 +0000 |
---|---|---|
committer | Alkis Evlogimenos <alkis@evlogimenos.com> | 2003-12-18 22:40:24 +0000 |
commit | 4c080863de86448d905beab27686da823b6d44c1 (patch) | |
tree | 62e104baee7dd17b6f324af45a95d7bdabd07ec9 | |
parent | 78cb3f218ae2b6e7200e81a21642fd2d269e46c7 (diff) | |
download | external_llvm-4c080863de86448d905beab27686da823b6d44c1.zip external_llvm-4c080863de86448d905beab27686da823b6d44c1.tar.gz external_llvm-4c080863de86448d905beab27686da823b6d44c1.tar.bz2 |
Remove TwoAddressInstruction from the public headers and add an ID
instead, since this pass doesn't expose any state to its users.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10520 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/Passes.h | 5 | ||||
-rw-r--r-- | include/llvm/CodeGen/TwoAddressInstructionPass.h | 51 | ||||
-rw-r--r-- | lib/CodeGen/LiveIntervalAnalysis.cpp | 3 | ||||
-rw-r--r-- | lib/CodeGen/RegAllocLocal.cpp | 3 | ||||
-rw-r--r-- | lib/CodeGen/TwoAddressInstructionPass.cpp | 21 |
5 files changed, 26 insertions, 57 deletions
diff --git a/include/llvm/CodeGen/Passes.h b/include/llvm/CodeGen/Passes.h index 8868de1..3aee4ce 100644 --- a/include/llvm/CodeGen/Passes.h +++ b/include/llvm/CodeGen/Passes.h @@ -28,6 +28,11 @@ class TargetMachine; // extern const PassInfo *PHIEliminationID; +// TwoAddressInstruction pass - This pass reduces two-address +// instructions to use two operands. This destroys SSA information but +// it is desired by register allocators. +extern const PassInfo *TwoAddressInstructionPassID; + /// Creates a register allocator as the user specified on the command /// line. FunctionPass *createRegisterAllocator(); diff --git a/include/llvm/CodeGen/TwoAddressInstructionPass.h b/include/llvm/CodeGen/TwoAddressInstructionPass.h deleted file mode 100644 index b268154..0000000 --- a/include/llvm/CodeGen/TwoAddressInstructionPass.h +++ /dev/null @@ -1,51 +0,0 @@ -//===-- llvm/CodeGen/TwoAddressInstructionPass.h - Two-Address instruction pass -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Two-Address instruction rewriter pass. In -// some architectures instructions have a combined source/destination -// operand. In those cases the instruction cannot have three operands -// as the destination is implicit (for example ADD %EAX, %EBX on the -// IA-32). After code generation this restrictions are not handled and -// instructions may have three operands. This pass remedies this and -// reduces all two-address instructions to two operands. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CODEGEN_TWOADDRESSINSTRUCTIONPASS_H -#define LLVM_CODEGEN_TWOADDRESSINSTRUCTIONPASS_H - -#include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/CodeGen/MachineBasicBlock.h" -#include <iostream> -#include <map> - -namespace llvm { - - class LiveVariables; - class MRegisterInfo; - - class TwoAddressInstructionPass : public MachineFunctionPass - { - private: - MachineFunction* mf_; - const TargetMachine* tm_; - const MRegisterInfo* mri_; - LiveVariables* lv_; - - public: - virtual void getAnalysisUsage(AnalysisUsage &AU) const; - - private: - /// runOnMachineFunction - pass entry point - bool runOnMachineFunction(MachineFunction&); - }; - -} // End llvm namespace - -#endif diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index d818d0b..74426d5 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -24,7 +24,6 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/SSARegMap.h" -#include "llvm/CodeGen/TwoAddressInstructionPass.h" #include "llvm/Target/MRegisterInfo.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetMachine.h" @@ -50,7 +49,7 @@ void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const AU.addRequired<LiveVariables>(); AU.addPreservedID(PHIEliminationID); AU.addRequiredID(PHIEliminationID); - AU.addRequired<TwoAddressInstructionPass>(); + AU.addRequiredID(TwoAddressInstructionPassID); MachineFunctionPass::getAnalysisUsage(AU); } diff --git a/lib/CodeGen/RegAllocLocal.cpp b/lib/CodeGen/RegAllocLocal.cpp index d3e80e0..88699d0 100644 --- a/lib/CodeGen/RegAllocLocal.cpp +++ b/lib/CodeGen/RegAllocLocal.cpp @@ -19,7 +19,6 @@ #include "llvm/CodeGen/SSARegMap.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/LiveVariables.h" -#include "llvm/CodeGen/TwoAddressInstructionPass.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetMachine.h" #include "Support/CommandLine.h" @@ -113,7 +112,7 @@ namespace { if (!DisableKill) AU.addRequired<LiveVariables>(); AU.addRequiredID(PHIEliminationID); - AU.addRequired<TwoAddressInstructionPass>(); + AU.addRequiredID(TwoAddressInstructionPassID); MachineFunctionPass::getAnalysisUsage(AU); } diff --git a/lib/CodeGen/TwoAddressInstructionPass.cpp b/lib/CodeGen/TwoAddressInstructionPass.cpp index 0716ca9..7bd3f04 100644 --- a/lib/CodeGen/TwoAddressInstructionPass.cpp +++ b/lib/CodeGen/TwoAddressInstructionPass.cpp @@ -16,7 +16,6 @@ //===----------------------------------------------------------------------===// #define DEBUG_TYPE "twoaddrinstr" -#include "llvm/CodeGen/TwoAddressInstructionPass.h" #include "llvm/Function.h" #include "llvm/CodeGen/LiveVariables.h" #include "llvm/CodeGen/MachineFrameInfo.h" @@ -36,7 +35,23 @@ using namespace llvm; namespace { - RegisterAnalysis<TwoAddressInstructionPass> X( + class TwoAddressInstructionPass : public MachineFunctionPass + { + private: + MachineFunction* mf_; + const TargetMachine* tm_; + const MRegisterInfo* mri_; + LiveVariables* lv_; + + public: + virtual void getAnalysisUsage(AnalysisUsage &AU) const; + + private: + /// runOnMachineFunction - pass entry point + bool runOnMachineFunction(MachineFunction&); + }; + + RegisterPass<TwoAddressInstructionPass> X( "twoaddressinstruction", "Two-Address instruction pass"); Statistic<> numTwoAddressInstrs("twoaddressinstruction", @@ -45,6 +60,8 @@ namespace { "Number of instructions added"); }; +const PassInfo *llvm::TwoAddressInstructionPassID = X.getPassInfo(); + void TwoAddressInstructionPass::getAnalysisUsage(AnalysisUsage &AU) const { AU.addPreserved<LiveVariables>(); |