#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 */
unsigned short UCHAR_MAX;
int ffu2fi1(unsigned short *input, long ntodo, double scale, double zero,
            unsigned char *output, int *status) {
  long ii;
  double dvalue;
  if (scale == 1. && zero == 0.) {
    for (ii = 0; ii < ntodo; ii++) {
      if (input[ii] > UCHAR_MAX) {
        *status = -11;
        output[ii] = UCHAR_MAX;
      } else
        output[ii] = (unsigned char)input[ii];
    }
  } else {
    for (ii = 0; ii < ntodo; ii++) {
      dvalue = ((double)input[ii] - zero) / scale;
      if (dvalue < -0.49) {
        *status = -11;
        output[ii] = 0;
      } else if (dvalue > 255.49) {
        *status = -11;
        output[ii] = UCHAR_MAX;
      } else
        output[ii] = (unsigned char)(dvalue + .5);
    }
  }
  return (*status);
}


x86 assembly (clang, -O0):
<ffu2fi1>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xed5(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    11e1 <ffu2fi1+0xe1>
jp     11e1 <ffu2fi1+0xe1>
movsd  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11e1 <ffu2fi1+0xe1>
jp     11e1 <ffu2fi1+0xe1>
movq   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    11dc <ffu2fi1+0xdc>
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
mov    0x2e74(%rip),%rcx
movzwl (%rcx),%ecx
cmp    %ecx,%eax
jle    11ad <ffu2fi1+0xad>
mov    -0x30(%rbp),%rax
movl   $0xfffffff5,(%rax)
mov    0x2e58(%rip),%rax
mov    (%rax),%ax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    11c6 <ffu2fi1+0xc6>
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,2),%ax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    11cb <ffu2fi1+0xcb>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    115b <ffu2fi1+0x5b>
jmp    12c3 <ffu2fi1+0x1c3>
movq   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    12be <ffu2fi1+0x1be>
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
cvtsi2sd %eax,%xmm0
subsd  -0x20(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xdea(%rip),%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    1244 <ffu2fi1+0x144>
mov    -0x30(%rbp),%rax
movl   $0xfffffff5,(%rax)
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    12a8 <ffu2fi1+0x1a8>
movsd  -0x40(%rbp),%xmm0
movsd  0xdbf(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1281 <ffu2fi1+0x181>
mov    -0x30(%rbp),%rax
movl   $0xfffffff5,(%rax)
mov    0x2d84(%rip),%rax
mov    (%rax),%ax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    12a3 <ffu2fi1+0x1a3>
movsd  -0x40(%rbp),%xmm0
movsd  0xd8a(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    12a8 <ffu2fi1+0x1a8>
jmp    12ad <ffu2fi1+0x1ad>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    11e9 <ffu2fi1+0xe9>
jmp    12c3 <ffu2fi1+0x1c3>
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<ffu2fi1>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
ucomisd 0xeee(%rip),%xmm0
jne    113d <ffu2fi1+0x3d>
jp     113d <ffu2fi1+0x3d>
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm1
jne    113d <ffu2fi1+0x3d>
jp     113d <ffu2fi1+0x3d>
test   %rsi,%rsi
jle    1334 <ffu2fi1+0x234>
cmp    $0x4,%rsi
jae    11ca <ffu2fi1+0xca>
xor    %r8d,%r8d
jmp    12ff <ffu2fi1+0x1ff>
test   %rsi,%rsi
jle    1334 <ffu2fi1+0x234>
xor    %eax,%eax
movsd  0xeb8(%rip),%xmm2
movsd  0xeb8(%rip),%xmm3
mov    0x2e91(%rip),%r8
movsd  0xeb1(%rip),%xmm4
jmp    1189 <ffu2fi1+0x89>
nopl   0x0(%rax)
movl   $0xfffffff5,(%rcx)
xor    %ebp,%ebp
mov    %bpl,(%rdx,%rax,1)
add    $0x1,%rax
cmp    %rax,%rsi
je     1334 <ffu2fi1+0x234>
movzwl (%rdi,%rax,2),%ebp
xorps  %xmm5,%xmm5
cvtsi2sd %ebp,%xmm5
subsd  %xmm1,%xmm5
divsd  %xmm0,%xmm5
ucomisd %xmm5,%xmm2
ja     1170 <ffu2fi1+0x70>
ucomisd %xmm3,%xmm5
jbe    11c0 <ffu2fi1+0xc0>
movl   $0xfffffff5,(%rcx)
movzbl (%r8),%ebp
jmp    1178 <ffu2fi1+0x78>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
addsd  %xmm4,%xmm5
cvttsd2si %xmm5,%ebp
jmp    1178 <ffu2fi1+0x78>
lea    (%rdx,%rsi,1),%rbp
cmp    %rcx,%rbp
seta   -0x19(%rsp)
lea    0x4(%rcx),%rbx
cmp    %rdx,%rbx
seta   %r12b
lea    (%rdi,%rsi,2),%r8
cmp    %rcx,%r8
seta   %r10b
cmp    %rdi,%rbx
seta   %r13b
mov    0x2df6(%rip),%r15
lea    0x2(%r15),%rax
cmp    %rax,%rcx
setb   %r9b
cmp    %r15,%rbx
seta   %r14b
cmp    %rdx,%r8
seta   %r11b
cmp    %rdi,%rbp
seta   -0x1a(%rsp)
cmp    %rax,%rdx
setb   %bl
cmp    %r15,%rbp
seta   %bpl
xor    %r8d,%r8d
test   %r12b,-0x19(%rsp)
jne    12ff <ffu2fi1+0x1ff>
and    %r13b,%r10b
jne    12ff <ffu2fi1+0x1ff>
and    %r14b,%r9b
jne    12ff <ffu2fi1+0x1ff>
and    -0x1a(%rsp),%r11b
jne    12ff <ffu2fi1+0x1ff>
and    %bpl,%bl
jne    12ff <ffu2fi1+0x1ff>
mov    %rsi,%r8
and    $0xfffffffffffffffc,%r8
movzwl (%r15),%eax
movd   %eax,%xmm0
pshuflw $0x0,%xmm0,%xmm0
xor    %eax,%eax
movdqa 0xda6(%rip),%xmm1
movdqa %xmm0,%xmm2
pxor   %xmm1,%xmm2
movdqa 0xda6(%rip),%xmm3
jmp    12b8 <ffu2fi1+0x1b8>
nopl   0x0(%rax)
movl   $0xfffffff5,(%rcx)
movdqa %xmm4,%xmm5
psubusw %xmm0,%xmm5
psubw  %xmm5,%xmm4
pand   %xmm3,%xmm4
packuswb %xmm4,%xmm4
movd   %xmm4,(%rdx,%rax,1)
add    $0x4,%rax
cmp    %rax,%r8
je     12fa <ffu2fi1+0x1fa>
movq   (%rdi,%rax,2),%xmm4
movdqa %xmm4,%xmm5
pxor   %xmm1,%xmm5
pcmpgtw %xmm2,%xmm5
punpcklwd %xmm5,%xmm5
psrad  $0x10,%xmm5
pshufd $0xd4,%xmm5,%xmm6
psllq  $0x3f,%xmm6
movmskpd %xmm6,%ebp
movdqa %xmm5,-0x18(%rsp)
test   %ebp,%ebp
jne    1290 <ffu2fi1+0x190>
testb  $0x1,-0x10(%rsp)
jne    1290 <ffu2fi1+0x190>
testb  $0x1,-0xc(%rsp)
je     1296 <ffu2fi1+0x196>
jmp    1290 <ffu2fi1+0x190>
cmp    %rsi,%r8
je     1334 <ffu2fi1+0x234>
mov    %r8,%rax
not    %rax
test   $0x1,%sil
je     132f <ffu2fi1+0x22f>
movzwl (%rdi,%r8,2),%ebp
mov    0x2cd9(%rip),%rbx
movzwl (%rbx),%ebx
cmp    %bx,%bp
jbe    1327 <ffu2fi1+0x227>
movl   $0xfffffff5,(%rcx)
mov    %ebx,%ebp
mov    %bpl,(%rdx,%r8,1)
or     $0x1,%r8
add    %rsi,%rax
jne    1341 <ffu2fi1+0x241>
mov    (%rcx),%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x2ca8(%rip),%rax
jmp    135e <ffu2fi1+0x25e>
nopw   0x0(%rax,%rax,1)
mov    %bpl,0x1(%rdx,%r8,1)
add    $0x2,%r8
cmp    %r8,%rsi
je     1334 <ffu2fi1+0x234>
movzwl (%rdi,%r8,2),%ebp
movzwl (%rax),%ebx
cmp    %bx,%bp
jbe    1373 <ffu2fi1+0x273>
movl   $0xfffffff5,(%rcx)
mov    %ebx,%ebp
mov    %bpl,(%rdx,%r8,1)
movzwl 0x2(%rdi,%r8,2),%ebp
movzwl (%rax),%ebx
cmp    %bx,%bp
jbe    1350 <ffu2fi1+0x250>
movl   $0xfffffff5,(%rcx)
mov    %ebx,%ebp
jmp    1350 <ffu2fi1+0x250>

LLVM IR (-O0):
@UCHAR_MAX = global i16 0
define i32 @ffu2fi1(i16* %0, i64 %1, double %2, double %3, i8* %4, i32* %5) {
%7 = alloca i16*
%8 = alloca i64
%9 = alloca double
%10 = alloca double
%11 = alloca i8*
%12 = alloca i32*
%13 = alloca i64
%14 = alloca double
store i16* %0, i16** %7
store i64 %1, i64* %8
store double %2, double* %9
store double %3, double* %10
store i8* %4, i8** %11
store i32* %5, i32** %12
%15 = load double, double* %9
%16 = fcmp oeq double %15, 1.000000e+00
br i1 %16, label %17, label %55
17: ; preds = %6
%18 = load double, double* %10
%19 = fcmp oeq double %18, 0.000000e+00
br i1 %19, label %20, label %55
20: ; preds = %17
store i64 0, i64* %13
br label %21
21: ; preds = %51, %20
%22 = load i64, i64* %13
%23 = load i64, i64* %8
%24 = icmp slt i64 %22, %23
br i1 %24, label %25, label %54
25: ; preds = %21
%26 = load i16*, i16** %7
%27 = load i64, i64* %13
%28 = getelementptr inbounds i16, i16* %26, i64 %27
%29 = load i16, i16* %28
%30 = zext i16 %29 to i32
%31 = load i16, i16* @UCHAR_MAX
%32 = zext i16 %31 to i32
%33 = icmp sgt i32 %30, %32
br i1 %33, label %34, label %41
34: ; preds = %25
%35 = load i32*, i32** %12
store i32 -11, i32* %35
%36 = load i16, i16* @UCHAR_MAX
%37 = trunc i16 %36 to i8
%38 = load i8*, i8** %11
%39 = load i64, i64* %13
%40 = getelementptr inbounds i8, i8* %38, i64 %39
store i8 %37, i8* %40
br label %50
41: ; preds = %25
%42 = load i16*, i16** %7
%43 = load i64, i64* %13
%44 = getelementptr inbounds i16, i16* %42, i64 %43
%45 = load i16, i16* %44
%46 = trunc i16 %45 to i8
%47 = load i8*, i8** %11
%48 = load i64, i64* %13
%49 = getelementptr inbounds i8, i8* %47, i64 %48
store i8 %46, i8* %49
br label %50
50: ; preds = %41, %34
br label %51
51: ; preds = %50
%52 = load i64, i64* %13
%53 = add nsw i64 %52, 1
store i64 %53, i64* %13
br label %21
54: ; preds = %21
br label %100
55: ; preds = %17, %6
store i64 0, i64* %13
br label %56
56: ; preds = %96, %55
%57 = load i64, i64* %13
%58 = load i64, i64* %8
%59 = icmp slt i64 %57, %58
br i1 %59, label %60, label %99
60: ; preds = %56
%61 = load i16*, i16** %7
%62 = load i64, i64* %13
%63 = getelementptr inbounds i16, i16* %61, i64 %62
%64 = load i16, i16* %63
%65 = uitofp i16 %64 to double
%66 = load double, double* %10
%67 = fsub double %65, %66
%68 = load double, double* %9
%69 = fdiv double %67, %68
store double %69, double* %14
%70 = load double, double* %14
%71 = fcmp olt double %70, -4.900000e-01
br i1 %71, label %72, label %77
72: ; preds = %60
%73 = load i32*, i32** %12
store i32 -11, i32* %73
%74 = load i8*, i8** %11
%75 = load i64, i64* %13
%76 = getelementptr inbounds i8, i8* %74, i64 %75
store i8 0, i8* %76
br label %95
77: ; preds = %60
%78 = load double, double* %14
%79 = fcmp ogt double %78, 2.554900e+02
br i1 %79, label %80, label %87
80: ; preds = %77
%81 = load i32*, i32** %12
store i32 -11, i32* %81
%82 = load i16, i16* @UCHAR_MAX
%83 = trunc i16 %82 to i8
%84 = load i8*, i8** %11
%85 = load i64, i64* %13
%86 = getelementptr inbounds i8, i8* %84, i64 %85
store i8 %83, i8* %86
br label %94
87: ; preds = %77
%88 = load double, double* %14
%89 = fadd double %88, 5.000000e-01
%90 = fptoui double %89 to i8
%91 = load i8*, i8** %11
%92 = load i64, i64* %13
%93 = getelementptr inbounds i8, i8* %91, i64 %92
store i8 %90, i8* %93
br label %94
94: ; preds = %87, %80
br label %95
95: ; preds = %94, %72
br label %96
96: ; preds = %95
%97 = load i64, i64* %13
%98 = add nsw i64 %97, 1
store i64 %98, i64* %13
br label %56
99: ; preds = %56
br label %100
100: ; preds = %99, %54
%101 = load i32*, i32** %12
%102 = load i32, i32* %101
ret i32 %102
}

LLVM IR (-O2):
@UCHAR_MAX = global i16 0
define i32 @ffu2fi1(i16* nocapture %0, i64 %1, double %2, double %3, i8* nocapture writeonly %4, i32* nocapture %5) {
%7 = bitcast i32* %5 to i8*
%8 = bitcast i16* %0 to i8*
%9 = fcmp oeq double %2, 1.000000e+00
%10 = fcmp oeq double %3, 0.000000e+00
%11 = and i1 %9, %10
%12 = icmp sgt i64 %1, 0
br i1 %11, label %14, label %13
13: ; preds = %6
br i1 %12, label %116, label %138
14: ; preds = %6
br i1 %12, label %15, label %138
15: ; preds = %14
%16 = icmp ult i64 %1, 4
br i1 %16, label %73, label %17
17: ; preds = %15
%18 = getelementptr i32, i32* %5, i64 1
%19 = bitcast i32* %18 to i8*
%20 = getelementptr i8, i8* %4, i64 %1
%21 = getelementptr i16, i16* %0, i64 %1
%22 = bitcast i16* %21 to i8*
%23 = icmp ugt i8* %20, %7
%24 = icmp ugt i8* %19, %4
%25 = and i1 %23, %24
%26 = bitcast i16* %21 to i32*
%27 = icmp ugt i32* %26, %5
%28 = bitcast i32* %18 to i16*
%29 = icmp ugt i16* %28, %0
%30 = and i1 %27, %29
%31 = or i1 %25, %30
%32 = icmp ult i32* %5, bitcast (i16* getelementptr inbounds (i16, i16* @UCHAR_MAX, i64 1) to i32*)
%33 = icmp ugt i32* %18, bitcast (i16* @UCHAR_MAX to i32*)
%34 = and i1 %32, %33
%35 = or i1 %31, %34
%36 = icmp ugt i8* %22, %4
%37 = icmp ugt i8* %20, %8
%38 = and i1 %36, %37
%39 = or i1 %35, %38
%40 = icmp ult i8* %4, bitcast (i16* getelementptr inbounds (i16, i16* @UCHAR_MAX, i64 1) to i8*)
%41 = icmp ugt i8* %20, bitcast (i16* @UCHAR_MAX to i8*)
%42 = and i1 %40, %41
%43 = or i1 %39, %42
br i1 %43, label %73, label %44
44: ; preds = %17
%45 = and i64 %1, -4
%46 = load i16, i16* @UCHAR_MAX
%47 = insertelement <4 x i16> poison, i16 %46, i64 0
%48 = shufflevector <4 x i16> %47, <4 x i16> poison, <4 x i32> zeroinitializer
br label %49
49: ; preds = %64, %44
%50 = phi i64 [ 0, %44 ], [ %69, %64 ]
%51 = getelementptr inbounds i16, i16* %0, i64 %50
%52 = bitcast i16* %51 to <4 x i16>*
%53 = load <4 x i16>, <4 x i16>* %52
%54 = icmp ugt <4 x i16> %53, %48
%55 = shufflevector <4 x i1> %54, <4 x i1> undef, <2 x i32> <i32 0, i32 undef>
%56 = shufflevector <4 x i1> %54, <4 x i1> undef, <2 x i32> <i32 1, i32 undef>
%57 = or <2 x i1> %55, %56
%58 = extractelement <2 x i1> %57, i64 0
%59 = extractelement <4 x i1> %54, i64 2
%60 = or i1 %58, %59
%61 = extractelement <4 x i1> %54, i64 3
%62 = or i1 %60, %61
br i1 %62, label %63, label %64
63: ; preds = %49
store i32 -11, i32* %5
br label %64
64: ; preds = %49, %63
%65 = select <4 x i1> %54, <4 x i16> %48, <4 x i16> %53
%66 = trunc <4 x i16> %65 to <4 x i8>
%67 = getelementptr inbounds i8, i8* %4, i64 %50
%68 = bitcast i8* %67 to <4 x i8>*
store <4 x i8> %66, <4 x i8>* %68
%69 = add nuw i64 %50, 4
%70 = icmp eq i64 %69, %45
br i1 %70, label %71, label %49
71: ; preds = %64
%72 = icmp eq i64 %45, %1
br i1 %72, label %138, label %73
73: ; preds = %17, %15, %71
%74 = phi i64 [ 0, %17 ], [ 0, %15 ], [ %45, %71 ]
%75 = xor i64 %74, -1
%76 = and i64 %1, 1
%77 = icmp eq i64 %76, 0
br i1 %77, label %89, label %78
78: ; preds = %73
%79 = getelementptr inbounds i16, i16* %0, i64 %74
%80 = load i16, i16* %79
%81 = load i16, i16* @UCHAR_MAX
%82 = icmp ugt i16 %80, %81
br i1 %82, label %83, label %84
83: ; preds = %78
store i32 -11, i32* %5
br label %84
84: ; preds = %83, %78
%85 = phi i16 [ %81, %83 ], [ %80, %78 ]
%86 = trunc i16 %85 to i8
%87 = getelementptr inbounds i8, i8* %4, i64 %74
store i8 %86, i8* %87
%88 = or i64 %74, 1
br label %89
89: ; preds = %84, %73
%90 = phi i64 [ %74, %73 ], [ %88, %84 ]
%91 = sub i64 0, %1
%92 = icmp eq i64 %75, %91
br i1 %92, label %138, label %93
93: ; preds = %89, %110
%94 = phi i64 [ %114, %110 ], [ %90, %89 ]
%95 = getelementptr inbounds i16, i16* %0, i64 %94
%96 = load i16, i16* %95
%97 = load i16, i16* @UCHAR_MAX
%98 = icmp ugt i16 %96, %97
br i1 %98, label %99, label %100
99: ; preds = %93
store i32 -11, i32* %5
br label %100
100: ; preds = %93, %99
%101 = phi i16 [ %97, %99 ], [ %96, %93 ]
%102 = trunc i16 %101 to i8
%103 = getelementptr inbounds i8, i8* %4, i64 %94
store i8 %102, i8* %103
%104 = add nuw nsw i64 %94, 1
%105 = getelementptr inbounds i16, i16* %0, i64 %104
%106 = load i16, i16* %105
%107 = load i16, i16* @UCHAR_MAX
%108 = icmp ugt i16 %106, %107
br i1 %108, label %109, label %110
109: ; preds = %100
store i32 -11, i32* %5
br label %110
110: ; preds = %109, %100
%111 = phi i16 [ %107, %109 ], [ %106, %100 ]
%112 = trunc i16 %111 to i8
%113 = getelementptr inbounds i8, i8* %4, i64 %104
store i8 %112, i8* %113
%114 = add nuw nsw i64 %94, 2
%115 = icmp eq i64 %114, %1
br i1 %115, label %138, label %93
116: ; preds = %13, %133
%117 = phi i64 [ %136, %133 ], [ 0, %13 ]
%118 = getelementptr inbounds i16, i16* %0, i64 %117
%119 = load i16, i16* %118
%120 = uitofp i16 %119 to double
%121 = fsub double %120, %3
%122 = fdiv double %121, %2
%123 = fcmp olt double %122, -4.900000e-01
br i1 %123, label %124, label %125
124: ; preds = %116
store i32 -11, i32* %5
br label %133
125: ; preds = %116
%126 = fcmp ogt double %122, 2.554900e+02
br i1 %126, label %127, label %130
127: ; preds = %125
store i32 -11, i32* %5
%128 = load i16, i16* @UCHAR_MAX
%129 = trunc i16 %128 to i8
br label %133
130: ; preds = %125
%131 = fadd double %122, 5.000000e-01
%132 = fptoui double %131 to i8
br label %133
133: ; preds = %124, %130, %127
%134 = phi i8 [ 0, %124 ], [ %132, %130 ], [ %129, %127 ]
%135 = getelementptr inbounds i8, i8* %4, i64 %117
store i8 %134, i8* %135
%136 = add nuw nsw i64 %117, 1
%137 = icmp eq i64 %136, %1
br i1 %137, label %138, label %116
138: ; preds = %133, %89, %110, %71, %13, %14
%139 = load i32, i32* %5
ret i32 %139
}