[llvm] r176161 - Add the skeleton for the Mips constant island pass.

Dmitri Gribenko gribozavr at gmail.com
Wed Feb 27 07:53:47 PST 2013


On Wed, Feb 27, 2013 at 5:33 AM, Reed Kotler <rkotler at mips.com> wrote:
> Author: rkotler
> Date: Tue Feb 26 21:33:58 2013
> New Revision: 176161
>
> URL: http://llvm.org/viewvc/llvm-project?rev=176161&view=rev
> Log:
> Add the skeleton for the Mips constant island pass.
> It will only be used for Mips 16 at this time.
>
>
> Added:
>     llvm/trunk/lib/Target/Mips/MipsConstantIslandPass.cpp
> Modified:
>     llvm/trunk/lib/Target/Mips/CMakeLists.txt
>     llvm/trunk/lib/Target/Mips/Mips.h
>     llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp
>
> Modified: llvm/trunk/lib/Target/Mips/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/CMakeLists.txt?rev=176161&r1=176160&r2=176161&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/CMakeLists.txt (original)
> +++ llvm/trunk/lib/Target/Mips/CMakeLists.txt Tue Feb 26 21:33:58 2013
> @@ -20,6 +20,7 @@ add_llvm_target(MipsCodeGen
>    MipsAnalyzeImmediate.cpp
>    MipsAsmPrinter.cpp
>    MipsCodeEmitter.cpp
> +  MipsConstantIslandPass.cpp
>    MipsDelaySlotFiller.cpp
>    MipsJITInfo.cpp
>    MipsInstrInfo.cpp
>
> Modified: llvm/trunk/lib/Target/Mips/Mips.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/Mips.h?rev=176161&r1=176160&r2=176161&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/Mips.h (original)
> +++ llvm/trunk/lib/Target/Mips/Mips.h Tue Feb 26 21:33:58 2013
> @@ -27,6 +27,7 @@ namespace llvm {
>    FunctionPass *createMipsLongBranchPass(MipsTargetMachine &TM);
>    FunctionPass *createMipsJITCodeEmitterPass(MipsTargetMachine &TM,
>                                               JITCodeEmitter &JCE);
> +  FunctionPass *createMipsConstantIslandPass(MipsTargetMachine &tm);
>
>  } // end namespace llvm;
>
>
> Added: llvm/trunk/lib/Target/Mips/MipsConstantIslandPass.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsConstantIslandPass.cpp?rev=176161&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsConstantIslandPass.cpp (added)
> +++ llvm/trunk/lib/Target/Mips/MipsConstantIslandPass.cpp Tue Feb 26 21:33:58 2013
> @@ -0,0 +1,85 @@
> +//===-- MipsLongBranch.cpp - Emit long branches ---------------------------===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +//
> +// This pass is used to make Pc relative loads of constants.
> +// For now, only Mips16 will use this. While it has the same name and
> +// uses many ideas from the LLVM ARM Constant Island Pass, it's not intended
> +// to reuse any of the code from the ARM version.
> +//
> +// Loading constants inline is expensive on Mips16 and it's in general better
> +// to place the constant nearby in code space and then it can be loaded with a
> +// simple 16 bit load instruction.
> +//
> +// The constants can be not just numbers but addresses of functions and labels.
> +// This can be particularly helpful in static relocation mode for embedded
> +// non linux targets.
> +//
> +//
> +
> +#define DEBUG_TYPE "mips-constant-islands"
> +
> +#include "Mips.h"
> +#include "MCTargetDesc/MipsBaseInfo.h"
> +#include "MipsTargetMachine.h"
> +#include "llvm/ADT/Statistic.h"
> +#include "llvm/CodeGen/MachineFunctionPass.h"
> +#include "llvm/CodeGen/MachineInstrBuilder.h"
> +#include "llvm/IR/Function.h"
> +#include "llvm/Support/CommandLine.h"
> +#include "llvm/Support/MathExtras.h"
> +#include "llvm/Target/TargetInstrInfo.h"
> +#include "llvm/Target/TargetMachine.h"
> +#include "llvm/Target/TargetRegisterInfo.h"
> +
> +using namespace llvm;
> +
> +namespace {
> +  typedef MachineBasicBlock::iterator Iter;
> +  typedef MachineBasicBlock::reverse_iterator ReverseIter;
> +
> +  class MipsConstantIslands : public MachineFunctionPass {
> +
> +  public:
> +    static char ID;
> +    MipsConstantIslands(TargetMachine &tm)
> +      : MachineFunctionPass(ID), TM(tm),
> +        TII(static_cast<const MipsInstrInfo*>(tm.getInstrInfo())),
> +        IsPIC(TM.getRelocationModel() == Reloc::PIC_),
> +        ABI(TM.getSubtarget<MipsSubtarget>().getTargetABI()) {}
> +
> +    virtual const char *getPassName() const {
> +      return "Mips Constant Islands";
> +    }
> +
> +    bool runOnMachineFunction(MachineFunction &F);
> +
> +  private:
> +
> +
> +    const TargetMachine &TM;
> +    const MipsInstrInfo *TII;
> +    bool IsPIC;
> +    unsigned ABI;
> +
> +  };
> +
> +  char MipsConstantIslands::ID = 0;
> +} // end of anonymous namespace
> +
> +/// createMipsLongBranchPass - Returns a pass that converts branches to long
> +/// branches.
> +FunctionPass *llvm::createMipsConstantIslandPass(MipsTargetMachine &tm) {

Please avoid duplicating function name in comments when adding new
code.  (Use \brief.)

Dmitri

-- 
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/



More information about the llvm-commits mailing list