Fixture 124
loop break continue
C · 3 functions · 4 lanes · 12 of 12 function-lanes behave identically
All 4 lanes recompile and return the same results as the original.
break and continue bind to the innermost enclosing loop or switch. A break inside a switch inside a loop leaves the switch, not the loop -- the single most common source of a mis-structured recovery.
#include <stdint.h>
/* break and continue bind to the innermost enclosing loop or switch. A break
* inside a switch inside a loop leaves the switch, not the loop -- the single
* most common source of a mis-structured recovery. */
__attribute__((noinline)) int32_t
break_binds_to_switch(const int32_t *values, int32_t count) {
int32_t total = 0;
int32_t index;
if (values == 0 || count < 0 || count > 16) {
return -1;
}
for (index = 0; index < count; ++index) {
switch (values[index] & 3) {
case 0:
total += 1;
break; /* leaves the switch; the loop continues */
case 1:
total += 10;
continue; /* this one does leave the iteration */
case 2:
total += 100;
break;
default:
total += 1000;
break;
}
total += 1; /* reached for cases 0, 2, 3 but not 1 */
}
return total;
}
__attribute__((noinline)) int32_t
nested_loop_early_exit(const int32_t *grid, int32_t rows, int32_t columns,
int32_t needle) {
int32_t row;
int32_t column;
int32_t visited = 0;
if (grid == 0 || rows < 0 || rows > 4 || columns < 0 || columns > 4) {
return -1;
}
for (row = 0; row < rows; ++row) {
for (column = 0; column < columns; ++column) {
visited += 1;
if (grid[row * columns + column] == needle) {
goto found; /* the only clean way out of two loops */
}
}
}
return -visited;
found:
return visited;
}
__attribute__((noinline)) int32_t
continue_in_do_while(int32_t limit) {
int32_t index = 0;
int32_t total = 0;
if (limit < 0 || limit > 16) {
return -1;
}
do {
index += 1;
if ((index & 1) == 0) {
continue; /* jumps to the controlling expression, not the top */
}
total += index;
} while (index < limit);
return total;
} Recovered C
Generated by glaurung decompile --style decbench at b47f6b43.
baseline.json records the result after recompiling the C and calling it beside the
original with seeded inputs.
clang -O0
3/3break_binds_to_switch pass 61 lines
// glaurung: break_binds_to_switch @ 0x1100
int32_t break_binds_to_switch(const int32_t * arg0, int32_t arg1) {
int total;
int index;
int local_20;
int local_4;
int var4;
total = 0;
if ((arg0 != 0)) {
if ((0 <= (long)(arg1))) {
if ((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16))) {
goto L_113d;
}
}
}
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
L_113d: ;
index = 0;
L_1144: ;
if ((arg1 <= index)) {
goto L_11da;
}
var4 = ((unsigned int)(arg0[(long)(index)]) & 3);
local_20 = var4;
if (((unsigned long)((unsigned int)(var4)) == 0)) {
goto L_118e;
}
goto L_116c;
L_116c: ;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_20)) - 1))) == 0)) {
goto L_119c;
}
goto L_117d;
L_117d: ;
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_20)) - 2))) == 0)) {
goto L_11aa;
}
goto L_11b8;
L_118e: ;
total = ((unsigned int)(total) + 1);
goto L_11c3;
L_119c: ;
total = ((unsigned int)(total) + 10);
goto L_11cc;
L_11aa: ;
total = ((unsigned int)(total) + 100);
goto L_11c3;
L_11b8: ;
total = ((unsigned int)(total) + 1000);
L_11c3: ;
total = ((unsigned int)(total) + 1);
L_11cc: ;
index = ((unsigned int)(index) + 1);
goto L_1144;
L_11da: ;
local_4 = total;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} continue_in_do_while pass 29 lines
// glaurung: continue_in_do_while @ 0x12e0
int32_t continue_in_do_while(int32_t arg0) {
int index;
int total;
int local_4;
// x86-64 prologue: save rbp
index = 0;
total = 0;
if (((long)(arg0) < 0)) {
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
if (((((unsigned long)((unsigned int)(arg0)) == 16) | ((long)(arg0) < 16)) == 0)) {
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
}
do {
index = ((unsigned int)(index) + 1);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(index)) & 1))) != 0)) {
total = ((unsigned int)(index) + total);
} else {
}
} while ((index < arg0));
local_4 = total;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} nested_loop_early_exit pass 54 lines
// glaurung: nested_loop_early_exit @ 0x11f0
int32_t nested_loop_early_exit(const int32_t * arg0, int32_t arg1, int32_t arg2, int32_t arg3) {
int visited;
int row;
int column;
int local_4;
visited = 0;
if ((arg0 != 0)) {
if ((0 <= (long)(arg1))) {
if (((((unsigned long)((unsigned int)(arg1)) == 4) | ((long)(arg1) < 4)) != 0)) {
if ((0 <= (long)(arg2))) {
if ((((unsigned long)((unsigned int)(arg2)) == 4) | ((long)(arg2) < 4))) {
goto L_1247;
}
}
}
}
}
local_4 = -1;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
L_1247: ;
row = 0;
L_124e: ;
if ((arg1 <= row)) {
goto L_12be;
}
column = 0;
L_1261: ;
if ((arg2 <= column)) {
goto L_12ab;
}
visited = ((unsigned int)(visited) + 1);
if (((unsigned int)(arg0[(long)((int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(row)) * arg2))) + column)))]) == (unsigned int)(arg3))) {
goto L_12cb;
}
goto L_129d;
L_129d: ;
column = ((unsigned int)(column) + 1);
goto L_1261;
L_12ab: ;
goto L_12b0;
L_12b0: ;
row = ((unsigned int)(row) + 1);
goto L_124e;
L_12be: ;
local_4 = (0 - visited);
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
L_12cb: ;
local_4 = visited;
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} clang -O2
3/3break_binds_to_switch pass 109 lines
// glaurung: break_binds_to_switch @ 0x1100
int32_t break_binds_to_switch(const int32_t * arg0, int32_t arg1) {
int index;
int total;
long ret;
long var0;
long var14;
long var19;
long var20;
int var21;
long var22;
int var28;
long var29;
int var32;
int var38;
long var39;
long var5;
int var8;
ret = 0xffffffff;
if ((arg0 == 0)) {
return ret;
}
if (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
return ret;
}
if (((unsigned long)((unsigned int)(arg1)) == 0)) {
goto L_1159;
}
var0 = (unsigned long)((unsigned int)(arg1));
if (((unsigned long)((unsigned int)(arg1)) != 1)) {
goto L_115c;
}
var5 = 0;
index = 0;
L_1127: ;
ret = var5;
if (((unsigned long)((unsigned char)((var0 & 1))) == 0)) {
return ret;
}
var8 = ((unsigned int)(*(int *)(((long)arg0 + index * 4))) & 3);
if (((unsigned long)((unsigned int)(var8)) == 0)) {
return (unsigned int)(((unsigned long)((unsigned int)((var5 + 1))) + 1));
}
if (((unsigned long)((unsigned int)(var8)) == 1)) {
return (unsigned int)((var5 + 10));
}
if (((unsigned long)((unsigned int)(var8)) != 2)) {
return (unsigned int)(((unsigned long)((unsigned int)((var5 + 1000))) + 1));
}
return (unsigned int)(((unsigned long)((unsigned int)((var5 + 100))) + 1));
L_1159: ;
return 0;
L_115c: ;
var14 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var0)) & -2)));
var19 = 0;
var20 = 0;
goto L_1183;
L_1170: ;
var21 = 1;
L_1175: ;
var5 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var22 + var21))) + 1)));
L_117a: ;
index = (var20 + 2);
var19 = var5;
var20 = (unsigned long)((unsigned int)(index));
if ((var14 == index)) {
goto L_1127;
}
L_1183: ;
var28 = ((unsigned int)(*(int *)(((long)arg0 + var20 * 4))) & 3);
var29 = (unsigned long)((unsigned int)(var28));
if (((unsigned long)((unsigned int)(var28)) != 0)) {
if (((unsigned long)((unsigned int)(var29)) == 2)) {
goto L_11b0;
}
if (((unsigned long)((unsigned int)(var29)) != 1)) {
goto L_11c0;
}
var22 = (unsigned long)((unsigned int)((var19 + 10)));
goto L_11ca;
}
var32 = 1;
goto L_11c5;
L_11b0: ;
var32 = 100;
goto L_11c5;
L_11c0: ;
var32 = 1000;
L_11c5: ;
var22 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var19 + var32))) + 1)));
L_11ca: ;
var38 = ((unsigned int)(*(int *)(((long)arg0 + var20 * 4 + 0x4))) & 3);
var39 = (unsigned long)((unsigned int)(var38));
if (((unsigned long)((unsigned int)(var38)) == 0)) {
goto L_1170;
}
if (((unsigned long)((unsigned int)(var39)) != 1)) {
if (((unsigned long)((unsigned int)(var39)) != 2)) {
goto L_1200;
}
var21 = 100;
goto L_1175;
}
var5 = (unsigned long)((unsigned int)((var22 + 10)));
goto L_117a;
L_1200: ;
var21 = 1000;
goto L_1175;
} continue_in_do_while pass 172 lines
// glaurung: continue_in_do_while @ 0x13f0
int32_t continue_in_do_while(int32_t arg0) {
int index;
int total;
long ret;
int var105;
int var106;
int var107;
int var108;
int var109;
int var111;
int var112;
int var113;
int var114;
long var148;
long var149;
long var15;
long var152;
int var161;
long var18;
int var2;
int var20;
int var21;
int var22;
int var23;
int var24;
int var25;
int var26;
int var27;
int var29;
int var30;
int var31;
int var32;
int var33;
int var34;
int var35;
int var36;
int var37;
int var38;
int var39;
long var4;
int var40;
int var41;
int var42;
int var43;
int var44;
int var51;
int var52;
int var53;
int var54;
long var6;
int var82;
int var83;
int var84;
int var85;
long var9;
ret = 0xffffffff;
if (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg0))))) {
goto L_1509;
}
var2 = ((2 <= (long)(arg0)) ? arg0 : 1);
var4 = 0;
var6 = 0;
if (((unsigned long)((unsigned long)((unsigned int)(var2))) < (unsigned long)(4))) {
goto L_14e5;
}
var4 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var2)) & 0x7ffffffc)));
var9 = (unsigned long)((unsigned int)((var4 - 4)));
var15 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var9)) >> 2))) + 1)));
if (((unsigned long)((unsigned int)(var9)) == 0)) {
goto L_150a;
}
var18 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var15)) & -2)));
var20 = 0;
var21 = 0;
var22 = 0;
var23 = 0;
var24 = 0;
var25 = 1;
var26 = 2;
var27 = 3;
var29 = -1;
var30 = -1;
var31 = -1;
var32 = -1;
var33 = 5;
var34 = 5;
var35 = 5;
var36 = 5;
var37 = 8;
var38 = 8;
var39 = 8;
var40 = 8;
do {
var41 = var24;
var42 = var25;
var43 = var26;
var44 = var27;
var51 = (var24 - var29);
var52 = (var25 - var30);
var53 = (var26 - var31);
var54 = (var27 - var32);
var82 = (var24 + var33);
var83 = (var25 + var34);
var84 = (var26 + var35);
var85 = (var27 + var36);
var20 = ((((long)((var82 << 31)) >> 31) & var82) + ((((long)((var51 << 31)) >> 31) & var51) + var20));
var21 = ((((long)((var83 << 31)) >> 31) & var83) + ((((long)((var52 << 31)) >> 31) & var52) + var21));
var22 = ((((long)((var84 << 31)) >> 31) & var84) + ((((long)((var53 << 31)) >> 31) & var53) + var22));
var23 = ((((long)((var85 << 31)) >> 31) & var85) + ((((long)((var54 << 31)) >> 31) & var54) + var23));
var24 = (var24 + var37);
var25 = (var25 + var38);
var26 = (var26 + var39);
var27 = (var27 + var40);
var105 = (var18 - 2);
var18 = (unsigned long)((unsigned int)(var105));
} while (((unsigned long)((unsigned int)(var105)) != 0));
var106 = (var41 + 9);
var107 = (var42 + 9);
var108 = (var43 + 9);
var109 = (var44 + 9);
var111 = var20;
var112 = var21;
var113 = var22;
var114 = var23;
if (((unsigned long)((unsigned char)((var15 & 1))) == 0)) {
goto L_14cb;
}
L_14b5: ;
var111 = (var20 + (((long)((var106 << 31)) >> 31) & var106));
var112 = (var21 + (((long)((var107 << 31)) >> 31) & var107));
var113 = (var22 + (((long)((var108 << 31)) >> 31) & var108));
var114 = (var23 + (((long)((var109 << 31)) >> 31) & var109));
L_14cb: ;
var148 = (unsigned long)((unsigned int)(((var114 + var112) + (var113 + var111))));
var6 = var148;
ret = var148;
if (((unsigned int)(var2) == (unsigned int)(var4))) {
goto L_1509;
}
L_14e5: ;
var149 = (-(unsigned long)((unsigned int)(var2)));
index = (unsigned long)((unsigned int)((var4 + 1)));
var152 = var6;
do {
total = (var152 + (unsigned int)(((-(unsigned long)((unsigned int)(((unsigned long)((unsigned int)(index)) & 1)))) & index)));
var152 = (unsigned long)((unsigned int)(total));
var161 = ((unsigned int)((var149 + index)) + 1);
index = (unsigned long)((unsigned int)((index + 1)));
ret = (unsigned long)((unsigned int)(total));
} while (((unsigned long)((unsigned int)(var161)) != 1));
L_1509: ;
return ret;
L_150a: ;
ret = 0;
var20 = 0;
var21 = 0;
var22 = 0;
var23 = 0;
var106 = 1;
var107 = 2;
var108 = 3;
var109 = 4;
if (((unsigned long)((unsigned char)((var15 & 1))) != 0)) {
goto L_14b5;
}
var111 = var20;
var112 = var21;
var113 = var22;
var114 = var23;
goto L_14cb;
} nested_loop_early_exit pass 222 lines
// glaurung: nested_loop_early_exit @ 0x1220
int32_t nested_loop_early_exit(const int32_t * arg0, int32_t arg1, int32_t arg2, int32_t arg3) {
int column;
int row;
int visited;
long local_8;
long ret;
long t151;
long var0;
long var12;
long var15;
long var18;
long var19;
long var2;
long var22;
long var24;
long var25;
long var28;
long var31;
long var7;
local_8 = var0;
ret = 0xffffffff;
if (((unsigned long)(4) < (unsigned long)((unsigned long)((unsigned int)(arg2))))) {
goto L_1321;
}
if ((arg0 == 0)) {
goto L_1321;
}
if (((unsigned long)(4) < (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
goto L_1321;
}
if (((unsigned long)((unsigned int)(arg1)) != 0)) {
if (((unsigned long)((unsigned int)(arg2)) == 0)) {
goto L_12a0;
}
ret = 1;
if (((unsigned int)(*(int *)(((long)arg0))) == (unsigned int)(arg3))) {
goto L_1321;
}
var2 = (unsigned long)((unsigned int)(arg2));
if (((unsigned long)((unsigned int)(arg2)) == 1)) {
goto L_12a3;
}
ret = 2;
if (((unsigned int)(*(int *)(((long)arg0 + 0x4))) == (unsigned int)(arg3))) {
goto L_1321;
}
var2 = (unsigned long)((unsigned int)(arg2));
if (((unsigned long)((unsigned int)(arg2)) == 2)) {
goto L_12a3;
}
ret = 3;
if (((unsigned int)(*(int *)(((long)arg0 + 0x8))) == (unsigned int)(arg3))) {
goto L_1321;
}
var2 = (unsigned long)((unsigned int)(arg2));
if (((unsigned long)((unsigned int)(arg2)) == 3)) {
goto L_12a3;
}
ret = 4;
var2 = (unsigned long)((unsigned int)(arg2));
if (((unsigned int)(*(int *)(((long)arg0 + 0xc))) != (unsigned int)(arg3))) {
goto L_12a3;
}
goto L_1321;
}
var7 = 0;
goto L_12d6;
L_12a0: ;
var2 = 0;
L_12a3: ;
var7 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg2)) * arg1)));
if (((unsigned long)((unsigned int)(arg1)) == 1)) {
goto L_12d6;
}
var12 = (unsigned long)((unsigned int)(arg2));
if (((unsigned long)((unsigned int)(arg2)) == 0)) {
goto L_12c3;
}
if (((unsigned int)(*(int *)(((long)arg0 + var12 * 4))) != (unsigned int)(arg3))) {
goto L_12c8;
}
var15 = (unsigned long)((unsigned int)((var2 + 1)));
L_12be: ;
ret = (unsigned long)((unsigned int)(var15));
// x86-64 epilogue: tear down frame
return (unsigned int)(var15);
L_12c3: ;
var18 = (unsigned long)((unsigned int)(var2));
goto L_12d1;
L_12c8: ;
var19 = (unsigned long)((unsigned int)((var2 + arg2)));
var18 = var19;
if (((unsigned long)((unsigned int)(arg2)) != 1)) {
goto L_12ed;
}
L_12d1: ;
if (((unsigned long)((unsigned int)(arg1)) != 2)) {
goto L_12da;
}
L_12d6: ;
t151 = (-var7);
ret = t151;
// x86-64 epilogue: tear down frame
return t151;
L_12da: ;
if (((unsigned long)((unsigned int)(arg2)) == 0)) {
goto L_12fa;
}
if (((unsigned int)(*(int *)(((long)arg0 + var12 * 8))) != (unsigned int)(arg3))) {
goto L_12ff;
}
var22 = (unsigned long)((unsigned int)((var18 + 1)));
goto L_13c0;
L_12ed: ;
if (((unsigned int)(*(int *)(((long)arg0 + var12 * 4 + 0x4))) != (unsigned int)(arg3))) {
goto L_1323;
}
var15 = (unsigned long)((unsigned int)((var2 + 2)));
goto L_12be;
L_12fa: ;
var24 = (unsigned long)((unsigned int)(var18));
goto L_1308;
L_12ff: ;
var24 = (unsigned long)((unsigned int)((var18 + arg2)));
if (((unsigned long)((unsigned int)(arg2)) != 1)) {
goto L_1335;
}
L_1308: ;
if (((unsigned long)((unsigned int)(arg1)) == 3)) {
goto L_12d6;
}
if (((unsigned long)((unsigned int)(arg2)) == 0)) {
goto L_12d6;
}
var25 = (var12 + (var12 * 2));
if (((unsigned int)(*(int *)(((long)arg0 + var25 * 4))) != (unsigned int)(arg3))) {
goto L_1350;
}
var28 = (unsigned long)((unsigned int)((var24 + 1)));
L_131e: ;
ret = (unsigned long)((unsigned int)(var28));
L_1321: ;
// x86-64 epilogue: tear down frame
return ret;
L_1323: ;
var18 = var19;
if (((unsigned long)((unsigned int)(arg2)) == 2)) {
goto L_12d1;
}
if (((unsigned int)(*(int *)(((long)arg0 + var12 * 4 + 0x8))) != (unsigned int)(arg3))) {
goto L_1373;
}
var15 = (unsigned long)((unsigned int)((var2 + 3)));
goto L_12be;
L_1335: ;
var31 = (var12 + var12);
if (((unsigned int)(*(int *)(((long)arg0 + ((var31 * 4) | 4)))) != (unsigned int)(arg3))) {
goto L_1361;
}
var22 = (unsigned long)((unsigned int)((var18 + 2)));
goto L_13c0;
L_1350: ;
if (((unsigned long)((unsigned int)(arg2)) == 1)) {
goto L_12d6;
}
if (((unsigned int)(*(int *)(((long)arg0 + var25 * 4 + 0x4))) != (unsigned int)(arg3))) {
goto L_1390;
}
var28 = (unsigned long)((unsigned int)((var24 + 2)));
goto L_131e;
L_1361: ;
if (((unsigned long)((unsigned int)(arg2)) == 2)) {
goto L_1308;
}
if (((unsigned int)(*(int *)(((long)arg0 + var31 * 4 + 0x8))) != (unsigned int)(arg3))) {
goto L_13a8;
}
var22 = (unsigned long)((unsigned int)((var18 + 3)));
goto L_13c0;
L_1373: ;
var18 = var19;
if (((unsigned long)((unsigned int)(arg2)) == 3)) {
goto L_12d1;
}
var18 = var19;
if (((unsigned int)(*(int *)(((long)arg0 + var12 * 4 + 0xc))) != (unsigned int)(arg3))) {
goto L_12d1;
}
var15 = (unsigned long)((unsigned int)((var2 + 4)));
goto L_12be;
L_1390: ;
if (((unsigned long)((unsigned int)(arg2)) == 2)) {
goto L_12d6;
}
if (((unsigned int)(*(int *)(((long)arg0 + var25 * 4 + 0x8))) != (unsigned int)(arg3))) {
goto L_13c5;
}
var28 = (unsigned long)((unsigned int)((var24 + 3)));
goto L_131e;
L_13a8: ;
if (((unsigned long)((unsigned int)(arg2)) == 3)) {
goto L_1308;
}
if (((unsigned int)(*(int *)(((long)arg0 + var31 * 4 + 0xc))) != (unsigned int)(arg3))) {
goto L_1308;
}
var22 = (unsigned long)((unsigned int)((var18 + 4)));
L_13c0: ;
ret = (unsigned long)((unsigned int)(var22));
// x86-64 epilogue: tear down frame
return (unsigned int)(var22);
L_13c5: ;
if (((unsigned long)((unsigned int)(arg2)) == 3)) {
goto L_12d6;
}
if (((unsigned int)(*(int *)(((long)arg0 + var25 * 4 + 0xc))) != (unsigned int)(arg3))) {
goto L_12d6;
}
var28 = (unsigned long)((unsigned int)((var24 + 4)));
goto L_131e;
} gcc -O0
3/3break_binds_to_switch pass 49 lines
// glaurung: break_binds_to_switch @ 0x10f9
int32_t break_binds_to_switch(const int32_t * arg0, int32_t arg1) {
int total;
int index;
long var8;
// x86-64 prologue: save rbp
total = 0;
if ((arg0 == 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
if (((long)(arg1) < 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
if (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
index = 0;
while ((index < arg1)) {
var8 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0[(long)(index)])) & 3)));
if (((unsigned long)((unsigned int)(var8)) == 2)) {
total = (total + 100);
L_117a: ;
total = (total + 1);
} else {
if (((((unsigned long)((unsigned int)(var8)) == 2) | ((long)((int)(var8)) < 2)) == 0)) {
L_1172: ;
total = (total + 1000);
goto L_117a;
} else {
if (((unsigned long)((unsigned int)(var8)) == 0)) {
total = (total + 1);
goto L_117a;
} else {
if (((unsigned long)((unsigned int)(var8)) == 1)) {
total = (total + 10);
} else {
goto L_1172;
}
}
}
}
index = (index + 1);
}
// x86-64 epilogue: restore rbp
return (unsigned int)(total);
} continue_in_do_while pass 25 lines
// glaurung: continue_in_do_while @ 0x1232
int32_t continue_in_do_while(int32_t arg0) {
int index;
int total;
// x86-64 prologue: save rbp
index = 0;
total = 0;
if (((long)(arg0) < 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
if (((((unsigned long)((unsigned int)(arg0)) == 16) | ((long)(arg0) < 16)) == 0)) {
// x86-64 epilogue: restore rbp
return 0xffffffff;
}
do {
index = (index + 1);
if (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(index)) & 1))) == 0)) {
} else {
total = (total + (unsigned int)(index));
}
} while ((index < arg0));
// x86-64 epilogue: restore rbp
return (unsigned int)(total);
} nested_loop_early_exit pass 44 lines
// glaurung: nested_loop_early_exit @ 0x118f
int32_t nested_loop_early_exit(const int32_t * arg0, int32_t arg1, int32_t arg2, int32_t arg3) {
int visited;
int row;
int column;
visited = 0;
if ((arg0 != 0)) {
if ((0 <= (long)(arg1))) {
if (((((unsigned long)((unsigned int)(arg1)) == 4) | ((long)(arg1) < 4)) != 0)) {
if ((0 <= (long)(arg2))) {
if ((((unsigned long)((unsigned int)(arg2)) == 4) | ((long)(arg2) < 4))) {
goto L_11d1;
}
}
}
}
}
// x86-64 epilogue: restore rbp
return 0xffffffff;
L_11d1: ;
row = 0;
goto L_121d;
L_11da: ;
column = 0;
goto L_1211;
L_11e3: ;
visited = (visited + 1);
if (((unsigned int)(arg3) == (unsigned int)(arg0[(long)((int)(((unsigned long)((unsigned int)(column)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(row)) * arg2))))))]))) {
// x86-64 epilogue: restore rbp
return (unsigned int)(visited);
}
column = (column + 1);
L_1211: ;
if ((column < arg2)) {
goto L_11e3;
}
row = (row + 1);
L_121d: ;
if ((row < arg1)) {
goto L_11da;
}
// x86-64 epilogue: restore rbp
return (-(unsigned long)((unsigned int)(visited)));
} gcc -O2
3/3break_binds_to_switch pass 50 lines
// glaurung: break_binds_to_switch @ 0x1100
int32_t break_binds_to_switch(const int32_t * arg0, int32_t arg1) {
int total;
int index;
long ret;
long var11;
int var16;
long var2;
long var6;
long var9;
if ((arg0 == 0)) {
return 0xffffffff;
}
if (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
return 0xffffffff;
}
if (((unsigned long)((unsigned int)(arg1)) == 0)) {
return 0;
}
var2 = (long)((((long)arg0 + ((unsigned long)((unsigned int)((arg1 - 1))) * 4)) + 4));
total = 0;
var6 = (long)arg0;
L_1141: ;
while (1) {
var9 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var6)))) & 3)));
if (((unsigned long)((unsigned int)(var9)) != 1)) {
var11 = (unsigned long)((unsigned int)((total + 100)));
if (((unsigned long)((unsigned int)(var9)) != 2)) {
var11 = (((unsigned long)((unsigned int)(var9)) != 0) ? (unsigned long)((unsigned int)((total + 1000))) : (unsigned long)((unsigned int)((total + 1))));
}
var6 = (var6 + 4);
total = (unsigned long)((unsigned int)((var11 + 1)));
ret = (unsigned long)((unsigned int)(total));
if ((var6 == var2)) {
goto L_1157;
}
goto L_1141;
}
var6 = (var6 + 4);
var16 = (total + 10);
ret = (unsigned long)((unsigned int)(var16));
total = (unsigned long)((unsigned int)(var16));
if ((var6 != var2)) {
goto L_1141;
}
goto L_1157;
}
L_1157: ;
return ret;
} continue_in_do_while pass 22 lines
// glaurung: continue_in_do_while @ 0x11e0
int32_t continue_in_do_while(int32_t arg0) {
int index;
int total;
int var1;
int var10;
long var6;
int var8;
if (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg0))))) {
return 0xffffffff;
}
var6 = 0;
index = 0;
do {
var8 = (index + 1);
index = (unsigned long)((unsigned int)(var8));
var10 = (((unsigned long)((unsigned char)(((unsigned long)((unsigned int)(var8)) & 1))) != 0) ? (unsigned long)((unsigned int)((var6 + (unsigned long)((unsigned int)(var8))))) : var6);
var6 = (unsigned long)((unsigned int)(var10));
var1 = var10;
} while (((((unsigned int)(arg0) == (unsigned int)(var8)) | (arg0 < var8)) == 0));
return (unsigned int)(var1);
} nested_loop_early_exit pass 63 lines
// glaurung: nested_loop_early_exit @ 0x1170
int32_t nested_loop_early_exit(const int32_t * arg0, int32_t arg1, int32_t arg2, int32_t arg3) {
int visited;
int column;
int row;
long var0;
long var10;
long var12;
long var13;
int var15;
long var2;
long var7;
long var8;
long var9;
var0 = (long)arg0;
if ((arg0 == 0)) {
return 0xffffffff;
}
if (((unsigned long)(4) < (unsigned long)((unsigned long)((unsigned int)(arg2))))) {
return 0xffffffff;
}
if (((unsigned long)(4) < (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
return 0xffffffff;
}
var2 = 0;
var7 = 0;
var8 = 0;
var9 = (unsigned long)((unsigned int)(arg1));
if (((unsigned long)((unsigned int)(arg1)) == 0)) {
return (unsigned int)(var9);
}
L_1192: ;
var10 = var8;
if (((unsigned long)((unsigned int)(arg2)) == 0)) {
goto L_11c0;
}
var12 = (unsigned long)((unsigned int)((var8 + arg2)));
var13 = (var0 + ((long)((int)(var2)) * 4));
visited = var8;
goto L_11b1;
L_11a8: ;
var13 = (var13 + 4);
var10 = visited;
if (((unsigned int)(visited) == (unsigned int)(var12))) {
goto L_11c0;
}
L_11b1: ;
visited = (unsigned long)((unsigned int)((visited + 1)));
if (((unsigned int)(*(int *)((var13))) != (unsigned int)(arg3))) {
goto L_11a8;
}
return visited;
L_11c0: ;
var15 = (var7 + 1);
var2 = (unsigned long)((unsigned int)((var2 + arg2)));
var7 = (unsigned long)((unsigned int)(var15));
var8 = var10;
if (((unsigned int)(arg1) != (unsigned int)(var15))) {
goto L_1192;
}
var9 = (unsigned long)((unsigned int)((-var10)));
return (unsigned int)(var9);
}