#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 floor(double);
int /*<<< orphan*/ printf(char *, int, int);
int /*<<< orphan*/ putchar(char);
void show_impulse_resp(double *s, int cnt) {
  int y, x, c0, c1, ws, uy, ly, my;
  for (y = 12; y >= -12; y--) {
    ws = 0;
    for (x = 0; x < cnt; x++) {
      c0 = y == 0 ? '-' : ' ';
      c1 = x % 10 == 0 ? '|' : y == 0 ? x % 2 == 0 ? '|' : '-' : ' ';
      if (x == 0) {
        uy = ly = my = floor(s[x] * 10.0 + 0.5);
      } else if (s[x] > s[x - 1]) {
        ly = floor(s[x - 1] * 10.0 + 0.5);
        uy = floor(s[x] * 10.0 + 0.5);
        my = uy;
      } else {
        uy = floor(s[x - 1] * 10.0 + 0.5);
        ly = floor(s[x] * 10.0 + 0.5);
        my = ly;
      }
      if (y > ly && y < uy)
        c0 = '*';
      if (y == ly || y == uy)
        c0 = '*';
      if (y == my)
        c1 = '*';
      if (c0 == ' ')
        ws++;
      else {
        printf("%*c", ws + 1, c0);
        ws = 0;
      }
      if (c1 == ' ')
        ws++;
      else {
        printf("%*c", ws + 1, c1);
        ws = 0;
      }
    }
    putchar('\n');
  }
}


