int main(void) {
  char s[64];
  sprintf(s, ""), assert(0 == strcmp(s, ""));
  sprintf(s, "asdf"), assert(0 == strcmp(s, "asdf"));
  sprintf(s, "%s", "hjkl"), assert(0 == strcmp(s, "hjkl"));
  sprintf(s, "%s%s", "qwert", "12345"), assert(0 == strcmp(s, "qwert12345"));
  sprintf(s, "left%s%s", "qwert", "12345"),
      assert(0 == strcmp(s, "leftqwert12345"));
  sprintf(s, "%smiddle%s", "qwert", "12345"),
      assert(0 == strcmp(s, "qwertmiddle12345"));
  sprintf(s, "%s%sright", "qwert", "12345"),
      assert(0 == strcmp(s, "qwert12345right"));
  sprintf(s, "%d", 42), assert(0 == strcmp(s, "42"));
  sprintf(s, "%d%d", 42, 42), assert(0 == strcmp(s, "4242"));
  sprintf(s, "left%d%d", 42, 42), assert(0 == strcmp(s, "left4242"));
  sprintf(s, "%dmiddle%d", 42, 42), assert(0 == strcmp(s, "42middle42"));
  sprintf(s, "%d%dright", 42, 42), assert(0 == strcmp(s, "4242right"));
  sprintf(s, "%s%d", "qwert", 42), assert(0 == strcmp(s, "qwert42"));
  sprintf(s, "%d%s", 42, "qwert"), assert(0 == strcmp(s, "42qwert"));
  sprintf(s, "left%s%d", "qwert", 424242),
      assert(0 == strcmp(s, "leftqwert424242"));
  sprintf(s, "%smiddle%d", "qwert", 424242),
      assert(0 == strcmp(s, "qwertmiddle424242"));
  sprintf(s, "%s%dright", "qwert", 424242),
      assert(0 == strcmp(s, "qwert424242right"));
  sprintf(s, "left%d%s", 424242, "qwert"),
      assert(0 == strcmp(s, "left424242qwert"));
  sprintf(s, "%dmiddle%s", 424242, "qwert"),
      assert(0 == strcmp(s, "424242middleqwert"));
  sprintf(s, "%d%sright", 424242, "qwert"),
      assert(0 == strcmp(s, "424242qwertright"));
  sprintf(s, "%d", 0x80000000), assert(0 == strcmp(s, "-2147483648"));
  sprintf(s, "%d", 0x80000000 - 1), assert(0 == strcmp(s, "2147483647"));
  sprintf(s, "%"), assert(0 == strcmp(s, ""));
  sprintf(s, "%b"), assert(0 == strcmp(s, "%b"));
  sprintf(s, "%k"), assert(0 == strcmp(s, "%k"));
  sprintf(s, "%r"), assert(0 == strcmp(s, "%r"));
  sprintf(s, "%%"), assert(0 == strcmp(s, "%"));
  sprintf(s, "%%b"), assert(0 == strcmp(s, "%b"));
  sprintf(s, "%%%b"), assert(0 == strcmp(s, "%%b"));
  sprintf(s, "%%%%b"), assert(0 == strcmp(s, "%%b"));
  sprintf(s, "%u", 10), assert(0 == strcmp(s, "10"));
  sprintf(s, "%o", 10), assert(0 == strcmp(s, "12"));
  sprintf(s, "%x", 10), assert(0 == strcmp(s, "a"));
  sprintf(s, "%X", 10), assert(0 == strcmp(s, "A"));
  sprintf(s, "%u%o%x%X", 10, 10, 10, 10), assert(0 == strcmp(s, "1012aA"));
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x50(%rbp),%rdi
lea    0x1009(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xff7(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xe7f(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xe6d(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xf31(%rip),%rsi
lea    0xe46(%rip),%rdx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xe34(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xe18(%rip),%rsi
lea    0xef9(%rip),%rdx
lea    0xe34(%rip),%rcx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xe01(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xdcf(%rip),%rsi
lea    0xeb4(%rip),%rdx
lea    0xdef(%rip),%rcx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xdb8(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xda2(%rip),%rsi
lea    0xe6f(%rip),%rdx
lea    0xdaa(%rip),%rcx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xd8d(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xd79(%rip),%rsi
lea    0xe2a(%rip),%rdx
lea    0xd65(%rip),%rcx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xd63(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xd54(%rip),%rsi
mov    $0x2a,%edx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xda4(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xd16(%rip),%rsi
mov    $0x2a,%ecx
mov    %ecx,%edx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xd64(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xcd4(%rip),%rsi
mov    $0x2a,%ecx
mov    %ecx,%edx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xcc4(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xca8(%rip),%rsi
mov    $0x2a,%ecx
mov    %ecx,%edx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xc9a(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xc80(%rip),%rsi
mov    $0x2a,%ecx
mov    %ecx,%edx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xcc0(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xc58(%rip),%rsi
lea    0xcb1(%rip),%rdx
mov    $0x2a,%ecx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xc2e(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xc66(%rip),%rsi
mov    $0x2a,%edx
lea    0xc69(%rip),%rcx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xc55(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xbce(%rip),%rsi
lea    0xc2b(%rip),%rdx
mov    $0x67932,%ecx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xbb9(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xba4(%rip),%rsi
lea    0xbe8(%rip),%rdx
mov    $0x67932,%ecx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xb91(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xb7e(%rip),%rsi
lea    0xba5(%rip),%rdx
mov    $0x67932,%ecx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xb6a(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xb56(%rip),%rsi
mov    $0x67932,%edx
lea    0xb5d(%rip),%rcx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xb41(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xb2c(%rip),%rsi
mov    $0x67932,%edx
lea    0xb1a(%rip),%rcx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xb19(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xb06(%rip),%rsi
mov    $0x67932,%edx
lea    0xad7(%rip),%rcx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xaf2(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xa08(%rip),%rsi
mov    $0x80000000,%edx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xac7(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0x9cc(%rip),%rsi
mov    $0x7fffffff,%edx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xa97(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xa84(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xa73(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xa52(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0xa40(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0xa0f(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0x9fd(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0x9db(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0x9c9(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0x9a7(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0x996(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0x975(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0x964(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0x93d(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0x92c(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0x905(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0x8f5(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0x8d4(%rip),%rsi
mov    $0xa,%edx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0x8c0(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0x89e(%rip),%rsi
mov    $0xa,%edx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0x88a(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0x868(%rip),%rsi
mov    $0xa,%edx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0x854(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0x837(%rip),%rsi
mov    $0xa,%edx
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0x828(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
lea    -0x50(%rbp),%rdi
lea    0x7f5(%rip),%rsi
mov    $0xa,%r9d
mov    %r9d,%edx
mov    %r9d,%ecx
mov    %r9d,%r8d
mov    $0x0,%al
call   1050 <sprintf@plt>
lea    -0x50(%rbp),%rdi
lea    0x7dd(%rip),%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
xor    %eax,%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    $0x1,%edi
xor    %eax,%eax
call   1030 <assert@plt>
movl   $0x66647361,(%rsp)
movb   $0x0,0x4(%rsp)
mov    $0x1,%edi
xor    %eax,%eax
call   1030 <assert@plt>
movl   $0x6c6b6a68,(%rsp)
movb   $0x0,0x4(%rsp)
mov    $0x1,%edi
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xf10(%rip),%rsi
lea    0xfe9(%rip),%r14
lea    0xf2c(%rip),%r15
mov    %rsp,%r12
mov    %r12,%rdi
mov    %r14,%rdx
mov    %r15,%rcx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x3332317472657771,%rax
31 32 33
xor    (%rsp),%rax
movabs $0x35343332317472,%rbx
mov    0x3(%rsp),%rcx
xor    %rbx,%rcx
xor    %edi,%edi
or     %rax,%rcx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xeb4(%rip),%rsi
mov    %r12,%rdi
mov    %r14,%rdx
mov    %r15,%rcx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x726577717466656c,%rax
77 65 72
xor    (%rsp),%rax
xor    0x7(%rsp),%rbx
xor    %edi,%edi
or     %rax,%rbx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xe92(%rip),%rsi
mov    %r12,%rdi
mov    %r14,%rdx
mov    %r15,%rcx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x3534333231656c64,%rax
33 34 35
xor    0x8(%rsp),%rax
movabs $0x64696d7472657771,%rcx
6d 69 64
xor    (%rsp),%rcx
movzbl 0x10(%rsp),%edx
or     %rcx,%rdx
xor    %edi,%edi
or     %rax,%rdx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xe62(%rip),%rsi
mov    %r12,%rdi
mov    %r14,%rdx
mov    %r15,%rcx
xor    %eax,%eax
call   1040 <sprintf@plt>
movdqa (%rsp),%xmm0
pcmpeqb 0xd97(%rip),%xmm0
pmovmskb %xmm0,%eax
xor    %edi,%edi
cmp    $0xffff,%eax
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xe48(%rip),%r15
mov    %r12,%rdi
mov    %r15,%rsi
mov    $0x2a,%edx
xor    %eax,%eax
call   1040 <sprintf@plt>
mov    $0x3234,%eax
xor    (%rsp),%eax
movzbl 0x2(%rsp),%ecx
xor    %edi,%edi
or     %cx,%ax
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xe10(%rip),%rsi
mov    %r12,%rdi
mov    $0x2a,%edx
mov    $0x2a,%ecx
xor    %eax,%eax
call   1040 <sprintf@plt>
mov    $0x32343234,%eax
xor    (%rsp),%eax
movzbl 0x4(%rsp),%ecx
xor    %edi,%edi
or     %eax,%ecx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xdd5(%rip),%rsi
mov    %r12,%rdi
mov    $0x2a,%edx
mov    $0x2a,%ecx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x323432347466656c,%rax
32 34 32
xor    (%rsp),%rax
movzbl 0x8(%rsp),%ecx
xor    %edi,%edi
or     %rax,%rcx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xda9(%rip),%rsi
mov    %r12,%rdi
mov    $0x2a,%edx
mov    $0x2a,%ecx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x656c6464696d3234,%rax
64 6c 65
xor    (%rsp),%rax
movabs $0x3234656c646469,%rcx
xor    0x3(%rsp),%rcx
xor    %edi,%edi
or     %rax,%rcx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xd77(%rip),%rsi
mov    %r12,%rdi
mov    $0x2a,%edx
mov    $0x2a,%ecx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x6867697232343234,%rax
69 67 68
xor    (%rsp),%rax
movzwl 0x8(%rsp),%ecx
xor    $0x74,%rcx
xor    %edi,%edi
or     %rax,%rcx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xd43(%rip),%rsi
mov    %r12,%rdi
mov    %r14,%rdx
mov    $0x2a,%ecx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x32347472657771,%rax
xor    %edi,%edi
cmp    %rax,(%rsp)
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xd60(%rip),%rsi
mov    %r12,%rdi
mov    $0x2a,%edx
mov    %r14,%rcx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x74726577713234,%rax
xor    %edi,%edi
cmp    %rax,(%rsp)
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xcd7(%rip),%rsi
mov    %r12,%rdi
mov    %r14,%rdx
mov    $0x67932,%ecx
xor    %eax,%eax
call   1040 <sprintf@plt>
movdqa (%rsp),%xmm0
pcmpeqb 0xbce(%rip),%xmm0
pmovmskb %xmm0,%eax
xor    %edi,%edi
cmp    $0xffff,%eax
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xcb4(%rip),%rsi
mov    %r12,%rdi
mov    %r14,%rdx
mov    $0x67932,%ecx
xor    %eax,%eax
call   1040 <sprintf@plt>
movdqa (%rsp),%xmm0
movzwl 0x10(%rsp),%eax
pcmpeqb 0xb9d(%rip),%xmm0
movd   %eax,%xmm1
pcmpeqb 0xba1(%rip),%xmm1
pand   %xmm0,%xmm1
pmovmskb %xmm1,%eax
xor    %edi,%edi
cmp    $0xffff,%eax
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xc80(%rip),%rsi
mov    %r12,%rdi
mov    %r14,%rdx
mov    $0x67932,%ecx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x7468676972323432,%rax
67 68 74
xor    0x8(%rsp),%rax
movabs $0x3432347472657771,%rcx
34 32 34
xor    (%rsp),%rcx
movzbl 0x10(%rsp),%edx
or     %rcx,%rdx
xor    %edi,%edi
or     %rax,%rdx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xc4d(%rip),%rsi
mov    %r12,%rdi
mov    $0x67932,%edx
mov    %r14,%rcx
xor    %eax,%eax
call   1040 <sprintf@plt>
movdqa (%rsp),%xmm0
pcmpeqb 0xb23(%rip),%xmm0
pmovmskb %xmm0,%eax
xor    %edi,%edi
cmp    $0xffff,%eax
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xc2a(%rip),%rsi
mov    %r12,%rdi
mov    $0x67932,%edx
mov    %r14,%rcx
xor    %eax,%eax
call   1040 <sprintf@plt>
movdqa (%rsp),%xmm0
movzwl 0x10(%rsp),%eax
pcmpeqb 0xaf2(%rip),%xmm0
movd   %eax,%xmm1
pcmpeqb 0xaf6(%rip),%xmm1
pand   %xmm0,%xmm1
pmovmskb %xmm1,%eax
xor    %edi,%edi
cmp    $0xffff,%eax
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xbf6(%rip),%rsi
mov    %r12,%rdi
mov    $0x67932,%edx
mov    %r14,%rcx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x7468676972747265,%rax
67 68 74
xor    0x8(%rsp),%rax
movabs $0x7771323432343234,%rcx
32 71 77
xor    (%rsp),%rcx
movzbl 0x10(%rsp),%edx
or     %rcx,%rdx
xor    %edi,%edi
or     %rax,%rdx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
mov    %r12,%rdi
mov    %r15,%rsi
mov    $0x80000000,%edx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x333834373431322d,%rax
34 38 33
xor    (%rsp),%rax
mov    0x8(%rsp),%ecx
xor    $0x383436,%rcx
xor    %edi,%edi
or     %rax,%rcx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
mov    %r12,%rdi
mov    %r15,%rsi
mov    $0x7fffffff,%edx
xor    %eax,%eax
call   1040 <sprintf@plt>
movabs $0x3633383437343132,%rax
38 33 36
xor    (%rsp),%rax
movabs $0x37343633383437,%rcx
xor    0x3(%rsp),%rcx
xor    %edi,%edi
or     %rax,%rcx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xb67(%rip),%rsi
mov    %r12,%rdi
xor    %eax,%eax
call   1040 <sprintf@plt>
xor    %edi,%edi
cmpb   $0x0,(%rsp)
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xb4a(%rip),%rsi
mov    %r12,%rdi
xor    %eax,%eax
call   1040 <sprintf@plt>
mov    $0x6225,%ebx
mov    (%rsp),%eax
xor    %ebx,%eax
movzbl 0x2(%rsp),%ecx
xor    %edi,%edi
or     %cx,%ax
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xb0e(%rip),%rsi
mov    %r12,%rdi
xor    %eax,%eax
call   1040 <sprintf@plt>
mov    $0x6b25,%eax
xor    (%rsp),%eax
movzbl 0x2(%rsp),%ecx
xor    %edi,%edi
or     %cx,%ax
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xae3(%rip),%rsi
mov    %r12,%rdi
xor    %eax,%eax
call   1040 <sprintf@plt>
mov    $0x7225,%eax
xor    (%rsp),%eax
movzbl 0x2(%rsp),%ecx
xor    %edi,%edi
or     %cx,%ax
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xab8(%rip),%rsi
mov    %r12,%rdi
xor    %eax,%eax
call   1040 <sprintf@plt>
xor    %edi,%edi
cmpw   $0x25,(%rsp)
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xa9a(%rip),%rsi
mov    %r12,%rdi
xor    %eax,%eax
call   1040 <sprintf@plt>
xor    (%rsp),%ebx
movzbl 0x2(%rsp),%eax
xor    %edi,%edi
or     %ax,%bx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xa70(%rip),%rsi
mov    %r12,%rdi
xor    %eax,%eax
call   1040 <sprintf@plt>
xor    %edi,%edi
cmpl   $0x622525,(%rsp)
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xa4a(%rip),%rsi
mov    %r12,%rdi
xor    %eax,%eax
call   1040 <sprintf@plt>
xor    %edi,%edi
cmpl   $0x622525,(%rsp)
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0xa2b(%rip),%rsi
mov    %r12,%rdi
mov    $0xa,%edx
xor    %eax,%eax
call   1040 <sprintf@plt>
mov    $0x3031,%eax
xor    (%rsp),%eax
movzbl 0x2(%rsp),%ecx
xor    %edi,%edi
or     %cx,%ax
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0x9fe(%rip),%rsi
mov    %r12,%rdi
mov    $0xa,%edx
xor    %eax,%eax
call   1040 <sprintf@plt>
mov    $0x3231,%eax
xor    (%rsp),%eax
movzbl 0x2(%rsp),%ecx
xor    %edi,%edi
or     %cx,%ax
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0x9d1(%rip),%rsi
mov    %r12,%rdi
mov    $0xa,%edx
xor    %eax,%eax
call   1040 <sprintf@plt>
xor    %edi,%edi
cmpw   $0x61,(%rsp)
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0x9b2(%rip),%rsi
mov    %r12,%rdi
mov    $0xa,%edx
xor    %eax,%eax
call   1040 <sprintf@plt>
xor    %edi,%edi
cmpw   $0x41,(%rsp)
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
lea    0x984(%rip),%rsi
mov    %r12,%rdi
mov    $0xa,%edx
mov    $0xa,%ecx
mov    $0xa,%r8d
mov    $0xa,%r9d
xor    %eax,%eax
call   1040 <sprintf@plt>
mov    $0x32313031,%eax
xor    (%rsp),%eax
mov    $0x416132,%ecx
xor    0x3(%rsp),%ecx
xor    %edi,%edi
or     %eax,%ecx
sete   %dil
xor    %eax,%eax
call   1030 <assert@plt>
xor    %eax,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [1 x i8] zeroinitializer
@.str.1 = [5 x i8] c"asdf\00"
@.str.2 = [3 x i8] c"%s\00"
@.str.3 = [5 x i8] c"hjkl\00"
@.str.4 = [5 x i8] c"%s%s\00"
@.str.5 = [6 x i8] c"qwert\00"
@.str.6 = [6 x i8] c"12345\00"
@.str.7 = [11 x i8] c"qwert12345\00"
@.str.8 = [9 x i8] c"left%s%s\00"
@.str.9 = [15 x i8] c"leftqwert12345\00"
@.str.10 = [11 x i8] c"%smiddle%s\00"
@.str.11 = [17 x i8] c"qwertmiddle12345\00"
@.str.12 = [10 x i8] c"%s%sright\00"
@.str.13 = [16 x i8] c"qwert12345right\00"
@.str.14 = [3 x i8] c"%d\00"
@.str.15 = [3 x i8] c"42\00"
@.str.16 = [5 x i8] c"%d%d\00"
@.str.17 = [5 x i8] c"4242\00"
@.str.18 = [9 x i8] c"left%d%d\00"
@.str.19 = [9 x i8] c"left4242\00"
@.str.20 = [11 x i8] c"%dmiddle%d\00"
@.str.21 = [11 x i8] c"42middle42\00"
@.str.22 = [10 x i8] c"%d%dright\00"
@.str.23 = [10 x i8] c"4242right\00"
@.str.24 = [5 x i8] c"%s%d\00"
@.str.25 = [8 x i8] c"qwert42\00"
@.str.26 = [5 x i8] c"%d%s\00"
@.str.27 = [8 x i8] c"42qwert\00"
@.str.28 = [9 x i8] c"left%s%d\00"
@.str.29 = [16 x i8] c"leftqwert424242\00"
@.str.30 = [11 x i8] c"%smiddle%d\00"
@.str.31 = [18 x i8] c"qwertmiddle424242\00"
@.str.32 = [10 x i8] c"%s%dright\00"
@.str.33 = [17 x i8] c"qwert424242right\00"
@.str.34 = [9 x i8] c"left%d%s\00"
@.str.35 = [16 x i8] c"left424242qwert\00"
@.str.36 = [11 x i8] c"%dmiddle%s\00"
@.str.37 = [18 x i8] c"424242middleqwert\00"
@.str.38 = [10 x i8] c"%d%sright\00"
@.str.39 = [17 x i8] c"424242qwertright\00"
@.str.40 = [12 x i8] c"-2147483648\00"
@.str.41 = [11 x i8] c"2147483647\00"
@.str.42 = [2 x i8] c"%\00"
@.str.43 = [3 x i8] c"%b\00"
@.str.44 = [3 x i8] c"%k\00"
@.str.45 = [3 x i8] c"%r\00"
@.str.46 = [3 x i8] c"%%\00"
@.str.47 = [4 x i8] c"%%b\00"
@.str.48 = [5 x i8] c"%%%b\00"
@.str.49 = [6 x i8] c"%%%%b\00"
@.str.50 = [3 x i8] c"%u\00"
@.str.51 = [3 x i8] c"10\00"
@.str.52 = [3 x i8] c"%o\00"
@.str.53 = [3 x i8] c"12\00"
@.str.54 = [3 x i8] c"%x\00"
@.str.55 = [2 x i8] c"a\00"
@.str.56 = [3 x i8] c"%X\00"
@.str.57 = [2 x i8] c"A\00"
@.str.58 = [9 x i8] c"%u%o%x%X\00"
@.str.59 = [7 x i8] c"1012aA\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [64 x i8]
store i32 0, i32* %1
%3 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%4 = call i32 (i8*, i8*, ...) @sprintf(i8* %3, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0))
%5 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%6 = call i32 @strcmp(i8* %5, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0))
%7 = icmp eq i32 0, %6
%8 = zext i1 %7 to i32
%9 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %8)
%10 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%11 = call i32 (i8*, i8*, ...) @sprintf(i8* %10, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
%12 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%13 = call i32 @strcmp(i8* %12, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
%14 = icmp eq i32 0, %13
%15 = zext i1 %14 to i32
%16 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %15)
%17 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%18 = call i32 (i8*, i8*, ...) @sprintf(i8* %17, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%19 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%20 = call i32 @strcmp(i8* %19, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%21 = icmp eq i32 0, %20
%22 = zext i1 %21 to i32
%23 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %22)
%24 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%25 = call i32 (i8*, i8*, ...) @sprintf(i8* %24, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%26 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%27 = call i32 @strcmp(i8* %26, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.7, i64 0, i64 0))
%28 = icmp eq i32 0, %27
%29 = zext i1 %28 to i32
%30 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %29)
%31 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%32 = call i32 (i8*, i8*, ...) @sprintf(i8* %31, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%33 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%34 = call i32 @strcmp(i8* %33, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.9, i64 0, i64 0))
%35 = icmp eq i32 0, %34
%36 = zext i1 %35 to i32
%37 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %36)
%38 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%39 = call i32 (i8*, i8*, ...) @sprintf(i8* %38, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.10, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%40 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%41 = call i32 @strcmp(i8* %40, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.11, i64 0, i64 0))
%42 = icmp eq i32 0, %41
%43 = zext i1 %42 to i32
%44 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %43)
%45 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%46 = call i32 (i8*, i8*, ...) @sprintf(i8* %45, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.12, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%47 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%48 = call i32 @strcmp(i8* %47, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.13, i64 0, i64 0))
%49 = icmp eq i32 0, %48
%50 = zext i1 %49 to i32
%51 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %50)
%52 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%53 = call i32 (i8*, i8*, ...) @sprintf(i8* %52, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i32 42)
%54 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%55 = call i32 @strcmp(i8* %54, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0))
%56 = icmp eq i32 0, %55
%57 = zext i1 %56 to i32
%58 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %57)
%59 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%60 = call i32 (i8*, i8*, ...) @sprintf(i8* %59, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.16, i64 0, i64 0), i32 42, i32 42)
%61 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%62 = call i32 @strcmp(i8* %61, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.17, i64 0, i64 0))
%63 = icmp eq i32 0, %62
%64 = zext i1 %63 to i32
%65 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %64)
%66 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%67 = call i32 (i8*, i8*, ...) @sprintf(i8* %66, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.18, i64 0, i64 0), i32 42, i32 42)
%68 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%69 = call i32 @strcmp(i8* %68, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.19, i64 0, i64 0))
%70 = icmp eq i32 0, %69
%71 = zext i1 %70 to i32
%72 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %71)
%73 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%74 = call i32 (i8*, i8*, ...) @sprintf(i8* %73, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.20, i64 0, i64 0), i32 42, i32 42)
%75 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%76 = call i32 @strcmp(i8* %75, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.21, i64 0, i64 0))
%77 = icmp eq i32 0, %76
%78 = zext i1 %77 to i32
%79 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %78)
%80 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%81 = call i32 (i8*, i8*, ...) @sprintf(i8* %80, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.22, i64 0, i64 0), i32 42, i32 42)
%82 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%83 = call i32 @strcmp(i8* %82, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.23, i64 0, i64 0))
%84 = icmp eq i32 0, %83
%85 = zext i1 %84 to i32
%86 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %85)
%87 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%88 = call i32 (i8*, i8*, ...) @sprintf(i8* %87, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.24, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 42)
%89 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%90 = call i32 @strcmp(i8* %89, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.25, i64 0, i64 0))
%91 = icmp eq i32 0, %90
%92 = zext i1 %91 to i32
%93 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %92)
%94 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%95 = call i32 (i8*, i8*, ...) @sprintf(i8* %94, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0), i32 42, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%96 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%97 = call i32 @strcmp(i8* %96, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.27, i64 0, i64 0))
%98 = icmp eq i32 0, %97
%99 = zext i1 %98 to i32
%100 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %99)
%101 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%102 = call i32 (i8*, i8*, ...) @sprintf(i8* %101, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.28, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 424242)
%103 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%104 = call i32 @strcmp(i8* %103, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.29, i64 0, i64 0))
%105 = icmp eq i32 0, %104
%106 = zext i1 %105 to i32
%107 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %106)
%108 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%109 = call i32 (i8*, i8*, ...) @sprintf(i8* %108, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 424242)
%110 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%111 = call i32 @strcmp(i8* %110, i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.31, i64 0, i64 0))
%112 = icmp eq i32 0, %111
%113 = zext i1 %112 to i32
%114 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %113)
%115 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%116 = call i32 (i8*, i8*, ...) @sprintf(i8* %115, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 424242)
%117 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%118 = call i32 @strcmp(i8* %117, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.33, i64 0, i64 0))
%119 = icmp eq i32 0, %118
%120 = zext i1 %119 to i32
%121 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %120)
%122 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%123 = call i32 (i8*, i8*, ...) @sprintf(i8* %122, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.34, i64 0, i64 0), i32 424242, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%124 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%125 = call i32 @strcmp(i8* %124, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.35, i64 0, i64 0))
%126 = icmp eq i32 0, %125
%127 = zext i1 %126 to i32
%128 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %127)
%129 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%130 = call i32 (i8*, i8*, ...) @sprintf(i8* %129, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.36, i64 0, i64 0), i32 424242, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%131 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%132 = call i32 @strcmp(i8* %131, i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.37, i64 0, i64 0))
%133 = icmp eq i32 0, %132
%134 = zext i1 %133 to i32
%135 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %134)
%136 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%137 = call i32 (i8*, i8*, ...) @sprintf(i8* %136, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.38, i64 0, i64 0), i32 424242, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%138 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%139 = call i32 @strcmp(i8* %138, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.39, i64 0, i64 0))
%140 = icmp eq i32 0, %139
%141 = zext i1 %140 to i32
%142 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %141)
%143 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%144 = call i32 (i8*, i8*, ...) @sprintf(i8* %143, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i32 -2147483648)
%145 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%146 = call i32 @strcmp(i8* %145, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.40, i64 0, i64 0))
%147 = icmp eq i32 0, %146
%148 = zext i1 %147 to i32
%149 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %148)
%150 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%151 = call i32 (i8*, i8*, ...) @sprintf(i8* %150, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i32 2147483647)
%152 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%153 = call i32 @strcmp(i8* %152, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.41, i64 0, i64 0))
%154 = icmp eq i32 0, %153
%155 = zext i1 %154 to i32
%156 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %155)
%157 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%158 = call i32 (i8*, i8*, ...) @sprintf(i8* %157, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.42, i64 0, i64 0))
%159 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%160 = call i32 @strcmp(i8* %159, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0))
%161 = icmp eq i32 0, %160
%162 = zext i1 %161 to i32
%163 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %162)
%164 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%165 = call i32 (i8*, i8*, ...) @sprintf(i8* %164, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0))
%166 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%167 = call i32 @strcmp(i8* %166, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0))
%168 = icmp eq i32 0, %167
%169 = zext i1 %168 to i32
%170 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %169)
%171 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%172 = call i32 (i8*, i8*, ...) @sprintf(i8* %171, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.44, i64 0, i64 0))
%173 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%174 = call i32 @strcmp(i8* %173, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.44, i64 0, i64 0))
%175 = icmp eq i32 0, %174
%176 = zext i1 %175 to i32
%177 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %176)
%178 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%179 = call i32 (i8*, i8*, ...) @sprintf(i8* %178, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.45, i64 0, i64 0))
%180 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%181 = call i32 @strcmp(i8* %180, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.45, i64 0, i64 0))
%182 = icmp eq i32 0, %181
%183 = zext i1 %182 to i32
%184 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %183)
%185 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%186 = call i32 (i8*, i8*, ...) @sprintf(i8* %185, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.46, i64 0, i64 0))
%187 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%188 = call i32 @strcmp(i8* %187, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.42, i64 0, i64 0))
%189 = icmp eq i32 0, %188
%190 = zext i1 %189 to i32
%191 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %190)
%192 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%193 = call i32 (i8*, i8*, ...) @sprintf(i8* %192, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.47, i64 0, i64 0))
%194 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%195 = call i32 @strcmp(i8* %194, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0))
%196 = icmp eq i32 0, %195
%197 = zext i1 %196 to i32
%198 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %197)
%199 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%200 = call i32 (i8*, i8*, ...) @sprintf(i8* %199, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.48, i64 0, i64 0))
%201 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%202 = call i32 @strcmp(i8* %201, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.47, i64 0, i64 0))
%203 = icmp eq i32 0, %202
%204 = zext i1 %203 to i32
%205 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %204)
%206 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%207 = call i32 (i8*, i8*, ...) @sprintf(i8* %206, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.49, i64 0, i64 0))
%208 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%209 = call i32 @strcmp(i8* %208, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.47, i64 0, i64 0))
%210 = icmp eq i32 0, %209
%211 = zext i1 %210 to i32
%212 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %211)
%213 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%214 = call i32 (i8*, i8*, ...) @sprintf(i8* %213, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.50, i64 0, i64 0), i32 10)
%215 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%216 = call i32 @strcmp(i8* %215, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.51, i64 0, i64 0))
%217 = icmp eq i32 0, %216
%218 = zext i1 %217 to i32
%219 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %218)
%220 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%221 = call i32 (i8*, i8*, ...) @sprintf(i8* %220, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.52, i64 0, i64 0), i32 10)
%222 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%223 = call i32 @strcmp(i8* %222, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.53, i64 0, i64 0))
%224 = icmp eq i32 0, %223
%225 = zext i1 %224 to i32
%226 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %225)
%227 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%228 = call i32 (i8*, i8*, ...) @sprintf(i8* %227, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.54, i64 0, i64 0), i32 10)
%229 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%230 = call i32 @strcmp(i8* %229, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.55, i64 0, i64 0))
%231 = icmp eq i32 0, %230
%232 = zext i1 %231 to i32
%233 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %232)
%234 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%235 = call i32 (i8*, i8*, ...) @sprintf(i8* %234, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.56, i64 0, i64 0), i32 10)
%236 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%237 = call i32 @strcmp(i8* %236, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.57, i64 0, i64 0))
%238 = icmp eq i32 0, %237
%239 = zext i1 %238 to i32
%240 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %239)
%241 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%242 = call i32 (i8*, i8*, ...) @sprintf(i8* %241, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.58, i64 0, i64 0), i32 10, i32 10, i32 10, i32 10)
%243 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%244 = call i32 @strcmp(i8* %243, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.59, i64 0, i64 0))
%245 = icmp eq i32 0, %244
%246 = zext i1 %245 to i32
%247 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %246)
ret i32 0
}

