summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Target/Sparc/SparcInstrInfo.cpp5
-rw-r--r--llvm/lib/Target/Sparc/SparcInstrInfo.h2
-rw-r--r--llvm/test/CodeGen/SPARC/empty-functions.ll8
3 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/Sparc/SparcInstrInfo.cpp b/llvm/lib/Target/Sparc/SparcInstrInfo.cpp
index 8b2e6bc5f32..6836d8d6f68 100644
--- a/llvm/lib/Target/Sparc/SparcInstrInfo.cpp
+++ b/llvm/lib/Target/Sparc/SparcInstrInfo.cpp
@@ -37,6 +37,11 @@ SparcInstrInfo::SparcInstrInfo(SparcSubtarget &ST)
RI(ST), Subtarget(ST) {
}
+/// getNoopForMachoTarget - Return the noop instruction to use for a noop.
+void SparcInstrInfo::getNoopForMachoTarget(MCInst &NopInst) const {
+ NopInst.setOpcode(SP::NOP);
+}
+
/// isLoadFromStackSlot - If the specified machine instruction is a direct
/// load from a stack slot, return the virtual or physical register number of
/// the destination along with the FrameIndex of the loaded stack slot. If
diff --git a/llvm/lib/Target/Sparc/SparcInstrInfo.h b/llvm/lib/Target/Sparc/SparcInstrInfo.h
index fe93ed7b57c..2c39bbc3000 100644
--- a/llvm/lib/Target/Sparc/SparcInstrInfo.h
+++ b/llvm/lib/Target/Sparc/SparcInstrInfo.h
@@ -93,6 +93,8 @@ public:
const TargetRegisterInfo *TRI) const override;
unsigned getGlobalBaseReg(MachineFunction *MF) const;
+
+ void getNoopForMachoTarget(MCInst &NopInst) const override;
};
}
diff --git a/llvm/test/CodeGen/SPARC/empty-functions.ll b/llvm/test/CodeGen/SPARC/empty-functions.ll
new file mode 100644
index 00000000000..92522994cc7
--- /dev/null
+++ b/llvm/test/CodeGen/SPARC/empty-functions.ll
@@ -0,0 +1,8 @@
+; RUN: llc < %s -mtriple=sparc-unknown-openbsd -disable-fp-elim | FileCheck -check-prefix=CHECK-FP-LABEL %s
+
+define void @func() {
+entry:
+ unreachable
+}
+; CHECK-FP-LABEL: {{_?}}func:
+; CHECK-FP-LABEL: nop {{[;!]}} avoids zero-length function
OpenPOWER on IntegriCloud