From 0c131b6adf3fd50f7e92e72e69b4e9fa5b2b0690 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 14 May 2002 15:22:50 +0000 Subject: [PATCH] New testcase git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2622 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../2002-05-14-TouchDeletedInst.ll | 450 ++++++++++++++++++ 1 file changed, 450 insertions(+) create mode 100644 test/Transforms/InstCombine/2002-05-14-TouchDeletedInst.ll diff --git a/test/Transforms/InstCombine/2002-05-14-TouchDeletedInst.ll b/test/Transforms/InstCombine/2002-05-14-TouchDeletedInst.ll new file mode 100644 index 00000000000..a935b4a5eba --- /dev/null +++ b/test/Transforms/InstCombine/2002-05-14-TouchDeletedInst.ll @@ -0,0 +1,450 @@ +; This testcase, obviously distilled from a large program (bzip2 from Specint2000) +; caused instcombine to fail because it got the same instruction on it's worklist +; more than once (which is ok), but then deleted the instruction. Since the inst +; stayed on the worklist, as soon as it came back up to be processed, bad things +; happened, and opt asserted. +; +; RUN: as < %s | opt -instcombine +; + + +%.LC0 = internal global [21 x sbyte] c"hbMakeCodeLengths(1)\00" ; <[21 x sbyte]*> [#uses=1] +%.LC1 = internal global [21 x sbyte] c"hbMakeCodeLengths(2)\00" ; <[21 x sbyte]*> [#uses=1] + +void "hbMakeCodeLengths"(ubyte* %len, int* %freq, int %alphaSize, int %maxLen) { +bb0: ;[#uses=0] + %len = alloca ubyte* ; [#uses=2] + store ubyte* %len, ubyte** %len + %freq = alloca int* ; [#uses=2] + store int* %freq, int** %freq + %alphaSize = alloca int ; [#uses=2] + store int %alphaSize, int* %alphaSize + %maxLen = alloca int ; [#uses=2] + store int %maxLen, int* %maxLen + %heap = alloca int, uint 260 ; [#uses=27] + %weight = alloca int, uint 516 ; [#uses=18] + %parent = alloca int, uint 516 ; [#uses=7] + br label %bb1 + +bb1: ;[#uses=2] + %reg107 = load ubyte** %len, uint 0 ; [#uses=1] + %reg108 = load int** %freq, uint 0 ; [#uses=1] + %reg109 = load int* %alphaSize ; [#uses=10] + %reg110 = load int* %maxLen ; [#uses=1] + %cond747 = setge int 0, %reg109 ; [#uses=1] + br bool %cond747, label %bb6, label %bb2 + +bb2: ;[#uses=2] + %reg591 = phi int [ %reg594, %bb5 ], [ 0, %bb1 ] ; [#uses=3] + %reg591-idxcast1 = cast int %reg591 to uint ; [#uses=1] + %reg591-idxcast1-offset = add uint %reg591-idxcast1, 1 ; [#uses=1] + %reg126 = getelementptr int* %weight, uint %reg591-idxcast1-offset ; [#uses=1] + %reg591-idxcast = cast int %reg591 to uint ; [#uses=1] + %reg132 = getelementptr int* %reg108, uint %reg591-idxcast ; [#uses=1] + %reg133 = load int* %reg132, uint 0 ; [#uses=2] + %cond748 = seteq int %reg133, 0 ; [#uses=1] + br bool %cond748, label %bb4, label %bb3 + +bb3: ;[#uses=2] + %reg127 = shl int %reg133, ubyte 8 ; [#uses=1] + br label %bb5 + +bb4: ;[#uses=2] + br label %bb5 + +bb5: ;[#uses=3] + %reg593 = phi int [ 256, %bb4 ], [ %reg127, %bb3 ] ; [#uses=1] + store int %reg593, int* %reg126 + %reg594 = add int %reg591, 1 ; [#uses=2] + %cond749 = setlt int %reg594, %reg109 ; [#uses=1] + br bool %cond749, label %bb2, label %bb6 + +bb6: ;[#uses=6] + store int 0, int* %heap + store int 0, int* %weight + store int -2, int* %parent + %cond750 = setgt int 1, %reg109 ; [#uses=1] + br bool %cond750, label %bb11, label %bb7 + +bb7: ;[#uses=3] + %reg597 = phi uint [ %reg598, %bb10 ], [ 0, %bb6 ] ; [#uses=5] + %reg597-casted = cast uint %reg597 to int ; [#uses=1] + %reg596 = add int %reg597-casted, 1 ; [#uses=3] + %reg597-offset = add uint %reg597, 1 ; [#uses=1] + %reg149 = getelementptr int* %parent, uint %reg597-offset ; [#uses=1] + store int -1, int* %reg149 + %reg598 = add uint %reg597, 1 ; [#uses=3] + %reg597-offset1 = add uint %reg597, 1 ; [#uses=1] + %reg157 = getelementptr int* %heap, uint %reg597-offset1 ; [#uses=1] + store int %reg596, int* %reg157 + br label %bb9 + +bb8: ;[#uses=2] + %reg198 = getelementptr int* %heap, uint %reg599 ; [#uses=1] + store int %reg182, int* %reg198 + %cast938 = cast int %reg174 to uint ; [#uses=1] + br label %bb9 + +bb9: ;[#uses=2] + %reg599 = phi uint [ %cast938, %bb8 ], [ %reg598, %bb7 ] ; [#uses=3] + %cast807 = cast uint %reg599 to int ; [#uses=1] + %reg597-offset2 = add uint %reg597, 1 ; [#uses=1] + %reg173 = getelementptr int* %weight, uint %reg597-offset2 ; [#uses=1] + %reg174 = shr int %cast807, ubyte 1 ; [#uses=2] + %reg174-idxcast = cast int %reg174 to uint ; [#uses=1] + %reg181 = getelementptr int* %heap, uint %reg174-idxcast ; [#uses=1] + %reg182 = load int* %reg181 ; [#uses=2] + %reg182-idxcast = cast int %reg182 to uint ; [#uses=1] + %reg189 = getelementptr int* %weight, uint %reg182-idxcast ; [#uses=1] + %reg190 = load int* %reg173 ; [#uses=1] + %reg191 = load int* %reg189 ; [#uses=1] + %cond751 = setlt int %reg190, %reg191 ; [#uses=1] + br bool %cond751, label %bb8, label %bb10 + +bb10: ;[#uses=3] + %reg214 = getelementptr int* %heap, uint %reg599 ; [#uses=1] + store int %reg596, int* %reg214 + %reg601 = add int %reg596, 1 ; [#uses=1] + %cond752 = setle int %reg601, %reg109 ; [#uses=1] + br bool %cond752, label %bb7, label %bb11 + +bb11: ;[#uses=2] + %reg602 = phi uint [ %reg598, %bb10 ], [ 0, %bb6 ] ; [#uses=3] + %cast819 = cast uint %reg602 to int ; [#uses=1] + %cast818 = cast uint %reg602 to int ; [#uses=1] + %cond753 = setle int %cast818, 259 ; [#uses=1] + br bool %cond753, label %bb13, label %bb12 + +bb12: ;[#uses=1] + %cast784 = getelementptr [21 x sbyte]* %.LC0, uint 0, uint 0 ; [#uses=1] + call void %panic( sbyte* %cast784 ) + br label %bb13 + +bb13: ;[#uses=4] + %cond754 = setle int %cast819, 1 ; [#uses=1] + %cast918 = cast int %reg109 to uint ; [#uses=1] + %cast940 = cast uint %reg602 to int ; [#uses=1] + %cast942 = cast int %reg109 to uint ; [#uses=1] + br bool %cond754, label %bb32, label %bb14 + +bb14: ;[#uses=5] + %cann-indvar1 = phi uint [ 0, %bb13 ], [ %add1-indvar1, %bb31 ] ; [#uses=3] + %cann-indvar1-casted = cast uint %cann-indvar1 to int ; [#uses=1] + %reg603-scale = mul int %cann-indvar1-casted, -1 ; [#uses=1] + %reg603 = add int %reg603-scale, %cast940 ; [#uses=4] + %reg604 = add uint %cann-indvar1, %cast942 ; [#uses=4] + %add1-indvar1 = add uint %cann-indvar1, 1 ; [#uses=1] + %reg7551 = getelementptr int* %heap, uint 1 ; [#uses=1] + %reg113 = load int* %reg7551 ; [#uses=2] + %reg603-idxcast = cast int %reg603 to uint ; [#uses=1] + %reg222 = getelementptr int* %heap, uint %reg603-idxcast ; [#uses=1] + %reg223 = load int* %reg222, uint 0 ; [#uses=1] + %reg7561 = getelementptr int* %heap, uint 1 ; [#uses=1] + store int %reg223, int* %reg7561 + %reg605 = add int %reg603, -1 ; [#uses=4] + %reg757 = getelementptr int* %heap, uint 1 ; [#uses=1] + %reg226 = load int* %reg757 ; [#uses=2] + %cond758 = setgt int 2, %reg605 ; [#uses=1] + br bool %cond758, label %bb20, label %bb15 + +bb15: ;[#uses=3] + %reg606 = phi int [ %reg611, %bb19 ], [ 2, %bb14 ] ; [#uses=6] + %reg607 = phi int [ %reg609, %bb19 ], [ 1, %bb14 ] ; [#uses=2] + %cond759 = setge int %reg606, %reg605 ; [#uses=1] + br bool %cond759, label %bb18, label %bb16 + +bb16: ;[#uses=2] + %reg606-idxcast = cast int %reg606 to uint ; [#uses=1] + %reg606-idxcast-offset = add uint %reg606-idxcast, 1 ; [#uses=1] + %reg241 = getelementptr int* %heap, uint %reg606-idxcast-offset ; [#uses=1] + %reg242 = load int* %reg241 ; [#uses=1] + %reg242-idxcast = cast int %reg242 to uint ; [#uses=1] + %reg249 = getelementptr int* %weight, uint %reg242-idxcast ; [#uses=1] + %reg606-idxcast1 = cast int %reg606 to uint ; [#uses=1] + %reg256 = getelementptr int* %heap, uint %reg606-idxcast1 ; [#uses=1] + %reg257 = load int* %reg256 ; [#uses=1] + %reg257-idxcast = cast int %reg257 to uint ; [#uses=1] + %reg264 = getelementptr int* %weight, uint %reg257-idxcast ; [#uses=1] + %reg265 = load int* %reg249 ; [#uses=1] + %reg266 = load int* %reg264 ; [#uses=1] + %cond760 = setge int %reg265, %reg266 ; [#uses=1] + br bool %cond760, label %bb18, label %bb17 + +bb17: ;[#uses=2] + %reg608 = add int %reg606, 1 ; [#uses=1] + br label %bb18 + +bb18: ;[#uses=4] + %reg609 = phi int [ %reg608, %bb17 ], [ %reg606, %bb16 ], [ %reg606, %bb15 ] ; [#uses=4] + %reg226-idxcast = cast int %reg226 to uint ; [#uses=1] + %reg273 = getelementptr int* %weight, uint %reg226-idxcast ; [#uses=1] + %reg609-idxcast = cast int %reg609 to uint ; [#uses=1] + %reg280 = getelementptr int* %heap, uint %reg609-idxcast ; [#uses=1] + %reg281 = load int* %reg280 ; [#uses=2] + %reg281-idxcast = cast int %reg281 to uint ; [#uses=1] + %reg288 = getelementptr int* %weight, uint %reg281-idxcast ; [#uses=1] + %reg289 = load int* %reg273 ; [#uses=1] + %reg290 = load int* %reg288 ; [#uses=1] + %cond761 = setlt int %reg289, %reg290 ; [#uses=1] + br bool %cond761, label %bb20, label %bb19 + +bb19: ;[#uses=4] + %reg607-idxcast = cast int %reg607 to uint ; [#uses=1] + %reg297 = getelementptr int* %heap, uint %reg607-idxcast ; [#uses=1] + store int %reg281, int* %reg297 + %reg611 = shl int %reg609, ubyte 1 ; [#uses=2] + %cond762 = setle int %reg611, %reg605 ; [#uses=1] + br bool %cond762, label %bb15, label %bb20 + +bb20: ;[#uses=6] + %reg612 = phi int [ %reg609, %bb19 ], [ %reg607, %bb18 ], [ 1, %bb14 ] ; [#uses=1] + %reg612-idxcast = cast int %reg612 to uint ; [#uses=1] + %reg312 = getelementptr int* %heap, uint %reg612-idxcast ; [#uses=1] + store int %reg226, int* %reg312 + %reg7631 = getelementptr int* %heap, uint 1 ; [#uses=1] + %reg114 = load int* %reg7631 ; [#uses=2] + %reg603-idxcast1 = cast int %reg603 to uint ; [#uses=1] + %reg603-idxcast1-offset = add uint %reg603-idxcast1, 1073741823 ; [#uses=1] + %reg319 = getelementptr int* %heap, uint %reg603-idxcast1-offset ; [#uses=1] + %reg320 = load int* %reg319, uint 0 ; [#uses=1] + %reg7641 = getelementptr int* %heap, uint 1 ; [#uses=1] + store int %reg320, int* %reg7641 + %reg613 = add int %reg605, -1 ; [#uses=4] + %reg765 = getelementptr int* %heap, uint 1 ; [#uses=1] + %reg323 = load int* %reg765 ; [#uses=2] + %cond766 = setgt int 2, %reg613 ; [#uses=1] + br bool %cond766, label %bb26, label %bb21 + +bb21: ;[#uses=3] + %reg614 = phi int [ %reg619, %bb25 ], [ 2, %bb20 ] ; [#uses=6] + %reg615 = phi int [ %reg617, %bb25 ], [ 1, %bb20 ] ; [#uses=2] + %cond767 = setge int %reg614, %reg613 ; [#uses=1] + br bool %cond767, label %bb24, label %bb22 + +bb22: ;[#uses=2] + %reg614-idxcast = cast int %reg614 to uint ; [#uses=1] + %reg614-idxcast-offset = add uint %reg614-idxcast, 1 ; [#uses=1] + %reg338 = getelementptr int* %heap, uint %reg614-idxcast-offset ; [#uses=1] + %reg339 = load int* %reg338 ; [#uses=1] + %reg339-idxcast = cast int %reg339 to uint ; [#uses=1] + %reg346 = getelementptr int* %weight, uint %reg339-idxcast ; [#uses=1] + %reg614-idxcast1 = cast int %reg614 to uint ; [#uses=1] + %reg353 = getelementptr int* %heap, uint %reg614-idxcast1 ; [#uses=1] + %reg354 = load int* %reg353 ; [#uses=1] + %reg354-idxcast = cast int %reg354 to uint ; [#uses=1] + %reg361 = getelementptr int* %weight, uint %reg354-idxcast ; [#uses=1] + %reg362 = load int* %reg346 ; [#uses=1] + %reg363 = load int* %reg361 ; [#uses=1] + %cond768 = setge int %reg362, %reg363 ; [#uses=1] + br bool %cond768, label %bb24, label %bb23 + +bb23: ;[#uses=2] + %reg616 = add int %reg614, 1 ; [#uses=1] + br label %bb24 + +bb24: ;[#uses=4] + %reg617 = phi int [ %reg616, %bb23 ], [ %reg614, %bb22 ], [ %reg614, %bb21 ] ; [#uses=4] + %reg323-idxcast = cast int %reg323 to uint ; [#uses=1] + %reg370 = getelementptr int* %weight, uint %reg323-idxcast ; [#uses=1] + %reg617-idxcast = cast int %reg617 to uint ; [#uses=1] + %reg377 = getelementptr int* %heap, uint %reg617-idxcast ; [#uses=1] + %reg378 = load int* %reg377 ; [#uses=2] + %reg378-idxcast = cast int %reg378 to uint ; [#uses=1] + %reg385 = getelementptr int* %weight, uint %reg378-idxcast ; [#uses=1] + %reg386 = load int* %reg370 ; [#uses=1] + %reg387 = load int* %reg385 ; [#uses=1] + %cond769 = setlt int %reg386, %reg387 ; [#uses=1] + br bool %cond769, label %bb26, label %bb25 + +bb25: ;[#uses=4] + %reg615-idxcast = cast int %reg615 to uint ; [#uses=1] + %reg394 = getelementptr int* %heap, uint %reg615-idxcast ; [#uses=1] + store int %reg378, int* %reg394 + %reg619 = shl int %reg617, ubyte 1 ; [#uses=2] + %cond770 = setle int %reg619, %reg613 ; [#uses=1] + br bool %cond770, label %bb21, label %bb26 + +bb26: ;[#uses=4] + %reg620 = phi int [ %reg617, %bb25 ], [ %reg615, %bb24 ], [ 1, %bb20 ] ; [#uses=1] + %reg620-idxcast = cast int %reg620 to uint ; [#uses=1] + %reg409 = getelementptr int* %heap, uint %reg620-idxcast ; [#uses=1] + store int %reg323, int* %reg409 + %reg621 = add uint %reg604, 1 ; [#uses=5] + %reg113-idxcast = cast int %reg113 to uint ; [#uses=1] + %reg416 = getelementptr int* %parent, uint %reg113-idxcast ; [#uses=1] + %reg114-idxcast = cast int %reg114 to uint ; [#uses=1] + %reg423 = getelementptr int* %parent, uint %reg114-idxcast ; [#uses=1] + %cast889 = cast uint %reg621 to int ; [#uses=1] + store int %cast889, int* %reg423 + %cast890 = cast uint %reg621 to int ; [#uses=1] + store int %cast890, int* %reg416 + %reg604-offset = add uint %reg604, 1 ; [#uses=1] + %reg431 = getelementptr int* %weight, uint %reg604-offset ; [#uses=1] + %reg113-idxcast2 = cast int %reg113 to uint ; [#uses=1] + %reg4381 = getelementptr int* %weight, uint %reg113-idxcast2 ; [#uses=1] + %reg439 = load int* %reg4381 ; [#uses=2] + %reg440 = and int %reg439, -256 ; [#uses=1] + %reg114-idxcast2 = cast int %reg114 to uint ; [#uses=1] + %reg4471 = getelementptr int* %weight, uint %reg114-idxcast2 ; [#uses=1] + %reg448 = load int* %reg4471 ; [#uses=2] + %reg449 = and int %reg448, -256 ; [#uses=1] + %reg450 = add int %reg440, %reg449 ; [#uses=1] + %reg460 = and int %reg439, 255 ; [#uses=2] + %reg451 = and int %reg448, 255 ; [#uses=2] + %cond771 = setge int %reg451, %reg460 ; [#uses=1] + br bool %cond771, label %bb28, label %bb27 + +bb27: ;[#uses=2] + br label %bb28 + +bb28: ;[#uses=3] + %reg623 = phi int [ %reg460, %bb27 ], [ %reg451, %bb26 ] ; [#uses=1] + %reg469 = add int %reg623, 1 ; [#uses=1] + %reg470 = or int %reg450, %reg469 ; [#uses=1] + store int %reg470, int* %reg431 + %reg604-offset1 = add uint %reg604, 1 ; [#uses=1] + %reg4771 = getelementptr int* %parent, uint %reg604-offset1 ; [#uses=1] + store int -1, int* %reg4771 + %reg624 = add int %reg613, 1 ; [#uses=2] + %reg603-idxcast2 = cast int %reg603 to uint ; [#uses=1] + %reg603-idxcast2-offset = add uint %reg603-idxcast2, 1073741823 ; [#uses=1] + %reg485 = getelementptr int* %heap, uint %reg603-idxcast2-offset ; [#uses=1] + %cast902 = cast uint %reg621 to int ; [#uses=1] + store int %cast902, int* %reg485 + br label %bb30 + +bb29: ;[#uses=2] + %reg625-idxcast = cast int %reg625 to uint ; [#uses=1] + %reg526 = getelementptr int* %heap, uint %reg625-idxcast ; [#uses=1] + store int %reg510, int* %reg526 + br label %bb30 + +bb30: ;[#uses=2] + %reg625 = phi int [ %reg502, %bb29 ], [ %reg624, %bb28 ] ; [#uses=3] + %reg604-offset2 = add uint %reg604, 1 ; [#uses=1] + %reg501 = getelementptr int* %weight, uint %reg604-offset2 ; [#uses=1] + %reg502 = shr int %reg625, ubyte 1 ; [#uses=2] + %reg502-idxcast = cast int %reg502 to uint ; [#uses=1] + %reg509 = getelementptr int* %heap, uint %reg502-idxcast ; [#uses=1] + %reg510 = load int* %reg509 ; [#uses=2] + %reg510-idxcast = cast int %reg510 to uint ; [#uses=1] + %reg517 = getelementptr int* %weight, uint %reg510-idxcast ; [#uses=1] + %reg518 = load int* %reg501 ; [#uses=1] + %reg519 = load int* %reg517 ; [#uses=1] + %cond772 = setlt int %reg518, %reg519 ; [#uses=1] + br bool %cond772, label %bb29, label %bb31 + +bb31: ;[#uses=3] + %reg625-idxcast1 = cast int %reg625 to uint ; [#uses=1] + %reg542 = getelementptr int* %heap, uint %reg625-idxcast1 ; [#uses=1] + %cast916 = cast uint %reg621 to int ; [#uses=1] + store int %cast916, int* %reg542 + %cond773 = setgt int %reg624, 1 ; [#uses=1] + br bool %cond773, label %bb14, label %bb32 + +bb32: ;[#uses=2] + %reg627 = phi uint [ %reg621, %bb31 ], [ %cast918, %bb13 ] ; [#uses=1] + %cast919 = cast uint %reg627 to int ; [#uses=1] + %cond774 = setle int %cast919, 515 ; [#uses=1] + br bool %cond774, label %bb34, label %bb33 + +bb33: ;[#uses=1] + %cast785 = getelementptr [21 x sbyte]* %.LC1, uint 0, uint 0 ; [#uses=1] + call void %panic( sbyte* %cast785 ) + br label %bb34 + +bb34: ;[#uses=5] + %cond775 = setgt int 1, %reg109 ; [#uses=1] + br bool %cond775, label %bb40, label %bb35 + +bb35: ;[#uses=5] + %reg629 = phi ubyte [ %reg639, %bb39 ], [ 0, %bb34 ] ; [#uses=1] + %cann-indvar = phi uint [ 0, %bb34 ], [ %add1-indvar, %bb39 ] ; [#uses=4] + %cann-indvar-casted = cast uint %cann-indvar to int ; [#uses=1] + %reg630 = add int %cann-indvar-casted, 1 ; [#uses=2] + %add1-indvar = add uint %cann-indvar, 1 ; [#uses=1] + %cann-indvar-offset1 = add uint %cann-indvar, 1 ; [#uses=1] + %reg589 = getelementptr int* %parent, uint %cann-indvar-offset1 ; [#uses=1] + %reg590 = load int* %reg589 ; [#uses=1] + %cond776 = setlt int %reg590, 0 ; [#uses=1] + %parent-idxcast = cast int* %parent to uint ; [#uses=1] + %cast948 = cast int %reg630 to uint ; [#uses=1] + br bool %cond776, label %bb37, label %bb36 + +bb36: ;[#uses=5] + %reg632 = phi uint [ %reg634, %bb36 ], [ %cast948, %bb35 ] ; [#uses=1] + %reg633 = phi uint [ %reg635, %bb36 ], [ 0, %bb35 ] ; [#uses=2] + %reg633-casted = cast uint %reg633 to sbyte* ; [#uses=1] + %reg631-scale = mul sbyte* %reg633-casted, null ; [#uses=1] + %reg6311 = getelementptr sbyte* %reg631-scale, uint %parent-idxcast ; [#uses=2] + %reg632-scale = mul uint %reg632, 4 ; [#uses=1] + %reg5581 = getelementptr sbyte* %reg6311, uint %reg632-scale ; [#uses=1] + %cast924 = cast sbyte* %reg5581 to uint* ; [#uses=1] + %reg634 = load uint* %cast924 ; [#uses=2] + %reg635 = add uint %reg633, 1 ; [#uses=2] + %reg634-scale = mul uint %reg634, 4 ; [#uses=1] + %reg5501 = getelementptr sbyte* %reg6311, uint %reg634-scale ; [#uses=1] + %cast925 = cast sbyte* %reg5501 to int* ; [#uses=1] + %reg551 = load int* %cast925 ; [#uses=1] + %cond777 = setge int %reg551, 0 ; [#uses=1] + br bool %cond777, label %bb36, label %bb37 + +bb37: ;[#uses=3] + %reg637 = phi uint [ %reg635, %bb36 ], [ 0, %bb35 ] ; [#uses=2] + %cast928 = cast uint %reg637 to int ; [#uses=1] + %cann-indvar-offset = add uint %cann-indvar, 1 ; [#uses=1] + %reg561 = getelementptr ubyte* %reg107, uint %cann-indvar-offset ; [#uses=1] + %reg778 = getelementptr ubyte* %reg561, uint 4294967295 ; [#uses=1] + %cast788 = cast uint %reg637 to ubyte ; [#uses=1] + store ubyte %cast788, ubyte* %reg778 + %cond779 = setle int %cast928, %reg110 ; [#uses=1] + br bool %cond779, label %bb39, label %bb38 + +bb38: ;[#uses=2] + br label %bb39 + +bb39: ;[#uses=5] + %reg639 = phi ubyte [ 1, %bb38 ], [ %reg629, %bb37 ] ; [#uses=2] + %reg640 = add int %reg630, 1 ; [#uses=1] + %cond780 = setle int %reg640, %reg109 ; [#uses=1] + br bool %cond780, label %bb35, label %bb40 + +bb40: ;[#uses=2] + %reg641 = phi ubyte [ %reg639, %bb39 ], [ 0, %bb34 ] ; [#uses=1] + %cond781 = seteq ubyte %reg641, 0 ; [#uses=1] + br bool %cond781, label %bb44, label %bb41 + +bb41: ;[#uses=2] + %cond782 = setge int 1, %reg109 ; [#uses=1] + br bool %cond782, label %bb6, label %bb42 + +bb42: ;[#uses=3] + %cann-indvar2 = phi int [ 0, %bb41 ], [ %add1-indvar2, %bb42 ] ; [#uses=3] + %reg643 = add int %cann-indvar2, 1 ; [#uses=1] + %add1-indvar2 = add int %cann-indvar2, 1 ; [#uses=1] + %cann-indvar2-idxcast = cast int %cann-indvar2 to uint ; [#uses=1] + %cann-indvar2-idxcast-offset = add uint %cann-indvar2-idxcast, 1 ; [#uses=1] + %reg569 = getelementptr int* %weight, uint %cann-indvar2-idxcast-offset ; [#uses=2] + %reg570 = load int* %reg569 ; [#uses=2] + %reg644 = shr int %reg570, ubyte 8 ; [#uses=1] + %reg572 = shr int %reg570, ubyte 31 ; [#uses=1] + %cast933 = cast int %reg572 to uint ; [#uses=1] + %reg573 = shr uint %cast933, ubyte 31 ; [#uses=1] + %cast934 = cast uint %reg573 to int ; [#uses=1] + %reg574 = add int %reg644, %cast934 ; [#uses=1] + %reg571 = shr int %reg574, ubyte 1 ; [#uses=1] + %reg645 = add int %reg571, 1 ; [#uses=1] + %reg582 = shl int %reg645, ubyte 8 ; [#uses=1] + store int %reg582, int* %reg569 + %reg646 = add int %reg643, 1 ; [#uses=1] + %cond783 = setlt int %reg646, %reg109 ; [#uses=1] + br bool %cond783, label %bb42, label %bb43 + +bb43: ;[#uses=1] + br label %bb6 + +bb44: ;[#uses=1] + ret void +} + +declare void "panic"(sbyte*)