[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