[llvm-commits] CVS: llvm/test/Regression/Transforms/Inline/invoke_test-1.ll invoke_test-2.ll invoke_test-3.ll

Chris Lattner lattner at cs.uiuc.edu
Sun Aug 24 01:56:02 PDT 2003


Changes in directory llvm/test/Regression/Transforms/Inline:

invoke_test-1.ll added (r1.1)
invoke_test-2.ll added (r1.1)
invoke_test-3.ll added (r1.1)

---
Log message:

New testcases for inlining invoke instructions


---
Diffs of the changes:

Index: llvm/test/Regression/Transforms/Inline/invoke_test-1.ll
diff -c /dev/null llvm/test/Regression/Transforms/Inline/invoke_test-1.ll:1.1
*** /dev/null	Sun Aug 24 01:55:17 2003
--- llvm/test/Regression/Transforms/Inline/invoke_test-1.ll	Sun Aug 24 01:55:06 2003
***************
*** 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
+ }


Index: llvm/test/Regression/Transforms/Inline/invoke_test-2.ll
diff -c /dev/null llvm/test/Regression/Transforms/Inline/invoke_test-2.ll:1.1
*** /dev/null	Sun Aug 24 01:55:17 2003
--- llvm/test/Regression/Transforms/Inline/invoke_test-2.ll	Sun Aug 24 01:55:07 2003
***************
*** 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!
+ }


Index: llvm/test/Regression/Transforms/Inline/invoke_test-3.ll
diff -c /dev/null llvm/test/Regression/Transforms/Inline/invoke_test-3.ll:1.1
*** /dev/null	Sun Aug 24 01:55:17 2003
--- llvm/test/Regression/Transforms/Inline/invoke_test-3.ll	Sun Aug 24 01:55:07 2003
***************
*** 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
+ }





More information about the llvm-commits mailing list