| ; RUN: opt < %s -globalopt -S | \ | |
| ; RUN: grep {call void @Actual} | |
| ; Check that a comparison does not prevent an indirect call from being made | |
| ; direct. The global will still remain, but indirect call elim is still good. | |
| @G = internal global void ()* null ; <void ()**> [#uses=2] | |
| define internal void @Actual() { | |
| ret void | |
| } | |
| define void @init() { | |
| store void ()* @Actual, void ()** @G | |
| ret void | |
| } | |
| define void @doit() { | |
| %FP = load void ()** @G ; <void ()*> [#uses=2] | |
| %CC = icmp eq void ()* %FP, null ; <i1> [#uses=1] | |
| br i1 %CC, label %isNull, label %DoCall | |
| DoCall: ; preds = %0 | |
| call void %FP( ) | |
| ret void | |
| isNull: ; preds = %0 | |
| ret void | |
| } | |