void spiral_array1(int a[20][20], int n) {
  int i, j, k, m;
  k = 1;
  for (i = 0; i < n / 2; ++i) {
    for (j = i; j < n - i; ++j)
      a[i][j] = k++;
    for (j = i + 1; j < n - i; ++j)
      a[j][n - i - 1] = k++;
    for (j = n - i - 2; j >= i; --j)
      a[n - i - 1][j] = k++;
    for (j = n - i - 2; j >= i + 1; --j)
      a[j][i] = k++;
  }
  if (n % 2 != 0)
    a[n / 2][n / 2] = k;
}


x86 assembly (clang, -O0):
<spiral_array1>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x1,-0x18(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x20(%rbp),%eax
cmp    %ecx,%eax
jge    127c <spiral_array1+0x17c>
mov    -0x10(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    -0x10(%rbp),%ecx
cmp    %ecx,%eax
jge    117d <spiral_array1+0x7d>
mov    -0x18(%rbp),%edx
mov    %edx,%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    113d <spiral_array1+0x3d>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    -0x10(%rbp),%ecx
cmp    %ecx,%eax
jge    11ce <spiral_array1+0xce>
mov    -0x18(%rbp),%edx
mov    %edx,%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mov    -0xc(%rbp),%ecx
sub    -0x10(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1186 <spiral_array1+0x86>
mov    -0xc(%rbp),%eax
sub    -0x10(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jl     121d <spiral_array1+0x11d>
mov    -0x18(%rbp),%edx
mov    %edx,%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    -0x10(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    11da <spiral_array1+0xda>
mov    -0xc(%rbp),%eax
sub    -0x10(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jl     1269 <spiral_array1+0x169>
mov    -0x18(%rbp),%edx
mov    %edx,%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1229 <spiral_array1+0x129>
jmp    126e <spiral_array1+0x16e>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1119 <spiral_array1+0x19>
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     12d7 <spiral_array1+0x1d7>
mov    -0x18(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x38(%rbp),%rax
movslq %ecx,%rcx
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    -0x2c(%rbp),%edx
mov    %eax,%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
pop    %rbp
ret

x86 assembly (clang, -O2):
<spiral_array1>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rdi,-0x50(%rsp)
mov    %esi,%eax
shr    $0x1f,%eax
add    %esi,%eax
sar    %eax
mov    %eax,-0x54(%rsp)
mov    $0x1,%ecx
mov    %rsi,-0x38(%rsp)
cmp    $0x2,%esi
jl     14f7 <spiral_array1+0x3f7>
mov    -0x38(%rsp),%r12
lea    -0x2(%r12),%r13d
mov    %r12d,%r11d
mov    -0x54(%rsp),%eax
mov    %rax,-0x8(%rsp)
mov    -0x50(%rsp),%rsi
lea    0x30(%rsi),%rax
lea    (%rsi,%r11,4),%rbp
add    $0x4c,%rbp
lea    (%r11,%r11,4),%rcx
shl    $0x4,%rcx
lea    (%rcx,%rsi,1),%rdx
add    $0xffffffffffffff74,%rdx
mov    %rdx,-0x18(%rsp)
lea    -0x50(%rcx,%rsi,1),%r15
mov    $0x1,%ecx
mov    $0x1,%edx
movq   $0xfffffffffffffff8,-0x20(%rsp)
ff ff
xor    %r10d,%r10d
movdqa 0xe6f(%rip),%xmm0
movdqa 0xe77(%rip),%xmm1
movdqa 0xe7f(%rip),%xmm2
movdqa 0xe87(%rip),%xmm3
movdqa 0xe8f(%rip),%xmm4
mov    %rsi,%rbx
mov    %rsi,-0x10(%rsp)
mov    %r11,-0x28(%rsp)
jmp    11fe <spiral_array1+0xfe>
mov    -0x28(%rsp),%r11
add    $0xffffffff,%r12d
add    $0x1,%rdx
add    $0xffffffff,%r13d
add    $0x54,%rax
addq   $0xffffffffffffffff,-0x20(%rsp)
addq   $0x50,-0x10(%rsp)
add    $0x4c,%rbp
addq   $0xffffffffffffffb0,-0x18(%rsp)
add    $0xffffffffffffffb0,%r15
add    $0x4,%rbx
cmp    -0x8(%rsp),%r10
je     14f7 <spiral_array1+0x3f7>
mov    %rbx,-0x40(%rsp)
mov    %r10,%r8
movslq %r13d,%r9
cmp    %r9,%r10
mov    %r9,%r14
cmovl  %r10,%r14
mov    %r12d,%r12d
mov    %r11,%r10
sub    %r8,%r10
cmp    %r10,%r8
jge    1336 <spiral_array1+0x236>
mov    %r12,%r11
sub    %r8,%r11
cmp    $0x8,%r11
mov    %rbp,-0x60(%rsp)
jae    1240 <spiral_array1+0x140>
mov    %r8,%rdi
jmp    1308 <spiral_array1+0x208>
xchg   %ax,%ax
mov    -0x38(%rsp),%rdi
sub    %r8d,%edi
sub    %r8,%rdi
add    $0xfffffffffffffff8,%rdi
mov    %rdi,%rsi
shr    $0x3,%rsi
add    $0x1,%rsi
movd   %ecx,%xmm5
pshufd $0x0,%xmm5,%xmm5
paddd  %xmm0,%xmm5
cmp    $0x8,%rdi
mov    %r13d,-0x2c(%rsp)
jae    1276 <spiral_array1+0x176>
xor    %ebp,%ebp
jmp    12cd <spiral_array1+0x1cd>
mov    -0x20(%rsp),%rdi
lea    (%rdi,%r12,1),%r13
shr    $0x3,%r13
add    $0x1,%r13
and    $0xfffffffffffffffe,%r13
xor    %ebp,%ebp
nopl   (%rax)
movdqa %xmm5,%xmm6
paddd  %xmm1,%xmm6
movdqu %xmm5,-0x30(%rax,%rbp,4)
movdqu %xmm6,-0x20(%rax,%rbp,4)
movdqa %xmm5,%xmm6
paddd  %xmm2,%xmm6
movdqa %xmm5,%xmm7
paddd  %xmm3,%xmm7
movdqu %xmm6,-0x10(%rax,%rbp,4)
movdqu %xmm7,(%rax,%rbp,4)
add    $0x10,%rbp
paddd  %xmm4,%xmm5
add    $0xfffffffffffffffe,%r13
jne    1290 <spiral_array1+0x190>
mov    %r11,%rdi
and    $0xfffffffffffffff8,%rdi
test   $0x1,%sil
je     12f9 <spiral_array1+0x1f9>
add    %r8,%rbp
lea    (%r8,%r8,4),%rsi
shl    $0x4,%rsi
add    -0x50(%rsp),%rsi
movdqu %xmm5,(%rsi,%rbp,4)
paddd  %xmm1,%xmm5
movdqu %xmm5,0x10(%rsi,%rbp,4)
add    %edi,%ecx
cmp    %rdi,%r11
mov    -0x2c(%rsp),%r13d
je     1331 <spiral_array1+0x231>
add    %r8,%rdi
mov    -0x10(%rsp),%rsi
lea    (%rsi,%rdi,4),%rsi
mov    %r12,%rbp
sub    %rdi,%rbp
mov    %ecx,%ecx
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
lea    (%rcx,%rdi,1),%ebx
mov    %ebx,(%rsi,%rdi,4)
add    $0x1,%rdi
cmp    %rdi,%rbp
jne    1320 <spiral_array1+0x220>
add    %edi,%ecx
mov    -0x60(%rsp),%rbp
lea    0x1(%r8),%rsi
mov    %rsi,-0x48(%rsp)
cmp    %r10,%rsi
jge    1362 <spiral_array1+0x262>
mov    %r12,%rsi
mov    %rbp,%rdi
nopw   0x0(%rax,%rax,1)
mov    %ecx,(%rdi)
add    $0x1,%ecx
add    $0x50,%rdi
add    $0xffffffffffffffff,%rsi
cmp    %rsi,%rdx
jne    1350 <spiral_array1+0x250>
lea    -0x2(%r10),%r11
cmp    %r8,%r11
jge    1380 <spiral_array1+0x280>
mov    -0x40(%rsp),%rbx
mov    -0x48(%rsp),%r10
jmp    14c1 <spiral_array1+0x3c1>
nopw   0x0(%rax,%rax,1)
mov    %r14,%rsi
neg    %rsi
lea    (%r9,%rsi,1),%rbx
add    $0x1,%rbx
cmp    $0x8,%rbx
jae    13a0 <spiral_array1+0x2a0>
mov    %r9,%rdi
jmp    149e <spiral_array1+0x39e>
nopl   0x0(%rax)
mov    %r9,%rsi
sub    %r14,%rsi
add    $0xfffffffffffffff9,%rsi
mov    %rsi,%r14
shr    $0x3,%r14
add    $0x1,%r14
movd   %ecx,%xmm5
pshufd $0x0,%xmm5,%xmm5
paddd  %xmm0,%xmm5
cmp    $0x8,%rsi
mov    %rbp,-0x60(%rsp)
jae    13d1 <spiral_array1+0x2d1>
xor    %ebp,%ebp
jmp    1444 <spiral_array1+0x344>
mov    -0x18(%rsp),%rsi
lea    (%rsi,%r9,4),%rdi
mov    %r14,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movdqa %xmm5,%xmm6
paddd  %xmm1,%xmm6
pshufd $0x1b,%xmm5,%xmm7
movdqu %xmm7,0x30(%rdi,%rbp,4)
pshufd $0x1b,%xmm6,%xmm6
movdqu %xmm6,0x20(%rdi,%rbp,4)
movdqa %xmm5,%xmm6
paddd  %xmm2,%xmm6
movdqa %xmm5,%xmm7
paddd  %xmm3,%xmm7
pshufd $0x1b,%xmm6,%xmm6
movdqu %xmm6,0x10(%rdi,%rbp,4)
pshufd $0x1b,%xmm7,%xmm6
movdqu %xmm6,(%rdi,%rbp,4)
paddd  %xmm4,%xmm5
add    $0xfffffffffffffff0,%rbp
add    $0xfffffffffffffffe,%rsi
jne    13f0 <spiral_array1+0x2f0>
neg    %rbp
mov    %rbx,%rsi
and    $0xfffffffffffffff8,%rsi
test   $0x1,%r14b
je     1482 <spiral_array1+0x382>
add    $0xffffffffffffffff,%r10
mov    %r9,%rdi
sub    %rbp,%rdi
lea    (%r10,%r10,4),%rbp
shl    $0x4,%rbp
add    -0x50(%rsp),%rbp
pshufd $0x1b,%xmm5,%xmm6
paddd  %xmm1,%xmm5
movdqu %xmm6,-0xc(%rbp,%rdi,4)
pshufd $0x1b,%xmm5,%xmm5
movdqu %xmm5,-0x1c(%rbp,%rdi,4)
add    %esi,%ecx
cmp    %rsi,%rbx
jne    1493 <spiral_array1+0x393>
mov    -0x60(%rsp),%rbp
jmp    136b <spiral_array1+0x26b>
mov    %r9,%rdi
sub    %rsi,%rdi
mov    -0x60(%rsp),%rbp
mov    -0x40(%rsp),%rbx
mov    -0x48(%rsp),%r10
add    $0x1,%rdi
nopl   0x0(%rax)
mov    %ecx,-0x4(%r15,%rdi,4)
add    $0x1,%ecx
add    $0xffffffffffffffff,%rdi
cmp    %r8,%rdi
jg     14b0 <spiral_array1+0x3b0>
cmp    %r8,%r11
jle    11c0 <spiral_array1+0xc0>
lea    (%r9,%r9,4),%rsi
shl    $0x4,%rsi
add    %rbx,%rsi
mov    -0x28(%rsp),%r11
nopw   0x0(%rax,%rax,1)
mov    %ecx,(%rsi)
add    $0x1,%ecx
add    $0xffffffffffffffff,%r9
add    $0xffffffffffffffb0,%rsi
cmp    %r8,%r9
jg     14e0 <spiral_array1+0x3e0>
jmp    11c5 <spiral_array1+0xc5>
testb  $0x1,-0x38(%rsp)
je     1516 <spiral_array1+0x416>
movslq -0x54(%rsp),%rax
lea    (%rax,%rax,4),%rdx
shl    $0x4,%rdx
mov    -0x50(%rsp),%rsi
add    %rdx,%rsi
mov    %ecx,(%rsi,%rax,4)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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