LLVM IR (-O2):
@.str.1 = [5 x i8] c"asdf\00"
@.str.3 = [5 x i8] c"hjkl\00"
@.str.4 = [5 x i8] c"%s%s\00"
@.str.5 = [6 x i8] c"qwert\00"
@.str.6 = [6 x i8] c"12345\00"
@.str.7 = [11 x i8] c"qwert12345\00"
@.str.8 = [9 x i8] c"left%s%s\00"
@.str.9 = [15 x i8] c"leftqwert12345\00"
@.str.10 = [11 x i8] c"%smiddle%s\00"
@.str.11 = [17 x i8] c"qwertmiddle12345\00"
@.str.12 = [10 x i8] c"%s%sright\00"
@.str.13 = [16 x i8] c"qwert12345right\00"
@.str.14 = [3 x i8] c"%d\00"
@.str.15 = [3 x i8] c"42\00"
@.str.16 = [5 x i8] c"%d%d\00"
@.str.17 = [5 x i8] c"4242\00"
@.str.18 = [9 x i8] c"left%d%d\00"
@.str.19 = [9 x i8] c"left4242\00"
@.str.20 = [11 x i8] c"%dmiddle%d\00"
@.str.21 = [11 x i8] c"42middle42\00"
@.str.22 = [10 x i8] c"%d%dright\00"
@.str.23 = [10 x i8] c"4242right\00"
@.str.24 = [5 x i8] c"%s%d\00"
@.str.26 = [5 x i8] c"%d%s\00"
@.str.28 = [9 x i8] c"left%s%d\00"
@.str.29 = [16 x i8] c"leftqwert424242\00"
@.str.30 = [11 x i8] c"%smiddle%d\00"
@.str.31 = [18 x i8] c"qwertmiddle424242\00"
@.str.32 = [10 x i8] c"%s%dright\00"
@.str.33 = [17 x i8] c"qwert424242right\00"
@.str.34 = [9 x i8] c"left%d%s\00"
@.str.35 = [16 x i8] c"left424242qwert\00"
@.str.36 = [11 x i8] c"%dmiddle%s\00"
@.str.37 = [18 x i8] c"424242middleqwert\00"
@.str.38 = [10 x i8] c"%d%sright\00"
@.str.39 = [17 x i8] c"424242qwertright\00"
@.str.40 = [12 x i8] c"-2147483648\00"
@.str.41 = [11 x i8] c"2147483647\00"
@.str.42 = [2 x i8] c"%\00"
@.str.43 = [3 x i8] c"%b\00"
@.str.44 = [3 x i8] c"%k\00"
@.str.45 = [3 x i8] c"%r\00"
@.str.46 = [3 x i8] c"%%\00"
@.str.47 = [4 x i8] c"%%b\00"
@.str.48 = [5 x i8] c"%%%b\00"
@.str.49 = [6 x i8] c"%%%%b\00"
@.str.50 = [3 x i8] c"%u\00"
@.str.51 = [3 x i8] c"10\00"
@.str.52 = [3 x i8] c"%o\00"
@.str.53 = [3 x i8] c"12\00"
@.str.54 = [3 x i8] c"%x\00"
@.str.56 = [3 x i8] c"%X\00"
@.str.58 = [9 x i8] c"%u%o%x%X\00"
@.str.59 = [7 x i8] c"1012aA\00"
define i32 @main() {
%1 = alloca [64 x i8]
%2 = getelementptr inbounds [64 x i8], [64 x i8]* %1, i64 0, i64 0
%3 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 1)
%4 = call i32 @bcmp(i8* dereferenceable(5) %2, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i64 5)
%5 = icmp eq i32 %4, 0
%6 = zext i1 %5 to i32
%7 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %6)
%8 = call i32 @bcmp(i8* dereferenceable(5) %2, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i64 5)
%9 = icmp eq i32 %8, 0
%10 = zext i1 %9 to i32
%11 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %10)
%12 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%13 = call i32 @bcmp(i8* dereferenceable(11) %2, i8* dereferenceable(11) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.7, i64 0, i64 0), i64 11)
%14 = icmp eq i32 %13, 0
%15 = zext i1 %14 to i32
%16 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %15)
%17 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%18 = call i32 @bcmp(i8* dereferenceable(15) %2, i8* dereferenceable(15) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.9, i64 0, i64 0), i64 15)
%19 = icmp eq i32 %18, 0
%20 = zext i1 %19 to i32
%21 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %20)
%22 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.10, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%23 = call i32 @bcmp(i8* dereferenceable(17) %2, i8* dereferenceable(17) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.11, i64 0, i64 0), i64 17)
%24 = icmp eq i32 %23, 0
%25 = zext i1 %24 to i32
%26 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %25)
%27 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.12, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%28 = call i32 @bcmp(i8* dereferenceable(16) %2, i8* dereferenceable(16) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.13, i64 0, i64 0), i64 16)
%29 = icmp eq i32 %28, 0
%30 = zext i1 %29 to i32
%31 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %30)
%32 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i32 42)
%33 = call i32 @bcmp(i8* dereferenceable(3) %2, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0), i64 3)
%34 = icmp eq i32 %33, 0
%35 = zext i1 %34 to i32
%36 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %35)
%37 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.16, i64 0, i64 0), i32 42, i32 42)
%38 = call i32 @bcmp(i8* dereferenceable(5) %2, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.17, i64 0, i64 0), i64 5)
%39 = icmp eq i32 %38, 0
%40 = zext i1 %39 to i32
%41 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %40)
%42 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.18, i64 0, i64 0), i32 42, i32 42)
%43 = call i32 @bcmp(i8* dereferenceable(9) %2, i8* dereferenceable(9) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.19, i64 0, i64 0), i64 9)
%44 = icmp eq i32 %43, 0
%45 = zext i1 %44 to i32
%46 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %45)
%47 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.20, i64 0, i64 0), i32 42, i32 42)
%48 = call i32 @bcmp(i8* dereferenceable(11) %2, i8* dereferenceable(11) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.21, i64 0, i64 0), i64 11)
%49 = icmp eq i32 %48, 0
%50 = zext i1 %49 to i32
%51 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %50)
%52 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.22, i64 0, i64 0), i32 42, i32 42)
%53 = call i32 @bcmp(i8* dereferenceable(10) %2, i8* dereferenceable(10) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.23, i64 0, i64 0), i64 10)
%54 = icmp eq i32 %53, 0
%55 = zext i1 %54 to i32
%56 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %55)
%57 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.24, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 42)
%58 = bitcast [64 x i8]* %1 to i64*
%59 = load i64, i64* %58
%60 = icmp eq i64 %59, 14131423575635825
%61 = zext i1 %60 to i32
%62 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %61)
%63 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0), i32 42, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%64 = load i64, i64* %58
%65 = icmp eq i64 %64, 32776877419606580
%66 = zext i1 %65 to i32
%67 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %66)
%68 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.28, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 424242)
%69 = call i32 @bcmp(i8* dereferenceable(16) %2, i8* dereferenceable(16) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.29, i64 0, i64 0), i64 16)
%70 = icmp eq i32 %69, 0
%71 = zext i1 %70 to i32
%72 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %71)
%73 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 424242)
%74 = call i32 @bcmp(i8* dereferenceable(18) %2, i8* dereferenceable(18) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.31, i64 0, i64 0), i64 18)
%75 = icmp eq i32 %74, 0
%76 = zext i1 %75 to i32
%77 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %76)
%78 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 424242)
%79 = call i32 @bcmp(i8* dereferenceable(17) %2, i8* dereferenceable(17) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.33, i64 0, i64 0), i64 17)
%80 = icmp eq i32 %79, 0
%81 = zext i1 %80 to i32
%82 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %81)
%83 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.34, i64 0, i64 0), i32 424242, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%84 = call i32 @bcmp(i8* dereferenceable(16) %2, i8* dereferenceable(16) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.35, i64 0, i64 0), i64 16)
%85 = icmp eq i32 %84, 0
%86 = zext i1 %85 to i32
%87 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %86)
%88 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.36, i64 0, i64 0), i32 424242, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%89 = call i32 @bcmp(i8* dereferenceable(18) %2, i8* dereferenceable(18) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.37, i64 0, i64 0), i64 18)
%90 = icmp eq i32 %89, 0
%91 = zext i1 %90 to i32
%92 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %91)
%93 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.38, i64 0, i64 0), i32 424242, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%94 = call i32 @bcmp(i8* dereferenceable(17) %2, i8* dereferenceable(17) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.39, i64 0, i64 0), i64 17)
%95 = icmp eq i32 %94, 0
%96 = zext i1 %95 to i32
%97 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %96)
%98 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i32 -2147483648)
%99 = call i32 @bcmp(i8* dereferenceable(12) %2, i8* dereferenceable(12) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.40, i64 0, i64 0), i64 12)
%100 = icmp eq i32 %99, 0
%101 = zext i1 %100 to i32
%102 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %101)
%103 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i32 2147483647)
%104 = call i32 @bcmp(i8* dereferenceable(11) %2, i8* dereferenceable(11) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.41, i64 0, i64 0), i64 11)
%105 = icmp eq i32 %104, 0
%106 = zext i1 %105 to i32
%107 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %106)
%108 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([2 x i8], [2 x i8]* @.str.42, i64 0, i64 0))
%109 = load i8, i8* %2
%110 = icmp eq i8 %109, 0
%111 = zext i1 %110 to i32
%112 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %111)
%113 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0))
%114 = call i32 @bcmp(i8* dereferenceable(3) %2, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i64 3)
%115 = icmp eq i32 %114, 0
%116 = zext i1 %115 to i32
%117 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %116)
%118 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.44, i64 0, i64 0))
%119 = call i32 @bcmp(i8* dereferenceable(3) %2, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.44, i64 0, i64 0), i64 3)
%120 = icmp eq i32 %119, 0
%121 = zext i1 %120 to i32
%122 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %121)
%123 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.45, i64 0, i64 0))
%124 = call i32 @bcmp(i8* dereferenceable(3) %2, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.45, i64 0, i64 0), i64 3)
%125 = icmp eq i32 %124, 0
%126 = zext i1 %125 to i32
%127 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %126)
%128 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.46, i64 0, i64 0))
%129 = bitcast [64 x i8]* %1 to i16*
%130 = load i16, i16* %129
%131 = icmp eq i16 %130, 37
%132 = zext i1 %131 to i32
%133 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %132)
%134 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.47, i64 0, i64 0))
%135 = call i32 @bcmp(i8* dereferenceable(3) %2, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i64 3)
%136 = icmp eq i32 %135, 0
%137 = zext i1 %136 to i32
%138 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %137)
%139 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.48, i64 0, i64 0))
%140 = bitcast [64 x i8]* %1 to i32*
%141 = load i32, i32* %140
%142 = icmp eq i32 %141, 6432037
%143 = zext i1 %142 to i32
%144 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %143)
%145 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.49, i64 0, i64 0))
%146 = load i32, i32* %140
%147 = icmp eq i32 %146, 6432037
%148 = zext i1 %147 to i32
%149 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %148)
%150 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.50, i64 0, i64 0), i32 10)
%151 = call i32 @bcmp(i8* dereferenceable(3) %2, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.51, i64 0, i64 0), i64 3)
%152 = icmp eq i32 %151, 0
%153 = zext i1 %152 to i32
%154 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %153)
%155 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.52, i64 0, i64 0), i32 10)
%156 = call i32 @bcmp(i8* dereferenceable(3) %2, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.53, i64 0, i64 0), i64 3)
%157 = icmp eq i32 %156, 0
%158 = zext i1 %157 to i32
%159 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %158)
%160 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.54, i64 0, i64 0), i32 10)
%161 = load i16, i16* %129
%162 = icmp eq i16 %161, 97
%163 = zext i1 %162 to i32
%164 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %163)
%165 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.56, i64 0, i64 0), i32 10)
%166 = load i16, i16* %129
%167 = icmp eq i16 %166, 65
%168 = zext i1 %167 to i32
%169 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %168)
%170 = call i32 (i8*, i8*, ...) @sprintf(i8* %2, i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.58, i64 0, i64 0), i32 10, i32 10, i32 10, i32 10)
%171 = call i32 @bcmp(i8* dereferenceable(7) %2, i8* dereferenceable(7) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.59, i64 0, i64 0), i64 7)
%172 = icmp eq i32 %171, 0
%173 = zext i1 %172 to i32
%174 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %173)
ret i32 0
}