[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