void setContrast(unsigned char *data, int value, int imageSize) {
  int i;
  for (i = 0; i < imageSize; i++) {
    int factor = (259 * (value + 255)) / (255 * (259 - value));
    int color = factor * (data[i] - 128) + 128;
    if (color > 255) {
      data[i] = 255;
    } else if (color < 0) {
      data[i] = 0;
    } else {
      data[i] = color;
    }
  }
}


x86 assembly (clang, -O0):
<setContrast>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    11c4 <setContrast+0xc4>
mov    -0xc(%rbp),%eax
add    $0xff,%eax
imul   $0x103,%eax,%eax
mov    $0x103,%ecx
sub    -0xc(%rbp),%ecx
imul   $0xff,%ecx,%ecx
cltd
idiv   %ecx
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x8(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
sub    $0x80,%ecx
imul   %ecx,%eax
add    $0x80,%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0xff,-0x1c(%rbp)
jle    1181 <setContrast+0x81>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0xff,(%rax,%rcx,1)
jmp    11b1 <setContrast+0xb1>
cmpl   $0x0,-0x1c(%rbp)
jge    119c <setContrast+0x9c>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    11ac <setContrast+0xac>
mov    -0x1c(%rbp),%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    11b1 <setContrast+0xb1>
jmp    11b6 <setContrast+0xb6>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1115 <setContrast+0x15>
pop    %rbp
ret

x86 assembly (clang, -O2):
<setContrast>:
test   %edx,%edx
jle    16d1 <setContrast+0x5d1>
mov    %edx,%ecx
imul   $0x103,%esi,%eax
add    $0x101fd,%eax
mov    $0x103,%edx
sub    %esi,%edx
mov    %edx,%esi
shl    $0x8,%esi
sub    %edx,%esi
cltd
idiv   %esi
mov    %ecx,%r9d
cmp    $0x8,%ecx
jae    1135 <setContrast+0x35>
xor    %ecx,%ecx
jmp    16f2 <setContrast+0x5f2>
movd   %eax,%xmm0
cmp    $0x10,%ecx
jae    124f <setContrast+0x14f>
xor    %ecx,%ecx
mov    %rcx,%rdx
mov    %r9d,%ecx
and    $0xfffffff8,%ecx
pshufd $0x0,%xmm0,%xmm0
pxor   %xmm11,%xmm11
movdqa 0xea1(%rip),%xmm1
pshufd $0xf5,%xmm0,%xmm3
movdqa 0xea3(%rip),%xmm9
movdqa 0xeaa(%rip),%xmm10
movdqa 0xec1(%rip),%xmm8
nop
movq   (%rdi,%rdx,1),%xmm6
punpcklbw %xmm11,%xmm6
movdqa %xmm6,%xmm7
punpcklwd %xmm11,%xmm7
punpckhwd %xmm11,%xmm6
paddd  %xmm1,%xmm6
paddd  %xmm1,%xmm7
pshufd $0xf5,%xmm7,%xmm4
pmuludq %xmm0,%xmm7
pshufd $0xe8,%xmm7,%xmm7
pmuludq %xmm3,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm7
pshufd $0xf5,%xmm6,%xmm4
pmuludq %xmm0,%xmm6
pshufd $0xe8,%xmm6,%xmm6
pmuludq %xmm3,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm6
movdqa %xmm6,%xmm4
pcmpgtd %xmm9,%xmm4
movdqa %xmm7,%xmm5
pcmpgtd %xmm9,%xmm5
packssdw %xmm4,%xmm5
packsswb %xmm5,%xmm5
movdqa %xmm1,%xmm4
pcmpgtd %xmm6,%xmm4
movdqa %xmm1,%xmm2
pcmpgtd %xmm7,%xmm2
packssdw %xmm4,%xmm2
packsswb %xmm2,%xmm2
pand   %xmm10,%xmm6
pand   %xmm10,%xmm7
packuswb %xmm6,%xmm7
packuswb %xmm7,%xmm7
pxor   %xmm8,%xmm7
movdqa %xmm5,%xmm4
pandn  %xmm7,%xmm4
por    %xmm5,%xmm4
pandn  %xmm4,%xmm2
movq   %xmm2,(%rdi,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rcx
jne    1180 <setContrast+0x80>
cmp    %r9,%rcx
jne    16f2 <setContrast+0x5f2>
jmp    16d1 <setContrast+0x5d1>
mov    %r9d,%ecx
and    $0xfffffff0,%ecx
pshufd $0x0,%xmm0,%xmm13
lea    -0x10(%rcx),%rdx
mov    %rdx,%r8
shr    $0x4,%r8
add    $0x1,%r8
pshufd $0xf5,%xmm13,%xmm14
test   %rdx,%rdx
movdqa %xmm0,-0x18(%rsp)
je     170d <setContrast+0x60d>
mov    %r8,%rdx
and    $0xfffffffffffffffe,%rdx
xor    %esi,%esi
pxor   %xmm12,%xmm12
movdqa 0xd6a(%rip),%xmm8
movdqa 0xd71(%rip),%xmm10
movdqa 0xd78(%rip),%xmm11
movdqa 0xd7f(%rip),%xmm9
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movdqu (%rdi,%rsi,1),%xmm3
movdqu 0x10(%rdi,%rsi,1),%xmm0
movdqa %xmm3,%xmm5
punpcklbw %xmm12,%xmm5
movdqa %xmm5,%xmm6
punpcklwd %xmm12,%xmm6
punpckhwd %xmm12,%xmm5
punpckhbw %xmm12,%xmm3
movdqa %xmm3,%xmm1
punpcklwd %xmm12,%xmm1
punpckhwd %xmm12,%xmm3
paddd  %xmm8,%xmm3
paddd  %xmm8,%xmm1
paddd  %xmm8,%xmm5
paddd  %xmm8,%xmm6
pshufd $0xf5,%xmm6,%xmm2
pmuludq %xmm13,%xmm6
pshufd $0xe8,%xmm6,%xmm7
pmuludq %xmm14,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm7
pshufd $0xf5,%xmm5,%xmm2
pmuludq %xmm13,%xmm5
pshufd $0xe8,%xmm5,%xmm4
pmuludq %xmm14,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm4
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm13,%xmm1
pshufd $0xe8,%xmm1,%xmm6
pmuludq %xmm14,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm6
pshufd $0xf5,%xmm3,%xmm1
pmuludq %xmm13,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm14,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm3
movdqa %xmm3,%xmm1
pcmpgtd %xmm10,%xmm1
movdqa %xmm6,%xmm2
pcmpgtd %xmm10,%xmm2
packssdw %xmm1,%xmm2
movdqa %xmm4,%xmm5
pcmpgtd %xmm10,%xmm5
movdqa %xmm7,%xmm1
pcmpgtd %xmm10,%xmm1
packssdw %xmm5,%xmm1
packsswb %xmm2,%xmm1
movdqa %xmm8,%xmm2
pcmpgtd %xmm3,%xmm2
movdqa %xmm8,%xmm5
pcmpgtd %xmm6,%xmm5
packssdw %xmm2,%xmm5
movdqa %xmm8,%xmm2
pcmpgtd %xmm4,%xmm2
movdqa %xmm8,%xmm15
pcmpgtd %xmm7,%xmm15
packssdw %xmm2,%xmm15
packsswb %xmm5,%xmm15
pand   %xmm11,%xmm3
pand   %xmm11,%xmm6
packuswb %xmm3,%xmm6
pand   %xmm11,%xmm4
pand   %xmm11,%xmm7
packuswb %xmm4,%xmm7
packuswb %xmm6,%xmm7
pxor   %xmm9,%xmm7
por    %xmm1,%xmm7
pandn  %xmm7,%xmm15
movdqu %xmm15,(%rdi,%rsi,1)
movdqa %xmm0,%xmm2
punpcklbw %xmm12,%xmm2
movdqa %xmm2,%xmm3
punpcklwd %xmm12,%xmm3
punpckhwd %xmm12,%xmm2
punpckhbw %xmm12,%xmm0
movdqa %xmm0,%xmm1
punpcklwd %xmm12,%xmm1
punpckhwd %xmm12,%xmm0
paddd  %xmm8,%xmm0
paddd  %xmm8,%xmm1
paddd  %xmm8,%xmm2
paddd  %xmm8,%xmm3
pshufd $0xf5,%xmm3,%xmm4
pmuludq %xmm13,%xmm3
pshufd $0xe8,%xmm3,%xmm7
pmuludq %xmm14,%xmm4
pshufd $0xe8,%xmm4,%xmm3
punpckldq %xmm3,%xmm7
pshufd $0xf5,%xmm2,%xmm3
pmuludq %xmm13,%xmm2
pshufd $0xe8,%xmm2,%xmm5
pmuludq %xmm14,%xmm3
pshufd $0xe8,%xmm3,%xmm2
punpckldq %xmm2,%xmm5
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm13,%xmm1
pshufd $0xe8,%xmm1,%xmm6
pmuludq %xmm14,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm6
pshufd $0xf5,%xmm0,%xmm1
pmuludq %xmm13,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm14,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm0
movdqa %xmm0,%xmm1
pcmpgtd %xmm10,%xmm1
movdqa %xmm6,%xmm2
pcmpgtd %xmm10,%xmm2
packssdw %xmm1,%xmm2
movdqa %xmm5,%xmm3
pcmpgtd %xmm10,%xmm3
movdqa %xmm7,%xmm1
pcmpgtd %xmm10,%xmm1
packssdw %xmm3,%xmm1
packsswb %xmm2,%xmm1
movdqa %xmm8,%xmm2
pcmpgtd %xmm0,%xmm2
movdqa %xmm8,%xmm3
pcmpgtd %xmm6,%xmm3
packssdw %xmm2,%xmm3
movdqa %xmm8,%xmm2
pcmpgtd %xmm5,%xmm2
movdqa %xmm8,%xmm4
pcmpgtd %xmm7,%xmm4
packssdw %xmm2,%xmm4
packsswb %xmm3,%xmm4
pand   %xmm11,%xmm0
pand   %xmm11,%xmm6
packuswb %xmm0,%xmm6
pand   %xmm11,%xmm5
pand   %xmm11,%xmm7
packuswb %xmm5,%xmm7
packuswb %xmm6,%xmm7
pxor   %xmm9,%xmm7
por    %xmm1,%xmm7
pandn  %xmm7,%xmm4
movdqu %xmm4,0x10(%rdi,%rsi,1)
add    $0x20,%rsi
add    $0xfffffffffffffffe,%rdx
jne    12c0 <setContrast+0x1c0>
test   $0x1,%r8b
je     16c6 <setContrast+0x5c6>
movdqu (%rdi,%rsi,1),%xmm6
pxor   %xmm0,%xmm0
movdqa %xmm6,%xmm4
punpcklbw %xmm0,%xmm4
movdqa %xmm4,%xmm2
punpcklwd %xmm0,%xmm2
punpckhwd %xmm0,%xmm4
punpckhbw %xmm0,%xmm6
movdqa %xmm6,%xmm1
punpcklwd %xmm0,%xmm1
punpckhwd %xmm0,%xmm6
movdqa 0xa5a(%rip),%xmm0
paddd  %xmm0,%xmm6
paddd  %xmm0,%xmm1
paddd  %xmm0,%xmm4
paddd  %xmm0,%xmm2
pshufd $0xf5,%xmm2,%xmm5
pmuludq %xmm13,%xmm2
pshufd $0xe8,%xmm2,%xmm3
pmuludq %xmm14,%xmm5
pshufd $0xe8,%xmm5,%xmm2
punpckldq %xmm2,%xmm3
pshufd $0xf5,%xmm4,%xmm2
pmuludq %xmm13,%xmm4
pshufd $0xe8,%xmm4,%xmm8
pmuludq %xmm14,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm8
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm13,%xmm1
pshufd $0xe8,%xmm1,%xmm5
pmuludq %xmm14,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm5
pmuludq %xmm6,%xmm13
pshufd $0xe8,%xmm13,%xmm1
pshufd $0xf5,%xmm6,%xmm2
pmuludq %xmm14,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqa 0x9db(%rip),%xmm6
movdqa %xmm1,%xmm2
pcmpgtd %xmm6,%xmm2
movdqa %xmm5,%xmm7
pcmpgtd %xmm6,%xmm7
packssdw %xmm2,%xmm7
movdqa %xmm8,%xmm4
pcmpgtd %xmm6,%xmm4
movdqa %xmm3,%xmm2
pcmpgtd %xmm6,%xmm2
packssdw %xmm4,%xmm2
packsswb %xmm7,%xmm2
movdqa %xmm0,%xmm4
pcmpgtd %xmm1,%xmm4
movdqa %xmm0,%xmm6
pcmpgtd %xmm5,%xmm6
packssdw %xmm4,%xmm6
movdqa %xmm0,%xmm4
pcmpgtd %xmm8,%xmm4
pcmpgtd %xmm3,%xmm0
packssdw %xmm4,%xmm0
movdqa 0x991(%rip),%xmm4
pand   %xmm4,%xmm1
pand   %xmm4,%xmm5
packuswb %xmm1,%xmm5
pand   %xmm4,%xmm8
pand   %xmm4,%xmm3
packuswb %xmm8,%xmm3
packuswb %xmm5,%xmm3
pxor   0x97b(%rip),%xmm3
packsswb %xmm6,%xmm0
por    %xmm2,%xmm3
pandn  %xmm3,%xmm0
movdqu %xmm0,(%rdi,%rsi,1)
cmp    %r9,%rcx
movdqa -0x18(%rsp),%xmm0
jne    16d2 <setContrast+0x5d2>
ret
test   $0x8,%r9b
je     16f2 <setContrast+0x5f2>
jmp    1144 <setContrast+0x44>
nopl   (%rax)
xor    $0x80,%dl
mov    %edx,%esi
mov    %sil,(%rdi,%rcx,1)
add    $0x1,%rcx
cmp    %rcx,%r9
je     16d1 <setContrast+0x5d1>
movzbl (%rdi,%rcx,1),%edx
add    $0xffffff80,%edx
imul   %eax,%edx
mov    $0xff,%sil
cmp    $0x7f,%edx
jg     16e5 <setContrast+0x5e5>
cmp    $0xffffff80,%edx
jge    16e0 <setContrast+0x5e0>
xor    %esi,%esi
jmp    16e5 <setContrast+0x5e5>
xor    %esi,%esi
test   $0x1,%r8b
jne    1571 <setContrast+0x471>
jmp    16c6 <setContrast+0x5c6>

LLVM IR (-O0):
define void @setContrast(i8* %0, i32 %1, i32 %2) {
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
store i8* %0, i8** %4
store i32 %1, i32* %5
store i32 %2, i32* %6
store i32 0, i32* %7
br label %10
10: ; preds = %56, %3
%11 = load i32, i32* %7
%12 = load i32, i32* %6
%13 = icmp slt i32 %11, %12
br i1 %13, label %14, label %59
14: ; preds = %10
%15 = load i32, i32* %5
%16 = add nsw i32 %15, 255
%17 = mul nsw i32 259, %16
%18 = load i32, i32* %5
%19 = sub nsw i32 259, %18
%20 = mul nsw i32 255, %19
%21 = sdiv i32 %17, %20
store i32 %21, i32* %8
%22 = load i32, i32* %8
%23 = load i8*, i8** %4
%24 = load i32, i32* %7
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds i8, i8* %23, i64 %25
%27 = load i8, i8* %26
%28 = zext i8 %27 to i32
%29 = sub nsw i32 %28, 128
%30 = mul nsw i32 %22, %29
%31 = add nsw i32 %30, 128
store i32 %31, i32* %9
%32 = load i32, i32* %9
%33 = icmp sgt i32 %32, 255
br i1 %33, label %34, label %39
34: ; preds = %14
%35 = load i8*, i8** %4
%36 = load i32, i32* %7
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i8, i8* %35, i64 %37
store i8 -1, i8* %38
br label %55
39: ; preds = %14
%40 = load i32, i32* %9
%41 = icmp slt i32 %40, 0
br i1 %41, label %42, label %47
42: ; preds = %39
%43 = load i8*, i8** %4
%44 = load i32, i32* %7
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i8, i8* %43, i64 %45
store i8 0, i8* %46
br label %54
47: ; preds = %39
%48 = load i32, i32* %9
%49 = trunc i32 %48 to i8
%50 = load i8*, i8** %4
%51 = load i32, i32* %7
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds i8, i8* %50, i64 %52
store i8 %49, i8* %53
br label %54
54: ; preds = %47, %42
br label %55
55: ; preds = %54, %34
br label %56
56: ; preds = %55
%57 = load i32, i32* %7
%58 = add nsw i32 %57, 1
store i32 %58, i32* %7
br label %10
59: ; preds = %10
ret void
}

LLVM IR (-O2):
define void @setContrast(i8* nocapture %0, i32 %1, i32 %2) {
%4 = icmp sgt i32 %2, 0
br i1 %4, label %5, label %124
5: ; preds = %3
%6 = mul i32 %1, 259
%7 = add i32 %6, 66045
%8 = sub nsw i32 259, %1
%9 = mul nsw i32 %8, 255
%10 = sdiv i32 %7, %9
%11 = zext i32 %2 to i64
%12 = icmp ult i32 %2, 8
br i1 %12, label %105, label %13
13: ; preds = %5
%14 = icmp ult i32 %2, 16
br i1 %14, label %81, label %15
15: ; preds = %13
%16 = and i64 %11, 4294967280
%17 = insertelement <16 x i32> poison, i32 %10, i64 0
%18 = shufflevector <16 x i32> %17, <16 x i32> poison, <16 x i32> zeroinitializer
%19 = add nsw i64 %16, -16
%20 = lshr exact i64 %19, 4
%21 = add nuw nsw i64 %20, 1
%22 = and i64 %21, 1
%23 = icmp eq i64 %19, 0
br i1 %23, label %59, label %24
24: ; preds = %15
%25 = and i64 %21, 2305843009213693950
br label %26
26: ; preds = %26, %24
%27 = phi i64 [ 0, %24 ], [ %56, %26 ]
%28 = phi i64 [ 0, %24 ], [ %57, %26 ]
%29 = getelementptr inbounds i8, i8* %0, i64 %27
%30 = bitcast i8* %29 to <16 x i8>*
%31 = load <16 x i8>, <16 x i8>* %30
%32 = zext <16 x i8> %31 to <16 x i32>
%33 = add nsw <16 x i32> %32, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
%34 = mul nsw <16 x i32> %33, %18
%35 = icmp sgt <16 x i32> %34, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>
%36 = icmp slt <16 x i32> %34, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
%37 = trunc <16 x i32> %34 to <16 x i8>
%38 = xor <16 x i8> %37, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
%39 = select <16 x i1> %35, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %38
%40 = select <16 x i1> %36, <16 x i8> zeroinitializer, <16 x i8> %39
%41 = bitcast i8* %29 to <16 x i8>*
store <16 x i8> %40, <16 x i8>* %41
%42 = or i64 %27, 16
%43 = getelementptr inbounds i8, i8* %0, i64 %42
%44 = bitcast i8* %43 to <16 x i8>*
%45 = load <16 x i8>, <16 x i8>* %44
%46 = zext <16 x i8> %45 to <16 x i32>
%47 = add nsw <16 x i32> %46, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
%48 = mul nsw <16 x i32> %47, %18
%49 = icmp sgt <16 x i32> %48, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>
%50 = icmp slt <16 x i32> %48, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
%51 = trunc <16 x i32> %48 to <16 x i8>
%52 = xor <16 x i8> %51, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
%53 = select <16 x i1> %49, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %52
%54 = select <16 x i1> %50, <16 x i8> zeroinitializer, <16 x i8> %53
%55 = bitcast i8* %43 to <16 x i8>*
store <16 x i8> %54, <16 x i8>* %55
%56 = add nuw i64 %27, 32
%57 = add i64 %28, 2
%58 = icmp eq i64 %57, %25
br i1 %58, label %59, label %26
59: ; preds = %26, %15
%60 = phi i64 [ 0, %15 ], [ %56, %26 ]
%61 = icmp eq i64 %22, 0
br i1 %61, label %76, label %62
62: ; preds = %59
%63 = getelementptr inbounds i8, i8* %0, i64 %60
%64 = bitcast i8* %63 to <16 x i8>*
%65 = load <16 x i8>, <16 x i8>* %64
%66 = zext <16 x i8> %65 to <16 x i32>
%67 = add nsw <16 x i32> %66, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
%68 = mul nsw <16 x i32> %67, %18
%69 = icmp sgt <16 x i32> %68, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>
%70 = icmp slt <16 x i32> %68, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
%71 = trunc <16 x i32> %68 to <16 x i8>
%72 = xor <16 x i8> %71, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
%73 = select <16 x i1> %69, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %72
%74 = select <16 x i1> %70, <16 x i8> zeroinitializer, <16 x i8> %73
%75 = bitcast i8* %63 to <16 x i8>*
store <16 x i8> %74, <16 x i8>* %75
br label %76
76: ; preds = %59, %62
%77 = icmp eq i64 %16, %11
br i1 %77, label %124, label %78
78: ; preds = %76
%79 = and i64 %11, 8
%80 = icmp eq i64 %79, 0
br i1 %80, label %105, label %81
81: ; preds = %13, %78
%82 = phi i64 [ %16, %78 ], [ 0, %13 ]
%83 = and i64 %11, 4294967288
%84 = insertelement <8 x i32> poison, i32 %10, i64 0
%85 = shufflevector <8 x i32> %84, <8 x i32> poison, <8 x i32> zeroinitializer
br label %86
86: ; preds = %86, %81
%87 = phi i64 [ %82, %81 ], [ %101, %86 ]
%88 = getelementptr inbounds i8, i8* %0, i64 %87
%89 = bitcast i8* %88 to <8 x i8>*
%90 = load <8 x i8>, <8 x i8>* %89
%91 = zext <8 x i8> %90 to <8 x i32>
%92 = add nsw <8 x i32> %91, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
%93 = mul nsw <8 x i32> %92, %85
%94 = icmp sgt <8 x i32> %93, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>
%95 = icmp slt <8 x i32> %93, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
%96 = trunc <8 x i32> %93 to <8 x i8>
%97 = xor <8 x i8> %96, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
%98 = select <8 x i1> %94, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <8 x i8> %97
%99 = select <8 x i1> %95, <8 x i8> zeroinitializer, <8 x i8> %98
%100 = bitcast i8* %88 to <8 x i8>*
store <8 x i8> %99, <8 x i8>* %100
%101 = add nuw i64 %87, 8
%102 = icmp eq i64 %101, %83
br i1 %102, label %103, label %86
103: ; preds = %86
%104 = icmp eq i64 %83, %11
br i1 %104, label %124, label %105
105: ; preds = %5, %78, %103
%106 = phi i64 [ 0, %5 ], [ %16, %78 ], [ %83, %103 ]
br label %107
107: ; preds = %105, %120
%108 = phi i64 [ %122, %120 ], [ %106, %105 ]
%109 = getelementptr inbounds i8, i8* %0, i64 %108
%110 = load i8, i8* %109
%111 = zext i8 %110 to i32
%112 = add nsw i32 %111, -128
%113 = mul nsw i32 %112, %10
%114 = icmp sgt i32 %113, 127
br i1 %114, label %120, label %115
115: ; preds = %107
%116 = icmp slt i32 %113, -128
br i1 %116, label %120, label %117
117: ; preds = %115
%118 = trunc i32 %113 to i8
%119 = xor i8 %118, -128
br label %120
120: ; preds = %115, %107, %117
%121 = phi i8 [ %119, %117 ], [ -1, %107 ], [ 0, %115 ]
store i8 %121, i8* %109
%122 = add nuw nsw i64 %108, 1
%123 = icmp eq i64 %122, %11
br i1 %123, label %124, label %107
124: ; preds = %120, %76, %103, %3
ret void
}