invoke-cost.ll 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. ; RUN: opt -inline < %s -S -o - -inline-threshold=100 | FileCheck %s
  2. target datalayout = "p:32:32"
  3. @glbl = external global i32
  4. declare void @f()
  5. declare i32 @__gxx_personality_v0(...)
  6. declare i8* @__cxa_begin_catch(i8*)
  7. declare void @__cxa_end_catch()
  8. declare void @_ZSt9terminatev()
  9. define void @inner1() personality i32 (...)* @__gxx_personality_v0 {
  10. entry:
  11. invoke void @f() to label %cont1 unwind label %terminate.lpad
  12. cont1:
  13. invoke void @f() to label %cont2 unwind label %terminate.lpad
  14. cont2:
  15. invoke void @f() to label %cont3 unwind label %terminate.lpad
  16. cont3:
  17. invoke void @f() to label %cont4 unwind label %terminate.lpad
  18. cont4:
  19. ret void
  20. terminate.lpad:
  21. landingpad {i8*, i32}
  22. catch i8* null
  23. call void @_ZSt9terminatev() noreturn nounwind
  24. unreachable
  25. }
  26. define void @outer1() {
  27. ; CHECK-LABEL: @outer1(
  28. ;
  29. ; This call should not get inlined because inner1 actually calls a function
  30. ; many times, but it only does so through invoke as opposed to call.
  31. ;
  32. ; CHECK: call void @inner1
  33. call void @inner1()
  34. ret void
  35. }