void ICCITTQuantize(int *matrix, int dcqfact, int acqfact) {
  static char RoutineName[] = "ICCITTQuantize";
  int *mptr;
  if (dcqfact & 1) {
    if (*matrix > 0) {
      *matrix = ((*matrix << 1) + 1) * dcqfact;
    } else if (*matrix < 0) {
      *matrix = ((*matrix << 1) - 1) * dcqfact;
    }
  } else {
    if (*matrix > 0) {
      *matrix = (((*matrix << 1) + 1) * dcqfact) - 1;
    } else if (*matrix < 0) {
      *matrix = (((*matrix << 1) - 1) * dcqfact) + 1;
    }
  }
  if (acqfact & 1) {
    for (mptr = matrix + 1; mptr < matrix + 64; mptr++) {
      if (*mptr > 0) {
        *mptr = ((*mptr << 1) + 1) * acqfact;
      } else if (*mptr < 0) {
        *mptr = ((*mptr << 1) - 1) * acqfact;
      }
    }
  } else {
    for (mptr = matrix + 1; mptr < matrix + 64; mptr++) {
      if (*mptr > 0) {
        *mptr = (((*mptr << 1) + 1) * acqfact) - 1;
      } else if (*mptr < 0) {
        *mptr = (((*mptr << 1) - 1) * acqfact) + 1;
      }
    }
  }
}


