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.

tests/decompiler_fixtures/src/03_loop_shapes.c source
/* 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/18
cond_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/18
cond_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/18
cond_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/18
cond_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));
}

← 213 fixtures