inline-cold.ll 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. ; RUN: opt < %s -inline -S -inlinecold-threshold=75 | FileCheck %s
  2. ; Test that functions with attribute Cold are not inlined while the
  3. ; same function without attribute Cold will be inlined.
  4. ; RUN: opt < %s -inline -S -inline-threshold=600 | FileCheck %s -check-prefix=OVERRIDE
  5. ; The command line argument for inline-threshold should override
  6. ; the default cold threshold, so a cold function with size bigger
  7. ; than the default cold threshold (225) will be inlined.
  8. ; RUN: opt < %s -inline -S | FileCheck %s -check-prefix=DEFAULT
  9. ; The same cold function will not be inlined with the default behavior.
  10. @a = global i32 4
  11. ; This function should be larger than the cold threshold (75), but smaller
  12. ; than the regular threshold.
  13. ; Function Attrs: nounwind readnone uwtable
  14. define i32 @simpleFunction(i32 %a) #0 {
  15. entry:
  16. %a1 = load volatile i32, i32* @a
  17. %x1 = add i32 %a1, %a1
  18. %a2 = load volatile i32, i32* @a
  19. %x2 = add i32 %x1, %a2
  20. %a3 = load volatile i32, i32* @a
  21. %x3 = add i32 %x2, %a3
  22. %a4 = load volatile i32, i32* @a
  23. %x4 = add i32 %x3, %a4
  24. %a5 = load volatile i32, i32* @a
  25. %x5 = add i32 %x4, %a5
  26. %a6 = load volatile i32, i32* @a
  27. %x6 = add i32 %x5, %a6
  28. %a7 = load volatile i32, i32* @a
  29. %x7 = add i32 %x6, %a6
  30. %a8 = load volatile i32, i32* @a
  31. %x8 = add i32 %x7, %a8
  32. %a9 = load volatile i32, i32* @a
  33. %x9 = add i32 %x8, %a9
  34. %a10 = load volatile i32, i32* @a
  35. %x10 = add i32 %x9, %a10
  36. %a11 = load volatile i32, i32* @a
  37. %x11 = add i32 %x10, %a11
  38. %a12 = load volatile i32, i32* @a
  39. %x12 = add i32 %x11, %a12
  40. %add = add i32 %x12, %a
  41. ret i32 %add
  42. }
  43. ; Function Attrs: nounwind cold readnone uwtable
  44. define i32 @ColdFunction(i32 %a) #1 {
  45. ; CHECK-LABEL: @ColdFunction
  46. ; CHECK: ret
  47. ; OVERRIDE-LABEL: @ColdFunction
  48. ; OVERRIDE: ret
  49. ; DEFAULT-LABEL: @ColdFunction
  50. ; DEFAULT: ret
  51. entry:
  52. %a1 = load volatile i32, i32* @a
  53. %x1 = add i32 %a1, %a1
  54. %a2 = load volatile i32, i32* @a
  55. %x2 = add i32 %x1, %a2
  56. %a3 = load volatile i32, i32* @a
  57. %x3 = add i32 %x2, %a3
  58. %a4 = load volatile i32, i32* @a
  59. %x4 = add i32 %x3, %a4
  60. %a5 = load volatile i32, i32* @a
  61. %x5 = add i32 %x4, %a5
  62. %a6 = load volatile i32, i32* @a
  63. %x6 = add i32 %x5, %a6
  64. %a7 = load volatile i32, i32* @a
  65. %x7 = add i32 %x6, %a6
  66. %a8 = load volatile i32, i32* @a
  67. %x8 = add i32 %x7, %a8
  68. %a9 = load volatile i32, i32* @a
  69. %x9 = add i32 %x8, %a9
  70. %a10 = load volatile i32, i32* @a
  71. %x10 = add i32 %x9, %a10
  72. %a11 = load volatile i32, i32* @a
  73. %x11 = add i32 %x10, %a11
  74. %a12 = load volatile i32, i32* @a
  75. %x12 = add i32 %x11, %a12
  76. %add = add i32 %x12, %a
  77. ret i32 %add
  78. }
  79. ; This function should be larger than the default cold threshold (225).
  80. define i32 @ColdFunction2(i32 %a) #1 {
  81. ; CHECK-LABEL: @ColdFunction2
  82. ; CHECK: ret
  83. ; OVERRIDE-LABEL: @ColdFunction2
  84. ; OVERRIDE: ret
  85. ; DEFAULT-LABEL: @ColdFunction2
  86. ; DEFAULT: ret
  87. entry:
  88. %a1 = load volatile i32, i32* @a
  89. %x1 = add i32 %a1, %a1
  90. %a2 = load volatile i32, i32* @a
  91. %x2 = add i32 %x1, %a2
  92. %a3 = load volatile i32, i32* @a
  93. %x3 = add i32 %x2, %a3
  94. %a4 = load volatile i32, i32* @a
  95. %x4 = add i32 %x3, %a4
  96. %a5 = load volatile i32, i32* @a
  97. %x5 = add i32 %x4, %a5
  98. %a6 = load volatile i32, i32* @a
  99. %x6 = add i32 %x5, %a6
  100. %a7 = load volatile i32, i32* @a
  101. %x7 = add i32 %x6, %a7
  102. %a8 = load volatile i32, i32* @a
  103. %x8 = add i32 %x7, %a8
  104. %a9 = load volatile i32, i32* @a
  105. %x9 = add i32 %x8, %a9
  106. %a10 = load volatile i32, i32* @a
  107. %x10 = add i32 %x9, %a10
  108. %a11 = load volatile i32, i32* @a
  109. %x11 = add i32 %x10, %a11
  110. %a12 = load volatile i32, i32* @a
  111. %x12 = add i32 %x11, %a12
  112. %a21 = load volatile i32, i32* @a
  113. %x21 = add i32 %x12, %a21
  114. %a22 = load volatile i32, i32* @a
  115. %x22 = add i32 %x21, %a22
  116. %a23 = load volatile i32, i32* @a
  117. %x23 = add i32 %x22, %a23
  118. %a24 = load volatile i32, i32* @a
  119. %x24 = add i32 %x23, %a24
  120. %a25 = load volatile i32, i32* @a
  121. %x25 = add i32 %x24, %a25
  122. %a26 = load volatile i32, i32* @a
  123. %x26 = add i32 %x25, %a26
  124. %a27 = load volatile i32, i32* @a
  125. %x27 = add i32 %x26, %a27
  126. %a28 = load volatile i32, i32* @a
  127. %x28 = add i32 %x27, %a28
  128. %a29 = load volatile i32, i32* @a
  129. %x29 = add i32 %x28, %a29
  130. %a30 = load volatile i32, i32* @a
  131. %x30 = add i32 %x29, %a30
  132. %a31 = load volatile i32, i32* @a
  133. %x31 = add i32 %x30, %a31
  134. %a32 = load volatile i32, i32* @a
  135. %x32 = add i32 %x31, %a32
  136. %a41 = load volatile i32, i32* @a
  137. %x41 = add i32 %x32, %a41
  138. %a42 = load volatile i32, i32* @a
  139. %x42 = add i32 %x41, %a42
  140. %a43 = load volatile i32, i32* @a
  141. %x43 = add i32 %x42, %a43
  142. %a44 = load volatile i32, i32* @a
  143. %x44 = add i32 %x43, %a44
  144. %a45 = load volatile i32, i32* @a
  145. %x45 = add i32 %x44, %a45
  146. %a46 = load volatile i32, i32* @a
  147. %x46 = add i32 %x45, %a46
  148. %a47 = load volatile i32, i32* @a
  149. %x47 = add i32 %x46, %a47
  150. %a48 = load volatile i32, i32* @a
  151. %x48 = add i32 %x47, %a48
  152. %a49 = load volatile i32, i32* @a
  153. %x49 = add i32 %x48, %a49
  154. %a50 = load volatile i32, i32* @a
  155. %x50 = add i32 %x49, %a50
  156. %a51 = load volatile i32, i32* @a
  157. %x51 = add i32 %x50, %a51
  158. %a52 = load volatile i32, i32* @a
  159. %x52 = add i32 %x51, %a52
  160. %add = add i32 %x52, %a
  161. ret i32 %add
  162. }
  163. ; Function Attrs: nounwind readnone uwtable
  164. define i32 @bar(i32 %a) #0 {
  165. ; CHECK-LABEL: @bar
  166. ; CHECK: call i32 @ColdFunction(i32 5)
  167. ; CHECK-NOT: call i32 @simpleFunction(i32 6)
  168. ; CHECK: call i32 @ColdFunction2(i32 5)
  169. ; CHECK: ret
  170. ; OVERRIDE-LABEL: @bar
  171. ; OVERRIDE-NOT: call i32 @ColdFunction(i32 5)
  172. ; OVERRIDE-NOT: call i32 @simpleFunction(i32 6)
  173. ; OVERRIDE-NOT: call i32 @ColdFunction2(i32 5)
  174. ; OVERRIDE: ret
  175. ; DEFAULT-LABEL: @bar
  176. ; DEFAULT-NOT: call i32 @ColdFunction(i32 5)
  177. ; DEFAULT-NOT: call i32 @simpleFunction(i32 6)
  178. ; DEFAULT: call i32 @ColdFunction2(i32 5)
  179. ; DEFAULT: ret
  180. entry:
  181. %0 = tail call i32 @ColdFunction(i32 5)
  182. %1 = tail call i32 @simpleFunction(i32 6)
  183. %2 = tail call i32 @ColdFunction2(i32 5)
  184. %3 = add i32 %0, %1
  185. %add = add i32 %2, %3
  186. ret i32 %add
  187. }
  188. attributes #0 = { nounwind readnone uwtable }
  189. attributes #1 = { nounwind cold readnone uwtable }