#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 */
typedef int uint8_t;
typedef int uint32_t;

/* Variables and functions */
uint32_t utf32_to_utf8(uint8_t utf8[6], uint32_t utf32) {
  uint32_t utf8_len = 0;
  if ((utf32 & (~0x0000007F)) == 0) {
    utf8[0] = 0x0000007F & utf32;
    utf8_len = 1;
  } else if ((utf32 & (~0x000007FF)) == 0) {
    utf8[1] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[0] = (0x0000003F & utf32) | 0xC0;
    utf8_len = 2;
  } else if ((utf32 & (~0x0000FFFF)) == 0) {
    utf8[2] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[1] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[0] = (0x0000003F & utf32) | 0xE0;
    utf8_len = 3;
  } else if ((utf32 & (~0x001FFFFF)) == 0) {
    utf8[3] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[2] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[1] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[0] = (0x0000003F & utf32) | 0xF0;
    utf8_len = 4;
  } else if ((utf32 & (~0x03FFFFFF)) == 0) {
    utf8[4] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[3] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[2] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[1] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[0] = (0x0000003F & utf32) | 0xF8;
    utf8_len = 5;
  } else if ((utf32 & (~0x7FFFFFFF)) == 0) {
    utf8[5] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[4] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[3] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[2] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[1] = (0x0000003F & utf32) | 0x80;
    utf32 >>= 6;
    utf8[0] = (0x0000003F & utf32) | 0xFC;
    utf8_len = 6;
  }
  return utf8_len;
}