x86 assembly (clang, -O0):
<ICCITTQuantize>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    -0xc(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1172 <ICCITTQuantize+0x72>
mov    -0x8(%rbp),%rax
cmpl   $0x0,(%rax)
jle    1145 <ICCITTQuantize+0x45>
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
imul   -0xc(%rbp),%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
jmp    116d <ICCITTQuantize+0x6d>
mov    -0x8(%rbp),%rax
cmpl   $0x0,(%rax)
jge    1168 <ICCITTQuantize+0x68>
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
imul   -0xc(%rbp),%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
jmp    116d <ICCITTQuantize+0x6d>
jmp    11cd <ICCITTQuantize+0xcd>
mov    -0x8(%rbp),%rax
cmpl   $0x0,(%rax)
jle    119d <ICCITTQuantize+0x9d>
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
imul   -0xc(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
jmp    11c8 <ICCITTQuantize+0xc8>
mov    -0x8(%rbp),%rax
cmpl   $0x0,(%rax)
jge    11c3 <ICCITTQuantize+0xc3>
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
imul   -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
jmp    11c8 <ICCITTQuantize+0xc8>
jmp    11cd <ICCITTQuantize+0xcd>
mov    -0x10(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     126b <ICCITTQuantize+0x16b>
mov    -0x8(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x8(%rbp),%rcx
add    $0x100,%rcx
cmp    %rcx,%rax
jae    1266 <ICCITTQuantize+0x166>
mov    -0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jle    1228 <ICCITTQuantize+0x128>
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
imul   -0x10(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
jmp    1250 <ICCITTQuantize+0x150>
mov    -0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jge    124b <ICCITTQuantize+0x14b>
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
imul   -0x10(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
jmp    1250 <ICCITTQuantize+0x150>
jmp    1255 <ICCITTQuantize+0x155>
mov    -0x18(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x18(%rbp)
jmp    11e8 <ICCITTQuantize+0xe8>
jmp    1300 <ICCITTQuantize+0x200>
mov    -0x8(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x8(%rbp),%rcx
add    $0x100,%rcx
cmp    %rcx,%rax
jae    12fb <ICCITTQuantize+0x1fb>
mov    -0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jle    12ba <ICCITTQuantize+0x1ba>
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
imul   -0x10(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
jmp    12e5 <ICCITTQuantize+0x1e5>
mov    -0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jge    12e0 <ICCITTQuantize+0x1e0>
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
imul   -0x10(%rbp),%ecx
add    $0x1,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
jmp    12e5 <ICCITTQuantize+0x1e5>
jmp    12ea <ICCITTQuantize+0x1ea>
mov    -0x18(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x18(%rbp)
jmp    1277 <ICCITTQuantize+0x177>
jmp    1300 <ICCITTQuantize+0x200>
pop    %rbp
ret

x86 assembly (clang, -O2):
<ICCITTQuantize>:
mov    (%rdi),%eax
test   $0x1,%sil
jne    111d <ICCITTQuantize+0x1d>
test   %eax,%eax
jle    132c <ICCITTQuantize+0x22c>
add    %eax,%eax
add    $0x1,%eax
imul   %esi,%eax
add    $0xffffffff,%eax
jmp    112d <ICCITTQuantize+0x2d>
test   %eax,%eax
jle    1342 <ICCITTQuantize+0x242>
add    %eax,%eax
add    $0x1,%eax
imul   %esi,%eax
mov    %eax,(%rdi)
xor    %eax,%eax
pxor   %xmm0,%xmm0
pcmpeqd %xmm1,%xmm1
movdqa 0xebf(%rip),%xmm2
test   $0x1,%dl
je     115e <ICCITTQuantize+0x5e>
jmp    124e <ICCITTQuantize+0x14e>
nopl   0x0(%rax,%rax,1)
add    $0x4,%rax
cmp    $0x3c,%rax
je     12f1 <ICCITTQuantize+0x1f1>
movdqu 0x4(%rdi,%rax,4),%xmm5
pxor   %xmm3,%xmm3
pcmpgtd %xmm5,%xmm3
movdqa %xmm5,%xmm6
paddd  %xmm5,%xmm6
movdqa %xmm6,%xmm4
paddd  %xmm1,%xmm4
por    %xmm2,%xmm6
movdqa %xmm3,%xmm7
pandn  %xmm6,%xmm7
pand   %xmm3,%xmm4
por    %xmm7,%xmm4
movdqa %xmm3,%xmm6
pxor   %xmm1,%xmm6
psrld  $0x1f,%xmm3
por    %xmm6,%xmm3
pcmpeqd %xmm0,%xmm5
movd   %xmm5,%ecx
not    %ecx
test   $0x1,%cl
je     11c1 <ICCITTQuantize+0xc1>
movd   %xmm4,%ecx
imul   %edx,%ecx
movd   %xmm3,%esi
add    %ecx,%esi
mov    %esi,0x4(%rdi,%rax,4)
pxor   %xmm1,%xmm5
pextrw $0x2,%xmm5,%ecx
test   $0x1,%cl
je     11ea <ICCITTQuantize+0xea>
pshufd $0x55,%xmm4,%xmm6
movd   %xmm6,%ecx
imul   %edx,%ecx
pshufd $0x55,%xmm3,%xmm6
movd   %xmm6,%esi
add    %ecx,%esi
mov    %esi,0x8(%rdi,%rax,4)
pextrw $0x4,%xmm5,%ecx
test   $0x1,%cl
je     120f <ICCITTQuantize+0x10f>
pshufd $0xee,%xmm4,%xmm6
movd   %xmm6,%ecx
imul   %edx,%ecx
pshufd $0xee,%xmm3,%xmm6
movd   %xmm6,%esi
add    %ecx,%esi
mov    %esi,0xc(%rdi,%rax,4)
pextrw $0x6,%xmm5,%ecx
test   $0x1,%cl
je     1150 <ICCITTQuantize+0x50>
pshufd $0xff,%xmm4,%xmm4
movd   %xmm4,%ecx
imul   %edx,%ecx
pshufd $0xff,%xmm3,%xmm3
movd   %xmm3,%esi
add    %ecx,%esi
mov    %esi,0x10(%rdi,%rax,4)
jmp    1150 <ICCITTQuantize+0x50>
nopl   (%rax)
add    $0x4,%rax
cmp    $0x3c,%rax
je     1312 <ICCITTQuantize+0x212>
movdqu 0x4(%rdi,%rax,4),%xmm4
pxor   %xmm3,%xmm3
pcmpgtd %xmm4,%xmm3
movdqa %xmm4,%xmm5
paddd  %xmm4,%xmm5
movdqa %xmm5,%xmm6
paddd  %xmm1,%xmm6
por    %xmm2,%xmm5
pand   %xmm3,%xmm6
pandn  %xmm5,%xmm3
por    %xmm6,%xmm3
pcmpeqd %xmm0,%xmm4
movd   %xmm4,%ecx
not    %ecx
test   $0x1,%cl
je     1296 <ICCITTQuantize+0x196>
movd   %xmm3,%ecx
imul   %edx,%ecx
mov    %ecx,0x4(%rdi,%rax,4)
pxor   %xmm1,%xmm4
pextrw $0x2,%xmm4,%ecx
test   $0x1,%cl
je     12b4 <ICCITTQuantize+0x1b4>
pshufd $0x55,%xmm3,%xmm5
movd   %xmm5,%ecx
imul   %edx,%ecx
mov    %ecx,0x8(%rdi,%rax,4)
pextrw $0x4,%xmm4,%ecx
test   $0x1,%cl
je     12ce <ICCITTQuantize+0x1ce>
pshufd $0xee,%xmm3,%xmm5
movd   %xmm5,%ecx
imul   %edx,%ecx
mov    %ecx,0xc(%rdi,%rax,4)
pextrw $0x6,%xmm4,%ecx
test   $0x1,%cl
je     1240 <ICCITTQuantize+0x140>
pshufd $0xff,%xmm3,%xmm3
movd   %xmm3,%ecx
imul   %edx,%ecx
mov    %ecx,0x10(%rdi,%rax,4)
jmp    1240 <ICCITTQuantize+0x140>
mov    0xf4(%rdi),%eax
test   %eax,%eax
jle    1352 <ICCITTQuantize+0x252>
add    %eax,%eax
add    $0x1,%eax
mov    $0xffffffff,%ecx
imul   %edx,%eax
add    %ecx,%eax
mov    %eax,0xf4(%rdi)
jmp    1358 <ICCITTQuantize+0x258>
mov    0xf4(%rdi),%eax
test   %eax,%eax
jle    1379 <ICCITTQuantize+0x279>
add    %eax,%eax
add    $0x1,%eax
imul   %edx,%eax
mov    %eax,0xf4(%rdi)
jmp    137b <ICCITTQuantize+0x27b>
jns    112f <ICCITTQuantize+0x2f>
add    %eax,%eax
add    $0xffffffff,%eax
imul   %esi,%eax
add    $0x1,%eax
jmp    112d <ICCITTQuantize+0x2d>
jns    112f <ICCITTQuantize+0x2f>
add    %eax,%eax
add    $0xffffffff,%eax
jmp    112a <ICCITTQuantize+0x2a>
js     13e4 <ICCITTQuantize+0x2e4>
mov    0xf8(%rdi),%eax
test   %eax,%eax
jle    1395 <ICCITTQuantize+0x295>
add    %eax,%eax
add    $0x1,%eax
mov    $0xffffffff,%ecx
imul   %edx,%eax
add    %ecx,%eax
mov    %eax,0xf8(%rdi)
jmp    1397 <ICCITTQuantize+0x297>
js     13f3 <ICCITTQuantize+0x2f3>
mov    0xf8(%rdi),%eax
test   %eax,%eax
jle    13b2 <ICCITTQuantize+0x2b2>
add    %eax,%eax
add    $0x1,%eax
imul   %edx,%eax
mov    %eax,0xf8(%rdi)
jmp    13b4 <ICCITTQuantize+0x2b4>
js     13fd <ICCITTQuantize+0x2fd>
mov    0xfc(%rdi),%eax
test   %eax,%eax
jle    13cd <ICCITTQuantize+0x2cd>
add    %eax,%eax
add    $0x1,%eax
mov    $0xffffffff,%ecx
imul   %edx,%eax
add    %ecx,%eax
jmp    13c6 <ICCITTQuantize+0x2c6>
js     140c <ICCITTQuantize+0x30c>
mov    0xfc(%rdi),%eax
test   %eax,%eax
jle    13db <ICCITTQuantize+0x2db>
add    %eax,%eax
add    $0x1,%eax
imul   %edx,%eax
mov    %eax,0xfc(%rdi)
ret
jns    13cc <ICCITTQuantize+0x2cc>
add    %eax,%eax
add    $0xffffffff,%eax
mov    $0x1,%ecx
jmp    13ab <ICCITTQuantize+0x2ab>
jns    13cc <ICCITTQuantize+0x2cc>
add    %eax,%eax
add    $0xffffffff,%eax
jmp    13c3 <ICCITTQuantize+0x2c3>
add    %eax,%eax
add    $0xffffffff,%eax
mov    $0x1,%ecx
jmp    1305 <ICCITTQuantize+0x205>
add    %eax,%eax
add    $0xffffffff,%eax
jmp    1321 <ICCITTQuantize+0x221>
add    %eax,%eax
add    $0xffffffff,%eax
mov    $0x1,%ecx
jmp    136c <ICCITTQuantize+0x26c>
add    %eax,%eax
add    $0xffffffff,%eax
jmp    138a <ICCITTQuantize+0x28a>

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

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