Handle code gen for the unreachable instruction if it's the only instruction in
authorBill Wendling <isanbard@gmail.com>
Thu, 15 Jul 2010 23:32:40 +0000 (23:32 +0000)
committerBill Wendling <isanbard@gmail.com>
Thu, 15 Jul 2010 23:32:40 +0000 (23:32 +0000)
commite9bf7e692e56656ef13b33af86624d0fdcd578fb
tree2cb585a3c4d0fbf8bb51f00db689241d03af0ad0
parent60108e96bbc5432f4fe06ba313e64448e97a0e15
Handle code gen for the unreachable instruction if it's the only instruction in
the function. We'll just turn it into a "trap" instruction instead.

The problem with not handling this is that it might generate a prologue without
the equivalent epilogue to go with it:

$ cat t.ll
define void @foo() {
entry:
  unreachable
}
$ llc -o - t.ll -relocation-model=pic -disable-fp-elim -unwind-tables
        .section        __TEXT,__text,regular,pure_instructions
        .globl  _foo
        .align  4, 0x90
_foo:                                   ## @foo
Leh_func_begin0:
## BB#0:                                ## %entry
        pushq   %rbp
Ltmp0:
        movq    %rsp, %rbp
Ltmp1:
Leh_func_end0:
...

The unwind tables then have bad data in them causing all sorts of problems.

Fixes <rdar://problem/8096481>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108473 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h
test/CodeGen/PowerPC/2008-01-25-EmptyFunction.ll
test/CodeGen/X86/2008-01-25-EmptyFunction.ll