llvm-6502/test/CodeGen/Mips/insn-zero-size-bb.ll
Vasileios Kalintiris ca33d72658 [mips] Emit the .insn directive for empty basic blocks.
Summary:
In microMIPS, labels need to know whether they are on code or data. This is
indicated with STO_MIPS_MICROMIPS and can be inferred by being followed
by instructions. For empty basic blocks, we can ensure this by emitting the
.insn directive after the label.

Also, this fixes some failures in our out-of-tree microMIPS buildbots, for the
exception handling regression tests under: SingleSource/Regression/C++/EH

Reviewers: dsanders

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D9530

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236815 91177308-0d34-0410-b5e6-96231b3b80d8
2015-05-08 09:10:15 +00:00

28 lines
726 B
LLVM

; RUN: llc < %s -march=mips -mcpu=mips32 | FileCheck %s
; RUN: llc < %s -march=mips -mcpu=mips32r3 -mattr=+micromips | FileCheck %s
; RUN: llc < %s -march=mips -mcpu=mips16 | FileCheck %s
; Verify that we emit the .insn directive for zero-sized (empty) basic blocks.
; This only really matters for microMIPS and MIPS16.
declare i32 @foo(...)
declare void @bar()
define void @main() {
entry:
invoke void @bar() #0
to label %unreachable unwind label %return
unreachable:
; CHECK: ${{.*}}: # %unreachable
; CHECK-NEXT: .insn
unreachable
return:
%0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @foo to i8*)
catch i8* null
ret void
}
attributes #0 = { noreturn }