diff options
Diffstat (limited to 'llvm/lib/Target/Mips/MipsSubtarget.cpp')
| -rw-r--r-- | llvm/lib/Target/Mips/MipsSubtarget.cpp | 16 | 
1 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/Target/Mips/MipsSubtarget.cpp b/llvm/lib/Target/Mips/MipsSubtarget.cpp index cbc2ef79e4f..2dc70e2b5b5 100644 --- a/llvm/lib/Target/Mips/MipsSubtarget.cpp +++ b/llvm/lib/Target/Mips/MipsSubtarget.cpp @@ -76,9 +76,10 @@ MipsSubtarget::MipsSubtarget(const Triple &TT, StringRef CPU, StringRef FS,        HasDSPR2(false), HasDSPR3(false), AllowMixed16_32(Mixed16_32 | Mips_Os16),        Os16(Mips_Os16), HasMSA(false), UseTCCInDIV(false), HasSym32(false),        HasEVA(false), DisableMadd4(false), HasMT(false), -      StackAlignOverride(StackAlignOverride), TM(TM), TargetTriple(TT), -      TSInfo(), InstrInfo(MipsInstrInfo::create( -                    initializeSubtargetDependencies(CPU, FS, TM))), +      UseIndirectJumpsHazard(false), StackAlignOverride(StackAlignOverride), +      TM(TM), TargetTriple(TT), TSInfo(), +      InstrInfo( +          MipsInstrInfo::create(initializeSubtargetDependencies(CPU, FS, TM))),        FrameLowering(MipsFrameLowering::create(*this)),        TLInfo(MipsTargetLowering::create(TM, *this)) { @@ -111,6 +112,15 @@ MipsSubtarget::MipsSubtarget(const Triple &TT, StringRef CPU, StringRef FS,    if (hasMips64r6() && InMicroMipsMode)      report_fatal_error("microMIPS64R6 is not supported", false); + +  if (UseIndirectJumpsHazard) { +    if (InMicroMipsMode) +      report_fatal_error( +          "cannot combine indirect jumps with hazard barriers and microMIPS"); +    if (!hasMips32r2()) +      report_fatal_error( +          "indirect jumps with hazard barriers requires MIPS32R2 or later"); +  }    if (hasMips32r6()) {      StringRef ISA = hasMips64r6() ? "MIPS64r6" : "MIPS32r6";  | 