x86 assembly (clang, -O0):
<utf32_to_utf8>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0xc(%rbp),%eax
and    $0xffffff80,%eax
cmp    $0x0,%eax
jne    1139 <utf32_to_utf8+0x39>
mov    -0xc(%rbp),%ecx
and    $0x7f,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x1,-0x10(%rbp)
jmp    13dc <utf32_to_utf8+0x2dc>
mov    -0xc(%rbp),%eax
and    $0xfffff800,%eax
cmp    $0x0,%eax
jne    1184 <utf32_to_utf8+0x84>
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0xc0,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x2,-0x10(%rbp)
jmp    13d7 <utf32_to_utf8+0x2d7>
mov    -0xc(%rbp),%eax
and    $0xffff0000,%eax
cmp    $0x0,%eax
jne    11eb <utf32_to_utf8+0xeb>
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0xe0,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x3,-0x10(%rbp)
jmp    13d2 <utf32_to_utf8+0x2d2>
mov    -0xc(%rbp),%eax
and    $0xffe00000,%eax
cmp    $0x0,%eax
jne    126e <utf32_to_utf8+0x16e>
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0xc(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0xf0,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x4,-0x10(%rbp)
jmp    13cd <utf32_to_utf8+0x2cd>
mov    -0xc(%rbp),%eax
and    $0xfc000000,%eax
cmp    $0x0,%eax
jne    130d <utf32_to_utf8+0x20d>
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0xc(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0xf8,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x5,-0x10(%rbp)
jmp    13c8 <utf32_to_utf8+0x2c8>
mov    -0xc(%rbp),%eax
and    $0x80000000,%eax
cmp    $0x0,%eax
jne    13c3 <utf32_to_utf8+0x2c3>
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x14(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0xc(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0x80,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%ecx
and    $0x3f,%ecx
or     $0xfc,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x6,-0x10(%rbp)
jmp    13c8 <utf32_to_utf8+0x2c8>
jmp    13cd <utf32_to_utf8+0x2cd>
jmp    13d2 <utf32_to_utf8+0x2d2>
jmp    13d7 <utf32_to_utf8+0x2d7>
jmp    13dc <utf32_to_utf8+0x2dc>
mov    -0x10(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<utf32_to_utf8>:
push   %rbx
mov    $0x1,%eax
cmp    $0x80,%esi
jb     1235 <utf32_to_utf8+0x135>
cmp    $0x800,%esi
jae    1131 <utf32_to_utf8+0x31>
mov    $0x2,%eax
mov    $0xc0,%r10d
mov    $0x6,%ebx
mov    %esi,%edx
jmp    1222 <utf32_to_utf8+0x122>
cmp    $0x10000,%esi
jae    1156 <utf32_to_utf8+0x56>
mov    $0x3,%eax
mov    $0xe0,%r10d
mov    $0xc,%ebx
mov    $0x6,%r8d
mov    %esi,%edx
jmp    120f <utf32_to_utf8+0x10f>
cmp    $0x200000,%esi
jae    117e <utf32_to_utf8+0x7e>
mov    $0x4,%eax
mov    $0xf0,%r10d
mov    $0x12,%ebx
mov    $0xc,%r8d
mov    $0x6,%r9d
mov    %esi,%edx
jmp    11fc <utf32_to_utf8+0xfc>
cmp    $0x4000000,%esi
jae    11ac <utf32_to_utf8+0xac>
mov    $0x5,%eax
mov    $0xf8,%r10d
mov    $0x18,%ebx
mov    $0x12,%r8d
mov    $0xc,%r9d
mov    $0x6,%ecx
mov    %esi,%r11d
jmp    11e9 <utf32_to_utf8+0xe9>
test   %esi,%esi
js     1239 <utf32_to_utf8+0x139>
mov    %esi,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %eax,0x14(%rdi)
mov    %esi,%r11d
shr    $0x6,%r11d
mov    $0x6,%eax
mov    $0xfc,%r10d
mov    $0x1e,%ebx
mov    $0x18,%r8d
mov    $0x12,%r9d
mov    $0xc,%ecx
and    $0x3f,%r11d
or     $0x80,%r11d
mov    %r11d,0x10(%rdi)
mov    %esi,%edx
shr    %cl,%edx
and    $0x3f,%edx
or     $0x80,%edx
mov    %edx,0xc(%rdi)
mov    %esi,%edx
mov    %r9d,%ecx
shr    %cl,%edx
and    $0x3f,%edx
or     $0x80,%edx
mov    %edx,0x8(%rdi)
mov    %esi,%edx
mov    %r8d,%ecx
shr    %cl,%edx
and    $0x3f,%edx
or     $0x80,%edx
mov    %edx,0x4(%rdi)
mov    %ebx,%ecx
shr    %cl,%esi
or     %r10d,%esi
mov    %esi,(%rdi)
pop    %rbx
ret
xor    %eax,%eax
pop    %rbx
ret

LLVM IR (-O0):
define i32 @utf32_to_utf8(i32* %0, i32 %1) {
%3 = alloca i32*
%4 = alloca i32
%5 = alloca i32
store i32* %0, i32** %3
store i32 %1, i32* %4
store i32 0, i32* %5
%6 = load i32, i32* %4
%7 = and i32 %6, -128
%8 = icmp eq i32 %7, 0
br i1 %8, label %9, label %14
9: ; preds = %2
%10 = load i32, i32* %4
%11 = and i32 127, %10
%12 = load i32*, i32** %3
%13 = getelementptr inbounds i32, i32* %12, i64 0
store i32 %11, i32* %13
store i32 1, i32* %5
br label %174
14: ; preds = %2
%15 = load i32, i32* %4
%16 = and i32 %15, -2048
%17 = icmp eq i32 %16, 0
br i1 %17, label %18, label %31
18: ; preds = %14
%19 = load i32, i32* %4
%20 = and i32 63, %19
%21 = or i32 %20, 128
%22 = load i32*, i32** %3
%23 = getelementptr inbounds i32, i32* %22, i64 1
store i32 %21, i32* %23
%24 = load i32, i32* %4
%25 = ashr i32 %24, 6
store i32 %25, i32* %4
%26 = load i32, i32* %4
%27 = and i32 63, %26
%28 = or i32 %27, 192
%29 = load i32*, i32** %3
%30 = getelementptr inbounds i32, i32* %29, i64 0
store i32 %28, i32* %30
store i32 2, i32* %5
br label %173
31: ; preds = %14
%32 = load i32, i32* %4
%33 = and i32 %32, -65536
%34 = icmp eq i32 %33, 0
br i1 %34, label %35, label %55
35: ; preds = %31
%36 = load i32, i32* %4
%37 = and i32 63, %36
%38 = or i32 %37, 128
%39 = load i32*, i32** %3
%40 = getelementptr inbounds i32, i32* %39, i64 2
store i32 %38, i32* %40
%41 = load i32, i32* %4
%42 = ashr i32 %41, 6
store i32 %42, i32* %4
%43 = load i32, i32* %4
%44 = and i32 63, %43
%45 = or i32 %44, 128
%46 = load i32*, i32** %3
%47 = getelementptr inbounds i32, i32* %46, i64 1
store i32 %45, i32* %47
%48 = load i32, i32* %4
%49 = ashr i32 %48, 6
store i32 %49, i32* %4
%50 = load i32, i32* %4
%51 = and i32 63, %50
%52 = or i32 %51, 224
%53 = load i32*, i32** %3
%54 = getelementptr inbounds i32, i32* %53, i64 0
store i32 %52, i32* %54
store i32 3, i32* %5
br label %172
55: ; preds = %31
%56 = load i32, i32* %4
%57 = and i32 %56, -2097152
%58 = icmp eq i32 %57, 0
br i1 %58, label %59, label %86
59: ; preds = %55
%60 = load i32, i32* %4
%61 = and i32 63, %60
%62 = or i32 %61, 128
%63 = load i32*, i32** %3
%64 = getelementptr inbounds i32, i32* %63, i64 3
store i32 %62, i32* %64
%65 = load i32, i32* %4
%66 = ashr i32 %65, 6
store i32 %66, i32* %4
%67 = load i32, i32* %4
%68 = and i32 63, %67
%69 = or i32 %68, 128
%70 = load i32*, i32** %3
%71 = getelementptr inbounds i32, i32* %70, i64 2
store i32 %69, i32* %71
%72 = load i32, i32* %4
%73 = ashr i32 %72, 6
store i32 %73, i32* %4
%74 = load i32, i32* %4
%75 = and i32 63, %74
%76 = or i32 %75, 128
%77 = load i32*, i32** %3
%78 = getelementptr inbounds i32, i32* %77, i64 1
store i32 %76, i32* %78
%79 = load i32, i32* %4
%80 = ashr i32 %79, 6
store i32 %80, i32* %4
%81 = load i32, i32* %4
%82 = and i32 63, %81
%83 = or i32 %82, 240
%84 = load i32*, i32** %3
%85 = getelementptr inbounds i32, i32* %84, i64 0
store i32 %83, i32* %85
store i32 4, i32* %5
br label %171
86: ; preds = %55
%87 = load i32, i32* %4
%88 = and i32 %87, -67108864
%89 = icmp eq i32 %88, 0
br i1 %89, label %90, label %124
90: ; preds = %86
%91 = load i32, i32* %4
%92 = and i32 63, %91
%93 = or i32 %92, 128
%94 = load i32*, i32** %3
%95 = getelementptr inbounds i32, i32* %94, i64 4
store i32 %93, i32* %95
%96 = load i32, i32* %4
%97 = ashr i32 %96, 6
store i32 %97, i32* %4
%98 = load i32, i32* %4
%99 = and i32 63, %98
%100 = or i32 %99, 128
%101 = load i32*, i32** %3
%102 = getelementptr inbounds i32, i32* %101, i64 3
store i32 %100, i32* %102
%103 = load i32, i32* %4
%104 = ashr i32 %103, 6
store i32 %104, i32* %4
%105 = load i32, i32* %4
%106 = and i32 63, %105
%107 = or i32 %106, 128
%108 = load i32*, i32** %3
%109 = getelementptr inbounds i32, i32* %108, i64 2
store i32 %107, i32* %109
%110 = load i32, i32* %4
%111 = ashr i32 %110, 6
store i32 %111, i32* %4
%112 = load i32, i32* %4
%113 = and i32 63, %112
%114 = or i32 %113, 128
%115 = load i32*, i32** %3
%116 = getelementptr inbounds i32, i32* %115, i64 1
store i32 %114, i32* %116
%117 = load i32, i32* %4
%118 = ashr i32 %117, 6
store i32 %118, i32* %4
%119 = load i32, i32* %4
%120 = and i32 63, %119
%121 = or i32 %120, 248
%122 = load i32*, i32** %3
%123 = getelementptr inbounds i32, i32* %122, i64 0
store i32 %121, i32* %123
store i32 5, i32* %5
br label %170
124: ; preds = %86
%125 = load i32, i32* %4
%126 = and i32 %125, -2147483648
%127 = icmp eq i32 %126, 0
br i1 %127, label %128, label %169
128: ; preds = %124
%129 = load i32, i32* %4
%130 = and i32 63, %129
%131 = or i32 %130, 128
%132 = load i32*, i32** %3
%133 = getelementptr inbounds i32, i32* %132, i64 5
store i32 %131, i32* %133
%134 = load i32, i32* %4
%135 = ashr i32 %134, 6
store i32 %135, i32* %4
%136 = load i32, i32* %4
%137 = and i32 63, %136
%138 = or i32 %137, 128
%139 = load i32*, i32** %3
%140 = getelementptr inbounds i32, i32* %139, i64 4
store i32 %138, i32* %140
%141 = load i32, i32* %4
%142 = ashr i32 %141, 6
store i32 %142, i32* %4
%143 = load i32, i32* %4
%144 = and i32 63, %143
%145 = or i32 %144, 128
%146 = load i32*, i32** %3
%147 = getelementptr inbounds i32, i32* %146, i64 3
store i32 %145, i32* %147
%148 = load i32, i32* %4
%149 = ashr i32 %148, 6
store i32 %149, i32* %4
%150 = load i32, i32* %4
%151 = and i32 63, %150
%152 = or i32 %151, 128
%153 = load i32*, i32** %3
%154 = getelementptr inbounds i32, i32* %153, i64 2
store i32 %152, i32* %154
%155 = load i32, i32* %4
%156 = ashr i32 %155, 6
store i32 %156, i32* %4
%157 = load i32, i32* %4
%158 = and i32 63, %157
%159 = or i32 %158, 128
%160 = load i32*, i32** %3
%161 = getelementptr inbounds i32, i32* %160, i64 1
store i32 %159, i32* %161
%162 = load i32, i32* %4
%163 = ashr i32 %162, 6
store i32 %163, i32* %4
%164 = load i32, i32* %4
%165 = and i32 63, %164
%166 = or i32 %165, 252
%167 = load i32*, i32** %3
%168 = getelementptr inbounds i32, i32* %167, i64 0
store i32 %166, i32* %168
store i32 6, i32* %5
br label %169
169: ; preds = %128, %124
br label %170
170: ; preds = %169, %90
br label %171
171: ; preds = %170, %59
br label %172
172: ; preds = %171, %35
br label %173
173: ; preds = %172, %18
br label %174
174: ; preds = %173, %9
%175 = load i32, i32* %5
ret i32 %175
}

LLVM IR (-O2):
define i32 @utf32_to_utf8(i32* writeonly %0, i32 %1) {
%3 = icmp ult i32 %1, 128
br i1 %3, label %62, label %4
4: ; preds = %2
%5 = icmp ult i32 %1, 2048
br i1 %5, label %52, label %6
6: ; preds = %4
%7 = icmp ult i32 %1, 65536
br i1 %7, label %42, label %8
8: ; preds = %6
%9 = icmp ult i32 %1, 2097152
br i1 %9, label %31, label %10
10: ; preds = %8
%11 = icmp ult i32 %1, 67108864
br i1 %11, label %19, label %12
12: ; preds = %10
%13 = icmp sgt i32 %1, -1
br i1 %13, label %14, label %65
14: ; preds = %12
%15 = and i32 %1, 63
%16 = or i32 %15, 128
%17 = getelementptr inbounds i32, i32* %0, i64 5
store i32 %16, i32* %17
%18 = lshr i32 %1, 6
br label %19
19: ; preds = %10, %14
%20 = phi i32 [ %18, %14 ], [ %1, %10 ]
%21 = phi i32 [ 12, %14 ], [ 6, %10 ]
%22 = phi i32 [ 18, %14 ], [ 12, %10 ]
%23 = phi i32 [ 24, %14 ], [ 18, %10 ]
%24 = phi i32 [ 30, %14 ], [ 24, %10 ]
%25 = phi i32 [ 252, %14 ], [ 248, %10 ]
%26 = phi i32 [ 6, %14 ], [ 5, %10 ]
%27 = and i32 %20, 63
%28 = or i32 %27, 128
%29 = getelementptr inbounds i32, i32* %0, i64 4
store i32 %28, i32* %29
%30 = lshr i32 %1, %21
br label %31
31: ; preds = %19, %8
%32 = phi i32 [ %1, %8 ], [ %30, %19 ]
%33 = phi i32 [ 6, %8 ], [ %22, %19 ]
%34 = phi i32 [ 12, %8 ], [ %23, %19 ]
%35 = phi i32 [ 18, %8 ], [ %24, %19 ]
%36 = phi i32 [ 240, %8 ], [ %25, %19 ]
%37 = phi i32 [ 4, %8 ], [ %26, %19 ]
%38 = and i32 %32, 63
%39 = or i32 %38, 128
%40 = getelementptr inbounds i32, i32* %0, i64 3
store i32 %39, i32* %40
%41 = lshr i32 %1, %33
br label %42
42: ; preds = %31, %6
%43 = phi i32 [ %1, %6 ], [ %41, %31 ]
%44 = phi i32 [ 6, %6 ], [ %34, %31 ]
%45 = phi i32 [ 12, %6 ], [ %35, %31 ]
%46 = phi i32 [ 224, %6 ], [ %36, %31 ]
%47 = phi i32 [ 3, %6 ], [ %37, %31 ]
%48 = and i32 %43, 63
%49 = or i32 %48, 128
%50 = getelementptr inbounds i32, i32* %0, i64 2
store i32 %49, i32* %50
%51 = lshr i32 %1, %44
br label %52
52: ; preds = %42, %4
%53 = phi i32 [ %1, %4 ], [ %51, %42 ]
%54 = phi i32 [ 6, %4 ], [ %45, %42 ]
%55 = phi i32 [ 192, %4 ], [ %46, %42 ]
%56 = phi i32 [ 2, %4 ], [ %47, %42 ]
%57 = and i32 %53, 63
%58 = or i32 %57, 128
%59 = getelementptr inbounds i32, i32* %0, i64 1
store i32 %58, i32* %59
%60 = lshr i32 %1, %54
%61 = or i32 %60, %55
br label %62
62: ; preds = %52, %2
%63 = phi i32 [ %1, %2 ], [ %61, %52 ]
%64 = phi i32 [ 1, %2 ], [ %56, %52 ]
store i32 %63, i32* %0
br label %65
65: ; preds = %62, %12
%66 = phi i32 [ 0, %12 ], [ %64, %62 ]
ret i32 %66
}