basictest.ll 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. ; RUN: opt < %s -inline -scalarrepl -S | FileCheck %s
  2. target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
  3. define i32 @test1f(i32 %i) {
  4. ret i32 %i
  5. }
  6. define i32 @test1(i32 %W) {
  7. %X = call i32 @test1f(i32 7)
  8. %Y = add i32 %X, %W
  9. ret i32 %Y
  10. ; CHECK-LABEL: @test1(
  11. ; CHECK-NEXT: %Y = add i32 7, %W
  12. ; CHECK-NEXT: ret i32 %Y
  13. }
  14. ; rdar://7339069
  15. %T = type { i32, i32 }
  16. ; CHECK-NOT: @test2f(
  17. define internal %T* @test2f(i1 %cond, %T* %P) {
  18. br i1 %cond, label %T, label %F
  19. T:
  20. %A = getelementptr %T, %T* %P, i32 0, i32 0
  21. store i32 42, i32* %A
  22. ret %T* %P
  23. F:
  24. ret %T* %P
  25. }
  26. define i32 @test2(i1 %cond) {
  27. %A = alloca %T
  28. %B = call %T* @test2f(i1 %cond, %T* %A)
  29. %C = getelementptr %T, %T* %B, i32 0, i32 0
  30. %D = load i32, i32* %C
  31. ret i32 %D
  32. ; CHECK-LABEL: @test2(
  33. ; CHECK-NOT: = alloca
  34. ; CHECK: ret i32
  35. }
  36. declare void @barrier() noduplicate
  37. define internal i32 @f() {
  38. call void @barrier() noduplicate
  39. ret i32 1
  40. }
  41. define i32 @g() {
  42. call void @barrier() noduplicate
  43. ret i32 2
  44. }
  45. define internal i32 @h() {
  46. call void @barrier() noduplicate
  47. ret i32 3
  48. }
  49. define i32 @test3() {
  50. %b = call i32 @f()
  51. ret i32 %b
  52. }
  53. ; The call to @f cannot be inlined as there is another callsite
  54. ; calling @f, and @f contains a noduplicate call.
  55. ;
  56. ; The call to @g cannot be inlined as it has external linkage.
  57. ;
  58. ; The call to @h *can* be inlined.
  59. ; CHECK-LABEL: @test(
  60. define i32 @test() {
  61. ; CHECK: call i32 @f()
  62. %a = call i32 @f()
  63. ; CHECK: call i32 @g()
  64. %b = call i32 @g()
  65. ; CHECK-NOT: call i32 @h()
  66. %c = call i32 @h()
  67. %d = add i32 %a, %b
  68. %e = add i32 %d, %c
  69. ret i32 %e
  70. ; CHECK: }
  71. }