#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ bar(int, int);
void foo() {
  int x, y, z;
  4;
  4.5;
  "foo";
  'f';
  z;
  bar(x, y);
  bar(x++, y);
  bar(x, y++);
  bar(x++ + x++, y);
  !(x++);
  x &&y;
  x++ || y;
  x &&y++;
  x++ &&y++;
  (x++ + x++) && (y++ + y++);
  x *y;
  x++ + y;
  x *y++;
  x++ *y++;
  (x++ + x++) * (y++ + y++);
  x ? y : z;
  x++ ? y : z;
  x ? y++ : z;
  x ? y : z++;
  x++ ? y++ : z;
  x++ ? y : z++;
  x ? y++ : z++;
  x++ ? y++ : z++;
  (x++ + x++) ? y++ : z++;
  x++ ? (y++ + y++) : z++;
  x++ ? y++ : (z++ + z++);
  x, y;
  x++, y;
  x, y++;
  x++, y++;
  x = y;
  x += y;
  x += y++;
  x ? y++ : y ? z++ : z ? x++ : (x = y);
}


x86 assembly (clang, -O0):
<foo>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
call   1030 <bar@plt>
mov    -0x4(%rbp),%edi
mov    %edi,%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%esi
call   1030 <bar@plt>
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
call   1030 <bar@plt>
mov    -0x4(%rbp),%edi
mov    %edi,%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x4(%rbp)
add    %eax,%edi
mov    -0x8(%rbp),%esi
call   1030 <bar@plt>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x4(%rbp)
mov    %al,-0xd(%rbp)
je     118b <foo+0x7b>
cmpl   $0x0,-0x8(%rbp)
setne  %al
mov    %al,-0xd(%rbp)
mov    -0xd(%rbp),%al
mov    -0x4(%rbp),%ecx
mov    %ecx,%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xe(%rbp)
jne    11b1 <foo+0xa1>
cmpl   $0x0,-0x8(%rbp)
setne  %al
mov    %al,-0xe(%rbp)
mov    -0xe(%rbp),%al
xor    %eax,%eax
cmpl   $0x0,-0x4(%rbp)
mov    %al,-0xf(%rbp)
je     11d7 <foo+0xc7>
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
cmp    $0x0,%eax
setne  %al
mov    %al,-0xf(%rbp)
mov    -0xf(%rbp),%al
mov    -0x4(%rbp),%ecx
mov    %ecx,%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x10(%rbp)
je     1207 <foo+0xf7>
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
cmp    $0x0,%eax
setne  %al
mov    %al,-0x10(%rbp)
mov    -0x10(%rbp),%al
mov    -0x4(%rbp),%ecx
mov    %ecx,%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x4(%rbp)
add    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x11(%rbp)
je     1251 <foo+0x141>
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
mov    -0x8(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x8(%rbp)
add    %ecx,%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x11(%rbp)
mov    -0x11(%rbp),%al
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x0,-0x4(%rbp)
je     12ae <foo+0x19e>
mov    -0x8(%rbp),%eax
jmp    12b1 <foo+0x1a1>
mov    -0xc(%rbp),%eax
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x4(%rbp)
cmp    $0x0,%eax
je     12cd <foo+0x1bd>
mov    -0x8(%rbp),%eax
jmp    12d0 <foo+0x1c0>
mov    -0xc(%rbp),%eax
cmpl   $0x0,-0x4(%rbp)
je     12e8 <foo+0x1d8>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12eb <foo+0x1db>
mov    -0xc(%rbp),%eax
cmpl   $0x0,-0x4(%rbp)
je     12fd <foo+0x1ed>
mov    -0x8(%rbp),%eax
jmp    1306 <foo+0x1f6>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x4(%rbp)
cmp    $0x0,%eax
je     1328 <foo+0x218>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    132b <foo+0x21b>
mov    -0xc(%rbp),%eax
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x4(%rbp)
cmp    $0x0,%eax
je     1347 <foo+0x237>
mov    -0x8(%rbp),%eax
jmp    1350 <foo+0x240>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
cmpl   $0x0,-0x4(%rbp)
je     1368 <foo+0x258>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1371 <foo+0x261>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x4(%rbp)
cmp    $0x0,%eax
je     1393 <foo+0x283>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    139c <foo+0x28c>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x4(%rbp)
mov    -0x4(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x4(%rbp)
add    %ecx,%eax
cmp    $0x0,%eax
je     13cb <foo+0x2bb>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    13d4 <foo+0x2c4>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x4(%rbp)
cmp    $0x0,%eax
je     1405 <foo+0x2f5>
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
mov    -0x8(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x8(%rbp)
add    %ecx,%eax
jmp    140e <foo+0x2fe>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x4(%rbp)
cmp    $0x0,%eax
je     1430 <foo+0x320>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1448 <foo+0x338>
mov    -0xc(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0xc(%rbp)
add    %ecx,%eax
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
add    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
cmpl   $0x0,-0x4(%rbp)
je     14a4 <foo+0x394>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14f0 <foo+0x3e0>
cmpl   $0x0,-0x8(%rbp)
je     14c1 <foo+0x3b1>
mov    -0xc(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0xc(%rbp)
mov    %eax,-0x18(%rbp)
jmp    14ed <foo+0x3dd>
cmpl   $0x0,-0xc(%rbp)
je     14de <foo+0x3ce>
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x4(%rbp)
mov    %eax,-0x1c(%rbp)
jmp    14e7 <foo+0x3d7>
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<foo>:
push   %rax
call   1030 <bar@plt>
call   1030 <bar@plt>
call   1030 <bar@plt>
pop    %rax
jmp    1030 <bar@plt>

LLVM IR (-O0):
@.str = [4 x i8] c"foo\00"
define void @foo() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = load i32, i32* %3
%5 = load i32, i32* %1
%6 = load i32, i32* %2
%7 = call i32 @bar(i32 %5, i32 %6)
%8 = load i32, i32* %1
%9 = add nsw i32 %8, 1
store i32 %9, i32* %1
%10 = load i32, i32* %2
%11 = call i32 @bar(i32 %8, i32 %10)
%12 = load i32, i32* %1
%13 = load i32, i32* %2
%14 = add nsw i32 %13, 1
store i32 %14, i32* %2
%15 = call i32 @bar(i32 %12, i32 %13)
%16 = load i32, i32* %1
%17 = add nsw i32 %16, 1
store i32 %17, i32* %1
%18 = load i32, i32* %1
%19 = add nsw i32 %18, 1
store i32 %19, i32* %1
%20 = add nsw i32 %16, %18
%21 = load i32, i32* %2
%22 = call i32 @bar(i32 %20, i32 %21)
%23 = load i32, i32* %1
%24 = add nsw i32 %23, 1
store i32 %24, i32* %1
%25 = icmp ne i32 %23, 0
%26 = xor i1 %25, true
%27 = zext i1 %26 to i32
%28 = load i32, i32* %1
%29 = icmp ne i32 %28, 0
br i1 %29, label %30, label %33
30: ; preds = %0
%31 = load i32, i32* %2
%32 = icmp ne i32 %31, 0
br label %33
33: ; preds = %30, %0
%34 = phi i1 [ false, %0 ], [ %32, %30 ]
%35 = zext i1 %34 to i32
%36 = load i32, i32* %1
%37 = add nsw i32 %36, 1
store i32 %37, i32* %1
%38 = icmp ne i32 %36, 0
br i1 %38, label %42, label %39
39: ; preds = %33
%40 = load i32, i32* %2
%41 = icmp ne i32 %40, 0
br label %42
42: ; preds = %39, %33
%43 = phi i1 [ true, %33 ], [ %41, %39 ]
%44 = zext i1 %43 to i32
%45 = load i32, i32* %1
%46 = icmp ne i32 %45, 0
br i1 %46, label %47, label %51
47: ; preds = %42
%48 = load i32, i32* %2
%49 = add nsw i32 %48, 1
store i32 %49, i32* %2
%50 = icmp ne i32 %48, 0
br label %51
51: ; preds = %47, %42
%52 = phi i1 [ false, %42 ], [ %50, %47 ]
%53 = zext i1 %52 to i32
%54 = load i32, i32* %1
%55 = add nsw i32 %54, 1
store i32 %55, i32* %1
%56 = icmp ne i32 %54, 0
br i1 %56, label %57, label %61
57: ; preds = %51
%58 = load i32, i32* %2
%59 = add nsw i32 %58, 1
store i32 %59, i32* %2
%60 = icmp ne i32 %58, 0
br label %61
61: ; preds = %57, %51
%62 = phi i1 [ false, %51 ], [ %60, %57 ]
%63 = zext i1 %62 to i32
%64 = load i32, i32* %1
%65 = add nsw i32 %64, 1
store i32 %65, i32* %1
%66 = load i32, i32* %1
%67 = add nsw i32 %66, 1
store i32 %67, i32* %1
%68 = add nsw i32 %64, %66
%69 = icmp ne i32 %68, 0
br i1 %69, label %70, label %77
70: ; preds = %61
%71 = load i32, i32* %2
%72 = add nsw i32 %71, 1
store i32 %72, i32* %2
%73 = load i32, i32* %2
%74 = add nsw i32 %73, 1
store i32 %74, i32* %2
%75 = add nsw i32 %71, %73
%76 = icmp ne i32 %75, 0
br label %77
77: ; preds = %70, %61
%78 = phi i1 [ false, %61 ], [ %76, %70 ]
%79 = zext i1 %78 to i32
%80 = load i32, i32* %1
%81 = load i32, i32* %2
%82 = mul nsw i32 %80, %81
%83 = load i32, i32* %1
%84 = add nsw i32 %83, 1
store i32 %84, i32* %1
%85 = load i32, i32* %2
%86 = add nsw i32 %83, %85
%87 = load i32, i32* %1
%88 = load i32, i32* %2
%89 = add nsw i32 %88, 1
store i32 %89, i32* %2
%90 = mul nsw i32 %87, %88
%91 = load i32, i32* %1
%92 = add nsw i32 %91, 1
store i32 %92, i32* %1
%93 = load i32, i32* %2
%94 = add nsw i32 %93, 1
store i32 %94, i32* %2
%95 = mul nsw i32 %91, %93
%96 = load i32, i32* %1
%97 = add nsw i32 %96, 1
store i32 %97, i32* %1
%98 = load i32, i32* %1
%99 = add nsw i32 %98, 1
store i32 %99, i32* %1
%100 = add nsw i32 %96, %98
%101 = load i32, i32* %2
%102 = add nsw i32 %101, 1
store i32 %102, i32* %2
%103 = load i32, i32* %2
%104 = add nsw i32 %103, 1
store i32 %104, i32* %2
%105 = add nsw i32 %101, %103
%106 = mul nsw i32 %100, %105
%107 = load i32, i32* %1
%108 = icmp ne i32 %107, 0
br i1 %108, label %109, label %111
109: ; preds = %77
%110 = load i32, i32* %2
br label %113
111: ; preds = %77
%112 = load i32, i32* %3
br label %113
113: ; preds = %111, %109
%114 = phi i32 [ %110, %109 ], [ %112, %111 ]
%115 = load i32, i32* %1
%116 = add nsw i32 %115, 1
store i32 %116, i32* %1
%117 = icmp ne i32 %115, 0
br i1 %117, label %118, label %120
118: ; preds = %113
%119 = load i32, i32* %2
br label %122
120: ; preds = %113
%121 = load i32, i32* %3
br label %122
122: ; preds = %120, %118
%123 = phi i32 [ %119, %118 ], [ %121, %120 ]
%124 = load i32, i32* %1
%125 = icmp ne i32 %124, 0
br i1 %125, label %126, label %129
126: ; preds = %122
%127 = load i32, i32* %2
%128 = add nsw i32 %127, 1
store i32 %128, i32* %2
br label %131
129: ; preds = %122
%130 = load i32, i32* %3
br label %131
131: ; preds = %129, %126
%132 = phi i32 [ %127, %126 ], [ %130, %129 ]
%133 = load i32, i32* %1
%134 = icmp ne i32 %133, 0
br i1 %134, label %135, label %137
135: ; preds = %131
%136 = load i32, i32* %2
br label %140
137: ; preds = %131
%138 = load i32, i32* %3
%139 = add nsw i32 %138, 1
store i32 %139, i32* %3
br label %140
140: ; preds = %137, %135
%141 = phi i32 [ %136, %135 ], [ %138, %137 ]
%142 = load i32, i32* %1
%143 = add nsw i32 %142, 1
store i32 %143, i32* %1
%144 = icmp ne i32 %142, 0
br i1 %144, label %145, label %148
145: ; preds = %140
%146 = load i32, i32* %2
%147 = add nsw i32 %146, 1
store i32 %147, i32* %2
br label %150
148: ; preds = %140
%149 = load i32, i32* %3
br label %150
150: ; preds = %148, %145
%151 = phi i32 [ %146, %145 ], [ %149, %148 ]
%152 = load i32, i32* %1
%153 = add nsw i32 %152, 1
store i32 %153, i32* %1
%154 = icmp ne i32 %152, 0
br i1 %154, label %155, label %157
155: ; preds = %150
%156 = load i32, i32* %2
br label %160
157: ; preds = %150
%158 = load i32, i32* %3
%159 = add nsw i32 %158, 1
store i32 %159, i32* %3
br label %160
160: ; preds = %157, %155
%161 = phi i32 [ %156, %155 ], [ %158, %157 ]
%162 = load i32, i32* %1
%163 = icmp ne i32 %162, 0
br i1 %163, label %164, label %167
164: ; preds = %160
%165 = load i32, i32* %2
%166 = add nsw i32 %165, 1
store i32 %166, i32* %2
br label %170
167: ; preds = %160
%168 = load i32, i32* %3
%169 = add nsw i32 %168, 1
store i32 %169, i32* %3
br label %170
170: ; preds = %167, %164
%171 = phi i32 [ %165, %164 ], [ %168, %167 ]
%172 = load i32, i32* %1
%173 = add nsw i32 %172, 1
store i32 %173, i32* %1
%174 = icmp ne i32 %172, 0
br i1 %174, label %175, label %178
175: ; preds = %170
%176 = load i32, i32* %2
%177 = add nsw i32 %176, 1
store i32 %177, i32* %2
br label %181
178: ; preds = %170
%179 = load i32, i32* %3
%180 = add nsw i32 %179, 1
store i32 %180, i32* %3
br label %181
181: ; preds = %178, %175
%182 = phi i32 [ %176, %175 ], [ %179, %178 ]
%183 = load i32, i32* %1
%184 = add nsw i32 %183, 1
store i32 %184, i32* %1
%185 = load i32, i32* %1
%186 = add nsw i32 %185, 1
store i32 %186, i32* %1
%187 = add nsw i32 %183, %185
%188 = icmp ne i32 %187, 0
br i1 %188, label %189, label %192
189: ; preds = %181
%190 = load i32, i32* %2
%191 = add nsw i32 %190, 1
store i32 %191, i32* %2
br label %195
192: ; preds = %181
%193 = load i32, i32* %3
%194 = add nsw i32 %193, 1
store i32 %194, i32* %3
br label %195
195: ; preds = %192, %189
%196 = phi i32 [ %190, %189 ], [ %193, %192 ]
%197 = load i32, i32* %1
%198 = add nsw i32 %197, 1
store i32 %198, i32* %1
%199 = icmp ne i32 %197, 0
br i1 %199, label %200, label %206
200: ; preds = %195
%201 = load i32, i32* %2
%202 = add nsw i32 %201, 1
store i32 %202, i32* %2
%203 = load i32, i32* %2
%204 = add nsw i32 %203, 1
store i32 %204, i32* %2
%205 = add nsw i32 %201, %203
br label %209
206: ; preds = %195
%207 = load i32, i32* %3
%208 = add nsw i32 %207, 1
store i32 %208, i32* %3
br label %209
209: ; preds = %206, %200
%210 = phi i32 [ %205, %200 ], [ %207, %206 ]
%211 = load i32, i32* %1
%212 = add nsw i32 %211, 1
store i32 %212, i32* %1
%213 = icmp ne i32 %211, 0
br i1 %213, label %214, label %217
214: ; preds = %209
%215 = load i32, i32* %2
%216 = add nsw i32 %215, 1
store i32 %216, i32* %2
br label %223
217: ; preds = %209
%218 = load i32, i32* %3
%219 = add nsw i32 %218, 1
store i32 %219, i32* %3
%220 = load i32, i32* %3
%221 = add nsw i32 %220, 1
store i32 %221, i32* %3
%222 = add nsw i32 %218, %220
br label %223
223: ; preds = %217, %214
%224 = phi i32 [ %215, %214 ], [ %222, %217 ]
%225 = load i32, i32* %1
%226 = load i32, i32* %2
%227 = load i32, i32* %1
%228 = add nsw i32 %227, 1
store i32 %228, i32* %1
%229 = load i32, i32* %2
%230 = load i32, i32* %1
%231 = load i32, i32* %2
%232 = add nsw i32 %231, 1
store i32 %232, i32* %2
%233 = load i32, i32* %1
%234 = add nsw i32 %233, 1
store i32 %234, i32* %1
%235 = load i32, i32* %2
%236 = add nsw i32 %235, 1
store i32 %236, i32* %2
%237 = load i32, i32* %2
store i32 %237, i32* %1
%238 = load i32, i32* %2
%239 = load i32, i32* %1
%240 = add nsw i32 %239, %238
store i32 %240, i32* %1
%241 = load i32, i32* %2
%242 = add nsw i32 %241, 1
store i32 %242, i32* %2
%243 = load i32, i32* %1
%244 = add nsw i32 %243, %241
store i32 %244, i32* %1
%245 = load i32, i32* %1
%246 = icmp ne i32 %245, 0
br i1 %246, label %247, label %250
247: ; preds = %223
%248 = load i32, i32* %2
%249 = add nsw i32 %248, 1
store i32 %249, i32* %2
br label %268
250: ; preds = %223
%251 = load i32, i32* %2
%252 = icmp ne i32 %251, 0
br i1 %252, label %253, label %256
253: ; preds = %250
%254 = load i32, i32* %3
%255 = add nsw i32 %254, 1
store i32 %255, i32* %3
br label %266
256: ; preds = %250
%257 = load i32, i32* %3
%258 = icmp ne i32 %257, 0
br i1 %258, label %259, label %262
259: ; preds = %256
%260 = load i32, i32* %1
%261 = add nsw i32 %260, 1
store i32 %261, i32* %1
br label %264
262: ; preds = %256
%263 = load i32, i32* %2
store i32 %263, i32* %1
br label %264
264: ; preds = %262, %259
%265 = phi i32 [ %260, %259 ], [ %263, %262 ]
br label %266
266: ; preds = %264, %253
%267 = phi i32 [ %254, %253 ], [ %265, %264 ]
br label %268
268: ; preds = %266, %247
%269 = phi i32 [ %248, %247 ], [ %267, %266 ]
ret void
}

LLVM IR (-O2):
define void @foo() {
%1 = tail call i32 @bar(i32 undef, i32 undef)
%2 = tail call i32 @bar(i32 undef, i32 undef)
%3 = tail call i32 @bar(i32 undef, i32 undef)
%4 = tail call i32 @bar(i32 undef, i32 undef)
ret void
}