void jpeg_idct(int *block, int *dest, int base_img[64][64]) {
  int i, j, k;
  for (i = 0; i < 64; i++)
    dest[i] = 0;
  for (i = 0; i < 64; i++) {
    k = block[i];
    if (k) {
      for (j = 0; j < 64; j++) {
        dest[j] += k * base_img[i][j];
      }
    }
  }
  for (i = 0; i < 64; i++)
    dest[i] >>= 17;
  return;
}


x86 assembly (clang, -O0):
<jpeg_idct>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x40,-0x1c(%rbp)
jge    113e <jpeg_idct+0x3e>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1117 <jpeg_idct+0x17>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x40,-0x1c(%rbp)
jge    11c6 <jpeg_idct+0xc6>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     11b3 <jpeg_idct+0xb3>
movl   $0x0,-0x20(%rbp)
cmpl   $0x40,-0x20(%rbp)
jge    11ae <jpeg_idct+0xae>
mov    -0x24(%rbp),%edx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
shl    $0x8,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
imul   (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
add    (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    116e <jpeg_idct+0x6e>
jmp    11b3 <jpeg_idct+0xb3>
jmp    11b8 <jpeg_idct+0xb8>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1145 <jpeg_idct+0x45>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x40,-0x1c(%rbp)
jge    11f6 <jpeg_idct+0xf6>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
sar    $0x11,%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11cd <jpeg_idct+0xcd>
pop    %rbp
ret

x86 assembly (clang, -O2):
<jpeg_idct>:
push   %rbx
pxor   %xmm0,%xmm0
movdqu %xmm0,0xf0(%rsi)
movdqu %xmm0,0xe0(%rsi)
movdqu %xmm0,0xd0(%rsi)
movdqu %xmm0,0xc0(%rsi)
movdqu %xmm0,0xb0(%rsi)
movdqu %xmm0,0xa0(%rsi)
movdqu %xmm0,0x90(%rsi)
movdqu %xmm0,0x80(%rsi)
movdqu %xmm0,0x70(%rsi)
movdqu %xmm0,0x60(%rsi)
movdqu %xmm0,0x50(%rsi)
movdqu %xmm0,0x40(%rsi)
movdqu %xmm0,0x30(%rsi)
movdqu %xmm0,0x20(%rsi)
movdqu %xmm0,0x10(%rsi)
movdqu %xmm0,(%rsi)
lea    0x100(%rsi),%r8
lea    0x4(%rdx),%r11
xor    %r9d,%r9d
jmp    14df <jpeg_idct+0x3df>
nop
movd   %ebx,%xmm0
pshufd $0x0,%xmm0,%xmm0
movdqu (%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu (%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu 0x10(%rsi),%xmm3
movdqu 0x20(%rsi),%xmm4
movdqu 0x30(%rsi),%xmm1
movdqu %xmm2,(%rsi)
movdqu 0x10(%rdx,%r10,1),%xmm2
pshufd $0xf5,%xmm2,%xmm5
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm0,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm2
paddd  %xmm3,%xmm2
movdqu %xmm2,0x10(%rsi)
movdqu 0x20(%rdx,%r10,1),%xmm2
pshufd $0xf5,%xmm2,%xmm3
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm0,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
paddd  %xmm4,%xmm2
movdqu %xmm2,0x20(%rsi)
movdqu 0x30(%rdx,%r10,1),%xmm2
pshufd $0xf5,%xmm2,%xmm3
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm0,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0x30(%rsi)
movdqu 0x40(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu 0x40(%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0x40(%rsi)
movdqu 0x50(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu 0x50(%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0x50(%rsi)
movdqu 0x60(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu 0x60(%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0x60(%rsi)
movdqu 0x70(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu 0x70(%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0x70(%rsi)
movdqu 0x80(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu 0x80(%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0x80(%rsi)
movdqu 0x90(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu 0x90(%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0x90(%rsi)
movdqu 0xa0(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu 0xa0(%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0xa0(%rsi)
movdqu 0xb0(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu 0xb0(%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0xb0(%rsi)
movdqu 0xc0(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu 0xc0(%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0xc0(%rsi)
movdqu 0xd0(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu 0xd0(%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0xd0(%rsi)
movdqu 0xe0(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
movdqu 0xe0(%rsi),%xmm2
paddd  %xmm1,%xmm2
movdqu %xmm2,0xe0(%rsi)
movdqu 0xf0(%rdx,%r10,1),%xmm1
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm0
punpckldq %xmm0,%xmm1
movdqu 0xf0(%rsi),%xmm0
paddd  %xmm1,%xmm0
movdqu %xmm0,0xf0(%rsi)
add    $0x1,%r9
add    $0x100,%r11
cmp    $0x40,%r9
je     1542 <jpeg_idct+0x442>
mov    (%rdi,%r9,4),%ebx
test   %ebx,%ebx
je     14ce <jpeg_idct+0x3ce>
mov    %r9,%r10
shl    $0x8,%r10
lea    (%rdx,%r10,1),%rcx
add    $0x100,%rcx
cmp    %rsi,%rcx
jbe    1180 <jpeg_idct+0x80>
lea    (%rdx,%r10,1),%rcx
cmp    %r8,%rcx
jae    1180 <jpeg_idct+0x80>
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    -0x4(%r11,%rcx,4),%eax
imul   %ebx,%eax
add    %eax,(%rsi,%rcx,4)
mov    (%r11,%rcx,4),%eax
imul   %ebx,%eax
add    %eax,0x4(%rsi,%rcx,4)
add    $0x2,%rcx
cmp    $0x40,%rcx
jne    1520 <jpeg_idct+0x420>
jmp    14ce <jpeg_idct+0x3ce>
movdqu (%rsi),%xmm0
movdqu 0x10(%rsi),%xmm1
movdqu 0x20(%rsi),%xmm2
movdqu 0x30(%rsi),%xmm3
psrad  $0x11,%xmm0
movdqu %xmm0,(%rsi)
psrad  $0x11,%xmm1
movdqu %xmm1,0x10(%rsi)
psrad  $0x11,%xmm2
movdqu %xmm2,0x20(%rsi)
psrad  $0x11,%xmm3
movdqu %xmm3,0x30(%rsi)
movdqu 0x40(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0x40(%rsi)
movdqu 0x50(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0x50(%rsi)
movdqu 0x60(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0x60(%rsi)
movdqu 0x70(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0x70(%rsi)
movdqu 0x80(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0x80(%rsi)
movdqu 0x90(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0x90(%rsi)
movdqu 0xa0(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0xa0(%rsi)
movdqu 0xb0(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0xb0(%rsi)
movdqu 0xc0(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0xc0(%rsi)
movdqu 0xd0(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0xd0(%rsi)
movdqu 0xe0(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0xe0(%rsi)
movdqu 0xf0(%rsi),%xmm0
psrad  $0x11,%xmm0
movdqu %xmm0,0xf0(%rsi)
pop    %rbx
ret

LLVM IR (-O0):
define void @jpeg_idct(i32* %0, i32* %1, [64 x i32]* %2) {
%4 = alloca i32*
%5 = alloca i32*
%6 = alloca [64 x i32]*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
store i32* %0, i32** %4
store i32* %1, i32** %5
store [64 x i32]* %2, [64 x i32]** %6
store i32 0, i32* %7
br label %10
10: ; preds = %18, %3
%11 = load i32, i32* %7
%12 = icmp slt i32 %11, 64
br i1 %12, label %13, label %21
13: ; preds = %10
%14 = load i32*, i32** %5
%15 = load i32, i32* %7
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds i32, i32* %14, i64 %16
store i32 0, i32* %17
br label %18
18: ; preds = %13
%19 = load i32, i32* %7
%20 = add nsw i32 %19, 1
store i32 %20, i32* %7
br label %10
21: ; preds = %10
store i32 0, i32* %7
br label %22
22: ; preds = %59, %21
%23 = load i32, i32* %7
%24 = icmp slt i32 %23, 64
br i1 %24, label %25, label %62
25: ; preds = %22
%26 = load i32*, i32** %4
%27 = load i32, i32* %7
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds i32, i32* %26, i64 %28
%30 = load i32, i32* %29
store i32 %30, i32* %9
%31 = load i32, i32* %9
%32 = icmp ne i32 %31, 0
br i1 %32, label %33, label %58
33: ; preds = %25
store i32 0, i32* %8
br label %34
34: ; preds = %54, %33
%35 = load i32, i32* %8
%36 = icmp slt i32 %35, 64
br i1 %36, label %37, label %57
37: ; preds = %34
%38 = load i32, i32* %9
%39 = load [64 x i32]*, [64 x i32]** %6
%40 = load i32, i32* %7
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds [64 x i32], [64 x i32]* %39, i64 %41
%43 = load i32, i32* %8
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds [64 x i32], [64 x i32]* %42, i64 0, i64 %44
%46 = load i32, i32* %45
%47 = mul nsw i32 %38, %46
%48 = load i32*, i32** %5
%49 = load i32, i32* %8
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds i32, i32* %48, i64 %50
%52 = load i32, i32* %51
%53 = add nsw i32 %52, %47
store i32 %53, i32* %51
br label %54
54: ; preds = %37
%55 = load i32, i32* %8
%56 = add nsw i32 %55, 1
store i32 %56, i32* %8
br label %34
57: ; preds = %34
br label %58
58: ; preds = %57, %25
br label %59
59: ; preds = %58
%60 = load i32, i32* %7
%61 = add nsw i32 %60, 1
store i32 %61, i32* %7
br label %22
62: ; preds = %22
store i32 0, i32* %7
br label %63
63: ; preds = %73, %62
%64 = load i32, i32* %7
%65 = icmp slt i32 %64, 64
br i1 %65, label %66, label %76
66: ; preds = %63
%67 = load i32*, i32** %5
%68 = load i32, i32* %7
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i32, i32* %67, i64 %69
%71 = load i32, i32* %70
%72 = ashr i32 %71, 17
store i32 %72, i32* %70
br label %73
73: ; preds = %66
%74 = load i32, i32* %7
%75 = add nsw i32 %74, 1
store i32 %75, i32* %7
br label %63
76: ; preds = %63
ret void
}

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