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