llvm/test/CodeGen/X86/personality.ll
Chris Lattner 228252f981 Make a new X8632_MachoTargetObjectFile TLOF implementation whose
getSymbolForDwarfGlobalReference is smart enough to know that it 
needs to register the stub it references with MachineModuleInfoMachO,
so that it gets emitted at the end of the file.

Move stub emission from X86ATTAsmPrinter::doFinalization to the
new X86ATTAsmPrinter::EmitEndOfAsmFile asmprinter hook.  The important
thing here is that EmitEndOfAsmFile is called *after* the ehframes are
emitted, so we get all the stubs.

This allows us to remove a gross hack from the asmprinter where it would
"just know" that it needed to output stubs for personality functions.
Now this is all driven from a consistent interface.

The testcase change is just reordering the expected output now that the
stubs come out after the ehframe instead of before.

This also unblocks other changes that Bill wants to make.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82269 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-18 20:22:52 +00:00

51 lines
1.4 KiB
LLVM

; RUN: llc < %s -mtriple=x86_64-apple-darwin9 | FileCheck %s -check-prefix=X64
; RUN: llc < %s -mtriple=i386-apple-darwin9 | FileCheck %s -check-prefix=X32
; PR1632
define void @_Z1fv() {
entry:
invoke void @_Z1gv( )
to label %return unwind label %unwind
unwind: ; preds = %entry
br i1 false, label %eh_then, label %cleanup20
eh_then: ; preds = %unwind
invoke void @__cxa_end_catch( )
to label %return unwind label %unwind10
unwind10: ; preds = %eh_then
%eh_select13 = tail call i64 (i8*, i8*, ...)* @llvm.eh.selector.i64( i8* null, i8* bitcast (void ()* @__gxx_personality_v0 to i8*), i32 1 ) ; <i32> [#uses=2]
%tmp18 = icmp slt i64 %eh_select13, 0 ; <i1> [#uses=1]
br i1 %tmp18, label %filter, label %cleanup20
filter: ; preds = %unwind10
unreachable
cleanup20: ; preds = %unwind10, %unwind
%eh_selector.0 = phi i64 [ 0, %unwind ], [ %eh_select13, %unwind10 ] ; <i32> [#uses=0]
ret void
return: ; preds = %eh_then, %entry
ret void
}
declare void @_Z1gv()
declare i64 @llvm.eh.selector.i64(i8*, i8*, ...)
declare void @__gxx_personality_v0()
declare void @__cxa_end_catch()
; X64: Leh_frame_common_begin:
; X64: .long ___gxx_personality_v0@GOTPCREL+4
; X32: Leh_frame_common_begin:
; X32: .long L___gxx_personality_v0$non_lazy_ptr-
; ....
; X32: .section __IMPORT,__pointers,non_lazy_symbol_pointers
; X32: L___gxx_personality_v0$non_lazy_ptr:
; X32: .indirect_symbol ___gxx_personality_v0