#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*/ concat(char *, char *);
int /*<<< orphan*/ qr_diran(char *, unsigned char, int);
int /*<<< orphan*/ rs_encode(int, unsigned char *, unsigned char *);
int /*<<< orphan*/ rs_free();
int /*<<< orphan*/ rs_init_code(int, int /*<<< orphan*/);
int /*<<< orphan*/ rs_init_gf(int);
int strlen(char *);
void micro_qr_m1(char binary_data[]) {
  int i, latch;
  int bits_total, bits_left, remainder;
  int data_codewords, ecc_codewords;
  unsigned char data_blocks[4], ecc_blocks[3];
  bits_total = 20;
  latch = 0;
  bits_left = bits_total - strlen(binary_data);
  if (bits_left <= 3) {
    for (i = 0; i < bits_left; i++) {
      concat(binary_data, "0");
    }
    latch = 1;
  } else {
    concat(binary_data, "000");
  }
  if (latch == 0) {
    bits_left = bits_total - strlen(binary_data);
    if (bits_left <= 4) {
      for (i = 0; i < bits_left; i++) {
        concat(binary_data, "0");
      }
      latch = 1;
    }
  }
  if (latch == 0) {
    remainder = 8 - (strlen(binary_data) % 8);
    if (remainder == 8) {
      remainder = 0;
    }
    for (i = 0; i < remainder; i++) {
      concat(binary_data, "0");
    }
    bits_left = bits_total - strlen(binary_data);
    if (bits_left > 4) {
      remainder = (bits_left - 4) / 8;
      for (i = 0; i < remainder; i++) {
        concat(binary_data, i & 1 ? "00010001" : "11101100");
      }
    }
    concat(binary_data, "0000");
  }
  data_codewords = 3;
  ecc_codewords = 2;
  for (i = 0; i < (data_codewords - 1); i++) {
    data_blocks[i] = 0;
    if (binary_data[i * 8] == '1') {
      data_blocks[i] += 0x80;
    }
    if (binary_data[(i * 8) + 1] == '1') {
      data_blocks[i] += 0x40;
    }
    if (binary_data[(i * 8) + 2] == '1') {
      data_blocks[i] += 0x20;
    }
    if (binary_data[(i * 8) + 3] == '1') {
      data_blocks[i] += 0x10;
    }
    if (binary_data[(i * 8) + 4] == '1') {
      data_blocks[i] += 0x08;
    }
    if (binary_data[(i * 8) + 5] == '1') {
      data_blocks[i] += 0x04;
    }
    if (binary_data[(i * 8) + 6] == '1') {
      data_blocks[i] += 0x02;
    }
    if (binary_data[(i * 8) + 7] == '1') {
      data_blocks[i] += 0x01;
    }
  }
  data_blocks[2] = 0;
  if (binary_data[16] == '1') {
    data_blocks[2] += 0x08;
  }
  if (binary_data[17] == '1') {
    data_blocks[2] += 0x04;
  }
  if (binary_data[18] == '1') {
    data_blocks[2] += 0x02;
  }
  if (binary_data[19] == '1') {
    data_blocks[2] += 0x01;
  }
  rs_init_gf(0x11d);
  rs_init_code(ecc_codewords, 0);
  rs_encode(data_codewords, data_blocks, ecc_blocks);
  rs_free();
  for (i = 0; i < ecc_codewords; i++) {
    qr_diran(binary_data, ecc_blocks[ecc_codewords - i - 1], 0x80);
  }
}


