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