#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ abort();
int main1() {
  int i;
  float a[20];
  float e[20];
  float b[20] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  float c[20] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
  float d[20] = {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30};
  int ic[20] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  int ib[20] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  int ia[20];
  for (i = 0; i < 20; i++) {
    a[i] = b[i] + c[i] + d[i];
    e[i] = b[i] + c[i] + d[i];
    ia[i] = ib[i] + ic[i];
  }
  for (i = 0; i < 20; i++) {
    float fres = b[i] + c[i] + d[i];
    int ires = ib[i] + ic[i];
    if (a[i] != fres || e[i] != fres || ia[i] != ires)
      abort();
  }
  return 0;
}


x86 assembly (clang, -O0):
<main1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2a0,%rsp
lea    -0x100(%rbp),%rdi
lea    0xec7(%rip),%rsi
mov    $0x50,%edx
call   1040 <memcpy@plt>
lea    -0x150(%rbp),%rdi
lea    0xeff(%rip),%rsi
mov    $0x50,%edx
call   1040 <memcpy@plt>
lea    -0x1a0(%rbp),%rdi
lea    0xf37(%rip),%rsi
mov    $0x50,%edx
call   1040 <memcpy@plt>
lea    -0x1f0(%rbp),%rdi
lea    0xf6f(%rip),%rsi
mov    $0x50,%edx
call   1040 <memcpy@plt>
lea    -0x240(%rbp),%rdi
lea    0xfa7(%rip),%rsi
mov    $0x50,%edx
call   1040 <memcpy@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x14,-0x4(%rbp)
jge    1248 <main1+0x128>
movslq -0x4(%rbp),%rax
movss  -0x100(%rbp,%rax,4),%xmm0
ff ff
movslq -0x4(%rbp),%rax
addss  -0x150(%rbp,%rax,4),%xmm0
ff ff
movslq -0x4(%rbp),%rax
addss  -0x1a0(%rbp,%rax,4),%xmm0
ff ff
movslq -0x4(%rbp),%rax
movss  %xmm0,-0x60(%rbp,%rax,4)
movslq -0x4(%rbp),%rax
movss  -0x100(%rbp,%rax,4),%xmm0
ff ff
movslq -0x4(%rbp),%rax
addss  -0x150(%rbp,%rax,4),%xmm0
ff ff
movslq -0x4(%rbp),%rax
addss  -0x1a0(%rbp,%rax,4),%xmm0
ff ff
movslq -0x4(%rbp),%rax
movss  %xmm0,-0xb0(%rbp,%rax,4)
ff ff
movslq -0x4(%rbp),%rax
mov    -0x240(%rbp,%rax,4),%ecx
movslq -0x4(%rbp),%rax
add    -0x1f0(%rbp,%rax,4),%ecx
movslq -0x4(%rbp),%rax
mov    %ecx,-0x290(%rbp,%rax,4)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    11aa <main1+0x8a>
movl   $0x0,-0x4(%rbp)
cmpl   $0x14,-0x4(%rbp)
jge    1312 <main1+0x1f2>
movslq -0x4(%rbp),%rax
movss  -0x100(%rbp,%rax,4),%xmm0
ff ff
movslq -0x4(%rbp),%rax
addss  -0x150(%rbp,%rax,4),%xmm0
ff ff
movslq -0x4(%rbp),%rax
addss  -0x1a0(%rbp,%rax,4),%xmm0
ff ff
movss  %xmm0,-0x294(%rbp)
ff
movslq -0x4(%rbp),%rax
mov    -0x240(%rbp,%rax,4),%eax
movslq -0x4(%rbp),%rcx
add    -0x1f0(%rbp,%rcx,4),%eax
mov    %eax,-0x298(%rbp)
movslq -0x4(%rbp),%rax
movss  -0x60(%rbp,%rax,4),%xmm0
ucomiss -0x294(%rbp),%xmm0
jne    12f8 <main1+0x1d8>
jp     12f8 <main1+0x1d8>
movslq -0x4(%rbp),%rax
movss  -0xb0(%rbp,%rax,4),%xmm0
ff ff
ucomiss -0x294(%rbp),%xmm0
jne    12f8 <main1+0x1d8>
jp     12f8 <main1+0x1d8>
movslq -0x4(%rbp),%rax
mov    -0x290(%rbp,%rax,4),%eax
cmp    -0x298(%rbp),%eax
je     12ff <main1+0x1df>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1304 <main1+0x1e4>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    124f <main1+0x12f>
xor    %eax,%eax
add    $0x2a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main1>:
sub    $0xf8,%rsp
movaps 0xee2(%rip),%xmm0
movaps %xmm0,0xa0(%rsp)
movaps %xmm0,0x50(%rsp)
movaps 0xede(%rip),%xmm0
movaps %xmm0,(%rsp)
movaps 0xee3(%rip),%xmm0
movaps %xmm0,0xb0(%rsp)
movaps %xmm0,0x60(%rsp)
movaps 0xedf(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0xee3(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
movaps %xmm0,0x70(%rsp)
movaps 0xedf(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0xee3(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movaps %xmm0,0x80(%rsp)
movaps 0xedc(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
xorps  %xmm0,%xmm0
movaps %xmm0,0xe0(%rsp)
movaps %xmm0,0x90(%rsp)
movaps %xmm0,0x40(%rsp)
xor    %eax,%eax
lea    0xec6(%rip),%r8
lea    0xf0f(%rip),%rdx
lea    0xf58(%rip),%rsi
lea    0xfa1(%rip),%rdi
nop
movss  (%rax,%r8,1),%xmm0
addss  (%rax,%rdx,1),%xmm0
addss  (%rax,%rsi,1),%xmm0
movss  0xa0(%rsp,%rax,1),%xmm1
ucomiss %xmm0,%xmm1
jne    121b <main1+0x10b>
jp     121b <main1+0x10b>
movss  0x50(%rsp,%rax,1),%xmm1
ucomiss %xmm0,%xmm1
jne    121b <main1+0x10b>
jp     121b <main1+0x10b>
mov    (%rax,%rdi,1),%ecx
add    %ecx,%ecx
cmp    %ecx,(%rsp,%rax,1)
jne    121b <main1+0x10b>
add    $0x4,%rax
cmp    $0x50,%rax
jne    11d0 <main1+0xc0>
xor    %eax,%eax
add    $0xf8,%rsp
ret
xor    %eax,%eax
call   1030 <abort@plt>

LLVM IR (-O0):
@__const.main1.b = [20 x float] [float 0.000000e+00, float 3.000000e+00, float 6.000000e+00, float 9.000000e+00, float 1.200000e+01, float 1.500000e+01, float 1.800000e+01, float 2.100000e+01, float 2.400000e+01, float 2.700000e+01, float 3.000000e+01, float 3.300000e+01, float 3.600000e+01, float 3.900000e+01, float 4.200000e+01, float 4.500000e+01, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00]
@__const.main1.c = [20 x float] [float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00, float 8.000000e+00, float 9.000000e+00, float 1.000000e+01, float 1.100000e+01, float 1.200000e+01, float 1.300000e+01, float 1.400000e+01, float 1.500000e+01, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00]
@__const.main1.d = [20 x float] [float 0.000000e+00, float 2.000000e+00, float 4.000000e+00, float 6.000000e+00, float 8.000000e+00, float 1.000000e+01, float 1.200000e+01, float 1.400000e+01, float 1.600000e+01, float 1.800000e+01, float 2.000000e+01, float 2.200000e+01, float 2.400000e+01, float 2.600000e+01, float 2.800000e+01, float 3.000000e+01, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00]
@__const.main1.ic = [20 x i32] [i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45, i32 0, i32 0, i32 0, i32 0]
@__const.main1.ib = [20 x i32] [i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45, i32 0, i32 0, i32 0, i32 0]
define i32 @main1() {
%1 = alloca i32
%2 = alloca [20 x float]
%3 = alloca [20 x float]
%4 = alloca [20 x float]
%5 = alloca [20 x float]
%6 = alloca [20 x float]
%7 = alloca [20 x i32]
%8 = alloca [20 x i32]
%9 = alloca [20 x i32]
%10 = alloca float
%11 = alloca i32
%12 = bitcast [20 x float]* %4 to i8*
%13 = bitcast [20 x float]* %5 to i8*
%14 = bitcast [20 x float]* %6 to i8*
%15 = bitcast [20 x i32]* %7 to i8*
%16 = bitcast [20 x i32]* %8 to i8*
store i32 0, i32* %1
br label %17
17: ; preds = %67, %0
%18 = load i32, i32* %1
%19 = icmp slt i32 %18, 20
br i1 %19, label %20, label %70
20: ; preds = %17
%21 = load i32, i32* %1
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [20 x float], [20 x float]* %4, i64 0, i64 %22
%24 = load float, float* %23
%25 = load i32, i32* %1
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds [20 x float], [20 x float]* %5, i64 0, i64 %26
%28 = load float, float* %27
%29 = fadd float %24, %28
%30 = load i32, i32* %1
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds [20 x float], [20 x float]* %6, i64 0, i64 %31
%33 = load float, float* %32
%34 = fadd float %29, %33
%35 = load i32, i32* %1
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds [20 x float], [20 x float]* %2, i64 0, i64 %36
store float %34, float* %37
%38 = load i32, i32* %1
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds [20 x float], [20 x float]* %4, i64 0, i64 %39
%41 = load float, float* %40
%42 = load i32, i32* %1
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [20 x float], [20 x float]* %5, i64 0, i64 %43
%45 = load float, float* %44
%46 = fadd float %41, %45
%47 = load i32, i32* %1
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [20 x float], [20 x float]* %6, i64 0, i64 %48
%50 = load float, float* %49
%51 = fadd float %46, %50
%52 = load i32, i32* %1
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [20 x float], [20 x float]* %3, i64 0, i64 %53
store float %51, float* %54
%55 = load i32, i32* %1
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [20 x i32], [20 x i32]* %8, i64 0, i64 %56
%58 = load i32, i32* %57
%59 = load i32, i32* %1
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds [20 x i32], [20 x i32]* %7, i64 0, i64 %60
%62 = load i32, i32* %61
%63 = add nsw i32 %58, %62
%64 = load i32, i32* %1
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds [20 x i32], [20 x i32]* %9, i64 0, i64 %65
store i32 %63, i32* %66
br label %67
67: ; preds = %20
%68 = load i32, i32* %1
%69 = add nsw i32 %68, 1
store i32 %69, i32* %1
br label %17
70: ; preds = %17
store i32 0, i32* %1
br label %71
71: ; preds = %121, %70
%72 = load i32, i32* %1
%73 = icmp slt i32 %72, 20
br i1 %73, label %74, label %124
74: ; preds = %71
%75 = load i32, i32* %1
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds [20 x float], [20 x float]* %4, i64 0, i64 %76
%78 = load float, float* %77
%79 = load i32, i32* %1
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [20 x float], [20 x float]* %5, i64 0, i64 %80
%82 = load float, float* %81
%83 = fadd float %78, %82
%84 = load i32, i32* %1
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds [20 x float], [20 x float]* %6, i64 0, i64 %85
%87 = load float, float* %86
%88 = fadd float %83, %87
store float %88, float* %10
%89 = load i32, i32* %1
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds [20 x i32], [20 x i32]* %8, i64 0, i64 %90
%92 = load i32, i32* %91
%93 = load i32, i32* %1
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds [20 x i32], [20 x i32]* %7, i64 0, i64 %94
%96 = load i32, i32* %95
%97 = add nsw i32 %92, %96
store i32 %97, i32* %11
%98 = load i32, i32* %1
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds [20 x float], [20 x float]* %2, i64 0, i64 %99
%101 = load float, float* %100
%102 = load float, float* %10
%103 = fcmp une float %101, %102
br i1 %103, label %118, label %104
104: ; preds = %74
%105 = load i32, i32* %1
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds [20 x float], [20 x float]* %3, i64 0, i64 %106
%108 = load float, float* %107
%109 = load float, float* %10
%110 = fcmp une float %108, %109
br i1 %110, label %118, label %111
111: ; preds = %104
%112 = load i32, i32* %1
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds [20 x i32], [20 x i32]* %9, i64 0, i64 %113
%115 = load i32, i32* %114
%116 = load i32, i32* %11
%117 = icmp ne i32 %115, %116
br i1 %117, label %118, label %120
118: ; preds = %111, %104, %74
%119 = call i32 (...) @abort()
unreachable
120: ; preds = %111
br label %121
121: ; preds = %120
%122 = load i32, i32* %1
%123 = add nsw i32 %122, 1
store i32 %123, i32* %1
br label %71
124: ; preds = %71
ret i32 0
}

LLVM IR (-O2):
@__const.main1.b = [20 x float] [float 0.000000e+00, float 3.000000e+00, float 6.000000e+00, float 9.000000e+00, float 1.200000e+01, float 1.500000e+01, float 1.800000e+01, float 2.100000e+01, float 2.400000e+01, float 2.700000e+01, float 3.000000e+01, float 3.300000e+01, float 3.600000e+01, float 3.900000e+01, float 4.200000e+01, float 4.500000e+01, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00]
@__const.main1.c = [20 x float] [float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00, float 8.000000e+00, float 9.000000e+00, float 1.000000e+01, float 1.100000e+01, float 1.200000e+01, float 1.300000e+01, float 1.400000e+01, float 1.500000e+01, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00]
@__const.main1.d = [20 x float] [float 0.000000e+00, float 2.000000e+00, float 4.000000e+00, float 6.000000e+00, float 8.000000e+00, float 1.000000e+01, float 1.200000e+01, float 1.400000e+01, float 1.600000e+01, float 1.800000e+01, float 2.000000e+01, float 2.200000e+01, float 2.400000e+01, float 2.600000e+01, float 2.800000e+01, float 3.000000e+01, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00]
@__const.main1.ib = [20 x i32] [i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45, i32 0, i32 0, i32 0, i32 0]
define i32 @main1() {
%1 = alloca [20 x float]
%2 = alloca [20 x float]
%3 = alloca [20 x i32]
%4 = bitcast [20 x float]* %1 to i8*
%5 = bitcast [20 x float]* %2 to i8*
%6 = bitcast [20 x i32]* %3 to i8*
%7 = bitcast [20 x float]* %1 to <4 x float>*
store <4 x float> <float 0.000000e+00, float 6.000000e+00, float 1.200000e+01, float 1.800000e+01>, <4 x float>* %7
%8 = bitcast [20 x float]* %2 to <4 x float>*
store <4 x float> <float 0.000000e+00, float 6.000000e+00, float 1.200000e+01, float 1.800000e+01>, <4 x float>* %8
%9 = bitcast [20 x i32]* %3 to <4 x i32>*
store <4 x i32> <i32 0, i32 6, i32 12, i32 18>, <4 x i32>* %9
%10 = getelementptr inbounds [20 x float], [20 x float]* %1, i64 0, i64 4
%11 = bitcast float* %10 to <4 x float>*
store <4 x float> <float 2.400000e+01, float 3.000000e+01, float 3.600000e+01, float 4.200000e+01>, <4 x float>* %11
%12 = getelementptr inbounds [20 x float], [20 x float]* %2, i64 0, i64 4
%13 = bitcast float* %12 to <4 x float>*
store <4 x float> <float 2.400000e+01, float 3.000000e+01, float 3.600000e+01, float 4.200000e+01>, <4 x float>* %13
%14 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 4
%15 = bitcast i32* %14 to <4 x i32>*
store <4 x i32> <i32 24, i32 30, i32 36, i32 42>, <4 x i32>* %15
%16 = getelementptr inbounds [20 x float], [20 x float]* %1, i64 0, i64 8
%17 = bitcast float* %16 to <4 x float>*
store <4 x float> <float 4.800000e+01, float 5.400000e+01, float 6.000000e+01, float 6.600000e+01>, <4 x float>* %17
%18 = getelementptr inbounds [20 x float], [20 x float]* %2, i64 0, i64 8
%19 = bitcast float* %18 to <4 x float>*
store <4 x float> <float 4.800000e+01, float 5.400000e+01, float 6.000000e+01, float 6.600000e+01>, <4 x float>* %19
%20 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 8
%21 = bitcast i32* %20 to <4 x i32>*
store <4 x i32> <i32 48, i32 54, i32 60, i32 66>, <4 x i32>* %21
%22 = getelementptr inbounds [20 x float], [20 x float]* %1, i64 0, i64 12
%23 = bitcast float* %22 to <4 x float>*
store <4 x float> <float 7.200000e+01, float 7.800000e+01, float 8.400000e+01, float 9.000000e+01>, <4 x float>* %23
%24 = getelementptr inbounds [20 x float], [20 x float]* %2, i64 0, i64 12
%25 = bitcast float* %24 to <4 x float>*
store <4 x float> <float 7.200000e+01, float 7.800000e+01, float 8.400000e+01, float 9.000000e+01>, <4 x float>* %25
%26 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 12
%27 = bitcast i32* %26 to <4 x i32>*
store <4 x i32> <i32 72, i32 78, i32 84, i32 90>, <4 x i32>* %27
%28 = getelementptr inbounds [20 x float], [20 x float]* %1, i64 0, i64 16
%29 = bitcast float* %28 to <4 x float>*
store <4 x float> zeroinitializer, <4 x float>* %29
%30 = getelementptr inbounds [20 x float], [20 x float]* %2, i64 0, i64 16
%31 = bitcast float* %30 to <4 x float>*
store <4 x float> zeroinitializer, <4 x float>* %31
%32 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 16
%33 = bitcast i32* %32 to <4 x i32>*
store <4 x i32> zeroinitializer, <4 x i32>* %33
br label %37
34: ; preds = %59
%35 = add nuw nsw i64 %38, 1
%36 = icmp eq i64 %35, 20
br i1 %36, label %65, label %37
37: ; preds = %0, %34
%38 = phi i64 [ %35, %34 ], [ 0, %0 ]
%39 = getelementptr inbounds [20 x float], [20 x float]* @__const.main1.b, i64 0, i64 %38
%40 = load float, float* %39
%41 = getelementptr inbounds [20 x float], [20 x float]* @__const.main1.c, i64 0, i64 %38
%42 = load float, float* %41
%43 = fadd float %40, %42
%44 = getelementptr inbounds [20 x float], [20 x float]* @__const.main1.d, i64 0, i64 %38
%45 = load float, float* %44
%46 = fadd float %43, %45
%47 = getelementptr inbounds [20 x i32], [20 x i32]* @__const.main1.ib, i64 0, i64 %38
%48 = load i32, i32* %47
%49 = getelementptr inbounds [20 x i32], [20 x i32]* @__const.main1.ib, i64 0, i64 %38
%50 = load i32, i32* %49
%51 = add nsw i32 %50, %48
%52 = getelementptr inbounds [20 x float], [20 x float]* %1, i64 0, i64 %38
%53 = load float, float* %52
%54 = fcmp une float %53, %46
br i1 %54, label %63, label %55
55: ; preds = %37
%56 = getelementptr inbounds [20 x float], [20 x float]* %2, i64 0, i64 %38
%57 = load float, float* %56
%58 = fcmp une float %57, %46
br i1 %58, label %63, label %59
59: ; preds = %55
%60 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 %38
%61 = load i32, i32* %60
%62 = icmp eq i32 %61, %51
br i1 %62, label %34, label %63
63: ; preds = %59, %55, %37
%64 = tail call i32 (...) @abort()
unreachable
65: ; preds = %34
ret i32 0
}