mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 03:23:01 +02:00
6d75c08f47
MipsLongBranchPass and MipsHazardSchedule passes are joined to one pass because of mutual conflict. When MipsHazardSchedule inserts 'nop's, it potentially breaks some jumps, so they have to be expanded to long branches. When some branch is expanded to long branch, it potentially creates a hazard situation, which should be fixed by adding nops. New pass is called MipsBranchExpansion, it combines these two passes, and runs them alternately until one of them reports no changes were made. Differential Revision: https://reviews.llvm.org/D46641 llvm-svn: 332977
49 lines
1.6 KiB
C++
49 lines
1.6 KiB
C++
//===-- Mips.h - Top-level interface for Mips representation ----*- C++ -*-===//
|
|
//
|
|
// 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 entry points for global functions defined in
|
|
// the LLVM Mips back-end.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_MIPS_MIPS_H
|
|
#define LLVM_LIB_TARGET_MIPS_MIPS_H
|
|
|
|
#include "MCTargetDesc/MipsMCTargetDesc.h"
|
|
#include "llvm/Target/TargetMachine.h"
|
|
|
|
namespace llvm {
|
|
class MipsTargetMachine;
|
|
class ModulePass;
|
|
class FunctionPass;
|
|
class MipsRegisterBankInfo;
|
|
class MipsSubtarget;
|
|
class MipsTargetMachine;
|
|
class InstructionSelector;
|
|
|
|
ModulePass *createMipsOs16Pass();
|
|
ModulePass *createMips16HardFloatPass();
|
|
|
|
FunctionPass *createMipsModuleISelDagPass();
|
|
FunctionPass *createMipsOptimizePICCallPass();
|
|
FunctionPass *createMipsDelaySlotFillerPass();
|
|
FunctionPass *createMipsBranchExpansion();
|
|
FunctionPass *createMipsConstantIslandPass();
|
|
FunctionPass *createMicroMipsSizeReductionPass();
|
|
|
|
InstructionSelector *createMipsInstructionSelector(const MipsTargetMachine &,
|
|
MipsSubtarget &,
|
|
MipsRegisterBankInfo &);
|
|
|
|
void initializeMipsDelaySlotFillerPass(PassRegistry &);
|
|
void initializeMipsBranchExpansionPass(PassRegistry &);
|
|
} // end namespace llvm;
|
|
|
|
#endif
|