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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ sprintf(char *, char *, int);
int /*<<< orphan*/ sscanf(char *, char *, int *);
int /*<<< orphan*/ wcsutil_double2str(char *, char *, double const);
void wcshdo_format(int fmt, int nval, const double val[], char *format) {
  int emax = -999;
  int emin = +999;
  int precision = 0;
  for (int i = 0; i < nval; i++) {
    char cval[24];
    wcsutil_double2str(cval, "%21.14E", val[i]);
    int cpi = 16;
    while (2 < cpi && cval[cpi] == '0')
      cpi--;
    cpi -= 2;
    if (precision < cpi)
      precision = cpi;
    int expon;
    sscanf(cval + 18, "%d", &expon);
    if (emax < expon)
      emax = expon;
    expon -= cpi;
    if (expon < emin)
      emin = expon;
  }
  if (fmt == 'G') {
    emax++;
    if (emin < -15 || 15 < emax || 15 < (emax - emin)) {
      fmt = 'E';
    } else {
      fmt = 'f';
    }
  }
  if (fmt == 'f') {
    precision = -emin;
    if (precision < 1)
      precision = 1;
    if (17 < precision)
      precision = 17;
    sprintf(format, "%%20.%df", precision);
  } else {
    if (precision < 1)
      precision = 1;
    if (14 < precision)
      precision = 14;
    if (precision < 14) {
      sprintf(format, "%%20.%dE", precision);
    } else {
      sprintf(format, "%%21.%dE", precision);
    }
  }
}


