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

/* Forward declarations */

/* Type definitions */
typedef char wchar_t;

/* Variables and functions */
int /*<<< orphan*/ CODESET;
int /*<<< orphan*/ LC_CTYPE;
int /*<<< orphan*/ free(char *);
scalar_t__ malloc(int);
scalar_t__ mbstowcs(char *, char *, int);
int /*<<< orphan*/ nl_langinfo(int /*<<< orphan*/);
scalar_t__ setlocale(int /*<<< orphan*/, char *);
scalar_t__ strcmp(int /*<<< orphan*/, char *);
size_t b_utf8_bigbuf(void *dummy) {
  char *buf;
  wchar_t *wbuf;
  size_t i, j, k, l;
  size_t cs;
  setlocale(LC_CTYPE, "C.UTF-8") || setlocale(LC_CTYPE, "en_US.UTF-8") ||
      setlocale(LC_CTYPE, "en_GB.UTF-8") || setlocale(LC_CTYPE, "en.UTF-8") ||
      setlocale(LC_CTYPE, "de_DE-8") || setlocale(LC_CTYPE, "fr_FR-8");
  if (strcmp(nl_langinfo(CODESET), "UTF-8"))
    return -1;
  buf = (char *)malloc(500000);
  wbuf = (wchar_t *)malloc(500000 * sizeof(wchar_t));
  l = 0;
  for (i = 0xc3; i < 0xe0; i++)
    for (j = 0x80; j < 0xc0; j++)
      buf[l++] = i, buf[l++] = j;
  for (i = 0xe1; i < 0xed; i++)
    for (j = 0x80; j < 0xc0; j++)
      for (k = 0x80; k < 0xc0; k++)
        buf[l++] = i, buf[l++] = j, buf[l++] = k;
  for (i = 0xf1; i < 0xf4; i++)
    for (j = 0x80; j < 0xc0; j++)
      for (k = 0x80; k < 0xc0; k++)
        buf[l++] = i, buf[l++] = j, buf[l++] = 0x80, buf[l++] = k;
  buf[l++] = 0;
  for (i = 0; i < 50; i++)
    cs += mbstowcs(wbuf, buf, 500000);
  free(wbuf);
  free(buf);
  return cs;
}


