| Manman Ren | d461244 | 2014-02-06 01:59:22 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -inline -S -inlinecold-threshold=75 | FileCheck %s |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 2 | ; Test that functions with attribute Cold are not inlined while the |
| 3 | ; same function without attribute Cold will be inlined. |
| 4 | |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 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 | |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 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: |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 20 | %a1 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 21 | %x1 = add i32 %a1, %a1 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 22 | %a2 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 23 | %x2 = add i32 %x1, %a2 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 24 | %a3 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 25 | %x3 = add i32 %x2, %a3 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 26 | %a4 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 27 | %x4 = add i32 %x3, %a4 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 28 | %a5 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 29 | %x5 = add i32 %x4, %a5 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 30 | %a6 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 31 | %x6 = add i32 %x5, %a6 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 32 | %a7 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 33 | %x7 = add i32 %x6, %a6 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 34 | %a8 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 35 | %x8 = add i32 %x7, %a8 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 36 | %a9 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 37 | %x9 = add i32 %x8, %a9 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 38 | %a10 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 39 | %x10 = add i32 %x9, %a10 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 40 | %a11 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 41 | %x11 = add i32 %x10, %a11 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 42 | %a12 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 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 |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 52 | ; OVERRIDE-LABEL: @ColdFunction |
| 53 | ; OVERRIDE: ret |
| 54 | ; DEFAULT-LABEL: @ColdFunction |
| 55 | ; DEFAULT: ret |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 56 | entry: |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 57 | %a1 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 58 | %x1 = add i32 %a1, %a1 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 59 | %a2 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 60 | %x2 = add i32 %x1, %a2 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 61 | %a3 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 62 | %x3 = add i32 %x2, %a3 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 63 | %a4 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 64 | %x4 = add i32 %x3, %a4 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 65 | %a5 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 66 | %x5 = add i32 %x4, %a5 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 67 | %a6 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 68 | %x6 = add i32 %x5, %a6 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 69 | %a7 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 70 | %x7 = add i32 %x6, %a6 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 71 | %a8 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 72 | %x8 = add i32 %x7, %a8 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 73 | %a9 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 74 | %x9 = add i32 %x8, %a9 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 75 | %a10 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 76 | %x10 = add i32 %x9, %a10 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 77 | %a11 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 78 | %x11 = add i32 %x10, %a11 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 79 | %a12 = load volatile i32, i32* @a |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 80 | %x12 = add i32 %x11, %a12 |
| 81 | %add = add i32 %x12, %a |
| 82 | ret i32 %add |
| 83 | } |
| 84 | |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 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: |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 94 | %a1 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 95 | %x1 = add i32 %a1, %a1 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 96 | %a2 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 97 | %x2 = add i32 %x1, %a2 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 98 | %a3 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 99 | %x3 = add i32 %x2, %a3 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 100 | %a4 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 101 | %x4 = add i32 %x3, %a4 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 102 | %a5 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 103 | %x5 = add i32 %x4, %a5 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 104 | %a6 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 105 | %x6 = add i32 %x5, %a6 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 106 | %a7 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 107 | %x7 = add i32 %x6, %a7 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 108 | %a8 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 109 | %x8 = add i32 %x7, %a8 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 110 | %a9 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 111 | %x9 = add i32 %x8, %a9 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 112 | %a10 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 113 | %x10 = add i32 %x9, %a10 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 114 | %a11 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 115 | %x11 = add i32 %x10, %a11 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 116 | %a12 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 117 | %x12 = add i32 %x11, %a12 |
| 118 | |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 119 | %a21 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 120 | %x21 = add i32 %x12, %a21 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 121 | %a22 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 122 | %x22 = add i32 %x21, %a22 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 123 | %a23 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 124 | %x23 = add i32 %x22, %a23 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 125 | %a24 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 126 | %x24 = add i32 %x23, %a24 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 127 | %a25 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 128 | %x25 = add i32 %x24, %a25 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 129 | %a26 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 130 | %x26 = add i32 %x25, %a26 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 131 | %a27 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 132 | %x27 = add i32 %x26, %a27 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 133 | %a28 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 134 | %x28 = add i32 %x27, %a28 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 135 | %a29 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 136 | %x29 = add i32 %x28, %a29 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 137 | %a30 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 138 | %x30 = add i32 %x29, %a30 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 139 | %a31 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 140 | %x31 = add i32 %x30, %a31 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 141 | %a32 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 142 | %x32 = add i32 %x31, %a32 |
| 143 | |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 144 | %a41 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 145 | %x41 = add i32 %x32, %a41 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 146 | %a42 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 147 | %x42 = add i32 %x41, %a42 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 148 | %a43 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 149 | %x43 = add i32 %x42, %a43 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 150 | %a44 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 151 | %x44 = add i32 %x43, %a44 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 152 | %a45 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 153 | %x45 = add i32 %x44, %a45 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 154 | %a46 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 155 | %x46 = add i32 %x45, %a46 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 156 | %a47 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 157 | %x47 = add i32 %x46, %a47 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 158 | %a48 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 159 | %x48 = add i32 %x47, %a48 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 160 | %a49 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 161 | %x49 = add i32 %x48, %a49 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 162 | %a50 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 163 | %x50 = add i32 %x49, %a50 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 164 | %a51 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 165 | %x51 = add i32 %x50, %a51 |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 166 | %a52 = load volatile i32, i32* @a |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 167 | %x52 = add i32 %x51, %a52 |
| 168 | |
| 169 | %add = add i32 %x52, %a |
| 170 | ret i32 %add |
| 171 | } |
| 172 | |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 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) |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 178 | ; CHECK: call i32 @ColdFunction2(i32 5) |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 179 | ; CHECK: ret |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 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 |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 190 | entry: |
| 191 | %0 = tail call i32 @ColdFunction(i32 5) |
| 192 | %1 = tail call i32 @simpleFunction(i32 6) |
| Manman Ren | 3c44067 | 2014-04-25 17:34:55 +0000 | [diff] [blame] | 193 | %2 = tail call i32 @ColdFunction2(i32 5) |
| 194 | %3 = add i32 %0, %1 |
| 195 | %add = add i32 %2, %3 |
| Manman Ren | e8781b1 | 2014-02-05 22:53:44 +0000 | [diff] [blame] | 196 | ret i32 %add |
| 197 | } |
| 198 | |
| 199 | attributes #0 = { nounwind readnone uwtable } |
| 200 | attributes #1 = { nounwind cold readnone uwtable } |