rellic icon indicating copy to clipboard operation
rellic copied to clipboard

Limit amount of temporary variables

Open frabert opened this issue 1 year ago • 3 comments

frabert avatar Aug 10 '22 13:08 frabert

See the diff generated by this PR for the tests here: https://github.com/lifting-bits/rellic/actions/runs/2832926126

fizzbuzz.bc

--- /dev/fd/63	2022-08-10 13:35:50.414589796 +0000
+++ /dev/fd/62	2022-08-10 13:35:50.414589796 +0000
@@ -7,46 +7,24 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if ((int)val2 < 30) {
-            val3 = var1;
-            if ((int)val3 % 3 == 0U) {
-                val4 = var1;
-                if ((int)val4 % 5 == 0U) {
-                    printf("fizzbuzz\n");
-                }
-            }
-            if ((int)val3 % 3 != 0U || !((int)val3 % 3 != 0U || (int)val4 % 5 == 0U)) {
-                val5 = var1;
-                if (((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) && (int)val5 % 3 != 0U) {
-                    val6 = var1;
-                    if ((int)val6 % 5 != 0U) {
-                        val7 = var1;
-                        printf("%d\n", val7);
+    while ((int)var1 < 30)
+        {
+            if ((int)var1 % 3 != 0U || !((int)var1 % 3 != 0U || (int)var1 % 5 == 0U)) {
+                if (((int)var1 % 3 != 0U || !((int)var1 % 5 == 0U || (int)var1 % 3 != 0U)) && (int)var1 % 3 != 0U) {
+                    if ((int)var1 % 5 != 0U) {
+                        printf("%d\n", var1);
                     } else {
                         printf("buzz\n");
                     }
                 } else {
-                    if (((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) && (int)val5 % 3 == 0U) {
-                        printf("fizz\n");
-                    }
+                    printf("fizz\n");
                 }
+            } else {
+                printf("fizzbuzz\n");
             }
-            val8 = var1;
-            var1 = val8 + 1U;
+            var1 = var1 + 1U;
         }
-    } while ((int)val2 < 30);
-    val9 = var0;
-    return val9;
+    return var0;
 }

typedefs_of_typedefs.bc

--- /dev/fd/63	2022-08-10 13:35:51.166606275 +0000
+++ /dev/fd/62	2022-08-10 13:35:51.166606275 +0000
@@ -12,44 +12,16 @@
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var5;
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var6;
     void *var7;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val8;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val9;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val10;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val11;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val12;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    unsigned long val18;
-    unsigned long val19;
-    unsigned long val20;
-    unsigned long val21;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){1UL, 2UL};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){4UL, 3UL};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    printf("a=[%d %d]\n", val15, val17);
-    val18 = *array;
-    val19 = array[1UL];
-    val20 = array[2UL];
-    val21 = array[3UL];
-    printf("array=[%lld %lld %lld %lld]\n", val18, val19, val20, val21);
+    printf("a=[%d %d]\n", *((unsigned int *)var7), ((unsigned int *)var7)[1UL]);
+    printf("array=[%lld %lld %lld %lld]\n", *array, array[1UL], array[2UL], array[3UL]);
     return 0U;
 }

switch_loop.bc

--- /dev/fd/63	2022-08-10 13:35:51.282608816 +0000
+++ /dev/fd/62	2022-08-10 13:35:51.282608816 +0000
@@ -4,36 +4,25 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        var1 = val2 + 1U;
-        val3 = var1;
-        if (!(val3 != 1U && val3 != 2U && val3 != 3U)) {
-            if (val3 == 3U) {
-                val6 = var1;
-                printf("%d\n", val6);
+    while (1U)
+        {
+            var1 = var1 + 1U;
+            if (var1 != 1U && var1 != 2U && var1 != 3U) {
+                break;
+            } else {
+                printf("%d\n", var1);
                 break;
             }
-            if (val3 == 2U) {
-                val5 = var1;
-                printf("%d\n", val5);
+            if (var1 == 2U) {
+                printf("%d\n", var1);
             }
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
+            if (var1 == 1U) {
+                printf("%d\n", var1);
             }
         }
-    } while (!(val3 != 1U && val3 != 2U && val3 != 3U));
-    if (val3 == 3U || !(val3 == 2U || val3 == 3U || val3 == 1U)) {
-        val7 = var0;
-        return val7;
+    if (var1 == 3U || !(var1 == 2U || var1 == 3U || var1 == 1U)) {
+        return var0;
     }
 }

func_cond_zero_arg.bc

--- /dev/fd/63	2022-08-10 13:35:51.746618984 +0000
+++ /dev/fd/62	2022-08-10 13:35:51.746618984 +0000
@@ -8,7 +8,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int call1;
-    unsigned int val2;
     var0 = 0U;
     call1 = f();
     if (call1 == 0U) {
@@ -16,6 +15,5 @@
     } else {
         var0 = 1U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

conflicting_names.bc

--- /dev/fd/63	2022-08-10 13:35:51.942623279 +0000
+++ /dev/fd/62	2022-08-10 13:35:51.942623279 +0000
@@ -4,17 +4,13 @@
 unsigned int atoi(void *arg0);
 unsigned int foo() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 0U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int bar() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 1U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int main() {
     unsigned int var0;
@@ -24,35 +20,21 @@
     unsigned int var4;
     unsigned int var5;
     unsigned int var6;
-    unsigned int val7;
-    void *val8;
-    void *val9;
-    unsigned int call10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
+    unsigned int call7;
     var0 = 0U;
     var1 = 0U;
     var2 = (void *)0U;
     var3 = 0U;
-    val7 = var1;
-    if (1 >= (int)val7) {
+    if (1 >= (int)var1) {
         var6 = 1U;
-        val13 = var6;
-        var3 = val13;
+        var3 = var6;
     } else {
-        val8 = var2;
-        val9 = ((void **)val8)[1UL];
-        call10 = atoi(val9);
-        var4 = call10;
-        val11 = var4;
-        if ((int)val11 > 10) {
+        call7 = atoi(((void **)var2)[1UL]);
+        var4 = call7;
+        if ((int)var4 > 10) {
             var5 = 99U;
-            val12 = var5;
-            var3 = val12;
+            var3 = var5;
         }
     }
-    val14 = var3;
-    return val14;
+    return var3;
 }

struct.bc

--- /dev/fd/63	2022-08-10 13:35:52.194628801 +0000
+++ /dev/fd/62	2022-08-10 13:35:52.198628888 +0000
@@ -6,19 +6,11 @@
 struct struct__pair a = {0U, 42U};
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
     var0 = 0U;
-    val1 = a.field0;
-    if (val1 == 0U) {
-        val3 = a.field1;
-        var0 = val3;
+    if (a.field0 == 0U) {
+        var0 = a.field1;
     } else {
-        val2 = a.field0;
-        var0 = val2;
+        var0 = a.field0;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

issue_183_literal_structs.bc

--- /dev/fd/63	2022-08-10 13:35:52.382632920 +0000
+++ /dev/fd/62	2022-08-10 13:35:52.382632920 +0000
@@ -21,24 +21,18 @@
 unsigned int bar(unsigned long arg0, unsigned long arg1) {
     struct struct_foo_t var0;
     void *val1;
-    unsigned int val2;
     val1 = (&var0);
     ((struct literal_struct_0 *)val1)->field0 = arg0;
     ((struct literal_struct_0 *)val1)->field1 = arg1;
-    val2 = *(unsigned int *)(&var0.field3);
-    return val2;
+    return *(unsigned int *)(&var0.field3);
 }
 unsigned int main() {
     struct struct_foo_t var0;
     void *val1;
-    unsigned long val2;
-    unsigned long val3;
-    unsigned int call4;
+    unsigned int call2;
     *(unsigned int *)(&var0.field3) = 3U;
     val1 = (&var0);
-    val2 = ((struct literal_struct_0 *)val1)->field0;
-    val3 = ((struct literal_struct_0 *)val1)->field1;
-    call4 = bar(val2, val3);
-    printf("%d\n", call4);
+    call2 = bar(((struct literal_struct_0 *)val1)->field0, ((struct literal_struct_0 *)val1)->field1);
+    printf("%d\n", call2);
     return 0U;
 }

issue_127_uint128_t_lit.bc

--- /dev/fd/63	2022-08-10 13:35:52.498635462 +0000
+++ /dev/fd/62	2022-08-10 13:35:52.498635462 +0000
@@ -2,10 +2,8 @@
 unsigned __int128 x = (unsigned __int128)3735928559ULL;
 unsigned int main() {
     unsigned int var0;
-    unsigned __int128 val1;
-    unsigned char val2;
+    unsigned char val1;
     var0 = 0U;
-    val1 = x;
-    val2 = (val1 & (unsigned __int128)65535ULL) == (unsigned __int128)48879ULL;
-    return val2 ? 0U : 1U;
+    val1 = (x & (unsigned __int128)65535ULL) == (unsigned __int128)48879ULL;
+    return val1 ? 0U : 1U;
 }

struct_swap.bc

--- /dev/fd/63	2022-08-10 13:35:52.614638004 +0000
+++ /dev/fd/62	2022-08-10 13:35:52.614638004 +0000
@@ -7,17 +7,9 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
-    val2 = a.field0;
-    var1 = val2;
-    val3 = a.field1;
-    a.field0 = val3;
-    val4 = var1;
-    a.field1 = val4;
-    val5 = a.field0;
-    return val5;
+    var1 = a.field0;
+    a.field0 = a.field1;
+    a.field1 = var1;
+    return a.field0;
 }

init_list.bc

--- /dev/fd/63	2022-08-10 13:35:52.730640546 +0000
+++ /dev/fd/62	2022-08-10 13:35:52.730640546 +0000
@@ -2,8 +2,6 @@
 unsigned int a[5] = {0U, 1U, 2U, 3U, 4U};
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 0U;
-    val1 = a[1UL];
-    return val1;
+    return a[1UL];
 }

ret0.bc

trunc.bc

--- /dev/fd/63	2022-08-10 13:35:52.962645629 +0000
+++ /dev/fd/62	2022-08-10 13:35:52.962645629 +0000
@@ -2,8 +2,6 @@
 unsigned long a = 18446744073709551615UL;
 unsigned int main() {
     unsigned int var0;
-    unsigned long val1;
     var0 = 0U;
-    val1 = a;
-    return (unsigned int)val1;
+    return (unsigned int)a;
 }

short.bc

--- /dev/fd/63	2022-08-10 13:35:53.078648171 +0000
+++ /dev/fd/62	2022-08-10 13:35:53.078648171 +0000
@@ -3,12 +3,8 @@
 unsigned int main() {
     unsigned int var0;
     unsigned short var1;
-    unsigned short val2;
-    unsigned short val3;
     var0 = 0U;
     a = 13U;
-    val2 = a;
-    var1 = val2;
-    val3 = var1;
-    return (unsigned int)val3;
+    var1 = a;
+    return (unsigned int)var1;
 }

cast.bc

nullptr.bc

--- /dev/fd/63	2022-08-10 13:35:53.306653167 +0000
+++ /dev/fd/62	2022-08-10 13:35:53.306653167 +0000
@@ -2,15 +2,11 @@
 void *ptr = (void *)0U;
 unsigned int main() {
     unsigned int var0;
-    void *val1;
-    unsigned int val2;
     var0 = 0U;
-    val1 = ptr;
-    if (val1 != (void *)0U) {
+    if (ptr != (void *)0U) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

nested_struct.bc

--- /dev/fd/63	2022-08-10 13:35:53.494657287 +0000
+++ /dev/fd/62	2022-08-10 13:35:53.494657287 +0000
@@ -18,11 +18,7 @@
 unsigned char _str_1[9] = "Name: %s\000";
 unsigned int main() {
     unsigned int var0;
-    void *val1;
-    unsigned int val2;
     var0 = 0U;
-    val1 = r1.field2.field0;
-    printf("Name: %s", val1);
-    val2 = r1.field1.field1;
-    return val2;
+    printf("Name: %s", r1.field2.field0);
+    return r1.field1.field1;
 }

array_swap.bc

--- /dev/fd/63	2022-08-10 13:35:53.610659828 +0000
+++ /dev/fd/62	2022-08-10 13:35:53.610659828 +0000
@@ -3,17 +3,9 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
-    val2 = *a;
-    var1 = val2;
-    val3 = a[1UL];
-    *a = val3;
-    val4 = var1;
-    a[1UL] = val4;
-    val5 = *a;
-    return val5;
+    var1 = *a;
+    *a = a[1UL];
+    a[1UL] = var1;
+    return *a;
 }

bitmask.bc

--- /dev/fd/63	2022-08-10 13:35:53.726662370 +0000
+++ /dev/fd/62	2022-08-10 13:35:53.726662370 +0000
@@ -2,15 +2,11 @@
 unsigned long a = 43981UL;
 unsigned int main() {
     unsigned int var0;
-    unsigned long val1;
-    unsigned int val2;
     var0 = 0U;
-    val1 = a;
-    if ((val1 & 4080UL) >> 4UL != 188UL) {
+    if ((a & 4080UL) >> 4UL != 188UL) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

binops.bc

--- /dev/fd/63	2022-08-10 13:35:53.910666402 +0000
+++ /dev/fd/62	2022-08-10 13:35:53.910666402 +0000
@@ -4,49 +4,23 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
-    unsigned int val15;
     var0 = arg0;
-    val3 = var0;
-    var1 = val3 % 4U;
+    var1 = var0 % 4U;
     var2 = 0U;
-    val4 = var1;
-    if (val4 != 0U) {
-        val7 = var1;
-        if (val7 != 1U) {
-            val10 = var1;
-            if (val10 != 2U) {
-                val13 = var0;
-                val14 = var0;
-                var2 = (val13 + 3131756735U) * (5U & val14);
+    if (var1 != 0U) {
+        if (var1 != 1U) {
+            if (var1 != 2U) {
+                var2 = (var0 + 3131756735U) * (5U & var0);
             } else {
-                val11 = var0;
-                val12 = var0;
-                var2 = (val11 ^ 3131756735U) * (4U | val12);
+                var2 = (var0 ^ 3131756735U) * (4U | var0);
             }
         } else {
-            val8 = var0;
-            val9 = var0;
-            var2 = (val8 & 3131756735U) * (3U + val9);
+            var2 = (var0 & 3131756735U) * (3U + var0);
         }
     } else {
-        val5 = var0;
-        val6 = var0;
-        var2 = (val5 | 3131756735U) * (2U ^ val6);
+        var2 = (var0 | 3131756735U) * (2U ^ var0);
     }
-    val15 = var2;
-    return val15;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

float.bc

--- /dev/fd/63	2022-08-10 13:35:54.262674115 +0000
+++ /dev/fd/62	2022-08-10 13:35:54.266674203 +0000
@@ -4,21 +4,13 @@
     unsigned int var0;
     double var1;
     double var2;
-    double val3;
-    float val4;
-    double val5;
-    unsigned int val6;
     var0 = 0U;
     var1 = 3.1428571428571428;
-    val3 = var1;
-    val4 = f;
-    var2 = val3 - (double)val4;
-    val5 = var2;
-    if (val5 >= 0.01) {
+    var2 = var1 - (double)f;
+    if (var2 >= 0.01) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val6 = var0;
-    return val6;
+    return var0;
 }

reg_test_structure_fields.bc

zeroinit.bc

--- /dev/fd/63	2022-08-10 13:35:54.570680864 +0000
+++ /dev/fd/62	2022-08-10 13:35:54.570680864 +0000
@@ -16,14 +16,9 @@
 unsigned long a1[256] = {};
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
-    val1 = r1.field1.field0;
-    if (val1 == 0U) {
-        val2 = a1[42UL];
-        if (val2 == 0UL) {
+    if (r1.field1.field0 == 0U) {
+        if (a1[42UL] == 0UL) {
             var0 = 0U;
         } else {
             var0 = 2U;
@@ -31,6 +26,5 @@
     } else {
         var0 = 1U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

funcptr.bc

--- /dev/fd/63	2022-08-10 13:35:54.826686474 +0000
+++ /dev/fd/62	2022-08-10 13:35:54.826686474 +0000
@@ -5,39 +5,27 @@
 unsigned int add(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }
 unsigned int sub(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 - val3;
+    return var0 - var1;
 }
 unsigned int main() {
     unsigned int var0;
     void *var1;
-    unsigned int val2;
-    void *val3;
-    unsigned int call4;
+    unsigned int call2;
     var0 = 0U;
-    val2 = x;
-    if (val2 == 0U) {
+    if (x == 0U) {
         var1 = &sub;
     } else {
         var1 = &add;
     }
-    val3 = var1;
-    call4 = ((unsigned int (*)(unsigned int, unsigned int))val3)(2U, 2U);
-    return call4;
+    call2 = ((unsigned int (*)(unsigned int, unsigned int))var1)(2U, 2U);
+    return call2;
 }

goto_loop.bc

--- /dev/fd/63	2022-08-10 13:35:55.010690506 +0000
+++ /dev/fd/62	2022-08-10 13:35:55.010690506 +0000
@@ -4,41 +4,23 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
     while (1U)
         {
-            val2 = var1;
-            var1 = val2 + 1U;
-            val3 = var1;
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
+            var1 = var1 + 1U;
+            if (var1 == 1U) {
+                printf("%d\n", var1);
+            } else if (var1 != 2U) {
+                break;
             } else {
-                val5 = var1;
-                if (val5 != 2U) {
-                    break;
-                } else {
-                    val6 = var1;
-                    printf("%d\n", val6);
-                }
+                printf("%d\n", var1);
             }
         }
-    if (val3 != 1U && val5 != 2U) {
-        val7 = var1;
-        if (val7 == 3U) {
-            val8 = var1;
-            printf("%d\n", val8);
+    if (var1 != 1U && var1 != 2U) {
+        if (var1 == 3U) {
+            printf("%d\n", var1);
         }
-        val9 = var0;
-        return val9;
+        return var0;
     }
 }

branch.bc

--- /dev/fd/63	2022-08-10 13:35:55.398699008 +0000
+++ /dev/fd/62	2022-08-10 13:35:55.398699008 +0000
@@ -11,29 +11,19 @@
     unsigned int var0;
     unsigned long var1;
     unsigned long var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned long val5;
-    unsigned int val6;
-    unsigned long val7;
     var0 = 0U;
     var1 = (unsigned long)(&a);
     var2 = (unsigned long)(&c);
-    val3 = c;
-    if (val3 == 0U) {
-        val6 = c;
-        printf("Global variable 'c' of value %u is at ", val6);
-        val7 = var2;
-        if (val7 % 2UL != 0UL) {
+    if (c == 0U) {
+        printf("Global variable 'c' of value %u is at ", c);
+        if (var2 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");
         }
     } else {
-        val4 = a;
-        printf("Global variable 'a' of value %u is at ", val4);
-        val5 = var1;
-        if (val5 % 2UL != 0UL) {
+        printf("Global variable 'a' of value %u is at ", a);
+        if (var1 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");

bitops.bc

--- /dev/fd/63	2022-08-10 13:35:55.746706633 +0000
+++ /dev/fd/62	2022-08-10 13:35:55.750706721 +0000
@@ -4,34 +4,14 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
     var0 = 0U;
     var1 = 0U;
-    val2 = a;
-    val3 = b;
-    if (((int)val2 >> val3 & 1U) != 0U) {
-        val4 = var1;
-        var1 = val4 + 1U;
+    if (((int)a >> b & 1U) != 0U) {
+        var1 = var1 + 1U;
     }
-    val5 = a;
-    val6 = b;
-    if ((val5 >> val6 ^ 1U) != 0U) {
-        val7 = var1;
-        var1 = val7 + 2U;
+    if ((a >> b ^ 1U) != 0U) {
+        var1 = var1 + 2U;
     }
-    val8 = a;
-    val9 = b;
-    val10 = var1;
-    var1 = val10 + 3U;
-    val11 = var1;
-    return val11;
+    var1 = var1 + 3U;
+    return var1;
 }

vectors.bc

--- /dev/fd/63	2022-08-10 13:35:56.018712593 +0000
+++ /dev/fd/62	2022-08-10 13:35:56.018712593 +0000
@@ -10,43 +10,15 @@
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var5;
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var6;
     void *var7;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val8;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val9;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val10;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val11;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val12;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    void *val18;
-    unsigned int val19;
-    void *val20;
-    unsigned int val21;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){1U, 2U, 3U, 4U};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){4U, 3U, 2U, 1U};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    val18 = var7;
-    val19 = ((unsigned int *)val18)[2UL];
-    val20 = var7;
-    val21 = ((unsigned int *)val20)[3UL];
-    printf("a=[%d %d %d %d]\n", val15, val17, val19, val21);
+    printf("a=[%d %d %d %d]\n", *((unsigned int *)var7), ((unsigned int *)var7)[1UL], ((unsigned int *)var7)[2UL], ((unsigned int *)var7)[3UL]);
     return 0U;
 }

issue_4.bc

--- /dev/fd/63	2022-08-10 13:35:56.134715135 +0000
+++ /dev/fd/62	2022-08-10 13:35:56.134715135 +0000
@@ -5,32 +5,17 @@
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = arg0;
     var1 = arg1;
     var2 = 0U;
     var3 = 0U;
-    do {
-        val4 = var3;
-        if (val4 != 42U) {
-            val5 = var0;
-            val6 = var2;
-            var2 = val6 + val5;
-            val7 = var1;
-            val8 = var2;
-            var2 = val8 % val7;
-            val9 = var3;
-            var3 = val9 + 1U;
+    while (var3 != 42U)
+        {
+            var2 = var2 + var0;
+            var2 = var2 % var1;
+            var3 = var3 + 1U;
         }
-    } while (val4 != 42U);
-    val10 = var2;
-    return val10;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

conflicting_global.bc

--- /dev/fd/63	2022-08-10 13:35:56.358720044 +0000
+++ /dev/fd/62	2022-08-10 13:35:56.358720044 +0000
@@ -4,12 +4,8 @@
 unsigned char _str[4] = "%d\n\000";
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned int val2;
     var0 = 4U;
-    val1 = var0;
-    printf("%d\n", val1);
-    val2 = a;
-    printf("%d\n", val2);
+    printf("%d\n", var0);
+    printf("%d\n", a);
     return 0U;
 }

issue_123_uint128_t.bc

--- /dev/fd/63	2022-08-10 13:35:56.474722585 +0000
+++ /dev/fd/62	2022-08-10 13:35:56.474722585 +0000
@@ -3,14 +3,8 @@
 unsigned int main() {
     unsigned int var0;
     unsigned __int128 var1;
-    unsigned long val2;
-    unsigned __int128 val3;
-    unsigned long val4;
     var0 = 0U;
-    val2 = x;
-    var1 = val2;
-    val3 = var1;
-    x = val3;
-    val4 = x;
-    return (unsigned int)(val4 & 255UL);
+    var1 = x;
+    x = var1;
+    return (unsigned int)(x & 255UL);
 }

fizzbuzz_stateful.bc

--- /dev/fd/63	2022-08-10 13:35:56.590725127 +0000
+++ /dev/fd/62	2022-08-10 13:35:56.590725127 +0000
@@ -8,52 +8,31 @@
 unsigned char _str_3[2] = "\n\000";
 void fizzbuzz() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    val1 = i;
-    var0 = val1;
-    val2 = i;
-    if ((int)val2 % 3 == 0U) {
+    var0 = i;
+    if ((int)i % 3 == 0U) {
         i = 4U;
         printf("fizz");
     }
-    val3 = i;
-    if ((int)val3 % 5 == 0U) {
+    if ((int)i % 5 == 0U) {
         printf("buzz");
     }
-    val4 = i;
-    if ((int)val4 % 3 != 0U) {
-        val5 = i;
-        if ((int)val5 % 5 != 0U) {
-            val6 = i;
-            printf("%d", val6);
+    if ((int)i % 3 != 0U) {
+        if ((int)i % 5 != 0U) {
+            printf("%d", i);
         }
     }
-    val7 = var0;
-    i = val7;
+    i = var0;
     return;
 }
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     i = 1U;
-    do {
-        val1 = i;
-        if ((int)val1 < 16) {
+    while ((int)i < 16)
+        {
             fizzbuzz();
             printf("\n");
-            val2 = i;
-            i = val2 + 1U;
+            i = i + 1U;
         }
-    } while ((int)val1 < 16);
-    val3 = var0;
-    return val3;
+    return var0;
 }

issue_94_strncmp.bc

bool.bc

--- /dev/fd/63	2022-08-10 13:35:57.282740247 +0000
+++ /dev/fd/62	2022-08-10 13:35:57.282740247 +0000
@@ -3,17 +3,11 @@
 unsigned long b = 1UL;
 unsigned int main() {
     unsigned int var0;
-    unsigned long val1;
-    unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
-    val1 = a;
-    val2 = b;
-    if ((unsigned int)(val1 == val2) != 0U) {
+    if ((unsigned int)(a == b) != 0U) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

global_using_function_decl.bc

--- /dev/fd/63	2022-08-10 13:35:57.470744205 +0000
+++ /dev/fd/62	2022-08-10 13:35:57.470744205 +0000
@@ -7,8 +7,6 @@
     return;
 }
 unsigned int main() {
-    void *val0;
-    val0 = afunc_pointer;
-    ((void (*)(unsigned int))val0)(0U);
+    ((void (*)(unsigned int))afunc_pointer)(0U);
     return 0U;
 }

fcmp.bc

--- /dev/fd/63	2022-08-10 13:35:57.586746647 +0000
+++ /dev/fd/62	2022-08-10 13:35:57.586746647 +0000
@@ -17,56 +17,18 @@
     unsigned int var9;
     float call10;
     float call11;
-    float val12;
-    float val13;
-    float val14;
-    float val15;
-    float val16;
-    float val17;
-    float val18;
-    float val19;
-    float val20;
-    float val21;
-    float val22;
-    float val23;
-    float val24;
-    unsigned int val25;
-    unsigned int val26;
-    unsigned int val27;
-    unsigned int val28;
-    unsigned int val29;
-    unsigned int val30;
     var0 = __builtin_nan("");
     call10 = atof("3");
     var1 = call10;
     call11 = atof("2");
     var2 = call11;
-    val12 = var1;
-    var3 = -val12;
-    val13 = var3;
-    val14 = var0;
-    var4 = (val13 > val14);
-    val15 = var3;
-    val16 = var0;
-    var5 = (val15 >= val16);
-    val17 = var1;
-    val18 = var2;
-    var6 = (val17 > val18);
-    val19 = var1;
-    val20 = var2;
-    var7 = (val19 >= val20);
-    val21 = var1;
-    val22 = var0;
-    var8 = __builtin_isunordered(val21, val22);
-    val23 = var1;
-    val24 = var2;
-    var9 = __builtin_isunordered(val23, val24);
-    val25 = var4;
-    val26 = var5;
-    val27 = var6;
-    val28 = var7;
-    val29 = var8;
-    val30 = var9;
-    printf("%d %d %d %d %d %d\n", val25, val26, val27, val28, val29, val30);
+    var3 = -var1;
+    var4 = (var3 > var0);
+    var5 = (var3 >= var0);
+    var6 = (var1 > var2);
+    var7 = (var1 >= var2);
+    var8 = __builtin_isunordered(var1, var0);
+    var9 = __builtin_isunordered(var1, var2);
+    printf("%d %d %d %d %d %d\n", var4, var5, var6, var7, var8, var9);
     return 0U;
 }

byval_struct.bc

--- /dev/fd/63	2022-08-10 13:35:57.702749090 +0000
+++ /dev/fd/62	2022-08-10 13:35:57.702749090 +0000
@@ -14,13 +14,9 @@
 unsigned char _str_3[2] = "4\000";
 unsigned char _str_4[11] = "%lld %lld\n\000";
 unsigned long get_3x(struct struct_foo arg0) {
-    unsigned long val0;
-    unsigned long val1;
     void *arg0_ptr = &arg0;
-    val0 = ((struct struct_foo *)arg0_ptr)->field0;
-    ((struct struct_foo *)arg0_ptr)->field0 = val0 * 3UL;
-    val1 = ((struct struct_foo *)arg0_ptr)->field0;
-    return val1;
+    ((struct struct_foo *)arg0_ptr)->field0 = ((struct struct_foo *)arg0_ptr)->field0 * 3UL;
+    return ((struct struct_foo *)arg0_ptr)->field0;
 }
 unsigned int main() {
     struct struct_foo var0;
@@ -30,8 +26,6 @@
     unsigned int call4;
     unsigned int call5;
     unsigned long call6;
-    unsigned long val7;
-    unsigned long val8;
     call2 = atoi("1");
     var0.field0 = (long)call2;
     call3 = atoi("2");
@@ -42,8 +36,6 @@
     var0.field3 = (long)call5;
     call6 = get_3x(var0);
     var1 = call6;
-    val7 = var0.field0;
-    val8 = var1;
-    printf("%lld %lld\n", val7, val8);
+    printf("%lld %lld\n", var0.field0, var1);
     return 0U;
 }

nested_while.bc

--- /dev/fd/63	2022-08-10 13:35:57.822751616 +0000
+++ /dev/fd/62	2022-08-10 13:35:57.822751616 +0000
@@ -8,40 +8,24 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int call2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = 0U;
     call2 = atoi("5");
     var1 = call2;
-    val3 = var1;
-    if ((int)val3 > 10) {
-        do {
-            val4 = var1;
-            if ((int)val4 < 20) {
-                val5 = var1;
-                var1 = val5 + 1U;
-                val6 = var1;
-                printf("loop1 x: %d\n", val6);
+    if ((int)var1 > 10) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop1 x: %d\n", var1);
             }
-        } while ((int)val4 < 20);
     }
-    if ((int)val3 <= 10 || (int)val4 >= 20) {
-        do {
-            val7 = var1;
-            if ((int)val7 < 20) {
-                val8 = var1;
-                var1 = val8 + 1U;
-                val9 = var1;
-                printf("loop2 x: %d\n", val9);
+    if ((int)var1 <= 10 || (int)var1 >= 20) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop2 x: %d\n", var1);
             }
-        } while ((int)val7 < 20);
-        val10 = var0;
-        return val10;
+    }
+    if (((int)var1 <= 10 || (int)var1 >= 20) && (int)var1 >= 20) {
+        return var0;
     }
 }

func_cond_two_arg.bc

--- /dev/fd/63	2022-08-10 13:35:58.250760627 +0000
+++ /dev/fd/62	2022-08-10 13:35:58.250760627 +0000
@@ -5,29 +5,19 @@
 unsigned int f(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return (unsigned int)((int)val2 < (int)val3);
+    return (unsigned int)((int)var0 < (int)var1);
 }
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned int val2;
-    unsigned int call3;
-    unsigned int val4;
+    unsigned int call1;
     var0 = 0U;
-    val1 = x;
-    val2 = y;
-    call3 = f(val1, val2);
-    if (call3 == 0U) {
+    call1 = f(x, y);
+    if (call1 == 0U) {
         var0 = 0U;
     } else {
         var0 = 1U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

zext.bc

--- /dev/fd/63	2022-08-10 13:35:58.438764585 +0000
+++ /dev/fd/62	2022-08-10 13:35:58.438764585 +0000
@@ -2,8 +2,6 @@
 unsigned char a = (unsigned char)1U;
 unsigned int main() {
     unsigned int var0;
-    unsigned char val1;
     var0 = 0U;
-    val1 = a;
-    return (unsigned int)val1;
+    return (unsigned int)a;
 }

inttoptr.bc

--- /dev/fd/63	2022-08-10 13:35:58.558767111 +0000
+++ /dev/fd/62	2022-08-10 13:35:58.558767111 +0000
@@ -3,18 +3,12 @@
 unsigned int main() {
     unsigned int var0;
     void *var1;
-    unsigned long val2;
-    void *val3;
-    unsigned int val4;
     var0 = 0U;
-    val2 = a;
-    var1 = (void *)val2;
-    val3 = var1;
-    if (val3 == (void *)0U) {
+    var1 = (void *)a;
+    if (var1 == (void *)0U) {
         var0 = 0U;
     } else {
         var0 = 42U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

assert.bc

--- /dev/fd/63	2022-08-10 13:35:58.742770985 +0000
+++ /dev/fd/62	2022-08-10 13:35:58.742770985 +0000
@@ -8,24 +8,14 @@
 unsigned char _str_3[7] = "a % 15\000";
 unsigned int main() {
     unsigned int var0;
-    unsigned long val1;
-    unsigned long val2;
-    unsigned long val3;
     var0 = 0U;
-    val1 = a;
-    if (val1 % 3UL == 0UL) {
+    if (a % 3UL == 0UL) {
         __assert_fail("a % 3", "assert.c", 6U, "int main(void)");
+    } else if (a % 7UL == 0UL) {
+        __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
+    } else if (a % 15UL == 0UL) {
+        __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
     } else {
-        val2 = a;
-        if (val2 % 7UL == 0UL) {
-            __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
-        } else {
-            val3 = a;
-            if (val3 % 15UL == 0UL) {
-                __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
-            } else {
-                return 0U;
-            }
-        }
+        return 0U;
     }
 }

loop.bc

--- /dev/fd/63	2022-08-10 13:35:59.122778985 +0000
+++ /dev/fd/62	2022-08-10 13:35:59.122778985 +0000
@@ -6,26 +6,17 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if (val2 != 10U) {
-            val3 = var1;
-            printf("Variable at %d is ", val3);
-            val4 = var1;
-            if (val4 % 2U != 0U) {
+    while (var1 != 10U)
+        {
+            printf("Variable at %d is ", var1);
+            if (var1 % 2U != 0U) {
                 printf("odd.\n");
             } else {
                 printf("even.\n");
             }
-            val5 = var1;
-            var1 = val5 + 1U;
+            var1 = var1 + 1U;
         }
-    } while (val2 != 10U);
     return 0U;
 }

switch.bc

--- /dev/fd/63	2022-08-10 13:35:59.418785217 +0000
+++ /dev/fd/62	2022-08-10 13:35:59.418785217 +0000
@@ -3,12 +3,9 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     var1 = 0U;
-    val2 = a;
-    switch (val2) {
+    switch (a) {
       default:
         {
             var1 = 255U;
@@ -30,6 +27,5 @@
         }
         break;
     }
-    val3 = var1;
-    return val3;
+    return var1;
 }

template_parameter_pack.bc

--- /dev/fd/63	2022-08-10 13:35:59.630789680 +0000
+++ /dev/fd/62	2022-08-10 13:35:59.630789680 +0000
@@ -17,71 +17,43 @@
     unsigned int var2;
     unsigned int var3;
     unsigned int var4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int call10;
+    unsigned int call5;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
     var4 = arg4;
-    val5 = var0;
-    val6 = var1;
-    val7 = var2;
-    val8 = var3;
-    val9 = var4;
-    call10 = _Z3sumIiJiiiEET_S0_DpT0_(val6, val7, val8, val9);
-    return val5 + call10;
+    call5 = _Z3sumIiJiiiEET_S0_DpT0_(var1, var2, var3, var4);
+    return var0 + call5;
 }
 unsigned int _Z3sumIiJiiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2, unsigned int arg3) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int call8;
+    unsigned int call4;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
-    val4 = var0;
-    val5 = var1;
-    val6 = var2;
-    val7 = var3;
-    call8 = _Z3sumIiJiiEET_S0_DpT0_(val5, val6, val7);
-    return val4 + call8;
+    call4 = _Z3sumIiJiiEET_S0_DpT0_(var1, var2, var3);
+    return var0 + call4;
 }
 unsigned int _Z3sumIiJiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int call6;
+    unsigned int call3;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
-    val3 = var0;
-    val4 = var1;
-    val5 = var2;
-    call6 = _Z3sumIiET_S0_S0_(val4, val5);
-    return val3 + call6;
+    call3 = _Z3sumIiET_S0_S0_(var1, var2);
+    return var0 + call3;
 }
 unsigned int _Z3sumIiET_S0_S0_(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }

byval_tail_nogep.ll

byval_tail_gep.ll

github-actions[bot] avatar Aug 10 '22 13:08 github-actions[bot]

See the diff generated by this PR for the tests here: https://github.com/lifting-bits/rellic/actions/runs/2833281732

fizzbuzz.bc

--- /dev/fd/63	2022-08-10 14:29:17.983681722 +0000
+++ /dev/fd/62	2022-08-10 14:29:17.983681722 +0000
@@ -7,46 +7,24 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if ((int)val2 < 30) {
-            val3 = var1;
-            if ((int)val3 % 3 == 0U) {
-                val4 = var1;
-                if ((int)val4 % 5 == 0U) {
-                    printf("fizzbuzz\n");
-                }
-            }
-            if ((int)val3 % 3 != 0U || !((int)val3 % 3 != 0U || (int)val4 % 5 == 0U)) {
-                val5 = var1;
-                if (((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) && (int)val5 % 3 != 0U) {
-                    val6 = var1;
-                    if ((int)val6 % 5 != 0U) {
-                        val7 = var1;
-                        printf("%d\n", val7);
+    while ((int)var1 < 30)
+        {
+            if ((int)var1 % 3 != 0U || !((int)var1 % 5 == 0U || (int)var1 % 3 != 0U)) {
+                if ((int)var1 % 3 != 0U) {
+                    if ((int)var1 % 5 != 0U) {
+                        printf("%d\n", var1);
                     } else {
                         printf("buzz\n");
                     }
                 } else {
-                    if (((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) && (int)val5 % 3 == 0U) {
-                        printf("fizz\n");
-                    }
+                    printf("fizz\n");
                 }
+            } else {
+                printf("fizzbuzz\n");
             }
-            val8 = var1;
-            var1 = val8 + 1U;
+            var1 = var1 + 1U;
         }
-    } while ((int)val2 < 30);
-    val9 = var0;
-    return val9;
+    return var0;
 }

typedefs_of_typedefs.bc

--- /dev/fd/63	2022-08-10 14:29:18.823688515 +0000
+++ /dev/fd/62	2022-08-10 14:29:18.823688515 +0000
@@ -12,44 +12,16 @@
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var5;
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var6;
     void *var7;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val8;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val9;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val10;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val11;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val12;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    unsigned long val18;
-    unsigned long val19;
-    unsigned long val20;
-    unsigned long val21;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){1UL, 2UL};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){4UL, 3UL};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    printf("a=[%d %d]\n", val15, val17);
-    val18 = *array;
-    val19 = array[1UL];
-    val20 = array[2UL];
-    val21 = array[3UL];
-    printf("array=[%lld %lld %lld %lld]\n", val18, val19, val20, val21);
+    printf("a=[%d %d]\n", *((unsigned int *)var7), ((unsigned int *)var7)[1UL]);
+    printf("array=[%lld %lld %lld %lld]\n", *array, array[1UL], array[2UL], array[3UL]);
     return 0U;
 }

switch_loop.bc

--- /dev/fd/63	2022-08-10 14:29:18.947689517 +0000
+++ /dev/fd/62	2022-08-10 14:29:18.947689517 +0000
@@ -4,36 +4,26 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        var1 = val2 + 1U;
-        val3 = var1;
-        if (!(val3 != 1U && val3 != 2U && val3 != 3U)) {
-            if (val3 == 3U) {
-                val6 = var1;
-                printf("%d\n", val6);
+    while (1U)
+        {
+            var1 = var1 + 1U;
+            if (var1 != 1U && var1 != 2U && var1 != 3U) {
                 break;
             }
-            if (val3 == 2U) {
-                val5 = var1;
-                printf("%d\n", val5);
+            if (var1 == 3U) {
+                printf("%d\n", var1);
+                break;
+            }
+            if (var1 == 2U) {
+                printf("%d\n", var1);
             }
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
+            if (var1 == 1U) {
+                printf("%d\n", var1);
             }
         }
-    } while (!(val3 != 1U && val3 != 2U && val3 != 3U));
-    if (val3 == 3U || !(val3 == 2U || val3 == 3U || val3 == 1U)) {
-        val7 = var0;
-        return val7;
+    if (var1 == 3U || !(var1 == 2U || var1 == 3U || var1 == 1U)) {
+        return var0;
     }
 }

func_cond_zero_arg.bc

--- /dev/fd/63	2022-08-10 14:29:19.475693787 +0000
+++ /dev/fd/62	2022-08-10 14:29:19.475693787 +0000
@@ -8,7 +8,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int call1;
-    unsigned int val2;
     var0 = 0U;
     call1 = f();
     if (call1 == 0U) {
@@ -16,6 +15,5 @@
     } else {
         var0 = 1U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

conflicting_names.bc

--- /dev/fd/63	2022-08-10 14:29:19.675695405 +0000
+++ /dev/fd/62	2022-08-10 14:29:19.675695405 +0000
@@ -4,17 +4,13 @@
 unsigned int atoi(void *arg0);
 unsigned int foo() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 0U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int bar() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 1U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int main() {
     unsigned int var0;
@@ -24,35 +20,21 @@
     unsigned int var4;
     unsigned int var5;
     unsigned int var6;
-    unsigned int val7;
-    void *val8;
-    void *val9;
-    unsigned int call10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
+    unsigned int call7;
     var0 = 0U;
     var1 = 0U;
     var2 = (void *)0U;
     var3 = 0U;
-    val7 = var1;
-    if (1 >= (int)val7) {
+    if (1 >= (int)var1) {
         var6 = 1U;
-        val13 = var6;
-        var3 = val13;
+        var3 = var6;
     } else {
-        val8 = var2;
-        val9 = ((void **)val8)[1UL];
-        call10 = atoi(val9);
-        var4 = call10;
-        val11 = var4;
-        if ((int)val11 > 10) {
+        call7 = atoi(((void **)var2)[1UL]);
+        var4 = call7;
+        if ((int)var4 > 10) {
             var5 = 99U;
-            val12 = var5;
-            var3 = val12;
+            var3 = var5;
         }
     }
-    val14 = var3;
-    return val14;
+    return var3;
 }

struct.bc

--- /dev/fd/63	2022-08-10 14:29:19.939697540 +0000
+++ /dev/fd/62	2022-08-10 14:29:19.939697540 +0000
@@ -6,19 +6,11 @@
 struct struct__pair a = {0U, 42U};
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
     var0 = 0U;
-    val1 = a.field0;
-    if (val1 == 0U) {
-        val3 = a.field1;
-        var0 = val3;
+    if (a.field0 == 0U) {
+        var0 = a.field1;
     } else {
-        val2 = a.field0;
-        var0 = val2;
+        var0 = a.field0;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

issue_183_literal_structs.bc

--- /dev/fd/63	2022-08-10 14:29:20.143699189 +0000
+++ /dev/fd/62	2022-08-10 14:29:20.143699189 +0000
@@ -21,24 +21,18 @@
 unsigned int bar(unsigned long arg0, unsigned long arg1) {
     struct struct_foo_t var0;
     void *val1;
-    unsigned int val2;
     val1 = (&var0);
     ((struct literal_struct_0 *)val1)->field0 = arg0;
     ((struct literal_struct_0 *)val1)->field1 = arg1;
-    val2 = *(unsigned int *)(&var0.field3);
-    return val2;
+    return *(unsigned int *)(&var0.field3);
 }
 unsigned int main() {
     struct struct_foo_t var0;
     void *val1;
-    unsigned long val2;
-    unsigned long val3;
-    unsigned int call4;
+    unsigned int call2;
     *(unsigned int *)(&var0.field3) = 3U;
     val1 = (&var0);
-    val2 = ((struct literal_struct_0 *)val1)->field0;
-    val3 = ((struct literal_struct_0 *)val1)->field1;
-    call4 = bar(val2, val3);
-    printf("%d\n", call4);
+    call2 = bar(((struct literal_struct_0 *)val1)->field0, ((struct literal_struct_0 *)val1)->field1);
+    printf("%d\n", call2);
     return 0U;
 }

issue_127_uint128_t_lit.bc

--- /dev/fd/63	2022-08-10 14:29:20.267700192 +0000
+++ /dev/fd/62	2022-08-10 14:29:20.267700192 +0000
@@ -2,10 +2,8 @@
 unsigned __int128 x = (unsigned __int128)3735928559ULL;
 unsigned int main() {
     unsigned int var0;
-    unsigned __int128 val1;
-    unsigned char val2;
+    unsigned char val1;
     var0 = 0U;
-    val1 = x;
-    val2 = (val1 & (unsigned __int128)65535ULL) == (unsigned __int128)48879ULL;
-    return val2 ? 0U : 1U;
+    val1 = (x & (unsigned __int128)65535ULL) == (unsigned __int128)48879ULL;
+    return val1 ? 0U : 1U;
 }

struct_swap.bc

--- /dev/fd/63	2022-08-10 14:29:20.391701195 +0000
+++ /dev/fd/62	2022-08-10 14:29:20.391701195 +0000
@@ -7,17 +7,9 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
-    val2 = a.field0;
-    var1 = val2;
-    val3 = a.field1;
-    a.field0 = val3;
-    val4 = var1;
-    a.field1 = val4;
-    val5 = a.field0;
-    return val5;
+    var1 = a.field0;
+    a.field0 = a.field1;
+    a.field1 = var1;
+    return a.field0;
 }

init_list.bc

--- /dev/fd/63	2022-08-10 14:29:20.511702165 +0000
+++ /dev/fd/62	2022-08-10 14:29:20.511702165 +0000
@@ -2,8 +2,6 @@
 unsigned int a[5] = {0U, 1U, 2U, 3U, 4U};
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 0U;
-    val1 = a[1UL];
-    return val1;
+    return a[1UL];
 }

ret0.bc

trunc.bc

--- /dev/fd/63	2022-08-10 14:29:20.747704074 +0000
+++ /dev/fd/62	2022-08-10 14:29:20.747704074 +0000
@@ -2,8 +2,6 @@
 unsigned long a = 18446744073709551615UL;
 unsigned int main() {
     unsigned int var0;
-    unsigned long val1;
     var0 = 0U;
-    val1 = a;
-    return (unsigned int)val1;
+    return (unsigned int)a;
 }

short.bc

--- /dev/fd/63	2022-08-10 14:29:20.867705044 +0000
+++ /dev/fd/62	2022-08-10 14:29:20.867705044 +0000
@@ -3,12 +3,8 @@
 unsigned int main() {
     unsigned int var0;
     unsigned short var1;
-    unsigned short val2;
-    unsigned short val3;
     var0 = 0U;
     a = 13U;
-    val2 = a;
-    var1 = val2;
-    val3 = var1;
-    return (unsigned int)val3;
+    var1 = a;
+    return (unsigned int)var1;
 }

cast.bc

nullptr.bc

--- /dev/fd/63	2022-08-10 14:29:21.107706985 +0000
+++ /dev/fd/62	2022-08-10 14:29:21.107706985 +0000
@@ -2,15 +2,11 @@
 void *ptr = (void *)0U;
 unsigned int main() {
     unsigned int var0;
-    void *val1;
-    unsigned int val2;
     var0 = 0U;
-    val1 = ptr;
-    if (val1 != (void *)0U) {
+    if (ptr != (void *)0U) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

nested_struct.bc

--- /dev/fd/63	2022-08-10 14:29:21.299708538 +0000
+++ /dev/fd/62	2022-08-10 14:29:21.303708570 +0000
@@ -18,11 +18,7 @@
 unsigned char _str_1[9] = "Name: %s\000";
 unsigned int main() {
     unsigned int var0;
-    void *val1;
-    unsigned int val2;
     var0 = 0U;
-    val1 = r1.field2.field0;
-    printf("Name: %s", val1);
-    val2 = r1.field1.field1;
-    return val2;
+    printf("Name: %s", r1.field2.field0);
+    return r1.field1.field1;
 }

array_swap.bc

--- /dev/fd/63	2022-08-10 14:29:21.419709508 +0000
+++ /dev/fd/62	2022-08-10 14:29:21.419709508 +0000
@@ -3,17 +3,9 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
-    val2 = *a;
-    var1 = val2;
-    val3 = a[1UL];
-    *a = val3;
-    val4 = var1;
-    a[1UL] = val4;
-    val5 = *a;
-    return val5;
+    var1 = *a;
+    *a = a[1UL];
+    a[1UL] = var1;
+    return *a;
 }

bitmask.bc

--- /dev/fd/63	2022-08-10 14:29:21.539710479 +0000
+++ /dev/fd/62	2022-08-10 14:29:21.539710479 +0000
@@ -2,15 +2,11 @@
 unsigned long a = 43981UL;
 unsigned int main() {
     unsigned int var0;
-    unsigned long val1;
-    unsigned int val2;
     var0 = 0U;
-    val1 = a;
-    if ((val1 & 4080UL) >> 4UL != 188UL) {
+    if ((a & 4080UL) >> 4UL != 188UL) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

binops.bc

--- /dev/fd/63	2022-08-10 14:29:21.735712064 +0000
+++ /dev/fd/62	2022-08-10 14:29:21.735712064 +0000
@@ -4,49 +4,23 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
-    unsigned int val15;
     var0 = arg0;
-    val3 = var0;
-    var1 = val3 % 4U;
+    var1 = var0 % 4U;
     var2 = 0U;
-    val4 = var1;
-    if (val4 != 0U) {
-        val7 = var1;
-        if (val7 != 1U) {
-            val10 = var1;
-            if (val10 != 2U) {
-                val13 = var0;
-                val14 = var0;
-                var2 = (val13 + 3131756735U) * (5U & val14);
+    if (var1 != 0U) {
+        if (var1 != 1U) {
+            if (var1 != 2U) {
+                var2 = (var0 + 3131756735U) * (5U & var0);
             } else {
-                val11 = var0;
-                val12 = var0;
-                var2 = (val11 ^ 3131756735U) * (4U | val12);
+                var2 = (var0 ^ 3131756735U) * (4U | var0);
             }
         } else {
-            val8 = var0;
-            val9 = var0;
-            var2 = (val8 & 3131756735U) * (3U + val9);
+            var2 = (var0 & 3131756735U) * (3U + var0);
         }
     } else {
-        val5 = var0;
-        val6 = var0;
-        var2 = (val5 | 3131756735U) * (2U ^ val6);
+        var2 = (var0 | 3131756735U) * (2U ^ var0);
     }
-    val15 = var2;
-    return val15;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

float.bc

--- /dev/fd/63	2022-08-10 14:29:22.099715007 +0000
+++ /dev/fd/62	2022-08-10 14:29:22.099715007 +0000
@@ -4,21 +4,13 @@
     unsigned int var0;
     double var1;
     double var2;
-    double val3;
-    float val4;
-    double val5;
-    unsigned int val6;
     var0 = 0U;
     var1 = 3.1428571428571428;
-    val3 = var1;
-    val4 = f;
-    var2 = val3 - (double)val4;
-    val5 = var2;
-    if (val5 >= 0.01) {
+    var2 = var1 - (double)f;
+    if (var2 >= 0.01) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val6 = var0;
-    return val6;
+    return var0;
 }

reg_test_structure_fields.bc

zeroinit.bc

--- /dev/fd/63	2022-08-10 14:29:22.415717563 +0000
+++ /dev/fd/62	2022-08-10 14:29:22.415717563 +0000
@@ -16,14 +16,9 @@
 unsigned long a1[256] = {};
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
-    val1 = r1.field1.field0;
-    if (val1 == 0U) {
-        val2 = a1[42UL];
-        if (val2 == 0UL) {
+    if (r1.field1.field0 == 0U) {
+        if (a1[42UL] == 0UL) {
             var0 = 0U;
         } else {
             var0 = 2U;
@@ -31,6 +26,5 @@
     } else {
         var0 = 1U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

funcptr.bc

--- /dev/fd/63	2022-08-10 14:29:22.691719795 +0000
+++ /dev/fd/62	2022-08-10 14:29:22.691719795 +0000
@@ -5,39 +5,27 @@
 unsigned int add(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }
 unsigned int sub(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 - val3;
+    return var0 - var1;
 }
 unsigned int main() {
     unsigned int var0;
     void *var1;
-    unsigned int val2;
-    void *val3;
-    unsigned int call4;
+    unsigned int call2;
     var0 = 0U;
-    val2 = x;
-    if (val2 == 0U) {
+    if (x == 0U) {
         var1 = &sub;
     } else {
         var1 = &add;
     }
-    val3 = var1;
-    call4 = ((unsigned int (*)(unsigned int, unsigned int))val3)(2U, 2U);
-    return call4;
+    call2 = ((unsigned int (*)(unsigned int, unsigned int))var1)(2U, 2U);
+    return call2;
 }

goto_loop.bc

--- /dev/fd/63	2022-08-10 14:29:22.887721380 +0000
+++ /dev/fd/62	2022-08-10 14:29:22.887721380 +0000
@@ -4,41 +4,25 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
     while (1U)
         {
-            val2 = var1;
-            var1 = val2 + 1U;
-            val3 = var1;
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
-            } else {
-                val5 = var1;
-                if (val5 != 2U) {
-                    break;
-                } else {
-                    val6 = var1;
-                    printf("%d\n", val6);
-                }
+            var1 = var1 + 1U;
+            if (var1 == 1U) {
+                printf("%d\n", var1);
+            }
+            if (var1 != 1U && var1 != 2U) {
+                break;
+            }
+            if (var1 != 1U && var1 == 2U) {
+                printf("%d\n", var1);
             }
         }
-    if (val3 != 1U && val5 != 2U) {
-        val7 = var1;
-        if (val7 == 3U) {
-            val8 = var1;
-            printf("%d\n", val8);
+    if (var1 != 1U && var1 != 2U) {
+        if (var1 == 3U) {
+            printf("%d\n", var1);
         }
-        val9 = var0;
-        return val9;
+        return var0;
     }
 }

branch.bc

--- /dev/fd/63	2022-08-10 14:29:23.299724712 +0000
+++ /dev/fd/62	2022-08-10 14:29:23.299724712 +0000
@@ -11,29 +11,19 @@
     unsigned int var0;
     unsigned long var1;
     unsigned long var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned long val5;
-    unsigned int val6;
-    unsigned long val7;
     var0 = 0U;
     var1 = (unsigned long)(&a);
     var2 = (unsigned long)(&c);
-    val3 = c;
-    if (val3 == 0U) {
-        val6 = c;
-        printf("Global variable 'c' of value %u is at ", val6);
-        val7 = var2;
-        if (val7 % 2UL != 0UL) {
+    if (c == 0U) {
+        printf("Global variable 'c' of value %u is at ", c);
+        if (var2 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");
         }
     } else {
-        val4 = a;
-        printf("Global variable 'a' of value %u is at ", val4);
-        val5 = var1;
-        if (val5 % 2UL != 0UL) {
+        printf("Global variable 'a' of value %u is at ", a);
+        if (var1 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");

bitops.bc

--- /dev/fd/63	2022-08-10 14:29:23.659727623 +0000
+++ /dev/fd/62	2022-08-10 14:29:23.659727623 +0000
@@ -4,34 +4,14 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
     var0 = 0U;
     var1 = 0U;
-    val2 = a;
-    val3 = b;
-    if (((int)val2 >> val3 & 1U) != 0U) {
-        val4 = var1;
-        var1 = val4 + 1U;
+    if (((int)a >> b & 1U) != 0U) {
+        var1 = var1 + 1U;
     }
-    val5 = a;
-    val6 = b;
-    if ((val5 >> val6 ^ 1U) != 0U) {
-        val7 = var1;
-        var1 = val7 + 2U;
+    if ((a >> b ^ 1U) != 0U) {
+        var1 = var1 + 2U;
     }
-    val8 = a;
-    val9 = b;
-    val10 = var1;
-    var1 = val10 + 3U;
-    val11 = var1;
-    return val11;
+    var1 = var1 + 3U;
+    return var1;
 }

vectors.bc

--- /dev/fd/63	2022-08-10 14:29:23.935729897 +0000
+++ /dev/fd/62	2022-08-10 14:29:23.935729897 +0000
@@ -10,43 +10,15 @@
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var5;
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var6;
     void *var7;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val8;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val9;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val10;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val11;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val12;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    void *val18;
-    unsigned int val19;
-    void *val20;
-    unsigned int val21;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){1U, 2U, 3U, 4U};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){4U, 3U, 2U, 1U};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    val18 = var7;
-    val19 = ((unsigned int *)val18)[2UL];
-    val20 = var7;
-    val21 = ((unsigned int *)val20)[3UL];
-    printf("a=[%d %d %d %d]\n", val15, val17, val19, val21);
+    printf("a=[%d %d %d %d]\n", *((unsigned int *)var7), ((unsigned int *)var7)[1UL], ((unsigned int *)var7)[2UL], ((unsigned int *)var7)[3UL]);
     return 0U;
 }

issue_4.bc

--- /dev/fd/63	2022-08-10 14:29:24.055730903 +0000
+++ /dev/fd/62	2022-08-10 14:29:24.055730903 +0000
@@ -5,32 +5,17 @@
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = arg0;
     var1 = arg1;
     var2 = 0U;
     var3 = 0U;
-    do {
-        val4 = var3;
-        if (val4 != 42U) {
-            val5 = var0;
-            val6 = var2;
-            var2 = val6 + val5;
-            val7 = var1;
-            val8 = var2;
-            var2 = val8 % val7;
-            val9 = var3;
-            var3 = val9 + 1U;
+    while (var3 != 42U)
+        {
+            var2 = var2 + var0;
+            var2 = var2 % var1;
+            var3 = var3 + 1U;
         }
-    } while (val4 != 42U);
-    val10 = var2;
-    return val10;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

conflicting_global.bc

--- /dev/fd/63	2022-08-10 14:29:24.283732815 +0000
+++ /dev/fd/62	2022-08-10 14:29:24.283732815 +0000
@@ -4,12 +4,8 @@
 unsigned char _str[4] = "%d\n\000";
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned int val2;
     var0 = 4U;
-    val1 = var0;
-    printf("%d\n", val1);
-    val2 = a;
-    printf("%d\n", val2);
+    printf("%d\n", var0);
+    printf("%d\n", a);
     return 0U;
 }

issue_123_uint128_t.bc

--- /dev/fd/63	2022-08-10 14:29:24.403733821 +0000
+++ /dev/fd/62	2022-08-10 14:29:24.403733821 +0000
@@ -3,14 +3,8 @@
 unsigned int main() {
     unsigned int var0;
     unsigned __int128 var1;
-    unsigned long val2;
-    unsigned __int128 val3;
-    unsigned long val4;
     var0 = 0U;
-    val2 = x;
-    var1 = val2;
-    val3 = var1;
-    x = val3;
-    val4 = x;
-    return (unsigned int)(val4 & 255UL);
+    var1 = x;
+    x = var1;
+    return (unsigned int)(x & 255UL);
 }

fizzbuzz_stateful.bc

--- /dev/fd/63	2022-08-10 14:29:24.523734827 +0000
+++ /dev/fd/62	2022-08-10 14:29:24.523734827 +0000
@@ -8,52 +8,31 @@
 unsigned char _str_3[2] = "\n\000";
 void fizzbuzz() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    val1 = i;
-    var0 = val1;
-    val2 = i;
-    if ((int)val2 % 3 == 0U) {
+    var0 = i;
+    if ((int)i % 3 == 0U) {
         i = 4U;
         printf("fizz");
     }
-    val3 = i;
-    if ((int)val3 % 5 == 0U) {
+    if ((int)i % 5 == 0U) {
         printf("buzz");
     }
-    val4 = i;
-    if ((int)val4 % 3 != 0U) {
-        val5 = i;
-        if ((int)val5 % 5 != 0U) {
-            val6 = i;
-            printf("%d", val6);
+    if ((int)i % 3 != 0U) {
+        if ((int)i % 5 != 0U) {
+            printf("%d", i);
         }
     }
-    val7 = var0;
-    i = val7;
+    i = var0;
     return;
 }
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     i = 1U;
-    do {
-        val1 = i;
-        if ((int)val1 < 16) {
+    while ((int)i < 16)
+        {
             fizzbuzz();
             printf("\n");
-            val2 = i;
-            i = val2 + 1U;
+            i = i + 1U;
         }
-    } while ((int)val1 < 16);
-    val3 = var0;
-    return val3;
+    return var0;
 }

issue_94_strncmp.bc

bool.bc

--- /dev/fd/63	2022-08-10 14:29:25.247740897 +0000
+++ /dev/fd/62	2022-08-10 14:29:25.247740897 +0000
@@ -3,17 +3,11 @@
 unsigned long b = 1UL;
 unsigned int main() {
     unsigned int var0;
-    unsigned long val1;
-    unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
-    val1 = a;
-    val2 = b;
-    if ((unsigned int)(val1 == val2) != 0U) {
+    if ((unsigned int)(a == b) != 0U) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

global_using_function_decl.bc

--- /dev/fd/63	2022-08-10 14:29:25.439742507 +0000
+++ /dev/fd/62	2022-08-10 14:29:25.439742507 +0000
@@ -7,8 +7,6 @@
     return;
 }
 unsigned int main() {
-    void *val0;
-    val0 = afunc_pointer;
-    ((void (*)(unsigned int))val0)(0U);
+    ((void (*)(unsigned int))afunc_pointer)(0U);
     return 0U;
 }

fcmp.bc

--- /dev/fd/63	2022-08-10 14:29:25.559743513 +0000
+++ /dev/fd/62	2022-08-10 14:29:25.563743547 +0000
@@ -17,56 +17,18 @@
     unsigned int var9;
     float call10;
     float call11;
-    float val12;
-    float val13;
-    float val14;
-    float val15;
-    float val16;
-    float val17;
-    float val18;
-    float val19;
-    float val20;
-    float val21;
-    float val22;
-    float val23;
-    float val24;
-    unsigned int val25;
-    unsigned int val26;
-    unsigned int val27;
-    unsigned int val28;
-    unsigned int val29;
-    unsigned int val30;
     var0 = __builtin_nan("");
     call10 = atof("3");
     var1 = call10;
     call11 = atof("2");
     var2 = call11;
-    val12 = var1;
-    var3 = -val12;
-    val13 = var3;
-    val14 = var0;
-    var4 = (val13 > val14);
-    val15 = var3;
-    val16 = var0;
-    var5 = (val15 >= val16);
-    val17 = var1;
-    val18 = var2;
-    var6 = (val17 > val18);
-    val19 = var1;
-    val20 = var2;
-    var7 = (val19 >= val20);
-    val21 = var1;
-    val22 = var0;
-    var8 = __builtin_isunordered(val21, val22);
-    val23 = var1;
-    val24 = var2;
-    var9 = __builtin_isunordered(val23, val24);
-    val25 = var4;
-    val26 = var5;
-    val27 = var6;
-    val28 = var7;
-    val29 = var8;
-    val30 = var9;
-    printf("%d %d %d %d %d %d\n", val25, val26, val27, val28, val29, val30);
+    var3 = -var1;
+    var4 = (var3 > var0);
+    var5 = (var3 >= var0);
+    var6 = (var1 > var2);
+    var7 = (var1 >= var2);
+    var8 = __builtin_isunordered(var1, var0);
+    var9 = __builtin_isunordered(var1, var2);
+    printf("%d %d %d %d %d %d\n", var4, var5, var6, var7, var8, var9);
     return 0U;
 }

byval_struct.bc

--- /dev/fd/63	2022-08-10 14:29:25.683744553 +0000
+++ /dev/fd/62	2022-08-10 14:29:25.683744553 +0000
@@ -14,13 +14,9 @@
 unsigned char _str_3[2] = "4\000";
 unsigned char _str_4[11] = "%lld %lld\n\000";
 unsigned long get_3x(struct struct_foo arg0) {
-    unsigned long val0;
-    unsigned long val1;
     void *arg0_ptr = &arg0;
-    val0 = ((struct struct_foo *)arg0_ptr)->field0;
-    ((struct struct_foo *)arg0_ptr)->field0 = val0 * 3UL;
-    val1 = ((struct struct_foo *)arg0_ptr)->field0;
-    return val1;
+    ((struct struct_foo *)arg0_ptr)->field0 = ((struct struct_foo *)arg0_ptr)->field0 * 3UL;
+    return ((struct struct_foo *)arg0_ptr)->field0;
 }
 unsigned int main() {
     struct struct_foo var0;
@@ -30,8 +26,6 @@
     unsigned int call4;
     unsigned int call5;
     unsigned long call6;
-    unsigned long val7;
-    unsigned long val8;
     call2 = atoi("1");
     var0.field0 = (long)call2;
     call3 = atoi("2");
@@ -42,8 +36,6 @@
     var0.field3 = (long)call5;
     call6 = get_3x(var0);
     var1 = call6;
-    val7 = var0.field0;
-    val8 = var1;
-    printf("%lld %lld\n", val7, val8);
+    printf("%lld %lld\n", var0.field0, var1);
     return 0U;
 }

nested_while.bc

--- /dev/fd/63	2022-08-10 14:29:25.803745559 +0000
+++ /dev/fd/62	2022-08-10 14:29:25.803745559 +0000
@@ -8,40 +8,24 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int call2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = 0U;
     call2 = atoi("5");
     var1 = call2;
-    val3 = var1;
-    if ((int)val3 > 10) {
-        do {
-            val4 = var1;
-            if ((int)val4 < 20) {
-                val5 = var1;
-                var1 = val5 + 1U;
-                val6 = var1;
-                printf("loop1 x: %d\n", val6);
+    if ((int)var1 > 10) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop1 x: %d\n", var1);
             }
-        } while ((int)val4 < 20);
     }
-    if ((int)val3 <= 10 || (int)val4 >= 20) {
-        do {
-            val7 = var1;
-            if ((int)val7 < 20) {
-                val8 = var1;
-                var1 = val8 + 1U;
-                val9 = var1;
-                printf("loop2 x: %d\n", val9);
+    if ((int)var1 >= 20 || (int)var1 <= 10) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop2 x: %d\n", var1);
             }
-        } while ((int)val7 < 20);
-        val10 = var0;
-        return val10;
+    }
+    if (((int)var1 >= 20 || (int)var1 <= 10) && (int)var1 >= 20) {
+        return var0;
     }
 }

func_cond_two_arg.bc

--- /dev/fd/63	2022-08-10 14:29:26.267749449 +0000
+++ /dev/fd/62	2022-08-10 14:29:26.267749449 +0000
@@ -5,29 +5,19 @@
 unsigned int f(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return (unsigned int)((int)val2 < (int)val3);
+    return (unsigned int)((int)var0 < (int)var1);
 }
 unsigned int main() {
     unsigned int var0;
-    unsigned int val1;
-    unsigned int val2;
-    unsigned int call3;
-    unsigned int val4;
+    unsigned int call1;
     var0 = 0U;
-    val1 = x;
-    val2 = y;
-    call3 = f(val1, val2);
-    if (call3 == 0U) {
+    call1 = f(x, y);
+    if (call1 == 0U) {
         var0 = 0U;
     } else {
         var0 = 1U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

zext.bc

--- /dev/fd/63	2022-08-10 14:29:26.459751059 +0000
+++ /dev/fd/62	2022-08-10 14:29:26.463751092 +0000
@@ -2,8 +2,6 @@
 unsigned char a = (unsigned char)1U;
 unsigned int main() {
     unsigned int var0;
-    unsigned char val1;
     var0 = 0U;
-    val1 = a;
-    return (unsigned int)val1;
+    return (unsigned int)a;
 }

inttoptr.bc

--- /dev/fd/63	2022-08-10 14:29:26.587752132 +0000
+++ /dev/fd/62	2022-08-10 14:29:26.587752132 +0000
@@ -3,18 +3,12 @@
 unsigned int main() {
     unsigned int var0;
     void *var1;
-    unsigned long val2;
-    void *val3;
-    unsigned int val4;
     var0 = 0U;
-    val2 = a;
-    var1 = (void *)val2;
-    val3 = var1;
-    if (val3 == (void *)0U) {
+    var1 = (void *)a;
+    if (var1 == (void *)0U) {
         var0 = 0U;
     } else {
         var0 = 42U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

assert.bc

--- /dev/fd/63	2022-08-10 14:29:26.779753742 +0000
+++ /dev/fd/62	2022-08-10 14:29:26.779753742 +0000
@@ -8,24 +8,17 @@
 unsigned char _str_3[7] = "a % 15\000";
 unsigned int main() {
     unsigned int var0;
-    unsigned long val1;
-    unsigned long val2;
-    unsigned long val3;
     var0 = 0U;
-    val1 = a;
-    if (val1 % 3UL == 0UL) {
+    if (a % 3UL == 0UL) {
         __assert_fail("a % 3", "assert.c", 6U, "int main(void)");
-    } else {
-        val2 = a;
-        if (val2 % 7UL == 0UL) {
-            __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
-        } else {
-            val3 = a;
-            if (val3 % 15UL == 0UL) {
-                __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
-            } else {
-                return 0U;
-            }
-        }
+    }
+    if (a % 3UL != 0UL && a % 7UL == 0UL) {
+        __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
+    }
+    if (a % 3UL != 0UL && a % 7UL != 0UL && a % 15UL == 0UL) {
+        __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
+    }
+    if (a % 3UL != 0UL && a % 7UL != 0UL && a % 15UL != 0UL) {
+        return 0U;
     }
 }

loop.bc

--- /dev/fd/63	2022-08-10 14:29:27.179757095 +0000
+++ /dev/fd/62	2022-08-10 14:29:27.179757095 +0000
@@ -6,26 +6,17 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if (val2 != 10U) {
-            val3 = var1;
-            printf("Variable at %d is ", val3);
-            val4 = var1;
-            if (val4 % 2U != 0U) {
+    while (var1 != 10U)
+        {
+            printf("Variable at %d is ", var1);
+            if (var1 % 2U != 0U) {
                 printf("odd.\n");
             } else {
                 printf("even.\n");
             }
-            val5 = var1;
-            var1 = val5 + 1U;
+            var1 = var1 + 1U;
         }
-    } while (val2 != 10U);
     return 0U;
 }

switch.bc

--- /dev/fd/63	2022-08-10 14:29:27.487759678 +0000
+++ /dev/fd/62	2022-08-10 14:29:27.487759678 +0000
@@ -3,12 +3,9 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     var1 = 0U;
-    val2 = a;
-    switch (val2) {
+    switch (a) {
       default:
         {
             var1 = 255U;
@@ -30,6 +27,5 @@
         }
         break;
     }
-    val3 = var1;
-    return val3;
+    return var1;
 }

template_parameter_pack.bc

--- /dev/fd/63	2022-08-10 14:29:27.711761556 +0000
+++ /dev/fd/62	2022-08-10 14:29:27.711761556 +0000
@@ -17,71 +17,43 @@
     unsigned int var2;
     unsigned int var3;
     unsigned int var4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int call10;
+    unsigned int call5;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
     var4 = arg4;
-    val5 = var0;
-    val6 = var1;
-    val7 = var2;
-    val8 = var3;
-    val9 = var4;
-    call10 = _Z3sumIiJiiiEET_S0_DpT0_(val6, val7, val8, val9);
-    return val5 + call10;
+    call5 = _Z3sumIiJiiiEET_S0_DpT0_(var1, var2, var3, var4);
+    return var0 + call5;
 }
 unsigned int _Z3sumIiJiiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2, unsigned int arg3) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int call8;
+    unsigned int call4;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
-    val4 = var0;
-    val5 = var1;
-    val6 = var2;
-    val7 = var3;
-    call8 = _Z3sumIiJiiEET_S0_DpT0_(val5, val6, val7);
-    return val4 + call8;
+    call4 = _Z3sumIiJiiEET_S0_DpT0_(var1, var2, var3);
+    return var0 + call4;
 }
 unsigned int _Z3sumIiJiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int call6;
+    unsigned int call3;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
-    val3 = var0;
-    val4 = var1;
-    val5 = var2;
-    call6 = _Z3sumIiET_S0_S0_(val4, val5);
-    return val3 + call6;
+    call3 = _Z3sumIiET_S0_S0_(var1, var2);
+    return var0 + call3;
 }
 unsigned int _Z3sumIiET_S0_S0_(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }

byval_tail_nogep.ll

byval_tail_gep.ll

github-actions[bot] avatar Aug 10 '22 14:08 github-actions[bot]

See the diff generated by this PR for the tests here: https://github.com/lifting-bits/rellic/actions/runs/2833846672

fizzbuzz.bc

--- /dev/fd/63	2022-08-10 15:51:38.768657296 +0000
+++ /dev/fd/62	2022-08-10 15:51:38.768657296 +0000
@@ -7,44 +7,24 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if ((int)val2 < 30) {
-            val3 = var1;
-            if ((int)val3 % 3 == 0U) {
-                val4 = var1;
-                if ((int)val4 % 5 == 0U) {
-                    printf("fizzbuzz\n");
-                }
-            }
-            if ((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) {
-                val5 = var1;
-                if ((int)val5 % 3 != 0U) {
-                    val6 = var1;
-                    if ((int)val6 % 5 != 0U) {
-                        val7 = var1;
-                        printf("%d\n", val7);
+    while ((int)var1 < 30)
+        {
+            if (!((int)var1 % 3 != 0U || (int)var1 % 5 == 0U) || (int)var1 % 3 != 0U) {
+                if ((int)var1 % 3 != 0U) {
+                    if ((int)var1 % 5 != 0U) {
+                        printf("%d\n", var1);
                     } else {
                         printf("buzz\n");
                     }
                 } else {
                     printf("fizz\n");
                 }
+            } else {
+                printf("fizzbuzz\n");
             }
-            val8 = var1;
-            var1 = val8 + 1U;
+            var1 = var1 + 1U;
         }
-    } while ((int)val2 < 30);
-    val9 = var0;
-    return val9;
+    return var0;
 }

typedefs_of_typedefs.bc

--- /dev/fd/63	2022-08-10 15:51:39.732671732 +0000
+++ /dev/fd/62	2022-08-10 15:51:39.732671732 +0000
@@ -12,44 +12,28 @@
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var5;
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var6;
     void *var7;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val8;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val9;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val10;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val11;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val12;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    unsigned long val18;
-    unsigned long val19;
-    unsigned long val20;
-    unsigned long val21;
+    unsigned int val8;
+    unsigned int val9;
+    unsigned long val10;
+    unsigned long val11;
+    unsigned long val12;
+    unsigned long val13;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){1UL, 2UL};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){4UL, 3UL};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    printf("a=[%d %d]\n", val15, val17);
-    val18 = *array;
-    val19 = array[1UL];
-    val20 = array[2UL];
-    val21 = array[3UL];
-    printf("array=[%lld %lld %lld %lld]\n", val18, val19, val20, val21);
+    val8 = *((unsigned int *)var7);
+    val9 = ((unsigned int *)var7)[1UL];
+    printf("a=[%d %d]\n", val8, val9);
+    val10 = *array;
+    val11 = array[1UL];
+    val12 = array[2UL];
+    val13 = array[3UL];
+    printf("array=[%lld %lld %lld %lld]\n", val10, val11, val12, val13);
     return 0U;
 }

switch_loop.bc

--- /dev/fd/63	2022-08-10 15:51:39.856673588 +0000
+++ /dev/fd/62	2022-08-10 15:51:39.856673588 +0000
@@ -4,36 +4,26 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        var1 = val2 + 1U;
-        val3 = var1;
-        if (!(val3 != 1U && val3 != 2U && val3 != 3U)) {
-            if (val3 == 3U) {
-                val6 = var1;
-                printf("%d\n", val6);
+    while (1U)
+        {
+            var1 = var1 + 1U;
+            if (var1 != 1U && var1 != 2U && var1 != 3U) {
                 break;
             }
-            if (val3 == 2U) {
-                val5 = var1;
-                printf("%d\n", val5);
+            if (var1 == 3U) {
+                printf("%d\n", var1);
+                break;
+            }
+            if (var1 == 2U) {
+                printf("%d\n", var1);
             }
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
+            if (var1 == 1U) {
+                printf("%d\n", var1);
             }
         }
-    } while (!(val3 != 1U && val3 != 2U && val3 != 3U));
-    if (val3 == 3U || !(val3 == 2U || val3 == 3U || val3 == 1U)) {
-        val7 = var0;
-        return val7;
+    if (var1 == 3U || !(var1 == 2U || var1 == 3U || var1 == 1U)) {
+        return var0;
     }
 }

func_cond_zero_arg.bc

--- /dev/fd/63	2022-08-10 15:51:40.384681495 +0000
+++ /dev/fd/62	2022-08-10 15:51:40.384681495 +0000
@@ -8,7 +8,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int call1;
-    unsigned int val2;
     var0 = 0U;
     call1 = f();
     if (call1 == 0U) {
@@ -16,6 +15,5 @@
     } else {
         var0 = 1U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

conflicting_names.bc

--- /dev/fd/63	2022-08-10 15:51:40.588684550 +0000
+++ /dev/fd/62	2022-08-10 15:51:40.588684550 +0000
@@ -4,17 +4,13 @@
 unsigned int atoi(void *arg0);
 unsigned int foo() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 0U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int bar() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 1U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int main() {
     unsigned int var0;
@@ -24,35 +20,23 @@
     unsigned int var4;
     unsigned int var5;
     unsigned int var6;
-    unsigned int val7;
-    void *val8;
-    void *val9;
-    unsigned int call10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
+    void *val7;
+    unsigned int call8;
     var0 = 0U;
     var1 = 0U;
     var2 = (void *)0U;
     var3 = 0U;
-    val7 = var1;
-    if (1 >= (int)val7) {
+    if (1 >= (int)var1) {
         var6 = 1U;
-        val13 = var6;
-        var3 = val13;
+        var3 = var6;
     } else {
-        val8 = var2;
-        val9 = ((void **)val8)[1UL];
-        call10 = atoi(val9);
-        var4 = call10;
-        val11 = var4;
-        if ((int)val11 > 10) {
+        val7 = ((void **)var2)[1UL];
+        call8 = atoi(val7);
+        var4 = call8;
+        if ((int)var4 > 10) {
             var5 = 99U;
-            val12 = var5;
-            var3 = val12;
+            var3 = var5;
         }
     }
-    val14 = var3;
-    return val14;
+    return var3;
 }

struct.bc

--- /dev/fd/63	2022-08-10 15:51:40.848688443 +0000
+++ /dev/fd/62	2022-08-10 15:51:40.848688443 +0000
@@ -9,7 +9,6 @@
     unsigned int val1;
     unsigned int val2;
     unsigned int val3;
-    unsigned int val4;
     var0 = 0U;
     val1 = a.field0;
     if (val1 == 0U) {
@@ -19,6 +18,5 @@
         val2 = a.field0;
         var0 = val2;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

issue_183_literal_structs.bc

issue_127_uint128_t_lit.bc

struct_swap.bc

--- /dev/fd/63	2022-08-10 15:51:41.300695211 +0000
+++ /dev/fd/62	2022-08-10 15:51:41.300695211 +0000
@@ -10,14 +10,12 @@
     unsigned int val2;
     unsigned int val3;
     unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     val2 = a.field0;
     var1 = val2;
     val3 = a.field1;
     a.field0 = val3;
-    val4 = var1;
-    a.field1 = val4;
-    val5 = a.field0;
-    return val5;
+    a.field1 = var1;
+    val4 = a.field0;
+    return val4;
 }

init_list.bc

ret0.bc

trunc.bc

short.bc

--- /dev/fd/63	2022-08-10 15:51:41.824703058 +0000
+++ /dev/fd/62	2022-08-10 15:51:41.828703118 +0000
@@ -4,11 +4,9 @@
     unsigned int var0;
     unsigned short var1;
     unsigned short val2;
-    unsigned short val3;
     var0 = 0U;
     a = 13U;
     val2 = a;
     var1 = val2;
-    val3 = var1;
-    return (unsigned int)val3;
+    return (unsigned int)var1;
 }

cast.bc

nullptr.bc

--- /dev/fd/63	2022-08-10 15:51:42.076706831 +0000
+++ /dev/fd/62	2022-08-10 15:51:42.076706831 +0000
@@ -3,7 +3,6 @@
 unsigned int main() {
     unsigned int var0;
     void *val1;
-    unsigned int val2;
     var0 = 0U;
     val1 = ptr;
     if (val1 != (void *)0U) {
@@ -11,6 +10,5 @@
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

nested_struct.bc

array_swap.bc

--- /dev/fd/63	2022-08-10 15:51:42.412711863 +0000
+++ /dev/fd/62	2022-08-10 15:51:42.412711863 +0000
@@ -6,14 +6,12 @@
     unsigned int val2;
     unsigned int val3;
     unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     val2 = *a;
     var1 = val2;
     val3 = a[1UL];
     *a = val3;
-    val4 = var1;
-    a[1UL] = val4;
-    val5 = *a;
-    return val5;
+    a[1UL] = var1;
+    val4 = *a;
+    return val4;
 }

bitmask.bc

--- /dev/fd/63	2022-08-10 15:51:42.536713720 +0000
+++ /dev/fd/62	2022-08-10 15:51:42.536713720 +0000
@@ -3,7 +3,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned long val1;
-    unsigned int val2;
     var0 = 0U;
     val1 = a;
     if ((val1 & 4080UL) >> 4UL != 188UL) {
@@ -11,6 +10,5 @@
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

binops.bc

--- /dev/fd/63	2022-08-10 15:51:42.744716836 +0000
+++ /dev/fd/62	2022-08-10 15:51:42.744716836 +0000
@@ -4,49 +4,23 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
-    unsigned int val15;
     var0 = arg0;
-    val3 = var0;
-    var1 = val3 % 4U;
+    var1 = var0 % 4U;
     var2 = 0U;
-    val4 = var1;
-    if (val4 != 0U) {
-        val7 = var1;
-        if (val7 != 1U) {
-            val10 = var1;
-            if (val10 != 2U) {
-                val13 = var0;
-                val14 = var0;
-                var2 = (val13 + 3131756735U) * (5U & val14);
+    if (var1 != 0U) {
+        if (var1 != 1U) {
+            if (var1 != 2U) {
+                var2 = (var0 + 3131756735U) * (5U & var0);
             } else {
-                val11 = var0;
-                val12 = var0;
-                var2 = (val11 ^ 3131756735U) * (4U | val12);
+                var2 = (var0 ^ 3131756735U) * (4U | var0);
             }
         } else {
-            val8 = var0;
-            val9 = var0;
-            var2 = (val8 & 3131756735U) * (3U + val9);
+            var2 = (var0 & 3131756735U) * (3U + var0);
         }
     } else {
-        val5 = var0;
-        val6 = var0;
-        var2 = (val5 | 3131756735U) * (2U ^ val6);
+        var2 = (var0 | 3131756735U) * (2U ^ var0);
     }
-    val15 = var2;
-    return val15;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

float.bc

--- /dev/fd/63	2022-08-10 15:51:43.140722776 +0000
+++ /dev/fd/62	2022-08-10 15:51:43.140722776 +0000
@@ -4,21 +4,15 @@
     unsigned int var0;
     double var1;
     double var2;
-    double val3;
-    float val4;
-    double val5;
-    unsigned int val6;
+    float val3;
     var0 = 0U;
     var1 = 3.1428571428571428;
-    val3 = var1;
-    val4 = f;
-    var2 = val3 - (double)val4;
-    val5 = var2;
-    if (val5 >= 0.01) {
+    val3 = f;
+    var2 = var1 - (double)val3;
+    if (var2 >= 0.01) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val6 = var0;
-    return val6;
+    return var0;
 }

reg_test_structure_fields.bc

zeroinit.bc

--- /dev/fd/63	2022-08-10 15:51:43.472727755 +0000
+++ /dev/fd/62	2022-08-10 15:51:43.472727755 +0000
@@ -18,7 +18,6 @@
     unsigned int var0;
     unsigned int val1;
     unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
     val1 = r1.field1.field0;
     if (val1 == 0U) {
@@ -31,6 +30,5 @@
     } else {
         var0 = 1U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

funcptr.bc

--- /dev/fd/63	2022-08-10 15:51:43.768732194 +0000
+++ /dev/fd/62	2022-08-10 15:51:43.768732194 +0000
@@ -5,31 +5,22 @@
 unsigned int add(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }
 unsigned int sub(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 - val3;
+    return var0 - var1;
 }
 unsigned int main() {
     unsigned int var0;
     void *var1;
     unsigned int val2;
-    void *val3;
-    unsigned int call4;
+    unsigned int call3;
     var0 = 0U;
     val2 = x;
     if (val2 == 0U) {
@@ -37,7 +28,6 @@
     } else {
         var1 = &add;
     }
-    val3 = var1;
-    call4 = ((unsigned int (*)(unsigned int, unsigned int))val3)(2U, 2U);
-    return call4;
+    call3 = ((unsigned int (*)(unsigned int, unsigned int))var1)(2U, 2U);
+    return call3;
 }

goto_loop.bc

--- /dev/fd/63	2022-08-10 15:51:43.972735254 +0000
+++ /dev/fd/62	2022-08-10 15:51:43.972735254 +0000
@@ -4,41 +4,25 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
     while (1U)
         {
-            val2 = var1;
-            var1 = val2 + 1U;
-            val3 = var1;
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
-            } else {
-                val5 = var1;
-                if (val5 != 2U) {
-                    break;
-                } else {
-                    val6 = var1;
-                    printf("%d\n", val6);
-                }
+            var1 = var1 + 1U;
+            if (var1 == 1U) {
+                printf("%d\n", var1);
+            }
+            if (var1 != 1U && var1 != 2U) {
+                break;
+            }
+            if (var1 != 1U && var1 == 2U) {
+                printf("%d\n", var1);
             }
         }
-    if (val3 != 1U && val5 != 2U) {
-        val7 = var1;
-        if (val7 == 3U) {
-            val8 = var1;
-            printf("%d\n", val8);
+    if (var1 != 1U && var1 != 2U) {
+        if (var1 == 3U) {
+            printf("%d\n", var1);
         }
-        val9 = var0;
-        return val9;
+        return var0;
     }
 }

branch.bc

--- /dev/fd/63	2022-08-10 15:51:44.428742093 +0000
+++ /dev/fd/62	2022-08-10 15:51:44.428742093 +0000
@@ -13,18 +13,15 @@
     unsigned long var2;
     unsigned int val3;
     unsigned int val4;
-    unsigned long val5;
-    unsigned int val6;
-    unsigned long val7;
+    unsigned int val5;
     var0 = 0U;
     var1 = (unsigned long)(&a);
     var2 = (unsigned long)(&c);
     val3 = c;
     if (val3 == 0U) {
-        val6 = c;
-        printf("Global variable 'c' of value %u is at ", val6);
-        val7 = var2;
-        if (val7 % 2UL != 0UL) {
+        val5 = c;
+        printf("Global variable 'c' of value %u is at ", val5);
+        if (var2 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");
@@ -32,8 +29,7 @@
     } else {
         val4 = a;
         printf("Global variable 'a' of value %u is at ", val4);
-        val5 = var1;
-        if (val5 % 2UL != 0UL) {
+        if (var1 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");

bitops.bc

--- /dev/fd/63	2022-08-10 15:51:44.828748092 +0000
+++ /dev/fd/62	2022-08-10 15:51:44.828748092 +0000
@@ -10,28 +10,20 @@
     unsigned int val5;
     unsigned int val6;
     unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
     var0 = 0U;
     var1 = 0U;
     val2 = a;
     val3 = b;
     if (((int)val2 >> val3 & 1U) != 0U) {
-        val4 = var1;
-        var1 = val4 + 1U;
+        var1 = var1 + 1U;
     }
-    val5 = a;
-    val6 = b;
-    if ((val5 >> val6 ^ 1U) != 0U) {
-        val7 = var1;
-        var1 = val7 + 2U;
+    val4 = a;
+    val5 = b;
+    if ((val4 >> val5 ^ 1U) != 0U) {
+        var1 = var1 + 2U;
     }
-    val8 = a;
-    val9 = b;
-    val10 = var1;
-    var1 = val10 + 3U;
-    val11 = var1;
-    return val11;
+    val6 = a;
+    val7 = b;
+    var1 = var1 + 3U;
+    return var1;
 }

vectors.bc

--- /dev/fd/63	2022-08-10 15:51:45.132752651 +0000
+++ /dev/fd/62	2022-08-10 15:51:45.132752651 +0000
@@ -10,43 +10,23 @@
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var5;
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var6;
     void *var7;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val8;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val9;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val10;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val11;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val12;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    void *val18;
-    unsigned int val19;
-    void *val20;
-    unsigned int val21;
+    unsigned int val8;
+    unsigned int val9;
+    unsigned int val10;
+    unsigned int val11;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){1U, 2U, 3U, 4U};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){4U, 3U, 2U, 1U};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    val18 = var7;
-    val19 = ((unsigned int *)val18)[2UL];
-    val20 = var7;
-    val21 = ((unsigned int *)val20)[3UL];
-    printf("a=[%d %d %d %d]\n", val15, val17, val19, val21);
+    val8 = *((unsigned int *)var7);
+    val9 = ((unsigned int *)var7)[1UL];
+    val10 = ((unsigned int *)var7)[2UL];
+    val11 = ((unsigned int *)var7)[3UL];
+    printf("a=[%d %d %d %d]\n", val8, val9, val10, val11);
     return 0U;
 }

issue_4.bc

--- /dev/fd/63	2022-08-10 15:51:45.256754511 +0000
+++ /dev/fd/62	2022-08-10 15:51:45.256754511 +0000
@@ -5,32 +5,17 @@
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = arg0;
     var1 = arg1;
     var2 = 0U;
     var3 = 0U;
-    do {
-        val4 = var3;
-        if (val4 != 42U) {
-            val5 = var0;
-            val6 = var2;
-            var2 = val6 + val5;
-            val7 = var1;
-            val8 = var2;
-            var2 = val8 % val7;
-            val9 = var3;
-            var3 = val9 + 1U;
+    while (var3 != 42U)
+        {
+            var2 = var2 + var0;
+            var2 = var2 % var1;
+            var3 = var3 + 1U;
         }
-    } while (val4 != 42U);
-    val10 = var2;
-    return val10;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

conflicting_global.bc

--- /dev/fd/63	2022-08-10 15:51:45.496758111 +0000
+++ /dev/fd/62	2022-08-10 15:51:45.496758111 +0000
@@ -5,11 +5,9 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
-    unsigned int val2;
     var0 = 4U;
-    val1 = var0;
+    printf("%d\n", var0);
+    val1 = a;
     printf("%d\n", val1);
-    val2 = a;
-    printf("%d\n", val2);
     return 0U;
 }

issue_123_uint128_t.bc

--- /dev/fd/63	2022-08-10 15:51:45.624760030 +0000
+++ /dev/fd/62	2022-08-10 15:51:45.624760030 +0000
@@ -4,13 +4,11 @@
     unsigned int var0;
     unsigned __int128 var1;
     unsigned long val2;
-    unsigned __int128 val3;
-    unsigned long val4;
+    unsigned long val3;
     var0 = 0U;
     val2 = x;
     var1 = val2;
-    val3 = var1;
-    x = val3;
-    val4 = x;
-    return (unsigned int)(val4 & 255UL);
+    x = var1;
+    val3 = x;
+    return (unsigned int)(val3 & 255UL);
 }

fizzbuzz_stateful.bc

--- /dev/fd/63	2022-08-10 15:51:45.748761890 +0000
+++ /dev/fd/62	2022-08-10 15:51:45.748761890 +0000
@@ -14,7 +14,6 @@
     unsigned int val4;
     unsigned int val5;
     unsigned int val6;
-    unsigned int val7;
     val1 = i;
     var0 = val1;
     val2 = i;
@@ -34,15 +33,13 @@
             printf("%d", val6);
         }
     }
-    val7 = var0;
-    i = val7;
+    i = var0;
     return;
 }
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
     unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     i = 1U;
     do {
@@ -54,6 +51,5 @@
             i = val2 + 1U;
         }
     } while ((int)val1 < 16);
-    val3 = var0;
-    return val3;
+    return var0;
 }

issue_94_strncmp.bc

bool.bc

--- /dev/fd/63	2022-08-10 15:51:46.524773529 +0000
+++ /dev/fd/62	2022-08-10 15:51:46.524773529 +0000
@@ -5,7 +5,6 @@
     unsigned int var0;
     unsigned long val1;
     unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
     val1 = a;
     val2 = b;
@@ -14,6 +13,5 @@
     } else {
         var0 = 0U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

global_using_function_decl.bc

fcmp.bc

--- /dev/fd/63	2022-08-10 15:51:46.848778388 +0000
+++ /dev/fd/62	2022-08-10 15:51:46.848778388 +0000
@@ -17,56 +17,18 @@
     unsigned int var9;
     float call10;
     float call11;
-    float val12;
-    float val13;
-    float val14;
-    float val15;
-    float val16;
-    float val17;
-    float val18;
-    float val19;
-    float val20;
-    float val21;
-    float val22;
-    float val23;
-    float val24;
-    unsigned int val25;
-    unsigned int val26;
-    unsigned int val27;
-    unsigned int val28;
-    unsigned int val29;
-    unsigned int val30;
     var0 = __builtin_nan("");
     call10 = atof("3");
     var1 = call10;
     call11 = atof("2");
     var2 = call11;
-    val12 = var1;
-    var3 = -val12;
-    val13 = var3;
-    val14 = var0;
-    var4 = (val13 > val14);
-    val15 = var3;
-    val16 = var0;
-    var5 = (val15 >= val16);
-    val17 = var1;
-    val18 = var2;
-    var6 = (val17 > val18);
-    val19 = var1;
-    val20 = var2;
-    var7 = (val19 >= val20);
-    val21 = var1;
-    val22 = var0;
-    var8 = __builtin_isunordered(val21, val22);
-    val23 = var1;
-    val24 = var2;
-    var9 = __builtin_isunordered(val23, val24);
-    val25 = var4;
-    val26 = var5;
-    val27 = var6;
-    val28 = var7;
-    val29 = var8;
-    val30 = var9;
-    printf("%d %d %d %d %d %d\n", val25, val26, val27, val28, val29, val30);
+    var3 = -var1;
+    var4 = (var3 > var0);
+    var5 = (var3 >= var0);
+    var6 = (var1 > var2);
+    var7 = (var1 >= var2);
+    var8 = __builtin_isunordered(var1, var0);
+    var9 = __builtin_isunordered(var1, var2);
+    printf("%d %d %d %d %d %d\n", var4, var5, var6, var7, var8, var9);
     return 0U;
 }

byval_struct.bc

--- /dev/fd/63	2022-08-10 15:51:46.976780308 +0000
+++ /dev/fd/62	2022-08-10 15:51:46.976780308 +0000
@@ -31,7 +31,6 @@
     unsigned int call5;
     unsigned long call6;
     unsigned long val7;
-    unsigned long val8;
     call2 = atoi("1");
     var0.field0 = (long)call2;
     call3 = atoi("2");
@@ -43,7 +42,6 @@
     call6 = get_3x(var0);
     var1 = call6;
     val7 = var0.field0;
-    val8 = var1;
-    printf("%lld %lld\n", val7, val8);
+    printf("%lld %lld\n", val7, var1);
     return 0U;
 }

nested_while.bc

--- /dev/fd/63	2022-08-10 15:51:47.100782167 +0000
+++ /dev/fd/62	2022-08-10 15:51:47.100782167 +0000
@@ -8,40 +8,24 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int call2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = 0U;
     call2 = atoi("5");
     var1 = call2;
-    val3 = var1;
-    if ((int)val3 > 10) {
-        do {
-            val4 = var1;
-            if ((int)val4 < 20) {
-                val5 = var1;
-                var1 = val5 + 1U;
-                val6 = var1;
-                printf("loop1 x: %d\n", val6);
+    if ((int)var1 > 10) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop1 x: %d\n", var1);
             }
-        } while ((int)val4 < 20);
     }
-    if ((int)val3 <= 10 || (int)val4 >= 20) {
-        do {
-            val7 = var1;
-            if ((int)val7 < 20) {
-                val8 = var1;
-                var1 = val8 + 1U;
-                val9 = var1;
-                printf("loop2 x: %d\n", val9);
+    if ((int)var1 <= 10 || (int)var1 >= 20) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop2 x: %d\n", var1);
             }
-        } while ((int)val7 < 20);
-        val10 = var0;
-        return val10;
+    }
+    if (((int)var1 <= 10 || (int)var1 >= 20) && (int)var1 >= 20) {
+        return var0;
     }
 }

func_cond_two_arg.bc

--- /dev/fd/63	2022-08-10 15:51:47.616789906 +0000
+++ /dev/fd/62	2022-08-10 15:51:47.616789906 +0000
@@ -5,20 +5,15 @@
 unsigned int f(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return (unsigned int)((int)val2 < (int)val3);
+    return (unsigned int)((int)var0 < (int)var1);
 }
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
     unsigned int val2;
     unsigned int call3;
-    unsigned int val4;
     var0 = 0U;
     val1 = x;
     val2 = y;
@@ -28,6 +23,5 @@
     } else {
         var0 = 1U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

zext.bc

inttoptr.bc

--- /dev/fd/63	2022-08-10 15:51:47.952794946 +0000
+++ /dev/fd/62	2022-08-10 15:51:47.952794946 +0000
@@ -4,17 +4,13 @@
     unsigned int var0;
     void *var1;
     unsigned long val2;
-    void *val3;
-    unsigned int val4;
     var0 = 0U;
     val2 = a;
     var1 = (void *)val2;
-    val3 = var1;
-    if (val3 == (void *)0U) {
+    if (var1 == (void *)0U) {
         var0 = 0U;
     } else {
         var0 = 42U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

assert.bc

--- /dev/fd/63	2022-08-10 15:51:48.164798125 +0000
+++ /dev/fd/62	2022-08-10 15:51:48.164798125 +0000
@@ -17,15 +17,17 @@
         __assert_fail("a % 3", "assert.c", 6U, "int main(void)");
     } else {
         val2 = a;
-        if (val2 % 7UL == 0UL) {
-            __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
-        } else {
-            val3 = a;
-            if (val3 % 15UL == 0UL) {
-                __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
-            } else {
-                return 0U;
-            }
-        }
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL == 0UL) {
+        __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL) {
+        val3 = a;
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL && val3 % 15UL == 0UL) {
+        __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL && val3 % 15UL != 0UL) {
+        return 0U;
     }
 }

loop.bc

--- /dev/fd/63	2022-08-10 15:51:48.624805024 +0000
+++ /dev/fd/62	2022-08-10 15:51:48.624805024 +0000
@@ -6,26 +6,17 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if (val2 != 10U) {
-            val3 = var1;
-            printf("Variable at %d is ", val3);
-            val4 = var1;
-            if (val4 % 2U != 0U) {
+    while (var1 != 10U)
+        {
+            printf("Variable at %d is ", var1);
+            if (var1 % 2U != 0U) {
                 printf("odd.\n");
             } else {
                 printf("even.\n");
             }
-            val5 = var1;
-            var1 = val5 + 1U;
+            var1 = var1 + 1U;
         }
-    } while (val2 != 10U);
     return 0U;
 }

switch.bc

--- /dev/fd/63	2022-08-10 15:51:48.956810004 +0000
+++ /dev/fd/62	2022-08-10 15:51:48.956810004 +0000
@@ -4,7 +4,6 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     var1 = 0U;
     val2 = a;
@@ -30,6 +29,5 @@
         }
         break;
     }
-    val3 = var1;
-    return val3;
+    return var1;
 }

template_parameter_pack.bc

--- /dev/fd/63	2022-08-10 15:51:49.192813543 +0000
+++ /dev/fd/62	2022-08-10 15:51:49.192813543 +0000
@@ -17,71 +17,43 @@
     unsigned int var2;
     unsigned int var3;
     unsigned int var4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int call10;
+    unsigned int call5;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
     var4 = arg4;
-    val5 = var0;
-    val6 = var1;
-    val7 = var2;
-    val8 = var3;
-    val9 = var4;
-    call10 = _Z3sumIiJiiiEET_S0_DpT0_(val6, val7, val8, val9);
-    return val5 + call10;
+    call5 = _Z3sumIiJiiiEET_S0_DpT0_(var1, var2, var3, var4);
+    return var0 + call5;
 }
 unsigned int _Z3sumIiJiiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2, unsigned int arg3) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int call8;
+    unsigned int call4;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
-    val4 = var0;
-    val5 = var1;
-    val6 = var2;
-    val7 = var3;
-    call8 = _Z3sumIiJiiEET_S0_DpT0_(val5, val6, val7);
-    return val4 + call8;
+    call4 = _Z3sumIiJiiEET_S0_DpT0_(var1, var2, var3);
+    return var0 + call4;
 }
 unsigned int _Z3sumIiJiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int call6;
+    unsigned int call3;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
-    val3 = var0;
-    val4 = var1;
-    val5 = var2;
-    call6 = _Z3sumIiET_S0_S0_(val4, val5);
-    return val3 + call6;
+    call3 = _Z3sumIiET_S0_S0_(var1, var2);
+    return var0 + call3;
 }
 unsigned int _Z3sumIiET_S0_S0_(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }

byval_tail_nogep.ll

byval_tail_gep.ll

github-actions[bot] avatar Aug 10 '22 15:08 github-actions[bot]

See the diff generated by this PR for the tests here: https://github.com/lifting-bits/rellic/actions/runs/2845618424

fizzbuzz.bc

--- /dev/fd/63	2022-08-12 09:11:53.878757777 +0000
+++ /dev/fd/62	2022-08-12 09:11:53.878757777 +0000
@@ -7,46 +7,24 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if ((int)val2 < 30) {
-            val3 = var1;
-            if ((int)val3 % 3 == 0U) {
-                val4 = var1;
-                if ((int)val4 % 5 == 0U) {
-                    printf("fizzbuzz\n");
-                }
-            }
-            if ((int)val3 % 3 != 0U || !((int)val3 % 3 != 0U || (int)val4 % 5 == 0U)) {
-                val5 = var1;
-                if (((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) && (int)val5 % 3 != 0U) {
-                    val6 = var1;
-                    if ((int)val6 % 5 != 0U) {
-                        val7 = var1;
-                        printf("%d\n", val7);
+    while ((int)var1 < 30)
+        {
+            if ((int)var1 % 3 != 0U || !((int)var1 % 5 == 0U || (int)var1 % 3 != 0U)) {
+                if ((int)var1 % 3 != 0U) {
+                    if ((int)var1 % 5 != 0U) {
+                        printf("%d\n", var1);
                     } else {
                         printf("buzz\n");
                     }
                 } else {
-                    if (((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) && (int)val5 % 3 == 0U) {
-                        printf("fizz\n");
-                    }
+                    printf("fizz\n");
                 }
+            } else {
+                printf("fizzbuzz\n");
             }
-            val8 = var1;
-            var1 = val8 + 1U;
+            var1 = var1 + 1U;
         }
-    } while ((int)val2 < 30);
-    val9 = var0;
-    return val9;
+    return var0;
 }

typedefs_of_typedefs.bc

--- /dev/fd/63	2022-08-12 09:11:54.554767812 +0000
+++ /dev/fd/62	2022-08-12 09:11:54.554767812 +0000
@@ -12,44 +12,28 @@
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var5;
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var6;
     void *var7;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val8;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val9;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val10;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val11;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val12;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    unsigned long val18;
-    unsigned long val19;
-    unsigned long val20;
-    unsigned long val21;
+    unsigned int val8;
+    unsigned int val9;
+    unsigned long val10;
+    unsigned long val11;
+    unsigned long val12;
+    unsigned long val13;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){1UL, 2UL};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){4UL, 3UL};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    printf("a=[%d %d]\n", val15, val17);
-    val18 = *array;
-    val19 = array[1UL];
-    val20 = array[2UL];
-    val21 = array[3UL];
-    printf("array=[%lld %lld %lld %lld]\n", val18, val19, val20, val21);
+    val8 = *((unsigned int *)var7);
+    val9 = ((unsigned int *)var7)[1UL];
+    printf("a=[%d %d]\n", val8, val9);
+    val10 = *array;
+    val11 = array[1UL];
+    val12 = array[2UL];
+    val13 = array[3UL];
+    printf("array=[%lld %lld %lld %lld]\n", val10, val11, val12, val13);
     return 0U;
 }

switch_loop.bc

--- /dev/fd/63	2022-08-12 09:11:54.670769534 +0000
+++ /dev/fd/62	2022-08-12 09:11:54.670769534 +0000
@@ -4,36 +4,26 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        var1 = val2 + 1U;
-        val3 = var1;
-        if (!(val3 != 1U && val3 != 2U && val3 != 3U)) {
-            if (val3 == 3U) {
-                val6 = var1;
-                printf("%d\n", val6);
+    while (1U)
+        {
+            var1 = var1 + 1U;
+            if (var1 != 1U && var1 != 2U && var1 != 3U) {
                 break;
             }
-            if (val3 == 2U) {
-                val5 = var1;
-                printf("%d\n", val5);
+            if (var1 == 3U) {
+                printf("%d\n", var1);
+                break;
+            }
+            if (var1 == 2U) {
+                printf("%d\n", var1);
             }
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
+            if (var1 == 1U) {
+                printf("%d\n", var1);
             }
         }
-    } while (!(val3 != 1U && val3 != 2U && val3 != 3U));
-    if (val3 == 3U || !(val3 == 2U || val3 == 3U || val3 == 1U)) {
-        val7 = var0;
-        return val7;
+    if (var1 == 3U || !(var1 == 2U || var1 == 3U || var1 == 1U)) {
+        return var0;
     }
 }

func_cond_zero_arg.bc

--- /dev/fd/63	2022-08-12 09:11:55.114776124 +0000
+++ /dev/fd/62	2022-08-12 09:11:55.114776124 +0000
@@ -8,7 +8,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int call1;
-    unsigned int val2;
     var0 = 0U;
     call1 = f();
     if (call1 == 0U) {
@@ -16,6 +15,5 @@
     } else {
         var0 = 1U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

conflicting_names.bc

--- /dev/fd/63	2022-08-12 09:11:55.298778856 +0000
+++ /dev/fd/62	2022-08-12 09:11:55.298778856 +0000
@@ -4,17 +4,13 @@
 unsigned int atoi(void *arg0);
 unsigned int foo() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 0U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int bar() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 1U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int main() {
     unsigned int var0;
@@ -24,35 +20,23 @@
     unsigned int var4;
     unsigned int var5;
     unsigned int var6;
-    unsigned int val7;
-    void *val8;
-    void *val9;
-    unsigned int call10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
+    void *val7;
+    unsigned int call8;
     var0 = 0U;
     var1 = 0U;
     var2 = (void *)0U;
     var3 = 0U;
-    val7 = var1;
-    if (1 >= (int)val7) {
+    if (1 >= (int)var1) {
         var6 = 1U;
-        val13 = var6;
-        var3 = val13;
+        var3 = var6;
     } else {
-        val8 = var2;
-        val9 = ((void **)val8)[1UL];
-        call10 = atoi(val9);
-        var4 = call10;
-        val11 = var4;
-        if ((int)val11 > 10) {
+        val7 = ((void **)var2)[1UL];
+        call8 = atoi(val7);
+        var4 = call8;
+        if ((int)var4 > 10) {
             var5 = 99U;
-            val12 = var5;
-            var3 = val12;
+            var3 = var5;
         }
     }
-    val14 = var3;
-    return val14;
+    return var3;
 }

struct.bc

--- /dev/fd/63	2022-08-12 09:11:55.530782300 +0000
+++ /dev/fd/62	2022-08-12 09:11:55.530782300 +0000
@@ -9,7 +9,6 @@
     unsigned int val1;
     unsigned int val2;
     unsigned int val3;
-    unsigned int val4;
     var0 = 0U;
     val1 = a.field0;
     if (val1 == 0U) {
@@ -19,6 +18,5 @@
         val2 = a.field0;
         var0 = val2;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

issue_183_literal_structs.bc

issue_127_uint128_t_lit.bc

struct_swap.bc

--- /dev/fd/63	2022-08-12 09:11:55.950788534 +0000
+++ /dev/fd/62	2022-08-12 09:11:55.950788534 +0000
@@ -10,14 +10,12 @@
     unsigned int val2;
     unsigned int val3;
     unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     val2 = a.field0;
     var1 = val2;
     val3 = a.field1;
     a.field0 = val3;
-    val4 = var1;
-    a.field1 = val4;
-    val5 = a.field0;
-    return val5;
+    a.field1 = var1;
+    val4 = a.field0;
+    return val4;
 }

init_list.bc

ret0.bc

trunc.bc

short.bc

--- /dev/fd/63	2022-08-12 09:11:56.410795362 +0000
+++ /dev/fd/62	2022-08-12 09:11:56.410795362 +0000
@@ -4,11 +4,9 @@
     unsigned int var0;
     unsigned short var1;
     unsigned short val2;
-    unsigned short val3;
     var0 = 0U;
     a = 13U;
     val2 = a;
     var1 = val2;
-    val3 = var1;
-    return (unsigned int)val3;
+    return (unsigned int)var1;
 }

cast.bc

nullptr.bc

--- /dev/fd/63	2022-08-12 09:11:56.642798806 +0000
+++ /dev/fd/62	2022-08-12 09:11:56.642798806 +0000
@@ -3,7 +3,6 @@
 unsigned int main() {
     unsigned int var0;
     void *val1;
-    unsigned int val2;
     var0 = 0U;
     val1 = ptr;
     if (val1 != (void *)0U) {
@@ -11,6 +10,5 @@
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

nested_struct.bc

array_swap.bc

--- /dev/fd/63	2022-08-12 09:11:56.946802982 +0000
+++ /dev/fd/62	2022-08-12 09:11:56.946802982 +0000
@@ -6,14 +6,12 @@
     unsigned int val2;
     unsigned int val3;
     unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     val2 = *a;
     var1 = val2;
     val3 = a[1UL];
     *a = val3;
-    val4 = var1;
-    a[1UL] = val4;
-    val5 = *a;
-    return val5;
+    a[1UL] = var1;
+    val4 = *a;
+    return val4;
 }

bitmask.bc

--- /dev/fd/63	2022-08-12 09:11:57.062804571 +0000
+++ /dev/fd/62	2022-08-12 09:11:57.062804571 +0000
@@ -3,7 +3,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned long val1;
-    unsigned int val2;
     var0 = 0U;
     val1 = a;
     if ((val1 & 4080UL) >> 4UL != 188UL) {
@@ -11,6 +10,5 @@
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

binops.bc

--- /dev/fd/63	2022-08-12 09:11:57.246807091 +0000
+++ /dev/fd/62	2022-08-12 09:11:57.250807146 +0000
@@ -4,49 +4,23 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
-    unsigned int val15;
     var0 = arg0;
-    val3 = var0;
-    var1 = val3 % 4U;
+    var1 = var0 % 4U;
     var2 = 0U;
-    val4 = var1;
-    if (val4 != 0U) {
-        val7 = var1;
-        if (val7 != 1U) {
-            val10 = var1;
-            if (val10 != 2U) {
-                val13 = var0;
-                val14 = var0;
-                var2 = (val13 + 3131756735U) * (5U & val14);
+    if (var1 != 0U) {
+        if (var1 != 1U) {
+            if (var1 != 2U) {
+                var2 = (var0 + 3131756735U) * (5U & var0);
             } else {
-                val11 = var0;
-                val12 = var0;
-                var2 = (val11 ^ 3131756735U) * (4U | val12);
+                var2 = (var0 ^ 3131756735U) * (4U | var0);
             }
         } else {
-            val8 = var0;
-            val9 = var0;
-            var2 = (val8 & 3131756735U) * (3U + val9);
+            var2 = (var0 & 3131756735U) * (3U + var0);
         }
     } else {
-        val5 = var0;
-        val6 = var0;
-        var2 = (val5 | 3131756735U) * (2U ^ val6);
+        var2 = (var0 | 3131756735U) * (2U ^ var0);
     }
-    val15 = var2;
-    return val15;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

float.bc

--- /dev/fd/63	2022-08-12 09:11:57.586811748 +0000
+++ /dev/fd/62	2022-08-12 09:11:57.590811802 +0000
@@ -4,21 +4,15 @@
     unsigned int var0;
     double var1;
     double var2;
-    double val3;
-    float val4;
-    double val5;
-    unsigned int val6;
+    float val3;
     var0 = 0U;
     var1 = 3.1428571428571428;
-    val3 = var1;
-    val4 = f;
-    var2 = val3 - (double)val4;
-    val5 = var2;
-    if (val5 >= 0.01) {
+    val3 = f;
+    var2 = var1 - (double)val3;
+    if (var2 >= 0.01) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val6 = var0;
-    return val6;
+    return var0;
 }

reg_test_structure_fields.bc

zeroinit.bc

--- /dev/fd/63	2022-08-12 09:11:57.886815857 +0000
+++ /dev/fd/62	2022-08-12 09:11:57.886815857 +0000
@@ -18,7 +18,6 @@
     unsigned int var0;
     unsigned int val1;
     unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
     val1 = r1.field1.field0;
     if (val1 == 0U) {
@@ -31,6 +30,5 @@
     } else {
         var0 = 1U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

funcptr.bc

--- /dev/fd/63	2022-08-12 09:11:58.138819308 +0000
+++ /dev/fd/62	2022-08-12 09:11:58.138819308 +0000
@@ -5,31 +5,22 @@
 unsigned int add(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }
 unsigned int sub(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 - val3;
+    return var0 - var1;
 }
 unsigned int main() {
     unsigned int var0;
     void *var1;
     unsigned int val2;
-    void *val3;
-    unsigned int call4;
+    unsigned int call3;
     var0 = 0U;
     val2 = x;
     if (val2 == 0U) {
@@ -37,7 +28,6 @@
     } else {
         var1 = &add;
     }
-    val3 = var1;
-    call4 = ((unsigned int (*)(unsigned int, unsigned int))val3)(2U, 2U);
-    return call4;
+    call3 = ((unsigned int (*)(unsigned int, unsigned int))var1)(2U, 2U);
+    return call3;
 }

goto_loop.bc

--- /dev/fd/63	2022-08-12 09:11:58.322821828 +0000
+++ /dev/fd/62	2022-08-12 09:11:58.322821828 +0000
@@ -4,41 +4,23 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
     while (1U)
         {
-            val2 = var1;
-            var1 = val2 + 1U;
-            val3 = var1;
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
+            var1 = var1 + 1U;
+            if (var1 == 1U) {
+                printf("%d\n", var1);
+            } else if (var1 != 2U) {
+                break;
             } else {
-                val5 = var1;
-                if (val5 != 2U) {
-                    break;
-                } else {
-                    val6 = var1;
-                    printf("%d\n", val6);
-                }
+                printf("%d\n", var1);
             }
         }
-    if (val3 != 1U && val5 != 2U) {
-        val7 = var1;
-        if (val7 == 3U) {
-            val8 = var1;
-            printf("%d\n", val8);
+    if (var1 != 1U && var1 != 2U) {
+        if (var1 == 3U) {
+            printf("%d\n", var1);
         }
-        val9 = var0;
-        return val9;
+        return var0;
     }
 }

branch.bc

--- /dev/fd/63	2022-08-12 09:11:58.706827088 +0000
+++ /dev/fd/62	2022-08-12 09:11:58.706827088 +0000
@@ -13,18 +13,15 @@
     unsigned long var2;
     unsigned int val3;
     unsigned int val4;
-    unsigned long val5;
-    unsigned int val6;
-    unsigned long val7;
+    unsigned int val5;
     var0 = 0U;
     var1 = (unsigned long)(&a);
     var2 = (unsigned long)(&c);
     val3 = c;
     if (val3 == 0U) {
-        val6 = c;
-        printf("Global variable 'c' of value %u is at ", val6);
-        val7 = var2;
-        if (val7 % 2UL != 0UL) {
+        val5 = c;
+        printf("Global variable 'c' of value %u is at ", val5);
+        if (var2 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");
@@ -32,8 +29,7 @@
     } else {
         val4 = a;
         printf("Global variable 'a' of value %u is at ", val4);
-        val5 = var1;
-        if (val5 % 2UL != 0UL) {
+        if (var1 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");

bitops.bc

--- /dev/fd/63	2022-08-12 09:11:59.038831635 +0000
+++ /dev/fd/62	2022-08-12 09:11:59.038831635 +0000
@@ -10,28 +10,20 @@
     unsigned int val5;
     unsigned int val6;
     unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
     var0 = 0U;
     var1 = 0U;
     val2 = a;
     val3 = b;
     if (((int)val2 >> val3 & 1U) != 0U) {
-        val4 = var1;
-        var1 = val4 + 1U;
+        var1 = var1 + 1U;
     }
-    val5 = a;
-    val6 = b;
-    if ((val5 >> val6 ^ 1U) != 0U) {
-        val7 = var1;
-        var1 = val7 + 2U;
+    val4 = a;
+    val5 = b;
+    if ((val4 >> val5 ^ 1U) != 0U) {
+        var1 = var1 + 2U;
     }
-    val8 = a;
-    val9 = b;
-    val10 = var1;
-    var1 = val10 + 3U;
-    val11 = var1;
-    return val11;
+    val6 = a;
+    val7 = b;
+    var1 = var1 + 3U;
+    return var1;
 }

vectors.bc

--- /dev/fd/63	2022-08-12 09:11:59.298835196 +0000
+++ /dev/fd/62	2022-08-12 09:11:59.298835196 +0000
@@ -10,43 +10,23 @@
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var5;
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var6;
     void *var7;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val8;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val9;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val10;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val11;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val12;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    void *val18;
-    unsigned int val19;
-    void *val20;
-    unsigned int val21;
+    unsigned int val8;
+    unsigned int val9;
+    unsigned int val10;
+    unsigned int val11;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){1U, 2U, 3U, 4U};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){4U, 3U, 2U, 1U};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    val18 = var7;
-    val19 = ((unsigned int *)val18)[2UL];
-    val20 = var7;
-    val21 = ((unsigned int *)val20)[3UL];
-    printf("a=[%d %d %d %d]\n", val15, val17, val19, val21);
+    val8 = *((unsigned int *)var7);
+    val9 = ((unsigned int *)var7)[1UL];
+    val10 = ((unsigned int *)var7)[2UL];
+    val11 = ((unsigned int *)var7)[3UL];
+    printf("a=[%d %d %d %d]\n", val8, val9, val10, val11);
     return 0U;
 }

issue_4.bc

--- /dev/fd/63	2022-08-12 09:11:59.414836785 +0000
+++ /dev/fd/62	2022-08-12 09:11:59.414836785 +0000
@@ -5,32 +5,17 @@
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = arg0;
     var1 = arg1;
     var2 = 0U;
     var3 = 0U;
-    do {
-        val4 = var3;
-        if (val4 != 42U) {
-            val5 = var0;
-            val6 = var2;
-            var2 = val6 + val5;
-            val7 = var1;
-            val8 = var2;
-            var2 = val8 % val7;
-            val9 = var3;
-            var3 = val9 + 1U;
+    while (var3 != 42U)
+        {
+            var2 = var2 + var0;
+            var2 = var2 % var1;
+            var3 = var3 + 1U;
         }
-    } while (val4 != 42U);
-    val10 = var2;
-    return val10;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

conflicting_global.bc

--- /dev/fd/63	2022-08-12 09:11:59.626839688 +0000
+++ /dev/fd/62	2022-08-12 09:11:59.626839688 +0000
@@ -5,11 +5,9 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
-    unsigned int val2;
     var0 = 4U;
-    val1 = var0;
+    printf("%d\n", var0);
+    val1 = a;
     printf("%d\n", val1);
-    val2 = a;
-    printf("%d\n", val2);
     return 0U;
 }

issue_123_uint128_t.bc

--- /dev/fd/63	2022-08-12 09:11:59.742841277 +0000
+++ /dev/fd/62	2022-08-12 09:11:59.742841277 +0000
@@ -4,13 +4,11 @@
     unsigned int var0;
     unsigned __int128 var1;
     unsigned long val2;
-    unsigned __int128 val3;
-    unsigned long val4;
+    unsigned long val3;
     var0 = 0U;
     val2 = x;
     var1 = val2;
-    val3 = var1;
-    x = val3;
-    val4 = x;
-    return (unsigned int)(val4 & 255UL);
+    x = var1;
+    val3 = x;
+    return (unsigned int)(val3 & 255UL);
 }

fizzbuzz_stateful.bc

--- /dev/fd/63	2022-08-12 09:11:59.854842811 +0000
+++ /dev/fd/62	2022-08-12 09:11:59.854842811 +0000
@@ -14,7 +14,6 @@
     unsigned int val4;
     unsigned int val5;
     unsigned int val6;
-    unsigned int val7;
     val1 = i;
     var0 = val1;
     val2 = i;
@@ -34,15 +33,13 @@
             printf("%d", val6);
         }
     }
-    val7 = var0;
-    i = val7;
+    i = var0;
     return;
 }
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
     unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     i = 1U;
     do {
@@ -54,6 +51,5 @@
             i = val2 + 1U;
         }
     } while ((int)val1 < 16);
-    val3 = var0;
-    return val3;
+    return var0;
 }

issue_94_strncmp.bc

bool.bc

--- /dev/fd/63	2022-08-12 09:12:00.534852125 +0000
+++ /dev/fd/62	2022-08-12 09:12:00.534852125 +0000
@@ -5,7 +5,6 @@
     unsigned int var0;
     unsigned long val1;
     unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
     val1 = a;
     val2 = b;
@@ -14,6 +13,5 @@
     } else {
         var0 = 0U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

global_using_function_decl.bc

fcmp.bc

--- /dev/fd/63	2022-08-12 09:12:00.834856234 +0000
+++ /dev/fd/62	2022-08-12 09:12:00.834856234 +0000
@@ -17,56 +17,18 @@
     unsigned int var9;
     float call10;
     float call11;
-    float val12;
-    float val13;
-    float val14;
-    float val15;
-    float val16;
-    float val17;
-    float val18;
-    float val19;
-    float val20;
-    float val21;
-    float val22;
-    float val23;
-    float val24;
-    unsigned int val25;
-    unsigned int val26;
-    unsigned int val27;
-    unsigned int val28;
-    unsigned int val29;
-    unsigned int val30;
     var0 = __builtin_nan("");
     call10 = atof("3");
     var1 = call10;
     call11 = atof("2");
     var2 = call11;
-    val12 = var1;
-    var3 = -val12;
-    val13 = var3;
-    val14 = var0;
-    var4 = (val13 > val14);
-    val15 = var3;
-    val16 = var0;
-    var5 = (val15 >= val16);
-    val17 = var1;
-    val18 = var2;
-    var6 = (val17 > val18);
-    val19 = var1;
-    val20 = var2;
-    var7 = (val19 >= val20);
-    val21 = var1;
-    val22 = var0;
-    var8 = __builtin_isunordered(val21, val22);
-    val23 = var1;
-    val24 = var2;
-    var9 = __builtin_isunordered(val23, val24);
-    val25 = var4;
-    val26 = var5;
-    val27 = var6;
-    val28 = var7;
-    val29 = var8;
-    val30 = var9;
-    printf("%d %d %d %d %d %d\n", val25, val26, val27, val28, val29, val30);
+    var3 = -var1;
+    var4 = (var3 > var0);
+    var5 = (var3 >= var0);
+    var6 = (var1 > var2);
+    var7 = (var1 >= var2);
+    var8 = __builtin_isunordered(var1, var0);
+    var9 = __builtin_isunordered(var1, var2);
+    printf("%d %d %d %d %d %d\n", var4, var5, var6, var7, var8, var9);
     return 0U;
 }

byval_struct.bc

--- /dev/fd/63	2022-08-12 09:12:00.950857823 +0000
+++ /dev/fd/62	2022-08-12 09:12:00.950857823 +0000
@@ -31,7 +31,6 @@
     unsigned int call5;
     unsigned long call6;
     unsigned long val7;
-    unsigned long val8;
     call2 = atoi("1");
     var0.field0 = (long)call2;
     call3 = atoi("2");
@@ -43,7 +42,6 @@
     call6 = get_3x(var0);
     var1 = call6;
     val7 = var0.field0;
-    val8 = var1;
-    printf("%lld %lld\n", val7, val8);
+    printf("%lld %lld\n", val7, var1);
     return 0U;
 }

nested_while.bc

--- /dev/fd/63	2022-08-12 09:12:01.066859411 +0000
+++ /dev/fd/62	2022-08-12 09:12:01.066859411 +0000
@@ -8,40 +8,24 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int call2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = 0U;
     call2 = atoi("5");
     var1 = call2;
-    val3 = var1;
-    if ((int)val3 > 10) {
-        do {
-            val4 = var1;
-            if ((int)val4 < 20) {
-                val5 = var1;
-                var1 = val5 + 1U;
-                val6 = var1;
-                printf("loop1 x: %d\n", val6);
+    if ((int)var1 > 10) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop1 x: %d\n", var1);
             }
-        } while ((int)val4 < 20);
     }
-    if ((int)val3 <= 10 || (int)val4 >= 20) {
-        do {
-            val7 = var1;
-            if ((int)val7 < 20) {
-                val8 = var1;
-                var1 = val8 + 1U;
-                val9 = var1;
-                printf("loop2 x: %d\n", val9);
+    if ((int)var1 <= 10 || (int)var1 >= 20) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop2 x: %d\n", var1);
             }
-        } while ((int)val7 < 20);
-        val10 = var0;
-        return val10;
+    }
+    if (((int)var1 <= 10 || (int)var1 >= 20) && (int)var1 >= 20) {
+        return var0;
     }
 }

func_cond_two_arg.bc

--- /dev/fd/63	2022-08-12 09:12:01.482865109 +0000
+++ /dev/fd/62	2022-08-12 09:12:01.482865109 +0000
@@ -5,20 +5,15 @@
 unsigned int f(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return (unsigned int)((int)val2 < (int)val3);
+    return (unsigned int)((int)var0 < (int)var1);
 }
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
     unsigned int val2;
     unsigned int call3;
-    unsigned int val4;
     var0 = 0U;
     val1 = x;
     val2 = y;
@@ -28,6 +23,5 @@
     } else {
         var0 = 1U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

zext.bc

inttoptr.bc

--- /dev/fd/63	2022-08-12 09:12:01.786869273 +0000
+++ /dev/fd/62	2022-08-12 09:12:01.786869273 +0000
@@ -4,17 +4,13 @@
     unsigned int var0;
     void *var1;
     unsigned long val2;
-    void *val3;
-    unsigned int val4;
     var0 = 0U;
     val2 = a;
     var1 = (void *)val2;
-    val3 = var1;
-    if (val3 == (void *)0U) {
+    if (var1 == (void *)0U) {
         var0 = 0U;
     } else {
         var0 = 42U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

assert.bc

--- /dev/fd/63	2022-08-12 09:12:01.970871793 +0000
+++ /dev/fd/62	2022-08-12 09:12:01.970871793 +0000
@@ -17,15 +17,17 @@
         __assert_fail("a % 3", "assert.c", 6U, "int main(void)");
     } else {
         val2 = a;
-        if (val2 % 7UL == 0UL) {
-            __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
-        } else {
-            val3 = a;
-            if (val3 % 15UL == 0UL) {
-                __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
-            } else {
-                return 0U;
-            }
-        }
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL == 0UL) {
+        __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL) {
+        val3 = a;
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL && val3 % 15UL == 0UL) {
+        __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL && val3 % 15UL != 0UL) {
+        return 0U;
     }
 }

loop.bc

--- /dev/fd/63	2022-08-12 09:12:02.366877217 +0000
+++ /dev/fd/62	2022-08-12 09:12:02.366877217 +0000
@@ -6,26 +6,17 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if (val2 != 10U) {
-            val3 = var1;
-            printf("Variable at %d is ", val3);
-            val4 = var1;
-            if (val4 % 2U != 0U) {
+    while (var1 != 10U)
+        {
+            printf("Variable at %d is ", var1);
+            if (var1 % 2U != 0U) {
                 printf("odd.\n");
             } else {
                 printf("even.\n");
             }
-            val5 = var1;
-            var1 = val5 + 1U;
+            var1 = var1 + 1U;
         }
-    } while (val2 != 10U);
     return 0U;
 }

switch.bc

--- /dev/fd/63	2022-08-12 09:12:02.650881107 +0000
+++ /dev/fd/62	2022-08-12 09:12:02.650881107 +0000
@@ -4,7 +4,6 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     var1 = 0U;
     val2 = a;
@@ -30,6 +29,5 @@
         }
         break;
     }
-    val3 = var1;
-    return val3;
+    return var1;
 }

template_parameter_pack.bc

--- /dev/fd/63	2022-08-12 09:12:02.858883955 +0000
+++ /dev/fd/62	2022-08-12 09:12:02.858883955 +0000
@@ -17,71 +17,43 @@
     unsigned int var2;
     unsigned int var3;
     unsigned int var4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int call10;
+    unsigned int call5;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
     var4 = arg4;
-    val5 = var0;
-    val6 = var1;
-    val7 = var2;
-    val8 = var3;
-    val9 = var4;
-    call10 = _Z3sumIiJiiiEET_S0_DpT0_(val6, val7, val8, val9);
-    return val5 + call10;
+    call5 = _Z3sumIiJiiiEET_S0_DpT0_(var1, var2, var3, var4);
+    return var0 + call5;
 }
 unsigned int _Z3sumIiJiiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2, unsigned int arg3) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int call8;
+    unsigned int call4;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
-    val4 = var0;
-    val5 = var1;
-    val6 = var2;
-    val7 = var3;
-    call8 = _Z3sumIiJiiEET_S0_DpT0_(val5, val6, val7);
-    return val4 + call8;
+    call4 = _Z3sumIiJiiEET_S0_DpT0_(var1, var2, var3);
+    return var0 + call4;
 }
 unsigned int _Z3sumIiJiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int call6;
+    unsigned int call3;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
-    val3 = var0;
-    val4 = var1;
-    val5 = var2;
-    call6 = _Z3sumIiET_S0_S0_(val4, val5);
-    return val3 + call6;
+    call3 = _Z3sumIiET_S0_S0_(var1, var2);
+    return var0 + call3;
 }
 unsigned int _Z3sumIiET_S0_S0_(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }

byval_tail_nogep.ll

byval_tail_gep.ll

github-actions[bot] avatar Aug 12 '22 09:08 github-actions[bot]

See the diff generated by this PR for the tests here: https://github.com/lifting-bits/rellic/actions/runs/2845993135

fizzbuzz.bc

--- /dev/fd/63	2022-08-12 10:24:12.493930247 +0000
+++ /dev/fd/62	2022-08-12 10:24:12.493930247 +0000
@@ -7,46 +7,24 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if ((int)val2 < 30) {
-            val3 = var1;
-            if ((int)val3 % 3 == 0U) {
-                val4 = var1;
-                if ((int)val4 % 5 == 0U) {
-                    printf("fizzbuzz\n");
-                }
-            }
-            if ((int)val3 % 3 != 0U || !((int)val3 % 3 != 0U || (int)val4 % 5 == 0U)) {
-                val5 = var1;
-                if (((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) && (int)val5 % 3 != 0U) {
-                    val6 = var1;
-                    if ((int)val6 % 5 != 0U) {
-                        val7 = var1;
-                        printf("%d\n", val7);
+    while ((int)var1 < 30)
+        {
+            if ((int)var1 % 3 != 0U || !((int)var1 % 5 == 0U || (int)var1 % 3 != 0U)) {
+                if ((int)var1 % 3 != 0U) {
+                    if ((int)var1 % 5 != 0U) {
+                        printf("%d\n", var1);
                     } else {
                         printf("buzz\n");
                     }
                 } else {
-                    if (((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) && (int)val5 % 3 == 0U) {
-                        printf("fizz\n");
-                    }
+                    printf("fizz\n");
                 }
+            } else {
+                printf("fizzbuzz\n");
             }
-            val8 = var1;
-            var1 = val8 + 1U;
+            var1 = var1 + 1U;
         }
-    } while ((int)val2 < 30);
-    val9 = var0;
-    return val9;
+    return var0;
 }

typedefs_of_typedefs.bc

--- /dev/fd/63	2022-08-12 10:24:18.553971956 +0000
+++ /dev/fd/62	2022-08-12 10:24:18.553971956 +0000
@@ -12,44 +12,28 @@
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var5;
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var6;
     void *var7;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val8;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val9;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val10;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val11;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val12;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    unsigned long val18;
-    unsigned long val19;
-    unsigned long val20;
-    unsigned long val21;
+    unsigned int val8;
+    unsigned int val9;
+    unsigned long val10;
+    unsigned long val11;
+    unsigned long val12;
+    unsigned long val13;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){1UL, 2UL};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){4UL, 3UL};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    printf("a=[%d %d]\n", val15, val17);
-    val18 = *array;
-    val19 = array[1UL];
-    val20 = array[2UL];
-    val21 = array[3UL];
-    printf("array=[%lld %lld %lld %lld]\n", val18, val19, val20, val21);
+    val8 = *((unsigned int *)var7);
+    val9 = ((unsigned int *)var7)[1UL];
+    printf("a=[%d %d]\n", val8, val9);
+    val10 = *array;
+    val11 = array[1UL];
+    val12 = array[2UL];
+    val13 = array[3UL];
+    printf("array=[%lld %lld %lld %lld]\n", val10, val11, val12, val13);
     return 0U;
 }

switch_loop.bc

--- /dev/fd/63	2022-08-12 10:24:18.693972921 +0000
+++ /dev/fd/62	2022-08-12 10:24:18.693972921 +0000
@@ -4,36 +4,21 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
     var0 = 0U;
     var1 = 0U;
     do {
-        val2 = var1;
-        var1 = val2 + 1U;
-        val3 = var1;
-        if (!(val3 != 1U && val3 != 2U && val3 != 3U)) {
-            if (val3 == 3U) {
-                val6 = var1;
-                printf("%d\n", val6);
+        var1 = var1 + 1U;
+        if (!(var1 != 1U && var1 != 2U && var1 != 3U))
+            if (var1 == 3U) {
+                printf("%d\n", var1);
                 break;
+            } else if (var1 == 2U) {
+                printf("%d\n", var1);
+            } else {
+                printf("%d\n", var1);
             }
-            if (val3 == 2U) {
-                val5 = var1;
-                printf("%d\n", val5);
-            }
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
-            }
-        }
-    } while (!(val3 != 1U && val3 != 2U && val3 != 3U));
-    if (val3 == 3U || !(val3 == 2U || val3 == 3U || val3 == 1U)) {
-        val7 = var0;
-        return val7;
+    } while (!(var1 != 1U && var1 != 2U && var1 != 3U));
+    if (var1 == 3U || !(var1 == 2U || var1 == 3U || var1 == 1U)) {
+        return var0;
     }
 }

func_cond_zero_arg.bc

--- /dev/fd/63	2022-08-12 10:24:19.373977608 +0000
+++ /dev/fd/62	2022-08-12 10:24:19.373977608 +0000
@@ -8,7 +8,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int call1;
-    unsigned int val2;
     var0 = 0U;
     call1 = f();
     if (call1 == 0U) {
@@ -16,6 +15,5 @@
     } else {
         var0 = 1U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

conflicting_names.bc

--- /dev/fd/63	2022-08-12 10:24:19.581979042 +0000
+++ /dev/fd/62	2022-08-12 10:24:19.581979042 +0000
@@ -4,17 +4,13 @@
 unsigned int atoi(void *arg0);
 unsigned int foo() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 0U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int bar() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 1U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int main() {
     unsigned int var0;
@@ -24,35 +20,23 @@
     unsigned int var4;
     unsigned int var5;
     unsigned int var6;
-    unsigned int val7;
-    void *val8;
-    void *val9;
-    unsigned int call10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
+    void *val7;
+    unsigned int call8;
     var0 = 0U;
     var1 = 0U;
     var2 = (void *)0U;
     var3 = 0U;
-    val7 = var1;
-    if (1 >= (int)val7) {
+    if (1 >= (int)var1) {
         var6 = 1U;
-        val13 = var6;
-        var3 = val13;
+        var3 = var6;
     } else {
-        val8 = var2;
-        val9 = ((void **)val8)[1UL];
-        call10 = atoi(val9);
-        var4 = call10;
-        val11 = var4;
-        if ((int)val11 > 10) {
+        val7 = ((void **)var2)[1UL];
+        call8 = atoi(val7);
+        var4 = call8;
+        if ((int)var4 > 10) {
             var5 = 99U;
-            val12 = var5;
-            var3 = val12;
+            var3 = var5;
         }
     }
-    val14 = var3;
-    return val14;
+    return var3;
 }

struct.bc

--- /dev/fd/63	2022-08-12 10:24:19.893981192 +0000
+++ /dev/fd/62	2022-08-12 10:24:19.893981192 +0000
@@ -9,7 +9,6 @@
     unsigned int val1;
     unsigned int val2;
     unsigned int val3;
-    unsigned int val4;
     var0 = 0U;
     val1 = a.field0;
     if (val1 == 0U) {
@@ -19,6 +18,5 @@
         val2 = a.field0;
         var0 = val2;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

issue_183_literal_structs.bc

issue_127_uint128_t_lit.bc

struct_swap.bc

--- /dev/fd/63	2022-08-12 10:24:20.349984336 +0000
+++ /dev/fd/62	2022-08-12 10:24:20.349984336 +0000
@@ -10,14 +10,12 @@
     unsigned int val2;
     unsigned int val3;
     unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     val2 = a.field0;
     var1 = val2;
     val3 = a.field1;
     a.field0 = val3;
-    val4 = var1;
-    a.field1 = val4;
-    val5 = a.field0;
-    return val5;
+    a.field1 = var1;
+    val4 = a.field0;
+    return val4;
 }

init_list.bc

ret0.bc

trunc.bc

short.bc

--- /dev/fd/63	2022-08-12 10:24:20.861987865 +0000
+++ /dev/fd/62	2022-08-12 10:24:20.861987865 +0000
@@ -4,11 +4,9 @@
     unsigned int var0;
     unsigned short var1;
     unsigned short val2;
-    unsigned short val3;
     var0 = 0U;
     a = 13U;
     val2 = a;
     var1 = val2;
-    val3 = var1;
-    return (unsigned int)val3;
+    return (unsigned int)var1;
 }

cast.bc

nullptr.bc

--- /dev/fd/63	2022-08-12 10:24:21.113989602 +0000
+++ /dev/fd/62	2022-08-12 10:24:21.113989602 +0000
@@ -3,7 +3,6 @@
 unsigned int main() {
     unsigned int var0;
     void *val1;
-    unsigned int val2;
     var0 = 0U;
     val1 = ptr;
     if (val1 != (void *)0U) {
@@ -11,6 +10,5 @@
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

nested_struct.bc

array_swap.bc

--- /dev/fd/63	2022-08-12 10:24:21.457991973 +0000
+++ /dev/fd/62	2022-08-12 10:24:21.457991973 +0000
@@ -6,14 +6,12 @@
     unsigned int val2;
     unsigned int val3;
     unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     val2 = *a;
     var1 = val2;
     val3 = a[1UL];
     *a = val3;
-    val4 = var1;
-    a[1UL] = val4;
-    val5 = *a;
-    return val5;
+    a[1UL] = var1;
+    val4 = *a;
+    return val4;
 }

bitmask.bc

--- /dev/fd/63	2022-08-12 10:24:21.589992882 +0000
+++ /dev/fd/62	2022-08-12 10:24:21.589992882 +0000
@@ -3,7 +3,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned long val1;
-    unsigned int val2;
     var0 = 0U;
     val1 = a;
     if ((val1 & 4080UL) >> 4UL != 188UL) {
@@ -11,6 +10,5 @@
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

binops.bc

--- /dev/fd/63	2022-08-12 10:24:21.801994344 +0000
+++ /dev/fd/62	2022-08-12 10:24:21.801994344 +0000
@@ -4,49 +4,23 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
-    unsigned int val15;
     var0 = arg0;
-    val3 = var0;
-    var1 = val3 % 4U;
+    var1 = var0 % 4U;
     var2 = 0U;
-    val4 = var1;
-    if (val4 != 0U) {
-        val7 = var1;
-        if (val7 != 1U) {
-            val10 = var1;
-            if (val10 != 2U) {
-                val13 = var0;
-                val14 = var0;
-                var2 = (val13 + 3131756735U) * (5U & val14);
+    if (var1 != 0U) {
+        if (var1 != 1U) {
+            if (var1 != 2U) {
+                var2 = (var0 + 3131756735U) * (5U & var0);
             } else {
-                val11 = var0;
-                val12 = var0;
-                var2 = (val11 ^ 3131756735U) * (4U | val12);
+                var2 = (var0 ^ 3131756735U) * (4U | var0);
             }
         } else {
-            val8 = var0;
-            val9 = var0;
-            var2 = (val8 & 3131756735U) * (3U + val9);
+            var2 = (var0 & 3131756735U) * (3U + var0);
         }
     } else {
-        val5 = var0;
-        val6 = var0;
-        var2 = (val5 | 3131756735U) * (2U ^ val6);
+        var2 = (var0 | 3131756735U) * (2U ^ var0);
     }
-    val15 = var2;
-    return val15;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

float.bc

--- /dev/fd/63	2022-08-12 10:24:22.249997656 +0000
+++ /dev/fd/62	2022-08-12 10:24:22.249997656 +0000
@@ -4,21 +4,15 @@
     unsigned int var0;
     double var1;
     double var2;
-    double val3;
-    float val4;
-    double val5;
-    unsigned int val6;
+    float val3;
     var0 = 0U;
     var1 = 3.1428571428571428;
-    val3 = var1;
-    val4 = f;
-    var2 = val3 - (double)val4;
-    val5 = var2;
-    if (val5 >= 0.01) {
+    val3 = f;
+    var2 = var1 - (double)val3;
+    if (var2 >= 0.01) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val6 = var0;
-    return val6;
+    return var0;
 }

reg_test_structure_fields.bc

zeroinit.bc

--- /dev/fd/63	2022-08-12 10:24:22.610001870 +0000
+++ /dev/fd/62	2022-08-12 10:24:22.610001870 +0000
@@ -18,7 +18,6 @@
     unsigned int var0;
     unsigned int val1;
     unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
     val1 = r1.field1.field0;
     if (val1 == 0U) {
@@ -31,6 +30,5 @@
     } else {
         var0 = 1U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

funcptr.bc

--- /dev/fd/63	2022-08-12 10:24:22.922005522 +0000
+++ /dev/fd/62	2022-08-12 10:24:22.922005522 +0000
@@ -5,31 +5,22 @@
 unsigned int add(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }
 unsigned int sub(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 - val3;
+    return var0 - var1;
 }
 unsigned int main() {
     unsigned int var0;
     void *var1;
     unsigned int val2;
-    void *val3;
-    unsigned int call4;
+    unsigned int call3;
     var0 = 0U;
     val2 = x;
     if (val2 == 0U) {
@@ -37,7 +28,6 @@
     } else {
         var1 = &add;
     }
-    val3 = var1;
-    call4 = ((unsigned int (*)(unsigned int, unsigned int))val3)(2U, 2U);
-    return call4;
+    call3 = ((unsigned int (*)(unsigned int, unsigned int))var1)(2U, 2U);
+    return call3;
 }

goto_loop.bc

--- /dev/fd/63	2022-08-12 10:24:23.134008004 +0000
+++ /dev/fd/62	2022-08-12 10:24:23.134008004 +0000
@@ -4,41 +4,23 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
     while (1U)
         {
-            val2 = var1;
-            var1 = val2 + 1U;
-            val3 = var1;
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
+            var1 = var1 + 1U;
+            if (var1 == 1U) {
+                printf("%d\n", var1);
+            } else if (var1 != 2U) {
+                break;
             } else {
-                val5 = var1;
-                if (val5 != 2U) {
-                    break;
-                } else {
-                    val6 = var1;
-                    printf("%d\n", val6);
-                }
+                printf("%d\n", var1);
             }
         }
-    if (val3 != 1U && val5 != 2U) {
-        val7 = var1;
-        if (val7 == 3U) {
-            val8 = var1;
-            printf("%d\n", val8);
+    if (var1 != 1U && var1 != 2U) {
+        if (var1 == 3U) {
+            printf("%d\n", var1);
         }
-        val9 = var0;
-        return val9;
+        return var0;
     }
 }

branch.bc

--- /dev/fd/63	2022-08-12 10:24:23.662014184 +0000
+++ /dev/fd/62	2022-08-12 10:24:23.662014184 +0000
@@ -13,18 +13,15 @@
     unsigned long var2;
     unsigned int val3;
     unsigned int val4;
-    unsigned long val5;
-    unsigned int val6;
-    unsigned long val7;
+    unsigned int val5;
     var0 = 0U;
     var1 = (unsigned long)(&a);
     var2 = (unsigned long)(&c);
     val3 = c;
     if (val3 == 0U) {
-        val6 = c;
-        printf("Global variable 'c' of value %u is at ", val6);
-        val7 = var2;
-        if (val7 % 2UL != 0UL) {
+        val5 = c;
+        printf("Global variable 'c' of value %u is at ", val5);
+        if (var2 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");
@@ -32,8 +29,7 @@
     } else {
         val4 = a;
         printf("Global variable 'a' of value %u is at ", val4);
-        val5 = var1;
-        if (val5 % 2UL != 0UL) {
+        if (var1 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");

bitops.bc

--- /dev/fd/63	2022-08-12 10:24:24.142019803 +0000
+++ /dev/fd/62	2022-08-12 10:24:24.142019803 +0000
@@ -10,28 +10,20 @@
     unsigned int val5;
     unsigned int val6;
     unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
     var0 = 0U;
     var1 = 0U;
     val2 = a;
     val3 = b;
     if (((int)val2 >> val3 & 1U) != 0U) {
-        val4 = var1;
-        var1 = val4 + 1U;
+        var1 = var1 + 1U;
     }
-    val5 = a;
-    val6 = b;
-    if ((val5 >> val6 ^ 1U) != 0U) {
-        val7 = var1;
-        var1 = val7 + 2U;
+    val4 = a;
+    val5 = b;
+    if ((val4 >> val5 ^ 1U) != 0U) {
+        var1 = var1 + 2U;
     }
-    val8 = a;
-    val9 = b;
-    val10 = var1;
-    var1 = val10 + 3U;
-    val11 = var1;
-    return val11;
+    val6 = a;
+    val7 = b;
+    var1 = var1 + 3U;
+    return var1;
 }

vectors.bc

--- /dev/fd/63	2022-08-12 10:24:24.474023689 +0000
+++ /dev/fd/62	2022-08-12 10:24:24.474023689 +0000
@@ -10,43 +10,23 @@
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var5;
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var6;
     void *var7;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val8;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val9;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val10;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val11;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val12;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    void *val18;
-    unsigned int val19;
-    void *val20;
-    unsigned int val21;
+    unsigned int val8;
+    unsigned int val9;
+    unsigned int val10;
+    unsigned int val11;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){1U, 2U, 3U, 4U};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){4U, 3U, 2U, 1U};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    val18 = var7;
-    val19 = ((unsigned int *)val18)[2UL];
-    val20 = var7;
-    val21 = ((unsigned int *)val20)[3UL];
-    printf("a=[%d %d %d %d]\n", val15, val17, val19, val21);
+    val8 = *((unsigned int *)var7);
+    val9 = ((unsigned int *)var7)[1UL];
+    val10 = ((unsigned int *)var7)[2UL];
+    val11 = ((unsigned int *)var7)[3UL];
+    printf("a=[%d %d %d %d]\n", val8, val9, val10, val11);
     return 0U;
 }

issue_4.bc

--- /dev/fd/63	2022-08-12 10:24:24.606025235 +0000
+++ /dev/fd/62	2022-08-12 10:24:24.606025235 +0000
@@ -5,32 +5,17 @@
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = arg0;
     var1 = arg1;
     var2 = 0U;
     var3 = 0U;
-    do {
-        val4 = var3;
-        if (val4 != 42U) {
-            val5 = var0;
-            val6 = var2;
-            var2 = val6 + val5;
-            val7 = var1;
-            val8 = var2;
-            var2 = val8 % val7;
-            val9 = var3;
-            var3 = val9 + 1U;
+    while (var3 != 42U)
+        {
+            var2 = var2 + var0;
+            var2 = var2 % var1;
+            var3 = var3 + 1U;
         }
-    } while (val4 != 42U);
-    val10 = var2;
-    return val10;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

conflicting_global.bc

--- /dev/fd/63	2022-08-12 10:24:24.878028419 +0000
+++ /dev/fd/62	2022-08-12 10:24:24.878028419 +0000
@@ -5,11 +5,9 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
-    unsigned int val2;
     var0 = 4U;
-    val1 = var0;
+    printf("%d\n", var0);
+    val1 = a;
     printf("%d\n", val1);
-    val2 = a;
-    printf("%d\n", val2);
     return 0U;
 }

issue_123_uint128_t.bc

--- /dev/fd/63	2022-08-12 10:24:25.010029964 +0000
+++ /dev/fd/62	2022-08-12 10:24:25.010029964 +0000
@@ -4,13 +4,11 @@
     unsigned int var0;
     unsigned __int128 var1;
     unsigned long val2;
-    unsigned __int128 val3;
-    unsigned long val4;
+    unsigned long val3;
     var0 = 0U;
     val2 = x;
     var1 = val2;
-    val3 = var1;
-    x = val3;
-    val4 = x;
-    return (unsigned int)(val4 & 255UL);
+    x = var1;
+    val3 = x;
+    return (unsigned int)(val3 & 255UL);
 }

fizzbuzz_stateful.bc

--- /dev/fd/63	2022-08-12 10:24:25.142031509 +0000
+++ /dev/fd/62	2022-08-12 10:24:25.142031509 +0000
@@ -14,7 +14,6 @@
     unsigned int val4;
     unsigned int val5;
     unsigned int val6;
-    unsigned int val7;
     val1 = i;
     var0 = val1;
     val2 = i;
@@ -34,15 +33,13 @@
             printf("%d", val6);
         }
     }
-    val7 = var0;
-    i = val7;
+    i = var0;
     return;
 }
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
     unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     i = 1U;
     do {
@@ -54,6 +51,5 @@
             i = val2 + 1U;
         }
     } while ((int)val1 < 16);
-    val3 = var0;
-    return val3;
+    return var0;
 }

issue_94_strncmp.bc

bool.bc

--- /dev/fd/63	2022-08-12 10:24:26.626048880 +0000
+++ /dev/fd/62	2022-08-12 10:24:26.626048880 +0000
@@ -5,7 +5,6 @@
     unsigned int var0;
     unsigned long val1;
     unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
     val1 = a;
     val2 = b;
@@ -14,6 +13,5 @@
     } else {
         var0 = 0U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

global_using_function_decl.bc

fcmp.bc

--- /dev/fd/63	2022-08-12 10:24:26.978053001 +0000
+++ /dev/fd/62	2022-08-12 10:24:26.978053001 +0000
@@ -17,56 +17,18 @@
     unsigned int var9;
     float call10;
     float call11;
-    float val12;
-    float val13;
-    float val14;
-    float val15;
-    float val16;
-    float val17;
-    float val18;
-    float val19;
-    float val20;
-    float val21;
-    float val22;
-    float val23;
-    float val24;
-    unsigned int val25;
-    unsigned int val26;
-    unsigned int val27;
-    unsigned int val28;
-    unsigned int val29;
-    unsigned int val30;
     var0 = __builtin_nan("");
     call10 = atof("3");
     var1 = call10;
     call11 = atof("2");
     var2 = call11;
-    val12 = var1;
-    var3 = -val12;
-    val13 = var3;
-    val14 = var0;
-    var4 = (val13 > val14);
-    val15 = var3;
-    val16 = var0;
-    var5 = (val15 >= val16);
-    val17 = var1;
-    val18 = var2;
-    var6 = (val17 > val18);
-    val19 = var1;
-    val20 = var2;
-    var7 = (val19 >= val20);
-    val21 = var1;
-    val22 = var0;
-    var8 = __builtin_isunordered(val21, val22);
-    val23 = var1;
-    val24 = var2;
-    var9 = __builtin_isunordered(val23, val24);
-    val25 = var4;
-    val26 = var5;
-    val27 = var6;
-    val28 = var7;
-    val29 = var8;
-    val30 = var9;
-    printf("%d %d %d %d %d %d\n", val25, val26, val27, val28, val29, val30);
+    var3 = -var1;
+    var4 = (var3 > var0);
+    var5 = (var3 >= var0);
+    var6 = (var1 > var2);
+    var7 = (var1 >= var2);
+    var8 = __builtin_isunordered(var1, var0);
+    var9 = __builtin_isunordered(var1, var2);
+    printf("%d %d %d %d %d %d\n", var4, var5, var6, var7, var8, var9);
     return 0U;
 }

byval_struct.bc

--- /dev/fd/63	2022-08-12 10:24:27.110054546 +0000
+++ /dev/fd/62	2022-08-12 10:24:27.110054546 +0000
@@ -31,7 +31,6 @@
     unsigned int call5;
     unsigned long call6;
     unsigned long val7;
-    unsigned long val8;
     call2 = atoi("1");
     var0.field0 = (long)call2;
     call3 = atoi("2");
@@ -43,7 +42,6 @@
     call6 = get_3x(var0);
     var1 = call6;
     val7 = var0.field0;
-    val8 = var1;
-    printf("%lld %lld\n", val7, val8);
+    printf("%lld %lld\n", val7, var1);
     return 0U;
 }

nested_while.bc

--- /dev/fd/63	2022-08-12 10:24:27.242056091 +0000
+++ /dev/fd/62	2022-08-12 10:24:27.242056091 +0000
@@ -8,40 +8,24 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int call2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = 0U;
     call2 = atoi("5");
     var1 = call2;
-    val3 = var1;
-    if ((int)val3 > 10) {
-        do {
-            val4 = var1;
-            if ((int)val4 < 20) {
-                val5 = var1;
-                var1 = val5 + 1U;
-                val6 = var1;
-                printf("loop1 x: %d\n", val6);
+    if ((int)var1 > 10) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop1 x: %d\n", var1);
             }
-        } while ((int)val4 < 20);
     }
-    if ((int)val3 <= 10 || (int)val4 >= 20) {
-        do {
-            val7 = var1;
-            if ((int)val7 < 20) {
-                val8 = var1;
-                var1 = val8 + 1U;
-                val9 = var1;
-                printf("loop2 x: %d\n", val9);
+    if ((int)var1 <= 10 || (int)var1 >= 20) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop2 x: %d\n", var1);
             }
-        } while ((int)val7 < 20);
-        val10 = var0;
-        return val10;
+    }
+    if (((int)var1 <= 10 || (int)var1 >= 20) && (int)var1 >= 20) {
+        return var0;
     }
 }

func_cond_two_arg.bc

--- /dev/fd/63	2022-08-12 10:24:27.838062302 +0000
+++ /dev/fd/62	2022-08-12 10:24:27.842062331 +0000
@@ -5,20 +5,15 @@
 unsigned int f(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return (unsigned int)((int)val2 < (int)val3);
+    return (unsigned int)((int)var0 < (int)var1);
 }
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
     unsigned int val2;
     unsigned int call3;
-    unsigned int val4;
     var0 = 0U;
     val1 = x;
     val2 = y;
@@ -28,6 +23,5 @@
     } else {
         var0 = 1U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

zext.bc

inttoptr.bc

--- /dev/fd/63	2022-08-12 10:24:28.186064784 +0000
+++ /dev/fd/62	2022-08-12 10:24:28.186064784 +0000
@@ -4,17 +4,13 @@
     unsigned int var0;
     void *var1;
     unsigned long val2;
-    void *val3;
-    unsigned int val4;
     var0 = 0U;
     val2 = a;
     var1 = (void *)val2;
-    val3 = var1;
-    if (val3 == (void *)0U) {
+    if (var1 == (void *)0U) {
         var0 = 0U;
     } else {
         var0 = 42U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

assert.bc

--- /dev/fd/63	2022-08-12 10:24:28.398066295 +0000
+++ /dev/fd/62	2022-08-12 10:24:28.398066295 +0000
@@ -17,15 +17,17 @@
         __assert_fail("a % 3", "assert.c", 6U, "int main(void)");
     } else {
         val2 = a;
-        if (val2 % 7UL == 0UL) {
-            __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
-        } else {
-            val3 = a;
-            if (val3 % 15UL == 0UL) {
-                __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
-            } else {
-                return 0U;
-            }
-        }
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL == 0UL) {
+        __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL) {
+        val3 = a;
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL && val3 % 15UL == 0UL) {
+        __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL && val3 % 15UL != 0UL) {
+        return 0U;
     }
 }

loop.bc

--- /dev/fd/63	2022-08-12 10:25:23.634522884 +0000
+++ /dev/fd/62	2022-08-12 10:25:23.634522884 +0000
@@ -6,26 +6,17 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if (val2 != 10U) {
-            val3 = var1;
-            printf("Variable at %d is ", val3);
-            val4 = var1;
-            if (val4 % 2U != 0U) {
+    while (var1 != 10U)
+        {
+            printf("Variable at %d is ", var1);
+            if (var1 % 2U != 0U) {
                 printf("odd.\n");
             } else {
                 printf("even.\n");
             }
-            val5 = var1;
-            var1 = val5 + 1U;
+            var1 = var1 + 1U;
         }
-    } while (val2 != 10U);
     return 0U;
 }

switch.bc

--- /dev/fd/63	2022-08-12 10:25:24.002525695 +0000
+++ /dev/fd/62	2022-08-12 10:25:24.002525695 +0000
@@ -4,7 +4,6 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     var1 = 0U;
     val2 = a;
@@ -30,6 +29,5 @@
         }
         break;
     }
-    val3 = var1;
-    return val3;
+    return var1;
 }

template_parameter_pack.bc

--- /dev/fd/63	2022-08-12 10:25:24.266527711 +0000
+++ /dev/fd/62	2022-08-12 10:25:24.266527711 +0000
@@ -17,71 +17,43 @@
     unsigned int var2;
     unsigned int var3;
     unsigned int var4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int call10;
+    unsigned int call5;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
     var4 = arg4;
-    val5 = var0;
-    val6 = var1;
-    val7 = var2;
-    val8 = var3;
-    val9 = var4;
-    call10 = _Z3sumIiJiiiEET_S0_DpT0_(val6, val7, val8, val9);
-    return val5 + call10;
+    call5 = _Z3sumIiJiiiEET_S0_DpT0_(var1, var2, var3, var4);
+    return var0 + call5;
 }
 unsigned int _Z3sumIiJiiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2, unsigned int arg3) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int call8;
+    unsigned int call4;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
-    val4 = var0;
-    val5 = var1;
-    val6 = var2;
-    val7 = var3;
-    call8 = _Z3sumIiJiiEET_S0_DpT0_(val5, val6, val7);
-    return val4 + call8;
+    call4 = _Z3sumIiJiiEET_S0_DpT0_(var1, var2, var3);
+    return var0 + call4;
 }
 unsigned int _Z3sumIiJiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int call6;
+    unsigned int call3;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
-    val3 = var0;
-    val4 = var1;
-    val5 = var2;
-    call6 = _Z3sumIiET_S0_S0_(val4, val5);
-    return val3 + call6;
+    call3 = _Z3sumIiET_S0_S0_(var1, var2);
+    return var0 + call3;
 }
 unsigned int _Z3sumIiET_S0_S0_(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }

byval_tail_nogep.ll

byval_tail_gep.ll

github-actions[bot] avatar Aug 12 '22 10:08 github-actions[bot]

See the diff generated by this PR for the tests here: https://github.com/lifting-bits/rellic/actions/runs/2846183969

fizzbuzz.bc

--- /dev/fd/63	2022-08-12 10:57:10.825737400 +0000
+++ /dev/fd/62	2022-08-12 10:57:10.825737400 +0000
@@ -7,46 +7,25 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if ((int)val2 < 30) {
-            val3 = var1;
-            if ((int)val3 % 3 == 0U) {
-                val4 = var1;
-                if ((int)val4 % 5 == 0U) {
-                    printf("fizzbuzz\n");
-                }
-            }
-            if ((int)val3 % 3 != 0U || !((int)val3 % 3 != 0U || (int)val4 % 5 == 0U)) {
-                val5 = var1;
-                if (((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) && (int)val5 % 3 != 0U) {
-                    val6 = var1;
-                    if ((int)val6 % 5 != 0U) {
-                        val7 = var1;
-                        printf("%d\n", val7);
+    while ((int)var1 < 30)
+        {
+            if ((int)var1 % 3 != 0U || !((int)var1 % 3 != 0U || (int)var1 % 5 == 0U)) {
+                if (((int)var1 % 3 != 0U || !((int)var1 % 5 == 0U || (int)var1 % 3 != 0U)) && (int)var1 % 3 != 0U) {
+                    if ((int)var1 % 5 != 0U) {
+                        printf("%d\n", var1);
                     } else {
                         printf("buzz\n");
                     }
-                } else {
-                    if (((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) && (int)val5 % 3 == 0U) {
-                        printf("fizz\n");
-                    }
                 }
+                if (((int)var1 % 3 != 0U || !((int)var1 % 5 == 0U || (int)var1 % 3 != 0U)) && (int)var1 % 3 == 0U) {
+                    printf("fizz\n");
+                }
+            } else {
+                printf("fizzbuzz\n");
             }
-            val8 = var1;
-            var1 = val8 + 1U;
+            var1 = var1 + 1U;
         }
-    } while ((int)val2 < 30);
-    val9 = var0;
-    return val9;
+    return var0;
 }

typedefs_of_typedefs.bc

--- /dev/fd/63	2022-08-12 10:57:11.513737441 +0000
+++ /dev/fd/62	2022-08-12 10:57:11.513737441 +0000
@@ -12,44 +12,28 @@
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var5;
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var6;
     void *var7;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val8;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val9;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val10;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val11;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val12;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    unsigned long val18;
-    unsigned long val19;
-    unsigned long val20;
-    unsigned long val21;
+    unsigned int val8;
+    unsigned int val9;
+    unsigned long val10;
+    unsigned long val11;
+    unsigned long val12;
+    unsigned long val13;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){1UL, 2UL};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){4UL, 3UL};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    printf("a=[%d %d]\n", val15, val17);
-    val18 = *array;
-    val19 = array[1UL];
-    val20 = array[2UL];
-    val21 = array[3UL];
-    printf("array=[%lld %lld %lld %lld]\n", val18, val19, val20, val21);
+    val8 = *((unsigned int *)var7);
+    val9 = ((unsigned int *)var7)[1UL];
+    printf("a=[%d %d]\n", val8, val9);
+    val10 = *array;
+    val11 = array[1UL];
+    val12 = array[2UL];
+    val13 = array[3UL];
+    printf("array=[%lld %lld %lld %lld]\n", val10, val11, val12, val13);
     return 0U;
 }

switch_loop.bc

--- /dev/fd/63	2022-08-12 10:57:11.677737451 +0000
+++ /dev/fd/62	2022-08-12 10:57:11.677737451 +0000
@@ -4,36 +4,26 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        var1 = val2 + 1U;
-        val3 = var1;
-        if (!(val3 != 1U && val3 != 2U && val3 != 3U)) {
-            if (val3 == 3U) {
-                val6 = var1;
-                printf("%d\n", val6);
+    while (1U)
+        {
+            var1 = var1 + 1U;
+            if (var1 != 1U && var1 != 2U && var1 != 3U) {
                 break;
             }
-            if (val3 == 2U) {
-                val5 = var1;
-                printf("%d\n", val5);
+            if (var1 == 3U) {
+                printf("%d\n", var1);
+                break;
+            }
+            if (var1 == 2U) {
+                printf("%d\n", var1);
             }
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
+            if (var1 == 1U) {
+                printf("%d\n", var1);
             }
         }
-    } while (!(val3 != 1U && val3 != 2U && val3 != 3U));
-    if (val3 == 3U || !(val3 == 2U || val3 == 3U || val3 == 1U)) {
-        val7 = var0;
-        return val7;
+    if (var1 == 3U || !(var1 == 2U || var1 == 3U || var1 == 1U)) {
+        return var0;
     }
 }

func_cond_zero_arg.bc

--- /dev/fd/63	2022-08-12 10:57:12.093737476 +0000
+++ /dev/fd/62	2022-08-12 10:57:12.093737476 +0000
@@ -8,7 +8,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int call1;
-    unsigned int val2;
     var0 = 0U;
     call1 = f();
     if (call1 == 0U) {
@@ -16,6 +15,5 @@
     } else {
         var0 = 1U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

conflicting_names.bc

--- /dev/fd/63	2022-08-12 10:57:12.285737500 +0000
+++ /dev/fd/62	2022-08-12 10:57:12.285737500 +0000
@@ -4,17 +4,13 @@
 unsigned int atoi(void *arg0);
 unsigned int foo() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 0U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int bar() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 1U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int main() {
     unsigned int var0;
@@ -24,35 +20,23 @@
     unsigned int var4;
     unsigned int var5;
     unsigned int var6;
-    unsigned int val7;
-    void *val8;
-    void *val9;
-    unsigned int call10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
+    void *val7;
+    unsigned int call8;
     var0 = 0U;
     var1 = 0U;
     var2 = (void *)0U;
     var3 = 0U;
-    val7 = var1;
-    if (1 >= (int)val7) {
+    if (1 >= (int)var1) {
         var6 = 1U;
-        val13 = var6;
-        var3 = val13;
+        var3 = var6;
     } else {
-        val8 = var2;
-        val9 = ((void **)val8)[1UL];
-        call10 = atoi(val9);
-        var4 = call10;
-        val11 = var4;
-        if ((int)val11 > 10) {
+        val7 = ((void **)var2)[1UL];
+        call8 = atoi(val7);
+        var4 = call8;
+        if ((int)var4 > 10) {
             var5 = 99U;
-            val12 = var5;
-            var3 = val12;
+            var3 = var5;
         }
     }
-    val14 = var3;
-    return val14;
+    return var3;
 }

struct.bc

--- /dev/fd/63	2022-08-12 10:57:12.525737532 +0000
+++ /dev/fd/62	2022-08-12 10:57:12.525737532 +0000
@@ -9,7 +9,6 @@
     unsigned int val1;
     unsigned int val2;
     unsigned int val3;
-    unsigned int val4;
     var0 = 0U;
     val1 = a.field0;
     if (val1 == 0U) {
@@ -19,6 +18,5 @@
         val2 = a.field0;
         var0 = val2;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

issue_183_literal_structs.bc

issue_127_uint128_t_lit.bc

struct_swap.bc

--- /dev/fd/63	2022-08-12 10:57:12.985737592 +0000
+++ /dev/fd/62	2022-08-12 10:57:12.985737592 +0000
@@ -10,14 +10,12 @@
     unsigned int val2;
     unsigned int val3;
     unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     val2 = a.field0;
     var1 = val2;
     val3 = a.field1;
     a.field0 = val3;
-    val4 = var1;
-    a.field1 = val4;
-    val5 = a.field0;
-    return val5;
+    a.field1 = var1;
+    val4 = a.field0;
+    return val4;
 }

init_list.bc

ret0.bc

trunc.bc

short.bc

--- /dev/fd/63	2022-08-12 10:57:13.497737659 +0000
+++ /dev/fd/62	2022-08-12 10:57:13.497737659 +0000
@@ -4,11 +4,9 @@
     unsigned int var0;
     unsigned short var1;
     unsigned short val2;
-    unsigned short val3;
     var0 = 0U;
     a = 13U;
     val2 = a;
     var1 = val2;
-    val3 = var1;
-    return (unsigned int)val3;
+    return (unsigned int)var1;
 }

cast.bc

nullptr.bc

--- /dev/fd/63	2022-08-12 10:57:13.753737693 +0000
+++ /dev/fd/62	2022-08-12 10:57:13.753737693 +0000
@@ -3,7 +3,6 @@
 unsigned int main() {
     unsigned int var0;
     void *val1;
-    unsigned int val2;
     var0 = 0U;
     val1 = ptr;
     if (val1 != (void *)0U) {
@@ -11,6 +10,5 @@
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

nested_struct.bc

array_swap.bc

--- /dev/fd/63	2022-08-12 10:57:14.077737735 +0000
+++ /dev/fd/62	2022-08-12 10:57:14.077737735 +0000
@@ -6,14 +6,12 @@
     unsigned int val2;
     unsigned int val3;
     unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     val2 = *a;
     var1 = val2;
     val3 = a[1UL];
     *a = val3;
-    val4 = var1;
-    a[1UL] = val4;
-    val5 = *a;
-    return val5;
+    a[1UL] = var1;
+    val4 = *a;
+    return val4;
 }

bitmask.bc

--- /dev/fd/63	2022-08-12 10:57:14.201737752 +0000
+++ /dev/fd/62	2022-08-12 10:57:14.205737752 +0000
@@ -3,7 +3,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned long val1;
-    unsigned int val2;
     var0 = 0U;
     val1 = a;
     if ((val1 & 4080UL) >> 4UL != 188UL) {
@@ -11,6 +10,5 @@
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

binops.bc

--- /dev/fd/63	2022-08-12 10:57:14.397737777 +0000
+++ /dev/fd/62	2022-08-12 10:57:14.397737777 +0000
@@ -4,49 +4,23 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
-    unsigned int val15;
     var0 = arg0;
-    val3 = var0;
-    var1 = val3 % 4U;
+    var1 = var0 % 4U;
     var2 = 0U;
-    val4 = var1;
-    if (val4 != 0U) {
-        val7 = var1;
-        if (val7 != 1U) {
-            val10 = var1;
-            if (val10 != 2U) {
-                val13 = var0;
-                val14 = var0;
-                var2 = (val13 + 3131756735U) * (5U & val14);
+    if (var1 != 0U) {
+        if (var1 != 1U) {
+            if (var1 != 2U) {
+                var2 = (var0 + 3131756735U) * (5U & var0);
             } else {
-                val11 = var0;
-                val12 = var0;
-                var2 = (val11 ^ 3131756735U) * (4U | val12);
+                var2 = (var0 ^ 3131756735U) * (4U | var0);
             }
         } else {
-            val8 = var0;
-            val9 = var0;
-            var2 = (val8 & 3131756735U) * (3U + val9);
+            var2 = (var0 & 3131756735U) * (3U + var0);
         }
     } else {
-        val5 = var0;
-        val6 = var0;
-        var2 = (val5 | 3131756735U) * (2U ^ val6);
+        var2 = (var0 | 3131756735U) * (2U ^ var0);
     }
-    val15 = var2;
-    return val15;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

float.bc

--- /dev/fd/63	2022-08-12 10:57:14.717737820 +0000
+++ /dev/fd/62	2022-08-12 10:57:14.717737820 +0000
@@ -4,21 +4,15 @@
     unsigned int var0;
     double var1;
     double var2;
-    double val3;
-    float val4;
-    double val5;
-    unsigned int val6;
+    float val3;
     var0 = 0U;
     var1 = 3.1428571428571428;
-    val3 = var1;
-    val4 = f;
-    var2 = val3 - (double)val4;
-    val5 = var2;
-    if (val5 >= 0.01) {
+    val3 = f;
+    var2 = var1 - (double)val3;
+    if (var2 >= 0.01) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val6 = var0;
-    return val6;
+    return var0;
 }

reg_test_structure_fields.bc

zeroinit.bc

--- /dev/fd/63	2022-08-12 10:57:15.037737862 +0000
+++ /dev/fd/62	2022-08-12 10:57:15.037737862 +0000
@@ -18,7 +18,6 @@
     unsigned int var0;
     unsigned int val1;
     unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
     val1 = r1.field1.field0;
     if (val1 == 0U) {
@@ -31,6 +30,5 @@
     } else {
         var0 = 1U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

funcptr.bc

--- /dev/fd/63	2022-08-12 10:57:15.281737894 +0000
+++ /dev/fd/62	2022-08-12 10:57:15.281737894 +0000
@@ -5,31 +5,22 @@
 unsigned int add(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }
 unsigned int sub(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 - val3;
+    return var0 - var1;
 }
 unsigned int main() {
     unsigned int var0;
     void *var1;
     unsigned int val2;
-    void *val3;
-    unsigned int call4;
+    unsigned int call3;
     var0 = 0U;
     val2 = x;
     if (val2 == 0U) {
@@ -37,7 +28,6 @@
     } else {
         var1 = &add;
     }
-    val3 = var1;
-    call4 = ((unsigned int (*)(unsigned int, unsigned int))val3)(2U, 2U);
-    return call4;
+    call3 = ((unsigned int (*)(unsigned int, unsigned int))var1)(2U, 2U);
+    return call3;
 }

goto_loop.bc

--- /dev/fd/63	2022-08-12 10:57:15.473737919 +0000
+++ /dev/fd/62	2022-08-12 10:57:15.473737919 +0000
@@ -4,41 +4,23 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
     while (1U)
         {
-            val2 = var1;
-            var1 = val2 + 1U;
-            val3 = var1;
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
+            var1 = var1 + 1U;
+            if (var1 == 1U) {
+                printf("%d\n", var1);
+            } else if (var1 != 2U) {
+                break;
             } else {
-                val5 = var1;
-                if (val5 != 2U) {
-                    break;
-                } else {
-                    val6 = var1;
-                    printf("%d\n", val6);
-                }
+                printf("%d\n", var1);
             }
         }
-    if (val3 != 1U && val5 != 2U) {
-        val7 = var1;
-        if (val7 == 3U) {
-            val8 = var1;
-            printf("%d\n", val8);
+    if (var1 != 1U && var1 != 2U) {
+        if (var1 == 3U) {
+            printf("%d\n", var1);
         }
-        val9 = var0;
-        return val9;
+        return var0;
     }
 }

branch.bc

--- /dev/fd/63	2022-08-12 10:57:15.841737967 +0000
+++ /dev/fd/62	2022-08-12 10:57:15.841737967 +0000
@@ -13,18 +13,15 @@
     unsigned long var2;
     unsigned int val3;
     unsigned int val4;
-    unsigned long val5;
-    unsigned int val6;
-    unsigned long val7;
+    unsigned int val5;
     var0 = 0U;
     var1 = (unsigned long)(&a);
     var2 = (unsigned long)(&c);
     val3 = c;
     if (val3 == 0U) {
-        val6 = c;
-        printf("Global variable 'c' of value %u is at ", val6);
-        val7 = var2;
-        if (val7 % 2UL != 0UL) {
+        val5 = c;
+        printf("Global variable 'c' of value %u is at ", val5);
+        if (var2 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");
@@ -32,8 +29,7 @@
     } else {
         val4 = a;
         printf("Global variable 'a' of value %u is at ", val4);
-        val5 = var1;
-        if (val5 % 2UL != 0UL) {
+        if (var1 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");

bitops.bc

--- /dev/fd/63	2022-08-12 10:57:16.153738008 +0000
+++ /dev/fd/62	2022-08-12 10:57:16.153738008 +0000
@@ -10,28 +10,20 @@
     unsigned int val5;
     unsigned int val6;
     unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
     var0 = 0U;
     var1 = 0U;
     val2 = a;
     val3 = b;
     if (((int)val2 >> val3 & 1U) != 0U) {
-        val4 = var1;
-        var1 = val4 + 1U;
+        var1 = var1 + 1U;
     }
-    val5 = a;
-    val6 = b;
-    if ((val5 >> val6 ^ 1U) != 0U) {
-        val7 = var1;
-        var1 = val7 + 2U;
+    val4 = a;
+    val5 = b;
+    if ((val4 >> val5 ^ 1U) != 0U) {
+        var1 = var1 + 2U;
     }
-    val8 = a;
-    val9 = b;
-    val10 = var1;
-    var1 = val10 + 3U;
-    val11 = var1;
-    return val11;
+    val6 = a;
+    val7 = b;
+    var1 = var1 + 3U;
+    return var1;
 }

vectors.bc

--- /dev/fd/63	2022-08-12 10:57:16.413738042 +0000
+++ /dev/fd/62	2022-08-12 10:57:16.413738042 +0000
@@ -10,43 +10,23 @@
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var5;
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var6;
     void *var7;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val8;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val9;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val10;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val11;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val12;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    void *val18;
-    unsigned int val19;
-    void *val20;
-    unsigned int val21;
+    unsigned int val8;
+    unsigned int val9;
+    unsigned int val10;
+    unsigned int val11;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){1U, 2U, 3U, 4U};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){4U, 3U, 2U, 1U};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    val18 = var7;
-    val19 = ((unsigned int *)val18)[2UL];
-    val20 = var7;
-    val21 = ((unsigned int *)val20)[3UL];
-    printf("a=[%d %d %d %d]\n", val15, val17, val19, val21);
+    val8 = *((unsigned int *)var7);
+    val9 = ((unsigned int *)var7)[1UL];
+    val10 = ((unsigned int *)var7)[2UL];
+    val11 = ((unsigned int *)var7)[3UL];
+    printf("a=[%d %d %d %d]\n", val8, val9, val10, val11);
     return 0U;
 }

issue_4.bc

--- /dev/fd/63	2022-08-12 10:57:16.541738059 +0000
+++ /dev/fd/62	2022-08-12 10:57:16.541738059 +0000
@@ -5,32 +5,17 @@
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = arg0;
     var1 = arg1;
     var2 = 0U;
     var3 = 0U;
-    do {
-        val4 = var3;
-        if (val4 != 42U) {
-            val5 = var0;
-            val6 = var2;
-            var2 = val6 + val5;
-            val7 = var1;
-            val8 = var2;
-            var2 = val8 % val7;
-            val9 = var3;
-            var3 = val9 + 1U;
+    while (var3 != 42U)
+        {
+            var2 = var2 + var0;
+            var2 = var2 % var1;
+            var3 = var3 + 1U;
         }
-    } while (val4 != 42U);
-    val10 = var2;
-    return val10;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

conflicting_global.bc

--- /dev/fd/63	2022-08-12 10:57:16.757738088 +0000
+++ /dev/fd/62	2022-08-12 10:57:16.757738088 +0000
@@ -5,11 +5,9 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
-    unsigned int val2;
     var0 = 4U;
-    val1 = var0;
+    printf("%d\n", var0);
+    val1 = a;
     printf("%d\n", val1);
-    val2 = a;
-    printf("%d\n", val2);
     return 0U;
 }

issue_123_uint128_t.bc

--- /dev/fd/63	2022-08-12 10:57:16.889738105 +0000
+++ /dev/fd/62	2022-08-12 10:57:16.889738105 +0000
@@ -4,13 +4,11 @@
     unsigned int var0;
     unsigned __int128 var1;
     unsigned long val2;
-    unsigned __int128 val3;
-    unsigned long val4;
+    unsigned long val3;
     var0 = 0U;
     val2 = x;
     var1 = val2;
-    val3 = var1;
-    x = val3;
-    val4 = x;
-    return (unsigned int)(val4 & 255UL);
+    x = var1;
+    val3 = x;
+    return (unsigned int)(val3 & 255UL);
 }

fizzbuzz_stateful.bc

--- /dev/fd/63	2022-08-12 10:57:17.017738122 +0000
+++ /dev/fd/62	2022-08-12 10:57:17.017738122 +0000
@@ -14,7 +14,6 @@
     unsigned int val4;
     unsigned int val5;
     unsigned int val6;
-    unsigned int val7;
     val1 = i;
     var0 = val1;
     val2 = i;
@@ -34,15 +33,13 @@
             printf("%d", val6);
         }
     }
-    val7 = var0;
-    i = val7;
+    i = var0;
     return;
 }
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
     unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     i = 1U;
     do {
@@ -54,6 +51,5 @@
             i = val2 + 1U;
         }
     } while ((int)val1 < 16);
-    val3 = var0;
-    return val3;
+    return var0;
 }

issue_94_strncmp.bc

bool.bc

--- /dev/fd/63	2022-08-12 10:57:17.653738205 +0000
+++ /dev/fd/62	2022-08-12 10:57:17.657738206 +0000
@@ -5,7 +5,6 @@
     unsigned int var0;
     unsigned long val1;
     unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
     val1 = a;
     val2 = b;
@@ -14,6 +13,5 @@
     } else {
         var0 = 0U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

global_using_function_decl.bc

fcmp.bc

--- /dev/fd/63	2022-08-12 10:57:17.977738248 +0000
+++ /dev/fd/62	2022-08-12 10:57:17.977738248 +0000
@@ -17,56 +17,18 @@
     unsigned int var9;
     float call10;
     float call11;
-    float val12;
-    float val13;
-    float val14;
-    float val15;
-    float val16;
-    float val17;
-    float val18;
-    float val19;
-    float val20;
-    float val21;
-    float val22;
-    float val23;
-    float val24;
-    unsigned int val25;
-    unsigned int val26;
-    unsigned int val27;
-    unsigned int val28;
-    unsigned int val29;
-    unsigned int val30;
     var0 = __builtin_nan("");
     call10 = atof("3");
     var1 = call10;
     call11 = atof("2");
     var2 = call11;
-    val12 = var1;
-    var3 = -val12;
-    val13 = var3;
-    val14 = var0;
-    var4 = (val13 > val14);
-    val15 = var3;
-    val16 = var0;
-    var5 = (val15 >= val16);
-    val17 = var1;
-    val18 = var2;
-    var6 = (val17 > val18);
-    val19 = var1;
-    val20 = var2;
-    var7 = (val19 >= val20);
-    val21 = var1;
-    val22 = var0;
-    var8 = __builtin_isunordered(val21, val22);
-    val23 = var1;
-    val24 = var2;
-    var9 = __builtin_isunordered(val23, val24);
-    val25 = var4;
-    val26 = var5;
-    val27 = var6;
-    val28 = var7;
-    val29 = var8;
-    val30 = var9;
-    printf("%d %d %d %d %d %d\n", val25, val26, val27, val28, val29, val30);
+    var3 = -var1;
+    var4 = (var3 > var0);
+    var5 = (var3 >= var0);
+    var6 = (var1 > var2);
+    var7 = (var1 >= var2);
+    var8 = __builtin_isunordered(var1, var0);
+    var9 = __builtin_isunordered(var1, var2);
+    printf("%d %d %d %d %d %d\n", var4, var5, var6, var7, var8, var9);
     return 0U;
 }

byval_struct.bc

--- /dev/fd/63	2022-08-12 10:57:18.105738265 +0000
+++ /dev/fd/62	2022-08-12 10:57:18.109738265 +0000
@@ -31,7 +31,6 @@
     unsigned int call5;
     unsigned long call6;
     unsigned long val7;
-    unsigned long val8;
     call2 = atoi("1");
     var0.field0 = (long)call2;
     call3 = atoi("2");
@@ -43,7 +42,6 @@
     call6 = get_3x(var0);
     var1 = call6;
     val7 = var0.field0;
-    val8 = var1;
-    printf("%lld %lld\n", val7, val8);
+    printf("%lld %lld\n", val7, var1);
     return 0U;
 }

nested_while.bc

--- /dev/fd/63	2022-08-12 10:57:18.237738282 +0000
+++ /dev/fd/62	2022-08-12 10:57:18.237738282 +0000
@@ -8,40 +8,24 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int call2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = 0U;
     call2 = atoi("5");
     var1 = call2;
-    val3 = var1;
-    if ((int)val3 > 10) {
-        do {
-            val4 = var1;
-            if ((int)val4 < 20) {
-                val5 = var1;
-                var1 = val5 + 1U;
-                val6 = var1;
-                printf("loop1 x: %d\n", val6);
+    if ((int)var1 > 10) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop1 x: %d\n", var1);
             }
-        } while ((int)val4 < 20);
     }
-    if ((int)val3 <= 10 || (int)val4 >= 20) {
-        do {
-            val7 = var1;
-            if ((int)val7 < 20) {
-                val8 = var1;
-                var1 = val8 + 1U;
-                val9 = var1;
-                printf("loop2 x: %d\n", val9);
+    if ((int)var1 >= 20 || (int)var1 <= 10) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop2 x: %d\n", var1);
             }
-        } while ((int)val7 < 20);
-        val10 = var0;
-        return val10;
+    }
+    if (((int)var1 >= 20 || (int)var1 <= 10) && (int)var1 >= 20) {
+        return var0;
     }
 }

func_cond_two_arg.bc

--- /dev/fd/63	2022-08-12 10:57:18.625738333 +0000
+++ /dev/fd/62	2022-08-12 10:57:18.625738333 +0000
@@ -5,20 +5,15 @@
 unsigned int f(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return (unsigned int)((int)val2 < (int)val3);
+    return (unsigned int)((int)var0 < (int)var1);
 }
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
     unsigned int val2;
     unsigned int call3;
-    unsigned int val4;
     var0 = 0U;
     val1 = x;
     val2 = y;
@@ -28,6 +23,5 @@
     } else {
         var0 = 1U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

zext.bc

inttoptr.bc

--- /dev/fd/63	2022-08-12 10:57:18.953738376 +0000
+++ /dev/fd/62	2022-08-12 10:57:18.953738376 +0000
@@ -4,17 +4,13 @@
     unsigned int var0;
     void *var1;
     unsigned long val2;
-    void *val3;
-    unsigned int val4;
     var0 = 0U;
     val2 = a;
     var1 = (void *)val2;
-    val3 = var1;
-    if (val3 == (void *)0U) {
+    if (var1 == (void *)0U) {
         var0 = 0U;
     } else {
         var0 = 42U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

assert.bc

--- /dev/fd/63	2022-08-12 10:57:19.145738401 +0000
+++ /dev/fd/62	2022-08-12 10:57:19.145738401 +0000
@@ -17,15 +17,17 @@
         __assert_fail("a % 3", "assert.c", 6U, "int main(void)");
     } else {
         val2 = a;
-        if (val2 % 7UL == 0UL) {
-            __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
-        } else {
-            val3 = a;
-            if (val3 % 15UL == 0UL) {
-                __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
-            } else {
-                return 0U;
-            }
-        }
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL == 0UL) {
+        __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL) {
+        val3 = a;
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL && val3 % 15UL == 0UL) {
+        __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL && val3 % 15UL != 0UL) {
+        return 0U;
     }
 }

loop.bc

--- /dev/fd/63	2022-08-12 10:57:19.501738448 +0000
+++ /dev/fd/62	2022-08-12 10:57:19.501738448 +0000
@@ -6,26 +6,17 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if (val2 != 10U) {
-            val3 = var1;
-            printf("Variable at %d is ", val3);
-            val4 = var1;
-            if (val4 % 2U != 0U) {
+    while (var1 != 10U)
+        {
+            printf("Variable at %d is ", var1);
+            if (var1 % 2U != 0U) {
                 printf("odd.\n");
             } else {
                 printf("even.\n");
             }
-            val5 = var1;
-            var1 = val5 + 1U;
+            var1 = var1 + 1U;
         }
-    } while (val2 != 10U);
     return 0U;
 }

switch.bc

--- /dev/fd/63	2022-08-12 10:57:19.777738484 +0000
+++ /dev/fd/62	2022-08-12 10:57:19.777738484 +0000
@@ -4,7 +4,6 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     var1 = 0U;
     val2 = a;
@@ -30,6 +29,5 @@
         }
         break;
     }
-    val3 = var1;
-    return val3;
+    return var1;
 }

template_parameter_pack.bc

--- /dev/fd/63	2022-08-12 10:57:20.001738514 +0000
+++ /dev/fd/62	2022-08-12 10:57:20.001738514 +0000
@@ -17,71 +17,43 @@
     unsigned int var2;
     unsigned int var3;
     unsigned int var4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int call10;
+    unsigned int call5;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
     var4 = arg4;
-    val5 = var0;
-    val6 = var1;
-    val7 = var2;
-    val8 = var3;
-    val9 = var4;
-    call10 = _Z3sumIiJiiiEET_S0_DpT0_(val6, val7, val8, val9);
-    return val5 + call10;
+    call5 = _Z3sumIiJiiiEET_S0_DpT0_(var1, var2, var3, var4);
+    return var0 + call5;
 }
 unsigned int _Z3sumIiJiiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2, unsigned int arg3) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int call8;
+    unsigned int call4;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
-    val4 = var0;
-    val5 = var1;
-    val6 = var2;
-    val7 = var3;
-    call8 = _Z3sumIiJiiEET_S0_DpT0_(val5, val6, val7);
-    return val4 + call8;
+    call4 = _Z3sumIiJiiEET_S0_DpT0_(var1, var2, var3);
+    return var0 + call4;
 }
 unsigned int _Z3sumIiJiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int call6;
+    unsigned int call3;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
-    val3 = var0;
-    val4 = var1;
-    val5 = var2;
-    call6 = _Z3sumIiET_S0_S0_(val4, val5);
-    return val3 + call6;
+    call3 = _Z3sumIiET_S0_S0_(var1, var2);
+    return var0 + call3;
 }
 unsigned int _Z3sumIiET_S0_S0_(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }

byval_tail_nogep.ll

byval_tail_gep.ll

github-actions[bot] avatar Aug 12 '22 10:08 github-actions[bot]

For some reason Z3 is not able to recognize the cascading conditions in switch_loop without the context aware simplifier, but that is too slow to use in that place.

frabert avatar Aug 12 '22 10:08 frabert

LGTM. Can I ask you to make an issue for the CBR investigation I mentioned above? So that it's not forgotten.

surovic avatar Aug 12 '22 14:08 surovic

See the diff generated by this PR for the tests here: https://github.com/lifting-bits/rellic/actions/runs/2847400621

fizzbuzz.bc

--- /dev/fd/63	2022-08-12 14:45:07.113272859 +0000
+++ /dev/fd/62	2022-08-12 14:45:07.113272859 +0000
@@ -7,44 +7,24 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if ((int)val2 < 30) {
-            val3 = var1;
-            if ((int)val3 % 3 == 0U) {
-                val4 = var1;
-                if ((int)val4 % 5 == 0U) {
-                    printf("fizzbuzz\n");
-                }
-            }
-            if ((int)val3 % 3 != 0U || !((int)val4 % 5 == 0U || (int)val3 % 3 != 0U)) {
-                val5 = var1;
-                if ((int)val5 % 3 != 0U) {
-                    val6 = var1;
-                    if ((int)val6 % 5 != 0U) {
-                        val7 = var1;
-                        printf("%d\n", val7);
+    while ((int)var1 < 30)
+        {
+            if ((int)var1 % 3 != 0U || !((int)var1 % 5 == 0U || (int)var1 % 3 != 0U)) {
+                if ((int)var1 % 3 != 0U) {
+                    if ((int)var1 % 5 != 0U) {
+                        printf("%d\n", var1);
                     } else {
                         printf("buzz\n");
                     }
                 } else {
                     printf("fizz\n");
                 }
+            } else {
+                printf("fizzbuzz\n");
             }
-            val8 = var1;
-            var1 = val8 + 1U;
+            var1 = var1 + 1U;
         }
-    } while ((int)val2 < 30);
-    val9 = var0;
-    return val9;
+    return var0;
 }

typedefs_of_typedefs.bc

--- /dev/fd/63	2022-08-12 14:45:07.649271723 +0000
+++ /dev/fd/62	2022-08-12 14:45:07.649271723 +0000
@@ -12,44 +12,28 @@
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var5;
     __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long var6;
     void *var7;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val8;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val9;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val10;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val11;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val12;
-    __attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    unsigned long val18;
-    unsigned long val19;
-    unsigned long val20;
-    unsigned long val21;
+    unsigned int val8;
+    unsigned int val9;
+    unsigned long val10;
+    unsigned long val11;
+    unsigned long val12;
+    unsigned long val13;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){1UL, 2UL};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(2 * sizeof(unsigned long)))) unsigned long){4UL, 3UL};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    printf("a=[%d %d]\n", val15, val17);
-    val18 = *array;
-    val19 = array[1UL];
-    val20 = array[2UL];
-    val21 = array[3UL];
-    printf("array=[%lld %lld %lld %lld]\n", val18, val19, val20, val21);
+    val8 = *((unsigned int *)var7);
+    val9 = ((unsigned int *)var7)[1UL];
+    printf("a=[%d %d]\n", val8, val9);
+    val10 = *array;
+    val11 = array[1UL];
+    val12 = array[2UL];
+    val13 = array[3UL];
+    printf("array=[%lld %lld %lld %lld]\n", val10, val11, val12, val13);
     return 0U;
 }

switch_loop.bc

--- /dev/fd/63	2022-08-12 14:45:07.749271511 +0000
+++ /dev/fd/62	2022-08-12 14:45:07.749271511 +0000
@@ -4,36 +4,26 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        var1 = val2 + 1U;
-        val3 = var1;
-        if (!(val3 != 1U && val3 != 2U && val3 != 3U)) {
-            if (val3 == 3U) {
-                val6 = var1;
-                printf("%d\n", val6);
+    while (1U)
+        {
+            var1 = var1 + 1U;
+            if (var1 != 1U && var1 != 2U && var1 != 3U) {
                 break;
             }
-            if (val3 == 2U) {
-                val5 = var1;
-                printf("%d\n", val5);
+            if (var1 == 3U) {
+                printf("%d\n", var1);
+                break;
+            }
+            if (var1 == 2U) {
+                printf("%d\n", var1);
             }
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
+            if (var1 == 1U) {
+                printf("%d\n", var1);
             }
         }
-    } while (!(val3 != 1U && val3 != 2U && val3 != 3U));
-    if (val3 == 3U || !(val3 == 2U || val3 == 3U || val3 == 1U)) {
-        val7 = var0;
-        return val7;
+    if (var1 == 3U || !(var1 == 2U || var1 == 3U || var1 == 1U)) {
+        return var0;
     }
 }

func_cond_zero_arg.bc

--- /dev/fd/63	2022-08-12 14:45:08.097270774 +0000
+++ /dev/fd/62	2022-08-12 14:45:08.097270774 +0000
@@ -8,7 +8,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int call1;
-    unsigned int val2;
     var0 = 0U;
     call1 = f();
     if (call1 == 0U) {
@@ -16,6 +15,5 @@
     } else {
         var0 = 1U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

conflicting_names.bc

--- /dev/fd/63	2022-08-12 14:45:08.249270452 +0000
+++ /dev/fd/62	2022-08-12 14:45:08.249270452 +0000
@@ -4,17 +4,13 @@
 unsigned int atoi(void *arg0);
 unsigned int foo() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 0U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int bar() {
     unsigned int var0;
-    unsigned int val1;
     var0 = 1U;
-    val1 = var0;
-    return val1;
+    return var0;
 }
 unsigned int main() {
     unsigned int var0;
@@ -24,35 +20,23 @@
     unsigned int var4;
     unsigned int var5;
     unsigned int var6;
-    unsigned int val7;
-    void *val8;
-    void *val9;
-    unsigned int call10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
+    void *val7;
+    unsigned int call8;
     var0 = 0U;
     var1 = 0U;
     var2 = (void *)0U;
     var3 = 0U;
-    val7 = var1;
-    if (1 >= (int)val7) {
+    if (1 >= (int)var1) {
         var6 = 1U;
-        val13 = var6;
-        var3 = val13;
+        var3 = var6;
     } else {
-        val8 = var2;
-        val9 = ((void **)val8)[1UL];
-        call10 = atoi(val9);
-        var4 = call10;
-        val11 = var4;
-        if ((int)val11 > 10) {
+        val7 = ((void **)var2)[1UL];
+        call8 = atoi(val7);
+        var4 = call8;
+        if ((int)var4 > 10) {
             var5 = 99U;
-            val12 = var5;
-            var3 = val12;
+            var3 = var5;
         }
     }
-    val14 = var3;
-    return val14;
+    return var3;
 }

struct.bc

--- /dev/fd/63	2022-08-12 14:45:08.449270029 +0000
+++ /dev/fd/62	2022-08-12 14:45:08.449270029 +0000
@@ -9,7 +9,6 @@
     unsigned int val1;
     unsigned int val2;
     unsigned int val3;
-    unsigned int val4;
     var0 = 0U;
     val1 = a.field0;
     if (val1 == 0U) {
@@ -19,6 +18,5 @@
         val2 = a.field0;
         var0 = val2;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

issue_183_literal_structs.bc

issue_127_uint128_t_lit.bc

struct_swap.bc

--- /dev/fd/63	2022-08-12 14:45:08.805269276 +0000
+++ /dev/fd/62	2022-08-12 14:45:08.805269276 +0000
@@ -10,14 +10,12 @@
     unsigned int val2;
     unsigned int val3;
     unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     val2 = a.field0;
     var1 = val2;
     val3 = a.field1;
     a.field0 = val3;
-    val4 = var1;
-    a.field1 = val4;
-    val5 = a.field0;
-    return val5;
+    a.field1 = var1;
+    val4 = a.field0;
+    return val4;
 }

init_list.bc

ret0.bc

trunc.bc

short.bc

--- /dev/fd/63	2022-08-12 14:45:09.197268446 +0000
+++ /dev/fd/62	2022-08-12 14:45:09.197268446 +0000
@@ -4,11 +4,9 @@
     unsigned int var0;
     unsigned short var1;
     unsigned short val2;
-    unsigned short val3;
     var0 = 0U;
     a = 13U;
     val2 = a;
     var1 = val2;
-    val3 = var1;
-    return (unsigned int)val3;
+    return (unsigned int)var1;
 }

cast.bc

nullptr.bc

--- /dev/fd/63	2022-08-12 14:45:09.397268022 +0000
+++ /dev/fd/62	2022-08-12 14:45:09.397268022 +0000
@@ -3,7 +3,6 @@
 unsigned int main() {
     unsigned int var0;
     void *val1;
-    unsigned int val2;
     var0 = 0U;
     val1 = ptr;
     if (val1 != (void *)0U) {
@@ -11,6 +10,5 @@
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

nested_struct.bc

array_swap.bc

--- /dev/fd/63	2022-08-12 14:45:09.653267481 +0000
+++ /dev/fd/62	2022-08-12 14:45:09.653267481 +0000
@@ -6,14 +6,12 @@
     unsigned int val2;
     unsigned int val3;
     unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     val2 = *a;
     var1 = val2;
     val3 = a[1UL];
     *a = val3;
-    val4 = var1;
-    a[1UL] = val4;
-    val5 = *a;
-    return val5;
+    a[1UL] = var1;
+    val4 = *a;
+    return val4;
 }

bitmask.bc

--- /dev/fd/63	2022-08-12 14:45:09.753267269 +0000
+++ /dev/fd/62	2022-08-12 14:45:09.753267269 +0000
@@ -3,7 +3,6 @@
 unsigned int main() {
     unsigned int var0;
     unsigned long val1;
-    unsigned int val2;
     var0 = 0U;
     val1 = a;
     if ((val1 & 4080UL) >> 4UL != 188UL) {
@@ -11,6 +10,5 @@
     } else {
         var0 = 0U;
     }
-    val2 = var0;
-    return val2;
+    return var0;
 }

binops.bc

--- /dev/fd/63	2022-08-12 14:45:09.909266939 +0000
+++ /dev/fd/62	2022-08-12 14:45:09.909266939 +0000
@@ -4,49 +4,23 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
-    unsigned int val12;
-    unsigned int val13;
-    unsigned int val14;
-    unsigned int val15;
     var0 = arg0;
-    val3 = var0;
-    var1 = val3 % 4U;
+    var1 = var0 % 4U;
     var2 = 0U;
-    val4 = var1;
-    if (val4 != 0U) {
-        val7 = var1;
-        if (val7 != 1U) {
-            val10 = var1;
-            if (val10 != 2U) {
-                val13 = var0;
-                val14 = var0;
-                var2 = (val13 + 3131756735U) * (5U & val14);
+    if (var1 != 0U) {
+        if (var1 != 1U) {
+            if (var1 != 2U) {
+                var2 = (var0 + 3131756735U) * (5U & var0);
             } else {
-                val11 = var0;
-                val12 = var0;
-                var2 = (val11 ^ 3131756735U) * (4U | val12);
+                var2 = (var0 ^ 3131756735U) * (4U | var0);
             }
         } else {
-            val8 = var0;
-            val9 = var0;
-            var2 = (val8 & 3131756735U) * (3U + val9);
+            var2 = (var0 & 3131756735U) * (3U + var0);
         }
     } else {
-        val5 = var0;
-        val6 = var0;
-        var2 = (val5 | 3131756735U) * (2U ^ val6);
+        var2 = (var0 | 3131756735U) * (2U ^ var0);
     }
-    val15 = var2;
-    return val15;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

float.bc

--- /dev/fd/63	2022-08-12 14:45:10.185266355 +0000
+++ /dev/fd/62	2022-08-12 14:45:10.185266355 +0000
@@ -4,21 +4,15 @@
     unsigned int var0;
     double var1;
     double var2;
-    double val3;
-    float val4;
-    double val5;
-    unsigned int val6;
+    float val3;
     var0 = 0U;
     var1 = 3.1428571428571428;
-    val3 = var1;
-    val4 = f;
-    var2 = val3 - (double)val4;
-    val5 = var2;
-    if (val5 >= 0.01) {
+    val3 = f;
+    var2 = var1 - (double)val3;
+    if (var2 >= 0.01) {
         var0 = 1U;
     } else {
         var0 = 0U;
     }
-    val6 = var0;
-    return val6;
+    return var0;
 }

reg_test_structure_fields.bc

zeroinit.bc

--- /dev/fd/63	2022-08-12 14:45:10.441265813 +0000
+++ /dev/fd/62	2022-08-12 14:45:10.441265813 +0000
@@ -18,7 +18,6 @@
     unsigned int var0;
     unsigned int val1;
     unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
     val1 = r1.field1.field0;
     if (val1 == 0U) {
@@ -31,6 +30,5 @@
     } else {
         var0 = 1U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

funcptr.bc

--- /dev/fd/63	2022-08-12 14:45:10.649265372 +0000
+++ /dev/fd/62	2022-08-12 14:45:10.649265372 +0000
@@ -5,31 +5,22 @@
 unsigned int add(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }
 unsigned int sub(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 - val3;
+    return var0 - var1;
 }
 unsigned int main() {
     unsigned int var0;
     void *var1;
     unsigned int val2;
-    void *val3;
-    unsigned int call4;
+    unsigned int call3;
     var0 = 0U;
     val2 = x;
     if (val2 == 0U) {
@@ -37,7 +28,6 @@
     } else {
         var1 = &add;
     }
-    val3 = var1;
-    call4 = ((unsigned int (*)(unsigned int, unsigned int))val3)(2U, 2U);
-    return call4;
+    call3 = ((unsigned int (*)(unsigned int, unsigned int))var1)(2U, 2U);
+    return call3;
 }

goto_loop.bc

--- /dev/fd/63	2022-08-12 14:45:10.805265042 +0000
+++ /dev/fd/62	2022-08-12 14:45:10.805265042 +0000
@@ -4,41 +4,23 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
     var0 = 0U;
     var1 = 0U;
     while (1U)
         {
-            val2 = var1;
-            var1 = val2 + 1U;
-            val3 = var1;
-            if (val3 == 1U) {
-                val4 = var1;
-                printf("%d\n", val4);
+            var1 = var1 + 1U;
+            if (var1 == 1U) {
+                printf("%d\n", var1);
+            } else if (var1 != 2U) {
+                break;
             } else {
-                val5 = var1;
-                if (val5 != 2U) {
-                    break;
-                } else {
-                    val6 = var1;
-                    printf("%d\n", val6);
-                }
+                printf("%d\n", var1);
             }
         }
-    if (val3 != 1U && val5 != 2U) {
-        val7 = var1;
-        if (val7 == 3U) {
-            val8 = var1;
-            printf("%d\n", val8);
+    if (var1 != 1U && var1 != 2U) {
+        if (var1 == 3U) {
+            printf("%d\n", var1);
         }
-        val9 = var0;
-        return val9;
+        return var0;
     }
 }

branch.bc

--- /dev/fd/63	2022-08-12 14:45:11.101264416 +0000
+++ /dev/fd/62	2022-08-12 14:45:11.101264416 +0000
@@ -13,18 +13,15 @@
     unsigned long var2;
     unsigned int val3;
     unsigned int val4;
-    unsigned long val5;
-    unsigned int val6;
-    unsigned long val7;
+    unsigned int val5;
     var0 = 0U;
     var1 = (unsigned long)(&a);
     var2 = (unsigned long)(&c);
     val3 = c;
     if (val3 == 0U) {
-        val6 = c;
-        printf("Global variable 'c' of value %u is at ", val6);
-        val7 = var2;
-        if (val7 % 2UL != 0UL) {
+        val5 = c;
+        printf("Global variable 'c' of value %u is at ", val5);
+        if (var2 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");
@@ -32,8 +29,7 @@
     } else {
         val4 = a;
         printf("Global variable 'a' of value %u is at ", val4);
-        val5 = var1;
-        if (val5 % 2UL != 0UL) {
+        if (var1 % 2UL != 0UL) {
             printf("odd ");
         } else {
             printf("even ");

bitops.bc

--- /dev/fd/63	2022-08-12 14:45:11.377263832 +0000
+++ /dev/fd/62	2022-08-12 14:45:11.377263832 +0000
@@ -10,28 +10,20 @@
     unsigned int val5;
     unsigned int val6;
     unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
-    unsigned int val11;
     var0 = 0U;
     var1 = 0U;
     val2 = a;
     val3 = b;
     if (((int)val2 >> val3 & 1U) != 0U) {
-        val4 = var1;
-        var1 = val4 + 1U;
+        var1 = var1 + 1U;
     }
-    val5 = a;
-    val6 = b;
-    if ((val5 >> val6 ^ 1U) != 0U) {
-        val7 = var1;
-        var1 = val7 + 2U;
+    val4 = a;
+    val5 = b;
+    if ((val4 >> val5 ^ 1U) != 0U) {
+        var1 = var1 + 2U;
     }
-    val8 = a;
-    val9 = b;
-    val10 = var1;
-    var1 = val10 + 3U;
-    val11 = var1;
-    return val11;
+    val6 = a;
+    val7 = b;
+    var1 = var1 + 3U;
+    return var1;
 }

vectors.bc

--- /dev/fd/63	2022-08-12 14:45:11.593263374 +0000
+++ /dev/fd/62	2022-08-12 14:45:11.593263374 +0000
@@ -10,43 +10,23 @@
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var5;
     __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int var6;
     void *var7;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val8;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val9;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val10;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val11;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val12;
-    __attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int val13;
-    void *val14;
-    unsigned int val15;
-    void *val16;
-    unsigned int val17;
-    void *val18;
-    unsigned int val19;
-    void *val20;
-    unsigned int val21;
+    unsigned int val8;
+    unsigned int val9;
+    unsigned int val10;
+    unsigned int val11;
     var0 = 0U;
     var4 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){1U, 2U, 3U, 4U};
-    val8 = var4;
-    var1 = val8;
+    var1 = var4;
     var5 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){};
-    val9 = var5;
-    var2 = val9;
+    var2 = var5;
     var6 = (__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int){4U, 3U, 2U, 1U};
-    val10 = var6;
-    var3 = val10;
-    val11 = var1;
-    val12 = var2;
-    val13 = var3;
-    var1 = val11 * val12 + val13;
+    var3 = var6;
+    var1 = var1 * var2 + var3;
     var7 = (&var1);
-    val14 = var7;
-    val15 = *((unsigned int *)val14);
-    val16 = var7;
-    val17 = ((unsigned int *)val16)[1UL];
-    val18 = var7;
-    val19 = ((unsigned int *)val18)[2UL];
-    val20 = var7;
-    val21 = ((unsigned int *)val20)[3UL];
-    printf("a=[%d %d %d %d]\n", val15, val17, val19, val21);
+    val8 = *((unsigned int *)var7);
+    val9 = ((unsigned int *)var7)[1UL];
+    val10 = ((unsigned int *)var7)[2UL];
+    val11 = ((unsigned int *)var7)[3UL];
+    printf("a=[%d %d %d %d]\n", val8, val9, val10, val11);
     return 0U;
 }

issue_4.bc

--- /dev/fd/63	2022-08-12 14:45:11.693263163 +0000
+++ /dev/fd/62	2022-08-12 14:45:11.693263163 +0000
@@ -5,32 +5,17 @@
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = arg0;
     var1 = arg1;
     var2 = 0U;
     var3 = 0U;
-    do {
-        val4 = var3;
-        if (val4 != 42U) {
-            val5 = var0;
-            val6 = var2;
-            var2 = val6 + val5;
-            val7 = var1;
-            val8 = var2;
-            var2 = val8 % val7;
-            val9 = var3;
-            var3 = val9 + 1U;
+    while (var3 != 42U)
+        {
+            var2 = var2 + var0;
+            var2 = var2 % var1;
+            var3 = var3 + 1U;
         }
-    } while (val4 != 42U);
-    val10 = var2;
-    return val10;
+    return var2;
 }
 unsigned int main() {
     unsigned int var0;

conflicting_global.bc

--- /dev/fd/63	2022-08-12 14:45:11.873262782 +0000
+++ /dev/fd/62	2022-08-12 14:45:11.873262782 +0000
@@ -5,11 +5,9 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
-    unsigned int val2;
     var0 = 4U;
-    val1 = var0;
+    printf("%d\n", var0);
+    val1 = a;
     printf("%d\n", val1);
-    val2 = a;
-    printf("%d\n", val2);
     return 0U;
 }

issue_123_uint128_t.bc

--- /dev/fd/63	2022-08-12 14:45:11.969262579 +0000
+++ /dev/fd/62	2022-08-12 14:45:11.969262579 +0000
@@ -4,13 +4,11 @@
     unsigned int var0;
     unsigned __int128 var1;
     unsigned long val2;
-    unsigned __int128 val3;
-    unsigned long val4;
+    unsigned long val3;
     var0 = 0U;
     val2 = x;
     var1 = val2;
-    val3 = var1;
-    x = val3;
-    val4 = x;
-    return (unsigned int)(val4 & 255UL);
+    x = var1;
+    val3 = x;
+    return (unsigned int)(val3 & 255UL);
 }

fizzbuzz_stateful.bc

--- /dev/fd/63	2022-08-12 14:45:12.069262367 +0000
+++ /dev/fd/62	2022-08-12 14:45:12.069262367 +0000
@@ -14,7 +14,6 @@
     unsigned int val4;
     unsigned int val5;
     unsigned int val6;
-    unsigned int val7;
     val1 = i;
     var0 = val1;
     val2 = i;
@@ -34,15 +33,13 @@
             printf("%d", val6);
         }
     }
-    val7 = var0;
-    i = val7;
+    i = var0;
     return;
 }
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
     unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     i = 1U;
     do {
@@ -54,6 +51,5 @@
             i = val2 + 1U;
         }
     } while ((int)val1 < 16);
-    val3 = var0;
-    return val3;
+    return var0;
 }

issue_94_strncmp.bc

bool.bc

--- /dev/fd/63	2022-08-12 14:45:12.605261232 +0000
+++ /dev/fd/62	2022-08-12 14:45:12.605261232 +0000
@@ -5,7 +5,6 @@
     unsigned int var0;
     unsigned long val1;
     unsigned long val2;
-    unsigned int val3;
     var0 = 0U;
     val1 = a;
     val2 = b;
@@ -14,6 +13,5 @@
     } else {
         var0 = 0U;
     }
-    val3 = var0;
-    return val3;
+    return var0;
 }

global_using_function_decl.bc

fcmp.bc

--- /dev/fd/63	2022-08-12 14:45:12.881260648 +0000
+++ /dev/fd/62	2022-08-12 14:45:12.885260640 +0000
@@ -17,56 +17,18 @@
     unsigned int var9;
     float call10;
     float call11;
-    float val12;
-    float val13;
-    float val14;
-    float val15;
-    float val16;
-    float val17;
-    float val18;
-    float val19;
-    float val20;
-    float val21;
-    float val22;
-    float val23;
-    float val24;
-    unsigned int val25;
-    unsigned int val26;
-    unsigned int val27;
-    unsigned int val28;
-    unsigned int val29;
-    unsigned int val30;
     var0 = __builtin_nan("");
     call10 = atof("3");
     var1 = call10;
     call11 = atof("2");
     var2 = call11;
-    val12 = var1;
-    var3 = -val12;
-    val13 = var3;
-    val14 = var0;
-    var4 = (val13 > val14);
-    val15 = var3;
-    val16 = var0;
-    var5 = (val15 >= val16);
-    val17 = var1;
-    val18 = var2;
-    var6 = (val17 > val18);
-    val19 = var1;
-    val20 = var2;
-    var7 = (val19 >= val20);
-    val21 = var1;
-    val22 = var0;
-    var8 = __builtin_isunordered(val21, val22);
-    val23 = var1;
-    val24 = var2;
-    var9 = __builtin_isunordered(val23, val24);
-    val25 = var4;
-    val26 = var5;
-    val27 = var6;
-    val28 = var7;
-    val29 = var8;
-    val30 = var9;
-    printf("%d %d %d %d %d %d\n", val25, val26, val27, val28, val29, val30);
+    var3 = -var1;
+    var4 = (var3 > var0);
+    var5 = (var3 >= var0);
+    var6 = (var1 > var2);
+    var7 = (var1 >= var2);
+    var8 = __builtin_isunordered(var1, var0);
+    var9 = __builtin_isunordered(var1, var2);
+    printf("%d %d %d %d %d %d\n", var4, var5, var6, var7, var8, var9);
     return 0U;
 }

byval_struct.bc

--- /dev/fd/63	2022-08-12 14:45:12.993260411 +0000
+++ /dev/fd/62	2022-08-12 14:45:12.993260411 +0000
@@ -31,7 +31,6 @@
     unsigned int call5;
     unsigned long call6;
     unsigned long val7;
-    unsigned long val8;
     call2 = atoi("1");
     var0.field0 = (long)call2;
     call3 = atoi("2");
@@ -43,7 +42,6 @@
     call6 = get_3x(var0);
     var1 = call6;
     val7 = var0.field0;
-    val8 = var1;
-    printf("%lld %lld\n", val7, val8);
+    printf("%lld %lld\n", val7, var1);
     return 0U;
 }

nested_while.bc

--- /dev/fd/63	2022-08-12 14:45:13.093260199 +0000
+++ /dev/fd/62	2022-08-12 14:45:13.093260199 +0000
@@ -8,40 +8,24 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int call2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int val10;
     var0 = 0U;
     call2 = atoi("5");
     var1 = call2;
-    val3 = var1;
-    if ((int)val3 > 10) {
-        do {
-            val4 = var1;
-            if ((int)val4 < 20) {
-                val5 = var1;
-                var1 = val5 + 1U;
-                val6 = var1;
-                printf("loop1 x: %d\n", val6);
+    if ((int)var1 > 10) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop1 x: %d\n", var1);
             }
-        } while ((int)val4 < 20);
     }
-    if ((int)val4 >= 20 || (int)val3 <= 10) {
-        do {
-            val7 = var1;
-            if ((int)val7 < 20) {
-                val8 = var1;
-                var1 = val8 + 1U;
-                val9 = var1;
-                printf("loop2 x: %d\n", val9);
+    if ((int)var1 <= 10 || (int)var1 >= 20) {
+        while ((int)var1 < 20)
+            {
+                var1 = var1 + 1U;
+                printf("loop2 x: %d\n", var1);
             }
-        } while ((int)val7 < 20);
-        val10 = var0;
-        return val10;
+    }
+    if (((int)var1 <= 10 || (int)var1 >= 20) && (int)var1 >= 20) {
+        return var0;
     }
 }

func_cond_two_arg.bc

--- /dev/fd/63	2022-08-12 14:45:13.421259505 +0000
+++ /dev/fd/62	2022-08-12 14:45:13.421259505 +0000
@@ -5,20 +5,15 @@
 unsigned int f(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return (unsigned int)((int)val2 < (int)val3);
+    return (unsigned int)((int)var0 < (int)var1);
 }
 unsigned int main() {
     unsigned int var0;
     unsigned int val1;
     unsigned int val2;
     unsigned int call3;
-    unsigned int val4;
     var0 = 0U;
     val1 = x;
     val2 = y;
@@ -28,6 +23,5 @@
     } else {
         var0 = 1U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

zext.bc

inttoptr.bc

--- /dev/fd/63	2022-08-12 14:45:13.685258946 +0000
+++ /dev/fd/62	2022-08-12 14:45:13.685258946 +0000
@@ -4,17 +4,13 @@
     unsigned int var0;
     void *var1;
     unsigned long val2;
-    void *val3;
-    unsigned int val4;
     var0 = 0U;
     val2 = a;
     var1 = (void *)val2;
-    val3 = var1;
-    if (val3 == (void *)0U) {
+    if (var1 == (void *)0U) {
         var0 = 0U;
     } else {
         var0 = 42U;
     }
-    val4 = var0;
-    return val4;
+    return var0;
 }

assert.bc

--- /dev/fd/63	2022-08-12 14:45:13.841258616 +0000
+++ /dev/fd/62	2022-08-12 14:45:13.841258616 +0000
@@ -17,15 +17,17 @@
         __assert_fail("a % 3", "assert.c", 6U, "int main(void)");
     } else {
         val2 = a;
-        if (val2 % 7UL == 0UL) {
-            __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
-        } else {
-            val3 = a;
-            if (val3 % 15UL == 0UL) {
-                __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
-            } else {
-                return 0U;
-            }
-        }
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL == 0UL) {
+        __assert_fail("a % 7", "assert.c", 7U, "int main(void)");
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL) {
+        val3 = a;
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL && val3 % 15UL == 0UL) {
+        __assert_fail("a % 15", "assert.c", 8U, "int main(void)");
+    }
+    if (val1 % 3UL != 0UL && val2 % 7UL != 0UL && val3 % 15UL != 0UL) {
+        return 0U;
     }
 }

loop.bc

--- /dev/fd/63	2022-08-12 14:45:14.149257964 +0000
+++ /dev/fd/62	2022-08-12 14:45:14.149257964 +0000
@@ -6,26 +6,17 @@
 unsigned int main() {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
     var0 = 0U;
     var1 = 0U;
-    do {
-        val2 = var1;
-        if (val2 != 10U) {
-            val3 = var1;
-            printf("Variable at %d is ", val3);
-            val4 = var1;
-            if (val4 % 2U != 0U) {
+    while (var1 != 10U)
+        {
+            printf("Variable at %d is ", var1);
+            if (var1 % 2U != 0U) {
                 printf("odd.\n");
             } else {
                 printf("even.\n");
             }
-            val5 = var1;
-            var1 = val5 + 1U;
+            var1 = var1 + 1U;
         }
-    } while (val2 != 10U);
     return 0U;
 }

switch.bc

--- /dev/fd/63	2022-08-12 14:45:14.377257482 +0000
+++ /dev/fd/62	2022-08-12 14:45:14.377257482 +0000
@@ -4,7 +4,6 @@
     unsigned int var0;
     unsigned int var1;
     unsigned int val2;
-    unsigned int val3;
     var0 = 0U;
     var1 = 0U;
     val2 = a;
@@ -30,6 +29,5 @@
         }
         break;
     }
-    val3 = var1;
-    return val3;
+    return var1;
 }

template_parameter_pack.bc

--- /dev/fd/63	2022-08-12 14:45:14.553257109 +0000
+++ /dev/fd/62	2022-08-12 14:45:14.557257101 +0000
@@ -17,71 +17,43 @@
     unsigned int var2;
     unsigned int var3;
     unsigned int var4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int val8;
-    unsigned int val9;
-    unsigned int call10;
+    unsigned int call5;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
     var4 = arg4;
-    val5 = var0;
-    val6 = var1;
-    val7 = var2;
-    val8 = var3;
-    val9 = var4;
-    call10 = _Z3sumIiJiiiEET_S0_DpT0_(val6, val7, val8, val9);
-    return val5 + call10;
+    call5 = _Z3sumIiJiiiEET_S0_DpT0_(var1, var2, var3, var4);
+    return var0 + call5;
 }
 unsigned int _Z3sumIiJiiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2, unsigned int arg3) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
     unsigned int var3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int val6;
-    unsigned int val7;
-    unsigned int call8;
+    unsigned int call4;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
     var3 = arg3;
-    val4 = var0;
-    val5 = var1;
-    val6 = var2;
-    val7 = var3;
-    call8 = _Z3sumIiJiiEET_S0_DpT0_(val5, val6, val7);
-    return val4 + call8;
+    call4 = _Z3sumIiJiiEET_S0_DpT0_(var1, var2, var3);
+    return var0 + call4;
 }
 unsigned int _Z3sumIiJiiEET_S0_DpT0_(unsigned int arg0, unsigned int arg1, unsigned int arg2) {
     unsigned int var0;
     unsigned int var1;
     unsigned int var2;
-    unsigned int val3;
-    unsigned int val4;
-    unsigned int val5;
-    unsigned int call6;
+    unsigned int call3;
     var0 = arg0;
     var1 = arg1;
     var2 = arg2;
-    val3 = var0;
-    val4 = var1;
-    val5 = var2;
-    call6 = _Z3sumIiET_S0_S0_(val4, val5);
-    return val3 + call6;
+    call3 = _Z3sumIiET_S0_S0_(var1, var2);
+    return var0 + call3;
 }
 unsigned int _Z3sumIiET_S0_S0_(unsigned int arg0, unsigned int arg1) {
     unsigned int var0;
     unsigned int var1;
-    unsigned int val2;
-    unsigned int val3;
     var0 = arg0;
     var1 = arg1;
-    val2 = var0;
-    val3 = var1;
-    return val2 + val3;
+    return var0 + var1;
 }

byval_tail_nogep.ll

byval_tail_gep.ll

github-actions[bot] avatar Aug 12 '22 14:08 github-actions[bot]