OLD | NEW |
(Empty) | |
| 1 ; Simple test to see if pnacl-bccompress maintains bitcode. |
| 2 |
| 3 ; Test 1: Show that we generate the same disassembled code. |
| 4 ; RUN: llvm-as < %s | pnacl-freeze -allow-local-symbol-tables \ |
| 5 ; RUN: | pnacl-bccompress \ |
| 6 ; RUN: | pnacl-thaw -allow-local-symbol-tables \ |
| 7 ; RUN: | llvm-dis - | FileCheck %s |
| 8 |
| 9 ; Test 2: Show that both the precompressed, and the compressed versions |
| 10 ; of the bitcode contain the same records. |
| 11 ; RUN: llvm-as < %s | pnacl-freeze \ |
| 12 ; RUN: | pnacl-bcanalyzer -operands-per-line=6 -dump-records \ |
| 13 ; RUN: | FileCheck %s --check-prefix DUMP |
| 14 ; RUN: llvm-as < %s | pnacl-freeze | pnacl-bccompress \ |
| 15 ; RUN: | pnacl-bcanalyzer -operands-per-line=6 -dump-records \ |
| 16 ; RUN: | FileCheck %s --check-prefix DUMP |
| 17 |
| 18 @bytes7 = internal global [7 x i8] c"abcdefg" |
| 19 ; CHECK: @bytes7 = internal global [7 x i8] c"abcdefg" |
| 20 |
| 21 @ptr_to_ptr = internal global i32 ptrtoint (i32* @ptr to i32) |
| 22 ; CHECK-NEXT: @ptr_to_ptr = internal global i32 ptrtoint (i32* @ptr to i32) |
| 23 |
| 24 @ptr_to_func = internal global i32 ptrtoint (void ()* @func to i32) |
| 25 ; CHECK-NEXT: @ptr_to_func = internal global i32 ptrtoint (void ()* @func to i32
) |
| 26 |
| 27 @compound = internal global <{ [3 x i8], i32 }> <{ [3 x i8] c"foo", i32 ptrtoint
(void ()* @func to i32) }> |
| 28 ; CHECK-NEXT: @compound = internal global <{ [3 x i8], i32 }> <{ [3 x i8] c"foo"
, i32 ptrtoint (void ()* @func to i32) }> |
| 29 |
| 30 @ptr = internal global i32 ptrtoint ([7 x i8]* @bytes7 to i32) |
| 31 ; CHECK-NEXT: @ptr = internal global i32 ptrtoint ([7 x i8]* @bytes7 to i32) |
| 32 |
| 33 @addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 1) |
| 34 ; CHECK-NEXT: @addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to
i32), i32 1) |
| 35 |
| 36 @addend_negative = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32
-1) |
| 37 ; CHECK-NEXT: @addend_negative = internal global i32 add (i32 ptrtoint (i32* @pt
r to i32), i32 -1) |
| 38 |
| 39 @addend_array1 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes7 to i32
), i32 1) |
| 40 ; CHECK-NEXT: @addend_array1 = internal global i32 add (i32 ptrtoint ([7 x i8]*
@bytes7 to i32), i32 1) |
| 41 |
| 42 @addend_array2 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes7 to i32
), i32 7) |
| 43 ; CHECK-NEXT: @addend_array2 = internal global i32 add (i32 ptrtoint ([7 x i8]*
@bytes7 to i32), i32 7) |
| 44 |
| 45 @addend_array3 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes7 to i32
), i32 9) |
| 46 ; CHECK-NEXT: @addend_array3 = internal global i32 add (i32 ptrtoint ([7 x i8]*
@bytes7 to i32), i32 9) |
| 47 |
| 48 @addend_struct1 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @c
ompound to i32), i32 1) |
| 49 ; CHECK-NEXT: @addend_struct1 = internal global i32 add (i32 ptrtoint (<{ [3 x i
8], i32 }>* @compound to i32), i32 1) |
| 50 |
| 51 @addend_struct2 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @c
ompound to i32), i32 4) |
| 52 ; CHECK-NEXT: @addend_struct2 = internal global i32 add (i32 ptrtoint (<{ [3 x i
8], i32 }>* @compound to i32), i32 4) |
| 53 |
| 54 @ptr_to_func_align = internal global i32 ptrtoint (void ()* @func to i32), align
8 |
| 55 ; CHECK-NEXT: @ptr_to_func_align = internal global i32 ptrtoint (void ()* @func
to i32), align 8 |
| 56 |
| 57 @char = internal constant [1 x i8] c"0" |
| 58 ; CHECK-NEXT: @char = internal constant [1 x i8] c"0" |
| 59 |
| 60 @short = internal constant [2 x i8] zeroinitializer |
| 61 ; CHECK-NEXT: @short = internal constant [2 x i8] zeroinitializer |
| 62 |
| 63 @bytes = internal global [4 x i8] c"abcd" |
| 64 ; CHECK-NEXT: @bytes = internal global [4 x i8] c"abcd" |
| 65 |
| 66 declare i32 @bar(i32) |
| 67 ; CHECK: declare i32 @bar(i32) |
| 68 |
| 69 define void @func() { |
| 70 ret void |
| 71 } |
| 72 |
| 73 ; CHECK: define void @func() { |
| 74 ; CHECK-NEXT: ret void |
| 75 ; CHECK-NEXT: } |
| 76 |
| 77 define void @AllocCastSimple() { |
| 78 %1 = alloca i8, i32 4, align 8 |
| 79 %2 = ptrtoint i8* %1 to i32 |
| 80 %3 = bitcast [4 x i8]* @bytes to i32* |
| 81 store i32 %2, i32* %3, align 1 |
| 82 ret void |
| 83 } |
| 84 |
| 85 ; CHECK: define void @AllocCastSimple() { |
| 86 ; CHECK-NEXT: %1 = alloca i8, i32 4, align 8 |
| 87 ; CHECK-NEXT: %2 = ptrtoint i8* %1 to i32 |
| 88 ; CHECK-NEXT: %3 = bitcast [4 x i8]* @bytes to i32* |
| 89 ; CHECK-NEXT: store i32 %2, i32* %3, align 1 |
| 90 ; CHECK-NEXT: ret void |
| 91 ; CHECK-NEXT: } |
| 92 |
| 93 define void @AllocCastSimpleReversed() { |
| 94 %1 = alloca i8, i32 4, align 8 |
| 95 %2 = ptrtoint i8* %1 to i32 |
| 96 %3 = bitcast [4 x i8]* @bytes to i32* |
| 97 store i32 %2, i32* %3, align 1 |
| 98 ret void |
| 99 } |
| 100 |
| 101 ; CHECK: define void @AllocCastSimpleReversed() { |
| 102 ; CHECK-NEXT: %1 = alloca i8, i32 4, align 8 |
| 103 ; CHECK-NEXT: %2 = ptrtoint i8* %1 to i32 |
| 104 ; CHECK-NEXT: %3 = bitcast [4 x i8]* @bytes to i32* |
| 105 ; CHECK-NEXT: store i32 %2, i32* %3, align 1 |
| 106 ; CHECK-NEXT: ret void |
| 107 ; CHECK-NEXT: } |
| 108 |
| 109 define void @AllocCastDelete() { |
| 110 %1 = alloca i8, i32 4, align 8 |
| 111 %2 = alloca i8, i32 4, align 8 |
| 112 ret void |
| 113 } |
| 114 |
| 115 ; CHECK: define void @AllocCastDelete() { |
| 116 ; CHECK-NEXT: %1 = alloca i8, i32 4, align 8 |
| 117 ; CHECK-NEXT: %2 = alloca i8, i32 4, align 8 |
| 118 ; CHECK-NEXT: ret void |
| 119 ; CHECK-NEXT: } |
| 120 |
| 121 define void @AllocCastOpt() { |
| 122 %1 = alloca i8, i32 4, align 8 |
| 123 %2 = ptrtoint i8* %1 to i32 |
| 124 %3 = bitcast [4 x i8]* @bytes to i32* |
| 125 store i32 %2, i32* %3, align 1 |
| 126 store i32 %2, i32* %3, align 1 |
| 127 ret void |
| 128 } |
| 129 |
| 130 ; CHECK: define void @AllocCastOpt() { |
| 131 ; CHECK-NEXT: %1 = alloca i8, i32 4, align 8 |
| 132 ; CHECK-NEXT: %2 = ptrtoint i8* %1 to i32 |
| 133 ; CHECK-NEXT: %3 = bitcast [4 x i8]* @bytes to i32* |
| 134 ; CHECK-NEXT: store i32 %2, i32* %3, align 1 |
| 135 ; CHECK-NEXT: store i32 %2, i32* %3, align 1 |
| 136 ; CHECK-NEXT: ret void |
| 137 ; CHECK-NEXT: } |
| 138 |
| 139 define void @AllocBitcast(i32) { |
| 140 %2 = alloca i8, i32 4, align 8 |
| 141 %3 = add i32 %0, 1 |
| 142 %4 = ptrtoint i8* %2 to i32 |
| 143 %5 = bitcast [4 x i8]* @bytes to i32* |
| 144 store i32 %4, i32* %5, align 1 |
| 145 ret void |
| 146 } |
| 147 |
| 148 ; CHECK: define void @AllocBitcast(i32) { |
| 149 ; CHECK-NEXT: %2 = alloca i8, i32 4, align 8 |
| 150 ; CHECK-NEXT: %3 = add i32 %0, 1 |
| 151 ; CHECK-NEXT: %4 = ptrtoint i8* %2 to i32 |
| 152 ; CHECK-NEXT: %5 = bitcast [4 x i8]* @bytes to i32* |
| 153 ; CHECK-NEXT: store i32 %4, i32* %5, align 1 |
| 154 ; CHECK-NEXT: ret void |
| 155 ; CHECK-NEXT: } |
| 156 |
| 157 define void @StoreGlobal() { |
| 158 %1 = alloca i8, i32 4, align 8 |
| 159 %2 = ptrtoint [4 x i8]* @bytes to i32 |
| 160 %3 = bitcast i8* %1 to i32* |
| 161 store i32 %2, i32* %3, align 1 |
| 162 ret void |
| 163 } |
| 164 |
| 165 ; CHECK: define void @StoreGlobal() { |
| 166 ; CHECK-NEXT: %1 = alloca i8, i32 4, align 8 |
| 167 ; CHECK-NEXT: %2 = ptrtoint [4 x i8]* @bytes to i32 |
| 168 ; CHECK-NEXT: %3 = bitcast i8* %1 to i32* |
| 169 ; CHECK-NEXT: store i32 %2, i32* %3, align 1 |
| 170 ; CHECK-NEXT: ret void |
| 171 ; CHECK-NEXT: } |
| 172 |
| 173 define void @StoreGlobalCastsReversed() { |
| 174 %1 = alloca i8, i32 4, align 8 |
| 175 %2 = ptrtoint [4 x i8]* @bytes to i32 |
| 176 %3 = bitcast i8* %1 to i32* |
| 177 store i32 %2, i32* %3, align 1 |
| 178 ret void |
| 179 } |
| 180 |
| 181 ; CHECK: define void @StoreGlobalCastsReversed() { |
| 182 ; CHECK-NEXT: %1 = alloca i8, i32 4, align 8 |
| 183 ; CHECK-NEXT: %2 = ptrtoint [4 x i8]* @bytes to i32 |
| 184 ; CHECK-NEXT: %3 = bitcast i8* %1 to i32* |
| 185 ; CHECK-NEXT: store i32 %2, i32* %3, align 1 |
| 186 ; CHECK-NEXT: ret void |
| 187 ; CHECK-NEXT: } |
| 188 |
| 189 define i32 @StoreGlobalCastPtr2Int() { |
| 190 %1 = alloca i8, i32 4, align 8 |
| 191 %2 = ptrtoint [4 x i8]* @bytes to i32 |
| 192 %3 = bitcast i8* %1 to i32* |
| 193 store i32 %2, i32* %3, align 1 |
| 194 ret i32 0 |
| 195 } |
| 196 |
| 197 ; CHECK: define i32 @StoreGlobalCastPtr2Int() { |
| 198 ; CHECK-NEXT: %1 = alloca i8, i32 4, align 8 |
| 199 ; CHECK-NEXT: %2 = ptrtoint [4 x i8]* @bytes to i32 |
| 200 ; CHECK-NEXT: %3 = bitcast i8* %1 to i32* |
| 201 ; CHECK-NEXT: store i32 %2, i32* %3, align 1 |
| 202 ; CHECK-NEXT: ret i32 0 |
| 203 ; CHECK-NEXT: } |
| 204 |
| 205 define void @CastAddAlloca() { |
| 206 %1 = alloca i8, i32 4, align 8 |
| 207 %2 = add i32 1, 2 |
| 208 %3 = ptrtoint i8* %1 to i32 |
| 209 %4 = add i32 %3, 2 |
| 210 %5 = add i32 1, %3 |
| 211 %6 = add i32 %3, %3 |
| 212 ret void |
| 213 } |
| 214 |
| 215 ; CHECK: define void @CastAddAlloca() { |
| 216 ; CHECK-NEXT: %1 = alloca i8, i32 4, align 8 |
| 217 ; CHECK-NEXT: %2 = add i32 1, 2 |
| 218 ; CHECK-NEXT: %3 = ptrtoint i8* %1 to i32 |
| 219 ; CHECK-NEXT: %4 = add i32 %3, 2 |
| 220 ; CHECK-NEXT: %5 = add i32 1, %3 |
| 221 ; CHECK-NEXT: %6 = add i32 %3, %3 |
| 222 ; CHECK-NEXT: ret void |
| 223 ; CHECK-NEXT: } |
| 224 |
| 225 define void @CastAddGlobal() { |
| 226 %1 = add i32 1, 2 |
| 227 %2 = ptrtoint [4 x i8]* @bytes to i32 |
| 228 %3 = add i32 %2, 2 |
| 229 %4 = add i32 1, %2 |
| 230 %5 = add i32 %2, %2 |
| 231 ret void |
| 232 } |
| 233 |
| 234 ; CHECK: define void @CastAddGlobal() { |
| 235 ; CHECK-NEXT: %1 = add i32 1, 2 |
| 236 ; CHECK-NEXT: %2 = ptrtoint [4 x i8]* @bytes to i32 |
| 237 ; CHECK-NEXT: %3 = add i32 %2, 2 |
| 238 ; CHECK-NEXT: %4 = add i32 1, %2 |
| 239 ; CHECK-NEXT: %5 = add i32 %2, %2 |
| 240 ; CHECK-NEXT: ret void |
| 241 ; CHECK-NEXT: } |
| 242 |
| 243 define void @CastBinop() { |
| 244 %1 = alloca i8, i32 4, align 8 |
| 245 %2 = ptrtoint i8* %1 to i32 |
| 246 %3 = ptrtoint [4 x i8]* @bytes to i32 |
| 247 %4 = sub i32 %2, %3 |
| 248 %5 = mul i32 %2, %3 |
| 249 %6 = udiv i32 %2, %3 |
| 250 %7 = urem i32 %2, %3 |
| 251 %8 = srem i32 %2, %3 |
| 252 %9 = shl i32 %2, %3 |
| 253 %10 = lshr i32 %2, %3 |
| 254 %11 = ashr i32 %2, %3 |
| 255 %12 = and i32 %2, %3 |
| 256 %13 = or i32 %2, %3 |
| 257 %14 = xor i32 %2, %3 |
| 258 ret void |
| 259 } |
| 260 |
| 261 ; CHECK: define void @CastBinop() { |
| 262 ; CHECK-NEXT: %1 = alloca i8, i32 4, align 8 |
| 263 ; CHECK-NEXT: %2 = ptrtoint i8* %1 to i32 |
| 264 ; CHECK-NEXT: %3 = ptrtoint [4 x i8]* @bytes to i32 |
| 265 ; CHECK-NEXT: %4 = sub i32 %2, %3 |
| 266 ; CHECK-NEXT: %5 = mul i32 %2, %3 |
| 267 ; CHECK-NEXT: %6 = udiv i32 %2, %3 |
| 268 ; CHECK-NEXT: %7 = urem i32 %2, %3 |
| 269 ; CHECK-NEXT: %8 = srem i32 %2, %3 |
| 270 ; CHECK-NEXT: %9 = shl i32 %2, %3 |
| 271 ; CHECK-NEXT: %10 = lshr i32 %2, %3 |
| 272 ; CHECK-NEXT: %11 = ashr i32 %2, %3 |
| 273 ; CHECK-NEXT: %12 = and i32 %2, %3 |
| 274 ; CHECK-NEXT: %13 = or i32 %2, %3 |
| 275 ; CHECK-NEXT: %14 = xor i32 %2, %3 |
| 276 ; CHECK-NEXT: ret void |
| 277 ; CHECK-NEXT: } |
| 278 |
| 279 define void @TestSavedPtrToInt() { |
| 280 %1 = alloca i8, i32 4, align 8 |
| 281 %2 = ptrtoint i8* %1 to i32 |
| 282 %3 = add i32 %2, 0 |
| 283 %4 = call i32 @bar(i32 %2) |
| 284 ret void |
| 285 } |
| 286 |
| 287 ; CHECK: define void @TestSavedPtrToInt() { |
| 288 ; CHECK-NEXT: %1 = alloca i8, i32 4, align 8 |
| 289 ; CHECK-NEXT: %2 = ptrtoint i8* %1 to i32 |
| 290 ; CHECK-NEXT: %3 = add i32 %2, 0 |
| 291 ; CHECK-NEXT: %4 = call i32 @bar(i32 %2) |
| 292 ; CHECK-NEXT: ret void |
| 293 ; CHECK-NEXT: } |
| 294 |
| 295 define void @CastSelect() { |
| 296 %1 = alloca i8, i32 4, align 8 |
| 297 %2 = select i1 true, i32 1, i32 2 |
| 298 %3 = ptrtoint i8* %1 to i32 |
| 299 %4 = select i1 true, i32 %3, i32 2 |
| 300 %5 = ptrtoint [4 x i8]* @bytes to i32 |
| 301 %6 = select i1 true, i32 1, i32 %5 |
| 302 %7 = select i1 true, i32 %3, i32 %5 |
| 303 %8 = select i1 true, i32 %5, i32 %3 |
| 304 ret void |
| 305 } |
| 306 |
| 307 ; CHECK: define void @CastSelect() { |
| 308 ; CHECK-NEXT: %1 = alloca i8, i32 4, align 8 |
| 309 ; CHECK-NEXT: %2 = select i1 true, i32 1, i32 2 |
| 310 ; CHECK-NEXT: %3 = ptrtoint i8* %1 to i32 |
| 311 ; CHECK-NEXT: %4 = select i1 true, i32 %3, i32 2 |
| 312 ; CHECK-NEXT: %5 = ptrtoint [4 x i8]* @bytes to i32 |
| 313 ; CHECK-NEXT: %6 = select i1 true, i32 1, i32 %5 |
| 314 ; CHECK-NEXT: %7 = select i1 true, i32 %3, i32 %5 |
| 315 ; CHECK-NEXT: %8 = select i1 true, i32 %5, i32 %3 |
| 316 ; CHECK-NEXT: ret void |
| 317 ; CHECK-NEXT: } |
| 318 |
| 319 define void @PhiBackwardRefs(i1) { |
| 320 %2 = alloca i8, i32 4, align 8 |
| 321 %3 = alloca i8, i32 4, align 8 |
| 322 br i1 %0, label %true, label %false |
| 323 |
| 324 true: ; preds = %1 |
| 325 %4 = bitcast i8* %2 to i32* |
| 326 %5 = load i32* %4 |
| 327 %6 = ptrtoint i8* %3 to i32 |
| 328 br label %merge |
| 329 |
| 330 false: ; preds = %1 |
| 331 %7 = bitcast i8* %2 to i32* |
| 332 %8 = load i32* %7 |
| 333 %9 = ptrtoint i8* %3 to i32 |
| 334 br label %merge |
| 335 |
| 336 merge: ; preds = %false, %true |
| 337 %10 = phi i32 [ %6, %true ], [ %9, %false ] |
| 338 %11 = phi i32 [ %5, %true ], [ %8, %false ] |
| 339 ret void |
| 340 } |
| 341 |
| 342 ; CHECK: define void @PhiBackwardRefs(i1) { |
| 343 ; CHECK-NEXT: %2 = alloca i8, i32 4, align 8 |
| 344 ; CHECK-NEXT: %3 = alloca i8, i32 4, align 8 |
| 345 ; CHECK-NEXT: br i1 %0, label %true, label %false |
| 346 ; CHECK: true: ; preds = %1 |
| 347 ; CHECK-NEXT: %4 = bitcast i8* %2 to i32* |
| 348 ; CHECK-NEXT: %5 = load i32* %4 |
| 349 ; CHECK-NEXT: %6 = ptrtoint i8* %3 to i32 |
| 350 ; CHECK-NEXT: br label %merge |
| 351 ; CHECK: false: ; preds = %1 |
| 352 ; CHECK-NEXT: %7 = bitcast i8* %2 to i32* |
| 353 ; CHECK-NEXT: %8 = load i32* %7 |
| 354 ; CHECK-NEXT: %9 = ptrtoint i8* %3 to i32 |
| 355 ; CHECK-NEXT: br label %merge |
| 356 ; CHECK: merge: ; preds = %false
, %true |
| 357 ; CHECK-NEXT: %10 = phi i32 [ %6, %true ], [ %9, %false ] |
| 358 ; CHECK-NEXT: %11 = phi i32 [ %5, %true ], [ %8, %false ] |
| 359 ; CHECK-NEXT: ret void |
| 360 ; CHECK-NEXT: } |
| 361 |
| 362 define void @PhiForwardRefs(i1) { |
| 363 br label %start |
| 364 |
| 365 merge: ; preds = %false, %true |
| 366 %2 = phi i32 [ %11, %true ], [ %11, %false ] |
| 367 %3 = phi i32 [ %5, %true ], [ %7, %false ] |
| 368 ret void |
| 369 |
| 370 true: ; preds = %start |
| 371 %4 = inttoptr i32 %9 to i32* |
| 372 %5 = load i32* %4 |
| 373 br label %merge |
| 374 |
| 375 false: ; preds = %start |
| 376 %6 = inttoptr i32 %9 to i32* |
| 377 %7 = load i32* %6 |
| 378 br label %merge |
| 379 |
| 380 start: ; preds = %1 |
| 381 %8 = alloca i8, i32 4, align 8 |
| 382 %9 = ptrtoint i8* %8 to i32 |
| 383 %10 = alloca i8, i32 4, align 8 |
| 384 %11 = ptrtoint i8* %10 to i32 |
| 385 br i1 %0, label %true, label %false |
| 386 } |
| 387 |
| 388 ; CHECK: define void @PhiForwardRefs(i1) { |
| 389 ; CHECK-NEXT: br label %start |
| 390 ; CHECK: merge: ; preds = %false
, %true |
| 391 ; CHECK-NEXT: %2 = phi i32 [ %11, %true ], [ %11, %false ] |
| 392 ; CHECK-NEXT: %3 = phi i32 [ %5, %true ], [ %7, %false ] |
| 393 ; CHECK-NEXT: ret void |
| 394 ; CHECK: true: ; preds = %start |
| 395 ; CHECK-NEXT: %4 = inttoptr i32 %9 to i32* |
| 396 ; CHECK-NEXT: %5 = load i32* %4 |
| 397 ; CHECK-NEXT: br label %merge |
| 398 ; CHECK: false: ; preds = %start |
| 399 ; CHECK-NEXT: %6 = inttoptr i32 %9 to i32* |
| 400 ; CHECK-NEXT: %7 = load i32* %6 |
| 401 ; CHECK-NEXT: br label %merge |
| 402 ; CHECK: start: ; preds = %1 |
| 403 ; CHECK-NEXT: %8 = alloca i8, i32 4, align 8 |
| 404 ; CHECK-NEXT: %9 = ptrtoint i8* %8 to i32 |
| 405 ; CHECK-NEXT: %10 = alloca i8, i32 4, align 8 |
| 406 ; CHECK-NEXT: %11 = ptrtoint i8* %10 to i32 |
| 407 ; CHECK-NEXT: br i1 %0, label %true, label %false |
| 408 ; CHECK-NEXT: } |
| 409 |
| 410 define void @PhiMergeCast(i1) { |
| 411 %2 = alloca i8, i32 4, align 8 |
| 412 %3 = alloca i8, i32 4, align 8 |
| 413 br i1 %0, label %true, label %false |
| 414 |
| 415 true: ; preds = %1 |
| 416 %4 = bitcast i8* %2 to i32* |
| 417 %5 = load i32* %4 |
| 418 %6 = ptrtoint i8* %3 to i32 |
| 419 %7 = add i32 %5, %6 |
| 420 br label %merge |
| 421 |
| 422 false: ; preds = %1 |
| 423 %8 = bitcast i8* %2 to i32* |
| 424 %9 = load i32* %8 |
| 425 %10 = ptrtoint i8* %3 to i32 |
| 426 br label %merge |
| 427 |
| 428 merge: ; preds = %false, %true |
| 429 %11 = phi i32 [ %6, %true ], [ %10, %false ] |
| 430 %12 = phi i32 [ %5, %true ], [ %9, %false ] |
| 431 ret void |
| 432 } |
| 433 |
| 434 ; CHECK: define void @PhiMergeCast(i1) { |
| 435 ; CHECK-NEXT: %2 = alloca i8, i32 4, align 8 |
| 436 ; CHECK-NEXT: %3 = alloca i8, i32 4, align 8 |
| 437 ; CHECK-NEXT: br i1 %0, label %true, label %false |
| 438 ; CHECK: true: ; preds = %1 |
| 439 ; CHECK-NEXT: %4 = bitcast i8* %2 to i32* |
| 440 ; CHECK-NEXT: %5 = load i32* %4 |
| 441 ; CHECK-NEXT: %6 = ptrtoint i8* %3 to i32 |
| 442 ; CHECK-NEXT: %7 = add i32 %5, %6 |
| 443 ; CHECK-NEXT: br label %merge |
| 444 ; CHECK: false: ; preds = %1 |
| 445 ; CHECK-NEXT: %8 = bitcast i8* %2 to i32* |
| 446 ; CHECK-NEXT: %9 = load i32* %8 |
| 447 ; CHECK-NEXT: %10 = ptrtoint i8* %3 to i32 |
| 448 ; CHECK-NEXT: br label %merge |
| 449 ; CHECK: merge: ; preds = %false
, %true |
| 450 ; CHECK-NEXT: %11 = phi i32 [ %6, %true ], [ %10, %false ] |
| 451 ; CHECK-NEXT: %12 = phi i32 [ %5, %true ], [ %9, %false ] |
| 452 ; CHECK-NEXT: ret void |
| 453 ; CHECK-NEXT: } |
| 454 |
| 455 define void @LongReachingCasts(i1) { |
| 456 %2 = alloca i8, i32 4, align 8 |
| 457 br i1 %0, label %Split1, label %Split2 |
| 458 |
| 459 Split1: ; preds = %1 |
| 460 br i1 %0, label %b1, label %b2 |
| 461 |
| 462 Split2: ; preds = %1 |
| 463 br i1 %0, label %b3, label %b4 |
| 464 |
| 465 b1: ; preds = %Split1 |
| 466 %3 = ptrtoint i8* %2 to i32 |
| 467 %4 = bitcast [4 x i8]* @bytes to i32* |
| 468 store i32 %3, i32* %4, align 1 |
| 469 store i32 %3, i32* %4, align 1 |
| 470 ret void |
| 471 |
| 472 b2: ; preds = %Split1 |
| 473 %5 = ptrtoint i8* %2 to i32 |
| 474 %6 = bitcast [4 x i8]* @bytes to i32* |
| 475 store i32 %5, i32* %6, align 1 |
| 476 store i32 %5, i32* %6, align 1 |
| 477 ret void |
| 478 |
| 479 b3: ; preds = %Split2 |
| 480 %7 = ptrtoint i8* %2 to i32 |
| 481 %8 = bitcast [4 x i8]* @bytes to i32* |
| 482 store i32 %7, i32* %8, align 1 |
| 483 store i32 %7, i32* %8, align 1 |
| 484 ret void |
| 485 |
| 486 b4: ; preds = %Split2 |
| 487 %9 = ptrtoint i8* %2 to i32 |
| 488 %10 = bitcast [4 x i8]* @bytes to i32* |
| 489 store i32 %9, i32* %10, align 1 |
| 490 store i32 %9, i32* %10, align 1 |
| 491 ret void |
| 492 } |
| 493 |
| 494 ; CHECK: define void @LongReachingCasts(i1) { |
| 495 ; CHECK-NEXT: %2 = alloca i8, i32 4, align 8 |
| 496 ; CHECK-NEXT: br i1 %0, label %Split1, label %Split2 |
| 497 ; CHECK: Split1: ; preds = %1 |
| 498 ; CHECK-NEXT: br i1 %0, label %b1, label %b2 |
| 499 ; CHECK: Split2: ; preds = %1 |
| 500 ; CHECK-NEXT: br i1 %0, label %b3, label %b4 |
| 501 ; CHECK: b1: ; preds = %Split
1 |
| 502 ; CHECK-NEXT: %3 = ptrtoint i8* %2 to i32 |
| 503 ; CHECK-NEXT: %4 = bitcast [4 x i8]* @bytes to i32* |
| 504 ; CHECK-NEXT: store i32 %3, i32* %4, align 1 |
| 505 ; CHECK-NEXT: store i32 %3, i32* %4, align 1 |
| 506 ; CHECK-NEXT: ret void |
| 507 ; CHECK: b2: ; preds = %Split
1 |
| 508 ; CHECK-NEXT: %5 = ptrtoint i8* %2 to i32 |
| 509 ; CHECK-NEXT: %6 = bitcast [4 x i8]* @bytes to i32* |
| 510 ; CHECK-NEXT: store i32 %5, i32* %6, align 1 |
| 511 ; CHECK-NEXT: store i32 %5, i32* %6, align 1 |
| 512 ; CHECK-NEXT: ret void |
| 513 ; CHECK: b3: ; preds = %Split
2 |
| 514 ; CHECK-NEXT: %7 = ptrtoint i8* %2 to i32 |
| 515 ; CHECK-NEXT: %8 = bitcast [4 x i8]* @bytes to i32* |
| 516 ; CHECK-NEXT: store i32 %7, i32* %8, align 1 |
| 517 ; CHECK-NEXT: store i32 %7, i32* %8, align 1 |
| 518 ; CHECK-NEXT: ret void |
| 519 ; CHECK: b4: ; preds = %Split
2 |
| 520 ; CHECK-NEXT: %9 = ptrtoint i8* %2 to i32 |
| 521 ; CHECK-NEXT: %10 = bitcast [4 x i8]* @bytes to i32* |
| 522 ; CHECK-NEXT: store i32 %9, i32* %10, align 1 |
| 523 ; CHECK-NEXT: store i32 %9, i32* %10, align 1 |
| 524 ; CHECK-NEXT: ret void |
| 525 ; CHECK-NEXT: } |
| 526 |
| 527 define void @SwitchVariable(i32) { |
| 528 switch i32 %0, label %l1 [ |
| 529 i32 1, label %l2 |
| 530 i32 2, label %l2 |
| 531 i32 4, label %l3 |
| 532 i32 5, label %l3 |
| 533 ] |
| 534 ; No predecessors! |
| 535 br label %end |
| 536 |
| 537 l1: ; preds = %1 |
| 538 br label %end |
| 539 |
| 540 l2: ; preds = %1, %1 |
| 541 br label %end |
| 542 |
| 543 l3: ; preds = %1, %1 |
| 544 br label %end |
| 545 |
| 546 end: ; preds = %l3, %l2, %l1, %2 |
| 547 ret void |
| 548 } |
| 549 |
| 550 ; CHECK: define void @SwitchVariable(i32) { |
| 551 ; CHECK-NEXT: switch i32 %0, label %l1 [ |
| 552 ; CHECK-NEXT: i32 1, label %l2 |
| 553 ; CHECK-NEXT: i32 2, label %l2 |
| 554 ; CHECK-NEXT: i32 4, label %l3 |
| 555 ; CHECK-NEXT: i32 5, label %l3 |
| 556 ; CHECK-NEXT: ] |
| 557 ; CHECK-NEXT: ; No predecessor
s! |
| 558 ; CHECK-NEXT: br label %end |
| 559 ; CHECK: l1: ; preds = %1 |
| 560 ; CHECK-NEXT: br label %end |
| 561 ; CHECK: l2: ; preds = %1, %1 |
| 562 ; CHECK-NEXT: br label %end |
| 563 ; CHECK: l3: ; preds = %1, %1 |
| 564 ; CHECK-NEXT: br label %end |
| 565 ; CHECK: end: ; preds = %l3, %
l2, %l1, %2 |
| 566 ; CHECK-NEXT: ret void |
| 567 ; CHECK-NEXT: } |
| 568 |
| 569 ; DUMP: PNaCl Version: 2 |
| 570 |
| 571 ; DUMP: <MODULE_BLOCK> |
| 572 ; DUMP-NEXT: <VERSION op0=1/> |
| 573 ; DUMP-NEXT: <BLOCKINFO_BLOCK/> |
| 574 ; DUMP-NEXT: <TYPE_BLOCK_ID> |
| 575 ; DUMP-NEXT: <NUMENTRY op0=9/> |
| 576 ; DUMP-NEXT: <INTEGER op0=32/> |
| 577 ; DUMP-NEXT: <VOID/> |
| 578 ; DUMP-NEXT: <INTEGER op0=8/> |
| 579 ; DUMP-NEXT: <INTEGER op0=1/> |
| 580 ; DUMP-NEXT: <FUNCTION op0=0 op1=1/> |
| 581 ; DUMP-NEXT: <FUNCTION op0=0 op1=1 op2=3/> |
| 582 ; DUMP-NEXT: <FUNCTION op0=0 op1=0 op2=0/> |
| 583 ; DUMP-NEXT: <FUNCTION op0=0 op1=1 op2=0/> |
| 584 ; DUMP-NEXT: <FUNCTION op0=0 op1=0/> |
| 585 ; DUMP-NEXT: </TYPE_BLOCK_ID> |
| 586 ; DUMP-NEXT: <FUNCTION op0=6 op1=0 op2=1 op3=0/> |
| 587 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 588 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 589 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 590 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 591 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 592 ; DUMP-NEXT: <FUNCTION op0=7 op1=0 op2=0 op3=0/> |
| 593 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 594 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 595 ; DUMP-NEXT: <FUNCTION op0=8 op1=0 op2=0 op3=0/> |
| 596 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 597 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 598 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 599 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 600 ; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/> |
| 601 ; DUMP-NEXT: <FUNCTION op0=5 op1=0 op2=0 op3=0/> |
| 602 ; DUMP-NEXT: <FUNCTION op0=5 op1=0 op2=0 op3=0/> |
| 603 ; DUMP-NEXT: <FUNCTION op0=5 op1=0 op2=0 op3=0/> |
| 604 ; DUMP-NEXT: <FUNCTION op0=5 op1=0 op2=0 op3=0/> |
| 605 ; DUMP-NEXT: <FUNCTION op0=7 op1=0 op2=0 op3=0/> |
| 606 ; DUMP-NEXT: <GLOBALVAR_BLOCK> |
| 607 ; DUMP-NEXT: <COUNT op0=16/> |
| 608 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 609 ; DUMP-NEXT: <DATA op0=97 op1=98 op2=99 op3=100 op4=101 op5=102 |
| 610 ; DUMP-NEXT: op6=103/> |
| 611 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 612 ; DUMP-NEXT: <RELOC op0=24/> |
| 613 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 614 ; DUMP-NEXT: <RELOC op0=1/> |
| 615 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 616 ; DUMP-NEXT: <COMPOUND op0=2/> |
| 617 ; DUMP-NEXT: <DATA op0=102 op1=111 op2=111/> |
| 618 ; DUMP-NEXT: <RELOC op0=1/> |
| 619 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 620 ; DUMP-NEXT: <RELOC op0=20/> |
| 621 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 622 ; DUMP-NEXT: <RELOC op0=24 op1=1/> |
| 623 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 624 ; DUMP-NEXT: <RELOC op0=24 op1=4294967295/> |
| 625 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 626 ; DUMP-NEXT: <RELOC op0=20 op1=1/> |
| 627 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 628 ; DUMP-NEXT: <RELOC op0=20 op1=7/> |
| 629 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 630 ; DUMP-NEXT: <RELOC op0=20 op1=9/> |
| 631 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 632 ; DUMP-NEXT: <RELOC op0=23 op1=1/> |
| 633 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 634 ; DUMP-NEXT: <RELOC op0=23 op1=4/> |
| 635 ; DUMP-NEXT: <VAR op0=4 op1=0/> |
| 636 ; DUMP-NEXT: <RELOC op0=1/> |
| 637 ; DUMP-NEXT: <VAR op0=0 op1=1/> |
| 638 ; DUMP-NEXT: <DATA op0=48/> |
| 639 ; DUMP-NEXT: <VAR op0=0 op1=1/> |
| 640 ; DUMP-NEXT: <ZEROFILL op0=2/> |
| 641 ; DUMP-NEXT: <VAR op0=0 op1=0/> |
| 642 ; DUMP-NEXT: <DATA op0=97 op1=98 op2=99 op3=100/> |
| 643 ; DUMP-NEXT: </GLOBALVAR_BLOCK> |
| 644 ; DUMP-NEXT: <VALUE_SYMTAB> |
| 645 ; DUMP-NEXT: <ENTRY op0=2 op1=65 op2=108 op3=108 op4=111 op5=99 |
| 646 ; DUMP-NEXT: op6=67 op7=97 op8=115 op9=116 op10=83 op11=105 |
| 647 ; DUMP-NEXT: op12=109 op13=112 op14=108 op15=101/> |
| 648 ; DUMP-NEXT: <ENTRY op0=10 op1=67 op2=97 op3=115 op4=116 op5=65 |
| 649 ; DUMP-NEXT: op6=100 op7=100 op8=65 op9=108 op10=108 op11=111 |
| 650 ; DUMP-NEXT: op12=99 op13=97/> |
| 651 ; DUMP-NEXT: <ENTRY op0=20 op1=98 op2=121 op3=116 op4=101 op5=115 |
| 652 ; DUMP-NEXT: op6=55/> |
| 653 ; DUMP-NEXT: <ENTRY op0=23 op1=99 op2=111 op3=109 op4=112 op5=111 |
| 654 ; DUMP-NEXT: op6=117 op7=110 op8=100/> |
| 655 ; DUMP-NEXT: <ENTRY op0=5 op1=65 op2=108 op3=108 op4=111 op5=99 |
| 656 ; DUMP-NEXT: op6=67 op7=97 op8=115 op9=116 op10=79 op11=112 |
| 657 ; DUMP-NEXT: op12=116/> |
| 658 ; DUMP-NEXT: <ENTRY op0=32 op1=112 op2=116 op3=114 op4=95 op5=116 |
| 659 ; DUMP-NEXT: op6=111 op7=95 op8=102 op9=117 op10=110 op11=99 |
| 660 ; DUMP-NEXT: op12=95 op13=97 op14=108 op15=105 op16=103 op17=110/> |
| 661 ; DUMP-NEXT: <ENTRY op0=18 op1=76 op2=111 op3=110 op4=103 op5=82 |
| 662 ; DUMP-NEXT: op6=101 op7=97 op8=99 op9=104 op10=105 op11=110 |
| 663 ; DUMP-NEXT: op12=103 op13=67 op14=97 op15=115 op16=116 op17=115/> |
| 664 ; DUMP-NEXT: <ENTRY op0=15 op1=80 op2=104 op3=105 op4=66 op5=97 |
| 665 ; DUMP-NEXT: op6=99 op7=107 op8=119 op9=97 op10=114 op11=100 |
| 666 ; DUMP-NEXT: op12=82 op13=101 op14=102 op15=115/> |
| 667 ; DUMP-NEXT: <ENTRY op0=26 op1=97 op2=100 op3=100 op4=101 op5=110 |
| 668 ; DUMP-NEXT: op6=100 op7=95 op8=110 op9=101 op10=103 op11=97 |
| 669 ; DUMP-NEXT: op12=116 op13=105 op14=118 op15=101/> |
| 670 ; DUMP-NEXT: <ENTRY op0=6 op1=65 op2=108 op3=108 op4=111 op5=99 |
| 671 ; DUMP-NEXT: op6=66 op7=105 op8=116 op9=99 op10=97 op11=115 |
| 672 ; DUMP-NEXT: op12=116/> |
| 673 ; DUMP-NEXT: <ENTRY op0=24 op1=112 op2=116 op3=114/> |
| 674 ; DUMP-NEXT: <ENTRY op0=25 op1=97 op2=100 op3=100 op4=101 op5=110 |
| 675 ; DUMP-NEXT: op6=100 op7=95 op8=112 op9=116 op10=114/> |
| 676 ; DUMP-NEXT: <ENTRY op0=19 op1=83 op2=119 op3=105 op4=116 op5=99 |
| 677 ; DUMP-NEXT: op6=104 op7=86 op8=97 op9=114 op10=105 op11=97 |
| 678 ; DUMP-NEXT: op12=98 op13=108 op14=101/> |
| 679 ; DUMP-NEXT: <ENTRY op0=0 op1=98 op2=97 op3=114/> |
| 680 ; DUMP-NEXT: <ENTRY op0=33 op1=99 op2=104 op3=97 op4=114/> |
| 681 ; DUMP-NEXT: <ENTRY op0=3 op1=65 op2=108 op3=108 op4=111 op5=99 |
| 682 ; DUMP-NEXT: op6=67 op7=97 op8=115 op9=116 op10=83 op11=105 |
| 683 ; DUMP-NEXT: op12=109 op13=112 op14=108 op15=101 op16=82 op17=101 |
| 684 ; DUMP-NEXT: op18=118 op19=101 op20=114 op21=115 op22=101 op23=100/> |
| 685 ; DUMP-NEXT: <ENTRY op0=22 op1=112 op2=116 op3=114 op4=95 op5=116 |
| 686 ; DUMP-NEXT: op6=111 op7=95 op8=102 op9=117 op10=110 op11=99/> |
| 687 ; DUMP-NEXT: <ENTRY op0=12 op1=67 op2=97 op3=115 op4=116 op5=66 |
| 688 ; DUMP-NEXT: op6=105 op7=110 op8=111 op9=112/> |
| 689 ; DUMP-NEXT: <ENTRY op0=11 op1=67 op2=97 op3=115 op4=116 op5=65 |
| 690 ; DUMP-NEXT: op6=100 op7=100 op8=71 op9=108 op10=111 op11=98 |
| 691 ; DUMP-NEXT: op12=97 op13=108/> |
| 692 ; DUMP-NEXT: <ENTRY op0=16 op1=80 op2=104 op3=105 op4=70 op5=111 |
| 693 ; DUMP-NEXT: op6=114 op7=119 op8=97 op9=114 op10=100 op11=82 |
| 694 ; DUMP-NEXT: op12=101 op13=102 op14=115/> |
| 695 ; DUMP-NEXT: <ENTRY op0=35 op1=98 op2=121 op3=116 op4=101 op5=115/> |
| 696 ; DUMP-NEXT: <ENTRY op0=4 op1=65 op2=108 op3=108 op4=111 op5=99 |
| 697 ; DUMP-NEXT: op6=67 op7=97 op8=115 op9=116 op10=68 op11=101 |
| 698 ; DUMP-NEXT: op12=108 op13=101 op14=116 op15=101/> |
| 699 ; DUMP-NEXT: <ENTRY op0=14 op1=67 op2=97 op3=115 op4=116 op5=83 |
| 700 ; DUMP-NEXT: op6=101 op7=108 op8=101 op9=99 op10=116/> |
| 701 ; DUMP-NEXT: <ENTRY op0=1 op1=102 op2=117 op3=110 op4=99/> |
| 702 ; DUMP-NEXT: <ENTRY op0=21 op1=112 op2=116 op3=114 op4=95 op5=116 |
| 703 ; DUMP-NEXT: op6=111 op7=95 op8=112 op9=116 op10=114/> |
| 704 ; DUMP-NEXT: <ENTRY op0=27 op1=97 op2=100 op3=100 op4=101 op5=110 |
| 705 ; DUMP-NEXT: op6=100 op7=95 op8=97 op9=114 op10=114 op11=97 |
| 706 ; DUMP-NEXT: op12=121 op13=49/> |
| 707 ; DUMP-NEXT: <ENTRY op0=28 op1=97 op2=100 op3=100 op4=101 op5=110 |
| 708 ; DUMP-NEXT: op6=100 op7=95 op8=97 op9=114 op10=114 op11=97 |
| 709 ; DUMP-NEXT: op12=121 op13=50/> |
| 710 ; DUMP-NEXT: <ENTRY op0=29 op1=97 op2=100 op3=100 op4=101 op5=110 |
| 711 ; DUMP-NEXT: op6=100 op7=95 op8=97 op9=114 op10=114 op11=97 |
| 712 ; DUMP-NEXT: op12=121 op13=51/> |
| 713 ; DUMP-NEXT: <ENTRY op0=34 op1=115 op2=104 op3=111 op4=114 op5=116/> |
| 714 ; DUMP-NEXT: <ENTRY op0=30 op1=97 op2=100 op3=100 op4=101 op5=110 |
| 715 ; DUMP-NEXT: op6=100 op7=95 op8=115 op9=116 op10=114 op11=117 |
| 716 ; DUMP-NEXT: op12=99 op13=116 op14=49/> |
| 717 ; DUMP-NEXT: <ENTRY op0=31 op1=97 op2=100 op3=100 op4=101 op5=110 |
| 718 ; DUMP-NEXT: op6=100 op7=95 op8=115 op9=116 op10=114 op11=117 |
| 719 ; DUMP-NEXT: op12=99 op13=116 op14=50/> |
| 720 ; DUMP-NEXT: <ENTRY op0=13 op1=84 op2=101 op3=115 op4=116 op5=83 |
| 721 ; DUMP-NEXT: op6=97 op7=118 op8=101 op9=100 op10=80 op11=116 |
| 722 ; DUMP-NEXT: op12=114 op13=84 op14=111 op15=73 op16=110 op17=116/> |
| 723 ; DUMP-NEXT: <ENTRY op0=17 op1=80 op2=104 op3=105 op4=77 op5=101 |
| 724 ; DUMP-NEXT: op6=114 op7=103 op8=101 op9=67 op10=97 op11=115 |
| 725 ; DUMP-NEXT: op12=116/> |
| 726 ; DUMP-NEXT: <ENTRY op0=8 op1=83 op2=116 op3=111 op4=114 op5=101 |
| 727 ; DUMP-NEXT: op6=71 op7=108 op8=111 op9=98 op10=97 op11=108 |
| 728 ; DUMP-NEXT: op12=67 op13=97 op14=115 op15=116 op16=115 op17=82 |
| 729 ; DUMP-NEXT: op18=101 op19=118 op20=101 op21=114 op22=115 op23=101 |
| 730 ; DUMP-NEXT: op24=100/> |
| 731 ; DUMP-NEXT: <ENTRY op0=7 op1=83 op2=116 op3=111 op4=114 op5=101 |
| 732 ; DUMP-NEXT: op6=71 op7=108 op8=111 op9=98 op10=97 op11=108/> |
| 733 ; DUMP-NEXT: <ENTRY op0=9 op1=83 op2=116 op3=111 op4=114 op5=101 |
| 734 ; DUMP-NEXT: op6=71 op7=108 op8=111 op9=98 op10=97 op11=108 |
| 735 ; DUMP-NEXT: op12=67 op13=97 op14=115 op15=116 op16=80 op17=116 |
| 736 ; DUMP-NEXT: op18=114 op19=50 op20=73 op21=110 op22=116/> |
| 737 ; DUMP-NEXT: </VALUE_SYMTAB> |
| 738 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 739 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 740 ; DUMP-NEXT: <INST_RET/> |
| 741 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 742 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 743 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 744 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 745 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 746 ; DUMP-NEXT: <INTEGER op0=8/> |
| 747 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 748 ; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/> |
| 749 ; DUMP-NEXT: <INST_STORE op0=3 op1=1 op2=1/> |
| 750 ; DUMP-NEXT: <INST_RET/> |
| 751 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 752 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 753 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 754 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 755 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 756 ; DUMP-NEXT: <INTEGER op0=8/> |
| 757 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 758 ; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/> |
| 759 ; DUMP-NEXT: <INST_STORE op0=3 op1=1 op2=1/> |
| 760 ; DUMP-NEXT: <INST_RET/> |
| 761 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 762 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 763 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 764 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 765 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 766 ; DUMP-NEXT: <INTEGER op0=8/> |
| 767 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 768 ; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/> |
| 769 ; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/> |
| 770 ; DUMP-NEXT: <INST_RET/> |
| 771 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 772 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 773 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 774 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 775 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 776 ; DUMP-NEXT: <INTEGER op0=8/> |
| 777 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 778 ; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/> |
| 779 ; DUMP-NEXT: <INST_STORE op0=3 op1=1 op2=1/> |
| 780 ; DUMP-NEXT: <INST_STORE op0=3 op1=1 op2=1/> |
| 781 ; DUMP-NEXT: <INST_RET/> |
| 782 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 783 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 784 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 785 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 786 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 787 ; DUMP-NEXT: <INTEGER op0=8/> |
| 788 ; DUMP-NEXT: <INTEGER op0=2/> |
| 789 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 790 ; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/> |
| 791 ; DUMP-NEXT: <INST_BINOP op0=4 op1=2 op2=0/> |
| 792 ; DUMP-NEXT: <INST_STORE op0=6 op1=2 op2=1/> |
| 793 ; DUMP-NEXT: <INST_RET/> |
| 794 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 795 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 796 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 797 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 798 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 799 ; DUMP-NEXT: <INTEGER op0=8/> |
| 800 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 801 ; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/> |
| 802 ; DUMP-NEXT: <INST_STORE op0=1 op1=3 op2=1/> |
| 803 ; DUMP-NEXT: <INST_RET/> |
| 804 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 805 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 806 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 807 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 808 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 809 ; DUMP-NEXT: <INTEGER op0=8/> |
| 810 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 811 ; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/> |
| 812 ; DUMP-NEXT: <INST_STORE op0=1 op1=3 op2=1/> |
| 813 ; DUMP-NEXT: <INST_RET/> |
| 814 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 815 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 816 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 817 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 818 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 819 ; DUMP-NEXT: <INTEGER op0=8/> |
| 820 ; DUMP-NEXT: <INTEGER op0=0/> |
| 821 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 822 ; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/> |
| 823 ; DUMP-NEXT: <INST_STORE op0=1 op1=4 op2=1/> |
| 824 ; DUMP-NEXT: <INST_RET op0=2/> |
| 825 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 826 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 827 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 828 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 829 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 830 ; DUMP-NEXT: <INTEGER op0=2/> |
| 831 ; DUMP-NEXT: <INTEGER op0=4/> |
| 832 ; DUMP-NEXT: <INTEGER op0=8/> |
| 833 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 834 ; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/> |
| 835 ; DUMP-NEXT: <INST_BINOP op0=4 op1=3 op2=0/> |
| 836 ; DUMP-NEXT: <INST_BINOP op0=2 op1=4 op2=0/> |
| 837 ; DUMP-NEXT: <INST_BINOP op0=6 op1=3 op2=0/> |
| 838 ; DUMP-NEXT: <INST_BINOP op0=4 op1=4 op2=0/> |
| 839 ; DUMP-NEXT: <INST_RET/> |
| 840 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 841 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 842 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 843 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 844 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 845 ; DUMP-NEXT: <INTEGER op0=2/> |
| 846 ; DUMP-NEXT: <INTEGER op0=4/> |
| 847 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 848 ; DUMP-NEXT: <INST_BINOP op0=2 op1=1 op2=0/> |
| 849 ; DUMP-NEXT: <INST_BINOP op0=4 op1=2 op2=0/> |
| 850 ; DUMP-NEXT: <INST_BINOP op0=4 op1=5 op2=0/> |
| 851 ; DUMP-NEXT: <INST_BINOP op0=6 op1=6 op2=0/> |
| 852 ; DUMP-NEXT: <INST_RET/> |
| 853 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 854 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 855 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 856 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 857 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 858 ; DUMP-NEXT: <INTEGER op0=8/> |
| 859 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 860 ; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/> |
| 861 ; DUMP-NEXT: <INST_BINOP op0=1 op1=3 op2=1/> |
| 862 ; DUMP-NEXT: <INST_BINOP op0=2 op1=4 op2=2/> |
| 863 ; DUMP-NEXT: <INST_BINOP op0=3 op1=5 op2=3/> |
| 864 ; DUMP-NEXT: <INST_BINOP op0=4 op1=6 op2=5/> |
| 865 ; DUMP-NEXT: <INST_BINOP op0=5 op1=7 op2=6/> |
| 866 ; DUMP-NEXT: <INST_BINOP op0=6 op1=8 op2=7/> |
| 867 ; DUMP-NEXT: <INST_BINOP op0=7 op1=9 op2=8/> |
| 868 ; DUMP-NEXT: <INST_BINOP op0=8 op1=10 op2=9/> |
| 869 ; DUMP-NEXT: <INST_BINOP op0=9 op1=11 op2=10/> |
| 870 ; DUMP-NEXT: <INST_BINOP op0=10 op1=12 op2=11/> |
| 871 ; DUMP-NEXT: <INST_BINOP op0=11 op1=13 op2=12/> |
| 872 ; DUMP-NEXT: <INST_RET/> |
| 873 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 874 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 875 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 876 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 877 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 878 ; DUMP-NEXT: <INTEGER op0=8/> |
| 879 ; DUMP-NEXT: <INTEGER op0=0/> |
| 880 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 881 ; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/> |
| 882 ; DUMP-NEXT: <INST_BINOP op0=1 op1=2 op2=0/> |
| 883 ; DUMP-NEXT: <INST_CALL op0=0 op1=40 op2=2/> |
| 884 ; DUMP-NEXT: <INST_RET/> |
| 885 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 886 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 887 ; DUMP-NEXT: <DECLAREBLOCKS op0=1/> |
| 888 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 889 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 890 ; DUMP-NEXT: <INTEGER op0=2/> |
| 891 ; DUMP-NEXT: <INTEGER op0=4/> |
| 892 ; DUMP-NEXT: <INTEGER op0=8/> |
| 893 ; DUMP-NEXT: <SETTYPE op0=3/> |
| 894 ; DUMP-NEXT: <INTEGER op0=3/> |
| 895 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 896 ; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/> |
| 897 ; DUMP-NEXT: <INST_VSELECT op0=5 op1=4 op2=2/> |
| 898 ; DUMP-NEXT: <INST_VSELECT op0=2 op1=5 op2=3/> |
| 899 ; DUMP-NEXT: <INST_VSELECT op0=7 op1=8 op2=4/> |
| 900 ; DUMP-NEXT: <INST_VSELECT op0=4 op1=9 op2=5/> |
| 901 ; DUMP-NEXT: <INST_VSELECT op0=10 op1=5 op2=6/> |
| 902 ; DUMP-NEXT: <INST_RET/> |
| 903 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 904 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 905 ; DUMP-NEXT: <DECLAREBLOCKS op0=4/> |
| 906 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 907 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 908 ; DUMP-NEXT: <INTEGER op0=8/> |
| 909 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 910 ; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/> |
| 911 ; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/> |
| 912 ; DUMP-NEXT: <INST_BR op0=1 op1=2 op2=4/> |
| 913 ; DUMP-NEXT: <INST_LOAD op0=2 op1=0 op2=0/> |
| 914 ; DUMP-NEXT: <INST_BR op0=3/> |
| 915 ; DUMP-NEXT: <INST_LOAD op0=3 op1=0 op2=0/> |
| 916 ; DUMP-NEXT: <INST_BR op0=3/> |
| 917 ; DUMP-NEXT: <INST_PHI op0=0 op1=6 op2=1 op3=6 op4=2/> |
| 918 ; DUMP-NEXT: <INST_PHI op0=0 op1=6 op2=1 op3=4 op4=2/> |
| 919 ; DUMP-NEXT: <INST_RET/> |
| 920 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 921 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 922 ; DUMP-NEXT: <DECLAREBLOCKS op0=5/> |
| 923 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 924 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 925 ; DUMP-NEXT: <INTEGER op0=8/> |
| 926 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 927 ; DUMP-NEXT: <INST_BR op0=4/> |
| 928 ; DUMP-NEXT: <FORWARDTYPEREF op0=43 op1=0/> |
| 929 ; DUMP-NEXT: <INST_PHI op0=0 op1=11 op2=2 op3=11 op4=3/> |
| 930 ; DUMP-NEXT: <FORWARDTYPEREF op0=40 op1=0/> |
| 931 ; DUMP-NEXT: <FORWARDTYPEREF op0=41 op1=0/> |
| 932 ; DUMP-NEXT: <INST_PHI op0=0 op1=3 op2=2 op3=5 op4=3/> |
| 933 ; DUMP-NEXT: <INST_RET/> |
| 934 ; DUMP-NEXT: <FORWARDTYPEREF op0=42 op1=0/> |
| 935 ; DUMP-NEXT: <INST_LOAD op0=4294967294 op1=0 op2=0/> |
| 936 ; DUMP-NEXT: <INST_BR op0=1/> |
| 937 ; DUMP-NEXT: <INST_LOAD op0=4294967295 op1=0 op2=0/> |
| 938 ; DUMP-NEXT: <INST_BR op0=1/> |
| 939 ; DUMP-NEXT: <INST_ALLOCA op0=5 op1=4/> |
| 940 ; DUMP-NEXT: <INST_ALLOCA op0=6 op1=4/> |
| 941 ; DUMP-NEXT: <INST_BR op0=2 op1=3 op2=8/> |
| 942 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 943 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 944 ; DUMP-NEXT: <DECLAREBLOCKS op0=4/> |
| 945 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 946 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 947 ; DUMP-NEXT: <INTEGER op0=8/> |
| 948 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 949 ; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/> |
| 950 ; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/> |
| 951 ; DUMP-NEXT: <INST_BR op0=1 op1=2 op2=4/> |
| 952 ; DUMP-NEXT: <INST_LOAD op0=2 op1=0 op2=0/> |
| 953 ; DUMP-NEXT: <INST_BINOP op0=1 op1=2 op2=0/> |
| 954 ; DUMP-NEXT: <INST_BR op0=3/> |
| 955 ; DUMP-NEXT: <INST_LOAD op0=4 op1=0 op2=0/> |
| 956 ; DUMP-NEXT: <INST_BR op0=3/> |
| 957 ; DUMP-NEXT: <INST_PHI op0=0 op1=8 op2=1 op3=8 op4=2/> |
| 958 ; DUMP-NEXT: <INST_PHI op0=0 op1=8 op2=1 op3=4 op4=2/> |
| 959 ; DUMP-NEXT: <INST_RET/> |
| 960 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 961 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 962 ; DUMP-NEXT: <DECLAREBLOCKS op0=7/> |
| 963 ; DUMP-NEXT: <CONSTANTS_BLOCK> |
| 964 ; DUMP-NEXT: <SETTYPE op0=0/> |
| 965 ; DUMP-NEXT: <INTEGER op0=8/> |
| 966 ; DUMP-NEXT: </CONSTANTS_BLOCK> |
| 967 ; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/> |
| 968 ; DUMP-NEXT: <INST_BR op0=1 op1=2 op2=3/> |
| 969 ; DUMP-NEXT: <INST_BR op0=3 op1=4 op2=3/> |
| 970 ; DUMP-NEXT: <INST_BR op0=5 op1=6 op2=3/> |
| 971 ; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/> |
| 972 ; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/> |
| 973 ; DUMP-NEXT: <INST_RET/> |
| 974 ; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/> |
| 975 ; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/> |
| 976 ; DUMP-NEXT: <INST_RET/> |
| 977 ; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/> |
| 978 ; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/> |
| 979 ; DUMP-NEXT: <INST_RET/> |
| 980 ; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/> |
| 981 ; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/> |
| 982 ; DUMP-NEXT: <INST_RET/> |
| 983 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 984 ; DUMP-NEXT: <FUNCTION_BLOCK> |
| 985 ; DUMP-NEXT: <DECLAREBLOCKS op0=6/> |
| 986 ; DUMP-NEXT: <INST_SWITCH op0=0 op1=1 op2=2 op3=4 op4=1 op5=1 |
| 987 ; DUMP-NEXT: op6=2 op7=3 op8=1 op9=1 op10=4 op11=3 |
| 988 ; DUMP-NEXT: op12=1 op13=1 op14=8 op15=4 op16=1 op17=1 |
| 989 ; DUMP-NEXT: op18=10 op19=4/> |
| 990 ; DUMP-NEXT: <INST_BR op0=5/> |
| 991 ; DUMP-NEXT: <INST_BR op0=5/> |
| 992 ; DUMP-NEXT: <INST_BR op0=5/> |
| 993 ; DUMP-NEXT: <INST_BR op0=5/> |
| 994 ; DUMP-NEXT: <INST_RET/> |
| 995 ; DUMP-NEXT: </FUNCTION_BLOCK> |
| 996 ; DUMP-NEXT:</MODULE_BLOCK> |
| 997 |
| 998 |
OLD | NEW |