Fixture 152
deep nesting
C · 3 functions · 4 lanes · 12 of 12 function-lanes behave identically
All 4 lanes recompile and return the same results as the original.
Scale stress: nesting depth.
deep152_nested_loops puts twelve counted loops inside one another with four conditionals interleaved, so the innermost statement sits sixteen levels down. Each loop runs one or two iterations (the span is derived from the input with a mask, so it is bounded by construction), which caps the innermost body at 4096 executions.
deep152_conditional_tower is sixteen levels of nested if/else with no loops at all, and deep152_while_tower is twelve nested while loops carrying break and continue at several depths. Structuring algorithms that recurse per region, or that cap their nesting depth, degrade here into goto soup while the values they compute must still match.
#include <stdint.h>
/* Scale stress: nesting depth.
*
* `deep152_nested_loops` puts twelve counted loops inside one another with
* four conditionals interleaved, so the innermost statement sits sixteen
* levels down. Each loop runs one or two iterations (the span is derived
* from the input with a mask, so it is bounded by construction), which
* caps the innermost body at 4096 executions.
*
* `deep152_conditional_tower` is sixteen levels of nested if/else with no
* loops at all, and `deep152_while_tower` is twelve nested while loops
* carrying break and continue at several depths. Structuring algorithms
* that recurse per region, or that cap their nesting depth, degrade here
* into goto soup while the values they compute must still match. */
#define DEEP152_SLOTS 16
#define DEEP152_TOWER_LEVELS 16
__attribute__((noinline)) int32_t
deep152_nested_loops(int32_t *cells, int32_t slots, int32_t width) {
/* 1 or 2 by construction: no input can widen the trip count. */
uint32_t span = ((uint32_t)width & 1u) + 1u;
uint32_t acc = 0x811C9DC5u;
uint32_t l01, l02, l03, l04, l05, l06;
uint32_t l07, l08, l09, l10, l11, l12;
int32_t index;
if (cells == 0 || slots < 1 || slots > DEEP152_SLOTS) {
return -1;
}
for (index = 0; index < slots; ++index) {
cells[index] = index + 1;
}
for (l01 = 0; l01 < span; ++l01) {
for (l02 = 0; l02 < span; ++l02) {
if (((acc + l02) & 3u) != 3u) {
for (l03 = 0; l03 < span; ++l03) {
for (l04 = 0; l04 < span; ++l04) {
if ((acc & 0x10u) == 0u || l04 == 0u) {
for (l05 = 0; l05 < span; ++l05) {
for (l06 = 0; l06 < span; ++l06) {
if (((acc >> 5) & 1u) == 0u) {
for (l07 = 0; l07 < span; ++l07) {
for (l08 = 0; l08 < span; ++l08) {
if ((l07 ^ l08) != 1u) {
for (l09 = 0; l09 < span; ++l09) {
for (l10 = 0; l10 < span; ++l10) {
for (l11 = 0; l11 < span; ++l11) {
for (l12 = 0; l12 < span; ++l12) {
uint32_t mix = l01 + l04 + l08 + l12;
acc = acc * 16777619u + mix;
acc ^= acc >> 13;
cells[(int32_t)(acc % (uint32_t)slots)] +=
(int32_t)(mix + l05 + l09);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return (int32_t)(acc & 0x00FFFFFFu) + slots;
}
/* Sixteen nested if/else levels. Each level tests one bit of a rolling
* value; the else arm of level k produces a level-specific answer, so all
* seventeen exits are reachable. */
__attribute__((noinline)) int32_t deep152_conditional_tower(int32_t value) {
uint32_t roll = (uint32_t)value ^ 0xA5A5A5A5u;
int32_t depth = 0;
int32_t result = 0;
if (((roll >> 0u) & 1u) != 0u) {
depth = 1;
roll = roll * 1103515245u + 0x79B1u;
if (((roll >> 1u) & 1u) != 0u) {
depth = 2;
roll = roll * 1103515261u + 0xF362u;
if (((roll >> 2u) & 1u) != 0u) {
depth = 3;
roll = roll * 1103515277u + 0x6D13u;
if (((roll >> 3u) & 1u) != 0u) {
depth = 4;
roll = roll * 1103515293u + 0xE6C4u;
if (((roll >> 4u) & 1u) != 0u) {
depth = 5;
roll = roll * 1103515309u + 0x6075u;
if (((roll >> 5u) & 1u) != 0u) {
depth = 6;
roll = roll * 1103515325u + 0xDA26u;
if (((roll >> 6u) & 1u) != 0u) {
depth = 7;
roll = roll * 1103515341u + 0x53D7u;
if (((roll >> 7u) & 1u) != 0u) {
depth = 8;
roll = roll * 1103515357u + 0xCD88u;
if (((roll >> 8u) & 1u) != 0u) {
depth = 9;
roll = roll * 1103515373u + 0x4739u;
if (((roll >> 9u) & 1u) != 0u) {
depth = 10;
roll = roll * 1103515389u + 0xC0EAu;
if (((roll >> 10u) & 1u) != 0u) {
depth = 11;
roll = roll * 1103515405u + 0x3A9Bu;
if (((roll >> 11u) & 1u) != 0u) {
depth = 12;
roll = roll * 1103515421u + 0xB44Cu;
if (((roll >> 12u) & 1u) != 0u) {
depth = 13;
roll = roll * 1103515437u + 0x2DFDu;
if (((roll >> 13u) & 1u) != 0u) {
depth = 14;
roll = roll * 1103515453u + 0xA7AEu;
if (((roll >> 14u) & 1u) != 0u) {
depth = 15;
roll = roll * 1103515469u + 0x215Fu;
if (((roll >> 15u) & 1u) != 0u) {
depth = 16;
roll = roll * 1103515485u + 0x9B10u;
result = (int32_t)(roll & 0x0000FFFFu) + 4096;
} else {
result = (int32_t)((roll >> 16u) & 0x00000FFFu) - 16;
}
} else {
result = (int32_t)((roll >> 15u) & 0x00000FFFu) - 15;
}
} else {
result = (int32_t)((roll >> 14u) & 0x00000FFFu) - 14;
}
} else {
result = (int32_t)((roll >> 13u) & 0x00000FFFu) - 13;
}
} else {
result = (int32_t)((roll >> 12u) & 0x00000FFFu) - 12;
}
} else {
result = (int32_t)((roll >> 11u) & 0x00000FFFu) - 11;
}
} else {
result = (int32_t)((roll >> 10u) & 0x00000FFFu) - 10;
}
} else {
result = (int32_t)((roll >> 9u) & 0x00000FFFu) - 9;
}
} else {
result = (int32_t)((roll >> 8u) & 0x00000FFFu) - 8;
}
} else {
result = (int32_t)((roll >> 7u) & 0x00000FFFu) - 7;
}
} else {
result = (int32_t)((roll >> 6u) & 0x00000FFFu) - 6;
}
} else {
result = (int32_t)((roll >> 5u) & 0x00000FFFu) - 5;
}
} else {
result = (int32_t)((roll >> 4u) & 0x00000FFFu) - 4;
}
} else {
result = (int32_t)((roll >> 3u) & 0x00000FFFu) - 3;
}
} else {
result = (int32_t)((roll >> 2u) & 0x00000FFFu) - 2;
}
} else {
result = (int32_t)((roll >> 1u) & 0x00000FFFu) - 1;
}
return result * 17 + depth;
}
/* Twelve nested while loops. Each level increments its counter FIRST, so a
* `continue` can never skip the increment and every level terminates after
* at most `span` iterations. Breaks fire at levels 4, 7 and 10. */
__attribute__((noinline)) int32_t
deep152_while_tower(int32_t *cells, int32_t slots, int32_t width) {
uint32_t span = ((uint32_t)width & 1u) + 1u;
uint32_t acc = 0x2545F491u;
uint32_t w01, w02, w03, w04, w05, w06;
uint32_t w07, w08, w09, w10, w11, w12;
int32_t index;
if (cells == 0 || slots < 1 || slots > DEEP152_SLOTS) {
return -1;
}
for (index = 0; index < slots; ++index) {
cells[index] = 0;
}
w01 = 0u;
while (w01 < span) {
w01 += 1u;
acc += w01;
w02 = 0u;
while (w02 < span) {
w02 += 1u;
acc = acc * 1664525u + w02;
w03 = 0u;
while (w03 < span) {
w03 += 1u;
acc = acc * 1664525u + w03;
w04 = 0u;
while (w04 < span) {
w04 += 1u;
acc = acc * 1664525u + w04;
if ((acc & 0x00000700u) == 0x00000700u) {
break;
}
w05 = 0u;
while (w05 < span) {
w05 += 1u;
acc = acc * 1664525u + w05;
w06 = 0u;
while (w06 < span) {
w06 += 1u;
acc = acc * 1664525u + w06;
w07 = 0u;
while (w07 < span) {
w07 += 1u;
acc = acc * 1664525u + w07;
if ((acc & 0x000F0000u) == 0u) {
continue;
}
w08 = 0u;
while (w08 < span) {
w08 += 1u;
acc = acc * 1664525u + w08;
w09 = 0u;
while (w09 < span) {
w09 += 1u;
acc = acc * 1664525u + w09;
w10 = 0u;
while (w10 < span) {
w10 += 1u;
acc = acc * 1664525u + w10;
if ((acc >> 28) == 0xFu) {
break;
}
w11 = 0u;
while (w11 < span) {
w11 += 1u;
acc = acc * 1664525u + w11;
w12 = 0u;
while (w12 < span) {
w12 += 1u;
acc = acc * 1664525u + w12;
acc ^= acc >> 11;
cells[(int32_t)(acc % (uint32_t)slots)] +=
(int32_t)((w03 + w06 + w09 + w12) & 0x0000FFFFu);
}
}
}
}
}
}
}
}
}
}
}
}
return (int32_t)(acc & 0x00FFFFFFu) + DEEP152_TOWER_LEVELS;
} Recovered C
Generated by glaurung decompile --style decbench at b47f6b43.
baseline.json records the result after recompiling the C and calling it beside the
original with seeded inputs.
clang -O0
3/3deep152_conditional_tower pass 109 lines
// glaurung: deep152_conditional_tower @ 0x1410
int32_t deep152_conditional_tower(int32_t arg0) {
unsigned int roll;
int depth;
int result;
// x86-64 prologue: save rbp
roll = ((unsigned int)(arg0) ^ -0x5a5a5a5bLL);
depth = 0;
result = 0;
if (((unsigned long)((unsigned int)((roll & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 1))) & 4095)) - 1);
} else {
depth = 1;
roll = ((roll * 0x41c64e6d) + 0x79b1);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 1))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 2))) & 4095)) - 2);
} else {
depth = 2;
roll = ((roll * 0x41c64e7d) + 0xf362);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 2))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 3))) & 4095)) - 3);
} else {
depth = 3;
roll = ((roll * 0x41c64e8d) + 0x6d13);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 3))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 4))) & 4095)) - 4);
} else {
depth = 4;
roll = ((roll * 0x41c64e9d) + 0xe6c4);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 4))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 5))) & 4095)) - 5);
} else {
depth = 5;
roll = ((roll * 0x41c64ead) + 0x6075);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 5))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 6))) & 4095)) - 6);
} else {
depth = 6;
roll = ((roll * 0x41c64ebd) + 0xda26);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 6))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 7))) & 4095)) - 7);
} else {
depth = 7;
roll = ((roll * 0x41c64ecd) + 0x53d7);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 7))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 8))) & 4095)) - 8);
} else {
depth = 8;
roll = ((roll * 0x41c64edd) + 0xcd88);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 8))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 9))) & 4095)) - 9);
} else {
depth = 9;
roll = ((roll * 0x41c64eed) + 0x4739);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 9))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 10))) & 4095)) - 10);
} else {
depth = 10;
roll = ((roll * 0x41c64efd) + 0xc0ea);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 10))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 11))) & 4095)) - 11);
} else {
depth = 11;
roll = ((roll * 0x41c64f0d) + 0x3a9b);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 11))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 12))) & 4095)) - 12);
} else {
depth = 12;
roll = ((roll * 0x41c64f1d) + 0xb44c);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 12))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 13))) & 4095)) - 13);
} else {
depth = 13;
roll = ((roll * 0x41c64f2d) + 0x2dfd);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 13))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 14))) & 4095)) - 14);
} else {
depth = 14;
roll = ((roll * 0x41c64f3d) + 0xa7ae);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 14))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 15))) & 4095)) - 15);
} else {
depth = 15;
roll = ((roll * 0x41c64f4d) + 0x215f);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 15))) & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 16))) & 4095)) - 16);
} else {
depth = 16;
roll = ((roll * 0x41c64f5d) + 0x9b10);
result = ((unsigned int)((roll & 0xffff)) + 4096);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
// x86-64 epilogue: restore rbp
return (unsigned int)(((result * 17) + depth));
} deep152_nested_loops pass 113 lines
// glaurung: deep152_nested_loops @ 0x1100
int32_t deep152_nested_loops(int32_t * arg0, int32_t arg1, int32_t arg2) {
unsigned int span;
unsigned int acc;
int index;
unsigned int l01;
unsigned int l02;
unsigned int l03;
unsigned int l04;
unsigned int l05;
unsigned int l06;
unsigned int l07;
unsigned int l08;
unsigned int l09;
unsigned int l10;
unsigned int l11;
unsigned int l12;
unsigned int mix;
int local_4;
int local_5c;
long var73;
// x86-64 prologue: save rbp
span = ((unsigned int)(((unsigned long)((unsigned int)(arg2)) & 1)) + 1);
acc = -0x7ee3623bLL;
if ((arg0 == 0)) {
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
if (((long)(arg1) < 1)) {
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
if (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0)) {
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
for (index = 0; (index < arg1); index++) {
arg0[(long)(index)] = ((unsigned long)((unsigned int)(index)) + 1);
}
l01 = 0;
while (((unsigned long)(l01) < (unsigned long)(span))) {
l02 = 0;
while (((unsigned long)(l02) < (unsigned long)(span))) {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((acc + l02))) & 3))) != 3)) {
l03 = 0;
while (((unsigned long)(l03) < (unsigned long)(span))) {
l04 = 0;
while (((unsigned long)(l04) < (unsigned long)(span))) {
if (((unsigned long)((unsigned int)((acc & 16))) == 0)) {
L_11f5: ;
l05 = 0;
while (((unsigned long)(l05) < (unsigned long)(span))) {
l06 = 0;
while (((unsigned long)(l06) < (unsigned long)(span))) {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(acc) >> 5))) & 1))) == 0)) {
l07 = 0;
while (((unsigned long)(l07) < (unsigned long)(span))) {
l08 = 0;
while (((unsigned long)(l08) < (unsigned long)(span))) {
if (((unsigned long)((unsigned int)((l07 ^ l08))) != 1)) {
l09 = 0;
while (((unsigned long)(l09) < (unsigned long)(span))) {
l10 = 0;
while (((unsigned long)(l10) < (unsigned long)(span))) {
l11 = 0;
while (((unsigned long)(l11) < (unsigned long)(span))) {
for (l12 = 0; ((unsigned long)(l12) < (unsigned long)(span)); l12++) {
mix = ((unsigned int)(((unsigned long)((unsigned int)((l01 + l04))) + l08)) + l12);
acc = ((acc * 0x1000193) + mix);
acc = ((unsigned int)(((unsigned int)(acc) >> 13)) ^ acc);
local_5c = ((unsigned int)((mix + l05)) + l09);
var73 = (long)((int)(((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)(acc)) % (unsigned int)(arg1))))));
*(int *)(((long)arg0 + var73 * 4)) = ((unsigned long)((unsigned int)(local_5c)) + *(int *)(((long)arg0 + var73 * 4)));
}
l11 = (l11 + 1);
}
l10 = (l10 + 1);
}
l09 = (l09 + 1);
}
}
l08 = (l08 + 1);
}
l07 = (l07 + 1);
}
}
l06 = (l06 + 1);
}
l05 = (l05 + 1);
}
} else {
if ((l04 != 0)) {
goto L_13a6;
}
goto L_11f5;
}
L_13a6: ;
l04 = (l04 + 1);
}
l03 = (l03 + 1);
}
}
l02 = (l02 + 1);
}
l01 = (l01 + 1);
}
local_4 = ((unsigned int)((acc & 0xffffff)) + arg1);
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} deep152_while_tower pass 118 lines
// glaurung: deep152_while_tower @ 0x1830
int32_t deep152_while_tower(int32_t * arg0, int32_t arg1, int32_t arg2) {
unsigned int span;
unsigned int acc;
int index;
unsigned int w01;
unsigned int w02;
unsigned int w03;
unsigned int w04;
unsigned int w05;
unsigned int w06;
unsigned int w07;
unsigned int w08;
unsigned int w09;
unsigned int w10;
unsigned int w11;
unsigned int w12;
int local_4;
int local_58;
long var130;
// x86-64 prologue: save rbp
span = ((unsigned int)(((unsigned long)((unsigned int)(arg2)) & 1)) + 1);
acc = 0x2545f491;
if ((arg0 == 0)) {
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
if (((long)(arg1) < 1)) {
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
if (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0)) {
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
for (index = 0; (index < arg1); index++) {
arg0[(long)(index)] = 0;
}
w01 = 0;
while (((unsigned long)(w01) < (unsigned long)(span))) {
w01 = (w01 + 1);
acc = (w01 + acc);
w02 = 0;
while (((unsigned long)(w02) < (unsigned long)(span))) {
w02 = (w02 + 1);
acc = ((acc * 0x19660d) + w02);
w03 = 0;
while (((unsigned long)(w03) < (unsigned long)(span))) {
w03 = (w03 + 1);
acc = ((acc * 0x19660d) + w03);
w04 = 0;
while (((unsigned long)(w04) < (unsigned long)(span))) {
w04 = (w04 + 1);
acc = ((acc * 0x19660d) + w04);
if (((unsigned long)((unsigned int)((acc & 1792))) == 1792)) {
break;
}
w05 = 0;
while (((unsigned long)(w05) < (unsigned long)(span))) {
w05 = (w05 + 1);
acc = ((acc * 0x19660d) + w05);
w06 = 0;
while (((unsigned long)(w06) < (unsigned long)(span))) {
w06 = (w06 + 1);
acc = ((acc * 0x19660d) + w06);
w07 = 0;
while (((unsigned long)(w07) < (unsigned long)(span))) {
w07 = (w07 + 1);
acc = ((acc * 0x19660d) + w07);
if (((unsigned long)((unsigned int)((acc & 0xf0000))) != 0)) {
w08 = 0;
while (((unsigned long)(w08) < (unsigned long)(span))) {
w08 = (w08 + 1);
acc = ((acc * 0x19660d) + w08);
w09 = 0;
while (((unsigned long)(w09) < (unsigned long)(span))) {
w09 = (w09 + 1);
acc = ((acc * 0x19660d) + w09);
w10 = 0;
while (((unsigned long)(w10) < (unsigned long)(span))) {
w10 = (w10 + 1);
acc = ((acc * 0x19660d) + w10);
if (((unsigned long)((unsigned int)(((unsigned int)(acc) >> 28))) == 15)) {
break;
}
w11 = 0;
while (((unsigned long)(w11) < (unsigned long)(span))) {
w11 = (w11 + 1);
acc = ((acc * 0x19660d) + w11);
w12 = 0;
while (((unsigned long)(w12) < (unsigned long)(span))) {
w12 = (w12 + 1);
acc = ((acc * 0x19660d) + w12);
acc = ((unsigned int)(((unsigned int)(acc) >> 11)) ^ acc);
local_58 = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((w03 + w06))) + w09))) + w12)) & 0xffff);
var130 = (long)((int)(((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)(acc)) % (unsigned int)(arg1))))));
*(int *)(((long)arg0 + var130 * 4)) = ((unsigned long)((unsigned int)(local_58)) + *(int *)(((long)arg0 + var130 * 4)));
}
}
}
}
}
} else {
}
}
}
}
}
}
}
}
local_4 = ((unsigned int)((acc & 0xffffff)) + 16);
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} clang -O2
3/3deep152_conditional_tower pass 151 lines
// glaurung: deep152_conditional_tower @ 0x1440
int32_t deep152_conditional_tower(int32_t arg0) {
int depth;
int result;
unsigned int roll;
long var1;
long var10;
int var12;
long var13;
int var15;
long var16;
int var18;
long var19;
int var21;
long var22;
int var24;
long var25;
int var27;
long var28;
int var3;
int var30;
long var31;
int var33;
long var34;
int var36;
long var37;
int var39;
long var4;
long var40;
int var42;
long var43;
int var45;
long var46;
int var6;
long var7;
int var9;
var1 = (unsigned long)((unsigned int)((arg0 ^ -0x5a5a5a5bLL)));
if (((unsigned long)((unsigned char)((var1 & 1))) != 0)) {
var3 = ((var1 * 0x41c64e6d) + 0x79b1);
var4 = (unsigned long)((unsigned int)(var3));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var3)) & 2))) != 0)) {
var6 = ((var4 * 0x41c64e7d) + 0xf362);
var7 = (unsigned long)((unsigned int)(var6));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var6)) & 4))) != 0)) {
var9 = ((var7 * 0x41c64e8d) + 0x6d13);
var10 = (unsigned long)((unsigned int)(var9));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var9)) & 8))) != 0)) {
var12 = ((var10 * 0x41c64e9d) + 0xe6c4);
var13 = (unsigned long)((unsigned int)(var12));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var12)) & 16))) != 0)) {
var15 = ((var13 * 0x41c64ead) + 0x6075);
var16 = (unsigned long)((unsigned int)(var15));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var15)) & 32))) != 0)) {
var18 = ((var16 * 0x41c64ebd) + 0xda26);
var19 = (unsigned long)((unsigned int)(var18));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var18)) & 64))) != 0)) {
var21 = ((var19 * 0x41c64ecd) + 0x53d7);
var22 = (unsigned long)((unsigned int)(var21));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var21)) & 128))) != 0)) {
var24 = ((var22 * 0x41c64edd) + 0xcd88);
var25 = (unsigned long)((unsigned int)(var24));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var24)) & 256))) != 0)) {
var27 = ((var25 * 0x41c64eed) + 0x4739);
var28 = (unsigned long)((unsigned int)(var27));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var27)) & 512))) != 0)) {
var30 = ((var28 * 0x41c64efd) + 0xc0ea);
var31 = (unsigned long)((unsigned int)(var30));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var30)) & 1024))) != 0)) {
var33 = ((var31 * 0x41c64f0d) + 0x3a9b);
var34 = (unsigned long)((unsigned int)(var33));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var33)) & 2048))) != 0)) {
var36 = ((var34 * 0x41c64f1d) + 0xb44c);
var37 = (unsigned long)((unsigned int)(var36));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var36)) & 4096))) != 0)) {
var39 = ((var37 * 0x41c64f2d) + 0x2dfd);
var40 = (unsigned long)((unsigned int)(var39));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var39)) & 0x2000))) != 0)) {
var42 = ((var40 * 0x41c64f3d) + 0xa7ae);
var43 = (unsigned long)((unsigned int)(var42));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var42)) & 0x4000))) != 0)) {
var45 = ((var43 * 0x41c64f4d) + 0x215f);
var46 = (unsigned long)((unsigned int)(var45));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var45)) & 0x8000))) != 0)) {
depth = 16;
result = (unsigned long)((unsigned int)(((unsigned int)((unsigned short)(((unsigned long)((unsigned int)(((var46 * 0x41c64f5d) + 0x9b10))) & 0xffff))) + 4096)));
} else {
depth = 15;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var46)) >> 16))) & 4095))) - 16)));
}
} else {
depth = 14;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var43)) >> 15))) & 4095))) - 15)));
}
} else {
depth = 13;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var40)) >> 14))) & 4095))) - 14)));
}
} else {
depth = 12;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var37)) >> 13))) & 4095))) - 13)));
}
} else {
depth = 11;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var34)) >> 12))) & 4095))) - 12)));
}
} else {
depth = 10;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var31)) >> 11))) & 4095))) - 11)));
}
} else {
depth = 9;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var28)) >> 10))) & 4095))) - 10)));
}
} else {
depth = 8;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var25)) >> 9))) & 4095))) - 9)));
}
} else {
depth = 7;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var22)) >> 8))) & 4095))) - 8)));
}
} else {
depth = 6;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var19)) >> 7))) & 4095))) - 7)));
}
} else {
depth = 5;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var16)) >> 6))) & 4095))) - 6)));
}
} else {
depth = 4;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var13)) >> 5))) & 4095))) - 5)));
}
} else {
depth = 3;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var10)) >> 4))) & 4095))) - 4)));
}
} else {
depth = 2;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var7)) >> 3))) & 4095))) - 3)));
}
} else {
depth = 1;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var4)) >> 2))) & 4095))) - 2)));
}
} else {
depth = 0;
result = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var1)) >> 1))) & 4095))) - 1)));
}
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(result)) << 4))) + result))) + depth));
} deep152_nested_loops pass 305 lines
// glaurung: deep152_nested_loops @ 0x1110
int32_t deep152_nested_loops(int32_t * arg0, int32_t arg1, int32_t arg2) {
int index;
unsigned int acc;
unsigned int l02;
unsigned int l04;
unsigned int l08;
unsigned int l07;
unsigned int l01;
unsigned int l03;
unsigned int l05;
unsigned int l06;
unsigned int l09;
unsigned int l10;
unsigned int l11;
unsigned int l12;
unsigned int mix;
long local_38;
long local_40;
long local_48;
long local_50;
long local_58;
long local_60;
int local_64;
int local_68;
int local_6c;
long t443;
long t450;
long t453;
long t454;
long var0;
long var104;
int var111;
long var118;
long var123;
long var125;
int var128;
long var135;
long var140;
int var147;
long var154;
long var159;
int var161;
long var168;
long var173;
int var180;
long var187;
int var193;
long var200;
long var205;
int var212;
long var219;
int var225;
long var230;
int var243;
long var29;
long var33;
long var34;
long var35;
long var36;
long var37;
long var4;
long var47;
long var48;
long var49;
long var5;
long var50;
long var56;
long var60;
long var61;
long var62;
long var65;
long var68;
long var73;
long var75;
long var8;
long var83;
long var86;
long var87;
long var88;
long var89;
int var92;
long var99;
var0 = 0xffffffff;
if ((arg0 == 0)) {
return (unsigned int)(var0);
}
if (((unsigned long)((unsigned long)((unsigned int)((arg1 - 17)))) < (unsigned long)(0xfffffff0))) {
return (unsigned int)(var0);
}
var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) & 1)));
var5 = (unsigned long)((unsigned int)(arg1));
if (((unsigned long)(4) <= (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
var8 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var5)) & -4)));
*(int *)(((long)arg0)) = 1;
*(int *)(((long)arg0 + 0x4)) = 2;
*(int *)(((long)arg0 + 0x8)) = 3;
*(int *)(((long)arg0 + 0xc)) = 4;
if ((var8 != 4)) {
*(int *)(((long)arg0 + 0x10)) = 5;
*(int *)(((long)arg0 + 0x14)) = 6;
*(int *)(((long)arg0 + 0x18)) = 7;
*(int *)(((long)arg0 + 0x1c)) = 8;
if (((unsigned long)((unsigned int)(var8)) != 8)) {
*(int *)(((long)arg0 + 0x20)) = 9;
*(int *)(((long)arg0 + 0x24)) = 10;
*(int *)(((long)arg0 + 0x28)) = 11;
*(int *)(((long)arg0 + 0x2c)) = 12;
if (((unsigned long)((unsigned int)(var8)) != 12)) {
*(int *)(((long)arg0 + 0x30)) = 13;
*(int *)(((long)arg0 + 0x34)) = 14;
*(int *)(((long)arg0 + 0x38)) = 15;
*(int *)(((long)arg0 + 0x3c)) = 16;
}
}
}
index = arg2;
if ((var8 != var5)) {
L_1190: ;
do {
index = (var8 + 1);
*(int *)(((long)arg0 + var8 * 4)) = index;
var8 = (unsigned long)((unsigned int)(index));
} while ((var5 != index));
}
} else {
var8 = 0;
goto L_1190;
}
var29 = (unsigned long)((unsigned int)((var4 + 1)));
local_60 = 0;
local_6c = 1;
var33 = var34;
var35 = var36;
var37 = 0x811c9dc5;
do {
acc = var37;
l02 = 0;
do {
local_50 = (unsigned long)(l02);
if (((unsigned long)((unsigned char)(((~(unsigned long)((unsigned int)((l02 + acc)))) & 3))) != 0)) {
var47 = var33;
var48 = var35;
var49 = 0;
var50 = (unsigned long)(acc);
do {
local_48 = var49;
local_68 = local_6c;
var33 = var47;
var35 = var48;
acc = var50;
l04 = 0;
do {
local_40 = (unsigned long)(l04);
if (((unsigned long)((unsigned char)((acc & 16))) == 0)) {
L_1252: ;
var56 = (unsigned long)((unsigned int)((l04 + local_60)));
local_58 = 0;
local_64 = local_68;
var60 = var33;
var61 = var35;
var62 = (unsigned long)(acc);
do {
var65 = 0;
acc = var62;
do {
local_38 = var65;
l08 = var60;
var68 = var61;
if (((unsigned long)((unsigned char)((acc & 32))) == 0)) {
l07 = 0;
var73 = (unsigned long)(acc);
do {
var75 = (unsigned long)((unsigned int)(local_64));
l08 = 0;
acc = var73;
do {
if (((unsigned long)((unsigned int)((l08 ^ l07))) != 1)) {
var83 = (unsigned long)((unsigned int)((var56 + l08)));
var86 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var56 + l08))) + 1)));
var87 = (unsigned long)((unsigned int)(var75));
var88 = (unsigned long)((unsigned int)(var29));
var89 = (unsigned long)(acc);
do {
var92 = ((var89 * 0x1000193) + var83);
var99 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var92)) >> 13))) ^ (unsigned long)((unsigned int)(var92)))));
var104 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var99)))) % (unsigned int)(arg1))));
*(int *)(((long)arg0 + var104 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var104 * 4)))) + var87))) - 1);
if (((unsigned long)((unsigned int)(var4)) != 0)) {
var111 = ((var99 * 0x1000193) + var86);
var118 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var111)) >> 13))) ^ (unsigned long)((unsigned int)(var111)))));
var104 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var118)))) % (unsigned int)(arg1))));
*(int *)(((long)arg0 + var104 * 4)) = (*(int *)(((long)arg0 + var104 * 4)) + var87);
acc = var118;
var123 = var118;
if (((unsigned long)((unsigned int)(var4)) == 0)) {
L_1336: ;
if (((unsigned long)((unsigned int)(var4)) != 0)) {
var125 = (unsigned long)(acc);
L_13a4: ;
var128 = ((var125 * 0x1000193) + var83);
var135 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var128)) >> 13))) ^ (unsigned long)((unsigned int)(var128)))));
var140 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var135)))) % (unsigned int)(arg1))));
*(int *)(((long)arg0 + var140 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var140 * 4)))) + var87))) - 1);
var147 = ((var135 * 0x1000193) + var86);
var154 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var147)) >> 13))) ^ (unsigned long)((unsigned int)(var147)))));
var159 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var154)))) % (unsigned int)(arg1))));
*(int *)(((long)arg0 + var159 * 4)) = (*(int *)(((long)arg0 + var159 * 4)) + var87);
var161 = ((var154 * 0x1000193) + var83);
var168 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var161)) >> 13))) ^ (unsigned long)((unsigned int)(var161)))));
var173 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var168)))) % (unsigned int)(arg1))));
*(int *)(((long)arg0 + var173 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var173 * 4)))) + var87))) - 1);
var180 = ((var168 * 0x1000193) + var86);
var187 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var180)) >> 13))) ^ (unsigned long)((unsigned int)(var180)))));
var104 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var187)))) % (unsigned int)(arg1))));
*(int *)(((long)arg0 + var104 * 4)) = (*(int *)(((long)arg0 + var104 * 4)) + var87);
acc = var187;
}
} else {
L_135f: ;
var193 = ((var123 * 0x1000193) + var83);
var200 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var193)) >> 13))) ^ (unsigned long)((unsigned int)(var193)))));
var205 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var200)))) % (unsigned int)(arg1))));
*(int *)(((long)arg0 + var205 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var205 * 4)))) + var87))) - 1);
var212 = ((var200 * 0x1000193) + var86);
var219 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var212)) >> 13))) ^ (unsigned long)((unsigned int)(var212)))));
var104 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var219)))) % (unsigned int)(arg1))));
*(int *)(((long)arg0 + var104 * 4)) = (*(int *)(((long)arg0 + var104 * 4)) + var87);
acc = var219;
var125 = var219;
if (((unsigned long)((unsigned int)(var4)) == 0)) {
goto L_1300;
}
goto L_13a4;
}
} else {
acc = var99;
var123 = var99;
if (((unsigned long)((unsigned int)(var4)) != 0)) {
goto L_135f;
} else {
goto L_1336;
}
}
L_1300: ;
var87 = (unsigned long)((unsigned int)((var87 + 1)));
var225 = (var88 - 1);
var88 = (unsigned long)((unsigned int)(var225));
var89 = (unsigned long)(acc);
} while (((unsigned long)((unsigned int)(var225)) != 0));
}
var75 = (unsigned long)((unsigned int)((var75 + 1)));
t453 = (unsigned long)(l08);
l08 = (unsigned long)((unsigned int)((l08 + 1)));
} while ((t453 != (unsigned long)((unsigned int)(var4))));
t454 = (unsigned long)(l07);
var68 = (unsigned long)((unsigned int)((l07 + 1)));
l07 = var68;
var73 = (unsigned long)(acc);
} while ((t454 != (unsigned long)((unsigned int)(var4))));
}
var65 = (unsigned long)((unsigned int)((local_38 + 1)));
var60 = (unsigned long)(l08);
var61 = var68;
} while (((unsigned int)(local_38) != (unsigned int)(var4)));
var230 = local_58;
local_64 = (local_64 + 1);
t450 = (unsigned long)((unsigned int)(local_58));
local_58 = (unsigned int)((local_58 + 1));
var33 = (unsigned long)(l08);
var35 = var68;
var60 = (unsigned long)(l08);
var61 = var68;
var62 = (unsigned long)(acc);
l04 = var230;
} while ((t450 != (unsigned long)((unsigned int)(var4))));
} else {
if ((l04 != 0)) {
goto L_1230;
}
goto L_1252;
}
L_1230: ;
local_68 = (local_68 + 1);
l04 = (unsigned long)((unsigned int)((local_40 + 1)));
} while (((unsigned int)(local_40) != (unsigned int)(var4)));
var49 = (unsigned long)((unsigned int)((local_48 + 1)));
var47 = var33;
var48 = var35;
var50 = (unsigned long)(acc);
l02 = local_48;
} while (((unsigned int)(local_48) != (unsigned int)(var4)));
}
l02 = (unsigned long)((unsigned int)((local_50 + 1)));
} while (((unsigned int)(local_50) != (unsigned int)(var4)));
local_6c = (local_6c + 1);
t443 = (unsigned long)((unsigned int)(local_60));
local_60 = (unsigned int)((local_60 + 1));
var37 = (unsigned long)(acc);
} while ((t443 != (unsigned long)((unsigned int)(var4))));
var243 = ((unsigned int)((acc & 0xffffff)) + arg1);
var0 = (unsigned long)((unsigned int)(var243));
// x86-64 epilogue: tear down frame
return (unsigned int)(var243);
} deep152_while_tower pass 258 lines
// glaurung: deep152_while_tower @ 0x16e0
__attribute__((no_stack_protector)) int32_t deep152_while_tower(int32_t * arg0, int32_t arg1, int32_t arg2) {
extern void * memset(void *, int, __SIZE_TYPE__);
unsigned int acc;
unsigned int w07;
unsigned int w08;
unsigned int w09;
int index;
unsigned int w01;
unsigned int w02;
unsigned int w03;
unsigned int w04;
unsigned int w05;
unsigned int w06;
unsigned int w10;
unsigned int w11;
unsigned int w12;
unsigned char local_78[120];
long t483;
long var0;
long var1;
long var100;
long var105;
long var106;
long var107;
long var11;
long var110;
long var112;
long var113;
int var116;
int var120;
long var127;
long var132;
int var133;
long var134;
int var141;
long var15;
long var157;
long var16;
int var160;
int var162;
long var169;
long var174;
long var18;
int var181;
long var188;
long var193;
long var20;
int var200;
long var207;
long var212;
int var219;
long var230;
int var237;
long var244;
long var249;
int var256;
int var281;
long var29;
long var4;
long var40;
long var49;
long var51;
long var53;
int var56;
long var57;
long var6;
long var64;
long var73;
long var76;
int var89;
void * var9;
long var90;
long var97;
long var98;
// x86-64 prologue: save callee registers, frame 48 bytes
var0 = 0xffffffff;
if ((arg0 == 0)) {
// x86-64 epilogue: restore callee registers
return (unsigned int)(var0);
}
var1 = (unsigned long)((unsigned int)(arg1));
if (((unsigned long)((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) - 17)))) < (unsigned long)(0xfffffff0))) {
// x86-64 epilogue: restore callee registers
return (unsigned int)(var0);
}
var4 = (long)arg0;
var6 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) & 1)));
*(int *)(&local_78[0]) = 0;
var9 = memset((void *)(arg0), 0, (__SIZE_TYPE__)(((unsigned long)((unsigned int)(var1)) << 2)));
var11 = (unsigned long)((unsigned int)((var6 + 1)));
var15 = var16;
var18 = 0x2545f491;
do {
var20 = (unsigned long)((unsigned int)(*(int *)(&local_78[0])));
*(int *)(&local_78[0]) = (var20 + 1);
*(long *)((&local_78[0] + 32)) = var20;
var29 = 0;
acc = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var18 + var20))) + 1)));
do {
*(int *)((&local_78[0] + 4)) = ((unsigned long)((unsigned int)(var29)) + 1);
*(long *)((&local_78[0] + 40)) = (unsigned int)(var29);
var40 = 0;
acc = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var29)) + (acc * 0x19660d)))) + 1)));
do {
*(int *)((&local_78[0] + 8)) = ((unsigned long)((unsigned int)(var40)) + 1);
*(long *)((&local_78[0] + 24)) = (unsigned int)(var40);
var49 = 0;
var51 = var15;
var53 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var40)) + (acc * 0x19660d)))) + 1)));
while (1) {
var56 = ((unsigned int)((var49 + (var53 * 0x19660d))) + 1);
var57 = (unsigned long)((unsigned int)(var56));
w07 = var51;
acc = (unsigned long)((unsigned int)(var56));
if (((unsigned long)((unsigned int)(((~(unsigned long)((unsigned int)(var56))) & 1792))) == 0)) {
break;
}
*(long *)((&local_78[0] + 48)) = var49;
*(int *)((&local_78[0] + 12)) = (var49 + 1);
var64 = 0;
acc = var57;
do {
*(int *)((&local_78[0] + 16)) = ((unsigned long)((unsigned int)(var64)) + 1);
*(long *)((&local_78[0] + 56)) = (unsigned int)(var64);
var73 = (unsigned long)((unsigned int)(*(long *)((&local_78[0] + 24))));
var76 = 0;
acc = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var64)) + (acc * 0x19660d)))) + 1)));
do {
*(int *)((&local_78[0] + 20)) = ((unsigned long)((unsigned int)(var76)) + 1);
*(long *)((&local_78[0] + 64)) = (unsigned int)(var76);
w07 = 0;
acc = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var76)) + (acc * 0x19660d)))) + 1)));
do {
var89 = ((unsigned int)(((acc * 0x19660d) + w07)) + 1);
var90 = (unsigned long)((unsigned int)(var89));
acc = (unsigned long)((unsigned int)(var89));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var89)) & 0xf0000))) != 0)) {
var97 = 0;
var98 = var90;
do {
var100 = (unsigned long)((unsigned int)(var97));
w08 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var97)) + 1)));
var105 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var97)) + (var98 * 0x19660d)))) + 1)));
var106 = 0xc69acd4c;
var107 = 0x19660e;
var110 = 0;
do {
var112 = (unsigned long)((unsigned int)(var105));
var113 = (unsigned long)((unsigned int)(var110));
w09 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var110)) + 1)));
var116 = ((var105 * 0x17385ca9) + var107);
var105 = (unsigned long)((unsigned int)(var116));
if (((unsigned long)((unsigned long)((unsigned int)(var116))) <= (unsigned long)(0xefffffff))) {
var120 = ((var112 * 0x979e791) + var106);
var127 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var120)) >> 11))) ^ (unsigned long)((unsigned int)(var120)))));
var132 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var127)))) % (unsigned int)(var1))));
var133 = (var113 + var73);
var134 = (unsigned long)((unsigned int)(var133));
*(int *)((var4 + var132 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var4 + var132 * 4)))) + (unsigned long)((unsigned int)(var133))))) + 4);
if (((unsigned long)((unsigned int)(var6)) != 0)) {
var141 = ((var127 * 0x19660d) + 2);
var127 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var141)) >> 11))) ^ (unsigned long)((unsigned int)(var141)))));
var132 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var127)))) % (unsigned int)(var1))));
*(int *)((var4 + var132 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var4 + var132 * 4)))) + var134))) + 5);
var157 = var127;
if (((unsigned long)((unsigned int)(var6)) == 0)) {
L_194d: ;
var105 = var157;
if (((unsigned long)((unsigned int)(var6)) != 0)) {
L_19d9: ;
var160 = ((var157 * 0x19660d) + 2);
var105 = (unsigned long)((unsigned int)(var160));
if (((unsigned long)((unsigned long)((unsigned int)(var160))) <= (unsigned long)(0xefffffff))) {
var162 = ((var105 * 0x17385ca9) + 0x19660e);
var169 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var162)) >> 11))) ^ (unsigned long)((unsigned int)(var162)))));
var174 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var169)))) % (unsigned int)(var1))));
*(int *)((var4 + var174 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var4 + var174 * 4)))) + var134))) + 4);
var181 = ((var169 * 0x19660d) + 2);
var188 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var181)) >> 11))) ^ (unsigned long)((unsigned int)(var181)))));
var193 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var188)))) % (unsigned int)(var1))));
*(int *)((var4 + var193 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var4 + var193 * 4)))) + var134))) + 5);
var200 = ((var188 * 0x17385ca9) + 0x32cc1b);
var207 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var200)) >> 11))) ^ (unsigned long)((unsigned int)(var200)))));
var212 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var207)))) % (unsigned int)(var1))));
*(int *)((var4 + var212 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var4 + var212 * 4)))) + var134))) + 4);
var219 = ((var207 * 0x19660d) + 2);
var105 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var219)) >> 11))) ^ (unsigned long)((unsigned int)(var219)))));
var230 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var105)))) % (unsigned int)(var1))));
*(int *)((var4 + var230 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var4 + var230 * 4)))) + var134))) + 5);
}
}
} else {
L_1988: ;
var237 = ((var127 * 0x17385ca9) + 0x32cc1b);
var244 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var237)) >> 11))) ^ (unsigned long)((unsigned int)(var237)))));
var249 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var244)))) % (unsigned int)(var1))));
*(int *)((var4 + var249 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var4 + var249 * 4)))) + var134))) + 4);
var256 = ((var244 * 0x19660d) + 2);
var105 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var256)) >> 11))) ^ (unsigned long)((unsigned int)(var256)))));
var132 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var105)))) % (unsigned int)(var1))));
*(int *)((var4 + var132 * 4)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var4 + var132 * 4)))) + var134))) + 5);
var157 = var105;
if (((unsigned long)((unsigned int)(var6)) == 0)) {
goto L_18f0;
}
goto L_19d9;
}
} else {
var157 = var127;
if (((unsigned long)((unsigned int)(var6)) != 0)) {
goto L_1988;
} else {
goto L_194d;
}
}
}
L_18f0: ;
var106 = (unsigned long)((unsigned int)((var106 - 0x50b6f56b)));
var107 = (unsigned long)((unsigned int)((var107 + 0x19660d)));
var110 = (unsigned long)(w09);
} while (((unsigned long)((unsigned int)(var11)) != w09));
acc = var105;
var97 = (unsigned long)(w08);
var98 = var105;
} while (((unsigned int)(var100) != (unsigned int)(var6)));
}
t483 = (unsigned long)(w07);
w07 = (unsigned long)((unsigned int)((w07 + 1)));
} while ((t483 != (unsigned long)((unsigned int)(var6))));
var73 = (unsigned long)((unsigned int)((var73 + 1)));
var76 = (unsigned long)((unsigned int)(*(int *)((&local_78[0] + 20))));
var51 = (unsigned long)(w07);
} while (((unsigned int)(*(long *)((&local_78[0] + 64))) != (unsigned int)(var6)));
var51 = (unsigned long)(w07);
var64 = (unsigned long)((unsigned int)(*(int *)((&local_78[0] + 16))));
} while (((unsigned int)(*(long *)((&local_78[0] + 56))) != (unsigned int)(var6)));
var49 = (unsigned long)((unsigned int)(*(int *)((&local_78[0] + 12))));
var51 = (unsigned long)(w07);
var53 = (unsigned long)(acc);
if (((unsigned int)(*(long *)((&local_78[0] + 48))) == (unsigned int)(var6))) {
break;
}
}
var40 = (unsigned long)((unsigned int)(*(int *)((&local_78[0] + 8))));
var15 = (unsigned long)(w07);
} while (((unsigned int)(*(long *)((&local_78[0] + 24))) != (unsigned int)(var6)));
var15 = (unsigned long)(w07);
var29 = (unsigned long)((unsigned int)(*(int *)((&local_78[0] + 4))));
} while (((unsigned int)(*(long *)((&local_78[0] + 40))) != (unsigned int)(var6)));
var15 = (unsigned long)(w07);
var18 = (unsigned long)(acc);
} while (((unsigned int)(*(long *)((&local_78[0] + 32))) != (unsigned int)(var6)));
var281 = ((unsigned int)((acc & 0xffffff)) + 16);
var0 = (unsigned long)((unsigned int)(var281));
// x86-64 epilogue: restore callee registers
return (unsigned int)(var281);
} gcc -O0
3/3deep152_conditional_tower pass 109 lines
// glaurung: deep152_conditional_tower @ 0x1388
int32_t deep152_conditional_tower(int32_t arg0) {
unsigned int roll;
int depth;
int result;
// x86-64 prologue: save rbp
roll = ((unsigned int)(arg0) ^ -0x5a5a5a5bLL);
depth = 0;
result = 0;
if (((unsigned long)((unsigned int)((roll & 1))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 1))) & 4095)) - 1);
} else {
depth = 1;
roll = ((roll * 0x41c64e6d) + 0x79b1);
if (((unsigned long)((unsigned int)((roll & 2))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 2))) & 4095)) - 2);
} else {
depth = 2;
roll = ((roll * 0x41c64e7d) + 0xf362);
if (((unsigned long)((unsigned int)((roll & 4))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 3))) & 4095)) - 3);
} else {
depth = 3;
roll = ((roll * 0x41c64e8d) + 0x6d13);
if (((unsigned long)((unsigned int)((roll & 8))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 4))) & 4095)) - 4);
} else {
depth = 4;
roll = ((roll * 0x41c64e9d) + 0xe6c4);
if (((unsigned long)((unsigned int)((roll & 16))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 5))) & 4095)) - 5);
} else {
depth = 5;
roll = ((roll * 0x41c64ead) + 0x6075);
if (((unsigned long)((unsigned int)((roll & 32))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 6))) & 4095)) - 6);
} else {
depth = 6;
roll = ((roll * 0x41c64ebd) + 0xda26);
if (((unsigned long)((unsigned int)((roll & 64))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 7))) & 4095)) - 7);
} else {
depth = 7;
roll = ((roll * 0x41c64ecd) + 0x53d7);
if (((unsigned long)((unsigned int)((roll & 128))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 8))) & 4095)) - 8);
} else {
depth = 8;
roll = ((roll * 0x41c64edd) + 0xcd88);
if (((unsigned long)((unsigned int)((roll & 256))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 9))) & 4095)) - 9);
} else {
depth = 9;
roll = ((roll * 0x41c64eed) + 0x4739);
if (((unsigned long)((unsigned int)((roll & 512))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 10))) & 4095)) - 10);
} else {
depth = 10;
roll = ((roll * 0x41c64efd) + 0xc0ea);
if (((unsigned long)((unsigned int)((roll & 1024))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 11))) & 4095)) - 11);
} else {
depth = 11;
roll = ((roll * 0x41c64f0d) + 0x3a9b);
if (((unsigned long)((unsigned int)((roll & 2048))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 12))) & 4095)) - 12);
} else {
depth = 12;
roll = ((roll * 0x41c64f1d) + 0xb44c);
if (((unsigned long)((unsigned int)((roll & 4096))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 13))) & 4095)) - 13);
} else {
depth = 13;
roll = ((roll * 0x41c64f2d) + 0x2dfd);
if (((unsigned long)((unsigned int)((roll & 0x2000))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 14))) & 4095)) - 14);
} else {
depth = 14;
roll = ((roll * 0x41c64f3d) + 0xa7ae);
if (((unsigned long)((unsigned int)((roll & 0x4000))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 15))) & 4095)) - 15);
} else {
depth = 15;
roll = ((roll * 0x41c64f4d) + 0x215f);
if (((unsigned long)((unsigned int)((roll & 0x8000))) == 0)) {
result = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)(roll) >> 16))) & 4095)) - 16);
} else {
depth = 16;
roll = ((roll * 0x41c64f5d) + 0x9b10);
result = ((unsigned int)((unsigned short)((roll & 0xffff))) + 4096);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(depth)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(result)) << 4))) + (unsigned long)((unsigned int)(result)))))));
} deep152_nested_loops pass 106 lines
// glaurung: deep152_nested_loops @ 0x10f9
int32_t deep152_nested_loops(int32_t * arg0, int32_t arg1, int32_t arg2) {
unsigned int span;
unsigned int acc;
int index;
unsigned int l01;
unsigned int l02;
unsigned int l03;
unsigned int l04;
unsigned int l05;
unsigned int l06;
unsigned int l07;
unsigned int l08;
unsigned int l09;
unsigned int l10;
unsigned int l11;
unsigned int l12;
unsigned int mix;
long var65;
// x86-64 prologue: save rbp
span = ((unsigned int)(((unsigned long)((unsigned int)(arg2)) & 1)) + 1);
acc = -0x7ee3623bLL;
if ((arg0 == 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
if ((((unsigned long)((unsigned int)(arg1)) == 0) | ((long)(arg1) < 0))) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
if (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
for (index = 0; (index < arg1); index++) {
arg0[(long)(index)] = ((unsigned long)((unsigned int)(index)) + 1);
}
l01 = 0;
while (((unsigned long)(l01) < (unsigned long)(span))) {
l02 = 0;
while (((unsigned long)(l02) < (unsigned long)(span))) {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((l02 + acc))) & 3))) != 3)) {
l03 = 0;
while (((unsigned long)(l03) < (unsigned long)(span))) {
l04 = 0;
while (((unsigned long)(l04) < (unsigned long)(span))) {
if (((unsigned long)((unsigned int)((acc & 16))) == 0)) {
L_11c4: ;
l05 = 0;
while (((unsigned long)(l05) < (unsigned long)(span))) {
l06 = 0;
while (((unsigned long)(l06) < (unsigned long)(span))) {
if (((unsigned long)((unsigned int)((acc & 32))) == 0)) {
l07 = 0;
while (((unsigned long)(l07) < (unsigned long)(span))) {
l08 = 0;
while (((unsigned long)(l08) < (unsigned long)(span))) {
if (((unsigned long)((unsigned int)((l07 ^ l08))) != 1)) {
l09 = 0;
while (((unsigned long)(l09) < (unsigned long)(span))) {
l10 = 0;
while (((unsigned long)(l10) < (unsigned long)(span))) {
l11 = 0;
while (((unsigned long)(l11) < (unsigned long)(span))) {
for (l12 = 0; ((unsigned long)(l12) < (unsigned long)(span)); l12++) {
mix = (l12 + (unsigned int)(((unsigned long)((unsigned int)((l01 + l04))) + l08)));
acc = (mix + (acc * 0x1000193));
acc = (acc ^ (unsigned int)(((unsigned int)(acc) >> 13)));
var65 = (unsigned long)((unsigned int)(((unsigned int)(((((unsigned long long)(unsigned int)(0) << 32) | (unsigned int)(acc)) % (unsigned int)((unsigned long)((unsigned int)(arg1))))))));
arg0[(long)((int)(var65))] = ((unsigned long)((unsigned int)(arg0[(long)((int)(var65))])) + (unsigned long)((unsigned int)((l09 + (unsigned long)((unsigned int)((mix + l05)))))));
}
l11 = (l11 + 1);
}
l10 = (l10 + 1);
}
l09 = (l09 + 1);
}
}
l08 = (l08 + 1);
}
l07 = (l07 + 1);
}
}
l06 = (l06 + 1);
}
l05 = (l05 + 1);
}
} else {
if ((l04 != 0)) {
goto L_1337;
}
goto L_11c4;
}
L_1337: ;
l04 = (l04 + 1);
}
l03 = (l03 + 1);
}
}
l02 = (l02 + 1);
}
l01 = (l01 + 1);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(((unsigned long)(acc) & 0xffffff)))));
} deep152_while_tower pass 111 lines
// glaurung: deep152_while_tower @ 0x1782
int32_t deep152_while_tower(int32_t * arg0, int32_t arg1, int32_t arg2) {
unsigned int span;
unsigned int acc;
int index;
unsigned int w01;
unsigned int w02;
unsigned int w03;
unsigned int w04;
unsigned int w05;
unsigned int w06;
unsigned int w07;
unsigned int w08;
unsigned int w09;
unsigned int w10;
unsigned int w11;
unsigned int w12;
long var98;
// x86-64 prologue: save rbp
span = ((unsigned int)(((unsigned long)((unsigned int)(arg2)) & 1)) + 1);
acc = 0x2545f491;
if ((arg0 == 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
if ((((unsigned long)((unsigned int)(arg1)) == 0) | ((long)(arg1) < 0))) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
if (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
for (index = 0; (index < arg1); index++) {
arg0[(long)(index)] = 0;
}
w01 = 0;
while (((unsigned long)(w01) < (unsigned long)(span))) {
w01 = (w01 + 1);
acc = (acc + w01);
w02 = 0;
while (((unsigned long)(w02) < (unsigned long)(span))) {
w02 = (w02 + 1);
acc = (w02 + (acc * 0x19660d));
w03 = 0;
while (((unsigned long)(w03) < (unsigned long)(span))) {
w03 = (w03 + 1);
acc = (w03 + (acc * 0x19660d));
w04 = 0;
while (((unsigned long)(w04) < (unsigned long)(span))) {
w04 = (w04 + 1);
acc = (w04 + (acc * 0x19660d));
if (((unsigned long)((unsigned int)((acc & 1792))) == 1792)) {
break;
}
w05 = 0;
while (((unsigned long)(w05) < (unsigned long)(span))) {
w05 = (w05 + 1);
acc = (w05 + (acc * 0x19660d));
w06 = 0;
while (((unsigned long)(w06) < (unsigned long)(span))) {
w06 = (w06 + 1);
acc = (w06 + (acc * 0x19660d));
w07 = 0;
while (((unsigned long)(w07) < (unsigned long)(span))) {
w07 = (w07 + 1);
acc = (w07 + (acc * 0x19660d));
if (((unsigned long)((unsigned int)((acc & 0xf0000))) != 0)) {
w08 = 0;
while (((unsigned long)(w08) < (unsigned long)(span))) {
w08 = (w08 + 1);
acc = (w08 + (acc * 0x19660d));
w09 = 0;
while (((unsigned long)(w09) < (unsigned long)(span))) {
w09 = (w09 + 1);
acc = (w09 + (acc * 0x19660d));
w10 = 0;
while (((unsigned long)(w10) < (unsigned long)(span))) {
w10 = (w10 + 1);
acc = (w10 + (acc * 0x19660d));
if (((unsigned long)((unsigned int)(((unsigned int)(acc) >> 28))) == 15)) {
break;
}
w11 = 0;
while (((unsigned long)(w11) < (unsigned long)(span))) {
w11 = (w11 + 1);
acc = (w11 + (acc * 0x19660d));
w12 = 0;
while (((unsigned long)(w12) < (unsigned long)(span))) {
w12 = (w12 + 1);
acc = (w12 + (acc * 0x19660d));
acc = (acc ^ (unsigned int)(((unsigned int)(acc) >> 11)));
var98 = (unsigned long)((unsigned int)(((unsigned int)(((((unsigned long long)(unsigned int)(0) << 32) | (unsigned int)(acc)) % (unsigned int)((unsigned long)((unsigned int)(arg1))))))));
arg0[(long)((int)(var98))] = ((unsigned int)((unsigned short)(((unsigned long)((unsigned int)((w12 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((w03 + w06))) + w09)))))) & 0xffff))) + (unsigned long)((unsigned int)(arg0[(long)((int)(var98))])));
}
}
}
}
}
} else {
}
}
}
}
}
}
}
}
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)(acc) & 0xffffff))) + 16));
} gcc -O2
3/3deep152_conditional_tower pass 184 lines
// glaurung: deep152_conditional_tower @ 0x1350
int32_t deep152_conditional_tower(int32_t arg0) {
int depth;
int result;
unsigned int roll;
long var10;
int var12;
long var13;
int var15;
long var16;
int var18;
long var19;
long var2;
int var21;
long var22;
int var24;
long var25;
int var27;
long var28;
int var30;
long var31;
int var33;
long var34;
int var36;
long var37;
int var39;
long var40;
int var42;
long var43;
int var45;
long var46;
int var48;
long var49;
long var56;
long var57;
int var6;
long var7;
long var80;
int var9;
long var94;
var2 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) ^ -0x5a5a5a5bLL)));
if (((unsigned long)((unsigned int)((arg0 & 1))) == 0)) {
var6 = ((var2 * 0x41c64e6d) + 0x79b1);
var7 = (unsigned long)((unsigned int)(var6));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var6)) & 2))) == 0)) {
goto L_14d0;
}
var9 = ((var7 * 0x41c64e7d) + 0xf362);
var10 = (unsigned long)((unsigned int)(var9));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var9)) & 4))) == 0)) {
goto L_14f0;
}
var12 = ((var10 * 0x41c64e8d) + 0x6d13);
var13 = (unsigned long)((unsigned int)(var12));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var12)) & 8))) == 0)) {
goto L_1510;
}
var15 = ((var13 * 0x41c64e9d) + 0xe6c4);
var16 = (unsigned long)((unsigned int)(var15));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var15)) & 16))) == 0)) {
goto L_1528;
}
var18 = ((var16 * 0x41c64ead) + 0x6075);
var19 = (unsigned long)((unsigned int)(var18));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var18)) & 32))) == 0)) {
goto L_1540;
}
var21 = ((var19 * 0x41c64ebd) + 0xda26);
var22 = (unsigned long)((unsigned int)(var21));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var21)) & 64))) == 0)) {
goto L_1556;
}
var24 = ((var22 * 0x41c64ecd) + 0x53d7);
var25 = (unsigned long)((unsigned int)(var24));
if (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var24)) & 128))) == 0)) {
goto L_156b;
}
var27 = ((var25 * 0x41c64edd) + 0xcd88);
var28 = (unsigned long)((unsigned int)(var27));
if (((unsigned long)((unsigned char)((((unsigned long)((unsigned int)(var27)) >> 8) & 1))) == 0)) {
goto L_1583;
}
var30 = ((var28 * 0x41c64eed) + 0x4739);
var31 = (unsigned long)((unsigned int)(var30));
if (((unsigned long)((unsigned char)((((unsigned long)((unsigned int)(var30)) >> 8) & 2))) == 0)) {
goto L_159b;
}
var33 = ((var31 * 0x41c64efd) + 0xc0ea);
var34 = (unsigned long)((unsigned int)(var33));
if (((unsigned long)((unsigned char)((((unsigned long)((unsigned int)(var33)) >> 8) & 4))) == 0)) {
goto L_15b3;
}
var36 = ((var34 * 0x41c64f0d) + 0x3a9b);
var37 = (unsigned long)((unsigned int)(var36));
if (((unsigned long)((unsigned char)((((unsigned long)((unsigned int)(var36)) >> 8) & 8))) == 0)) {
goto L_15cb;
}
var39 = ((var37 * 0x41c64f1d) + 0xb44c);
var40 = (unsigned long)((unsigned int)(var39));
if (((unsigned long)((unsigned char)((((unsigned long)((unsigned int)(var39)) >> 8) & 16))) == 0)) {
goto L_15fb;
}
var42 = ((var40 * 0x41c64f2d) + 0x2dfd);
var43 = (unsigned long)((unsigned int)(var42));
if (((unsigned long)((unsigned char)((((unsigned long)((unsigned int)(var42)) >> 8) & 32))) == 0)) {
goto L_15e3;
}
var45 = ((var43 * 0x41c64f3d) + 0xa7ae);
var46 = (unsigned long)((unsigned int)(var45));
if (((unsigned long)((unsigned char)((((unsigned long)((unsigned int)(var45)) >> 8) & 64))) == 0)) {
goto L_162b;
}
var48 = ((var46 * 0x41c64f4d) + 0x215f);
var49 = (unsigned long)((unsigned int)(var48));
if (((unsigned long)((unsigned char)((((unsigned long)((unsigned int)(var48)) >> 8) & 128))) == 0)) {
goto L_1613;
}
var56 = (unsigned long)((unsigned int)(((unsigned int)((unsigned short)(((unsigned long)((unsigned int)(((var49 * 0x41c64f5d) + 0x9b10))) & 0xffff))) + 4096)));
var57 = 16;
goto L_14bd;
}
var57 = 0;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var2)) >> 1))) & 4095))) - 1)));
L_14bd: ;
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var56)) << 4))) + var56))) + var57));
L_14d0: ;
var80 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var7)) >> 2))) & 4095))) - 2)));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var80)) << 4))) + var80))) + 1));
L_14f0: ;
var94 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var10)) >> 3))) & 4095))) - 3)));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var94)) << 4))) + var94))) + 2));
L_1510: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var13)) >> 4))) & 4095))) - 4)));
var57 = 3;
goto L_14bd;
L_1528: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var16)) >> 5))) & 4095))) - 5)));
var57 = 4;
goto L_14bd;
L_1540: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var19)) >> 6))) & 4095))) - 6)));
var57 = 5;
goto L_14bd;
L_1556: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var22)) >> 7))) & 4095))) - 7)));
var57 = 6;
goto L_14bd;
L_156b: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var25)) >> 8))) & 4095))) - 8)));
var57 = 7;
goto L_14bd;
L_1583: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var28)) >> 9))) & 4095))) - 9)));
var57 = 8;
goto L_14bd;
L_159b: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var31)) >> 10))) & 4095))) - 10)));
var57 = 9;
goto L_14bd;
L_15b3: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var34)) >> 11))) & 4095))) - 11)));
var57 = 10;
goto L_14bd;
L_15cb: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var37)) >> 12))) & 4095))) - 12)));
var57 = 11;
goto L_14bd;
L_15e3: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var43)) >> 14))) & 4095))) - 14)));
var57 = 13;
goto L_14bd;
L_15fb: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var40)) >> 13))) & 4095))) - 13)));
var57 = 12;
goto L_14bd;
L_1613: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var49)) >> 16))) & 4095))) - 16)));
var57 = 15;
goto L_14bd;
L_162b: ;
var56 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var46)) >> 15))) & 4095))) - 15)));
var57 = 14;
goto L_14bd;
} deep152_nested_loops pass 227 lines
// glaurung: deep152_nested_loops @ 0x1100
int32_t deep152_nested_loops(int32_t * arg0, int32_t arg1, int32_t arg2) {
int index;
unsigned int span;
unsigned int mix;
unsigned int l11;
unsigned int l10;
unsigned int l09;
unsigned int acc;
unsigned int l01;
unsigned int l02;
unsigned int l03;
unsigned int l04;
unsigned int l05;
unsigned int l06;
unsigned int l07;
unsigned int l08;
unsigned int l12;
int local_34;
int local_38;
int local_3c;
int local_40;
int local_44;
int local_48;
int local_4c;
int local_50;
int local_54;
int local_58;
long ret;
long var1;
int var10;
int var100;
long var107;
long var110;
long var111;
int var112;
long var15;
long var16;
long var19;
long var20;
long var26;
long var29;
int * var3;
long var38;
long var39;
long var4;
long var40;
long var42;
long var45;
long var5;
long var54;
long var55;
long var58;
long var6;
long var69;
long var70;
int var73;
long var74;
long var76;
long var78;
long var83;
long var84;
long var88;
long var89;
long var92;
var1 = (unsigned long)((unsigned int)((arg2 & 1)));
local_34 = var1;
if (((unsigned long)(15) < (unsigned long)((unsigned long)((unsigned int)((arg1 - 1)))))) {
goto L_1345;
}
var3 = (int *)arg0;
if ((arg0 == 0)) {
goto L_1345;
}
var4 = (unsigned long)((unsigned int)((var1 + 1)));
var5 = (unsigned long)((unsigned int)(arg1));
var6 = (long)arg0;
index = 0;
do {
var10 = (index + 1);
index = (unsigned long)((unsigned int)(var10));
var6 = (var6 + 4);
*(int *)((var6 - 0x4)) = var10;
} while (((long)((int)(var10)) < (long)((int)(var5))));
local_44 = 0;
span = (unsigned long)((unsigned int)(var4));
var15 = (unsigned long)((unsigned int)(var5));
var16 = (long)var3;
var19 = 0x811c9dc5;
L_1168: ;
local_48 = 0;
var20 = var19;
L_1170: ;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_48)) + var20))) & 3))) != 3)) {
goto L_11c0;
}
L_117e: ;
var26 = (unsigned long)((unsigned int)(local_48));
local_48 = 1;
if (((unsigned long)((unsigned long)((unsigned int)((var26 + 1)))) < (unsigned long)(span))) {
goto L_1170;
}
var29 = (unsigned long)((unsigned int)(local_44));
local_44 = 1;
var19 = var20;
if (((unsigned long)((unsigned long)((unsigned int)((var29 + 1)))) < (unsigned long)(span))) {
goto L_1168;
}
ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var20)) & 0xffffff))) + var15)));
L_11b0: ;
// x86-64 epilogue: tear down frame
return ret;
L_11c0: ;
local_3c = 0;
var38 = var16;
var39 = (unsigned long)((unsigned int)(var20));
L_11d1: ;
local_58 = 0;
var40 = var39;
L_11d9: ;
if (((unsigned long)((unsigned char)((var40 & 16))) == 0)) {
goto L_1220;
}
if (((unsigned long)((unsigned int)(local_58)) == 0)) {
goto L_1220;
}
L_11e7: ;
var42 = (unsigned long)((unsigned int)(local_58));
local_58 = 1;
if (((unsigned long)((unsigned long)((unsigned int)((var42 + 1)))) < (unsigned long)(span))) {
goto L_11d9;
}
var45 = (unsigned long)((unsigned int)(local_3c));
local_3c = 1;
var39 = var40;
if (((unsigned long)((unsigned long)((unsigned int)((var45 + 1)))) < (unsigned long)(span))) {
goto L_11d1;
}
var16 = var38;
var20 = (unsigned long)((unsigned int)(var40));
goto L_117e;
L_1220: ;
local_4c = 0;
var54 = (unsigned long)((unsigned int)(var15));
local_38 = ((unsigned int)(local_44) + local_58);
L_1237: ;
local_54 = 0;
L_123f: ;
if (((unsigned long)((unsigned char)((var40 & 32))) == 0)) {
goto L_1278;
}
L_1245: ;
var55 = (unsigned long)((unsigned int)(local_54));
local_54 = 1;
if (((unsigned long)((unsigned long)((unsigned int)((var55 + 1)))) < (unsigned long)(span))) {
goto L_123f;
}
var58 = (unsigned long)((unsigned int)(local_4c));
local_4c = 1;
if (((unsigned long)((unsigned long)((unsigned int)((var58 + 1)))) < (unsigned long)(span))) {
goto L_1237;
}
var15 = (unsigned long)((unsigned int)(var54));
goto L_11e7;
L_1278: ;
local_50 = 0;
local_40 = (((unsigned int)(local_34) + (unsigned int)(local_44)) + 1);
L_1290: ;
var69 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_40)) + local_58)));
var70 = 0;
L_129b: ;
var73 = ((unsigned int)(local_50) ^ var70);
var74 = (unsigned long)((unsigned int)(var73));
if (((unsigned long)((unsigned int)(var73)) == 0)) {
goto L_12d0;
}
L_12a5: ;
var76 = (unsigned long)((unsigned int)((var70 + 1)));
var69 = (unsigned long)((unsigned int)((var69 + 1)));
var70 = 1;
if (((unsigned long)((unsigned long)((unsigned int)(var76))) < (unsigned long)(span))) {
goto L_129b;
}
var78 = (unsigned long)((unsigned int)(local_50));
local_50 = 1;
if (((unsigned long)((unsigned long)((unsigned int)((var78 + 1)))) < (unsigned long)(span))) {
goto L_1290;
}
goto L_1245;
L_12d0: ;
var83 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_38)) + var70)));
var84 = (unsigned long)((unsigned int)(var74));
do {
var88 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_4c)) + var84)));
var89 = (unsigned long)((unsigned int)(var74));
do {
var92 = (unsigned long)((unsigned int)(var74));
do {
mix = (unsigned long)((unsigned int)(var83));
do {
var100 = ((var40 * 0x1000193) + mix);
var107 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var100)) >> 13))) ^ (unsigned long)((unsigned int)(var100)))));
var110 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var107)))) % (unsigned int)(var54))));
var111 = (unsigned long)((unsigned int)((var88 + mix)));
var112 = (mix + 1);
mix = (unsigned long)((unsigned int)(var112));
*(int *)((var38 + var110 * 4)) = (*(int *)((var38 + var110 * 4)) + var111);
var40 = var107;
} while (((unsigned int)(var69) != (unsigned int)(var112)));
l11 = (unsigned long)((unsigned int)((var92 + 1)));
var40 = var107;
var92 = 1;
} while (((unsigned long)(l11) < (unsigned long)(span)));
l10 = (unsigned long)((unsigned int)((var89 + 1)));
var89 = 1;
var40 = var107;
} while (((unsigned long)(l10) < (unsigned long)(span)));
l09 = (unsigned long)((unsigned int)((var84 + 1)));
var84 = 1;
var40 = var107;
} while (((unsigned long)(l09) < (unsigned long)(span)));
var40 = var107;
goto L_12a5;
L_1345: ;
ret = 0xffffffff;
goto L_11b0;
} deep152_while_tower pass 223 lines
// glaurung: deep152_while_tower @ 0x1650
int32_t deep152_while_tower(int32_t * arg0, int32_t arg1, int32_t arg2) {
unsigned int span;
unsigned int w01;
unsigned int w02;
unsigned int acc;
unsigned int w04;
unsigned int w05;
unsigned int w06;
unsigned int w07;
unsigned int w08;
unsigned int w09;
unsigned int w10;
unsigned int w11;
unsigned int w12;
unsigned int w03;
long df_1;
int local_34;
int local_38;
int local_3c;
int local_40;
int local_44;
int local_48;
int local_4c;
long t141;
long t170;
long var102;
long var107;
long var108;
long var11;
long var113;
long var116;
long var12;
int var121;
long var130;
long var131;
long var139;
long var141;
int var146;
long var155;
long var157;
long var159;
long var160;
long var161;
long var18;
long var19;
long var34;
long var35;
long var40;
long var43;
long var49;
int var52;
long var58;
long var6;
int var64;
long var65;
long var71;
long var79;
long var86;
long var87;
long var9;
int var90;
long var91;
long var97;
df_1 = 0;
span = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg2 & 1))) + 1)));
if (((unsigned long)(15) < (unsigned long)((unsigned long)((unsigned int)((arg1 - 1)))))) {
return 0xffffffff;
}
var6 = (long)arg0;
if ((arg0 == 0)) {
return 0xffffffff;
}
var9 = (unsigned long)((unsigned int)(arg1));
var11 = ((((unsigned long)((unsigned int)(arg1)) == 0) | ((long)(arg1) < 0)) ? 4 : ((unsigned long)((unsigned int)(arg1)) << 2));
var12 = (unsigned long)((unsigned int)(var11));
if (((unsigned long)((unsigned long)((unsigned int)(var11))) < (unsigned long)(8))) {
if (((unsigned long)((unsigned int)((var11 & 4))) != 0)) {
*(int *)(((long)arg0)) = 0;
*(int *)(((long)arg0 + var12 - 0x4)) = 0;
} else {
if (((unsigned long)((unsigned int)(var12)) != 0)) {
*(signed char *)(((long)arg0)) = 0;
if (((unsigned long)((unsigned char)((var12 & 2))) != 0)) {
*(short *)(((long)arg0 + var12 - 0x2)) = 0;
}
}
}
} else {
*(long *)(((long)arg0)) = 0;
var18 = (long)((arg0 + 2));
*(long *)(((var18 + (unsigned long)((unsigned int)(var11))) - 16)) = 0;
var19 = (var18 & -8);
var12 = 0;
t141 = var19;
t170 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((var6 - var19) + var11))) >> 3)));
while ((t170 != 0)) {
*(long *)(t141) = var12;
t141 = (t141 + ((df_1 != 0) ? -8 : 8));
t170 = (t170 - 1);
}
}
var34 = 0;
var35 = 0x2545f491;
do {
w01 = (var34 + 1);
local_40 = w01;
var40 = (unsigned long)((unsigned int)((var35 + w01)));
var43 = 0;
do {
w02 = (var43 + 1);
local_48 = 0;
local_3c = w02;
var49 = (unsigned long)((unsigned int)(((var40 * 0x19660d) + w02)));
do {
var52 = ((unsigned int)(local_48) + 1);
local_38 = var52;
var58 = 0;
acc = (unsigned long)((unsigned int)(((var49 * 0x19660d) + (unsigned long)((unsigned int)(var52)))));
while (1) {
w04 = (var58 + 1);
local_34 = w04;
var64 = ((acc * 0x19660d) + w04);
var65 = (unsigned long)((unsigned int)(var64));
var40 = (unsigned long)((unsigned int)(var64));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var64)) & 1792))) == 1792)) {
break;
}
var71 = 0;
acc = var65;
do {
w05 = (var71 + 1);
local_44 = w05;
var79 = 0;
acc = (unsigned long)((unsigned int)(((acc * 0x19660d) + w05)));
do {
w06 = (unsigned long)((unsigned int)((var79 + 1)));
var86 = 0;
var87 = (unsigned long)((unsigned int)(((acc * 0x19660d) + w06)));
do {
w07 = (unsigned long)((unsigned int)((var86 + 1)));
var90 = ((var87 * 0x19660d) + w07);
var91 = (unsigned long)((unsigned int)(var90));
acc = (unsigned long)((unsigned int)(var90));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var90)) & 0xf0000))) != 0)) {
local_4c = ((unsigned int)(local_48) - 1);
var97 = 0;
acc = var91;
do {
w08 = (unsigned long)((unsigned int)((var97 + 1)));
var102 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_4c)) + w06)));
var107 = 0;
var108 = (unsigned long)((unsigned int)(((acc * 0x19660d) + w08)));
do {
w09 = (unsigned long)((unsigned int)((var107 + 1)));
var113 = 0;
var116 = (unsigned long)((unsigned int)(((var108 * 0x19660d) + w09)));
while (1) {
w10 = (unsigned long)((unsigned int)((var113 + 1)));
var121 = ((var116 * 0x19660d) + w10);
var131 = (unsigned long)((unsigned int)(var121));
acc = (unsigned long)((unsigned int)(var121));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var121)) >> 28))) == 15)) {
break;
}
var130 = 0;
do {
w11 = (unsigned long)((unsigned int)((var130 + 1)));
var139 = (unsigned long)((unsigned int)(((var131 * 0x19660d) + w11)));
var141 = 0;
do {
w12 = (unsigned long)((unsigned int)((var141 + 1)));
var146 = ((var139 * 0x19660d) + w12);
var139 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var146)) >> 11))) ^ (unsigned long)((unsigned int)(var146)))));
var155 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var139)))) % (unsigned int)(var9))));
*(int *)((var6 + var155 * 4)) = (*(int *)((var6 + var155 * 4)) + (unsigned long)((unsigned int)(((var102 + var141) + 4))));
var141 = 1;
} while (((unsigned long)(w12) < (unsigned long)(span)));
var157 = 1;
var130 = 1;
var131 = var139;
} while (((unsigned long)(w11) < (unsigned long)(span)));
var113 = var157;
var116 = var139;
acc = var139;
if (((unsigned long)(span) <= (unsigned long)(w10))) {
break;
}
}
var102 = (unsigned long)((unsigned int)((var102 + 1)));
var159 = 1;
var107 = 1;
var108 = (unsigned long)(acc);
} while (((unsigned long)(w09) < (unsigned long)(span)));
var97 = var159;
} while (((unsigned long)(w08) < (unsigned long)(span)));
}
var160 = 1;
var86 = 1;
var87 = (unsigned long)(acc);
} while (((unsigned long)(w07) < (unsigned long)(span)));
var79 = var160;
} while (((unsigned long)(w06) < (unsigned long)(span)));
var71 = var160;
} while (((unsigned long)((unsigned long)((unsigned int)(local_44))) < (unsigned long)(span)));
var58 = var160;
var40 = (unsigned long)(acc);
if (((unsigned long)(span) <= (unsigned long)((unsigned long)((unsigned int)(local_34))))) {
break;
}
}
local_48 = 1;
var49 = var40;
} while (((unsigned long)((unsigned long)((unsigned int)(local_38))) < (unsigned long)(span)));
var161 = 1;
var43 = 1;
} while (((unsigned long)((unsigned long)((unsigned int)(local_3c))) < (unsigned long)(span)));
var34 = var161;
var35 = var40;
} while (((unsigned long)((unsigned long)((unsigned int)(local_40))) < (unsigned long)(span)));
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var40)) & 0xffffff))) + 16));
}