| Dan Gohman | 1880092 | 2009-09-11 18:01:28 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -globalopt -S | \ |
| Chandler Carruth | a5a29f9 | 2012-07-02 12:47:22 +0000 | [diff] [blame] | 2 | ; RUN: grep "call void @Actual" |
| Chris Lattner | cd1e756 | 2004-10-10 23:12:33 +0000 | [diff] [blame] | 3 | |
| 4 | ; Check that a comparison does not prevent an indirect call from being made |
| 5 | ; direct. The global will still remain, but indirect call elim is still good. |
| 6 | |
| Tanya Lattner | 5640bd1 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 7 | @G = internal global void ()* null ; <void ()**> [#uses=2] |
| Chris Lattner | cd1e756 | 2004-10-10 23:12:33 +0000 | [diff] [blame] | 8 | |
| Tanya Lattner | 5640bd1 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 9 | define internal void @Actual() { |
| 10 | ret void |
| Chris Lattner | cd1e756 | 2004-10-10 23:12:33 +0000 | [diff] [blame] | 11 | } |
| 12 | |
| Tanya Lattner | 5640bd1 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 13 | define void @init() { |
| 14 | store void ()* @Actual, void ()** @G |
| 15 | ret void |
| Chris Lattner | cd1e756 | 2004-10-10 23:12:33 +0000 | [diff] [blame] | 16 | } |
| 17 | |
| Tanya Lattner | 5640bd1 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 18 | define void @doit() { |
| 19 | %FP = load void ()** @G ; <void ()*> [#uses=2] |
| 20 | %CC = icmp eq void ()* %FP, null ; <i1> [#uses=1] |
| 21 | br i1 %CC, label %isNull, label %DoCall |
| 22 | |
| 23 | DoCall: ; preds = %0 |
| 24 | call void %FP( ) |
| 25 | ret void |
| 26 | |
| 27 | isNull: ; preds = %0 |
| 28 | ret void |
| Chris Lattner | cd1e756 | 2004-10-10 23:12:33 +0000 | [diff] [blame] | 29 | } |
| Tanya Lattner | 5640bd1 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 30 | |