x86 assembly (clang, -O0):
<wcshdo_format>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
movl   $0xfffffc19,-0x1c(%rbp)
movl   $0x3e7,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    124a <wcshdo_format+0x11a>
lea    -0x40(%rbp),%rdi
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xe7a(%rip),%rsi
call   1050 <wcsutil_double2str@plt>
movl   $0x10,-0x44(%rbp)
xor    %eax,%eax
mov    $0x2,%ecx
cmp    -0x44(%rbp),%ecx
mov    %al,-0x49(%rbp)
jge    11b7 <wcshdo_format+0x87>
movslq -0x44(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
cmp    $0x30,%eax
sete   %al
mov    %al,-0x49(%rbp)
mov    -0x49(%rbp),%al
test   $0x1,%al
jne    11c7 <wcshdo_format+0x97>
jmp    11d5 <wcshdo_format+0xa5>
mov    -0x44(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x44(%rbp)
jmp    1192 <wcshdo_format+0x62>
mov    -0x44(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x44(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    11f0 <wcshdo_format+0xc0>
mov    -0x44(%rbp),%eax
mov    %eax,-0x24(%rbp)
lea    -0x40(%rbp),%rdi
add    $0x12,%rdi
lea    0xe09(%rip),%rsi
lea    -0x48(%rbp),%rdx
call   1030 <sscanf@plt>
mov    -0x1c(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    121a <wcshdo_format+0xea>
mov    -0x48(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x44(%rbp),%ecx
mov    -0x48(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1237 <wcshdo_format+0x107>
mov    -0x48(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    123c <wcshdo_format+0x10c>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1162 <wcshdo_format+0x32>
cmpl   $0x47,-0x4(%rbp)
jne    12a0 <wcshdo_format+0x170>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0xfffffff1,-0x20(%rbp)
jl     1288 <wcshdo_format+0x158>
mov    $0xf,%eax
cmp    -0x1c(%rbp),%eax
jl     1288 <wcshdo_format+0x158>
mov    -0x1c(%rbp),%ecx
sub    -0x20(%rbp),%ecx
mov    $0xf,%eax
cmp    %ecx,%eax
jge    1294 <wcshdo_format+0x164>
movl   $0x45,-0x4(%rbp)
jmp    129b <wcshdo_format+0x16b>
movl   $0x66,-0x4(%rbp)
jmp    12a0 <wcshdo_format+0x170>
cmpl   $0x66,-0x4(%rbp)
jne    12f0 <wcshdo_format+0x1c0>
xor    %eax,%eax
sub    -0x20(%rbp),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x1,-0x24(%rbp)
jge    12c3 <wcshdo_format+0x193>
movl   $0x1,-0x24(%rbp)
mov    $0x11,%eax
cmp    -0x24(%rbp),%eax
jge    12d8 <wcshdo_format+0x1a8>
movl   $0x11,-0x24(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x24(%rbp),%edx
lea    0xd25(%rip),%rsi
call   1040 <sprintf@plt>
jmp    1350 <wcshdo_format+0x220>
cmpl   $0x1,-0x24(%rbp)
jge    1301 <wcshdo_format+0x1d1>
movl   $0x1,-0x24(%rbp)
mov    $0xe,%eax
cmp    -0x24(%rbp),%eax
jge    1316 <wcshdo_format+0x1e6>
movl   $0xe,-0x24(%rbp)
cmpl   $0xe,-0x24(%rbp)
jge    1338 <wcshdo_format+0x208>
mov    -0x18(%rbp),%rdi
mov    -0x24(%rbp),%edx
lea    0xce6(%rip),%rsi
call   1040 <sprintf@plt>
jmp    134b <wcshdo_format+0x21b>
mov    -0x18(%rbp),%rdi
mov    -0x24(%rbp),%edx
lea    0xcd7(%rip),%rsi
call   1040 <sprintf@plt>
jmp    1350 <wcshdo_format+0x220>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<wcshdo_format>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %rcx,0x20(%rsp)
mov    %rdx,0x30(%rsp)
mov    %edi,0x28(%rsp)
test   %esi,%esi
jle    129e <wcshdo_format+0x16e>
mov    %esi,%ebp
mov    $0xfffffc19,%r13d
mov    $0x3e7,%r15d
xor    %r14d,%r14d
xor    %r12d,%r12d
jmp    11b1 <wcshdo_format+0x81>
nopw   0x0(%rax,%rax,1)
cmp    %ebx,%r12d
cmovb  %ebx,%r12d
lea    0x12(%rsp),%rdi
lea    0xe85(%rip),%rsi
lea    0x2c(%rsp),%rdx
call   1030 <sscanf@plt>
mov    0x2c(%rsp),%eax
cmp    %eax,%r13d
cmovl  %eax,%r13d
sub    %ebx,%eax
cmp    %r15d,%eax
cmovge %r15d,%eax
add    $0x1,%r14
mov    %eax,%r15d
cmp    %r14,%rbp
je     12ac <wcshdo_format+0x17c>
mov    0x30(%rsp),%rax
movsd  (%rax,%r14,8),%xmm0
mov    %rsp,%rdi
lea    0xe3a(%rip),%rsi
call   1050 <wcsutil_double2str@plt>
mov    $0xe,%ebx
cmpb   $0x30,0x10(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0xd,%ebx
cmpb   $0x30,0xf(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0xc,%ebx
cmpb   $0x30,0xe(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0xb,%ebx
cmpb   $0x30,0xd(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0xa,%ebx
cmpb   $0x30,0xc(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0x9,%ebx
cmpb   $0x30,0xb(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0x8,%ebx
cmpb   $0x30,0xa(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0x7,%ebx
cmpb   $0x30,0x9(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0x6,%ebx
cmpb   $0x30,0x8(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0x5,%ebx
cmpb   $0x30,0x7(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0x4,%ebx
cmpb   $0x30,0x6(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0x3,%ebx
cmpb   $0x30,0x5(%rsp)
jne    1170 <wcshdo_format+0x40>
mov    $0x2,%ebx
cmpb   $0x30,0x4(%rsp)
jne    1170 <wcshdo_format+0x40>
xor    %ebx,%ebx
cmpb   $0x30,0x3(%rsp)
setne  %bl
jmp    1170 <wcshdo_format+0x40>
xor    %r12d,%r12d
mov    $0xfffffc19,%r13d
mov    $0x3e7,%eax
mov    0x28(%rsp),%ecx
cmp    $0x47,%ecx
je     12bc <wcshdo_format+0x18c>
cmp    $0x66,%ecx
je     12f6 <wcshdo_format+0x1c6>
jmp    12d4 <wcshdo_format+0x1a4>
cmp    $0xfffffff1,%eax
jl     12d4 <wcshdo_format+0x1a4>
cmp    $0xe,%r13d
jg     12d4 <wcshdo_format+0x1a4>
sub    %eax,%r13d
add    $0x1,%r13d
cmp    $0xf,%r13d
jle    12f6 <wcshdo_format+0x1c6>
test   %r12d,%r12d
mov    $0x1,%eax
cmovg  %r12d,%eax
mov    $0xe,%edx
cmp    $0xe,%eax
cmovb  %eax,%edx
jae    1316 <wcshdo_format+0x1e6>
lea    0xd20(%rip),%rsi
jmp    131d <wcshdo_format+0x1ed>
neg    %eax
test   %eax,%eax
mov    $0x1,%ecx
cmovg  %eax,%ecx
cmp    $0x11,%ecx
mov    $0x11,%edx
cmovb  %ecx,%edx
lea    0xcf7(%rip),%rsi
jmp    131d <wcshdo_format+0x1ed>
lea    0xd00(%rip),%rsi
mov    0x20(%rsp),%rdi
call   1040 <sprintf@plt>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [8 x i8] c"%21.14E\00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [9 x i8] c"%%20.%df\00"
@.str.3 = [9 x i8] c"%%20.%dE\00"
@.str.4 = [9 x i8] c"%%21.%dE\00"
define void @wcshdo_format(i32 %0, i32 %1, double* %2, i8* %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca double*
%8 = alloca i8*
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca [24 x i8]
%14 = alloca i32
%15 = alloca i32
store i32 %0, i32* %5
store i32 %1, i32* %6
store double* %2, double** %7
store i8* %3, i8** %8
store i32 -999, i32* %9
store i32 999, i32* %10
store i32 0, i32* %11
store i32 0, i32* %12
br label %16
16: ; preds = %70, %4
%17 = load i32, i32* %12
%18 = load i32, i32* %6
%19 = icmp slt i32 %17, %18
br i1 %19, label %20, label %73
20: ; preds = %16
%21 = getelementptr inbounds [24 x i8], [24 x i8]* %13, i64 0, i64 0
%22 = load double*, double** %7
%23 = load i32, i32* %12
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds double, double* %22, i64 %24
%26 = load double, double* %25
%27 = call i32 @wcsutil_double2str(i8* %21, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), double %26)
store i32 16, i32* %14
br label %28
28: ; preds = %40, %20
%29 = load i32, i32* %14
%30 = icmp slt i32 2, %29
br i1 %30, label %31, label %38
31: ; preds = %28
%32 = load i32, i32* %14
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [24 x i8], [24 x i8]* %13, i64 0, i64 %33
%35 = load i8, i8* %34
%36 = sext i8 %35 to i32
%37 = icmp eq i32 %36, 48
br label %38
38: ; preds = %31, %28
%39 = phi i1 [ false, %28 ], [ %37, %31 ]
br i1 %39, label %40, label %43
40: ; preds = %38
%41 = load i32, i32* %14
%42 = add nsw i32 %41, -1
store i32 %42, i32* %14
br label %28
43: ; preds = %38
%44 = load i32, i32* %14
%45 = sub nsw i32 %44, 2
store i32 %45, i32* %14
%46 = load i32, i32* %11
%47 = load i32, i32* %14
%48 = icmp slt i32 %46, %47
br i1 %48, label %49, label %51
49: ; preds = %43
%50 = load i32, i32* %14
store i32 %50, i32* %11
br label %51
51: ; preds = %49, %43
%52 = getelementptr inbounds [24 x i8], [24 x i8]* %13, i64 0, i64 0
%53 = getelementptr inbounds i8, i8* %52, i64 18
%54 = call i32 @sscanf(i8* %53, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %15)
%55 = load i32, i32* %9
%56 = load i32, i32* %15
%57 = icmp slt i32 %55, %56
br i1 %57, label %58, label %60
58: ; preds = %51
%59 = load i32, i32* %15
store i32 %59, i32* %9
br label %60
60: ; preds = %58, %51
%61 = load i32, i32* %14
%62 = load i32, i32* %15
%63 = sub nsw i32 %62, %61
store i32 %63, i32* %15
%64 = load i32, i32* %15
%65 = load i32, i32* %10
%66 = icmp slt i32 %64, %65
br i1 %66, label %67, label %69
67: ; preds = %60
%68 = load i32, i32* %15
store i32 %68, i32* %10
br label %69
69: ; preds = %67, %60
br label %70
70: ; preds = %69
%71 = load i32, i32* %12
%72 = add nsw i32 %71, 1
store i32 %72, i32* %12
br label %16
73: ; preds = %16
%74 = load i32, i32* %5
%75 = icmp eq i32 %74, 71
br i1 %75, label %76, label %92
76: ; preds = %73
%77 = load i32, i32* %9
%78 = add nsw i32 %77, 1
store i32 %78, i32* %9
%79 = load i32, i32* %10
%80 = icmp slt i32 %79, -15
br i1 %80, label %89, label %81
81: ; preds = %76
%82 = load i32, i32* %9
%83 = icmp slt i32 15, %82
br i1 %83, label %89, label %84
84: ; preds = %81
%85 = load i32, i32* %9
%86 = load i32, i32* %10
%87 = sub nsw i32 %85, %86
%88 = icmp slt i32 15, %87
br i1 %88, label %89, label %90
89: ; preds = %84, %81, %76
store i32 69, i32* %5
br label %91
90: ; preds = %84
store i32 102, i32* %5
br label %91
91: ; preds = %90, %89
br label %92
92: ; preds = %91, %73
%93 = load i32, i32* %5
%94 = icmp eq i32 %93, 102
br i1 %94, label %95, label %109
95: ; preds = %92
%96 = load i32, i32* %10
%97 = sub nsw i32 0, %96
store i32 %97, i32* %11
%98 = load i32, i32* %11
%99 = icmp slt i32 %98, 1
br i1 %99, label %100, label %101
100: ; preds = %95
store i32 1, i32* %11
br label %101
101: ; preds = %100, %95
%102 = load i32, i32* %11
%103 = icmp slt i32 17, %102
br i1 %103, label %104, label %105
104: ; preds = %101
store i32 17, i32* %11
br label %105
105: ; preds = %104, %101
%106 = load i8*, i8** %8
%107 = load i32, i32* %11
%108 = call i32 @sprintf(i8* %106, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 %107)
br label %129
109: ; preds = %92
%110 = load i32, i32* %11
%111 = icmp slt i32 %110, 1
br i1 %111, label %112, label %113
112: ; preds = %109
store i32 1, i32* %11
br label %113
113: ; preds = %112, %109
%114 = load i32, i32* %11
%115 = icmp slt i32 14, %114
br i1 %115, label %116, label %117
116: ; preds = %113
store i32 14, i32* %11
br label %117
117: ; preds = %116, %113
%118 = load i32, i32* %11
%119 = icmp slt i32 %118, 14
br i1 %119, label %120, label %124
120: ; preds = %117
%121 = load i8*, i8** %8
%122 = load i32, i32* %11
%123 = call i32 @sprintf(i8* %121, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 %122)
br label %128
124: ; preds = %117
%125 = load i8*, i8** %8
%126 = load i32, i32* %11
%127 = call i32 @sprintf(i8* %125, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 %126)
br label %128
128: ; preds = %124, %120
br label %129
129: ; preds = %128, %105
ret void
}

LLVM IR (-O2):
@.str = [8 x i8] c"%21.14E\00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [9 x i8] c"%%20.%df\00"
@.str.3 = [9 x i8] c"%%20.%dE\00"
@.str.4 = [9 x i8] c"%%21.%dE\00"
define void @wcshdo_format(i32 %0, i32 %1, double* nocapture %2, i8* nocapture writeonly %3) {
%5 = alloca [24 x i8]
%6 = alloca i32
%7 = icmp sgt i32 %1, 0
br i1 %7, label %8, label %27
8: ; preds = %4
%9 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 0
%10 = bitcast i32* %6 to i8*
%11 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 18
%12 = zext i32 %1 to i64
%13 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 16
%14 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 15
%15 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 14
%16 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 13
%17 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 12
%18 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 11
%19 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 10
%20 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 9
%21 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 8
%22 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 7
%23 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 6
%24 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 5
%25 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 4
%26 = getelementptr inbounds [24 x i8], [24 x i8]* %5, i64 0, i64 3
br label %32
27: ; preds = %82, %4
%28 = phi i32 [ 999, %4 ], [ %92, %82 ]
%29 = phi i32 [ -999, %4 ], [ %89, %82 ]
%30 = phi i32 [ 0, %4 ], [ %85, %82 ]
%31 = sub i32 0, %28
switch i32 %0, label %109 [
i32 71, label %95
i32 102, label %103
]
32: ; preds = %8, %82
%33 = phi i64 [ 0, %8 ], [ %93, %82 ]
%34 = phi i32 [ 0, %8 ], [ %85, %82 ]
%35 = phi i32 [ 999, %8 ], [ %92, %82 ]
%36 = phi i32 [ -999, %8 ], [ %89, %82 ]
%37 = getelementptr inbounds double, double* %2, i64 %33
%38 = load double, double* %37
%39 = call i32 @wcsutil_double2str(i8* %9, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), double %38)
%40 = load i8, i8* %13
%41 = icmp eq i8 %40, 48
br i1 %41, label %42, label %82
42: ; preds = %32
%43 = load i8, i8* %14
%44 = icmp eq i8 %43, 48
br i1 %44, label %45, label %82
45: ; preds = %42
%46 = load i8, i8* %15
%47 = icmp eq i8 %46, 48
br i1 %47, label %48, label %82
48: ; preds = %45
%49 = load i8, i8* %16
%50 = icmp eq i8 %49, 48
br i1 %50, label %51, label %82
51: ; preds = %48
%52 = load i8, i8* %17
%53 = icmp eq i8 %52, 48
br i1 %53, label %54, label %82
54: ; preds = %51
%55 = load i8, i8* %18
%56 = icmp eq i8 %55, 48
br i1 %56, label %57, label %82
57: ; preds = %54
%58 = load i8, i8* %19
%59 = icmp eq i8 %58, 48
br i1 %59, label %60, label %82
60: ; preds = %57
%61 = load i8, i8* %20
%62 = icmp eq i8 %61, 48
br i1 %62, label %63, label %82
63: ; preds = %60
%64 = load i8, i8* %21
%65 = icmp eq i8 %64, 48
br i1 %65, label %66, label %82
66: ; preds = %63
%67 = load i8, i8* %22
%68 = icmp eq i8 %67, 48
br i1 %68, label %69, label %82
69: ; preds = %66
%70 = load i8, i8* %23
%71 = icmp eq i8 %70, 48
br i1 %71, label %72, label %82
72: ; preds = %69
%73 = load i8, i8* %24
%74 = icmp eq i8 %73, 48
br i1 %74, label %75, label %82
75: ; preds = %72
%76 = load i8, i8* %25
%77 = icmp eq i8 %76, 48
br i1 %77, label %78, label %82
78: ; preds = %75
%79 = load i8, i8* %26
%80 = icmp ne i8 %79, 48
%81 = zext i1 %80 to i32
br label %82
82: ; preds = %78, %75, %72, %69, %66, %63, %60, %57, %54, %51, %48, %45, %42, %32
%83 = phi i32 [ 14, %32 ], [ 13, %42 ], [ 12, %45 ], [ 11, %48 ], [ 10, %51 ], [ 9, %54 ], [ 8, %57 ], [ 7, %60 ], [ 6, %63 ], [ 5, %66 ], [ 4, %69 ], [ 3, %72 ], [ 2, %75 ], [ %81, %78 ]
%84 = icmp ult i32 %34, %83
%85 = select i1 %84, i32 %83, i32 %34
%86 = call i32 @sscanf(i8* %11, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %6)
%87 = load i32, i32* %6
%88 = icmp slt i32 %36, %87
%89 = select i1 %88, i32 %87, i32 %36
%90 = sub nsw i32 %87, %83
%91 = icmp slt i32 %90, %35
%92 = select i1 %91, i32 %90, i32 %35
%93 = add nuw nsw i64 %33, 1
%94 = icmp eq i64 %93, %12
br i1 %94, label %27, label %32
95: ; preds = %27
%96 = icmp slt i32 %28, -15
%97 = icmp sgt i32 %29, 14
%98 = select i1 %96, i1 true, i1 %97
br i1 %98, label %109, label %99
99: ; preds = %95
%100 = add nsw i32 %29, 1
%101 = sub i32 %100, %28
%102 = icmp sgt i32 %101, 15
br i1 %102, label %109, label %103
103: ; preds = %27, %99
%104 = icmp sgt i32 %31, 1
%105 = select i1 %104, i32 %31, i32 1
%106 = icmp ult i32 %105, 17
%107 = select i1 %106, i32 %105, i32 17
%108 = call i32 @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 %107)
br label %118
109: ; preds = %27, %99, %95
%110 = icmp sgt i32 %30, 1
%111 = select i1 %110, i32 %30, i32 1
%112 = icmp ult i32 %111, 14
%113 = select i1 %112, i32 %111, i32 14
br i1 %112, label %114, label %116
114: ; preds = %109
%115 = call i32 @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 %113)
br label %118
116: ; preds = %109
%117 = call i32 @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 %113)
br label %118
118: ; preds = %114, %116, %103
ret void
}