diff --git a/clang/test/CodeGen/Mips/unreachable.cpp b/clang/test/CodeGen/Mips/unreachable.cpp new file mode 100644 index 0000000000000..04fec8598088d --- /dev/null +++ b/clang/test/CodeGen/Mips/unreachable.cpp @@ -0,0 +1,13 @@ +// REQUIRES: mips-registered-target +// RUN: %clang_cc1 -triple mipsel-w64-windows-gnu -x c++ -mrelocation-model static -emit-obj %s -o - | llvm-objdump -a - | FileCheck %s +// CHECK: file format coff-mips + +[[__noreturn__]] inline void g() { + __builtin_unreachable(); +} + +void f(int i) +{ + if (i == 0) + g(); +} diff --git a/llvm/lib/Target/Mips/MipsInstrInfo.cpp b/llvm/lib/Target/Mips/MipsInstrInfo.cpp index b81bb1186de72..7f7bb259000a5 100644 --- a/llvm/lib/Target/Mips/MipsInstrInfo.cpp +++ b/llvm/lib/Target/Mips/MipsInstrInfo.cpp @@ -87,6 +87,14 @@ MipsInstrInfo::GetMemOperand(MachineBasicBlock &MBB, int FI, MFI.getObjectAlign(FI)); } +MCInst MipsInstrInfo::getNop() const { + MCInst Nop; + // using Mips::NOP gives + // "fatal error: error in backend: Not supported instr: " + Nop.setOpcode(Mips::SSNOP); + return Nop; +} + //===----------------------------------------------------------------------===// // Branch Analysis //===----------------------------------------------------------------------===// diff --git a/llvm/lib/Target/Mips/MipsInstrInfo.h b/llvm/lib/Target/Mips/MipsInstrInfo.h index 06964c0161b4b..367f0ac5e8390 100644 --- a/llvm/lib/Target/Mips/MipsInstrInfo.h +++ b/llvm/lib/Target/Mips/MipsInstrInfo.h @@ -59,6 +59,8 @@ class MipsInstrInfo : public MipsGenInstrInfo { static const MipsInstrInfo *create(MipsSubtarget &STI); + MCInst getNop() const override; + /// Branch Analysis bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB,