mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-12 22:26:14 +00:00
New testcases for inlining invoke instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8103 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9dd7d1c8eb
commit
8a376a591f
22
test/Transforms/Inline/invoke_test-1.ll
Normal file
22
test/Transforms/Inline/invoke_test-1.ll
Normal file
@ -0,0 +1,22 @@
|
||||
; Test that we can invoke a simple function, turning the calls in it into invoke
|
||||
; instructions
|
||||
|
||||
; RUN: as < %s | opt -inline | dis | not grep 'call[^e]'
|
||||
|
||||
declare void %might_throw()
|
||||
|
||||
implementation
|
||||
|
||||
internal void %callee() {
|
||||
call void %might_throw()
|
||||
ret void
|
||||
}
|
||||
|
||||
; caller returns true if might_throw throws an exception...
|
||||
int %caller() {
|
||||
invoke void %callee() to label %cont except label %exc
|
||||
cont:
|
||||
ret int 0
|
||||
exc:
|
||||
ret int 1
|
||||
}
|
27
test/Transforms/Inline/invoke_test-2.ll
Normal file
27
test/Transforms/Inline/invoke_test-2.ll
Normal file
@ -0,0 +1,27 @@
|
||||
; Test that if an invoked function is inlined, and if that function cannot
|
||||
; throw, that the dead handler is now unreachable.
|
||||
|
||||
; RUN: as < %s | opt -inline -simplifycfg | dis | not grep UnreachableExceptionHandler
|
||||
|
||||
declare void %might_throw()
|
||||
|
||||
implementation
|
||||
|
||||
internal int %callee() {
|
||||
invoke void %might_throw() to label %cont except label %exc
|
||||
cont:
|
||||
ret int 0
|
||||
exc:
|
||||
; This just consumes the exception!
|
||||
ret int 1
|
||||
}
|
||||
|
||||
; caller returns true if might_throw throws an exception...
|
||||
int %caller() {
|
||||
%X = invoke int %callee() to label %cont
|
||||
except label %UnreachableExceptionHandler
|
||||
cont:
|
||||
ret int %X
|
||||
UnreachableExceptionHandler:
|
||||
ret int -1 ; This is dead!
|
||||
}
|
29
test/Transforms/Inline/invoke_test-3.ll
Normal file
29
test/Transforms/Inline/invoke_test-3.ll
Normal file
@ -0,0 +1,29 @@
|
||||
; Test that any rethrown exceptions in an inlined function are automatically
|
||||
; turned into branches to the invoke destination.
|
||||
|
||||
; RUN: as < %s | opt -inline | dis | not grep 'call void %llvm.exc.rethrow'
|
||||
|
||||
declare void %might_throw()
|
||||
declare void %llvm.exc.rethrow()
|
||||
|
||||
implementation
|
||||
|
||||
internal int %callee() {
|
||||
invoke void %might_throw() to label %cont except label %exc
|
||||
cont:
|
||||
ret int 0
|
||||
exc: ; This just rethrows the exception!
|
||||
call void %llvm.exc.rethrow()
|
||||
ret int 0
|
||||
}
|
||||
|
||||
; caller returns true if might_throw throws an exception...
|
||||
int %caller() {
|
||||
%X = invoke int %callee() to label %cont
|
||||
except label %Handler
|
||||
cont:
|
||||
ret int %X
|
||||
Handler:
|
||||
; This consumes an exception thrown by might_throw
|
||||
ret int -1
|
||||
}
|
Loading…
Reference in New Issue
Block a user