x86 assembly (clang, -O0):
<micro_qr_m1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
movl   $0x14,-0x14(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x30(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x3,-0x18(%rbp)
jg     11ea <micro_qr_m1+0x7a>
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    11de <micro_qr_m1+0x6e>
mov    -0x8(%rbp),%rdi
lea    0xe4a(%rip),%rsi
call   1050 <concat@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    11b4 <micro_qr_m1+0x44>
movl   $0x1,-0x10(%rbp)
jmp    11fa <micro_qr_m1+0x8a>
mov    -0x8(%rbp),%rdi
lea    0xe1e(%rip),%rsi
call   1050 <concat@plt>
cmpl   $0x0,-0x10(%rbp)
jne    1264 <micro_qr_m1+0xf4>
mov    -0x14(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x34(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x4,-0x18(%rbp)
jg     125f <micro_qr_m1+0xef>
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1258 <micro_qr_m1+0xe8>
mov    -0x8(%rbp),%rdi
lea    0xdd0(%rip),%rsi
call   1050 <concat@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    122e <micro_qr_m1+0xbe>
movl   $0x1,-0x10(%rbp)
jmp    1264 <micro_qr_m1+0xf4>
cmpl   $0x0,-0x10(%rbp)
jne    1359 <micro_qr_m1+0x1e9>
mov    -0x8(%rbp),%rdi
call   1040 <strlen@plt>
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    $0x8,%eax
sub    %edx,%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x8,-0x1c(%rbp)
jne    129a <micro_qr_m1+0x12a>
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    12cb <micro_qr_m1+0x15b>
mov    -0x8(%rbp),%rdi
lea    0xd5d(%rip),%rsi
call   1050 <concat@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    12a1 <micro_qr_m1+0x131>
mov    -0x14(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x38(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x4,-0x18(%rbp)
jle    1349 <micro_qr_m1+0x1d9>
mov    -0x18(%rbp),%eax
sub    $0x4,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1344 <micro_qr_m1+0x1d4>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%ecx
and    $0x1,%ecx
lea    0xce6(%rip),%rsi
lea    0xcd6(%rip),%rax
cmp    $0x0,%ecx
cmovne %rax,%rsi
call   1050 <concat@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1306 <micro_qr_m1+0x196>
jmp    1349 <micro_qr_m1+0x1d9>
mov    -0x8(%rbp),%rdi
lea    0xcbe(%rip),%rsi
call   1050 <concat@plt>
movl   $0x3,-0x20(%rbp)
movl   $0x2,-0x24(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1503 <micro_qr_m1+0x393>
movslq -0xc(%rbp),%rax
movb   $0x0,-0x28(%rbp,%rax,1)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jne    13b5 <micro_qr_m1+0x245>
movslq -0xc(%rbp),%rax
movzbl -0x28(%rbp,%rax,1),%ecx
add    $0x80,%ecx
mov    %cl,-0x28(%rbp,%rax,1)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x3,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jne    13e2 <micro_qr_m1+0x272>
movslq -0xc(%rbp),%rax
movzbl -0x28(%rbp,%rax,1),%ecx
add    $0x40,%ecx
mov    %cl,-0x28(%rbp,%rax,1)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x3,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jne    140f <micro_qr_m1+0x29f>
movslq -0xc(%rbp),%rax
movzbl -0x28(%rbp,%rax,1),%ecx
add    $0x20,%ecx
mov    %cl,-0x28(%rbp,%rax,1)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x3,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jne    143c <micro_qr_m1+0x2cc>
movslq -0xc(%rbp),%rax
movzbl -0x28(%rbp,%rax,1),%ecx
add    $0x10,%ecx
mov    %cl,-0x28(%rbp,%rax,1)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x3,%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jne    1469 <micro_qr_m1+0x2f9>
movslq -0xc(%rbp),%rax
movzbl -0x28(%rbp,%rax,1),%ecx
add    $0x8,%ecx
mov    %cl,-0x28(%rbp,%rax,1)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x3,%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jne    1496 <micro_qr_m1+0x326>
movslq -0xc(%rbp),%rax
movzbl -0x28(%rbp,%rax,1),%ecx
add    $0x4,%ecx
mov    %cl,-0x28(%rbp,%rax,1)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x3,%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jne    14c3 <micro_qr_m1+0x353>
movslq -0xc(%rbp),%rax
movzbl -0x28(%rbp,%rax,1),%ecx
add    $0x2,%ecx
mov    %cl,-0x28(%rbp,%rax,1)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x3,%ecx
add    $0x7,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jne    14f0 <micro_qr_m1+0x380>
movslq -0xc(%rbp),%rax
movzbl -0x28(%rbp,%rax,1),%ecx
add    $0x1,%ecx
mov    %cl,-0x28(%rbp,%rax,1)
jmp    14f5 <micro_qr_m1+0x385>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    136e <micro_qr_m1+0x1fe>
movb   $0x0,-0x26(%rbp)
mov    -0x8(%rbp),%rax
movsbl 0x10(%rax),%eax
cmp    $0x31,%eax
jne    1522 <micro_qr_m1+0x3b2>
movzbl -0x26(%rbp),%eax
add    $0x8,%eax
mov    %al,-0x26(%rbp)
mov    -0x8(%rbp),%rax
movsbl 0x11(%rax),%eax
cmp    $0x31,%eax
jne    153d <micro_qr_m1+0x3cd>
movzbl -0x26(%rbp),%eax
add    $0x4,%eax
mov    %al,-0x26(%rbp)
mov    -0x8(%rbp),%rax
movsbl 0x12(%rax),%eax
cmp    $0x31,%eax
jne    1558 <micro_qr_m1+0x3e8>
movzbl -0x26(%rbp),%eax
add    $0x2,%eax
mov    %al,-0x26(%rbp)
mov    -0x8(%rbp),%rax
movsbl 0x13(%rax),%eax
cmp    $0x31,%eax
jne    1573 <micro_qr_m1+0x403>
movzbl -0x26(%rbp),%eax
add    $0x1,%eax
mov    %al,-0x26(%rbp)
mov    $0x11d,%edi
call   1090 <rs_init_gf@plt>
mov    -0x24(%rbp),%edi
xor    %esi,%esi
call   1070 <rs_init_code@plt>
mov    -0x20(%rbp),%edi
lea    -0x28(%rbp),%rsi
lea    -0x2b(%rbp),%rdx
call   1060 <rs_encode@plt>
mov    $0x0,%al
call   1030 <rs_free@plt>
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    15dd <micro_qr_m1+0x46d>
mov    -0x8(%rbp),%rdi
mov    -0x24(%rbp),%eax
sub    -0xc(%rbp),%eax
sub    $0x1,%eax
cltq
mov    $0x80,%edx
movzbl -0x2b(%rbp,%rax,1),%esi
call   1080 <qr_diran@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    15a5 <micro_qr_m1+0x435>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<micro_qr_m1>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x10,%rsp
mov    %rdi,%r14
call   1040 <strlen@plt>
mov    $0x14,%ebx
cmp    $0x11,%eax
jl     11c5 <micro_qr_m1+0x55>
cmp    $0x13,%eax
ja     12b9 <micro_qr_m1+0x149>
sub    %eax,%ebx
cmp    $0x2,%ebx
mov    $0x1,%ebp
cmovge %ebx,%ebp
lea    0xe6a(%rip),%rbx
nopl   0x0(%rax,%rax,1)
mov    %r14,%rdi
mov    %rbx,%rsi
call   1050 <concat@plt>
add    $0xffffffff,%ebp
jne    11b0 <micro_qr_m1+0x40>
jmp    12b9 <micro_qr_m1+0x149>
lea    0xe47(%rip),%rsi
mov    %r14,%rdi
call   1050 <concat@plt>
mov    %r14,%rdi
call   1040 <strlen@plt>
cmp    $0x10,%eax
jl     1215 <micro_qr_m1+0xa5>
cmp    $0x13,%eax
ja     12b9 <micro_qr_m1+0x149>
sub    %eax,%ebx
cmp    $0x2,%ebx
mov    $0x1,%ebp
cmovge %ebx,%ebp
lea    0xe17(%rip),%rbx
xchg   %ax,%ax
mov    %r14,%rdi
mov    %rbx,%rsi
call   1050 <concat@plt>
add    $0xffffffff,%ebp
jne    1200 <micro_qr_m1+0x90>
jmp    12b9 <micro_qr_m1+0x149>
mov    %r14,%rdi
call   1040 <strlen@plt>
mov    %eax,%ebx
lea    0x7(%rbx),%eax
test   %ebx,%ebx
cmovns %ebx,%eax
and    $0xfffffff8,%eax
sub    %eax,%ebx
je     124f <micro_qr_m1+0xdf>
add    $0xfffffff8,%ebx
lea    0xddd(%rip),%r15
nopl   0x0(%rax,%rax,1)
mov    %r14,%rdi
mov    %r15,%rsi
call   1050 <concat@plt>
inc    %ebx
jne    1240 <micro_qr_m1+0xd0>
mov    %r14,%rdi
call   1040 <strlen@plt>
cmp    $0xf,%eax
jg     12aa <micro_qr_m1+0x13a>
mov    $0x10,%ecx
sub    %eax,%ecx
mov    $0x17,%ebx
sub    %eax,%ebx
test   %ecx,%ecx
cmovns %ecx,%ebx
cmp    $0x8,%ecx
jl     12aa <micro_qr_m1+0x13a>
sar    $0x3,%ebx
xor    %ebp,%ebp
lea    0xd89(%rip),%r15
lea    0xd79(%rip),%r12
nopw   0x0(%rax,%rax,1)
test   $0x1,%bpl
mov    %r12,%rsi
cmove  %r15,%rsi
mov    %r14,%rdi
call   1050 <concat@plt>
add    $0x1,%ebp
cmp    %ebp,%ebx
jne    1290 <micro_qr_m1+0x120>
lea    0xd61(%rip),%rsi
mov    %r14,%rdi
call   1050 <concat@plt>
cmpb   $0x31,(%r14)
sete   %al
shl    $0x7,%al
mov    %al,0x9(%rsp)
cmpb   $0x31,0x1(%r14)
je     1408 <micro_qr_m1+0x298>
cmpb   $0x31,0x2(%r14)
je     1419 <micro_qr_m1+0x2a9>
cmpb   $0x31,0x3(%r14)
je     142a <micro_qr_m1+0x2ba>
cmpb   $0x31,0x4(%r14)
je     143b <micro_qr_m1+0x2cb>
cmpb   $0x31,0x5(%r14)
je     144c <micro_qr_m1+0x2dc>
cmpb   $0x31,0x6(%r14)
je     145d <micro_qr_m1+0x2ed>
cmpb   $0x31,0x7(%r14)
jne    1316 <micro_qr_m1+0x1a6>
add    $0x1,%al
mov    %al,0x9(%rsp)
cmpb   $0x31,0x8(%r14)
sete   %al
shl    $0x7,%al
mov    %al,0xa(%rsp)
cmpb   $0x31,0x9(%r14)
je     1473 <micro_qr_m1+0x303>
cmpb   $0x31,0xa(%r14)
je     1484 <micro_qr_m1+0x314>
cmpb   $0x31,0xb(%r14)
je     1495 <micro_qr_m1+0x325>
cmpb   $0x31,0xc(%r14)
je     14a6 <micro_qr_m1+0x336>
cmpb   $0x31,0xd(%r14)
je     14b7 <micro_qr_m1+0x347>
cmpb   $0x31,0xe(%r14)
je     14c8 <micro_qr_m1+0x358>
cmpb   $0x31,0xf(%r14)
jne    1374 <micro_qr_m1+0x204>
add    $0x1,%al
mov    %al,0xa(%rsp)
cmpb   $0x31,0x10(%r14)
sete   %al
shl    $0x3,%al
mov    %al,0xb(%rsp)
cmpb   $0x31,0x11(%r14)
je     14de <micro_qr_m1+0x36e>
cmpb   $0x31,0x12(%r14)
je     14ef <micro_qr_m1+0x37f>
cmpb   $0x31,0x13(%r14)
jne    13a6 <micro_qr_m1+0x236>
add    $0x1,%al
mov    %al,0xb(%rsp)
mov    $0x11d,%edi
call   1090 <rs_init_gf@plt>
mov    $0x2,%edi
xor    %esi,%esi
call   1070 <rs_init_code@plt>
lea    0x9(%rsp),%rsi
lea    0xd(%rsp),%rdx
mov    $0x3,%edi
call   1060 <rs_encode@plt>
xor    %eax,%eax
call   1030 <rs_free@plt>
movzbl 0xe(%rsp),%esi
mov    %r14,%rdi
mov    $0x80,%edx
call   1080 <qr_diran@plt>
movzbl 0xd(%rsp),%esi
mov    %r14,%rdi
mov    $0x80,%edx
call   1080 <qr_diran@plt>
add    $0x10,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
or     $0x40,%al
mov    %al,0x9(%rsp)
cmpb   $0x31,0x2(%r14)
jne    12dd <micro_qr_m1+0x16d>
add    $0x20,%al
mov    %al,0x9(%rsp)
cmpb   $0x31,0x3(%r14)
jne    12e8 <micro_qr_m1+0x178>
add    $0x10,%al
mov    %al,0x9(%rsp)
cmpb   $0x31,0x4(%r14)
jne    12f3 <micro_qr_m1+0x183>
add    $0x8,%al
mov    %al,0x9(%rsp)
cmpb   $0x31,0x5(%r14)
jne    12fe <micro_qr_m1+0x18e>
add    $0x4,%al
mov    %al,0x9(%rsp)
cmpb   $0x31,0x6(%r14)
jne    1309 <micro_qr_m1+0x199>
add    $0x2,%al
mov    %al,0x9(%rsp)
cmpb   $0x31,0x7(%r14)
je     1310 <micro_qr_m1+0x1a0>
jmp    1316 <micro_qr_m1+0x1a6>
or     $0x40,%al
mov    %al,0xa(%rsp)
cmpb   $0x31,0xa(%r14)
jne    133b <micro_qr_m1+0x1cb>
add    $0x20,%al
mov    %al,0xa(%rsp)
cmpb   $0x31,0xb(%r14)
jne    1346 <micro_qr_m1+0x1d6>
add    $0x10,%al
mov    %al,0xa(%rsp)
cmpb   $0x31,0xc(%r14)
jne    1351 <micro_qr_m1+0x1e1>
add    $0x8,%al
mov    %al,0xa(%rsp)
cmpb   $0x31,0xd(%r14)
jne    135c <micro_qr_m1+0x1ec>
add    $0x4,%al
mov    %al,0xa(%rsp)
cmpb   $0x31,0xe(%r14)
jne    1367 <micro_qr_m1+0x1f7>
add    $0x2,%al
mov    %al,0xa(%rsp)
cmpb   $0x31,0xf(%r14)
je     136e <micro_qr_m1+0x1fe>
jmp    1374 <micro_qr_m1+0x204>
or     $0x4,%al
mov    %al,0xb(%rsp)
cmpb   $0x31,0x12(%r14)
jne    1399 <micro_qr_m1+0x229>
add    $0x2,%al
mov    %al,0xb(%rsp)
cmpb   $0x31,0x13(%r14)
je     13a0 <micro_qr_m1+0x230>
jmp    13a6 <micro_qr_m1+0x236>

LLVM IR (-O0):
@.str = [2 x i8] c"0\00"
@.str.1 = [4 x i8] c"000\00"
@.str.2 = [9 x i8] c"00010001\00"
@.str.3 = [9 x i8] c"11101100\00"
@.str.4 = [5 x i8] c"0000\00"
define void @micro_qr_m1(i8* %0) {
%2 = alloca i8*
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca [4 x i8]
%11 = alloca [3 x i8]
store i8* %0, i8** %2
store i32 20, i32* %5
store i32 0, i32* %4
%12 = load i32, i32* %5
%13 = load i8*, i8** %2
%14 = call i32 @strlen(i8* %13)
%15 = sub nsw i32 %12, %14
store i32 %15, i32* %6
%16 = load i32, i32* %6
%17 = icmp sle i32 %16, 3
br i1 %17, label %18, label %30
18: ; preds = %1
store i32 0, i32* %3
br label %19
19: ; preds = %26, %18
%20 = load i32, i32* %3
%21 = load i32, i32* %6
%22 = icmp slt i32 %20, %21
br i1 %22, label %23, label %29
23: ; preds = %19
%24 = load i8*, i8** %2
%25 = call i32 @concat(i8* %24, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
br label %26
26: ; preds = %23
%27 = load i32, i32* %3
%28 = add nsw i32 %27, 1
store i32 %28, i32* %3
br label %19
29: ; preds = %19
store i32 1, i32* %4
br label %33
30: ; preds = %1
%31 = load i8*, i8** %2
%32 = call i32 @concat(i8* %31, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %33
33: ; preds = %30, %29
%34 = load i32, i32* %4
%35 = icmp eq i32 %34, 0
br i1 %35, label %36, label %56
36: ; preds = %33
%37 = load i32, i32* %5
%38 = load i8*, i8** %2
%39 = call i32 @strlen(i8* %38)
%40 = sub nsw i32 %37, %39
store i32 %40, i32* %6
%41 = load i32, i32* %6
%42 = icmp sle i32 %41, 4
br i1 %42, label %43, label %55
43: ; preds = %36
store i32 0, i32* %3
br label %44
44: ; preds = %51, %43
%45 = load i32, i32* %3
%46 = load i32, i32* %6
%47 = icmp slt i32 %45, %46
br i1 %47, label %48, label %54
48: ; preds = %44
%49 = load i8*, i8** %2
%50 = call i32 @concat(i8* %49, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
br label %51
51: ; preds = %48
%52 = load i32, i32* %3
%53 = add nsw i32 %52, 1
store i32 %53, i32* %3
br label %44
54: ; preds = %44
store i32 1, i32* %4
br label %55
55: ; preds = %54, %36
br label %56
56: ; preds = %55, %33
%57 = load i32, i32* %4
%58 = icmp eq i32 %57, 0
br i1 %58, label %59, label %108
59: ; preds = %56
%60 = load i8*, i8** %2
%61 = call i32 @strlen(i8* %60)
%62 = srem i32 %61, 8
%63 = sub nsw i32 8, %62
store i32 %63, i32* %7
%64 = load i32, i32* %7
%65 = icmp eq i32 %64, 8
br i1 %65, label %66, label %67
66: ; preds = %59
store i32 0, i32* %7
br label %67
67: ; preds = %66, %59
store i32 0, i32* %3
br label %68
68: ; preds = %75, %67
%69 = load i32, i32* %3
%70 = load i32, i32* %7
%71 = icmp slt i32 %69, %70
br i1 %71, label %72, label %78
72: ; preds = %68
%73 = load i8*, i8** %2
%74 = call i32 @concat(i8* %73, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
br label %75
75: ; preds = %72
%76 = load i32, i32* %3
%77 = add nsw i32 %76, 1
store i32 %77, i32* %3
br label %68
78: ; preds = %68
%79 = load i32, i32* %5
%80 = load i8*, i8** %2
%81 = call i32 @strlen(i8* %80)
%82 = sub nsw i32 %79, %81
store i32 %82, i32* %6
%83 = load i32, i32* %6
%84 = icmp sgt i32 %83, 4
br i1 %84, label %85, label %105
85: ; preds = %78
%86 = load i32, i32* %6
%87 = sub nsw i32 %86, 4
%88 = sdiv i32 %87, 8
store i32 %88, i32* %7
store i32 0, i32* %3
br label %89
89: ; preds = %101, %85
%90 = load i32, i32* %3
%91 = load i32, i32* %7
%92 = icmp slt i32 %90, %91
br i1 %92, label %93, label %104
93: ; preds = %89
%94 = load i8*, i8** %2
%95 = load i32, i32* %3
%96 = and i32 %95, 1
%97 = icmp ne i32 %96, 0
%98 = zext i1 %97 to i64
%99 = select i1 %97, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0)
%100 = call i32 @concat(i8* %94, i8* %99)
br label %101
101: ; preds = %93
%102 = load i32, i32* %3
%103 = add nsw i32 %102, 1
store i32 %103, i32* %3
br label %89
104: ; preds = %89
br label %105
105: ; preds = %104, %78
%106 = load i8*, i8** %2
%107 = call i32 @concat(i8* %106, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
br label %108
108: ; preds = %105, %56
store i32 3, i32* %8
store i32 2, i32* %9
store i32 0, i32* %3
br label %109
109: ; preds = %261, %108
%110 = load i32, i32* %3
%111 = load i32, i32* %8
%112 = sub nsw i32 %111, 1
%113 = icmp slt i32 %110, %112
br i1 %113, label %114, label %264
114: ; preds = %109
%115 = load i32, i32* %3
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 %116
store i8 0, i8* %117
%118 = load i8*, i8** %2
%119 = load i32, i32* %3
%120 = mul nsw i32 %119, 8
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds i8, i8* %118, i64 %121
%123 = load i8, i8* %122
%124 = sext i8 %123 to i32
%125 = icmp eq i32 %124, 49
br i1 %125, label %126, label %134
126: ; preds = %114
%127 = load i32, i32* %3
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 %128
%130 = load i8, i8* %129
%131 = zext i8 %130 to i32
%132 = add nsw i32 %131, 128
%133 = trunc i32 %132 to i8
store i8 %133, i8* %129
br label %134
134: ; preds = %126, %114
%135 = load i8*, i8** %2
%136 = load i32, i32* %3
%137 = mul nsw i32 %136, 8
%138 = add nsw i32 %137, 1
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds i8, i8* %135, i64 %139
%141 = load i8, i8* %140
%142 = sext i8 %141 to i32
%143 = icmp eq i32 %142, 49
br i1 %143, label %144, label %152
144: ; preds = %134
%145 = load i32, i32* %3
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 %146
%148 = load i8, i8* %147
%149 = zext i8 %148 to i32
%150 = add nsw i32 %149, 64
%151 = trunc i32 %150 to i8
store i8 %151, i8* %147
br label %152
152: ; preds = %144, %134
%153 = load i8*, i8** %2
%154 = load i32, i32* %3
%155 = mul nsw i32 %154, 8
%156 = add nsw i32 %155, 2
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds i8, i8* %153, i64 %157
%159 = load i8, i8* %158
%160 = sext i8 %159 to i32
%161 = icmp eq i32 %160, 49
br i1 %161, label %162, label %170
162: ; preds = %152
%163 = load i32, i32* %3
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 %164
%166 = load i8, i8* %165
%167 = zext i8 %166 to i32
%168 = add nsw i32 %167, 32
%169 = trunc i32 %168 to i8
store i8 %169, i8* %165
br label %170
170: ; preds = %162, %152
%171 = load i8*, i8** %2
%172 = load i32, i32* %3
%173 = mul nsw i32 %172, 8
%174 = add nsw i32 %173, 3
%175 = sext i32 %174 to i64
%176 = getelementptr inbounds i8, i8* %171, i64 %175
%177 = load i8, i8* %176
%178 = sext i8 %177 to i32
%179 = icmp eq i32 %178, 49
br i1 %179, label %180, label %188
180: ; preds = %170
%181 = load i32, i32* %3
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 %182
%184 = load i8, i8* %183
%185 = zext i8 %184 to i32
%186 = add nsw i32 %185, 16
%187 = trunc i32 %186 to i8
store i8 %187, i8* %183
br label %188
188: ; preds = %180, %170
%189 = load i8*, i8** %2
%190 = load i32, i32* %3
%191 = mul nsw i32 %190, 8
%192 = add nsw i32 %191, 4
%193 = sext i32 %192 to i64
%194 = getelementptr inbounds i8, i8* %189, i64 %193
%195 = load i8, i8* %194
%196 = sext i8 %195 to i32
%197 = icmp eq i32 %196, 49
br i1 %197, label %198, label %206
198: ; preds = %188
%199 = load i32, i32* %3
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 %200
%202 = load i8, i8* %201
%203 = zext i8 %202 to i32
%204 = add nsw i32 %203, 8
%205 = trunc i32 %204 to i8
store i8 %205, i8* %201
br label %206
206: ; preds = %198, %188
%207 = load i8*, i8** %2
%208 = load i32, i32* %3
%209 = mul nsw i32 %208, 8
%210 = add nsw i32 %209, 5
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds i8, i8* %207, i64 %211
%213 = load i8, i8* %212
%214 = sext i8 %213 to i32
%215 = icmp eq i32 %214, 49
br i1 %215, label %216, label %224
216: ; preds = %206
%217 = load i32, i32* %3
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 %218
%220 = load i8, i8* %219
%221 = zext i8 %220 to i32
%222 = add nsw i32 %221, 4
%223 = trunc i32 %222 to i8
store i8 %223, i8* %219
br label %224
224: ; preds = %216, %206
%225 = load i8*, i8** %2
%226 = load i32, i32* %3
%227 = mul nsw i32 %226, 8
%228 = add nsw i32 %227, 6
%229 = sext i32 %228 to i64
%230 = getelementptr inbounds i8, i8* %225, i64 %229
%231 = load i8, i8* %230
%232 = sext i8 %231 to i32
%233 = icmp eq i32 %232, 49
br i1 %233, label %234, label %242
234: ; preds = %224
%235 = load i32, i32* %3
%236 = sext i32 %235 to i64
%237 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 %236
%238 = load i8, i8* %237
%239 = zext i8 %238 to i32
%240 = add nsw i32 %239, 2
%241 = trunc i32 %240 to i8
store i8 %241, i8* %237
br label %242
242: ; preds = %234, %224
%243 = load i8*, i8** %2
%244 = load i32, i32* %3
%245 = mul nsw i32 %244, 8
%246 = add nsw i32 %245, 7
%247 = sext i32 %246 to i64
%248 = getelementptr inbounds i8, i8* %243, i64 %247
%249 = load i8, i8* %248
%250 = sext i8 %249 to i32
%251 = icmp eq i32 %250, 49
br i1 %251, label %252, label %260
252: ; preds = %242
%253 = load i32, i32* %3
%254 = sext i32 %253 to i64
%255 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 %254
%256 = load i8, i8* %255
%257 = zext i8 %256 to i32
%258 = add nsw i32 %257, 1
%259 = trunc i32 %258 to i8
store i8 %259, i8* %255
br label %260
260: ; preds = %252, %242
br label %261
261: ; preds = %260
%262 = load i32, i32* %3
%263 = add nsw i32 %262, 1
store i32 %263, i32* %3
br label %109
264: ; preds = %109
%265 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 2
store i8 0, i8* %265
%266 = load i8*, i8** %2
%267 = getelementptr inbounds i8, i8* %266, i64 16
%268 = load i8, i8* %267
%269 = sext i8 %268 to i32
%270 = icmp eq i32 %269, 49
br i1 %270, label %271, label %277
271: ; preds = %264
%272 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 2
%273 = load i8, i8* %272
%274 = zext i8 %273 to i32
%275 = add nsw i32 %274, 8
%276 = trunc i32 %275 to i8
store i8 %276, i8* %272
br label %277
277: ; preds = %271, %264
%278 = load i8*, i8** %2
%279 = getelementptr inbounds i8, i8* %278, i64 17
%280 = load i8, i8* %279
%281 = sext i8 %280 to i32
%282 = icmp eq i32 %281, 49
br i1 %282, label %283, label %289
283: ; preds = %277
%284 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 2
%285 = load i8, i8* %284
%286 = zext i8 %285 to i32
%287 = add nsw i32 %286, 4
%288 = trunc i32 %287 to i8
store i8 %288, i8* %284
br label %289
289: ; preds = %283, %277
%290 = load i8*, i8** %2
%291 = getelementptr inbounds i8, i8* %290, i64 18
%292 = load i8, i8* %291
%293 = sext i8 %292 to i32
%294 = icmp eq i32 %293, 49
br i1 %294, label %295, label %301
295: ; preds = %289
%296 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 2
%297 = load i8, i8* %296
%298 = zext i8 %297 to i32
%299 = add nsw i32 %298, 2
%300 = trunc i32 %299 to i8
store i8 %300, i8* %296
br label %301
301: ; preds = %295, %289
%302 = load i8*, i8** %2
%303 = getelementptr inbounds i8, i8* %302, i64 19
%304 = load i8, i8* %303
%305 = sext i8 %304 to i32
%306 = icmp eq i32 %305, 49
br i1 %306, label %307, label %313
307: ; preds = %301
%308 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 2
%309 = load i8, i8* %308
%310 = zext i8 %309 to i32
%311 = add nsw i32 %310, 1
%312 = trunc i32 %311 to i8
store i8 %312, i8* %308
br label %313
313: ; preds = %307, %301
%314 = call i32 @rs_init_gf(i32 285)
%315 = load i32, i32* %9
%316 = call i32 @rs_init_code(i32 %315, i32 0)
%317 = load i32, i32* %8
%318 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 0
%319 = getelementptr inbounds [3 x i8], [3 x i8]* %11, i64 0, i64 0
%320 = call i32 @rs_encode(i32 %317, i8* %318, i8* %319)
%321 = call i32 (...) @rs_free()
store i32 0, i32* %3
br label %322
322: ; preds = %336, %313
%323 = load i32, i32* %3
%324 = load i32, i32* %9
%325 = icmp slt i32 %323, %324
br i1 %325, label %326, label %339
326: ; preds = %322
%327 = load i8*, i8** %2
%328 = load i32, i32* %9
%329 = load i32, i32* %3
%330 = sub nsw i32 %328, %329
%331 = sub nsw i32 %330, 1
%332 = sext i32 %331 to i64
%333 = getelementptr inbounds [3 x i8], [3 x i8]* %11, i64 0, i64 %332
%334 = load i8, i8* %333
%335 = call i32 @qr_diran(i8* %327, i8 zeroext %334, i32 128)
br label %336
336: ; preds = %326
%337 = load i32, i32* %3
%338 = add nsw i32 %337, 1
store i32 %338, i32* %3
br label %322
339: ; preds = %322
ret void
}

LLVM IR (-O2):
@.str = [2 x i8] c"0\00"
@.str.1 = [4 x i8] c"000\00"
@.str.2 = [9 x i8] c"00010001\00"
@.str.3 = [9 x i8] c"11101100\00"
@.str.4 = [5 x i8] c"0000\00"
define void @micro_qr_m1(i8* %0) {
%2 = alloca [4 x i8]
%3 = alloca [3 x i8]
%4 = getelementptr inbounds [4 x i8], [4 x i8]* %2, i64 0, i64 0
%5 = getelementptr inbounds [3 x i8], [3 x i8]* %3, i64 0, i64 0
%6 = tail call i32 @strlen(i8* %0)
%7 = sub i32 20, %6
%8 = icmp sgt i32 %6, 16
br i1 %8, label %9, label %18
9: ; preds = %1
%10 = icmp ult i32 %6, 20
br i1 %10, label %11, label %59
11: ; preds = %9
%12 = call i32 @llvm.smax.i32(i32 %7, i32 1)
br label %13
13: ; preds = %11, %13
%14 = phi i32 [ %16, %13 ], [ 0, %11 ]
%15 = tail call i32 @concat(i8* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%16 = add nuw nsw i32 %14, 1
%17 = icmp eq i32 %16, %12
br i1 %17, label %59, label %13
18: ; preds = %1
%19 = tail call i32 @concat(i8* %0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
%20 = tail call i32 @strlen(i8* %0)
%21 = sub i32 20, %20
%22 = icmp sgt i32 %20, 15
br i1 %22, label %23, label %32
23: ; preds = %18
%24 = icmp ult i32 %20, 20
br i1 %24, label %25, label %59
25: ; preds = %23
%26 = call i32 @llvm.smax.i32(i32 %21, i32 1)
br label %27
27: ; preds = %25, %27
%28 = phi i32 [ %30, %27 ], [ 0, %25 ]
%29 = tail call i32 @concat(i8* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%30 = add nuw nsw i32 %28, 1
%31 = icmp eq i32 %30, %26
br i1 %31, label %59, label %27
32: ; preds = %18
%33 = tail call i32 @strlen(i8* %0)
%34 = srem i32 %33, 8
%35 = sub nsw i32 8, %34
%36 = icmp eq i32 %34, 0
br i1 %36, label %42, label %37
37: ; preds = %32, %37
%38 = phi i32 [ %40, %37 ], [ 0, %32 ]
%39 = tail call i32 @concat(i8* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%40 = add nuw nsw i32 %38, 1
%41 = icmp eq i32 %40, %35
br i1 %41, label %42, label %37
42: ; preds = %37, %32
%43 = tail call i32 @strlen(i8* %0)
%44 = icmp slt i32 %43, 16
br i1 %44, label %45, label %57
45: ; preds = %42
%46 = sub i32 16, %43
%47 = sdiv i32 %46, 8
%48 = icmp sgt i32 %46, 7
br i1 %48, label %49, label %57
49: ; preds = %45, %49
%50 = phi i32 [ %55, %49 ], [ 0, %45 ]
%51 = and i32 %50, 1
%52 = icmp eq i32 %51, 0
%53 = select i1 %52, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0)
%54 = tail call i32 @concat(i8* %0, i8* %53)
%55 = add nuw nsw i32 %50, 1
%56 = icmp eq i32 %55, %47
br i1 %56, label %57, label %49
57: ; preds = %49, %45, %42
%58 = tail call i32 @concat(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
br label %59
59: ; preds = %27, %13, %9, %23, %57
%60 = load i8, i8* %0
%61 = icmp eq i8 %60, 49
%62 = select i1 %61, i8 -128, i8 0
store i8 %62, i8* %4
%63 = getelementptr inbounds i8, i8* %0, i64 1
%64 = load i8, i8* %63
%65 = icmp eq i8 %64, 49
br i1 %65, label %66, label %68
66: ; preds = %59
%67 = or i8 %62, 64
store i8 %67, i8* %4
br label %68
68: ; preds = %66, %59
%69 = phi i8 [ %67, %66 ], [ %62, %59 ]
%70 = getelementptr inbounds i8, i8* %0, i64 2
%71 = load i8, i8* %70
%72 = icmp eq i8 %71, 49
br i1 %72, label %73, label %75
73: ; preds = %68
%74 = add i8 %69, 32
store i8 %74, i8* %4
br label %75
75: ; preds = %73, %68
%76 = phi i8 [ %74, %73 ], [ %69, %68 ]
%77 = getelementptr inbounds i8, i8* %0, i64 3
%78 = load i8, i8* %77
%79 = icmp eq i8 %78, 49
br i1 %79, label %80, label %82
80: ; preds = %75
%81 = add i8 %76, 16
store i8 %81, i8* %4
br label %82
82: ; preds = %80, %75
%83 = phi i8 [ %81, %80 ], [ %76, %75 ]
%84 = getelementptr inbounds i8, i8* %0, i64 4
%85 = load i8, i8* %84
%86 = icmp eq i8 %85, 49
br i1 %86, label %87, label %89
87: ; preds = %82
%88 = add i8 %83, 8
store i8 %88, i8* %4
br label %89
89: ; preds = %87, %82
%90 = phi i8 [ %88, %87 ], [ %83, %82 ]
%91 = getelementptr inbounds i8, i8* %0, i64 5
%92 = load i8, i8* %91
%93 = icmp eq i8 %92, 49
br i1 %93, label %94, label %96
94: ; preds = %89
%95 = add i8 %90, 4
store i8 %95, i8* %4
br label %96
96: ; preds = %94, %89
%97 = phi i8 [ %95, %94 ], [ %90, %89 ]
%98 = getelementptr inbounds i8, i8* %0, i64 6
%99 = load i8, i8* %98
%100 = icmp eq i8 %99, 49
br i1 %100, label %101, label %103
101: ; preds = %96
%102 = add i8 %97, 2
store i8 %102, i8* %4
br label %103
103: ; preds = %101, %96
%104 = phi i8 [ %102, %101 ], [ %97, %96 ]
%105 = getelementptr inbounds i8, i8* %0, i64 7
%106 = load i8, i8* %105
%107 = icmp eq i8 %106, 49
br i1 %107, label %108, label %110
108: ; preds = %103
%109 = add i8 %104, 1
store i8 %109, i8* %4
br label %110
110: ; preds = %103, %108
%111 = getelementptr inbounds [4 x i8], [4 x i8]* %2, i64 0, i64 1
%112 = getelementptr inbounds i8, i8* %0, i64 8
%113 = load i8, i8* %112
%114 = icmp eq i8 %113, 49
%115 = select i1 %114, i8 -128, i8 0
store i8 %115, i8* %111
%116 = getelementptr inbounds i8, i8* %0, i64 9
%117 = load i8, i8* %116
%118 = icmp eq i8 %117, 49
br i1 %118, label %119, label %121
119: ; preds = %110
%120 = or i8 %115, 64
store i8 %120, i8* %111
br label %121
121: ; preds = %119, %110
%122 = phi i8 [ %120, %119 ], [ %115, %110 ]
%123 = getelementptr inbounds i8, i8* %0, i64 10
%124 = load i8, i8* %123
%125 = icmp eq i8 %124, 49
br i1 %125, label %126, label %128
126: ; preds = %121
%127 = add i8 %122, 32
store i8 %127, i8* %111
br label %128
128: ; preds = %126, %121
%129 = phi i8 [ %127, %126 ], [ %122, %121 ]
%130 = getelementptr inbounds i8, i8* %0, i64 11
%131 = load i8, i8* %130
%132 = icmp eq i8 %131, 49
br i1 %132, label %133, label %135
133: ; preds = %128
%134 = add i8 %129, 16
store i8 %134, i8* %111
br label %135
135: ; preds = %133, %128
%136 = phi i8 [ %134, %133 ], [ %129, %128 ]
%137 = getelementptr inbounds i8, i8* %0, i64 12
%138 = load i8, i8* %137
%139 = icmp eq i8 %138, 49
br i1 %139, label %140, label %142
140: ; preds = %135
%141 = add i8 %136, 8
store i8 %141, i8* %111
br label %142
142: ; preds = %140, %135
%143 = phi i8 [ %141, %140 ], [ %136, %135 ]
%144 = getelementptr inbounds i8, i8* %0, i64 13
%145 = load i8, i8* %144
%146 = icmp eq i8 %145, 49
br i1 %146, label %147, label %149
147: ; preds = %142
%148 = add i8 %143, 4
store i8 %148, i8* %111
br label %149
149: ; preds = %147, %142
%150 = phi i8 [ %148, %147 ], [ %143, %142 ]
%151 = getelementptr inbounds i8, i8* %0, i64 14
%152 = load i8, i8* %151
%153 = icmp eq i8 %152, 49
br i1 %153, label %154, label %156
154: ; preds = %149
%155 = add i8 %150, 2
store i8 %155, i8* %111
br label %156
156: ; preds = %154, %149
%157 = phi i8 [ %155, %154 ], [ %150, %149 ]
%158 = getelementptr inbounds i8, i8* %0, i64 15
%159 = load i8, i8* %158
%160 = icmp eq i8 %159, 49
br i1 %160, label %161, label %163
161: ; preds = %156
%162 = add i8 %157, 1
store i8 %162, i8* %111
br label %163
163: ; preds = %161, %156
%164 = getelementptr inbounds [4 x i8], [4 x i8]* %2, i64 0, i64 2
%165 = getelementptr inbounds i8, i8* %0, i64 16
%166 = load i8, i8* %165
%167 = icmp eq i8 %166, 49
%168 = select i1 %167, i8 8, i8 0
store i8 %168, i8* %164
%169 = getelementptr inbounds i8, i8* %0, i64 17
%170 = load i8, i8* %169
%171 = icmp eq i8 %170, 49
br i1 %171, label %172, label %174
172: ; preds = %163
%173 = or i8 %168, 4
store i8 %173, i8* %164
br label %174
174: ; preds = %172, %163
%175 = phi i8 [ %173, %172 ], [ %168, %163 ]
%176 = getelementptr inbounds i8, i8* %0, i64 18
%177 = load i8, i8* %176
%178 = icmp eq i8 %177, 49
br i1 %178, label %179, label %181
179: ; preds = %174
%180 = add nsw i8 %175, 2
store i8 %180, i8* %164
br label %181
181: ; preds = %179, %174
%182 = phi i8 [ %180, %179 ], [ %175, %174 ]
%183 = getelementptr inbounds i8, i8* %0, i64 19
%184 = load i8, i8* %183
%185 = icmp eq i8 %184, 49
br i1 %185, label %186, label %188
186: ; preds = %181
%187 = add nsw i8 %182, 1
store i8 %187, i8* %164
br label %188
188: ; preds = %186, %181
%189 = tail call i32 @rs_init_gf(i32 285)
%190 = tail call i32 @rs_init_code(i32 2, i32 0)
%191 = call i32 @rs_encode(i32 3, i8* %4, i8* %5)
%192 = call i32 (...) @rs_free()
%193 = getelementptr inbounds [3 x i8], [3 x i8]* %3, i64 0, i64 1
%194 = load i8, i8* %193
%195 = call i32 @qr_diran(i8* %0, i8 zeroext %194, i32 128)
%196 = load i8, i8* %5
%197 = call i32 @qr_diran(i8* %0, i8 zeroext %196, i32 128)
ret void
}