int worker(void) {
  int i, j;
  float array[512][512];
  for (i = 0; i < 512; i++) {
    for (j = 0; j < 512; j++) {
      array[i][j] = (float)(i + j) / (float)(i + 1);
    }
  }
  return (int)array[1][1];
}


x86 assembly (clang, -O0):
<worker>:
push   %rbp
mov    %rsp,%rbp
sub    $0xfff90,%rsp
movl   $0x0,-0x4(%rbp)
cmpl   $0x200,-0x4(%rbp)
jge    1187 <worker+0x87>
movl   $0x0,-0x8(%rbp)
cmpl   $0x200,-0x8(%rbp)
jge    1174 <worker+0x74>
mov    -0x4(%rbp),%eax
add    -0x8(%rbp),%eax
cvtsi2ss %eax,%xmm0
mov    -0x4(%rbp),%eax
add    $0x1,%eax
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
movslq -0x4(%rbp),%rcx
lea    -0x100010(%rbp),%rax
shl    $0xb,%rcx
add    %rcx,%rax
movslq -0x8(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1126 <worker+0x26>
jmp    1179 <worker+0x79>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1112 <worker+0x12>
cvttss2si -0xff80c(%rbp),%eax
ff
add    $0xfff90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<worker>:
sub    $0xfff88,%rsp
lea    -0x70(%rsp),%rax
xor    %ecx,%ecx
movdqa 0xee9(%rip),%xmm8
movdqa 0xef0(%rip),%xmm9
movdqa 0xef8(%rip),%xmm2
movdqa 0xf00(%rip),%xmm3
mov    %rcx,%rdx
add    $0x1,%rcx
xorps  %xmm4,%xmm4
cvtsi2ss %ecx,%xmm4
movq   %rdx,%xmm5
pshufd $0x44,%xmm5,%xmm5
shufps $0x0,%xmm4,%xmm4
xor    %edx,%edx
movdqa %xmm9,%xmm1
movdqa %xmm8,%xmm0
nopl   0x0(%rax,%rax,1)
movdqa %xmm1,%xmm6
paddq  %xmm5,%xmm6
movdqa %xmm0,%xmm7
paddq  %xmm5,%xmm7
shufps $0x88,%xmm7,%xmm6
cvtdq2ps %xmm6,%xmm7
divps  %xmm4,%xmm7
movaps %xmm7,-0x10(%rax,%rdx,4)
paddd  %xmm2,%xmm6
cvtdq2ps %xmm6,%xmm6
divps  %xmm4,%xmm6
movaps %xmm6,(%rax,%rdx,4)
add    $0x8,%rdx
paddq  %xmm3,%xmm1
paddq  %xmm3,%xmm0
cmp    $0x200,%rdx
jne    1160 <worker+0x60>
add    $0x800,%rax
cmp    $0x200,%rcx
jne    1130 <worker+0x30>
cvttss2si 0x784(%rsp),%eax
add    $0xfff88,%rsp
ret

LLVM IR (-O0):
define i32 @worker() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca [512 x [512 x float]]
store i32 0, i32* %1
br label %4
4: ; preds = %30, %0
%5 = load i32, i32* %1
%6 = icmp slt i32 %5, 512
br i1 %6, label %7, label %33
7: ; preds = %4
store i32 0, i32* %2
br label %8
8: ; preds = %26, %7
%9 = load i32, i32* %2
%10 = icmp slt i32 %9, 512
br i1 %10, label %11, label %29
11: ; preds = %8
%12 = load i32, i32* %1
%13 = load i32, i32* %2
%14 = add nsw i32 %12, %13
%15 = sitofp i32 %14 to float
%16 = load i32, i32* %1
%17 = add nsw i32 %16, 1
%18 = sitofp i32 %17 to float
%19 = fdiv float %15, %18
%20 = load i32, i32* %1
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [512 x [512 x float]], [512 x [512 x float]]* %3, i64 0, i64 %21
%23 = load i32, i32* %2
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds [512 x float], [512 x float]* %22, i64 0, i64 %24
store float %19, float* %25
br label %26
26: ; preds = %11
%27 = load i32, i32* %2
%28 = add nsw i32 %27, 1
store i32 %28, i32* %2
br label %8
29: ; preds = %8
br label %30
30: ; preds = %29
%31 = load i32, i32* %1
%32 = add nsw i32 %31, 1
store i32 %32, i32* %1
br label %4
33: ; preds = %4
%34 = getelementptr inbounds [512 x [512 x float]], [512 x [512 x float]]* %3, i64 0, i64 1
%35 = getelementptr inbounds [512 x float], [512 x float]* %34, i64 0, i64 1
%36 = load float, float* %35
%37 = fptosi float %36 to i32
ret i32 %37
}

LLVM IR (-O2):
define i32 @worker() {
%1 = alloca [512 x [512 x float]]
%2 = bitcast [512 x [512 x float]]* %1 to i8*
br label %3
3: ; preds = %0, %32
%4 = phi i64 [ 0, %0 ], [ %5, %32 ]
%5 = add nuw nsw i64 %4, 1
%6 = trunc i64 %5 to i32
%7 = sitofp i32 %6 to float
%8 = insertelement <4 x i64> poison, i64 %4, i64 0
%9 = shufflevector <4 x i64> %8, <4 x i64> poison, <4 x i32> zeroinitializer
%10 = insertelement <4 x float> poison, float %7, i64 0
%11 = shufflevector <4 x float> %10, <4 x float> poison, <4 x i32> zeroinitializer
br label %12
12: ; preds = %12, %3
%13 = phi i64 [ 0, %3 ], [ %29, %12 ]
%14 = phi <4 x i64> [ <i64 0, i64 1, i64 2, i64 3>, %3 ], [ %30, %12 ]
%15 = add nuw nsw <4 x i64> %14, %9
%16 = trunc <4 x i64> %15 to <4 x i32>
%17 = sitofp <4 x i32> %16 to <4 x float>
%18 = fdiv <4 x float> %17, %11
%19 = getelementptr inbounds [512 x [512 x float]], [512 x [512 x float]]* %1, i64 0, i64 %4, i64 %13
%20 = bitcast float* %19 to <4 x float>*
store <4 x float> %18, <4 x float>* %20
%21 = or i64 %13, 4
%22 = add <4 x i64> %14, <i64 4, i64 4, i64 4, i64 4>
%23 = add nuw nsw <4 x i64> %22, %9
%24 = trunc <4 x i64> %23 to <4 x i32>
%25 = sitofp <4 x i32> %24 to <4 x float>
%26 = fdiv <4 x float> %25, %11
%27 = getelementptr inbounds [512 x [512 x float]], [512 x [512 x float]]* %1, i64 0, i64 %4, i64 %21
%28 = bitcast float* %27 to <4 x float>*
store <4 x float> %26, <4 x float>* %28
%29 = add nuw nsw i64 %13, 8
%30 = add <4 x i64> %14, <i64 8, i64 8, i64 8, i64 8>
%31 = icmp eq i64 %29, 512
br i1 %31, label %32, label %12
32: ; preds = %12
%33 = icmp eq i64 %5, 512
br i1 %33, label %34, label %3
34: ; preds = %32
%35 = getelementptr inbounds [512 x [512 x float]], [512 x [512 x float]]* %1, i64 0, i64 1, i64 1
%36 = load float, float* %35
%37 = fptosi float %36 to i32
ret i32 %37
}