Rafael Espindola | 2050af8 | 2011-05-16 03:05:33 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -tailcallelim -S | FileCheck %s |
Bill Wendling | 42cf65f | 2011-10-17 18:25:32 +0000 | [diff] [blame^] | 2 | ; XFAIL: * |
Rafael Espindola | 2050af8 | 2011-05-16 03:05:33 +0000 | [diff] [blame] | 3 | |
Rafael Espindola | 79d0c4f | 2011-10-05 20:05:13 +0000 | [diff] [blame] | 4 | ; Test that we don't tail call in a functions that calls returns_twice |
| 5 | ; functions. |
Rafael Espindola | 2050af8 | 2011-05-16 03:05:33 +0000 | [diff] [blame] | 6 | |
Rafael Espindola | 79d0c4f | 2011-10-05 20:05:13 +0000 | [diff] [blame] | 7 | declare void @bar() |
| 8 | |
| 9 | ; CHECK: foo1 |
Rafael Espindola | 2050af8 | 2011-05-16 03:05:33 +0000 | [diff] [blame] | 10 | ; CHECK-NOT: tail call void @bar() |
| 11 | |
Rafael Espindola | 79d0c4f | 2011-10-05 20:05:13 +0000 | [diff] [blame] | 12 | define void @foo1(i32* %x) { |
Rafael Espindola | 2050af8 | 2011-05-16 03:05:33 +0000 | [diff] [blame] | 13 | bb: |
| 14 | %tmp75 = tail call i32 @setjmp(i32* %x) |
| 15 | call void @bar() |
| 16 | ret void |
| 17 | } |
| 18 | |
Bill Wendling | 42cf65f | 2011-10-17 18:25:32 +0000 | [diff] [blame^] | 19 | declare i32 @setjmp(i32*) returns_twice |
Rafael Espindola | 2050af8 | 2011-05-16 03:05:33 +0000 | [diff] [blame] | 20 | |
Rafael Espindola | 79d0c4f | 2011-10-05 20:05:13 +0000 | [diff] [blame] | 21 | ; CHECK: foo2 |
| 22 | ; CHECK-NOT: tail call void @bar() |
| 23 | |
| 24 | define void @foo2(i32* %x) { |
| 25 | bb: |
| 26 | %tmp75 = tail call i32 @zed2(i32* %x) |
| 27 | call void @bar() |
| 28 | ret void |
| 29 | } |
| 30 | declare i32 @zed2(i32*) returns_twice |