x86 assembly (clang, -O0):
<b_utf8_bigbuf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    0x2e75(%rip),%rax
mov    (%rax),%edi
lea    0xe84(%rip),%rsi
call   1080 <setlocale@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x49(%rbp)
jne    124e <b_utf8_bigbuf+0xee>
mov    0x2e4e(%rip),%rax
mov    (%rax),%edi
lea    0xe65(%rip),%rsi
call   1080 <setlocale@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x49(%rbp)
jne    124e <b_utf8_bigbuf+0xee>
mov    0x2e27(%rip),%rax
mov    (%rax),%edi
lea    0xe4a(%rip),%rsi
call   1080 <setlocale@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x49(%rbp)
jne    124e <b_utf8_bigbuf+0xee>
mov    0x2e00(%rip),%rax
mov    (%rax),%edi
lea    0xe2f(%rip),%rsi
call   1080 <setlocale@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x49(%rbp)
jne    124e <b_utf8_bigbuf+0xee>
mov    0x2dd9(%rip),%rax
mov    (%rax),%edi
lea    0xe11(%rip),%rsi
call   1080 <setlocale@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x49(%rbp)
jne    124e <b_utf8_bigbuf+0xee>
mov    0x2db2(%rip),%rax
mov    (%rax),%edi
lea    0xdf2(%rip),%rsi
call   1080 <setlocale@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x49(%rbp)
mov    -0x49(%rbp),%al
mov    0x2d88(%rip),%rax
mov    (%rax),%edi
call   1070 <nl_langinfo@plt>
mov    %eax,%edi
lea    0xdb2(%rip),%rsi
call   1050 <strcmp@plt>
cmp    $0x0,%rax
je     1284 <b_utf8_bigbuf+0x124>
movq   $0xffffffffffffffff,-0x8(%rbp)
ff
jmp    155f <b_utf8_bigbuf+0x3ff>
mov    $0x7a120,%edi
call   1060 <malloc@plt>
mov    %rax,-0x18(%rbp)
mov    $0x7a120,%edi
call   1060 <malloc@plt>
mov    %rax,-0x20(%rbp)
movq   $0x0,-0x40(%rbp)
movq   $0xc3,-0x28(%rbp)
cmpq   $0xe0,-0x28(%rbp)
jae    1333 <b_utf8_bigbuf+0x1d3>
movq   $0x80,-0x30(%rbp)
cmpq   $0xc0,-0x30(%rbp)
jae    131d <b_utf8_bigbuf+0x1bd>
mov    -0x28(%rbp),%rax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,-0x40(%rbp)
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,-0x40(%rbp)
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    12c6 <b_utf8_bigbuf+0x166>
jmp    1322 <b_utf8_bigbuf+0x1c2>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    12b0 <b_utf8_bigbuf+0x150>
movq   $0xe1,-0x28(%rbp)
cmpq   $0xed,-0x28(%rbp)
jae    1406 <b_utf8_bigbuf+0x2a6>
movq   $0x80,-0x30(%rbp)
cmpq   $0xc0,-0x30(%rbp)
jae    13f0 <b_utf8_bigbuf+0x290>
movq   $0x80,-0x38(%rbp)
cmpq   $0xc0,-0x38(%rbp)
jae    13da <b_utf8_bigbuf+0x27a>
mov    -0x28(%rbp),%rax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,-0x40(%rbp)
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,-0x40(%rbp)
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,-0x40(%rbp)
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1367 <b_utf8_bigbuf+0x207>
jmp    13df <b_utf8_bigbuf+0x27f>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1351 <b_utf8_bigbuf+0x1f1>
jmp    13f5 <b_utf8_bigbuf+0x295>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    133b <b_utf8_bigbuf+0x1db>
movq   $0xf1,-0x28(%rbp)
cmpq   $0xf4,-0x28(%rbp)
jae    14f0 <b_utf8_bigbuf+0x390>
movq   $0x80,-0x30(%rbp)
cmpq   $0xc0,-0x30(%rbp)
jae    14da <b_utf8_bigbuf+0x37a>
movq   $0x80,-0x38(%rbp)
cmpq   $0xc0,-0x38(%rbp)
jae    14c4 <b_utf8_bigbuf+0x364>
mov    -0x28(%rbp),%rax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,-0x40(%rbp)
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,-0x40(%rbp)
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x40(%rbp)
movb   $0x80,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,-0x40(%rbp)
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    143a <b_utf8_bigbuf+0x2da>
jmp    14c9 <b_utf8_bigbuf+0x369>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1424 <b_utf8_bigbuf+0x2c4>
jmp    14df <b_utf8_bigbuf+0x37f>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    140e <b_utf8_bigbuf+0x2ae>
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x40(%rbp)
movb   $0x0,(%rax,%rcx,1)
movq   $0x0,-0x28(%rbp)
cmpq   $0x32,-0x28(%rbp)
jae    1545 <b_utf8_bigbuf+0x3e5>
mov    -0x20(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x7a120,%edx
call   1040 <mbstowcs@plt>
add    -0x48(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    150f <b_utf8_bigbuf+0x3af>
mov    -0x20(%rbp),%rdi
call   1030 <free@plt>
mov    -0x18(%rbp),%rdi
call   1030 <free@plt>
mov    -0x48(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<b_utf8_bigbuf>:
push   %r15
push   %r14
push   %r12
push   %rbx
push   %rax
mov    0x2e79(%rip),%rbx
mov    (%rbx),%edi
lea    0xf08(%rip),%rsi
call   1080 <setlocale@plt>
test   %rax,%rax
jne    11dc <b_utf8_bigbuf+0x7c>
mov    (%rbx),%edi
lea    0xefd(%rip),%rsi
call   1080 <setlocale@plt>
test   %rax,%rax
jne    11dc <b_utf8_bigbuf+0x7c>
mov    (%rbx),%edi
lea    0xef6(%rip),%rsi
call   1080 <setlocale@plt>
test   %rax,%rax
jne    11dc <b_utf8_bigbuf+0x7c>
mov    (%rbx),%edi
lea    0xeef(%rip),%rsi
call   1080 <setlocale@plt>
test   %rax,%rax
jne    11dc <b_utf8_bigbuf+0x7c>
mov    (%rbx),%edi
lea    0xee5(%rip),%rsi
call   1080 <setlocale@plt>
test   %rax,%rax
jne    11dc <b_utf8_bigbuf+0x7c>
mov    (%rbx),%edi
lea    0xeda(%rip),%rsi
call   1080 <setlocale@plt>
mov    0x2dfd(%rip),%rax
mov    (%rax),%edi
call   1070 <nl_langinfo@plt>
lea    0xea9(%rip),%rsi
mov    %eax,%edi
call   1050 <strcmp@plt>
mov    $0xffffffffffffffff,%r15
test   %rax,%rax
jne    1529 <b_utf8_bigbuf+0x3c9>
mov    $0x7a120,%edi
call   1060 <malloc@plt>
mov    %rax,%rbx
mov    $0x7a120,%edi
call   1060 <malloc@plt>
mov    %rax,%r14
lea    0x1(%rbx),%rcx
mov    $0xc3,%edx
xor    %eax,%eax
movdqa 0xdca(%rip),%xmm8
movdqa 0xdd1(%rip),%xmm9
movdqa 0xdd9(%rip),%xmm2
movdqa 0xde1(%rip),%xmm3
movdqa 0xde9(%rip),%xmm4
movdqa 0xdf1(%rip),%xmm5
movdqa 0xdf9(%rip),%xmm6
movdqa 0xe01(%rip),%xmm7
jmp    1310 <b_utf8_bigbuf+0x1b0>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl %dl,%esi
movd   %esi,%xmm0
punpcklbw %xmm0,%xmm0
pshuflw $0x0,%xmm0,%xmm1
movdqa %xmm1,%xmm0
punpcklbw %xmm8,%xmm0
movdqu %xmm0,(%rbx,%rax,1)
movdqa %xmm1,%xmm0
punpcklbw %xmm9,%xmm0
movdqu %xmm0,0x10(%rbx,%rax,1)
movdqa %xmm1,%xmm0
punpcklbw %xmm2,%xmm0
movdqu %xmm0,0x20(%rbx,%rax,1)
movdqa %xmm1,%xmm0
punpcklbw %xmm3,%xmm0
movdqu %xmm0,0x30(%rbx,%rax,1)
movdqa %xmm1,%xmm0
punpcklbw %xmm4,%xmm0
movdqu %xmm0,0x40(%rbx,%rax,1)
movdqa %xmm1,%xmm0
punpcklbw %xmm5,%xmm0
movdqu %xmm0,0x50(%rbx,%rax,1)
movdqa %xmm1,%xmm0
punpcklbw %xmm6,%xmm0
movdqu %xmm0,0x60(%rbx,%rax,1)
punpcklbw %xmm7,%xmm1
movdqu %xmm1,0x70(%rbx,%rax,1)
add    $0x80,%rax
add    $0x1,%rdx
cmp    $0xe0,%rdx
je     1363 <b_utf8_bigbuf+0x203>
lea    (%rbx,%rax,1),%rsi
lea    (%rbx,%rax,1),%rdi
add    $0x7e,%rdi
cmp    %rsi,%rdi
jb     1336 <b_utf8_bigbuf+0x1d6>
lea    (%rcx,%rax,1),%rsi
lea    (%rcx,%rax,1),%rdi
add    $0x7e,%rdi
cmp    %rsi,%rdi
jae    1280 <b_utf8_bigbuf+0x120>
mov    $0xffffffffffffffc0,%rsi
nopl   (%rax)
mov    %dl,(%rbx,%rax,1)
lea    -0x40(%rsi),%edi
mov    %dil,0x1(%rbx,%rax,1)
mov    %dl,0x2(%rbx,%rax,1)
lea    -0x3f(%rsi),%edi
mov    %dil,0x3(%rbx,%rax,1)
add    $0x4,%rax
add    $0x2,%rsi
jne    1340 <b_utf8_bigbuf+0x1e0>
jmp    1303 <b_utf8_bigbuf+0x1a3>
mov    $0xe1,%ecx
nopl   0x0(%rax,%rax,1)
mov    $0x80,%edx
cs nopw 0x0(%rax,%rax,1)
nop
mov    $0xffffffffffffffc0,%rsi
nopw   0x0(%rax,%rax,1)
mov    %cl,(%rbx,%rax,1)
mov    %dl,0x1(%rbx,%rax,1)
lea    -0x40(%rsi),%edi
mov    %dil,0x2(%rbx,%rax,1)
mov    %cl,0x3(%rbx,%rax,1)
mov    %dl,0x4(%rbx,%rax,1)
lea    -0x3f(%rsi),%edi
mov    %dil,0x5(%rbx,%rax,1)
add    $0x6,%rax
add    $0x2,%rsi
jne    1390 <b_utf8_bigbuf+0x230>
add    $0x1,%rdx
cmp    $0xc0,%rdx
jne    1380 <b_utf8_bigbuf+0x220>
add    $0x1,%rcx
cmp    $0xed,%rcx
jne    1370 <b_utf8_bigbuf+0x210>
mov    $0x80,%ecx
nopl   0x0(%rax,%rax,1)
mov    $0xffffffffffffffc0,%rdx
nopw   0x0(%rax,%rax,1)
movb   $0xf1,(%rbx,%rax,1)
mov    %cl,0x1(%rbx,%rax,1)
movb   $0x80,0x2(%rbx,%rax,1)
lea    -0x40(%rdx),%esi
mov    %sil,0x3(%rbx,%rax,1)
movb   $0xf1,0x4(%rbx,%rax,1)
mov    %cl,0x5(%rbx,%rax,1)
movb   $0x80,0x6(%rbx,%rax,1)
lea    -0x3f(%rdx),%esi
mov    %sil,0x7(%rbx,%rax,1)
add    $0x8,%rax
add    $0x2,%rdx
jne    13f0 <b_utf8_bigbuf+0x290>
add    $0x1,%rcx
cmp    $0xc0,%rcx
jne    13e0 <b_utf8_bigbuf+0x280>
mov    $0x80,%ecx
nopw   0x0(%rax,%rax,1)
mov    $0xffffffffffffffc0,%rdx
nopw   0x0(%rax,%rax,1)
movb   $0xf2,(%rbx,%rax,1)
mov    %cl,0x1(%rbx,%rax,1)
movb   $0x80,0x2(%rbx,%rax,1)
lea    -0x40(%rdx),%esi
mov    %sil,0x3(%rbx,%rax,1)
movb   $0xf2,0x4(%rbx,%rax,1)
mov    %cl,0x5(%rbx,%rax,1)
movb   $0x80,0x6(%rbx,%rax,1)
lea    -0x3f(%rdx),%esi
mov    %sil,0x7(%rbx,%rax,1)
add    $0x8,%rax
add    $0x2,%rdx
jne    1450 <b_utf8_bigbuf+0x2f0>
add    $0x1,%rcx
cmp    $0xc0,%rcx
jne    1440 <b_utf8_bigbuf+0x2e0>
mov    $0x80,%ecx
nopw   0x0(%rax,%rax,1)
mov    $0xffffffffffffffc0,%rdx
nopw   0x0(%rax,%rax,1)
movb   $0xf3,(%rbx,%rax,1)
mov    %cl,0x1(%rbx,%rax,1)
movb   $0x80,0x2(%rbx,%rax,1)
lea    -0x40(%rdx),%esi
mov    %sil,0x3(%rbx,%rax,1)
movb   $0xf3,0x4(%rbx,%rax,1)
mov    %cl,0x5(%rbx,%rax,1)
movb   $0x80,0x6(%rbx,%rax,1)
lea    -0x3f(%rdx),%esi
mov    %sil,0x7(%rbx,%rax,1)
add    $0x8,%rax
add    $0x2,%rdx
jne    14b0 <b_utf8_bigbuf+0x350>
add    $0x1,%rcx
cmp    $0xc0,%rcx
jne    14a0 <b_utf8_bigbuf+0x340>
movb   $0x0,(%rbx,%rax,1)
mov    $0x32,%r12d
nopl   0x0(%rax)
mov    %r14,%rdi
mov    %rbx,%rsi
mov    $0x7a120,%edx
call   1040 <mbstowcs@plt>
add    %rax,%r15
add    $0xffffffffffffffff,%r12
jne    1500 <b_utf8_bigbuf+0x3a0>
mov    %r14,%rdi
call   1030 <free@plt>
mov    %rbx,%rdi
call   1030 <free@plt>
mov    %r15,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@LC_CTYPE = global i32 0
@.str = [8 x i8] c"C.UTF-8\00"
@.str.1 = [12 x i8] c"en_US.UTF-8\00"
@.str.2 = [12 x i8] c"en_GB.UTF-8\00"
@.str.3 = [9 x i8] c"en.UTF-8\00"
@.str.4 = [8 x i8] c"de_DE-8\00"
@.str.5 = [8 x i8] c"fr_FR-8\00"
@CODESET = global i32 0
@.str.6 = [6 x i8] c"UTF-8\00"
define i64 @b_utf8_bigbuf(i8* %0) {
%2 = alloca i64
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i64
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
store i8* %0, i8** %3
%11 = load i32, i32* @LC_CTYPE
%12 = call i64 @setlocale(i32 %11, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0))
%13 = icmp ne i64 %12, 0
br i1 %13, label %34, label %14
14: ; preds = %1
%15 = load i32, i32* @LC_CTYPE
%16 = call i64 @setlocale(i32 %15, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
%17 = icmp ne i64 %16, 0
br i1 %17, label %34, label %18
18: ; preds = %14
%19 = load i32, i32* @LC_CTYPE
%20 = call i64 @setlocale(i32 %19, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0))
%21 = icmp ne i64 %20, 0
br i1 %21, label %34, label %22
22: ; preds = %18
%23 = load i32, i32* @LC_CTYPE
%24 = call i64 @setlocale(i32 %23, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
%25 = icmp ne i64 %24, 0
br i1 %25, label %34, label %26
26: ; preds = %22
%27 = load i32, i32* @LC_CTYPE
%28 = call i64 @setlocale(i32 %27, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
%29 = icmp ne i64 %28, 0
br i1 %29, label %34, label %30
30: ; preds = %26
%31 = load i32, i32* @LC_CTYPE
%32 = call i64 @setlocale(i32 %31, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.5, i64 0, i64 0))
%33 = icmp ne i64 %32, 0
br label %34
34: ; preds = %30, %26, %22, %18, %14, %1
%35 = phi i1 [ true, %26 ], [ true, %22 ], [ true, %18 ], [ true, %14 ], [ true, %1 ], [ %33, %30 ]
%36 = zext i1 %35 to i32
%37 = load i32, i32* @CODESET
%38 = call i32 @nl_langinfo(i32 %37)
%39 = call i64 @strcmp(i32 %38, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%40 = icmp ne i64 %39, 0
br i1 %40, label %41, label %42
41: ; preds = %34
store i64 -1, i64* %2
br label %185
42: ; preds = %34
%43 = call i64 @malloc(i32 500000)
%44 = inttoptr i64 %43 to i8*
store i8* %44, i8** %4
%45 = call i64 @malloc(i32 500000)
%46 = inttoptr i64 %45 to i8*
store i8* %46, i8** %5
store i64 0, i64* %9
store i64 195, i64* %6
br label %47
47: ; preds = %71, %42
%48 = load i64, i64* %6
%49 = icmp ult i64 %48, 224
br i1 %49, label %50, label %74
50: ; preds = %47
store i64 128, i64* %7
br label %51
51: ; preds = %67, %50
%52 = load i64, i64* %7
%53 = icmp ult i64 %52, 192
br i1 %53, label %54, label %70
54: ; preds = %51
%55 = load i64, i64* %6
%56 = trunc i64 %55 to i8
%57 = load i8*, i8** %4
%58 = load i64, i64* %9
%59 = add i64 %58, 1
store i64 %59, i64* %9
%60 = getelementptr inbounds i8, i8* %57, i64 %58
store i8 %56, i8* %60
%61 = load i64, i64* %7
%62 = trunc i64 %61 to i8
%63 = load i8*, i8** %4
%64 = load i64, i64* %9
%65 = add i64 %64, 1
store i64 %65, i64* %9
%66 = getelementptr inbounds i8, i8* %63, i64 %64
store i8 %62, i8* %66
br label %67
67: ; preds = %54
%68 = load i64, i64* %7
%69 = add i64 %68, 1
store i64 %69, i64* %7
br label %51
70: ; preds = %51
br label %71
71: ; preds = %70
%72 = load i64, i64* %6
%73 = add i64 %72, 1
store i64 %73, i64* %6
br label %47
74: ; preds = %47
store i64 225, i64* %6
br label %75
75: ; preds = %113, %74
%76 = load i64, i64* %6
%77 = icmp ult i64 %76, 237
br i1 %77, label %78, label %116
78: ; preds = %75
store i64 128, i64* %7
br label %79
79: ; preds = %109, %78
%80 = load i64, i64* %7
%81 = icmp ult i64 %80, 192
br i1 %81, label %82, label %112
82: ; preds = %79
store i64 128, i64* %8
br label %83
83: ; preds = %105, %82
%84 = load i64, i64* %8
%85 = icmp ult i64 %84, 192
br i1 %85, label %86, label %108
86: ; preds = %83
%87 = load i64, i64* %6
%88 = trunc i64 %87 to i8
%89 = load i8*, i8** %4
%90 = load i64, i64* %9
%91 = add i64 %90, 1
store i64 %91, i64* %9
%92 = getelementptr inbounds i8, i8* %89, i64 %90
store i8 %88, i8* %92
%93 = load i64, i64* %7
%94 = trunc i64 %93 to i8
%95 = load i8*, i8** %4
%96 = load i64, i64* %9
%97 = add i64 %96, 1
store i64 %97, i64* %9
%98 = getelementptr inbounds i8, i8* %95, i64 %96
store i8 %94, i8* %98
%99 = load i64, i64* %8
%100 = trunc i64 %99 to i8
%101 = load i8*, i8** %4
%102 = load i64, i64* %9
%103 = add i64 %102, 1
store i64 %103, i64* %9
%104 = getelementptr inbounds i8, i8* %101, i64 %102
store i8 %100, i8* %104
br label %105
105: ; preds = %86
%106 = load i64, i64* %8
%107 = add i64 %106, 1
store i64 %107, i64* %8
br label %83
108: ; preds = %83
br label %109
109: ; preds = %108
%110 = load i64, i64* %7
%111 = add i64 %110, 1
store i64 %111, i64* %7
br label %79
112: ; preds = %79
br label %113
113: ; preds = %112
%114 = load i64, i64* %6
%115 = add i64 %114, 1
store i64 %115, i64* %6
br label %75
116: ; preds = %75
store i64 241, i64* %6
br label %117
117: ; preds = %159, %116
%118 = load i64, i64* %6
%119 = icmp ult i64 %118, 244
br i1 %119, label %120, label %162
120: ; preds = %117
store i64 128, i64* %7
br label %121
121: ; preds = %155, %120
%122 = load i64, i64* %7
%123 = icmp ult i64 %122, 192
br i1 %123, label %124, label %158
124: ; preds = %121
store i64 128, i64* %8
br label %125
125: ; preds = %151, %124
%126 = load i64, i64* %8
%127 = icmp ult i64 %126, 192
br i1 %127, label %128, label %154
128: ; preds = %125
%129 = load i64, i64* %6
%130 = trunc i64 %129 to i8
%131 = load i8*, i8** %4
%132 = load i64, i64* %9
%133 = add i64 %132, 1
store i64 %133, i64* %9
%134 = getelementptr inbounds i8, i8* %131, i64 %132
store i8 %130, i8* %134
%135 = load i64, i64* %7
%136 = trunc i64 %135 to i8
%137 = load i8*, i8** %4
%138 = load i64, i64* %9
%139 = add i64 %138, 1
store i64 %139, i64* %9
%140 = getelementptr inbounds i8, i8* %137, i64 %138
store i8 %136, i8* %140
%141 = load i8*, i8** %4
%142 = load i64, i64* %9
%143 = add i64 %142, 1
store i64 %143, i64* %9
%144 = getelementptr inbounds i8, i8* %141, i64 %142
store i8 -128, i8* %144
%145 = load i64, i64* %8
%146 = trunc i64 %145 to i8
%147 = load i8*, i8** %4
%148 = load i64, i64* %9
%149 = add i64 %148, 1
store i64 %149, i64* %9
%150 = getelementptr inbounds i8, i8* %147, i64 %148
store i8 %146, i8* %150
br label %151
151: ; preds = %128
%152 = load i64, i64* %8
%153 = add i64 %152, 1
store i64 %153, i64* %8
br label %125
154: ; preds = %125
br label %155
155: ; preds = %154
%156 = load i64, i64* %7
%157 = add i64 %156, 1
store i64 %157, i64* %7
br label %121
158: ; preds = %121
br label %159
159: ; preds = %158
%160 = load i64, i64* %6
%161 = add i64 %160, 1
store i64 %161, i64* %6
br label %117
162: ; preds = %117
%163 = load i8*, i8** %4
%164 = load i64, i64* %9
%165 = add i64 %164, 1
store i64 %165, i64* %9
%166 = getelementptr inbounds i8, i8* %163, i64 %164
store i8 0, i8* %166
store i64 0, i64* %6
br label %167
167: ; preds = %176, %162
%168 = load i64, i64* %6
%169 = icmp ult i64 %168, 50
br i1 %169, label %170, label %179
170: ; preds = %167
%171 = load i8*, i8** %5
%172 = load i8*, i8** %4
%173 = call i64 @mbstowcs(i8* %171, i8* %172, i32 500000)
%174 = load i64, i64* %10
%175 = add i64 %174, %173
store i64 %175, i64* %10
br label %176
176: ; preds = %170
%177 = load i64, i64* %6
%178 = add i64 %177, 1
store i64 %178, i64* %6
br label %167
179: ; preds = %167
%180 = load i8*, i8** %5
%181 = call i32 @free(i8* %180)
%182 = load i8*, i8** %4
%183 = call i32 @free(i8* %182)
%184 = load i64, i64* %10
store i64 %184, i64* %2
br label %185
185: ; preds = %179, %41
%186 = load i64, i64* %2
ret i64 %186
}

LLVM IR (-O2):
@LC_CTYPE = global i32 0
@.str = [8 x i8] c"C.UTF-8\00"
@.str.1 = [12 x i8] c"en_US.UTF-8\00"
@.str.2 = [12 x i8] c"en_GB.UTF-8\00"
@.str.3 = [9 x i8] c"en.UTF-8\00"
@.str.4 = [8 x i8] c"de_DE-8\00"
@.str.5 = [8 x i8] c"fr_FR-8\00"
@CODESET = global i32 0
@.str.6 = [6 x i8] c"UTF-8\00"
define i64 @b_utf8_bigbuf(i8* nocapture readnone %0) {
%2 = load i32, i32* @LC_CTYPE
%3 = tail call i64 @setlocale(i32 %2, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0))
%4 = icmp eq i64 %3, 0
br i1 %4, label %5, label %24
5: ; preds = %1
%6 = load i32, i32* @LC_CTYPE
%7 = tail call i64 @setlocale(i32 %6, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
%8 = icmp eq i64 %7, 0
br i1 %8, label %9, label %24
9: ; preds = %5
%10 = load i32, i32* @LC_CTYPE
%11 = tail call i64 @setlocale(i32 %10, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0))
%12 = icmp eq i64 %11, 0
br i1 %12, label %13, label %24
13: ; preds = %9
%14 = load i32, i32* @LC_CTYPE
%15 = tail call i64 @setlocale(i32 %14, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
%16 = icmp eq i64 %15, 0
br i1 %16, label %17, label %24
17: ; preds = %13
%18 = load i32, i32* @LC_CTYPE
%19 = tail call i64 @setlocale(i32 %18, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
%20 = icmp eq i64 %19, 0
br i1 %20, label %21, label %24
21: ; preds = %17
%22 = load i32, i32* @LC_CTYPE
%23 = tail call i64 @setlocale(i32 %22, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.5, i64 0, i64 0))
br label %24
24: ; preds = %21, %17, %13, %9, %5, %1
%25 = load i32, i32* @CODESET
%26 = tail call i32 @nl_langinfo(i32 %25)
%27 = tail call i64 @strcmp(i32 %26, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%28 = icmp eq i64 %27, 0
br i1 %28, label %29, label %240
29: ; preds = %24
%30 = tail call i64 @malloc(i32 500000)
%31 = inttoptr i64 %30 to i8*
%32 = tail call i64 @malloc(i32 500000)
%33 = getelementptr i8, i8* %31, i64 1
br label %34
34: ; preds = %29, %96
%35 = phi i64 [ 0, %29 ], [ %97, %96 ]
%36 = phi i64 [ 195, %29 ], [ %98, %96 ]
%37 = trunc i64 %36 to i8
%38 = getelementptr i8, i8* %31, i64 %35
%39 = getelementptr i8, i8* %38, i64 126
%40 = icmp ult i8* %39, %38
%41 = getelementptr i8, i8* %33, i64 %35
%42 = getelementptr i8, i8* %41, i64 126
%43 = icmp ult i8* %42, %41
%44 = or i1 %40, %43
br i1 %44, label %80, label %45
45: ; preds = %34
%46 = insertelement <8 x i8> poison, i8 %37, i64 0
%47 = shufflevector <8 x i8> %46, <8 x i8> poison, <8 x i32> zeroinitializer
%48 = add i64 %35, 128
%49 = getelementptr inbounds i8, i8* %31, i64 %35
%50 = bitcast i8* %49 to <16 x i8>*
%51 = shufflevector <8 x i8> %47, <8 x i8> <i8 -128, i8 -127, i8 -126, i8 -125, i8 -124, i8 -123, i8 -122, i8 -121>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
store <16 x i8> %51, <16 x i8>* %50
%52 = add i64 %35, 16
%53 = getelementptr inbounds i8, i8* %31, i64 %52
%54 = bitcast i8* %53 to <16 x i8>*
%55 = shufflevector <8 x i8> %47, <8 x i8> <i8 -120, i8 -119, i8 -118, i8 -117, i8 -116, i8 -115, i8 -114, i8 -113>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
store <16 x i8> %55, <16 x i8>* %54
%56 = add i64 %35, 32
%57 = getelementptr inbounds i8, i8* %31, i64 %56
%58 = bitcast i8* %57 to <16 x i8>*
%59 = shufflevector <8 x i8> %47, <8 x i8> <i8 -112, i8 -111, i8 -110, i8 -109, i8 -108, i8 -107, i8 -106, i8 -105>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
store <16 x i8> %59, <16 x i8>* %58
%60 = add i64 %35, 48
%61 = getelementptr inbounds i8, i8* %31, i64 %60
%62 = bitcast i8* %61 to <16 x i8>*
%63 = shufflevector <8 x i8> %47, <8 x i8> <i8 -104, i8 -103, i8 -102, i8 -101, i8 -100, i8 -99, i8 -98, i8 -97>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
store <16 x i8> %63, <16 x i8>* %62
%64 = add i64 %35, 64
%65 = getelementptr inbounds i8, i8* %31, i64 %64
%66 = bitcast i8* %65 to <16 x i8>*
%67 = shufflevector <8 x i8> %47, <8 x i8> <i8 -96, i8 -95, i8 -94, i8 -93, i8 -92, i8 -91, i8 -90, i8 -89>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
store <16 x i8> %67, <16 x i8>* %66
%68 = add i64 %35, 80
%69 = getelementptr inbounds i8, i8* %31, i64 %68
%70 = bitcast i8* %69 to <16 x i8>*
%71 = shufflevector <8 x i8> %47, <8 x i8> <i8 -88, i8 -87, i8 -86, i8 -85, i8 -84, i8 -83, i8 -82, i8 -81>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
store <16 x i8> %71, <16 x i8>* %70
%72 = add i64 %35, 96
%73 = getelementptr inbounds i8, i8* %31, i64 %72
%74 = bitcast i8* %73 to <16 x i8>*
%75 = shufflevector <8 x i8> %47, <8 x i8> <i8 -80, i8 -79, i8 -78, i8 -77, i8 -76, i8 -75, i8 -74, i8 -73>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
store <16 x i8> %75, <16 x i8>* %74
%76 = add i64 %35, 112
%77 = getelementptr inbounds i8, i8* %31, i64 %76
%78 = bitcast i8* %77 to <16 x i8>*
%79 = shufflevector <8 x i8> %47, <8 x i8> <i8 -72, i8 -71, i8 -70, i8 -69, i8 -68, i8 -67, i8 -66, i8 -65>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
store <16 x i8> %79, <16 x i8>* %78
br label %96
80: ; preds = %34, %80
%81 = phi i64 [ %92, %80 ], [ %35, %34 ]
%82 = phi i64 [ %94, %80 ], [ 128, %34 ]
%83 = add i64 %81, 1
%84 = getelementptr inbounds i8, i8* %31, i64 %81
store i8 %37, i8* %84
%85 = trunc i64 %82 to i8
%86 = add i64 %81, 2
%87 = getelementptr inbounds i8, i8* %31, i64 %83
store i8 %85, i8* %87
%88 = add i64 %81, 3
%89 = getelementptr inbounds i8, i8* %31, i64 %86
store i8 %37, i8* %89
%90 = trunc i64 %82 to i8
%91 = or i8 %90, 1
%92 = add i64 %81, 4
%93 = getelementptr inbounds i8, i8* %31, i64 %88
store i8 %91, i8* %93
%94 = add nuw nsw i64 %82, 2
%95 = icmp eq i64 %94, 192
br i1 %95, label %96, label %80
96: ; preds = %80, %45
%97 = phi i64 [ %48, %45 ], [ %92, %80 ]
%98 = add nuw nsw i64 %36, 1
%99 = icmp eq i64 %98, 224
br i1 %99, label %100, label %34
100: ; preds = %96, %131
%101 = phi i64 [ %124, %131 ], [ %97, %96 ]
%102 = phi i64 [ %132, %131 ], [ 225, %96 ]
%103 = trunc i64 %102 to i8
br label %104
104: ; preds = %100, %128
%105 = phi i64 [ %101, %100 ], [ %124, %128 ]
%106 = phi i64 [ 128, %100 ], [ %129, %128 ]
%107 = trunc i64 %106 to i8
br label %108
108: ; preds = %108, %104
%109 = phi i64 [ %105, %104 ], [ %124, %108 ]
%110 = phi i64 [ 128, %104 ], [ %126, %108 ]
%111 = add i64 %109, 1
%112 = getelementptr inbounds i8, i8* %31, i64 %109
store i8 %103, i8* %112
%113 = add i64 %109, 2
%114 = getelementptr inbounds i8, i8* %31, i64 %111
store i8 %107, i8* %114
%115 = trunc i64 %110 to i8
%116 = add i64 %109, 3
%117 = getelementptr inbounds i8, i8* %31, i64 %113
store i8 %115, i8* %117
%118 = add i64 %109, 4
%119 = getelementptr inbounds i8, i8* %31, i64 %116
store i8 %103, i8* %119
%120 = add i64 %109, 5
%121 = getelementptr inbounds i8, i8* %31, i64 %118
store i8 %107, i8* %121
%122 = trunc i64 %110 to i8
%123 = or i8 %122, 1
%124 = add i64 %109, 6
%125 = getelementptr inbounds i8, i8* %31, i64 %120
store i8 %123, i8* %125
%126 = add nuw nsw i64 %110, 2
%127 = icmp eq i64 %126, 192
br i1 %127, label %128, label %108
128: ; preds = %108
%129 = add nuw nsw i64 %106, 1
%130 = icmp eq i64 %129, 192
br i1 %130, label %131, label %104
131: ; preds = %128
%132 = add nuw nsw i64 %102, 1
%133 = icmp eq i64 %132, 237
br i1 %133, label %134, label %100
134: ; preds = %131, %162
%135 = phi i64 [ %158, %162 ], [ %124, %131 ]
%136 = phi i64 [ %163, %162 ], [ 128, %131 ]
%137 = trunc i64 %136 to i8
br label %138
138: ; preds = %138, %134
%139 = phi i64 [ %135, %134 ], [ %158, %138 ]
%140 = phi i64 [ 128, %134 ], [ %160, %138 ]
%141 = add i64 %139, 1
%142 = getelementptr inbounds i8, i8* %31, i64 %139
store i8 -15, i8* %142
%143 = add i64 %139, 2
%144 = getelementptr inbounds i8, i8* %31, i64 %141
store i8 %137, i8* %144
%145 = add i64 %139, 3
%146 = getelementptr inbounds i8, i8* %31, i64 %143
store i8 -128, i8* %146
%147 = trunc i64 %140 to i8
%148 = add i64 %139, 4
%149 = getelementptr inbounds i8, i8* %31, i64 %145
store i8 %147, i8* %149
%150 = add i64 %139, 5
%151 = getelementptr inbounds i8, i8* %31, i64 %148
store i8 -15, i8* %151
%152 = add i64 %139, 6
%153 = getelementptr inbounds i8, i8* %31, i64 %150
store i8 %137, i8* %153
%154 = add i64 %139, 7
%155 = getelementptr inbounds i8, i8* %31, i64 %152
store i8 -128, i8* %155
%156 = trunc i64 %140 to i8
%157 = or i8 %156, 1
%158 = add i64 %139, 8
%159 = getelementptr inbounds i8, i8* %31, i64 %154
store i8 %157, i8* %159
%160 = add nuw nsw i64 %140, 2
%161 = icmp eq i64 %160, 192
br i1 %161, label %162, label %138
162: ; preds = %138
%163 = add nuw nsw i64 %136, 1
%164 = icmp eq i64 %163, 192
br i1 %164, label %165, label %134
165: ; preds = %162, %193
%166 = phi i64 [ %189, %193 ], [ %158, %162 ]
%167 = phi i64 [ %194, %193 ], [ 128, %162 ]
%168 = trunc i64 %167 to i8
br label %169
169: ; preds = %169, %165
%170 = phi i64 [ %166, %165 ], [ %189, %169 ]
%171 = phi i64 [ 128, %165 ], [ %191, %169 ]
%172 = add i64 %170, 1
%173 = getelementptr inbounds i8, i8* %31, i64 %170
store i8 -14, i8* %173
%174 = add i64 %170, 2
%175 = getelementptr inbounds i8, i8* %31, i64 %172
store i8 %168, i8* %175
%176 = add i64 %170, 3
%177 = getelementptr inbounds i8, i8* %31, i64 %174
store i8 -128, i8* %177
%178 = trunc i64 %171 to i8
%179 = add i64 %170, 4
%180 = getelementptr inbounds i8, i8* %31, i64 %176
store i8 %178, i8* %180
%181 = add i64 %170, 5
%182 = getelementptr inbounds i8, i8* %31, i64 %179
store i8 -14, i8* %182
%183 = add i64 %170, 6
%184 = getelementptr inbounds i8, i8* %31, i64 %181
store i8 %168, i8* %184
%185 = add i64 %170, 7
%186 = getelementptr inbounds i8, i8* %31, i64 %183
store i8 -128, i8* %186
%187 = trunc i64 %171 to i8
%188 = or i8 %187, 1
%189 = add i64 %170, 8
%190 = getelementptr inbounds i8, i8* %31, i64 %185
store i8 %188, i8* %190
%191 = add nuw nsw i64 %171, 2
%192 = icmp eq i64 %191, 192
br i1 %192, label %193, label %169
193: ; preds = %169
%194 = add nuw nsw i64 %167, 1
%195 = icmp eq i64 %194, 192
br i1 %195, label %196, label %165
196: ; preds = %193, %224
%197 = phi i64 [ %220, %224 ], [ %189, %193 ]
%198 = phi i64 [ %225, %224 ], [ 128, %193 ]
%199 = trunc i64 %198 to i8
br label %200
200: ; preds = %200, %196
%201 = phi i64 [ %197, %196 ], [ %220, %200 ]
%202 = phi i64 [ 128, %196 ], [ %222, %200 ]
%203 = add i64 %201, 1
%204 = getelementptr inbounds i8, i8* %31, i64 %201
store i8 -13, i8* %204
%205 = add i64 %201, 2
%206 = getelementptr inbounds i8, i8* %31, i64 %203
store i8 %199, i8* %206
%207 = add i64 %201, 3
%208 = getelementptr inbounds i8, i8* %31, i64 %205
store i8 -128, i8* %208
%209 = trunc i64 %202 to i8
%210 = add i64 %201, 4
%211 = getelementptr inbounds i8, i8* %31, i64 %207
store i8 %209, i8* %211
%212 = add i64 %201, 5
%213 = getelementptr inbounds i8, i8* %31, i64 %210
store i8 -13, i8* %213
%214 = add i64 %201, 6
%215 = getelementptr inbounds i8, i8* %31, i64 %212
store i8 %199, i8* %215
%216 = add i64 %201, 7
%217 = getelementptr inbounds i8, i8* %31, i64 %214
store i8 -128, i8* %217
%218 = trunc i64 %202 to i8
%219 = or i8 %218, 1
%220 = add i64 %201, 8
%221 = getelementptr inbounds i8, i8* %31, i64 %216
store i8 %219, i8* %221
%222 = add nuw nsw i64 %202, 2
%223 = icmp eq i64 %222, 192
br i1 %223, label %224, label %200
224: ; preds = %200
%225 = add nuw nsw i64 %198, 1
%226 = icmp eq i64 %225, 192
br i1 %226, label %227, label %196
227: ; preds = %224
%228 = inttoptr i64 %32 to i8*
%229 = getelementptr inbounds i8, i8* %31, i64 %220
store i8 0, i8* %229
br label %230
230: ; preds = %227, %230
%231 = phi i64 [ undef, %227 ], [ %234, %230 ]
%232 = phi i64 [ 0, %227 ], [ %235, %230 ]
%233 = tail call i64 @mbstowcs(i8* %228, i8* %31, i32 500000)
%234 = add i64 %233, %231
%235 = add nuw nsw i64 %232, 1
%236 = icmp eq i64 %235, 50
br i1 %236, label %237, label %230
237: ; preds = %230
%238 = tail call i32 @free(i8* %228)
%239 = tail call i32 @free(i8* %31)
br label %240
240: ; preds = %24, %237
%241 = phi i64 [ %234, %237 ], [ -1, %24 ]
ret i64 %241
}