void yuv2rgb(unsigned char **red, unsigned char **green, unsigned char **blue,
             unsigned char **Y, unsigned char **U, unsigned char **V,
             int height, int width) {
  int i, j;
  int value;
  for (i = 0; i < height; ++i) {
    for (j = 0; j < width; ++j) {
      value = Y[i][j] + (V[i][j] - 128) * 1.4021;
      if (value > 255)
        red[i][j] = 255;
      else if (value < 0)
        red[i][j] = 0;
      else
        red[i][j] = (unsigned char)value;
      value =
          Y[i][j] + (U[i][j] - 128) * (-0.34414) + (V[i][j] - 128) * (-0.71414);
      if (value > 255)
        green[i][j] = 255;
      else if (value < 0)
        green[i][j] = 0;
      else
        green[i][j] = (unsigned char)value;
      value = Y[i][j] + (U[i][j] - 128) * 1.77180;
      if (value > 255)
        blue[i][j] = 255;
      else if (value < 0)
        blue[i][j] = 0;
      else
        blue[i][j] = (unsigned char)value;
    }
  }
}


x86 assembly (clang, -O0):
<yuv2rgb>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    13b1 <yuv2rgb+0x2b1>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    139e <yuv2rgb+0x29e>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cvtsi2sd %eax,%xmm1
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sub    $0x80,%eax
cvtsi2sd %eax,%xmm0
movsd  0xe7b(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0xff,-0x3c(%rbp)
jle    11ba <yuv2rgb+0xba>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movb   $0xff,(%rax,%rcx,1)
jmp    11fa <yuv2rgb+0xfa>
cmpl   $0x0,-0x3c(%rbp)
jge    11dd <yuv2rgb+0xdd>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    11f5 <yuv2rgb+0xf5>
mov    -0x3c(%rbp),%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    11fa <yuv2rgb+0xfa>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cvtsi2sd %eax,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sub    $0x80,%eax
cvtsi2sd %eax,%xmm1
movsd  0xdd9(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sub    $0x80,%eax
cvtsi2sd %eax,%xmm0
movsd  0xda4(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0xff,-0x3c(%rbp)
jle    1299 <yuv2rgb+0x199>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movb   $0xff,(%rax,%rcx,1)
jmp    12d9 <yuv2rgb+0x1d9>
cmpl   $0x0,-0x3c(%rbp)
jge    12bc <yuv2rgb+0x1bc>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    12d4 <yuv2rgb+0x1d4>
mov    -0x3c(%rbp),%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    12d9 <yuv2rgb+0x1d9>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cvtsi2sd %eax,%xmm1
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sub    $0x80,%eax
cvtsi2sd %eax,%xmm0
movsd  0xd02(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0xff,-0x3c(%rbp)
jle    134b <yuv2rgb+0x24b>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movb   $0xff,(%rax,%rcx,1)
jmp    138b <yuv2rgb+0x28b>
cmpl   $0x0,-0x3c(%rbp)
jge    136e <yuv2rgb+0x26e>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1386 <yuv2rgb+0x286>
mov    -0x3c(%rbp),%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    138b <yuv2rgb+0x28b>
jmp    1390 <yuv2rgb+0x290>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    113c <yuv2rgb+0x3c>
jmp    13a3 <yuv2rgb+0x2a3>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1129 <yuv2rgb+0x29>
pop    %rbp
ret

x86 assembly (clang, -O2):
<yuv2rgb>:
push   %rbp
push   %r15
push   %r14
push   %rbx
mov    0x28(%rsp),%eax
test   %eax,%eax
jle    1276 <yuv2rgb+0x176>
mov    0x30(%rsp),%r10d
mov    %eax,%r11d
mov    %r10d,%r14d
xor    %r15d,%r15d
movsd  0xed8(%rip),%xmm0
movsd  0xed8(%rip),%xmm1
movsd  0xed8(%rip),%xmm2
movsd  0xed8(%rip),%xmm3
jmp    115d <yuv2rgb+0x5d>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%r15
cmp    %r11,%r15
je     1276 <yuv2rgb+0x176>
test   %r10d,%r10d
jle    1150 <yuv2rgb+0x50>
xor    %eax,%eax
jmp    1181 <yuv2rgb+0x81>
cs nopw 0x0(%rax,%rax,1)
mov    (%rdx,%r15,8),%rbx
mov    %bpl,(%rbx,%rax,1)
add    $0x1,%rax
cmp    %rax,%r14
je     1150 <yuv2rgb+0x50>
mov    (%rcx,%r15,8),%rbp
movzbl 0x0(%rbp,%rax,1),%ebp
xorps  %xmm4,%xmm4
cvtsi2sd %ebp,%xmm4
mov    (%r9,%r15,8),%rbp
movzbl 0x0(%rbp,%rax,1),%ebp
add    $0xffffff80,%ebp
xorps  %xmm5,%xmm5
cvtsi2sd %ebp,%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm4,%xmm5
cvttsd2si %xmm5,%ebp
test   %ebp,%ebp
jns    11b6 <yuv2rgb+0xb6>
xor    %ebp,%ebp
cmp    $0xff,%ebp
jl     11c3 <yuv2rgb+0xc3>
mov    $0xff,%ebp
mov    (%rdi,%r15,8),%rbx
mov    %bpl,(%rbx,%rax,1)
mov    (%rcx,%r15,8),%rbx
movzbl (%rbx,%rax,1),%ebx
xorps  %xmm4,%xmm4
cvtsi2sd %ebx,%xmm4
mov    (%r8,%r15,8),%rbx
movzbl (%rbx,%rax,1),%ebx
add    $0xffffff80,%ebx
xorps  %xmm5,%xmm5
cvtsi2sd %ebx,%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
mov    (%r9,%r15,8),%rbx
movzbl (%rbx,%rax,1),%ebx
add    $0xffffff80,%ebx
xorps  %xmm4,%xmm4
cvtsi2sd %ebx,%xmm4
mulsd  %xmm2,%xmm4
addsd  %xmm5,%xmm4
cvttsd2si %xmm4,%ebp
test   %ebp,%ebp
jns    1218 <yuv2rgb+0x118>
xor    %ebp,%ebp
cmp    $0xff,%ebp
jl     1225 <yuv2rgb+0x125>
mov    $0xff,%ebp
mov    (%rsi,%r15,8),%rbx
mov    %bpl,(%rbx,%rax,1)
mov    (%rcx,%r15,8),%rbx
movzbl (%rbx,%rax,1),%ebx
xorps  %xmm4,%xmm4
cvtsi2sd %ebx,%xmm4
mov    (%r8,%r15,8),%rbx
movzbl (%rbx,%rax,1),%ebx
add    $0xffffff80,%ebx
xorps  %xmm5,%xmm5
cvtsi2sd %ebx,%xmm5
mulsd  %xmm3,%xmm5
addsd  %xmm4,%xmm5
cvttsd2si %xmm5,%ebp
test   %ebp,%ebp
jns    1260 <yuv2rgb+0x160>
xor    %ebp,%ebp
cmp    $0xff,%ebp
jl     1170 <yuv2rgb+0x70>
mov    $0xff,%ebp
jmp    1170 <yuv2rgb+0x70>
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @yuv2rgb(i8** %0, i8** %1, i8** %2, i8** %3, i8** %4, i8** %5, i32 %6, i32 %7) {
%9 = alloca i8**
%10 = alloca i8**
%11 = alloca i8**
%12 = alloca i8**
%13 = alloca i8**
%14 = alloca i8**
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
store i8** %0, i8*** %9
store i8** %1, i8*** %10
store i8** %2, i8*** %11
store i8** %3, i8*** %12
store i8** %4, i8*** %13
store i8** %5, i8*** %14
store i32 %6, i32* %15
store i32 %7, i32* %16
store i32 0, i32* %17
br label %20
20: ; preds = %230, %8
%21 = load i32, i32* %17
%22 = load i32, i32* %15
%23 = icmp slt i32 %21, %22
br i1 %23, label %24, label %233
24: ; preds = %20
store i32 0, i32* %18
br label %25
25: ; preds = %226, %24
%26 = load i32, i32* %18
%27 = load i32, i32* %16
%28 = icmp slt i32 %26, %27
br i1 %28, label %29, label %229
29: ; preds = %25
%30 = load i8**, i8*** %12
%31 = load i32, i32* %17
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds i8*, i8** %30, i64 %32
%34 = load i8*, i8** %33
%35 = load i32, i32* %18
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds i8, i8* %34, i64 %36
%38 = load i8, i8* %37
%39 = zext i8 %38 to i32
%40 = sitofp i32 %39 to double
%41 = load i8**, i8*** %14
%42 = load i32, i32* %17
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i8*, i8** %41, i64 %43
%45 = load i8*, i8** %44
%46 = load i32, i32* %18
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %45, i64 %47
%49 = load i8, i8* %48
%50 = zext i8 %49 to i32
%51 = sub nsw i32 %50, 128
%52 = sitofp i32 %51 to double
%53 = call double @llvm.fmuladd.f64(double %52, double 1.402100e+00, double %40)
%54 = fptosi double %53 to i32
store i32 %54, i32* %19
%55 = load i32, i32* %19
%56 = icmp sgt i32 %55, 255
br i1 %56, label %57, label %66
57: ; preds = %29
%58 = load i8**, i8*** %9
%59 = load i32, i32* %17
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds i8*, i8** %58, i64 %60
%62 = load i8*, i8** %61
%63 = load i32, i32* %18
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds i8, i8* %62, i64 %64
store i8 -1, i8* %65
br label %90
66: ; preds = %29
%67 = load i32, i32* %19
%68 = icmp slt i32 %67, 0
br i1 %68, label %69, label %78
69: ; preds = %66
%70 = load i8**, i8*** %9
%71 = load i32, i32* %17
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds i8*, i8** %70, i64 %72
%74 = load i8*, i8** %73
%75 = load i32, i32* %18
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds i8, i8* %74, i64 %76
store i8 0, i8* %77
br label %89
78: ; preds = %66
%79 = load i32, i32* %19
%80 = trunc i32 %79 to i8
%81 = load i8**, i8*** %9
%82 = load i32, i32* %17
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds i8*, i8** %81, i64 %83
%85 = load i8*, i8** %84
%86 = load i32, i32* %18
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds i8, i8* %85, i64 %87
store i8 %80, i8* %88
br label %89
89: ; preds = %78, %69
br label %90
90: ; preds = %89, %57
%91 = load i8**, i8*** %12
%92 = load i32, i32* %17
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i8*, i8** %91, i64 %93
%95 = load i8*, i8** %94
%96 = load i32, i32* %18
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds i8, i8* %95, i64 %97
%99 = load i8, i8* %98
%100 = zext i8 %99 to i32
%101 = sitofp i32 %100 to double
%102 = load i8**, i8*** %13
%103 = load i32, i32* %17
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds i8*, i8** %102, i64 %104
%106 = load i8*, i8** %105
%107 = load i32, i32* %18
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds i8, i8* %106, i64 %108
%110 = load i8, i8* %109
%111 = zext i8 %110 to i32
%112 = sub nsw i32 %111, 128
%113 = sitofp i32 %112 to double
%114 = call double @llvm.fmuladd.f64(double %113, double -3.441400e-01, double %101)
%115 = load i8**, i8*** %14
%116 = load i32, i32* %17
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds i8*, i8** %115, i64 %117
%119 = load i8*, i8** %118
%120 = load i32, i32* %18
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds i8, i8* %119, i64 %121
%123 = load i8, i8* %122
%124 = zext i8 %123 to i32
%125 = sub nsw i32 %124, 128
%126 = sitofp i32 %125 to double
%127 = call double @llvm.fmuladd.f64(double %126, double -7.141400e-01, double %114)
%128 = fptosi double %127 to i32
store i32 %128, i32* %19
%129 = load i32, i32* %19
%130 = icmp sgt i32 %129, 255
br i1 %130, label %131, label %140
131: ; preds = %90
%132 = load i8**, i8*** %10
%133 = load i32, i32* %17
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds i8*, i8** %132, i64 %134
%136 = load i8*, i8** %135
%137 = load i32, i32* %18
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds i8, i8* %136, i64 %138
store i8 -1, i8* %139
br label %164
140: ; preds = %90
%141 = load i32, i32* %19
%142 = icmp slt i32 %141, 0
br i1 %142, label %143, label %152
143: ; preds = %140
%144 = load i8**, i8*** %10
%145 = load i32, i32* %17
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds i8*, i8** %144, i64 %146
%148 = load i8*, i8** %147
%149 = load i32, i32* %18
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds i8, i8* %148, i64 %150
store i8 0, i8* %151
br label %163
152: ; preds = %140
%153 = load i32, i32* %19
%154 = trunc i32 %153 to i8
%155 = load i8**, i8*** %10
%156 = load i32, i32* %17
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds i8*, i8** %155, i64 %157
%159 = load i8*, i8** %158
%160 = load i32, i32* %18
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds i8, i8* %159, i64 %161
store i8 %154, i8* %162
br label %163
163: ; preds = %152, %143
br label %164
164: ; preds = %163, %131
%165 = load i8**, i8*** %12
%166 = load i32, i32* %17
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds i8*, i8** %165, i64 %167
%169 = load i8*, i8** %168
%170 = load i32, i32* %18
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds i8, i8* %169, i64 %171
%173 = load i8, i8* %172
%174 = zext i8 %173 to i32
%175 = sitofp i32 %174 to double
%176 = load i8**, i8*** %13
%177 = load i32, i32* %17
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds i8*, i8** %176, i64 %178
%180 = load i8*, i8** %179
%181 = load i32, i32* %18
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i8, i8* %180, i64 %182
%184 = load i8, i8* %183
%185 = zext i8 %184 to i32
%186 = sub nsw i32 %185, 128
%187 = sitofp i32 %186 to double
%188 = call double @llvm.fmuladd.f64(double %187, double 1.771800e+00, double %175)
%189 = fptosi double %188 to i32
store i32 %189, i32* %19
%190 = load i32, i32* %19
%191 = icmp sgt i32 %190, 255
br i1 %191, label %192, label %201
192: ; preds = %164
%193 = load i8**, i8*** %11
%194 = load i32, i32* %17
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds i8*, i8** %193, i64 %195
%197 = load i8*, i8** %196
%198 = load i32, i32* %18
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds i8, i8* %197, i64 %199
store i8 -1, i8* %200
br label %225
201: ; preds = %164
%202 = load i32, i32* %19
%203 = icmp slt i32 %202, 0
br i1 %203, label %204, label %213
204: ; preds = %201
%205 = load i8**, i8*** %11
%206 = load i32, i32* %17
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds i8*, i8** %205, i64 %207
%209 = load i8*, i8** %208
%210 = load i32, i32* %18
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds i8, i8* %209, i64 %211
store i8 0, i8* %212
br label %224
213: ; preds = %201
%214 = load i32, i32* %19
%215 = trunc i32 %214 to i8
%216 = load i8**, i8*** %11
%217 = load i32, i32* %17
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds i8*, i8** %216, i64 %218
%220 = load i8*, i8** %219
%221 = load i32, i32* %18
%222 = sext i32 %221 to i64
%223 = getelementptr inbounds i8, i8* %220, i64 %222
store i8 %215, i8* %223
br label %224
224: ; preds = %213, %204
br label %225
225: ; preds = %224, %192
br label %226
226: ; preds = %225
%227 = load i32, i32* %18
%228 = add nsw i32 %227, 1
store i32 %228, i32* %18
br label %25
229: ; preds = %25
br label %230
230: ; preds = %229
%231 = load i32, i32* %17
%232 = add nsw i32 %231, 1
store i32 %232, i32* %17
br label %20
233: ; preds = %20
ret void
}

LLVM IR (-O2):
define void @yuv2rgb(i8** nocapture %0, i8** nocapture %1, i8** nocapture %2, i8** nocapture %3, i8** nocapture %4, i8** nocapture %5, i32 %6, i32 %7) {
%9 = icmp sgt i32 %6, 0
br i1 %9, label %10, label %94
10: ; preds = %8
%11 = icmp sgt i32 %7, 0
%12 = zext i32 %6 to i64
%13 = zext i32 %7 to i64
br label %14
14: ; preds = %10, %91
%15 = phi i64 [ 0, %10 ], [ %92, %91 ]
br i1 %11, label %16, label %91
16: ; preds = %14
%17 = getelementptr inbounds i8*, i8** %3, i64 %15
%18 = getelementptr inbounds i8*, i8** %5, i64 %15
%19 = getelementptr inbounds i8*, i8** %0, i64 %15
%20 = getelementptr inbounds i8*, i8** %4, i64 %15
%21 = getelementptr inbounds i8*, i8** %1, i64 %15
%22 = getelementptr inbounds i8*, i8** %2, i64 %15
br label %23
23: ; preds = %16, %23
%24 = phi i64 [ 0, %16 ], [ %89, %23 ]
%25 = load i8*, i8** %17
%26 = getelementptr inbounds i8, i8* %25, i64 %24
%27 = load i8, i8* %26
%28 = uitofp i8 %27 to double
%29 = load i8*, i8** %18
%30 = getelementptr inbounds i8, i8* %29, i64 %24
%31 = load i8, i8* %30
%32 = zext i8 %31 to i32
%33 = add nsw i32 %32, -128
%34 = sitofp i32 %33 to double
%35 = tail call double @llvm.fmuladd.f64(double %34, double 1.402100e+00, double %28)
%36 = fptosi double %35 to i32
%37 = icmp sgt i32 %36, 0
%38 = select i1 %37, i32 %36, i32 0
%39 = icmp slt i32 %38, 255
%40 = select i1 %39, i32 %38, i32 255
%41 = trunc i32 %40 to i8
%42 = load i8*, i8** %19
%43 = getelementptr inbounds i8, i8* %42, i64 %24
store i8 %41, i8* %43
%44 = load i8*, i8** %17
%45 = getelementptr inbounds i8, i8* %44, i64 %24
%46 = load i8, i8* %45
%47 = uitofp i8 %46 to double
%48 = load i8*, i8** %20
%49 = getelementptr inbounds i8, i8* %48, i64 %24
%50 = load i8, i8* %49
%51 = zext i8 %50 to i32
%52 = add nsw i32 %51, -128
%53 = sitofp i32 %52 to double
%54 = tail call double @llvm.fmuladd.f64(double %53, double -3.441400e-01, double %47)
%55 = load i8*, i8** %18
%56 = getelementptr inbounds i8, i8* %55, i64 %24
%57 = load i8, i8* %56
%58 = zext i8 %57 to i32
%59 = add nsw i32 %58, -128
%60 = sitofp i32 %59 to double
%61 = tail call double @llvm.fmuladd.f64(double %60, double -7.141400e-01, double %54)
%62 = fptosi double %61 to i32
%63 = icmp sgt i32 %62, 0
%64 = select i1 %63, i32 %62, i32 0
%65 = icmp slt i32 %64, 255
%66 = select i1 %65, i32 %64, i32 255
%67 = trunc i32 %66 to i8
%68 = load i8*, i8** %21
%69 = getelementptr inbounds i8, i8* %68, i64 %24
store i8 %67, i8* %69
%70 = load i8*, i8** %17
%71 = getelementptr inbounds i8, i8* %70, i64 %24
%72 = load i8, i8* %71
%73 = uitofp i8 %72 to double
%74 = load i8*, i8** %20
%75 = getelementptr inbounds i8, i8* %74, i64 %24
%76 = load i8, i8* %75
%77 = zext i8 %76 to i32
%78 = add nsw i32 %77, -128
%79 = sitofp i32 %78 to double
%80 = tail call double @llvm.fmuladd.f64(double %79, double 1.771800e+00, double %73)
%81 = fptosi double %80 to i32
%82 = icmp sgt i32 %81, 0
%83 = select i1 %82, i32 %81, i32 0
%84 = icmp slt i32 %83, 255
%85 = select i1 %84, i32 %83, i32 255
%86 = trunc i32 %85 to i8
%87 = load i8*, i8** %22
%88 = getelementptr inbounds i8, i8* %87, i64 %24
store i8 %86, i8* %88
%89 = add nuw nsw i64 %24, 1
%90 = icmp eq i64 %89, %13
br i1 %90, label %91, label %23
91: ; preds = %23, %14
%92 = add nuw nsw i64 %15, 1
%93 = icmp eq i64 %92, %12
br i1 %93, label %94, label %14
94: ; preds = %91, %8
ret void
}