storepointer-compare.ll 777 B

123456789101112131415161718192021222324252627282930
  1. ; RUN: opt < %s -globalopt -S | \
  2. ; RUN: grep "call void @Actual"
  3. ; Check that a comparison does not prevent an indirect call from being made
  4. ; direct. The global will still remain, but indirect call elim is still good.
  5. @G = internal global void ()* null ; <void ()**> [#uses=2]
  6. define internal void @Actual() {
  7. ret void
  8. }
  9. define void @init() {
  10. store void ()* @Actual, void ()** @G
  11. ret void
  12. }
  13. define void @doit() {
  14. %FP = load void ()*, void ()** @G ; <void ()*> [#uses=2]
  15. %CC = icmp eq void ()* %FP, null ; <i1> [#uses=1]
  16. br i1 %CC, label %isNull, label %DoCall
  17. DoCall: ; preds = %0
  18. call void %FP( )
  19. ret void
  20. isNull: ; preds = %0
  21. ret void
  22. }