Fixture 04
switch shapes
C · 16 functions · 4 lanes · 64 of 64 function-lanes behave identically
All 4 lanes recompile and return the same results as the original.
Switch-shape fixture. Every function is a pure integer function whose result depends on the EXACT switch structure a correct decompilation must recover: the true case constants (not positional 0/1/2/... placeholders), negative and sparse labels, shared bodies, explicit fallthrough, default handling, and a switch nested inside a loop. Each reachable case produces a UNIQUE constant, so a fabricated case 0 / case 1 discriminant, a positional relabel, or a placeholder dispatch sends some input to the wrong arm — which an execution-differential test catches.
Targets review #4 (switch structuring). Keep every function pure (no globals, no libc) and deterministic. Each comment states the exact discriminant and the case constants an honest decompiler must recover.
/* 04_switch_shapes.c
*
* Switch-shape fixture. Every function is a pure integer function whose result
* depends on the EXACT switch structure a correct decompilation must recover:
* the true case constants (not positional 0/1/2/... placeholders), negative and
* sparse labels, shared bodies, explicit fallthrough, default handling, and a
* switch nested inside a loop. Each reachable case produces a UNIQUE constant,
* so a fabricated `case 0 / case 1` discriminant, a positional relabel, or a
* placeholder dispatch sends some input to the wrong arm — which an
* execution-differential test catches.
*
* Targets review #4 (switch structuring). Keep every function pure (no globals,
* no libc) and deterministic. Each comment states the exact discriminant and
* the case constants an honest decompiler must recover.
*/
#include <stdint.h>
/* Dense jump-table switch. Discriminant: (x & 7), a contiguous 0..7 index that
* a compiler lowers to a jump table. An honest decompiler must recover cases
* 0,1,2,3,4,5,6,7 with these EXACT distinct return constants. */
int dense_jumptable(unsigned x) {
switch (x & 7u) {
case 0: return 100;
case 1: return 111;
case 2: return 122;
case 3: return 133;
case 4: return 144;
case 5: return 155;
case 6: return 166;
case 7: return 177;
}
return -1; /* unreachable given the mask, but keeps the type happy */
}
/* Dense table that computes rather than returns constants, still 0..7. */
int dense_compute(unsigned x, int y) {
int r;
switch (x & 7u) {
case 0: r = y + 1; break;
case 1: r = y - 1; break;
case 2: r = y * 2; break;
case 3: r = y * 3; break;
case 4: r = y ^ 0x5A; break;
case 5: r = y << 1; break;
case 6: r = ~y; break;
case 7: r = y & 0x0F; break;
default: r = 0; break;
}
return r;
}
/* Sparse switch. Discriminant: x itself. Cases 1, 5, 17, 100 — large, non-
* contiguous, non-zero labels. This tests that the REAL case constants are
* recovered, NOT positional 0/1/2/3. A decompiler that emits case 0..3 maps
* every input to the wrong arm. */
int sparse_switch(int x) {
switch (x) {
case 1: return 2001;
case 5: return 2005;
case 17: return 2017;
case 100: return 2100;
default: return 2999;
}
}
/* Sparse switch with widely spread labels forcing a binary-search or compare
* chain lowering. Discriminant: x. Cases 3, 250, 5000, 65537. */
int sparse_wide(int x) {
switch (x) {
case 3: return 30;
case 250: return 2500;
case 5000: return 50000;
case 65537: return 655370;
default: return -7;
}
}
/* Negative case values. Discriminant: x. Cases -3, -1, 0, 2 — a decompiler must
* recover the signed labels, not treat them as large unsigned indices. */
int negative_cases(int x) {
switch (x) {
case -3: return 303;
case -1: return 301;
case 0: return 300;
case 2: return 302;
default: return 399;
}
}
/* Mixed negative + sparse positive. Discriminant: x. Cases -100, -1, 7, 42. */
int negative_sparse(int x) {
switch (x) {
case -100: return 4000;
case -1: return 4001;
case 7: return 4007;
case 42: return 4042;
default: return 4999;
}
}
/* Shared case bodies. Discriminant: (x & 7). Cases 0 and 2 fall to the SAME
* body (return 500); cases 1 and 3 share another (return 600); everything else
* defaults. An honest decompiler must show two labels reaching one block, not
* duplicate or drop a label. */
int shared_bodies(unsigned x) {
switch (x & 7u) {
case 0:
case 2:
return 500;
case 1:
case 3:
return 600;
default:
return 700;
}
}
/* Shared bodies mixing sparse labels. Discriminant: x. Cases 10 and 20 share a
* body; 30 and 40 share another. */
int shared_sparse(int x) {
switch (x) {
case 10:
case 20:
return 1200;
case 30:
case 40:
return 3400;
default:
return -5;
}
}
/* Explicit fallthrough. Discriminant: (x & 3). case 0 has NO break and flows
* into case 1's body, so input 0 accumulates BOTH contributions. A decompiler
* that inserts a spurious break, or drops the fallthrough edge, changes the
* result for x&3==0. Recover: case 0 -> (+7, fallthrough), case 1 -> (+30),
* case 2 -> (+500, break), default -> +9000. */
int explicit_fallthrough(unsigned x) {
int r = 0;
switch (x & 3u) {
case 0:
r += 7;
__attribute__((fallthrough)); /* intentional fallthrough into case 1 */
case 1:
r += 30;
break;
case 2:
r += 500;
break;
default:
r += 9000;
break;
}
return r; /* x&3==0 -> 37, ==1 -> 30, ==2 -> 500, ==3 -> 9000 */
}
/* Longer fallthrough chain. Discriminant: (x & 3). Each case adds a distinct
* weight and falls into the next; only case 3 breaks. So the accumulated total
* encodes exactly where the switch entered. */
int fallthrough_chain(unsigned x) {
int r = 0;
switch (x & 3u) {
case 0: r += 1; __attribute__((fallthrough));
case 1: r += 20; __attribute__((fallthrough));
case 2: r += 300; __attribute__((fallthrough));
case 3: r += 4000; break;
default: r = -1;
}
return r; /* 0->4321, 1->4320, 2->4300, 3->4000 */
}
/* Default-only observable behaviour. Discriminant: x. Only case 42 is special;
* every other value takes the default. Tests that the single real label is
* recovered and the default catch-all is not mistaken for a case. */
int default_dominant(int x) {
switch (x) {
case 42: return 8888;
default: return 1111;
}
}
/* Switch with no default: values outside the label set fall through the whole
* statement to the trailing return. Discriminant: (x & 7). Cases 2 and 5 only. */
int no_default(unsigned x) {
switch (x & 7u) {
case 2: return 220;
case 5: return 550;
}
return 999; /* the implicit fall-off path */
}
/* Switch INSIDE a loop. The switch dispatches on each buffer element's low bits
* every iteration; the accumulator threads through the loop. Discriminant per
* iteration: (p[i] & 3), cases 0/1/2/3 each folding a distinct operation. A
* switch hoisted out of the loop, or a mis-recovered discriminant, changes the
* fold. The gate drives `p` as 8 random ints. */
int switch_in_loop(const int *p) {
int s = 0;
for (int i = 0; i < 8; i++) {
switch (p[i] & 3) {
case 0: s += 1; break;
case 1: s += 10; break;
case 2: s += 100; break;
case 3: s += 1000; break;
}
}
return s; /* base-10 digits count how many elements hit each residue */
}
/* Switch in a loop with fallthrough and an early break out of the LOOP (not just
* the switch). Discriminant per iteration: (p[i] & 7). case 7 breaks the loop;
* cases 0/1 fall through together. Tests that switch-break vs loop-break are
* distinguished. */
int switch_loop_break(const int *p) {
int s = 0;
int i = 0;
for (; i < 8; i++) {
switch (p[i] & 7) {
case 0:
case 1:
s += 2; /* shared body, then break the switch */
break;
case 7:
s += 5;
goto done; /* leave the loop entirely */
default:
s += 1;
break;
}
}
done:
return s * 10 + i; /* i records where (if) the loop broke early */
}
/* Nested switch: an outer discriminant selects a group, an inner switch refines
* it. Recover: outer (x & 1) -> {0,1}; inner (y & 1) -> {0,1}; four distinct
* leaf constants. */
int nested_switch(unsigned x, unsigned y) {
switch (x & 1u) {
case 0:
switch (y & 1u) {
case 0: return 6000;
case 1: return 6001;
}
break;
case 1:
switch (y & 1u) {
case 0: return 6010;
case 1: return 6011;
}
break;
}
return -1;
}
/* Sparse switch returning through a shared tail after computing per-case: tests
* that recovered case constants feed a common continuation, not duplicated
* exits. Discriminant: x. Cases 11, 22, 33. */
int sparse_shared_tail(int x) {
int r;
switch (x) {
case 11: r = 1; break;
case 22: r = 2; break;
case 33: r = 3; break;
default: r = 9; break;
}
return r * 1000 + r * r; /* common tail exercised by every case */
} 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
16/16default_dominant pass 9 lines
// glaurung: default_dominant @ 0x1620
int default_dominant(int arg0) {
// x86-64 prologue: save rbp
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 42))) != 0)) {
return 1111;
} else {
return 0x22b8;
}
} dense_compute pass 40 lines
// glaurung: dense_compute @ 0x11a0
int dense_compute(unsigned int arg0, int arg1) {
int r;
long local_18;
long var2;
// x86-64 prologue: save rbp
var2 = (unsigned long)((unsigned int)((arg0 & 7)));
local_18 = var2;
if (((((unsigned long)((unsigned long)((unsigned int)(var2))) < (unsigned long)(7)) | ((unsigned long)((unsigned int)((var2 - 7))) == 0)) == 0)) {
return 0;
}
switch (local_18) {
case 0:
r = ((unsigned int)(arg1) + 1);
break;
case 1:
r = ((unsigned int)(arg1) - 1);
break;
case 2:
r = ((unsigned long)((unsigned int)(arg1)) << 1);
break;
case 3:
r = (arg1 * 3);
break;
case 4:
r = ((unsigned int)(arg1) ^ 90);
break;
case 5:
r = ((unsigned long)((unsigned int)(arg1)) << 1);
break;
case 6:
r = ((unsigned int)(arg1) ^ -1);
break;
case 7:
r = ((unsigned int)(arg1) & 15);
break;
}
// x86-64 epilogue: restore rbp
return (unsigned int)(r);
} dense_jumptable pass 40 lines
// glaurung: dense_jumptable @ 0x1100
int dense_jumptable(unsigned int arg0) {
long local_10;
int local_4;
long var2;
// x86-64 prologue: save rbp
var2 = (unsigned long)((unsigned int)((arg0 & 7)));
local_10 = var2;
if (((((unsigned long)((unsigned long)((unsigned int)(var2))) < (unsigned long)(7)) | ((unsigned long)((unsigned int)((var2 - 7))) == 0)) == 0)) {
return (unsigned int)(-1);
}
switch (local_10) {
case 0:
local_4 = 100;
break;
case 1:
local_4 = 111;
break;
case 2:
local_4 = 122;
break;
case 3:
local_4 = 133;
break;
case 4:
local_4 = 144;
break;
case 5:
local_4 = 155;
break;
case 6:
local_4 = 166;
break;
case 7:
local_4 = 177;
break;
}
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} explicit_fallthrough pass 28 lines
// glaurung: explicit_fallthrough @ 0x1530
int explicit_fallthrough(unsigned int arg0) {
int r;
int local_c;
int var1;
int var7;
// x86-64 prologue: save rbp
r = 0;
var1 = (arg0 & 3);
local_c = var1;
if (((unsigned long)((unsigned int)(var1)) == 0)) {
r = ((unsigned int)(r) + 7);
var7 = ((unsigned int)(r) + 30);
return (unsigned int)(var7);
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_c)) - 1))) == 0)) {
var7 = ((unsigned int)(r) + 30);
r = var7;
// x86-64 epilogue: restore rbp
return (unsigned int)(r);
}
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_c)) - 2))) == 0)) {
return (unsigned int)(((unsigned long)((unsigned int)(r)) + 500));
} else {
return (unsigned int)(((unsigned long)((unsigned int)(r)) + 0x2328));
}
}
} fallthrough_chain pass 32 lines
// glaurung: fallthrough_chain @ 0x15b0
int fallthrough_chain(unsigned int arg0) {
int r;
long local_10;
long var2;
// x86-64 prologue: save rbp
r = 0;
var2 = (unsigned long)((unsigned int)((arg0 & 3)));
local_10 = var2;
if (((((unsigned long)((unsigned long)((unsigned int)(var2))) < (unsigned long)(3)) | ((unsigned long)((unsigned int)((var2 - 3))) == 0)) == 0)) {
return (unsigned int)(-1);
}
switch (local_10) {
case 0:
r = ((unsigned int)(r) + 1);
goto L_15ee;
case 1:
L_15ee: ;
r = ((unsigned int)(r) + 20);
goto L_15f7;
case 2:
L_15f7: ;
r = ((unsigned int)(r) + 300);
goto L_1602;
case 3:
L_1602: ;
r = ((unsigned int)(r) + 4000);
break;
}
// x86-64 epilogue: restore rbp
return (unsigned int)(r);
} negative_cases pass 19 lines
// glaurung: negative_cases @ 0x1370
int negative_cases(int arg0) {
long local_10;
// x86-64 prologue: save rbp
local_10 = (unsigned int)(((unsigned long)((unsigned int)(arg0)) + 3));
switch (local_10) {
case 0:
return 303;
case 2:
return 301;
case 3:
return 300;
case 5:
return 302;
default:
return 399;
}
// x86-64 epilogue: restore rbp
} negative_sparse pass 21 lines
// glaurung: negative_sparse @ 0x13e0
int negative_sparse(int arg0) {
// x86-64 prologue: save rbp
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + 100))) == 0)) {
return 4000;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) + 1))) == 0)) {
return 4001;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 7))) == 0)) {
return 4007;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 42))) == 0)) {
return 4042;
} else {
return 0x1387;
}
}
}
}
} nested_switch pass 44 lines
// glaurung: nested_switch @ 0x17f0
int nested_switch(unsigned int arg0, unsigned int arg1) {
int local_10;
int local_14;
int local_18;
int local_4;
int var1;
int var13;
int var4;
// x86-64 prologue: save rbp
var1 = (arg0 & 1);
local_10 = var1;
if (((unsigned long)((unsigned int)(var1)) == 0)) {
var4 = (arg1 & 1);
local_14 = var4;
if (((unsigned long)((unsigned int)(var4)) == 0)) {
return 0x1770;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_14)) - 1))) == 0)) {
return 0x1771;
} else {
L_18a3: ;
return (unsigned int)(-1);
}
}
}
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_10)) - 1))) == 0)) {
var13 = (arg1 & 1);
local_18 = var13;
if (((unsigned long)((unsigned int)(var13)) == 0)) {
local_4 = 0x177a;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_18)) - 1))) == 0)) {
local_4 = 0x177b;
} else {
goto L_18a3;
}
}
} else {
goto L_18a3;
}
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} no_default pass 17 lines
// glaurung: no_default @ 0x1650
int no_default(unsigned int arg0) {
int local_c;
long var2;
// x86-64 prologue: save rbp
var2 = (unsigned long)((unsigned int)((arg0 & 7)));
local_c = var2;
if (((unsigned long)((unsigned int)((var2 - 2))) == 0)) {
return 220;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_c)) - 5))) == 0)) {
return 550;
} else {
return 999;
}
}
} shared_bodies pass 24 lines
// glaurung: shared_bodies @ 0x1470
int shared_bodies(unsigned int arg0) {
long local_10;
int local_4;
long var2;
// x86-64 prologue: save rbp
var2 = (unsigned long)((unsigned int)((arg0 & 7)));
local_10 = var2;
if (((((unsigned long)((unsigned long)((unsigned int)(var2))) < (unsigned long)(3)) | ((unsigned long)((unsigned int)((var2 - 3))) == 0)) == 0)) {
return 700;
}
switch (local_10) {
case 0:
case 2:
local_4 = 500;
break;
case 1:
case 3:
local_4 = 600;
break;
}
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} shared_sparse pass 17 lines
// glaurung: shared_sparse @ 0x14d0
int shared_sparse(int arg0) {
long local_10;
// x86-64 prologue: save rbp
local_10 = (unsigned int)(((unsigned long)((unsigned int)(arg0)) - 10));
switch (local_10) {
case 0:
case 10:
return 1200;
case 20:
case 30:
return 3400;
default:
return (unsigned int)(-5);
}
// x86-64 epilogue: restore rbp
} sparse_shared_tail pass 8 lines
// glaurung: sparse_shared_tail @ 0x18b0
int sparse_shared_tail(int arg0) {
int r;
// x86-64 prologue: save rbp
r = (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 11))) == 0) ? 1 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 22))) == 0) ? 2 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 33))) == 0) ? 3 : 9)));
// x86-64 epilogue: restore rbp
return (unsigned int)(((r * 1000) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(r)) * r)))));
} sparse_switch pass 21 lines
// glaurung: sparse_switch @ 0x1250
int sparse_switch(int arg0) {
// x86-64 prologue: save rbp
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 1))) == 0)) {
return 2001;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 5))) == 0)) {
return 2005;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 17))) == 0)) {
return 2017;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 100))) == 0)) {
return 2100;
} else {
return 2999;
}
}
}
}
} sparse_wide pass 21 lines
// glaurung: sparse_wide @ 0x12e0
int sparse_wide(int arg0) {
// x86-64 prologue: save rbp
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 3))) == 0)) {
return 30;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 250))) == 0)) {
return 2500;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 0x1388))) == 0)) {
return 0xc350;
} else {
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) - 0x10001))) == 0)) {
return 0xa000a;
} else {
return (unsigned int)(-7);
}
}
}
}
} switch_in_loop pass 31 lines
// glaurung: switch_in_loop @ 0x16b0
int switch_in_loop(const int * arg0) {
int s;
int i;
long local_18;
long var4;
// x86-64 prologue: save rbp
s = 0;
for (i = 0; ((long)(i) < 8); i++) {
var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) & 3)));
local_18 = var4;
if (((((unsigned long)((unsigned long)((unsigned int)(var4))) < (unsigned long)(3)) | ((unsigned long)((unsigned int)((var4 - 3))) == 0)) != 0)) {
switch (local_18) {
case 0:
s = ((unsigned int)(s) + 1);
break;
case 1:
s = ((unsigned int)(s) + 10);
break;
case 2:
s = ((unsigned int)(s) + 100);
break;
case 3:
s = ((unsigned int)(s) + 1000);
break;
}
}
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} switch_loop_break pass 39 lines
// glaurung: switch_loop_break @ 0x1750
int switch_loop_break(const int * arg0) {
int s;
int i;
int local_14;
long var4;
s = 0;
i = 0;
L_1766: ;
if ((8 <= (long)(i))) {
// x86-64 epilogue: restore rbp
return (unsigned int)(((s * 10) + i));
}
var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) & 7)));
local_14 = var4;
if (((unsigned long)((unsigned long)((unsigned int)(var4))) < (unsigned long)(2))) {
goto L_17a0;
}
goto L_178f;
L_178f: ;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_14)) - 7))) == 0)) {
goto L_17ae;
}
goto L_17bc;
L_17a0: ;
s = ((unsigned int)(s) + 2);
goto L_17c5;
L_17ae: ;
s = ((unsigned int)(s) + 5);
// x86-64 epilogue: restore rbp
return (unsigned int)(((s * 10) + i));
L_17bc: ;
s = ((unsigned int)(s) + 1);
L_17c5: ;
goto L_17ca;
L_17ca: ;
i = ((unsigned int)(i) + 1);
goto L_1766;
} clang -O2
16/16default_dominant pass 4 lines
// glaurung: default_dominant @ 0x12d0
int default_dominant(int arg0) {
return (((unsigned long)((unsigned int)(arg0)) == 42) ? 0x22b8 : 1111);
} dense_compute pass 23 lines
// glaurung: dense_compute @ 0x1110
int dense_compute(unsigned int arg0, int arg1) {
int r;
int var8;
switch ((unsigned long)((unsigned int)((arg0 & 7)))) {
case 0:
return (unsigned int)(((unsigned long)((unsigned int)(arg1)) + 1));
case 1:
return (unsigned int)(((unsigned long)((unsigned int)(arg1)) - 1));
case 2:
case 5:
var8 = ((unsigned int)(arg1) + (unsigned int)(arg1));
return (unsigned int)(var8);
case 3:
return (unsigned int)(((unsigned long)((unsigned int)(arg1)) + ((unsigned long)((unsigned int)(arg1)) * 2)));
case 4:
return (unsigned int)(((unsigned long)((unsigned int)(arg1)) ^ 90));
case 6:
return (~(unsigned long)((unsigned int)(arg1)));
case 7:
return (unsigned int)(((unsigned long)((unsigned int)(arg1)) & 15));
}
} dense_jumptable pass 6 lines
// glaurung: dense_jumptable @ 0x1100
int dense_jumptable(unsigned int arg0) {
long var1;
var1 = (unsigned long)((unsigned int)((arg0 & 7)));
return (unsigned int)(((unsigned long)((unsigned int)((var1 + ((unsigned long)((unsigned int)((var1 + (var1 * 4)))) * 2)))) + 100));
} explicit_fallthrough pass 11 lines
// glaurung: explicit_fallthrough @ 0x1280
int explicit_fallthrough(unsigned int arg0) {
int r;
long var1;
var1 = (unsigned long)((unsigned int)((arg0 & 3)));
r = 0x2328;
if (((unsigned long)((unsigned int)(var1)) != 3)) {
r = (unsigned long)((unsigned int)((((unsigned long)((unsigned int)(var1)) == 0) ? 37 : (((unsigned long)((unsigned int)(var1)) == 1) ? 30 : (((unsigned long)((unsigned int)(var1)) == 2) ? 500 : *(int *)((0x20c4 + ((unsigned long)((unsigned int)(var1)) * 4))))))));
}
return r;
} fallthrough_chain pass 14 lines
// glaurung: fallthrough_chain @ 0x12a0
int fallthrough_chain(unsigned int arg0) {
int r;
switch ((unsigned long)((unsigned int)((arg0 & 3)))) {
case 0:
return 0x10e1;
case 1:
return 0x10e0;
case 2:
return 0x10cc;
case 3:
return 4000;
}
} negative_cases pass 13 lines
// glaurung: negative_cases @ 0x11d0
int negative_cases(int arg0) {
long ret;
int var0;
long var1;
var0 = (arg0 + 3);
var1 = (unsigned long)((unsigned int)(var0));
ret = 399;
if (((unsigned long)((unsigned long)((unsigned int)(var0))) <= (unsigned long)(5))) {
ret = (unsigned long)((unsigned int)((((long)((int)(var1)) == 0) ? 303 : (((long)((int)(var1)) == 1) ? 399 : (((long)((int)(var1)) == 2) ? 301 : (((long)((int)(var1)) == 3) ? 300 : (((long)((int)(var1)) == 4) ? 399 : (((long)((int)(var1)) == 5) ? 302 : *(int *)((0x20ac + ((long)((int)(var1)) * 4)))))))))));
}
return ret;
} negative_sparse pass 19 lines
// glaurung: negative_sparse @ 0x11f0
int negative_sparse(int arg0) {
if (((((unsigned long)((unsigned int)(arg0)) == 6) | ((long)(arg0) < 6)) != 0)) {
if (((unsigned long)((unsigned int)(arg0)) == 0xffffff9c)) {
return 4000;
}
if (((unsigned long)((unsigned int)(arg0)) != 0xffffffff)) {
return 0x1387;
}
return 4001;
}
if (((unsigned long)((unsigned int)(arg0)) == 7)) {
return 4007;
}
if (((unsigned long)((unsigned int)(arg0)) != 42)) {
return 0x1387;
}
return 4042;
} nested_switch pass 4 lines
// glaurung: nested_switch @ 0x1490
int nested_switch(unsigned int arg0, unsigned int arg1) {
return (unsigned int)(((((unsigned long)((unsigned char)((arg0 & 1))) == 0) ? 0x1770 : 0x177a) | (unsigned long)((unsigned int)((arg1 & 1)))));
} no_default pass 6 lines
// glaurung: no_default @ 0x12f0
int no_default(unsigned int arg0) {
long var1;
var1 = (unsigned long)((unsigned int)((arg0 & 7)));
return (((unsigned long)((unsigned int)(var1)) != 2) ? (((unsigned long)((unsigned int)(var1)) == 5) ? 550 : 999) : 220);
} shared_bodies pass 11 lines
// glaurung: shared_bodies @ 0x1230
int shared_bodies(unsigned int arg0) {
long ret;
long var1;
var1 = (unsigned long)((unsigned int)((arg0 & 7)));
ret = 700;
if (((unsigned long)((unsigned long)((unsigned int)(var1))) <= (unsigned long)(3))) {
ret = (unsigned long)((unsigned int)((((unsigned long)((unsigned int)(var1)) == 0) ? 500 : (((unsigned long)((unsigned int)(var1)) == 1) ? 600 : (((unsigned long)((unsigned int)(var1)) == 2) ? 500 : (((unsigned long)((unsigned int)(var1)) == 3) ? 600 : *(int *)((0x20d0 + ((unsigned long)((unsigned int)(var1)) * 4)))))))));
}
return ret;
} shared_sparse pass 17 lines
// glaurung: shared_sparse @ 0x1250
int shared_sparse(int arg0) {
long ret;
ret = 1200;
switch ((unsigned long)((unsigned int)((arg0 - 10)))) {
case 0:
case 10:
break;
case 20:
case 30:
return 3400;
default:
ret = 0xfffffffb;
break;
}
return ret;
} sparse_shared_tail pass 6 lines
// glaurung: sparse_shared_tail @ 0x14b0
int sparse_shared_tail(int arg0) {
int r;
r = (((unsigned long)((unsigned int)(arg0)) == 11) ? 1 : (((unsigned long)((unsigned int)(arg0)) == 33) ? 3 : (((unsigned long)((unsigned int)(arg0)) != 22) ? 9 : 2)));
return (unsigned int)(((unsigned long)((unsigned int)((r + 1000))) * r));
} sparse_switch pass 19 lines
// glaurung: sparse_switch @ 0x1140
int sparse_switch(int arg0) {
if (((((unsigned long)((unsigned int)(arg0)) == 16) | ((long)(arg0) < 16)) != 0)) {
if (((unsigned long)((unsigned int)(arg0)) == 1)) {
return 2001;
}
if (((unsigned long)((unsigned int)(arg0)) != 5)) {
return 2999;
}
return 2005;
}
if (((unsigned long)((unsigned int)(arg0)) == 17)) {
return 2017;
}
if (((unsigned long)((unsigned int)(arg0)) != 100)) {
return 2999;
}
return 2100;
} sparse_wide pass 19 lines
// glaurung: sparse_wide @ 0x1180
int sparse_wide(int arg0) {
if (((((unsigned long)((unsigned int)(arg0)) == 0x1387) | ((long)(arg0) < 0x1387)) != 0)) {
if (((unsigned long)((unsigned int)(arg0)) == 3)) {
return 30;
}
if (((unsigned long)((unsigned int)(arg0)) != 250)) {
return 0xfffffff9;
}
return 2500;
}
if (((unsigned long)((unsigned int)(arg0)) == 0x1388)) {
return 0xc350;
}
if (((unsigned long)((unsigned int)(arg0)) != 0x10001)) {
return 0xfffffff9;
}
return 0xa000a;
} switch_in_loop pass 6 lines
// glaurung: switch_in_loop @ 0x1310
int switch_in_loop(const int * arg0) {
int i;
int s;
return (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)(*(int *)(((long)arg0)))) & 3))) == 0) ? 1 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0)))) & 3))) == 1) ? 10 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0)))) & 3))) == 2) ? 100 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0)))) & 3))) == 3) ? 1000 : *(int *)((0x20e0 + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0)))) & 3))) * 4))))))))) + (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4)))) & 3))) == 0) ? 1 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4)))) & 3))) == 1) ? 10 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4)))) & 3))) == 2) ? 100 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4)))) & 3))) == 3) ? 1000 : *(int *)((0x20e0 + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4)))) & 3))) * 4)))))))))) + (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8)))) & 3))) == 0) ? 1 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8)))) & 3))) == 1) ? 10 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8)))) & 3))) == 2) ? 100 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8)))) & 3))) == 3) ? 1000 : *(int *)((0x20e0 + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8)))) & 3))) * 4)))))))))) + (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc)))) & 3))) == 0) ? 1 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc)))) & 3))) == 1) ? 10 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc)))) & 3))) == 2) ? 100 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc)))) & 3))) == 3) ? 1000 : *(int *)((0x20e0 + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc)))) & 3))) * 4)))))))))) + (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10)))) & 3))) == 0) ? 1 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10)))) & 3))) == 1) ? 10 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10)))) & 3))) == 2) ? 100 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10)))) & 3))) == 3) ? 1000 : *(int *)((0x20e0 + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10)))) & 3))) * 4)))))))))) + (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14)))) & 3))) == 0) ? 1 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14)))) & 3))) == 1) ? 10 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14)))) & 3))) == 2) ? 100 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14)))) & 3))) == 3) ? 1000 : *(int *)((0x20e0 + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14)))) & 3))) * 4)))))))))) + (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18)))) & 3))) == 0) ? 1 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18)))) & 3))) == 1) ? 10 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18)))) & 3))) == 2) ? 100 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18)))) & 3))) == 3) ? 1000 : *(int *)((0x20e0 + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18)))) & 3))) * 4)))))))))) + (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c)))) & 3))) == 0) ? 1 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c)))) & 3))) == 1) ? 10 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c)))) & 3))) == 2) ? 100 : (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c)))) & 3))) == 3) ? 1000 : *(int *)((0x20e0 + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c)))) & 3))) * 4)))))))));
} switch_loop_break pass 163 lines
// glaurung: switch_loop_break @ 0x1370
int switch_loop_break(const int * arg0) {
int s;
int i;
long var10;
long var13;
long var14;
int var15;
long var17;
long var2;
long var20;
long var22;
long var25;
int var26;
int var27;
long var29;
int var3;
long var32;
long var34;
long var37;
int var38;
int var43;
long var45;
long var46;
long var48;
long var5;
long var8;
var2 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0)))) & 7)));
var3 = 2;
var5 = 2;
if (((unsigned long)((unsigned long)((unsigned int)(var2))) < (unsigned long)(2))) {
L_1399: ;
var8 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4)))) & 7)));
if (((unsigned long)((unsigned long)((unsigned int)(var8))) < (unsigned long)(2))) {
L_13b7: ;
var10 = (unsigned long)((unsigned int)((var5 + var3)));
var13 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8)))) & 7)));
var14 = 2;
var15 = 2;
if (((unsigned long)((unsigned long)((unsigned int)(var13))) < (unsigned long)(2))) {
L_13dc: ;
var17 = (unsigned long)((unsigned int)((var10 + var15)));
var20 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc)))) & 7)));
if (((unsigned long)((unsigned long)((unsigned int)(var20))) < (unsigned long)(2))) {
L_13f8: ;
var22 = (unsigned long)((unsigned int)((var17 + var14)));
var25 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10)))) & 7)));
var26 = 2;
var27 = 2;
if (((unsigned long)((unsigned long)((unsigned int)(var25))) < (unsigned long)(2))) {
L_141e: ;
var29 = (unsigned long)((unsigned int)((var22 + var27)));
var32 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14)))) & 7)));
if (((unsigned long)((unsigned long)((unsigned int)(var32))) < (unsigned long)(2))) {
L_143a: ;
var34 = (unsigned long)((unsigned int)((var29 + var26)));
var37 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18)))) & 7)));
var38 = 2;
if (((unsigned long)((unsigned long)((unsigned int)(var37))) < (unsigned long)(2))) {
L_145b: ;
s = (unsigned long)((unsigned int)((var34 + var38)));
var14 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c)))) & 7)));
if (((unsigned long)(2) <= (unsigned long)((unsigned long)((unsigned int)(var14))))) {
var5 = (unsigned long)((unsigned int)(s));
if (((unsigned long)((unsigned int)(var14)) == 7)) {
var43 = (var5 + 5);
var45 = (unsigned long)((unsigned int)(var43));
var46 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var43)) + ((unsigned long)((unsigned int)(var43)) * 4))));
return (unsigned int)((var14 + (var46 * 2)));
}
var48 = (unsigned long)((unsigned int)((s + 1)));
L_147f: ;
var14 = 8;
var45 = var48;
} else {
var48 = (unsigned long)((unsigned int)((s + 2)));
goto L_147f;
}
} else {
var14 = 6;
var5 = var34;
if (((unsigned long)((unsigned int)(var37)) == 7)) {
var43 = (var5 + 5);
var45 = (unsigned long)((unsigned int)(var43));
var46 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var43)) + ((unsigned long)((unsigned int)(var43)) * 4))));
return (unsigned int)((var14 + (var46 * 2)));
}
var38 = 1;
goto L_145b;
}
} else {
var14 = 5;
var5 = var29;
if (((unsigned long)((unsigned int)(var32)) == 7)) {
var43 = (var5 + 5);
var45 = (unsigned long)((unsigned int)(var43));
var46 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var43)) + ((unsigned long)((unsigned int)(var43)) * 4))));
return (unsigned int)((var14 + (var46 * 2)));
}
var26 = 1;
goto L_143a;
}
} else {
var14 = 4;
var5 = var22;
if (((unsigned long)((unsigned int)(var25)) == 7)) {
var43 = (var5 + 5);
var45 = (unsigned long)((unsigned int)(var43));
var46 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var43)) + ((unsigned long)((unsigned int)(var43)) * 4))));
return (unsigned int)((var14 + (var46 * 2)));
}
var27 = 1;
goto L_141e;
}
} else {
var14 = 3;
var5 = var17;
if (((unsigned long)((unsigned int)(var20)) == 7)) {
var43 = (var5 + 5);
var45 = (unsigned long)((unsigned int)(var43));
var46 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var43)) + ((unsigned long)((unsigned int)(var43)) * 4))));
return (unsigned int)((var14 + (var46 * 2)));
}
var14 = 1;
goto L_13f8;
}
} else {
var5 = var10;
if (((unsigned long)((unsigned int)(var13)) == 7)) {
var43 = (var5 + 5);
var45 = (unsigned long)((unsigned int)(var43));
var46 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var43)) + ((unsigned long)((unsigned int)(var43)) * 4))));
return (unsigned int)((var14 + (var46 * 2)));
}
var15 = 1;
goto L_13dc;
}
} else {
var14 = 1;
if (((unsigned long)((unsigned int)(var8)) == 7)) {
var43 = (var5 + 5);
var45 = (unsigned long)((unsigned int)(var43));
var46 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var43)) + ((unsigned long)((unsigned int)(var43)) * 4))));
return (unsigned int)((var14 + (var46 * 2)));
}
var3 = 1;
goto L_13b7;
}
} else {
var14 = 0;
var5 = 0;
if (((unsigned long)((unsigned int)(var2)) == 7)) {
var43 = (var5 + 5);
var45 = (unsigned long)((unsigned int)(var43));
var46 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var43)) + ((unsigned long)((unsigned int)(var43)) * 4))));
return (unsigned int)((var14 + (var46 * 2)));
}
var5 = 1;
goto L_1399;
}
var46 = (unsigned long)((unsigned int)((var45 + (var45 * 4))));
return (unsigned int)((var14 + (var46 * 2)));
} gcc -O0
16/16default_dominant pass 9 lines
// glaurung: default_dominant @ 0x14a2
int default_dominant(int arg0) {
// x86-64 prologue: save rbp
if (((unsigned long)((unsigned int)(arg0)) != 42)) {
return 1111;
} else {
return 0x22b8;
}
} dense_compute pass 36 lines
// glaurung: dense_compute @ 0x1171
int dense_compute(unsigned int arg0, int arg1) {
int r;
// x86-64 prologue: save rbp
switch ((unsigned long)((unsigned int)((arg0 & 7)))) {
case 0:
r = ((unsigned int)(arg1) + 1);
break;
case 1:
r = ((unsigned int)(arg1) - 1);
break;
case 2:
r = ((unsigned int)(arg1) + (unsigned int)(arg1));
break;
case 3:
r = ((unsigned int)(((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1)))) + (unsigned int)(arg1));
break;
case 4:
r = ((unsigned int)(arg1) ^ 90);
break;
case 5:
r = ((unsigned int)(arg1) + (unsigned int)(arg1));
break;
case 6:
r = (~(unsigned long)((unsigned int)(arg1)));
break;
case 7:
r = ((unsigned int)(arg1) & 15);
break;
default:
r = 0;
break;
}
// x86-64 epilogue: restore rbp
return (unsigned int)(r);
} dense_jumptable pass 25 lines
// glaurung: dense_jumptable @ 0x10f9
int dense_jumptable(unsigned int arg0) {
// x86-64 prologue: save rbp
switch ((unsigned long)((unsigned int)((arg0 & 7)))) {
case 0:
return 100;
case 1:
return 111;
case 2:
return 122;
case 3:
return 133;
case 4:
return 144;
case 5:
return 155;
case 6:
return 166;
case 7:
return 177;
default:
return 0xffffffff;
}
// x86-64 epilogue: restore rbp
} explicit_fallthrough pass 34 lines
// glaurung: explicit_fallthrough @ 0x13fa
int explicit_fallthrough(unsigned int arg0) {
int r;
long t140;
long t142;
long var2;
// x86-64 prologue: save rbp
r = 0;
var2 = (unsigned long)((unsigned int)((arg0 & 3)));
if (((unsigned long)((unsigned int)(var2)) == 2)) {
return (unsigned int)((r + 500));
}
if (((unsigned long)(2) < (unsigned long)((unsigned long)((unsigned int)(var2))))) {
t142 = ((unsigned long)((unsigned int)(r)) + 0x2328);
r = t142;
// x86-64 epilogue: restore rbp
return (unsigned int)(r);
}
if (((unsigned long)((unsigned int)(var2)) == 0)) {
r = (r + 7);
t140 = ((unsigned long)((unsigned int)(r)) + 30);
return (unsigned int)(t140);
}
if (((unsigned long)((unsigned int)(var2)) == 1)) {
t140 = ((unsigned long)((unsigned int)(r)) + 30);
r = t140;
// x86-64 epilogue: restore rbp
return (unsigned int)(r);
}
t142 = ((unsigned long)((unsigned int)(r)) + 0x2328);
r = t142;
// x86-64 epilogue: restore rbp
return (unsigned int)(r);
} fallthrough_chain pass 45 lines
// glaurung: fallthrough_chain @ 0x1447
int fallthrough_chain(unsigned int arg0) {
int r;
long t144;
long var2;
// x86-64 prologue: save rbp
r = 0;
var2 = (unsigned long)((unsigned int)((arg0 & 3)));
if (((unsigned long)((unsigned int)(var2)) == 3)) {
t144 = ((unsigned long)((unsigned int)(r)) + 4000);
r = t144;
// x86-64 epilogue: restore rbp
return (unsigned int)(r);
}
if (((unsigned long)(3) < (unsigned long)((unsigned long)((unsigned int)(var2))))) {
r = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(r);
}
if (((unsigned long)((unsigned int)(var2)) == 2)) {
L_1486: ;
r = (r + 300);
t144 = ((unsigned long)((unsigned int)(r)) + 4000);
return (unsigned int)(t144);
}
if (((unsigned long)(2) < (unsigned long)((unsigned long)((unsigned int)(var2))))) {
r = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(r);
}
if (((unsigned long)((unsigned int)(var2)) == 0)) {
r = (r + 1);
L_1482: ;
r = (r + 20);
goto L_1486;
} else {
if (((unsigned long)((unsigned int)(var2)) == 1)) {
goto L_1482;
} else {
r = -1;
}
}
// x86-64 epilogue: restore rbp
return (unsigned int)(r);
} negative_cases pass 18 lines
// glaurung: negative_cases @ 0x12c9
int negative_cases(int arg0) {
// x86-64 prologue: save rbp
switch (arg0) {
case 2:
return 302;
case 0:
return 300;
case -3:
return 303;
case -1:
return 301;
default:
// x86-64 epilogue: restore rbp
return 399;
}
// x86-64 epilogue: restore rbp
} negative_sparse pass 18 lines
// glaurung: negative_sparse @ 0x131d
int negative_sparse(int arg0) {
// x86-64 prologue: save rbp
switch (arg0) {
case 42:
return 4042;
case 7:
return 4007;
case -100:
return 4000;
case -1:
return 4001;
default:
// x86-64 epilogue: restore rbp
return 0x1387;
}
// x86-64 epilogue: restore rbp
} nested_switch pass 38 lines
// glaurung: nested_switch @ 0x15e8
int nested_switch(unsigned int arg0, unsigned int arg1) {
long ret;
long var2;
long var5;
long var8;
// x86-64 prologue: save rbp
var2 = (unsigned long)((unsigned int)((arg0 & 1)));
if (((unsigned long)((unsigned int)(var2)) == 0)) {
var5 = (unsigned long)((unsigned int)((arg1 & 1)));
if (((unsigned long)((unsigned int)(var5)) == 0)) {
return 0x1770;
} else {
if (((unsigned long)((unsigned int)(var5)) == 1)) {
return 0x1771;
} else {
L_1645: ;
return 0xffffffff;
}
}
}
if (((unsigned long)((unsigned int)(var2)) == 1)) {
var8 = (unsigned long)((unsigned int)((arg1 & 1)));
if (((unsigned long)((unsigned int)(var8)) == 0)) {
ret = 0x177a;
} else {
if (((unsigned long)((unsigned int)(var8)) == 1)) {
ret = 0x177b;
} else {
goto L_1645;
}
}
} else {
goto L_1645;
}
// x86-64 epilogue: restore rbp
return ret;
} no_default pass 15 lines
// glaurung: no_default @ 0x14c1
int no_default(unsigned int arg0) {
long var2;
// x86-64 prologue: save rbp
var2 = (unsigned long)((unsigned int)((arg0 & 7)));
if (((unsigned long)((unsigned int)(var2)) == 2)) {
return 220;
} else {
if (((unsigned long)((unsigned int)(var2)) == 5)) {
return 550;
} else {
return 999;
}
}
} shared_bodies pass 32 lines
// glaurung: shared_bodies @ 0x1371
int shared_bodies(unsigned int arg0) {
long var2;
// x86-64 prologue: save rbp
var2 = (unsigned long)((unsigned int)((arg0 & 7)));
if (((unsigned long)((unsigned int)(var2)) == 3)) {
// x86-64 epilogue: restore rbp
return 600;
}
if (((unsigned long)(3) < (unsigned long)((unsigned long)((unsigned int)(var2))))) {
// x86-64 epilogue: restore rbp
return 700;
}
if (((unsigned long)((unsigned int)(var2)) == 2)) {
// x86-64 epilogue: restore rbp
return 500;
}
if (((unsigned long)(2) < (unsigned long)((unsigned long)((unsigned int)(var2))))) {
// x86-64 epilogue: restore rbp
return 700;
}
if (((unsigned long)((unsigned int)(var2)) == 0)) {
// x86-64 epilogue: restore rbp
return 500;
}
if (((unsigned long)((unsigned int)(var2)) == 1)) {
// x86-64 epilogue: restore rbp
return 600;
}
// x86-64 epilogue: restore rbp
return 700;
} shared_sparse pass 25 lines
// glaurung: shared_sparse @ 0x13b6
int shared_sparse(int arg0) {
if (((unsigned long)((unsigned int)(arg0)) == 40)) {
// x86-64 epilogue: restore rbp
return 3400;
}
if (((((unsigned long)((unsigned int)(arg0)) == 40) | ((long)(arg0) < 40)) == 0)) {
// x86-64 epilogue: restore rbp
return 0xfffffffb;
}
if (((unsigned long)((unsigned int)(arg0)) == 30)) {
// x86-64 epilogue: restore rbp
return 3400;
}
if (((((unsigned long)((unsigned int)(arg0)) == 30) | ((long)(arg0) < 30)) == 0)) {
// x86-64 epilogue: restore rbp
return 0xfffffffb;
}
if ((((unsigned long)((unsigned int)(arg0)) == 10) || ((unsigned long)((unsigned int)(arg0)) == 20))) {
// x86-64 epilogue: restore rbp
return 1200;
}
// x86-64 epilogue: restore rbp
return 0xfffffffb;
} sparse_shared_tail pass 34 lines
// glaurung: sparse_shared_tail @ 0x164c
int sparse_shared_tail(int arg0) {
int r;
int var1;
int var3;
int var5;
// x86-64 prologue: save rbp
if (((unsigned long)((unsigned int)(arg0)) == 33)) {
r = 3;
} else {
if (((((unsigned long)((unsigned int)(arg0)) == 33) | ((long)(arg0) < 33)) == 0)) {
r = 9;
var1 = ((unsigned int)(r) * 1000);
var3 = ((unsigned int)(r) * (unsigned int)(r));
var5 = ((unsigned int)(var3) + var1);
// x86-64 epilogue: restore rbp
return (unsigned int)(var5);
}
if (((unsigned long)((unsigned int)(arg0)) == 11)) {
r = 1;
} else {
if (((unsigned long)((unsigned int)(arg0)) == 22)) {
r = 2;
} else {
r = 9;
}
}
}
var1 = ((unsigned int)(r) * 1000);
var3 = ((unsigned int)(r) * (unsigned int)(r));
var5 = ((unsigned int)(var3) + var1);
// x86-64 epilogue: restore rbp
return (unsigned int)(var5);
} sparse_switch pass 18 lines
// glaurung: sparse_switch @ 0x1212
int sparse_switch(int arg0) {
// x86-64 prologue: save rbp
switch (arg0) {
case 100:
return 2100;
case 17:
return 2017;
case 1:
return 2001;
case 5:
return 2005;
default:
// x86-64 epilogue: restore rbp
return 2999;
}
// x86-64 epilogue: restore rbp
} sparse_wide pass 18 lines
// glaurung: sparse_wide @ 0x1266
int sparse_wide(int arg0) {
// x86-64 prologue: save rbp
switch (arg0) {
case 65537:
return 0xa000a;
case 5000:
return 0xc350;
case 3:
return 30;
case 250:
return 2500;
default:
// x86-64 epilogue: restore rbp
return 0xfffffff9;
}
// x86-64 epilogue: restore rbp
} switch_in_loop pass 33 lines
// glaurung: switch_in_loop @ 0x14f3
int switch_in_loop(const int * arg0) {
int s;
int i;
long var7;
// x86-64 prologue: save rbp
s = 0;
for (i = 0; ((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7)) != 0); i++) {
var7 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) & 3)));
if (((unsigned long)((unsigned int)(var7)) == 3)) {
s = (s + 1000);
} else {
if (((((unsigned long)((unsigned int)(var7)) == 3) | ((long)((int)(var7)) < 3)) != 0)) {
if (((unsigned long)((unsigned int)(var7)) == 2)) {
s = (s + 100);
} else {
if (((((unsigned long)((unsigned int)(var7)) == 2) | ((long)((int)(var7)) < 2)) != 0)) {
if (((unsigned long)((unsigned int)(var7)) == 0)) {
s = (s + 1);
} else {
if (((unsigned long)((unsigned int)(var7)) == 1)) {
s = (s + 10);
} else {
}
}
}
}
}
}
}
// x86-64 epilogue: restore rbp
return (unsigned int)(s);
} switch_loop_break pass 41 lines
// glaurung: switch_loop_break @ 0x1570
int switch_loop_break(const int * arg0) {
int s;
int i;
int var12;
long var7;
s = 0;
i = 0;
goto L_15cc;
L_158c: ;
var7 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(i)])) & 7)));
if (((((unsigned long)((unsigned int)(var7)) == 1) | ((long)((int)(var7)) < 1)) != 0)) {
if ((0 <= (long)((int)(var7)))) {
goto L_15b7;
}
goto L_15c3;
}
if (((unsigned long)((unsigned int)(var7)) == 7)) {
goto L_15bd;
}
goto L_15c3;
L_15b7: ;
s = (s + 2);
goto L_15c8;
L_15bd: ;
s = (s + 5);
var12 = ((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)(var12)) + (unsigned long)((unsigned int)(var12)))))));
L_15c3: ;
s = (s + 1);
L_15c8: ;
i = (i + 1);
L_15cc: ;
if ((((unsigned long)((unsigned int)(i)) == 7) | ((long)(i) < 7))) {
goto L_158c;
}
var12 = ((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)(var12)) + (unsigned long)((unsigned int)(var12)))))));
} gcc -O2
16/16default_dominant pass 4 lines
// glaurung: default_dominant @ 0x1390
int default_dominant(int arg0) {
return (((unsigned long)((unsigned int)(arg0)) != 42) ? 1111 : 0x22b8);
} dense_compute pass 23 lines
// glaurung: dense_compute @ 0x1120
int dense_compute(unsigned int arg0, int arg1) {
int r;
long t133;
switch ((unsigned long)((unsigned int)((arg0 & 7)))) {
case 0:
return (unsigned int)((arg1 + 1));
case 1:
return (unsigned int)((arg1 - 1));
case 2:
case 5:
t133 = ((unsigned long)((unsigned int)(arg1)) + (unsigned long)((unsigned int)(arg1)));
return (unsigned int)(t133);
case 3:
return (unsigned int)((arg1 + (arg1 * 2)));
case 4:
return (unsigned int)(((unsigned long)((unsigned int)(arg1)) ^ 90));
case 6:
return (~(unsigned long)((unsigned int)(arg1)));
case 7:
return (unsigned int)(((unsigned long)((unsigned int)(arg1)) & 15));
}
} dense_jumptable pass 11 lines
// glaurung: dense_jumptable @ 0x1100
int dense_jumptable(unsigned int arg0) {
long ret;
long var1;
var1 = (unsigned long)((unsigned int)((arg0 & 7)));
ret = 100;
if (((unsigned long)((unsigned long)((unsigned int)((var1 - 1)))) <= (unsigned long)(6))) {
ret = (unsigned long)((unsigned int)(((var1 + ((unsigned long)((unsigned int)((var1 + (var1 * 4)))) * 2)) + 100)));
}
return ret;
} explicit_fallthrough pass 14 lines
// glaurung: explicit_fallthrough @ 0x1330
int explicit_fallthrough(unsigned int arg0) {
long ret;
long var1;
var1 = (unsigned long)((unsigned int)((arg0 & 3)));
ret = 30;
if (((unsigned long)((unsigned int)(var1)) != 1)) {
ret = 500;
if (((unsigned long)((unsigned int)(var1)) != 2)) {
ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned int)((0 - ((unsigned long)((unsigned long)((unsigned int)(var1))) < (unsigned long)(1)))) & -0x2303LL))) + 0x2328)));
}
}
return ret;
} fallthrough_chain pass 14 lines
// glaurung: fallthrough_chain @ 0x1360
int fallthrough_chain(unsigned int arg0) {
long ret;
long var1;
var1 = (unsigned long)((unsigned int)((arg0 & 3)));
ret = 0x10cc;
if (((unsigned long)((unsigned int)(var1)) != 2)) {
ret = 4000;
if (((unsigned long)((unsigned int)(var1)) != 3)) {
ret = (unsigned long)((unsigned int)((((unsigned long)((unsigned int)(var1)) != 1) + 0x10e0)));
}
}
return ret;
} negative_cases pass 13 lines
// glaurung: negative_cases @ 0x1220
int negative_cases(int arg0) {
long ret;
int var0;
long var1;
var0 = (arg0 + 3);
var1 = (unsigned long)((unsigned int)(var0));
ret = 399;
if (((unsigned long)((unsigned long)((unsigned int)(var0))) <= (unsigned long)(5))) {
ret = (unsigned long)((unsigned int)(((var1 == 0) ? 303 : ((var1 == 1) ? 399 : ((var1 == 2) ? 301 : ((var1 == 3) ? 300 : ((var1 == 4) ? 399 : ((var1 == 5) ? 302 : *(int *)((0x2080 + (var1 * 4)))))))))));
}
return ret;
} negative_sparse pass 17 lines
// glaurung: negative_sparse @ 0x1240
int negative_sparse(int arg0) {
long ret;
long t33;
t33 = ((unsigned long)((unsigned int)(arg0)) - 7);
if (((unsigned long)((unsigned int)(arg0)) == 7)) {
return 4007;
}
if (((((unsigned long)((unsigned int)(arg0)) == 7) | ((long)(arg0) < 7)) == 0)) {
return (((unsigned long)((unsigned int)(arg0)) == 42) ? 4042 : 0x1387);
}
ret = 4000;
if (((unsigned long)((unsigned int)(arg0)) == 0xffffff9c)) {
return ret;
}
return (((unsigned long)((unsigned int)(arg0)) == 0xffffffff) ? 4001 : 0x1387);
} nested_switch pass 6 lines
// glaurung: nested_switch @ 0x1490
int nested_switch(unsigned int arg0, unsigned int arg1) {
long var1;
var1 = (unsigned long)((unsigned int)((arg1 & 1)));
return (((unsigned long)((unsigned int)((arg0 & 1))) != 0) ? (unsigned long)((unsigned int)((var1 + 0x177a))) : (unsigned long)((unsigned int)((var1 + 0x1770))));
} no_default pass 13 lines
// glaurung: no_default @ 0x13b0
int no_default(unsigned int arg0) {
long var1;
var1 = (unsigned long)((unsigned int)((arg0 & 7)));
if (((unsigned long)((unsigned int)(var1)) != 2)) {
if (((unsigned long)((unsigned int)(var1)) == 5)) {
return 550;
} else {
return 999;
}
}
return 220;
} shared_bodies pass 17 lines
// glaurung: shared_bodies @ 0x1290
int shared_bodies(unsigned int arg0) {
long ret;
long var1;
var1 = (unsigned long)((unsigned int)((arg0 & 7)));
if (((unsigned long)((unsigned int)(var1)) == 2)) {
return 500;
}
if (((unsigned long)(2) < (unsigned long)((unsigned long)((unsigned int)(var1))))) {
return (((unsigned long)((unsigned int)(var1)) == 3) ? 600 : 700);
}
ret = 500;
if (((unsigned long)((unsigned int)(var1)) == 0)) {
return ret;
}
return (((unsigned long)((unsigned int)(var1)) == 1) ? 600 : 700);
} shared_sparse pass 17 lines
// glaurung: shared_sparse @ 0x12e0
int shared_sparse(int arg0) {
long ret;
long t33;
t33 = ((unsigned long)((unsigned int)(arg0)) - 30);
if (((unsigned long)((unsigned int)(arg0)) == 30)) {
return 3400;
}
if (((((unsigned long)((unsigned int)(arg0)) == 30) | ((long)(arg0) < 30)) == 0)) {
return (((unsigned long)((unsigned int)(arg0)) == 40) ? 3400 : 0xfffffffb);
}
ret = 1200;
if (((unsigned long)((unsigned int)(arg0)) == 10)) {
return ret;
}
return (((unsigned long)((unsigned int)(arg0)) != 20) ? 0xfffffffb : 1200);
} sparse_shared_tail pass 13 lines
// glaurung: sparse_shared_tail @ 0x14b0
int sparse_shared_tail(int arg0) {
int r;
long ret;
long var1;
var1 = (unsigned long)((unsigned int)((arg0 - 11)));
ret = 0x2379;
if (((unsigned long)((unsigned long)((unsigned int)(var1))) <= (unsigned long)(22))) {
r = (unsigned long)((unsigned int)(((var1 == 0) ? 1 : ((var1 == 1) ? 9 : ((var1 == 2) ? 9 : ((var1 == 3) ? 9 : ((var1 == 4) ? 9 : ((var1 == 5) ? 9 : ((var1 == 6) ? 9 : ((var1 == 7) ? 9 : ((var1 == 8) ? 9 : ((var1 == 9) ? 9 : ((var1 == 10) ? 9 : ((var1 == 11) ? 2 : ((var1 == 12) ? 9 : ((var1 == 13) ? 9 : ((var1 == 14) ? 9 : ((var1 == 15) ? 9 : ((var1 == 16) ? 9 : ((var1 == 17) ? 9 : ((var1 == 18) ? 9 : ((var1 == 19) ? 9 : ((var1 == 20) ? 9 : ((var1 == 21) ? 9 : ((var1 == 22) ? 3 : *(int *)((0x2020 + (var1 * 4))))))))))))))))))))))))))));
ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((r + 1000))) * r)));
}
return ret;
} sparse_switch pass 17 lines
// glaurung: sparse_switch @ 0x1180
int sparse_switch(int arg0) {
long ret;
long t33;
t33 = ((unsigned long)((unsigned int)(arg0)) - 17);
if (((unsigned long)((unsigned int)(arg0)) == 17)) {
return 2017;
}
if (((((unsigned long)((unsigned int)(arg0)) == 17) | ((long)(arg0) < 17)) == 0)) {
return (((unsigned long)((unsigned int)(arg0)) == 100) ? 2100 : 2999);
}
ret = 2001;
if (((unsigned long)((unsigned int)(arg0)) == 1)) {
return ret;
}
return (((unsigned long)((unsigned int)(arg0)) == 5) ? 2005 : 2999);
} sparse_wide pass 17 lines
// glaurung: sparse_wide @ 0x11d0
int sparse_wide(int arg0) {
long ret;
long t33;
t33 = ((unsigned long)((unsigned int)(arg0)) - 0x1388);
if (((unsigned long)((unsigned int)(arg0)) == 0x1388)) {
return 0xc350;
}
if (((((unsigned long)((unsigned int)(arg0)) == 0x1388) | ((long)(arg0) < 0x1388)) == 0)) {
return (((unsigned long)((unsigned int)(arg0)) == 0x10001) ? 0xa000a : 0xfffffff9);
}
ret = 30;
if (((unsigned long)((unsigned int)(arg0)) == 3)) {
return ret;
}
return (((unsigned long)((unsigned int)(arg0)) == 250) ? 2500 : 0xfffffff9);
} switch_in_loop pass 48 lines
// glaurung: switch_in_loop @ 0x13e0
int switch_in_loop(const int * arg0) {
int s;
int i;
long ret;
long var0;
long var12;
int var13;
long var4;
long var7;
var0 = (long)((arg0 + 8));
s = 0;
var4 = (long)arg0;
L_1405: ;
while (1) {
var7 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var4)))) & 3)));
if (((unsigned long)((unsigned int)(var7)) == 2)) {
goto L_1428;
}
goto L_140f;
L_13f0: ;
var12 = (((unsigned long)((unsigned int)(var7)) != 1) ? (unsigned long)((unsigned int)((s + 1))) : (unsigned long)((unsigned int)((s + 10))));
L_13fc: ;
var4 = (var4 + 4);
s = var12;
ret = var12;
if ((var4 == var0)) {
return ret;
}
goto L_1405;
L_140f: ;
if (((unsigned long)((unsigned int)(var7)) != 3)) {
goto L_13f0;
}
var4 = (var4 + 4);
var13 = (s + 1000);
s = (unsigned long)((unsigned int)(var13));
ret = (unsigned long)((unsigned int)(var13));
if ((var4 != var0)) {
goto L_1405;
}
return ret;
L_1428: ;
var12 = (unsigned long)((unsigned int)((s + 100)));
goto L_13fc;
}
return ret;
} switch_loop_break pass 34 lines
// glaurung: switch_loop_break @ 0x1430
int switch_loop_break(const int * arg0) {
int s;
int i;
long var1;
long var13;
int var16;
long var5;
long var9;
var1 = 0;
s = 0;
L_1438: ;
var5 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + var1 * 4))));
i = (unsigned long)((unsigned int)(var1));
var9 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var5)) & 7)));
if (((unsigned long)((unsigned int)((var5 & 6))) != 0)) {
goto L_1468;
}
var13 = (unsigned long)((unsigned int)((s + 2)));
L_144b: ;
var1 = (var1 + 1);
s = var13;
if ((var1 != 8)) {
goto L_1438;
}
return (unsigned int)((8 + ((unsigned long)((unsigned int)((var13 + (var13 * 4)))) * 2)));
L_1468: ;
if (((unsigned long)((unsigned int)(var9)) == 7)) {
var16 = (s + 5);
return (unsigned int)((i + ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var16)) + ((unsigned long)((unsigned int)(var16)) * 4)))) * 2)));
}
var13 = (unsigned long)((unsigned int)((s + 1)));
goto L_144b;
}