x86 assembly (clang, -O0):
<show_impulse_resp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0xc,-0x10(%rbp)
cmpl   $0xfffffff4,-0x10(%rbp)
jl     1406 <show_impulse_resp+0x2d6>
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    13ee <show_impulse_resp+0x2be>
mov    -0x10(%rbp),%edx
mov    $0x20,%eax
mov    $0x2d,%ecx
cmp    $0x0,%edx
cmove  %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    11a1 <show_impulse_resp+0x71>
mov    $0x7c,%eax
mov    %eax,-0x30(%rbp)
jmp    11e1 <show_impulse_resp+0xb1>
cmpl   $0x0,-0x10(%rbp)
jne    11ce <show_impulse_resp+0x9e>
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    $0x2d,%eax
mov    $0x7c,%ecx
cmp    $0x0,%edx
cmove  %ecx,%eax
mov    %eax,-0x34(%rbp)
jmp    11db <show_impulse_resp+0xab>
mov    $0x20,%eax
mov    %eax,-0x34(%rbp)
jmp    11db <show_impulse_resp+0xab>
mov    -0x34(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x14(%rbp)
jne    1229 <show_impulse_resp+0xf9>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xdfa(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdf6(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1050 <floor@plt>
mov    %eax,-0x2c(%rbp)
mov    %eax,-0x28(%rbp)
mov    %eax,-0x24(%rbp)
jmp    1322 <show_impulse_resp+0x1f2>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    12b8 <show_impulse_resp+0x188>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xd98(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd94(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1050 <floor@plt>
mov    %eax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xd6b(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd67(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1050 <floor@plt>
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    131d <show_impulse_resp+0x1ed>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xd2e(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd2a(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1050 <floor@plt>
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xd01(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xcfd(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1050 <floor@plt>
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    1322 <show_impulse_resp+0x1f2>
mov    -0x10(%rbp),%eax
cmp    -0x28(%rbp),%eax
jle    1341 <show_impulse_resp+0x211>
mov    -0x10(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1341 <show_impulse_resp+0x211>
movl   $0x2a,-0x18(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     1359 <show_impulse_resp+0x229>
mov    -0x10(%rbp),%eax
cmp    -0x24(%rbp),%eax
jne    1360 <show_impulse_resp+0x230>
movl   $0x2a,-0x18(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jne    1373 <show_impulse_resp+0x243>
movl   $0x2a,-0x1c(%rbp)
cmpl   $0x20,-0x18(%rbp)
jne    138b <show_impulse_resp+0x25b>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    13a7 <show_impulse_resp+0x277>
mov    -0x20(%rbp),%esi
add    $0x1,%esi
mov    -0x18(%rbp),%edx
lea    0xc75(%rip),%rdi
call   1040 <printf@plt>
movl   $0x0,-0x20(%rbp)
cmpl   $0x20,-0x1c(%rbp)
jne    13bf <show_impulse_resp+0x28f>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    13db <show_impulse_resp+0x2ab>
mov    -0x20(%rbp),%esi
add    $0x1,%esi
mov    -0x1c(%rbp),%edx
lea    0xc41(%rip),%rdi
call   1040 <printf@plt>
movl   $0x0,-0x20(%rbp)
jmp    13e0 <show_impulse_resp+0x2b0>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    115e <show_impulse_resp+0x2e>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    -0x10(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x10(%rbp)
jmp    1146 <show_impulse_resp+0x16>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<show_impulse_resp>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rdi,%r12
mov    %esi,0x8(%rsp)
mov    %esi,%eax
mov    %rax,0x10(%rsp)
mov    $0xc,%r15d
jmp    117b <show_impulse_resp+0x4b>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    -0x1(%r15),%eax
cmp    $0xfffffff4,%r15d
mov    %eax,%r15d
jle    1342 <show_impulse_resp+0x212>
cmpl   $0x0,0x8(%rsp)
jle    1160 <show_impulse_resp+0x30>
test   %r15d,%r15d
mov    $0x20,%ebx
mov    $0x2d,%eax
cmove  %eax,%ebx
setne  0x7(%rsp)
movsd  (%r12),%xmm0
mulsd  0xe5b(%rip),%xmm0
addsd  0xe5b(%rip),%xmm0
call   1050 <floor@plt>
cmp    %eax,%r15d
mov    %ebx,0xc(%rsp)
mov    %ebx,%edx
mov    $0x2a,%eax
cmove  %eax,%edx
mov    $0x7c,%ebx
cmove  %eax,%ebx
mov    $0x2,%ebp
cmp    $0x20,%edx
je     11eb <show_impulse_resp+0xbb>
mov    $0x1,%ebp
lea    0xe2f(%rip),%rdi
mov    $0x1,%esi
call   1040 <printf@plt>
lea    0xe1e(%rip),%rdi
mov    %ebp,%esi
mov    %ebx,%edx
call   1040 <printf@plt>
cmpl   $0x1,0x8(%rsp)
je     1160 <show_impulse_resp+0x30>
xor    %ebp,%ebp
mov    $0x1,%r14d
jmp    121f <show_impulse_resp+0xef>
add    $0x1,%r14
cmp    %r14,0x10(%rsp)
je     1160 <show_impulse_resp+0x30>
movsd  -0x8(%r12,%r14,8),%xmm1
movsd  %xmm1,0x18(%rsp)
movsd  (%r12,%r14,8),%xmm0
movsd  %xmm0,0x20(%rsp)
movapd %xmm1,%xmm0
movsd  0xdbc(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdb8(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1050 <floor@plt>
mov    %eax,%ebx
movsd  (%r12,%r14,8),%xmm0
mulsd  0xd97(%rip),%xmm0
addsd  0xd97(%rip),%xmm0
call   1050 <floor@plt>
movsd  0x20(%rsp),%xmm0
ucomisd 0x18(%rsp),%xmm0
mov    %ebx,%ecx
cmova  %eax,%ecx
cmovbe %eax,%ebx
mov    $0x2a,%r13d
mov    $0x2a,%esi
cmp    %ecx,%r15d
jl     129e <show_impulse_resp+0x16e>
mov    0xc(%rsp),%esi
cmp    %ebx,%r15d
jg     12a7 <show_impulse_resp+0x177>
mov    0xc(%rsp),%esi
mov    $0x2a,%edx
cmp    %ecx,%r15d
je     12b3 <show_impulse_resp+0x183>
mov    %esi,%edx
cmp    %ebx,%r15d
cmove  %r13d,%edx
mov    %r14d,%ecx
mov    $0xcccccccd,%esi
imul   %rsi,%rcx
shr    $0x23,%rcx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%esi
mov    $0x7c,%ecx
mov    $0x7c,%edi
cmp    %esi,%r14d
je     12e3 <show_impulse_resp+0x1b3>
mov    $0x20,%edi
test   $0x1,%r14b
mov    $0x2d,%ebx
cmovne %ebx,%ecx
cmpb   $0x0,0x7(%rsp)
cmovne %edi,%ecx
cmp    %esi,%r14d
cmove  %edi,%ecx
cmp    %eax,%r15d
je     1305 <show_impulse_resp+0x1d5>
mov    %ecx,%r13d
add    $0x1,%ebp
cmp    $0x20,%edx
je     131d <show_impulse_resp+0x1ed>
lea    0xcfc(%rip),%rdi
mov    %ebp,%esi
call   1040 <printf@plt>
xor    %ebp,%ebp
add    $0x1,%ebp
cmp    $0x20,%r13d
je     1210 <show_impulse_resp+0xe0>
lea    0xcdf(%rip),%rdi
mov    %ebp,%esi
mov    %r13d,%edx
call   1040 <printf@plt>
xor    %ebp,%ebp
jmp    1210 <show_impulse_resp+0xe0>
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [4 x i8] c"%*c\00"
define void @show_impulse_resp(double* %0, i32 %1) {
%3 = alloca double*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
store double* %0, double** %3
store i32 %1, i32* %4
store i32 12, i32* %5
br label %13
13: ; preds = %153, %2
%14 = load i32, i32* %5
%15 = icmp sge i32 %14, -12
br i1 %15, label %16, label %156
16: ; preds = %13
store i32 0, i32* %9
store i32 0, i32* %6
br label %17
17: ; preds = %148, %16
%18 = load i32, i32* %6
%19 = load i32, i32* %4
%20 = icmp slt i32 %18, %19
br i1 %20, label %21, label %151
21: ; preds = %17
%22 = load i32, i32* %5
%23 = icmp eq i32 %22, 0
%24 = zext i1 %23 to i64
%25 = select i1 %23, i32 45, i32 32
store i32 %25, i32* %7
%26 = load i32, i32* %6
%27 = srem i32 %26, 10
%28 = icmp eq i32 %27, 0
br i1 %28, label %29, label %30
29: ; preds = %21
br label %42
30: ; preds = %21
%31 = load i32, i32* %5
%32 = icmp eq i32 %31, 0
br i1 %32, label %33, label %39
33: ; preds = %30
%34 = load i32, i32* %6
%35 = srem i32 %34, 2
%36 = icmp eq i32 %35, 0
%37 = zext i1 %36 to i64
%38 = select i1 %36, i32 124, i32 45
br label %40
39: ; preds = %30
br label %40
40: ; preds = %39, %33
%41 = phi i32 [ %38, %33 ], [ 32, %39 ]
br label %42
42: ; preds = %40, %29
%43 = phi i32 [ 124, %29 ], [ %41, %40 ]
store i32 %43, i32* %8
%44 = load i32, i32* %6
%45 = icmp eq i32 %44, 0
br i1 %45, label %46, label %54
46: ; preds = %42
%47 = load double*, double** %3
%48 = load i32, i32* %6
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds double, double* %47, i64 %49
%51 = load double, double* %50
%52 = call double @llvm.fmuladd.f64(double %51, double 1.000000e+01, double 5.000000e-01)
%53 = call i32 @floor(double %52)
store i32 %53, i32* %12
store i32 %53, i32* %11
store i32 %53, i32* %10
br label %102
54: ; preds = %42
%55 = load double*, double** %3
%56 = load i32, i32* %6
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds double, double* %55, i64 %57
%59 = load double, double* %58
%60 = load double*, double** %3
%61 = load i32, i32* %6
%62 = sub nsw i32 %61, 1
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds double, double* %60, i64 %63
%65 = load double, double* %64
%66 = fcmp ogt double %59, %65
br i1 %66, label %67, label %84
67: ; preds = %54
%68 = load double*, double** %3
%69 = load i32, i32* %6
%70 = sub nsw i32 %69, 1
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds double, double* %68, i64 %71
%73 = load double, double* %72
%74 = call double @llvm.fmuladd.f64(double %73, double 1.000000e+01, double 5.000000e-01)
%75 = call i32 @floor(double %74)
store i32 %75, i32* %11
%76 = load double*, double** %3
%77 = load i32, i32* %6
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds double, double* %76, i64 %78
%80 = load double, double* %79
%81 = call double @llvm.fmuladd.f64(double %80, double 1.000000e+01, double 5.000000e-01)
%82 = call i32 @floor(double %81)
store i32 %82, i32* %10
%83 = load i32, i32* %10
store i32 %83, i32* %12
br label %101
84: ; preds = %54
%85 = load double*, double** %3
%86 = load i32, i32* %6
%87 = sub nsw i32 %86, 1
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds double, double* %85, i64 %88
%90 = load double, double* %89
%91 = call double @llvm.fmuladd.f64(double %90, double 1.000000e+01, double 5.000000e-01)
%92 = call i32 @floor(double %91)
store i32 %92, i32* %10
%93 = load double*, double** %3
%94 = load i32, i32* %6
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds double, double* %93, i64 %95
%97 = load double, double* %96
%98 = call double @llvm.fmuladd.f64(double %97, double 1.000000e+01, double 5.000000e-01)
%99 = call i32 @floor(double %98)
store i32 %99, i32* %11
%100 = load i32, i32* %11
store i32 %100, i32* %12
br label %101
101: ; preds = %84, %67
br label %102
102: ; preds = %101, %46
%103 = load i32, i32* %5
%104 = load i32, i32* %11
%105 = icmp sgt i32 %103, %104
br i1 %105, label %106, label %111
106: ; preds = %102
%107 = load i32, i32* %5
%108 = load i32, i32* %10
%109 = icmp slt i32 %107, %108
br i1 %109, label %110, label %111
110: ; preds = %106
store i32 42, i32* %7
br label %111
111: ; preds = %110, %106, %102
%112 = load i32, i32* %5
%113 = load i32, i32* %11
%114 = icmp eq i32 %112, %113
br i1 %114, label %119, label %115
115: ; preds = %111
%116 = load i32, i32* %5
%117 = load i32, i32* %10
%118 = icmp eq i32 %116, %117
br i1 %118, label %119, label %120
119: ; preds = %115, %111
store i32 42, i32* %7
br label %120
120: ; preds = %119, %115
%121 = load i32, i32* %5
%122 = load i32, i32* %12
%123 = icmp eq i32 %121, %122
br i1 %123, label %124, label %125
124: ; preds = %120
store i32 42, i32* %8
br label %125
125: ; preds = %124, %120
%126 = load i32, i32* %7
%127 = icmp eq i32 %126, 32
br i1 %127, label %128, label %131
128: ; preds = %125
%129 = load i32, i32* %9
%130 = add nsw i32 %129, 1
store i32 %130, i32* %9
br label %136
131: ; preds = %125
%132 = load i32, i32* %9
%133 = add nsw i32 %132, 1
%134 = load i32, i32* %7
%135 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %133, i32 %134)
store i32 0, i32* %9
br label %136
136: ; preds = %131, %128
%137 = load i32, i32* %8
%138 = icmp eq i32 %137, 32
br i1 %138, label %139, label %142
139: ; preds = %136
%140 = load i32, i32* %9
%141 = add nsw i32 %140, 1
store i32 %141, i32* %9
br label %147
142: ; preds = %136
%143 = load i32, i32* %9
%144 = add nsw i32 %143, 1
%145 = load i32, i32* %8
%146 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %144, i32 %145)
store i32 0, i32* %9
br label %147
147: ; preds = %142, %139
br label %148
148: ; preds = %147
%149 = load i32, i32* %6
%150 = add nsw i32 %149, 1
store i32 %150, i32* %6
br label %17
151: ; preds = %17
%152 = call i32 @putchar(i8 signext 10)
br label %153
153: ; preds = %151
%154 = load i32, i32* %5
%155 = add nsw i32 %154, -1
store i32 %155, i32* %5
br label %13
156: ; preds = %13
ret void
}

LLVM IR (-O2):
@.str = [4 x i8] c"%*c\00"
define void @show_impulse_resp(double* nocapture %0, i32 %1) {
%3 = icmp sgt i32 %1, 0
%4 = zext i32 %1 to i64
%5 = icmp eq i32 %1, 1
br label %6
6: ; preds = %2, %73
%7 = phi i32 [ 12, %2 ], [ %75, %73 ]
br i1 %3, label %8, label %73
8: ; preds = %6
%9 = icmp eq i32 %7, 0
%10 = select i1 %9, i32 45, i32 32
%11 = xor i1 %9, true
%12 = load double, double* %0
%13 = tail call double @llvm.fmuladd.f64(double %12, double 1.000000e+01, double 5.000000e-01)
%14 = tail call i32 @floor(double %13)
%15 = icmp eq i32 %7, %14
%16 = select i1 %15, i32 42, i32 %10
%17 = select i1 %15, i32 42, i32 124
%18 = icmp eq i32 %16, 32
br i1 %18, label %21, label %19
19: ; preds = %8
%20 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 1, i32 %16)
br label %21
21: ; preds = %8, %19
%22 = phi i32 [ 1, %19 ], [ 2, %8 ]
%23 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %22, i32 %17)
br i1 %5, label %73, label %24
24: ; preds = %21, %69
%25 = phi i64 [ %71, %69 ], [ 1, %21 ]
%26 = phi i32 [ %70, %69 ], [ 0, %21 ]
%27 = trunc i64 %25 to i32
%28 = urem i32 %27, 10
%29 = icmp eq i32 %28, 0
%30 = select i1 %29, i1 true, i1 %11
%31 = select i1 %29, i32 124, i32 32
%32 = and i32 %27, 1
%33 = icmp eq i32 %32, 0
%34 = select i1 %33, i32 124, i32 45
%35 = select i1 %30, i32 %31, i32 %34
%36 = getelementptr inbounds double, double* %0, i64 %25
%37 = load double, double* %36
%38 = add nsw i64 %25, -1
%39 = getelementptr inbounds double, double* %0, i64 %38
%40 = load double, double* %39
%41 = fcmp ogt double %37, %40
%42 = tail call double @llvm.fmuladd.f64(double %40, double 1.000000e+01, double 5.000000e-01)
%43 = tail call i32 @floor(double %42)
%44 = load double, double* %36
%45 = tail call double @llvm.fmuladd.f64(double %44, double 1.000000e+01, double 5.000000e-01)
%46 = tail call i32 @floor(double %45)
%47 = select i1 %41, i32 %46, i32 %43
%48 = select i1 %41, i32 %43, i32 %46
%49 = icmp sgt i32 %7, %48
%50 = icmp slt i32 %7, %47
%51 = select i1 %49, i1 %50, i1 false
%52 = icmp eq i32 %7, %48
%53 = icmp eq i32 %7, %47
%54 = select i1 %52, i1 true, i1 %53
%55 = select i1 %54, i1 true, i1 %51
%56 = select i1 %55, i32 42, i32 %10
%57 = icmp eq i32 %7, %46
%58 = select i1 %57, i32 42, i32 %35
%59 = icmp eq i32 %56, 32
%60 = add nsw i32 %26, 1
br i1 %59, label %63, label %61
61: ; preds = %24
%62 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %60, i32 %56)
br label %63
63: ; preds = %24, %61
%64 = phi i32 [ 0, %61 ], [ %60, %24 ]
%65 = icmp eq i32 %58, 32
%66 = add nsw i32 %64, 1
br i1 %65, label %69, label %67
67: ; preds = %63
%68 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %66, i32 %58)
br label %69
69: ; preds = %63, %67
%70 = phi i32 [ 0, %67 ], [ %66, %63 ]
%71 = add nuw nsw i64 %25, 1
%72 = icmp eq i64 %71, %4
br i1 %72, label %73, label %24
73: ; preds = %69, %21, %6
%74 = tail call i32 @putchar(i8 signext 10)
%75 = add nsw i32 %7, -1
%76 = icmp sgt i32 %7, -12
br i1 %76, label %6, label %77
77: ; preds = %73
ret void
}