Current Path : /usr/src/contrib/llvm/lib/Target/Mips/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/src/contrib/llvm/lib/Target/Mips/MipsAnalyzeImmediate.h |
//===-- MipsAnalyzeImmediate.h - Analyze Immediates ------------*- C++ -*--===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef MIPS_ANALYZE_IMMEDIATE_H #define MIPS_ANALYZE_IMMEDIATE_H #include "llvm/ADT/SmallVector.h" #include "llvm/Support/DataTypes.h" namespace llvm { class MipsAnalyzeImmediate { public: struct Inst { unsigned Opc, ImmOpnd; Inst(unsigned Opc, unsigned ImmOpnd); }; typedef SmallVector<Inst, 7 > InstSeq; /// Analyze - Get an instrucion sequence to load immediate Imm. The last /// instruction in the sequence must be an ADDiu if LastInstrIsADDiu is /// true; const InstSeq &Analyze(uint64_t Imm, unsigned Size, bool LastInstrIsADDiu); private: typedef SmallVector<InstSeq, 5> InstSeqLs; /// AddInstr - Add I to all instruction sequences in SeqLs. void AddInstr(InstSeqLs &SeqLs, const Inst &I); /// GetInstSeqLsADDiu - Get instrucion sequences which end with an ADDiu to /// load immediate Imm void GetInstSeqLsADDiu(uint64_t Imm, unsigned RemSize, InstSeqLs &SeqLs); /// GetInstSeqLsORi - Get instrucion sequences which end with an ORi to /// load immediate Imm void GetInstSeqLsORi(uint64_t Imm, unsigned RemSize, InstSeqLs &SeqLs); /// GetInstSeqLsSLL - Get instrucion sequences which end with a SLL to /// load immediate Imm void GetInstSeqLsSLL(uint64_t Imm, unsigned RemSize, InstSeqLs &SeqLs); /// GetInstSeqLs - Get instrucion sequences to load immediate Imm. void GetInstSeqLs(uint64_t Imm, unsigned RemSize, InstSeqLs &SeqLs); /// ReplaceADDiuSLLWithLUi - Replace an ADDiu & SLL pair with a LUi. void ReplaceADDiuSLLWithLUi(InstSeq &Seq); /// GetShortestSeq - Find the shortest instruction sequence in SeqLs and /// return it in Insts. void GetShortestSeq(InstSeqLs &SeqLs, InstSeq &Insts); unsigned Size; unsigned ADDiu, ORi, SLL, LUi; InstSeq Insts; }; } #endif