Fixture 03
loop shapes
C · 18 functions · 4 lanes · 72 of 72 function-lanes behave identically
All 4 lanes recompile and return the same results as the original.
Loop-shape fixture. Every function is a pure integer function whose result depends on the EXACT loop structure a correct decompilation must recover: how many times the body runs, whether the test is pre- or post-tested, where the latches are, and — critically — that per-iteration header computation stays INSIDE the loop and runs every iteration. A hoisted loop-header computation, a do/while turned into a while (or vice versa), a dropped back-edge, or a mis-placed break/continue changes the accumulated result, which an execution-differential test catches.
Targets review #4 (loop structuring). Several functions take an int* buffer (the differential gate supplies a fresh buffer of 8 random ints) so the loop is genuinely data-driven and header hoisting is observable. Keep every function pure (no globals, no libc) and deterministic. Buffers are read-only unless a comment says the function mutates.
/* 03_loop_shapes.c
*
* Loop-shape fixture. Every function is a pure integer function whose result
* depends on the EXACT loop structure a correct decompilation must recover:
* how many times the body runs, whether the test is pre- or post-tested, where
* the latches are, and — critically — that per-iteration header computation
* stays INSIDE the loop and runs every iteration. A hoisted loop-header
* computation, a do/while turned into a while (or vice versa), a dropped
* back-edge, or a mis-placed break/continue changes the accumulated result,
* which an execution-differential test catches.
*
* Targets review #4 (loop structuring). Several functions take an `int*` buffer
* (the differential gate supplies a fresh buffer of 8 random ints) so the loop
* is genuinely data-driven and header hoisting is observable. Keep every
* function pure (no globals, no libc) and deterministic. Buffers are read-only
* unless a comment says the function mutates.
*/
#include <stdint.h>
#define N 8 /* the differential gate drives pointer params as 8 ints */
/* --- counting for --------------------------------------------------- */
/* Plain counted for over the buffer: sum of 8 elements. A hoisted or
* off-by-one bound changes the sum. */
int for_sum(const int *p) {
int s = 0;
for (int i = 0; i < N; i++)
s += p[i];
return s;
}
/* Counted for with a stride of 2 and a running weight — exercises that the
* induction variable update is recovered exactly. */
int for_stride2(const int *p) {
int s = 0;
for (int i = 0; i < N; i += 2)
s += p[i] * (i + 1);
return s;
}
/* Counted-down for: bound and direction must survive. */
int for_countdown(const int *p) {
int s = 0;
for (int i = N - 1; i >= 0; i--)
s = s * 3 + p[i];
return s;
}
/* --- while (pre-tested) --------------------------------------------- */
/* Pre-tested while: the body must NOT run when the test is already false.
* Here the walk stops at the first non-negative element, folding a prefix. */
/* HOIST TRAP — measured, do not "simplify" this loop's lowering.
*
* This function is one of exactly four the loop-header hoist fallback protects. The
* verbose `while (1) { pre; if (!cond) break; }` form it decompiles to is NOT an
* accident to be tidied away: hoisting the header above the loop lets constant
* propagation substitute the initial value that dominates at the hoist position, which
* freezes the loop-carried value and the loop stops making progress.
*
* Measured on branch `recover-ged-cells` (see docs/design/ged-recovery-measured-trade.md):
* always-hoisting recovers 50.32 GED points, 46% of a regression — and breaks exactly
* these four functions across six lanes:
* 03_loop_shapes:gcc:O2:while_prefix
* 12_loop_rotation:gcc:O2:find_first_set
* 13_loop_early_exit:{clang,gcc}:O2:classify_run
* 14_flag_effects:{clang,gcc}:O0:countdown
* So the compact form is worth real score, and it is wrong. That is the trade.
*
* FOUR predicates have been tried and all four failed, each differently: a copy-chain
* rule, a loop-invariance rule, a use-count rule, and a post-fold check requiring only a
* nonempty read/write intersection (which passes `find_first_set`, whose body reassigns
* its flag lower down while the frozen value sits inside the hoisted expression). If a
* post-fold check is attempted again it must preserve EVERY original loop-carried
* dependency, not one overlapping register.
*
* The real fix is typed value identity plus dominance, where "may this expression move
* here" is a query rather than a guess — value-model-root-cause-and-plan.md Phase 2.
*/
int while_prefix(const int *p) {
int i = 0;
int s = 0;
while (i < N && p[i] < 0) {
s += p[i];
i++;
}
return s * 10 + i; /* i encodes how many iterations actually ran */
}
/* While whose HEADER reloads a buffer element every iteration: the loop
* condition reads p[i] each pass. If the header load is hoisted out, the loop
* either never terminates (broken) or folds the wrong count. The returned
* value encodes the stopping index, so hoisting is directly observable. */
int while_reload_header(const int *p) {
int i = 0;
/* advance while the current element is even; the p[i] read is IN the
* header and must execute on every iteration. */
while (i < N && (p[i] & 1) == 0) {
i++;
}
return i * 1000 + (i < N ? p[i] : -1);
}
/* --- do / while (post-tested, CRITICAL) ----------------------------- */
/* do/while: the body runs at least once even though the test could be false on
* entry. If lowered as a pre-tested while, the first element is skipped and the
* result changes. The post-test is evaluated every iteration. */
int dowhile_atleastonce(const int *p) {
int i = 0;
int s = 0;
do {
s += p[i];
i++;
} while (i < N && p[i - 1] > 0);
return s * 10 + i; /* i >= 1 always; a pre-test lowering could give 0 */
}
/* do/while that runs exactly once for an entry that fails the test — this is
* the case a while() would skip entirely. The header recomputes `t` each pass.
*
* `t` is UNSIGNED deliberately. With a signed `t`, `t >> 8` sign-extends, so any
* negative input parks `t` at -1 and the loop never terminates — the fixture would
* hang the differential for INT_MIN, -1, -2 (which the boundary sweep passes) and
* the "sum of the byte lanes" contract below would be false. The loop shape under
* test — a do/while whose header input is recomputed in the body — is unchanged. */
int dowhile_recompute(int x) {
int s = 0;
unsigned t = (unsigned)x;
do {
s += (int)(t & 0xFFu);
t >>= 8; /* per-iteration header input, recomputed in the body */
} while (t != 0);
return s; /* == sum of the byte lanes of x, at least one lane */
}
/* --- nested loops --------------------------------------------------- */
/* Nested loops over the buffer: an O(N^2) fold. The inner bound depends on the
* outer index, so the trip count and the join structure must be exact. */
int nested_pairs(const int *p) {
int s = 0;
for (int i = 0; i < N; i++)
for (int j = i; j < N; j++)
s += p[i] ^ p[j];
return s;
}
/* Nested loop where the inner loop mutates a running accumulator carried across
* outer iterations — tests that the outer back-edge does not reset inner state
* incorrectly. */
int nested_carry(const int *p) {
int acc = 1;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < N; j++)
acc += (acc + p[j]) & 7;
}
return acc;
}
/* --- two back-edges / two latches (continue in the middle) ---------- */
/* A single loop with two latches: the `continue` creates a second back-edge
* distinct from the fall-off-the-bottom back-edge. A structurer that collapses
* them or reorders the guard changes which elements are folded. */
int two_latches(const int *p) {
int s = 0;
for (int i = 0; i < N; i++) {
if ((p[i] & 1) != 0) {
s -= 1;
continue; /* latch #1: back-edge from the middle */
}
s += p[i];
} /* latch #2: normal loop-bottom back-edge */
return s;
}
/* --- break --------------------------------------------------------- */
/* break out on the first element exceeding a threshold; the return encodes both
* the partial sum and the break index. A dropped break folds the whole buffer. */
int loop_break(const int *p) {
int s = 0;
int i = 0;
for (; i < N; i++) {
if (p[i] > 1000000)
break;
s += p[i];
}
return s * 10 + i;
}
/* --- continue ------------------------------------------------------- */
/* continue to skip negative elements: only non-negatives are summed. Miscompiled
* continue polarity flips which elements contribute. */
int loop_continue(const int *p) {
int s = 0;
for (int i = 0; i < N; i++) {
if (p[i] < 0)
continue;
s += p[i];
}
return s;
}
/* --- early return from inside a loop -------------------------------- */
/* Early return the moment a zero element is found, yielding its index; if none,
* return a sentinel. The in-loop return must not be sunk below the loop. */
int loop_early_return(const int *p) {
for (int i = 0; i < N; i++) {
if (p[i] == 0)
return i + 1;
}
return -1;
}
/* Early return carrying a computed accumulator: returns as soon as the running
* sum goes negative. */
int loop_return_on_neg(const int *p) {
int s = 0;
for (int i = 0; i < N; i++) {
s += p[i];
if (s < 0)
return i * 100 + (s & 0xFF);
}
return s;
}
/* --- side-effecting / reloading loop condition ---------------------- */
/* The loop CONDITION contains a side-effecting update: `x = step(x)` runs, then
* the comparison. The header must execute the assignment every iteration. If the
* update is hoisted, the walk length changes. Returns the step count reached. */
static int step_index(int x) {
return (x * 5 + 1) & (N - 1); /* stays within [0, N) */
}
int cond_side_effect(int x) {
int count = 0;
int guard = 0;
/* comma operator in the header: update THEN test, every iteration. */
while ((x = step_index(x), guard++ , guard < N)) {
count += x;
}
return count * 10 + guard;
}
/* Loop whose header reads a NEW pointer element each pass to decide
* continuation, while the body accumulates a transform. Both the header read
* and the body run per iteration; hoisting the header read breaks termination
* or the fold. */
int cond_reload_and_transform(const int *p) {
int s = 0;
int i = 0;
while (i < N && (p[i] % 7) != 3) { /* header reload of p[i] each pass */
s += p[i] * 2 - 1;
i++;
}
return s * 10 + i;
}
/* --- buffer-mutating loop (differential gate compares before/after) --- */
/* Mutates the passed-in buffer in place: each element becomes a running prefix
* transform. The gate compares the buffer before/after, so a loop that runs the
* wrong number of times or hoists the carry is caught by the mutation diff. */
void mutate_prefix(int *p) {
int carry = 3;
for (int i = 0; i < N; i++) {
int v = p[i] + carry;
carry = (carry * 2 + p[i]) & 0xFFFF; /* carry recomputed each pass */
p[i] = v;
}
}
/* In-place reverse via a two-index loop with a single latch: exercises that the
* bound (i < j) is recovered exactly. */
void mutate_reverse(int *p) {
int i = 0, j = N - 1;
while (i < j) {
int t = p[i];
p[i] = p[j];
p[j] = t;
i++;
j--;
}
} 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
18/18cond_reload_and_transform pass 22 lines
// glaurung: cond_reload_and_transform @ 0x1730
int cond_reload_and_transform(const int * arg0) {
int s;
int i;
signed char local_11;
long var5;
s = 0;
i = 0;
L_1746: ;
local_11 = 0;
if (((long)(i) < 8)) {
var5 = (unsigned long)((unsigned int)(arg0[(long)(i)]));
local_11 = ((unsigned long)((unsigned int)(((int)((((long long)(int)((((unsigned long)((long)((int)(var5))) >> 32) & 0xffffffff)) * (((long long)1) << 32)) + (unsigned int)(var5)) % (int)(7))))) != 3);
}
if (((unsigned long)((unsigned char)((local_11 & 1))) == 0)) {
// x86-64 epilogue: restore rbp
return (unsigned int)(((s * 10) + i));
}
s = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) << 1))) - 1)) + s);
i = ((unsigned int)(i) + 1);
goto L_1746;
} cond_side_effect pass 23 lines
// glaurung: cond_side_effect @ 0x16b0
int cond_side_effect(int arg0) {
extern int step_index(int);
int count;
int guard;
int local_4;
long var0;
// x86-64 prologue: save rbp, frame 16 bytes
local_4 = arg0;
count = 0;
guard = 0;
while (1) {
var0 = ((long (*)(long))step_index)((unsigned long)((unsigned int)(local_4)));
local_4 = var0;
guard = ((unsigned int)(guard) + 1);
if ((8 <= (long)(guard))) {
break;
}
count = ((unsigned int)(local_4) + count);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(((count * 10) + guard));
} dowhile_atleastonce pass 21 lines
// glaurung: dowhile_atleastonce @ 0x1300
int dowhile_atleastonce(const int * arg0) {
int i;
int s;
signed char local_11;
long t146;
// x86-64 prologue: save rbp
i = 0;
s = 0;
do {
s = ((unsigned int)(arg0[(long)(i)]) + s);
i = ((unsigned int)(i) + 1);
local_11 = 0;
if (((long)(i) < 8)) {
t146 = arg0[(long)((int)(((unsigned long)((unsigned int)(i)) - 1)))];
local_11 = ((((unsigned long)((unsigned int)(t146)) == 0) | ((long)((int)(t146)) < 0)) == 0);
}
} while (((unsigned long)((unsigned char)((local_11 & 1))) != 0));
// x86-64 epilogue: restore rbp
return (unsigned int)(((s * 10) + i));
} dowhile_recompute pass 14 lines
// glaurung: dowhile_recompute @ 0x1370
int dowhile_recompute(int arg0) {
int s;
unsigned int t;
// x86-64 prologue: save rbp
s = 0;
t = arg0;
do {
s = ((unsigned int)((t & 255)) + s);
t = ((unsigned int)(t) >> 8);
} while ((t != 0));
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} for_countdown pass 14 lines
// glaurung: for_countdown @ 0x11a0
int for_countdown(const int * arg0) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
i = 7;
while ((0 <= (long)(i))) {
s = ((s * 3) + arg0[(long)(i)]);
i = ((unsigned int)(i) - 1);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} for_stride2 pass 14 lines
// glaurung: for_stride2 @ 0x1150
int for_stride2(const int * arg0) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
i = 0;
while (((long)(i) < 8)) {
s = ((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) * (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(i)) + 1))))) + s);
i = ((unsigned int)(i) + 2);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} for_sum pass 12 lines
// glaurung: for_sum @ 0x1100
int for_sum(const int * arg0) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
for (i = 0; ((long)(i) < 8); i++) {
s = ((unsigned int)(arg0[(long)(i)]) + s);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} loop_break pass 19 lines
// glaurung: loop_break @ 0x1510
int loop_break(const int * arg0) {
int s;
int i;
long t140;
// x86-64 prologue: save rbp
s = 0;
i = 0;
while (((long)(i) < 8)) {
t140 = arg0[(long)(i)];
if (((((unsigned long)((unsigned int)(t140)) == 0xf4240) | ((long)((int)(t140)) < 0xf4240)) == 0)) {
break;
}
s = ((unsigned int)(arg0[(long)(i)]) + s);
i = ((unsigned int)(i) + 1);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(((s * 10) + i));
} loop_continue pass 15 lines
// glaurung: loop_continue @ 0x1580
int loop_continue(const int * arg0) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
for (i = 0; ((long)(i) < 8); i++) {
if ((0 <= (long)((int)(arg0[(long)(i)])))) {
s = ((unsigned int)(arg0[(long)(i)]) + s);
} else {
}
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} loop_early_return pass 23 lines
// glaurung: loop_early_return @ 0x15e0
int loop_early_return(const int * arg0) {
int i;
int local_4;
i = 0;
L_15ef: ;
if ((8 <= (long)(i))) {
goto L_162c;
}
if (((unsigned long)((unsigned int)(arg0[(long)(i)])) == 0)) {
local_4 = ((unsigned int)(i) + 1);
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
goto L_161e;
L_161e: ;
i = ((unsigned int)(i) + 1);
goto L_15ef;
L_162c: ;
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} loop_return_on_neg pass 26 lines
// glaurung: loop_return_on_neg @ 0x1640
int loop_return_on_neg(const int * arg0) {
int s;
int i;
int local_4;
s = 0;
i = 0;
L_1656: ;
if ((8 <= (long)(i))) {
goto L_16a5;
}
s = ((unsigned int)(arg0[(long)(i)]) + s);
if (((long)(s) < 0)) {
local_4 = ((i * 100) + (unsigned int)(((unsigned long)((unsigned int)(s)) & 255)));
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
goto L_1697;
L_1697: ;
i = ((unsigned int)(i) + 1);
goto L_1656;
L_16a5: ;
local_4 = s;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} mutate_prefix pass 15 lines
// glaurung: mutate_prefix @ 0x17b0
void mutate_prefix(int * arg0) {
int carry;
int i;
int v;
// x86-64 prologue: save rbp
carry = 3;
for (i = 0; ((long)(i) < 8); i++) {
v = ((unsigned int)(arg0[(long)(i)]) + carry);
carry = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(carry)) << 1))) + arg0[(long)(i)])) & 0xffff);
arg0[(long)(i)] = v;
}
// x86-64 epilogue: restore rbp
return;
} mutate_reverse pass 18 lines
// glaurung: mutate_reverse @ 0x1820
void mutate_reverse(int * arg0) {
int i;
int j;
int t;
// x86-64 prologue: save rbp
i = 0;
j = 7;
while ((i < j)) {
t = arg0[(long)(i)];
arg0[(long)(i)] = arg0[(long)(j)];
arg0[(long)(j)] = t;
i = ((unsigned int)(i) + 1);
j = ((unsigned int)(j) - 1);
}
// x86-64 epilogue: restore rbp
return;
} nested_carry pass 17 lines
// glaurung: nested_carry @ 0x1430
int nested_carry(const int * arg0) {
int acc;
int i;
int j;
// x86-64 prologue: save rbp
acc = 1;
i = 0;
while (((long)(i) < 3)) {
for (j = 0; ((long)(j) < 8); j++) {
acc = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(acc)) + arg0[(long)(j)]))) & 7)) + acc);
}
i = ((unsigned int)(i) + 1);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(acc);
} nested_pairs pass 17 lines
// glaurung: nested_pairs @ 0x13b0
int nested_pairs(const int * arg0) {
int s;
int i;
int j;
// x86-64 prologue: save rbp
s = 0;
i = 0;
while (((long)(i) < 8)) {
for (j = i; ((long)(j) < 8); j++) {
s = ((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) ^ arg0[(long)(j)])) + s);
}
i = ((unsigned int)(i) + 1);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} two_latches pass 12 lines
// glaurung: two_latches @ 0x14a0
int two_latches(const int * arg0) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
for (i = 0; ((long)(i) < 8); i++) {
s = (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) & 1))) == 0) ? ((unsigned long)((unsigned int)(arg0[(long)(i)])) + (unsigned long)((unsigned int)(s))) : ((unsigned long)((unsigned int)(s)) - 1));
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} while_prefix pass 20 lines
// glaurung: while_prefix @ 0x11f0
int while_prefix(const int * arg0) {
int i;
int s;
signed char local_11;
i = 0;
s = 0;
L_1206: ;
local_11 = 0;
if (((long)(i) < 8)) {
local_11 = ((long)((int)(arg0[(long)(i)])) < 0);
}
if (((unsigned long)((unsigned char)((local_11 & 1))) == 0)) {
// x86-64 epilogue: restore rbp
return (unsigned int)(((s * 10) + i));
}
s = ((unsigned int)(arg0[(long)(i)]) + s);
i = ((unsigned int)(i) + 1);
goto L_1206;
} while_reload_header pass 26 lines
// glaurung: while_reload_header @ 0x1260
int while_reload_header(const int * arg0) {
int i;
int local_14;
int local_18;
signed char local_d;
i = 0;
L_126f: ;
local_d = 0;
if (((long)(i) < 8)) {
local_d = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) & 1))) == 0);
}
if (((unsigned long)((unsigned char)((local_d & 1))) != 0)) {
i = ((unsigned int)(i) + 1);
goto L_126f;
}
local_14 = (i * 1000);
if (((long)(i) < 8)) {
local_18 = arg0[(long)(i)];
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(local_14)) + (unsigned long)((unsigned int)(local_18))));
}
local_18 = 0xffffffff;
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(local_14)) + (unsigned long)((unsigned int)(local_18))));
} clang -O2
18/18cond_reload_and_transform pass 104 lines
// glaurung: cond_reload_and_transform @ 0x17b0
int cond_reload_and_transform(const int * arg0) {
int s;
int i;
long var0;
int var100;
long var109;
int var112;
int var12;
int var121;
long var130;
int var133;
int var142;
long var151;
int var154;
int var163;
long var21;
long var23;
long var24;
int var27;
int var3;
int var36;
long var46;
int var49;
int var58;
long var67;
int var70;
int var79;
long var88;
int var91;
var0 = (long)((int)(*(int *)(((long)arg0))));
var3 = (((unsigned long)((var0 * -0x6db6db6dLL)) >> 32) + var0);
var12 = ((unsigned int)(((int)(var3) >> 2)) + (unsigned int)(((unsigned long)((unsigned int)(var3)) >> 31)));
var21 = 0;
s = 0;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var12)) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var12)) * 8)))))) + var0))) == 3)) {
var23 = (unsigned long)((unsigned int)((s + (s * 4))));
return (unsigned int)((var21 + (var23 * 2)));
}
var24 = (long)((int)(*(int *)(((long)arg0 + 0x4))));
var27 = (((unsigned long)((var24 * -0x6db6db6dLL)) >> 32) + var24);
var36 = ((unsigned int)(((int)(var27) >> 2)) + (unsigned int)(((unsigned long)((unsigned int)(var27)) >> 31)));
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var36)) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var36)) * 8)))))) + var24))) != 3)) {
s = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var0 + var0))) + (var24 * 2)))) - 2)));
var46 = (long)((int)(*(int *)(((long)arg0 + 0x8))));
var49 = (((unsigned long)((var46 * -0x6db6db6dLL)) >> 32) + var46);
var58 = ((unsigned int)(((int)(var49) >> 2)) + (unsigned int)(((unsigned long)((unsigned int)(var49)) >> 31)));
var21 = 2;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var58)) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var58)) * 8)))))) + var46))) == 3)) {
var23 = (unsigned long)((unsigned int)((s + (s * 4))));
return (unsigned int)((var21 + (var23 * 2)));
}
s = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((s + (var46 * 2)))) - 1)));
var67 = (long)((int)(*(int *)(((long)arg0 + 0xc))));
var70 = (((unsigned long)((var67 * -0x6db6db6dLL)) >> 32) + var67);
var79 = ((unsigned int)(((int)(var70) >> 2)) + (unsigned int)(((unsigned long)((unsigned int)(var70)) >> 31)));
var21 = 3;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var79)) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var79)) * 8)))))) + var67))) == 3)) {
var23 = (unsigned long)((unsigned int)((s + (s * 4))));
return (unsigned int)((var21 + (var23 * 2)));
}
s = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((s + (var67 * 2)))) - 1)));
var88 = (long)((int)(*(int *)(((long)arg0 + 0x10))));
var91 = (((unsigned long)((var88 * -0x6db6db6dLL)) >> 32) + var88);
var100 = ((unsigned int)(((int)(var91) >> 2)) + (unsigned int)(((unsigned long)((unsigned int)(var91)) >> 31)));
var21 = 4;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var100)) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var100)) * 8)))))) + var88))) == 3)) {
var23 = (unsigned long)((unsigned int)((s + (s * 4))));
return (unsigned int)((var21 + (var23 * 2)));
}
s = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((s + (var88 * 2)))) - 1)));
var109 = (long)((int)(*(int *)(((long)arg0 + 0x14))));
var112 = (((unsigned long)((var109 * -0x6db6db6dLL)) >> 32) + var109);
var121 = ((unsigned int)(((int)(var112) >> 2)) + (unsigned int)(((unsigned long)((unsigned int)(var112)) >> 31)));
var21 = 5;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var121)) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var121)) * 8)))))) + var109))) == 3)) {
var23 = (unsigned long)((unsigned int)((s + (s * 4))));
return (unsigned int)((var21 + (var23 * 2)));
}
s = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((s + (var109 * 2)))) - 1)));
var130 = (long)((int)(*(int *)(((long)arg0 + 0x18))));
var133 = (((unsigned long)((var130 * -0x6db6db6dLL)) >> 32) + var130);
var142 = ((unsigned int)(((int)(var133) >> 2)) + (unsigned int)(((unsigned long)((unsigned int)(var133)) >> 31)));
var21 = 6;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var142)) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var142)) * 8)))))) + var130))) == 3)) {
var23 = (unsigned long)((unsigned int)((s + (s * 4))));
return (unsigned int)((var21 + (var23 * 2)));
}
s = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((s + (var130 * 2)))) - 1)));
var151 = (long)((int)(*(int *)(((long)arg0 + 0x1c))));
var154 = (((unsigned long)((var151 * -0x6db6db6dLL)) >> 32) + var151);
var163 = ((unsigned int)(((int)(var154) >> 2)) + (unsigned int)(((unsigned long)((unsigned int)(var154)) >> 31)));
var21 = 7;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var163)) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var163)) * 8)))))) + var151))) != 3)) {
s = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((s + (var151 * 2)))) - 1)));
var21 = 8;
}
} else {
s = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var0 + var0))) - 1)));
var21 = 1;
}
var23 = (unsigned long)((unsigned int)((s + (s * 4))));
return (unsigned int)((var21 + (var23 * 2)));
} cond_side_effect pass 22 lines
// glaurung: cond_side_effect @ 0x1750
int cond_side_effect(int arg0) {
int count;
int guard;
long var16;
int var20;
long var30;
int var34;
long var4;
int var45;
long var47;
int var6;
var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg0 + (arg0 * 4)))) + 1))) & 7)));
var6 = ((unsigned int)((var4 + (var4 * 4))) + 1);
var16 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var6)) + ((unsigned long)((unsigned int)(var6)) * 4)))) + 1))) & 7)));
var20 = ((unsigned int)((var16 + (var16 * 4))) + 1);
var30 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var20)) + ((unsigned long)((unsigned int)(var20)) * 4)))) + 1))) & 7)));
var34 = ((unsigned int)((var30 + (var30 * 4))) + 1);
var45 = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var34)) + ((unsigned long)((unsigned int)(var34)) * 4)))) + 1))) & 7)) + (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var34)) & 7))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var20)) & 7))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var6)) & 7))) + var4))) + var16)))))) + var30))))));
var47 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var45)) + ((unsigned long)((unsigned int)(var45)) * 4))));
return (unsigned int)(((unsigned long)((unsigned int)((var47 + var47))) + 8));
} dowhile_atleastonce pass 58 lines
// glaurung: dowhile_atleastonce @ 0x1280
int dowhile_atleastonce(const int * arg0) {
int s;
int i;
long var0;
long var1;
long var11;
long var13;
long var3;
long var5;
long var7;
long var9;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
if ((((unsigned long)((unsigned int)(var0)) == 0) | ((long)((int)(var0)) < 0))) {
var1 = 1;
s = var0;
} else {
var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4))));
s = (unsigned long)((unsigned int)((var0 + var3)));
if ((((unsigned long)((unsigned int)(var3)) == 0) | ((long)((int)(var3)) < 0))) {
var1 = 2;
} else {
var5 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8))));
s = (unsigned long)((unsigned int)((s + var5)));
if ((((unsigned long)((unsigned int)(var5)) == 0) | ((long)((int)(var5)) < 0))) {
var1 = 3;
} else {
var7 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc))));
s = (unsigned long)((unsigned int)((s + var7)));
if ((((unsigned long)((unsigned int)(var7)) == 0) | ((long)((int)(var7)) < 0))) {
var1 = 4;
} else {
var9 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
s = (unsigned long)((unsigned int)((s + var9)));
if ((((unsigned long)((unsigned int)(var9)) == 0) | ((long)((int)(var9)) < 0))) {
var1 = 5;
} else {
var11 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14))));
s = (unsigned long)((unsigned int)((s + var11)));
if ((((unsigned long)((unsigned int)(var11)) == 0) | ((long)((int)(var11)) < 0))) {
var1 = 6;
} else {
var13 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
s = (unsigned long)((unsigned int)((s + var13)));
if ((((unsigned long)((unsigned int)(var13)) == 0) | ((long)((int)(var13)) < 0))) {
var1 = 7;
} else {
s = (unsigned long)((unsigned int)((s + *(int *)(((long)arg0 + 0x1c)))));
var1 = 8;
}
}
}
}
}
}
}
return (unsigned int)((var1 + ((unsigned long)((unsigned int)((s + (s * 4)))) * 2)));
} dowhile_recompute pass 18 lines
// glaurung: dowhile_recompute @ 0x1300
int dowhile_recompute(int arg0) {
int s;
long ret;
long t20;
long var3;
long var4;
ret = 0;
var3 = (unsigned long)((unsigned int)(arg0));
var4 = (unsigned long)((unsigned int)(arg0));
do {
ret = (unsigned long)((unsigned int)((ret + (unsigned int)((unsigned char)((var4 & 255))))));
var3 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var3)) >> 8)));
t20 = ((unsigned long)((unsigned long)((unsigned int)(var4))) <= (unsigned long)(255));
var4 = (unsigned long)((unsigned int)(var3));
} while ((t20 == 0));
return ret;
} for_countdown pass 20 lines
// glaurung: for_countdown @ 0x1150
int for_countdown(const int * arg0) {
int i;
int s;
long var0;
int var11;
int var14;
int var17;
int var2;
int var5;
int var8;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c))));
var2 = ((unsigned int)((var0 + (var0 * 2))) + *(int *)(((long)arg0 + 0x18)));
var5 = ((unsigned int)(((unsigned long)((unsigned int)(var2)) + ((unsigned long)((unsigned int)(var2)) * 2))) + *(int *)(((long)arg0 + 0x14)));
var8 = ((unsigned int)(((unsigned long)((unsigned int)(var5)) + ((unsigned long)((unsigned int)(var5)) * 2))) + *(int *)(((long)arg0 + 0x10)));
var11 = ((unsigned int)(((unsigned long)((unsigned int)(var8)) + ((unsigned long)((unsigned int)(var8)) * 2))) + *(int *)(((long)arg0 + 0xc)));
var14 = ((unsigned int)(((unsigned long)((unsigned int)(var11)) + ((unsigned long)((unsigned int)(var11)) * 2))) + *(int *)(((long)arg0 + 0x8)));
var17 = ((unsigned int)(((unsigned long)((unsigned int)(var14)) + ((unsigned long)((unsigned int)(var14)) * 2))) + *(int *)(((long)arg0 + 0x4)));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var17)) + ((unsigned long)((unsigned int)(var17)) * 2)))) + *(int *)(((long)arg0))));
} for_stride2 pass 12 lines
// glaurung: for_stride2 @ 0x1130
int for_stride2(const int * arg0) {
int i;
int s;
long var0;
long var1;
long var8;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8))));
var1 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
var8 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var8 * 8))) - var8))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var1 + (var1 * 4)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var0 + (var0 * 2)))) + *(int *)(((long)arg0))))))))));
} for_sum pass 6 lines
// glaurung: for_sum @ 0x1100
int for_sum(const int * arg0) {
int i;
int s;
return (unsigned int)((((*(int *)(((long)arg0 + 0x1c)) + *(int *)(((long)arg0 + 0xc))) + (*(int *)(((long)arg0 + 0x14)) + *(int *)(((long)arg0 + 0x4)))) + ((*(int *)(((long)arg0 + 0x18)) + *(int *)(((long)arg0 + 0x8))) + (*(int *)(((long)arg0 + 0x10)) + *(int *)(((long)arg0))))));
} loop_break pass 79 lines
// glaurung: loop_break @ 0x1590
int loop_break(const int * arg0) {
int i;
int s;
long var0;
long var10;
long var11;
int var12;
long var13;
long var14;
int var15;
long var16;
long var17;
long var19;
long var22;
long var3;
long var4;
long var5;
long var6;
long var8;
int var9;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
var3 = 0;
var4 = 0;
if (((((unsigned long)((unsigned int)(var0)) == 0xf4240) | ((long)((int)(var0)) < 0xf4240)) == 0)) {
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var3 + (var5 * 2)));
}
var6 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4))));
var3 = 1;
if ((((unsigned long)((unsigned int)(var6)) == 0xf4240) | ((long)((int)(var6)) < 0xf4240))) {
var4 = (unsigned long)((unsigned int)((var6 + var0)));
var8 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8))));
var3 = 2;
if (((((unsigned long)((unsigned int)(var8)) == 0xf4240) | ((long)((int)(var8)) < 0xf4240)) == 0)) {
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var3 + (var5 * 2)));
}
var9 = (var4 + var8);
var10 = (unsigned long)((unsigned int)(var9));
var11 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc))));
var3 = 3;
var4 = (unsigned long)((unsigned int)(var9));
if (((((unsigned long)((unsigned int)(var11)) == 0xf4240) | ((long)((int)(var11)) < 0xf4240)) == 0)) {
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var3 + (var5 * 2)));
}
var12 = (var10 + var11);
var13 = (unsigned long)((unsigned int)(var12));
var14 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
var3 = 4;
var4 = (unsigned long)((unsigned int)(var12));
if (((((unsigned long)((unsigned int)(var14)) == 0xf4240) | ((long)((int)(var14)) < 0xf4240)) == 0)) {
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var3 + (var5 * 2)));
}
var15 = (var13 + var14);
var16 = (unsigned long)((unsigned int)(var15));
var17 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14))));
var3 = 5;
var4 = (unsigned long)((unsigned int)(var15));
if (((((unsigned long)((unsigned int)(var17)) == 0xf4240) | ((long)((int)(var17)) < 0xf4240)) == 0)) {
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var3 + (var5 * 2)));
}
var4 = (unsigned long)((unsigned int)((var16 + var17)));
var19 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
var3 = 6;
if (((((unsigned long)((unsigned int)(var19)) == 0xf4240) | ((long)((int)(var19)) < 0xf4240)) != 0)) {
var22 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c))));
var3 = (unsigned long)((unsigned int)((8 - (0xf4241 <= (long)((int)(var22))))));
var4 = (unsigned long)((unsigned int)(((((long)((int)(var22)) < 0xf4241) ? var22 : 0) + (unsigned long)((unsigned int)((var19 + var4))))));
}
} else {
var4 = (unsigned long)((unsigned int)(var0));
}
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var3 + (var5 * 2)));
} loop_continue pass 22 lines
// glaurung: loop_continue @ 0x1640
int loop_continue(const int * arg0) {
int i;
int s;
int var0;
int var1;
int var2;
int var3;
int var5;
int var6;
int var7;
int var8;
var0 = *(int *)(((long)arg0));
var1 = *(int *)(((long)arg0 + 0x4));
var2 = *(int *)(((long)arg0 + 0x8));
var3 = *(int *)(((long)arg0 + 0xc));
var5 = *(int *)(((long)arg0 + 0x10));
var6 = *(int *)(((long)arg0 + 0x14));
var7 = *(int *)(((long)arg0 + 0x18));
var8 = *(int *)(((long)arg0 + 0x1c));
return (unsigned int)((((((-(0 < var3)) & var3) + ((-(0 < var8)) & var8)) + (((-(0 < var1)) & var1) + ((-(0 < var6)) & var6))) + ((((-(0 < var2)) & var2) + ((-(0 < var7)) & var7)) + (((-(0 < var0)) & var0) + ((-(0 < var5)) & var5)))));
} loop_early_return pass 26 lines
// glaurung: loop_early_return @ 0x1680
int loop_early_return(const int * arg0) {
int i;
if (((unsigned long)((unsigned int)(*(int *)(((long)arg0)))) == 0)) {
return 1;
}
if (((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4)))) == 0)) {
return 2;
}
if (((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8)))) == 0)) {
return 3;
}
if (((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc)))) == 0)) {
return 4;
}
if (((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10)))) == 0)) {
return 5;
}
if (((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14)))) == 0)) {
return 6;
}
if (((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18)))) == 0)) {
return 7;
}
return (unsigned int)(((unsigned int)((0 - ((unsigned long)(0) < (unsigned long)((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c)))))))) | 8));
} loop_return_on_neg pass 73 lines
// glaurung: loop_return_on_neg @ 0x16e0
int loop_return_on_neg(const int * arg0) {
int s;
int i;
long ret;
long var0;
int var10;
int var11;
int var12;
int var13;
long var2;
int var7;
int var8;
int var9;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
if (((long)((int)(var0)) < 0)) {
var2 = 0;
s = var0;
L_173c: ;
return (unsigned int)(((unsigned int)((unsigned char)((s & 255))) + var2));
}
var7 = (var0 + *(int *)(((long)arg0 + 0x4)));
s = (unsigned long)((unsigned int)(var7));
if (((long)((int)(var7)) < 0)) {
var2 = 100;
goto L_173c;
} else {
var8 = (s + *(int *)(((long)arg0 + 0x8)));
s = (unsigned long)((unsigned int)(var8));
if (((long)((int)(var8)) < 0)) {
var2 = 200;
goto L_173c;
} else {
var9 = (s + *(int *)(((long)arg0 + 0xc)));
s = (unsigned long)((unsigned int)(var9));
if (((long)((int)(var9)) < 0)) {
var2 = 300;
goto L_173c;
} else {
var10 = (s + *(int *)(((long)arg0 + 0x10)));
s = (unsigned long)((unsigned int)(var10));
if (((long)((int)(var10)) < 0)) {
var2 = 400;
goto L_173c;
} else {
var11 = (s + *(int *)(((long)arg0 + 0x14)));
s = (unsigned long)((unsigned int)(var11));
if (((long)((int)(var11)) < 0)) {
var2 = 500;
goto L_173c;
} else {
var12 = (s + *(int *)(((long)arg0 + 0x18)));
s = (unsigned long)((unsigned int)(var12));
if (((long)((int)(var12)) < 0)) {
var2 = 600;
goto L_173c;
} else {
var13 = (s + *(int *)(((long)arg0 + 0x1c)));
s = (unsigned long)((unsigned int)(var13));
ret = (unsigned long)((unsigned int)(var13));
if ((0 <= (long)((int)(var13)))) {
return ret;
}
var2 = 700;
goto L_173c;
}
}
}
}
}
}
return ret;
} mutate_prefix pass 40 lines
// glaurung: mutate_prefix @ 0x1990
void mutate_prefix(int * arg0) {
int carry;
int i;
int v;
long var0;
long var1;
long var10;
int var13;
long var14;
int var17;
long var18;
int var21;
long var22;
int var25;
long var26;
int var9;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
var1 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4))));
carry = (unsigned int)((unsigned short)(((unsigned long)((unsigned int)((var0 + 6))) & 0xffff)));
*(int *)(((long)arg0)) = (var0 + 3);
var9 = (unsigned int)((unsigned short)(((unsigned long)((unsigned int)((var1 + (carry * 2)))) & 0xffff)));
*(int *)(((long)arg0 + 0x4)) = (var1 + carry);
var10 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8))));
var13 = (unsigned int)((unsigned short)(((unsigned long)((unsigned int)((var10 + (var9 * 2)))) & 0xffff)));
*(int *)(((long)arg0 + 0x8)) = (var10 + var9);
var14 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc))));
var17 = (unsigned int)((unsigned short)(((unsigned long)((unsigned int)((var14 + (var13 * 2)))) & 0xffff)));
*(int *)(((long)arg0 + 0xc)) = (var14 + var13);
var18 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
var21 = (unsigned int)((unsigned short)(((unsigned long)((unsigned int)((var18 + (var17 * 2)))) & 0xffff)));
*(int *)(((long)arg0 + 0x10)) = (var18 + var17);
var22 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14))));
var25 = (unsigned int)((unsigned short)(((unsigned long)((unsigned int)((var22 + (var21 * 2)))) & 0xffff)));
*(int *)(((long)arg0 + 0x14)) = (var22 + var21);
var26 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
*(int *)(((long)arg0 + 0x18)) = (var26 + var25);
*(int *)(((long)arg0 + 0x1c)) = (*(int *)(((long)arg0 + 0x1c)) + (unsigned int)((unsigned short)(((unsigned long)((unsigned int)((var26 + (var25 * 2)))) & 0xffff))));
return;
} mutate_reverse pass 20 lines
// glaurung: mutate_reverse @ 0x1a00
void mutate_reverse(int * arg0) {
int i;
int t;
int j;
long cf_3;
long var0;
var0 = 7;
i = 1;
do {
t = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + i * 4 - 0x4))));
*(int *)(((long)arg0 + i * 4 - 0x4)) = *(int *)(((long)arg0 + var0 * 4));
*(int *)(((long)arg0 + var0 * 4)) = t;
j = (var0 - 1);
cf_3 = ((unsigned long)(i) < (unsigned long)(j));
i = (i + 1);
var0 = j;
} while (cf_3);
return;
} nested_carry pass 70 lines
// glaurung: nested_carry @ 0x1450
int nested_carry(const int * arg0) {
int acc;
int i;
int j;
long var0;
long var1;
int var100;
int var106;
int var112;
int var118;
int var12;
int var124;
int var130;
long var14;
int var18;
long var20;
int var24;
long var26;
int var30;
long var32;
int var36;
long var38;
long var4;
int var42;
long var44;
int var48;
int var53;
int var58;
int var63;
int var68;
int var73;
int var78;
int var83;
int var88;
int var94;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
var1 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4))));
var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var0 + 1))) & 7)));
var12 = ((unsigned int)((var4 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var1 + var4))) + 1))) & 7))))) + 1);
var14 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8))));
var18 = ((unsigned int)(((unsigned long)((unsigned int)((var14 + (unsigned long)((unsigned int)(var12))))) & 7)) + (unsigned int)(var12));
var20 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc))));
var24 = ((unsigned int)(((unsigned long)((unsigned int)((var20 + (unsigned long)((unsigned int)(var18))))) & 7)) + (unsigned int)(var18));
var26 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
var30 = ((unsigned int)(((unsigned long)((unsigned int)((var26 + (unsigned long)((unsigned int)(var24))))) & 7)) + (unsigned int)(var24));
var32 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14))));
var36 = ((unsigned int)(((unsigned long)((unsigned int)((var32 + (unsigned long)((unsigned int)(var30))))) & 7)) + (unsigned int)(var30));
var38 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
var42 = ((unsigned int)(((unsigned long)((unsigned int)((var38 + (unsigned long)((unsigned int)(var36))))) & 7)) + (unsigned int)(var36));
var44 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c))));
var48 = ((unsigned int)(((unsigned long)((unsigned int)((var44 + (unsigned long)((unsigned int)(var42))))) & 7)) + (unsigned int)(var42));
var53 = ((unsigned int)(((unsigned long)((unsigned int)((var0 + (unsigned long)((unsigned int)(var48))))) & 7)) + (unsigned int)(var48));
var58 = ((unsigned int)(((unsigned long)((unsigned int)((var1 + (unsigned long)((unsigned int)(var53))))) & 7)) + (unsigned int)(var53));
var63 = ((unsigned int)(((unsigned long)((unsigned int)((var14 + (unsigned long)((unsigned int)(var58))))) & 7)) + (unsigned int)(var58));
var68 = ((unsigned int)(((unsigned long)((unsigned int)((var20 + (unsigned long)((unsigned int)(var63))))) & 7)) + (unsigned int)(var63));
var73 = ((unsigned int)(((unsigned long)((unsigned int)((var26 + (unsigned long)((unsigned int)(var68))))) & 7)) + (unsigned int)(var68));
var78 = ((unsigned int)(((unsigned long)((unsigned int)((var32 + (unsigned long)((unsigned int)(var73))))) & 7)) + (unsigned int)(var73));
var83 = ((unsigned int)(((unsigned long)((unsigned int)((var38 + (unsigned long)((unsigned int)(var78))))) & 7)) + (unsigned int)(var78));
var88 = ((unsigned int)(((unsigned long)((unsigned int)((var44 + (unsigned long)((unsigned int)(var83))))) & 7)) + (unsigned int)(var83));
var94 = ((unsigned int)(((unsigned long)((unsigned int)((var0 + (unsigned long)((unsigned int)(var88))))) & 7)) + (unsigned int)(var88));
var100 = ((unsigned int)(((unsigned long)((unsigned int)((var1 + (unsigned long)((unsigned int)(var94))))) & 7)) + (unsigned int)(var94));
var106 = ((unsigned int)(((unsigned long)((unsigned int)((var14 + (unsigned long)((unsigned int)(var100))))) & 7)) + (unsigned int)(var100));
var112 = ((unsigned int)(((unsigned long)((unsigned int)((var20 + (unsigned long)((unsigned int)(var106))))) & 7)) + (unsigned int)(var106));
var118 = ((unsigned int)(((unsigned long)((unsigned int)((var26 + (unsigned long)((unsigned int)(var112))))) & 7)) + (unsigned int)(var112));
var124 = ((unsigned int)(((unsigned long)((unsigned int)((var32 + (unsigned long)((unsigned int)(var118))))) & 7)) + (unsigned int)(var118));
var130 = ((unsigned int)(((unsigned long)((unsigned int)((var38 + (unsigned long)((unsigned int)(var124))))) & 7)) + (unsigned int)(var124));
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var44 + (unsigned long)((unsigned int)(var130))))) & 7))) + (unsigned long)((unsigned int)(var130))));
} nested_pairs pass 30 lines
// glaurung: nested_pairs @ 0x1330
int nested_pairs(const int * arg0) {
int i;
int j;
int s;
long var0;
int var10;
int var11;
int var12;
long var25;
long var33;
long var37;
long var4;
long var41;
long var8;
int var9;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
var4 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8))));
var8 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc))));
var9 = *(int *)(((long)arg0 + 0x4));
var10 = *(int *)(((long)arg0 + 0x8));
var11 = *(int *)(((long)arg0 + 0xc));
var12 = *(int *)(((long)arg0 + 0x10));
var25 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
var33 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14))));
var37 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
var41 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c))));
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)((unsigned int)((var41 ^ var37))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var33 ^ var41))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var37)) ^ var33))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((((((var8 ^ var10) + (var41 ^ var11)) + ((var25 ^ var9) + (var41 ^ var10))) + (((var33 ^ var10) + (var37 ^ var12)) + ((var37 ^ var9) + (var33 ^ var11)))) + ((((var25 ^ var10) + (var33 ^ var12)) + ((var33 ^ var9) + (var25 ^ var11))) + (((var37 ^ var10) + (var41 ^ var12)) + ((var41 ^ var9) + (var37 ^ var11))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var9)) ^ var8)))))) + (unsigned long)((unsigned int)((var4 ^ (unsigned long)((unsigned int)(var9)))))))) + (unsigned long)((unsigned int)((var0 ^ var41)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var37)) ^ var0)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var33)) ^ var0)))))) + (unsigned long)((unsigned int)((var25 ^ var0)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var8)) ^ var0)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var4)) ^ var0)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4)))) ^ var0))))))))))))));
} two_latches pass 22 lines
// glaurung: two_latches @ 0x1540
int two_latches(const int * arg0) {
int i;
int s;
int var0;
int var1;
int var2;
int var3;
int var5;
int var6;
int var7;
int var8;
var0 = *(int *)(((long)arg0));
var1 = *(int *)(((long)arg0 + 0x4));
var2 = *(int *)(((long)arg0 + 0x8));
var3 = *(int *)(((long)arg0 + 0xc));
var5 = *(int *)(((long)arg0 + 0x10));
var6 = *(int *)(((long)arg0 + 0x14));
var7 = *(int *)(((long)arg0 + 0x18));
var8 = *(int *)(((long)arg0 + 0x1c));
return (unsigned int)(((((((long)((var3 << 31)) >> 31) | var3) + (((long)((var8 << 31)) >> 31) | var8)) + ((((long)((var1 << 31)) >> 31) | var1) + (((long)((var6 << 31)) >> 31) | var6))) + (((((long)((var2 << 31)) >> 31) | var2) + (((long)((var7 << 31)) >> 31) | var7)) + ((((long)((var0 << 31)) >> 31) | var0) + (((long)((var5 << 31)) >> 31) | var5)))));
} while_prefix pass 83 lines
// glaurung: while_prefix @ 0x1180
int while_prefix(const int * arg0) {
int i;
int s;
long var0;
long var10;
long var11;
int var12;
long var13;
long var14;
int var15;
long var16;
long var17;
int var18;
long var19;
long var2;
long var20;
long var23;
long var4;
long var5;
long var6;
long var8;
int var9;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
var2 = 0;
var4 = 0;
if ((0 <= (long)((int)(var0)))) {
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var2 + (var5 * 2)));
}
var6 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4))));
var2 = 1;
if (((long)((int)(var6)) < 0)) {
var4 = (unsigned long)((unsigned int)((var6 + var0)));
var8 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8))));
var2 = 2;
if ((0 <= (long)((int)(var8)))) {
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var2 + (var5 * 2)));
}
var9 = (var4 + var8);
var10 = (unsigned long)((unsigned int)(var9));
var11 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc))));
var2 = 3;
var4 = (unsigned long)((unsigned int)(var9));
if ((0 <= (long)((int)(var11)))) {
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var2 + (var5 * 2)));
}
var12 = (var10 + var11);
var13 = (unsigned long)((unsigned int)(var12));
var14 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
var2 = 4;
var4 = (unsigned long)((unsigned int)(var12));
if ((0 <= (long)((int)(var14)))) {
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var2 + (var5 * 2)));
}
var15 = (var13 + var14);
var16 = (unsigned long)((unsigned int)(var15));
var17 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14))));
var2 = 5;
var4 = (unsigned long)((unsigned int)(var15));
if ((0 <= (long)((int)(var17)))) {
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var2 + (var5 * 2)));
}
var18 = (var16 + var17);
var19 = (unsigned long)((unsigned int)(var18));
var20 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
var2 = 6;
var4 = (unsigned long)((unsigned int)(var18));
if (((long)((int)(var20)) < 0)) {
var23 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c))));
var2 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var23)) >> 31))) + 7)));
var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((int)(var23) >> 31))) & var23))) + (unsigned long)((unsigned int)((var20 + var19))))));
}
} else {
var4 = (unsigned long)((unsigned int)(var0));
}
var5 = (unsigned long)((unsigned int)((var4 + (var4 * 4))));
return (unsigned int)((var2 + (var5 * 2)));
} while_reload_header pass 55 lines
// glaurung: while_reload_header @ 0x1200
int while_reload_header(const int * arg0) {
int i;
long var0;
long var11;
int var13;
long var3;
int var4;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
var3 = 0;
if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
var4 = (var3 + var0);
return (unsigned int)(var4);
}
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4))));
var3 = 1000;
if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
var4 = (var3 + var0);
return (unsigned int)(var4);
}
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8))));
var3 = 2000;
if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
var4 = (var3 + var0);
return (unsigned int)(var4);
}
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc))));
var3 = 3000;
if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
var4 = (var3 + var0);
return (unsigned int)(var4);
}
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
var3 = 4000;
if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
var4 = (var3 + var0);
return (unsigned int)(var4);
}
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14))));
var3 = 0x1388;
if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
var4 = (var3 + var0);
return (unsigned int)(var4);
}
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
var3 = 0x1770;
if (((unsigned long)((unsigned char)((var0 & 1))) == 0)) {
var11 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c))));
var13 = ((unsigned int)(var11) & 1);
var0 = (unsigned long)((unsigned int)(((unsigned int)((0 - ((unsigned long)((unsigned long)((unsigned int)(var13))) < (unsigned long)(1)))) | var11)));
var3 = (((unsigned long)((unsigned int)(var13)) == 0) ? 0x1f40 : 0x1b58);
}
var4 = (var3 + var0);
return (unsigned int)(var4);
} gcc -O0
18/18cond_reload_and_transform pass 25 lines
// glaurung: cond_reload_and_transform @ 0x1668
int cond_reload_and_transform(const int * arg0) {
int s;
int i;
long var19;
long var33;
int var42;
long var5;
// x86-64 prologue: save rbp
s = 0;
i = 0;
while (((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) != 0)) {
var5 = (unsigned long)((unsigned int)(arg0[(long)(i)]));
var19 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((int)((((unsigned long)(((long)((int)(var5)) * -0x6db6db6dLL)) >> 32) + var5)) >> 2))) - (unsigned long)((unsigned int)(((int)(var5) >> 31))))));
if (((unsigned long)((unsigned int)((var5 - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var19)) << 3))) - var19)))))) == 3)) {
break;
}
var33 = (unsigned long)((unsigned int)(arg0[(long)(i)]));
s = (s + (unsigned int)(((unsigned long)((unsigned int)((var33 + var33))) - 1)));
i = (i + 1);
}
var42 = ((unsigned int)(((unsigned long)((unsigned int)(s)) << 2)) + (unsigned int)(s));
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(i)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var42)) + (unsigned long)((unsigned int)(var42)))))));
} cond_side_effect pass 25 lines
// glaurung: cond_side_effect @ 0x1617
int cond_side_effect(int arg0) {
extern int step_index(int);
int count;
int guard;
int local_14;
long var1;
int var8;
// x86-64 prologue: save rbp, frame 24 bytes
local_14 = arg0;
count = 0;
guard = 0;
while (1) {
var1 = ((long (*)(long))step_index)((unsigned long)((unsigned int)(local_14)));
local_14 = var1;
guard = (guard + 1);
if (((((unsigned long)((unsigned int)(guard)) == 7) | ((long)(guard) < 7)) == 0)) {
break;
}
count = (count + (unsigned int)(local_14));
}
var8 = ((unsigned int)(((unsigned long)((unsigned int)(count)) << 2)) + (unsigned int)(count));
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(guard)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var8)) + (unsigned long)((unsigned int)(var8)))))));
} dowhile_atleastonce pass 24 lines
// glaurung: dowhile_atleastonce @ 0x12b3
int dowhile_atleastonce(const int * arg0) {
int i;
int s;
long t147;
int var17;
// x86-64 prologue: save rbp
i = 0;
s = 0;
while (1) {
s = (s + (unsigned int)(arg0[(long)(i)]));
i = (i + 1);
if (((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) == 0)) {
break;
}
t147 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + (((long)(i) << 2) - 4)))));
if (((((unsigned long)((unsigned int)(t147)) == 0) | ((long)((int)(t147)) < 0)) != 0)) {
break;
}
}
var17 = ((unsigned int)(((unsigned long)((unsigned int)(s)) << 2)) + (unsigned int)(s));
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(i)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var17)) + (unsigned long)((unsigned int)(var17)))))));
} dowhile_recompute pass 14 lines
// glaurung: dowhile_recompute @ 0x131f
int dowhile_recompute(int arg0) {
int s;
unsigned int t;
// x86-64 prologue: save rbp
s = 0;
t = arg0;
do {
s = (s + (unsigned int)((unsigned char)((t & 255))));
t = ((unsigned int)(t) >> 8);
} while ((t != 0));
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} for_countdown pass 14 lines
// glaurung: for_countdown @ 0x118a
int for_countdown(const int * arg0) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
i = 7;
while ((0 <= (long)(i))) {
s = ((unsigned int)(arg0[(long)(i)]) + (unsigned int)(((unsigned long)((unsigned int)(s)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(s)) + (unsigned long)((unsigned int)(s))))))));
i = (i - 1);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} for_stride2 pass 14 lines
// glaurung: for_stride2 @ 0x113d
int for_stride2(const int * arg0) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
i = 0;
while (((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) != 0)) {
s = (s + (unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) * (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(i)) + 1))))));
i = (i + 2);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} for_sum pass 12 lines
// glaurung: for_sum @ 0x10f9
int for_sum(const int * arg0) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
for (i = 0; ((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) != 0); i++) {
s = (s + (unsigned int)(arg0[(long)(i)]));
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} loop_break pass 26 lines
// glaurung: loop_break @ 0x1483
int loop_break(const int * arg0) {
int s;
int i;
int var16;
long var5;
s = 0;
i = 0;
goto L_14d9;
L_149f: ;
var5 = (unsigned long)((unsigned int)(arg0[(long)(i)]));
if (((((unsigned long)((unsigned int)(var5)) == 0xf4240) | ((long)((int)(var5)) < 0xf4240)) == 0)) {
var16 = ((unsigned int)(((unsigned long)((unsigned int)(s)) << 2)) + (unsigned int)(s));
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(i)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var16)) + (unsigned long)((unsigned int)(var16)))))));
}
s = (s + (unsigned int)(arg0[(long)(i)]));
i = (i + 1);
L_14d9: ;
if ((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7))) {
goto L_149f;
}
var16 = ((unsigned int)(((unsigned long)((unsigned int)(s)) << 2)) + (unsigned int)(s));
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(i)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var16)) + (unsigned long)((unsigned int)(var16)))))));
} loop_continue pass 15 lines
// glaurung: loop_continue @ 0x14f7
int loop_continue(const int * arg0) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
for (i = 0; ((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) != 0); i++) {
if (((long)((int)(arg0[(long)(i)])) < 0)) {
} else {
s = (s + (unsigned int)(arg0[(long)(i)]));
}
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} loop_early_return pass 18 lines
// glaurung: loop_early_return @ 0x1558
int loop_early_return(const int * arg0) {
int i;
i = 0;
goto L_1593;
L_156d: ;
if (((unsigned long)((unsigned int)(arg0[(long)(i)])) == 0)) {
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(i)) + 1));
}
i = (i + 1);
L_1593: ;
if ((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7))) {
goto L_156d;
}
// x86-64 epilogue: restore rbp
return 0xffffffff;
} loop_return_on_neg pass 21 lines
// glaurung: loop_return_on_neg @ 0x15a0
int loop_return_on_neg(const int * arg0) {
int s;
int i;
s = 0;
i = 0;
goto L_15ef;
L_15bc: ;
s = (s + (unsigned int)(arg0[(long)(i)]));
if (((long)(s) < 0)) {
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned int)((unsigned char)(((unsigned long)((unsigned int)(s)) & 255))) + ((unsigned long)((unsigned int)(i)) * 100)));
}
i = (i + 1);
L_15ef: ;
if ((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7))) {
goto L_15bc;
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} mutate_prefix pass 15 lines
// glaurung: mutate_prefix @ 0x1701
void mutate_prefix(int * arg0) {
int carry;
int i;
int v;
// x86-64 prologue: save rbp
carry = 3;
for (i = 0; ((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) != 0); i++) {
v = ((unsigned int)(carry) + (unsigned int)(arg0[(long)(i)]));
carry = ((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(carry)) + (unsigned long)((unsigned int)(carry))))))) & 0xffff);
arg0[(long)(i)] = v;
}
// x86-64 epilogue: restore rbp
return;
} mutate_reverse pass 18 lines
// glaurung: mutate_reverse @ 0x1788
void mutate_reverse(int * arg0) {
int i;
int j;
int t;
// x86-64 prologue: save rbp
i = 0;
j = 7;
while ((i < j)) {
t = arg0[(long)(i)];
arg0[(long)(i)] = arg0[(long)(j)];
arg0[(long)(j)] = t;
i = (i + 1);
j = (j - 1);
}
// x86-64 epilogue: restore rbp
return;
} nested_carry pass 17 lines
// glaurung: nested_carry @ 0x13bd
int nested_carry(const int * arg0) {
int acc;
int i;
int j;
// x86-64 prologue: save rbp
acc = 1;
i = 0;
while (((((unsigned long)((unsigned int)(i)) == 2) | ((long)(i) < 2)) != 0)) {
for (j = 0; ((((unsigned long)((unsigned int)(j)) == 7) | ((long)(j) < 7)) != 0); j++) {
acc = (acc + (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(acc)) + (unsigned long)((unsigned int)(arg0[(long)(j)]))))) & 7)));
}
i = (i + 1);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(acc);
} nested_pairs pass 17 lines
// glaurung: nested_pairs @ 0x134f
int nested_pairs(const int * arg0) {
int s;
int i;
int j;
// x86-64 prologue: save rbp
s = 0;
i = 0;
while (((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) != 0)) {
for (j = i; ((((unsigned long)((unsigned int)(j)) == 7) | ((long)(j) < 7)) != 0); j++) {
s = (s + (unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(j)])) ^ (unsigned long)((unsigned int)(arg0[(long)(i)])))));
}
i = (i + 1);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} two_latches pass 12 lines
// glaurung: two_latches @ 0x141c
int two_latches(const int * arg0) {
int s;
int i;
// x86-64 prologue: save rbp
s = 0;
for (i = 0; ((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) != 0); i++) {
s = (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) & 1))) == 0) ? ((unsigned long)((unsigned int)(s)) + (unsigned long)((unsigned int)(arg0[(long)(i)]))) : ((unsigned long)((unsigned int)(s)) - 1));
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} while_prefix pass 19 lines
// glaurung: while_prefix @ 0x11d9
int while_prefix(const int * arg0) {
int i;
int s;
int var16;
// x86-64 prologue: save rbp
i = 0;
s = 0;
while (((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) != 0)) {
if ((0 <= (long)((int)(arg0[(long)(i)])))) {
break;
}
s = (s + (unsigned int)(arg0[(long)(i)]));
i = (i + 1);
}
var16 = ((unsigned int)(((unsigned long)((unsigned int)(s)) << 2)) + (unsigned int)(s));
// x86-64 epilogue: restore rbp
return (unsigned int)(((unsigned long)((unsigned int)(i)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var16)) + (unsigned long)((unsigned int)(var16)))))));
} while_reload_header pass 14 lines
// glaurung: while_reload_header @ 0x1247
int while_reload_header(const int * arg0) {
int i;
// x86-64 prologue: save rbp
i = 0;
while (((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) != 0)) {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) & 1))) != 0)) {
break;
}
i = (i + 1);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(((((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) == 0) ? 0xffffffff : (unsigned long)((unsigned int)(arg0[(long)(i)]))) + ((unsigned int)(i) * 1000)));
} gcc -O2
18/18cond_reload_and_transform pass 25 lines
// glaurung: cond_reload_and_transform @ 0x1420
int cond_reload_and_transform(const int * arg0) {
int i;
int s;
long var21;
long var4;
long var6;
long var7;
var4 = 0;
i = 0;
do {
var6 = (long)((int)(*(int *)(((long)arg0 + i * 4))));
var7 = (unsigned long)((unsigned int)(i));
var21 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((int)((((unsigned long)((var6 * -0x6db6db6dLL)) >> 32) + var6)) >> 2))) - (unsigned long)((unsigned int)(((int)(var6) >> 31))))));
s = var4;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var6)) - (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var21 * 8))) - var21)))))) == 3)) {
return (unsigned int)((var7 + ((unsigned long)((unsigned int)((s + (s * 4)))) * 2)));
}
i = (i + 1);
s = (unsigned long)((unsigned int)(((var4 + (var6 * 2)) - 1)));
var4 = (unsigned long)((unsigned int)(s));
} while ((i != 8));
var7 = 8;
return (unsigned int)((8 + ((unsigned long)((unsigned int)((s + (s * 4)))) * 2)));
} cond_side_effect pass 21 lines
// glaurung: cond_side_effect @ 0x13f0
int cond_side_effect(int arg0) {
int count;
int guard;
long var1;
int var10;
long var11;
long var5;
long var6;
var1 = 7;
var5 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((arg0 + (arg0 * 4)) + 1))) & 7)));
var6 = 0;
do {
var6 = (unsigned long)((unsigned int)((var6 + var5)));
var5 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((var5 + (var5 * 4)) + 1))) & 7)));
var10 = (var1 - 1);
var1 = (unsigned long)((unsigned int)(var10));
} while (((unsigned long)((unsigned int)(var10)) != 0));
var11 = (unsigned long)((unsigned int)((var6 + (var6 * 4))));
return (unsigned int)(((var11 + var11) + 8));
} dowhile_atleastonce pass 31 lines
// glaurung: dowhile_atleastonce @ 0x11f0
int dowhile_atleastonce(const int * arg0) {
int i;
int s;
long var0;
long var4;
long var6;
long var7;
long var8;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
i = 1;
var4 = (unsigned long)((unsigned int)(var0));
goto L_1204;
L_1200: ;
i = (i + 1);
var4 = var6;
var0 = var7;
L_1204: ;
var8 = (unsigned long)((unsigned int)(i));
var6 = var4;
if ((((unsigned long)((unsigned int)(var0)) == 0) | ((long)((int)(var0)) < 0))) {
return (unsigned int)((var8 + ((unsigned long)((unsigned int)((var6 + (var6 * 4)))) * 2)));
}
var7 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + i * 4))));
var6 = (unsigned long)((unsigned int)((var4 + var7)));
if ((i != 7)) {
goto L_1200;
}
var8 = 8;
return (unsigned int)((8 + ((unsigned long)((unsigned int)((var6 + (var6 * 4)))) * 2)));
} dowhile_recompute pass 16 lines
// glaurung: dowhile_recompute @ 0x1230
int dowhile_recompute(int arg0) {
int s;
unsigned int t;
long ret;
long var2;
int var6;
ret = 0;
var2 = (unsigned long)((unsigned int)(arg0));
do {
ret = (unsigned long)((unsigned int)((ret + (unsigned int)((unsigned char)((var2 & 255))))));
var6 = ((unsigned long)((unsigned int)(var2)) >> 8);
var2 = (unsigned long)((unsigned int)(var6));
} while (((unsigned long)((unsigned int)(var6)) != 0));
return ret;
} for_countdown pass 20 lines
// glaurung: for_countdown @ 0x1140
int for_countdown(const int * arg0) {
int i;
int s;
long ret;
long var0;
long var3;
long var4;
int var6;
var0 = (long)((arg0 + 7));
var3 = 0;
do {
var4 = var0;
var0 = (var0 - 4);
var6 = ((unsigned int)((var3 + (var3 * 2))) + *(int *)((var0 + 0x4)));
ret = (unsigned long)((unsigned int)(var6));
var3 = (unsigned long)((unsigned int)(var6));
} while ((var4 != (long)arg0));
return ret;
} for_stride2 pass 12 lines
// glaurung: for_stride2 @ 0x1120
int for_stride2(const int * arg0) {
int i;
int s;
long var0;
long var2;
long var8;
var0 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8))));
var2 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
var8 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var2 + (var2 * 4)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var0 + (var0 * 2)))) + *(int *)(((long)arg0)))))))) + (var8 * 8)))) - var8));
} for_sum pass 16 lines
// glaurung: for_sum @ 0x1100
int for_sum(const int * arg0) {
int i;
int s;
long ret;
long var0;
long var3;
var0 = (long)((arg0 + 8));
ret = 0;
var3 = (long)arg0;
do {
ret = (unsigned long)((unsigned int)((ret + *(int *)((var3)))));
var3 = (var3 + 4);
} while ((var3 != var0));
return ret;
} loop_break pass 25 lines
// glaurung: loop_break @ 0x1310
int loop_break(const int * arg0) {
int i;
int s;
long var5;
long var6;
long var7;
long var8;
i = 0;
var5 = 0;
do {
var6 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + i * 4))));
var7 = (unsigned long)((unsigned int)(i));
var8 = var5;
if (((((unsigned long)((unsigned int)(var6)) == 0xf4240) | ((long)((int)(var6)) < 0xf4240)) == 0)) {
return (unsigned int)((var7 + ((unsigned long)((unsigned int)((var8 + (var8 * 4)))) * 2)));
}
i = (i + 1);
s = (var5 + var6);
var8 = (unsigned long)((unsigned int)(s));
var5 = (unsigned long)((unsigned int)(s));
} while ((i != 8));
var7 = 8;
return (unsigned int)((8 + ((unsigned long)((unsigned int)((var8 + (var8 * 4)))) * 2)));
} loop_continue pass 20 lines
// glaurung: loop_continue @ 0x1350
int loop_continue(const int * arg0) {
int i;
int s;
long ret;
long var0;
long var3;
long var4;
long var5;
var0 = (long)((arg0 + 8));
var3 = 0;
var4 = (long)arg0;
do {
var5 = (unsigned long)((unsigned int)(*(int *)((var4))));
ret = ((0 <= (long)((int)(var5))) ? (unsigned long)((unsigned int)((var3 + var5))) : var3);
var4 = (var4 + 4);
var3 = ret;
} while ((var4 != var0));
return ret;
} loop_early_return pass 15 lines
// glaurung: loop_early_return @ 0x1380
int loop_early_return(const int * arg0) {
int i;
long var4;
i = 1;
do {
var4 = (unsigned long)((unsigned int)(i));
if (((unsigned long)((unsigned int)(*(int *)(((long)arg0 + i * 4 - 0x4)))) == 0)) {
return (unsigned int)(var4);
}
i = (i + 1);
} while ((i != 9));
var4 = 0xffffffff;
return 0xffffffff;
} loop_return_on_neg pass 23 lines
// glaurung: loop_return_on_neg @ 0x13b0
int loop_return_on_neg(const int * arg0) {
int i;
int s;
long var3;
int var4;
long var5;
i = 0;
var3 = 0;
while (1) {
var4 = (var3 + *(int *)(((long)arg0 + i * 4)));
var3 = (unsigned long)((unsigned int)(var4));
if (((long)((int)(var4)) < 0)) {
break;
}
var5 = ((unsigned long)((unsigned int)(i)) + 1);
i = var5;
if ((var5 == 8)) {
return (unsigned int)(var3);
}
}
return (unsigned int)(((unsigned int)((unsigned char)((var3 & 255))) + (i * 100)));
} mutate_prefix pass 22 lines
// glaurung: mutate_prefix @ 0x1490
void mutate_prefix(int * arg0) {
int carry;
int i;
int v;
long var0;
int var2;
long var3;
long var4;
int var5;
var0 = (long)((arg0 + 8));
var2 = 3;
var3 = (long)arg0;
do {
var4 = (unsigned long)((unsigned int)(*(int *)((var3))));
var3 = (var3 + 4);
var5 = (var4 + var2);
*(int *)((var3 - 0x4)) = var5;
var2 = (unsigned int)((unsigned short)(((unsigned long)((unsigned int)((var2 + (unsigned long)((unsigned int)(var5))))) & 0xffff)));
} while ((var3 != var0));
return;
} mutate_reverse pass 22 lines
// glaurung: mutate_reverse @ 0x14c0
void mutate_reverse(int * arg0) {
int t;
int i;
int j;
long ret;
long var0;
long var1;
long var2;
var0 = (long)((arg0 + 7));
var1 = (long)((arg0 + 3));
var2 = (long)arg0;
do {
t = (unsigned long)((unsigned int)(*(int *)((var2))));
ret = (var0 - 4);
var2 = (var2 + 4);
*(int *)((var2 - 0x4)) = *(int *)((var0));
*(int *)((ret + 0x4)) = t;
var0 = ret;
} while ((ret != var1));
return;
} nested_carry pass 28 lines
// glaurung: nested_carry @ 0x12a0
int nested_carry(const int * arg0) {
int acc;
int i;
int j;
long var0;
int var12;
long var2;
long var3;
long var4;
long var6;
var0 = 3;
var2 = (long)((arg0 + 8));
var3 = 1;
do {
var4 = (long)arg0;
acc = var3;
do {
var6 = (unsigned long)((unsigned int)(*(int *)((var4))));
var4 = (var4 + 4);
acc = (unsigned long)((unsigned int)((acc + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var6 + acc))) & 7))))));
} while ((var2 != var4));
var12 = (var0 - 1);
var0 = (unsigned long)((unsigned int)(var12));
var3 = (unsigned long)((unsigned int)(acc));
} while (((unsigned long)((unsigned int)(var12)) != 0));
return (unsigned int)(acc);
} nested_pairs pass 35 lines
// glaurung: nested_pairs @ 0x1250
int nested_pairs(const int * arg0) {
int i;
int j;
int s;
long var1;
long var13;
long var4;
long var5;
long var6;
long var7;
long var8;
long var9;
var1 = 0;
var4 = (long)((arg0 + 7));
var5 = 0;
var6 = (long)arg0;
do {
var7 = (unsigned long)((unsigned int)(*(int *)((var6))));
var8 = var6;
var9 = (unsigned long)((unsigned int)(var7));
while (1) {
var5 = (unsigned long)((unsigned int)((var5 + (unsigned long)((unsigned int)((var9 ^ var7))))));
if ((var8 == var4)) {
break;
}
var9 = (unsigned long)((unsigned int)(*(int *)((var8 + 0x4))));
var8 = (var8 + 4);
}
var13 = (var1 + 1);
var6 = (var6 + 4);
var1 = var13;
} while ((var13 != 8));
return (unsigned int)(var5);
} two_latches pass 20 lines
// glaurung: two_latches @ 0x12e0
int two_latches(const int * arg0) {
int i;
int s;
long ret;
long var0;
long var3;
long var4;
long var5;
var0 = (long)((arg0 + 8));
var3 = 0;
var4 = (long)arg0;
do {
var5 = (unsigned long)((unsigned int)(*(int *)((var4))));
ret = (((unsigned long)((unsigned int)((var5 & 1))) != 0) ? (unsigned long)((unsigned int)((var3 - 1))) : (unsigned long)((unsigned int)((var3 + var5))));
var4 = (var4 + 4);
var3 = ret;
} while ((var4 != var0));
return ret;
} while_prefix pass 25 lines
// glaurung: while_prefix @ 0x1170
int while_prefix(const int * arg0) {
int i;
int s;
long var5;
long var6;
long var7;
long var8;
i = 0;
var5 = 0;
do {
var6 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + i * 4))));
var7 = (unsigned long)((unsigned int)(i));
var8 = var5;
if ((0 <= (long)((int)(var6)))) {
return (unsigned int)((var7 + ((unsigned long)((unsigned int)((var8 + (var8 * 4)))) * 2)));
}
i = (i + 1);
s = (var5 + var6);
var8 = (unsigned long)((unsigned int)(s));
var5 = (unsigned long)((unsigned int)(s));
} while ((i != 8));
var7 = 8;
return (unsigned int)((8 + ((unsigned long)((unsigned int)((var8 + (var8 * 4)))) * 2)));
} while_reload_header pass 19 lines
// glaurung: while_reload_header @ 0x11b0
int while_reload_header(const int * arg0) {
int i;
long var2;
long var3;
i = 0;
while (1) {
var2 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + i * 4))));
if (((unsigned long)((unsigned char)((var2 & 1))) != 0)) {
break;
}
var3 = ((unsigned long)((unsigned int)(i)) + 1);
i = var3;
if ((var3 == 8)) {
return 0x1f3f;
}
}
return (unsigned int)(((i * 1000) + var2));
}