void inicializaArray(float *dataInit, unsigned long tamTotalArrayInit) {
  unsigned long i;
  for (i = 1; i < tamTotalArrayInit; i += 8) {
    dataInit[i] = 0.;
    dataInit[i + 1] = 0.;
    dataInit[i + 2] = 1.;
    dataInit[i + 3] = 0.;
    dataInit[i + 4] = 2.;
    dataInit[i + 5] = 0.;
    dataInit[i + 6] = 3.;
    dataInit[i + 7] = 0.;
  }
}


x86 assembly (clang, -O0):
<inicializaArray>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movq   $0x1,-0x18(%rbp)
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
jae    11c9 <inicializaArray+0xc9>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,0x4(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
movss  0xeb5(%rip),%xmm0
movss  %xmm0,0x8(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,0xc(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
movss  0xe8a(%rip),%xmm0
movss  %xmm0,0x10(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,0x14(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
movss  0xe5f(%rip),%xmm0
movss  %xmm0,0x18(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,0x1c(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x18(%rbp)
jmp    1114 <inicializaArray+0x14>
pop    %rbp
ret

x86 assembly (clang, -O2):
<inicializaArray>:
cmp    $0x2,%rsi
jb     13c2 <inicializaArray+0x2c2>
lea    -0x2(%rsi),%r8
mov    $0x1,%ecx
cmp    $0x18,%r8
jb     139b <inicializaArray+0x29b>
shr    $0x3,%r8
mov    $0x20,%edx
mov    %r8,%rax
mul    %rdx
lea    0x1c(%rdi),%r9
seto   %r10b
lea    (%rdi,%rax,1),%rdx
add    $0x1c,%rdx
cmp    %r9,%rdx
jb     139b <inicializaArray+0x29b>
test   %r10b,%r10b
jne    139b <inicializaArray+0x29b>
lea    0x20(%rdi),%r9
lea    (%rdi,%rax,1),%rdx
add    $0x20,%rdx
cmp    %r9,%rdx
jb     139b <inicializaArray+0x29b>
test   %r10b,%r10b
jne    139b <inicializaArray+0x29b>
lea    0x18(%rdi),%r9
lea    (%rdi,%rax,1),%rdx
add    $0x18,%rdx
cmp    %r9,%rdx
jb     139b <inicializaArray+0x29b>
test   %r10b,%r10b
jne    139b <inicializaArray+0x29b>
lea    0x14(%rdi),%r9
lea    (%rdi,%rax,1),%rdx
add    $0x14,%rdx
cmp    %r9,%rdx
jb     139b <inicializaArray+0x29b>
test   %r10b,%r10b
jne    139b <inicializaArray+0x29b>
lea    0x10(%rdi),%r9
lea    (%rdi,%rax,1),%rdx
add    $0x10,%rdx
cmp    %r9,%rdx
jb     139b <inicializaArray+0x29b>
test   %r10b,%r10b
jne    139b <inicializaArray+0x29b>
lea    0xc(%rdi),%r9
lea    (%rdi,%rax,1),%rdx
add    $0xc,%rdx
cmp    %r9,%rdx
jb     139b <inicializaArray+0x29b>
test   %r10b,%r10b
jne    139b <inicializaArray+0x29b>
lea    0x8(%rdi),%r9
lea    (%rdi,%rax,1),%rdx
add    $0x8,%rdx
cmp    %r9,%rdx
jb     139b <inicializaArray+0x29b>
test   %r10b,%r10b
jne    139b <inicializaArray+0x29b>
lea    0x4(%rdi),%rdx
add    %rdi,%rax
add    $0x4,%rax
cmp    %rdx,%rax
jb     139b <inicializaArray+0x29b>
test   %r10b,%r10b
jne    139b <inicializaArray+0x29b>
add    $0x1,%r8
mov    %r8,%r9
and    $0xfffffffffffffffc,%r9
lea    -0x4(%r9),%rax
mov    %rax,%rcx
shr    $0x2,%rcx
add    $0x1,%rcx
mov    %ecx,%r10d
and    $0x3,%r10d
cmp    $0xc,%rax
jae    124d <inicializaArray+0x14d>
xor    %edx,%edx
jmp    1333 <inicializaArray+0x233>
and    $0xfffffffffffffffc,%rcx
lea    0x184(%rdi),%rax
xor    %edx,%edx
movaps 0xd9f(%rip),%xmm0
movaps 0xda8(%rip),%xmm1
nopl   0x0(%rax,%rax,1)
movups %xmm0,-0x110(%rax)
movups %xmm1,-0x120(%rax)
movups %xmm0,-0x130(%rax)
movups %xmm1,-0x140(%rax)
movups %xmm0,-0x150(%rax)
movups %xmm1,-0x160(%rax)
movups %xmm0,-0x170(%rax)
movups %xmm1,-0x180(%rax)
movups %xmm0,-0x90(%rax)
movups %xmm1,-0xa0(%rax)
movups %xmm0,-0xb0(%rax)
movups %xmm1,-0xc0(%rax)
movups %xmm0,-0xd0(%rax)
movups %xmm1,-0xe0(%rax)
movups %xmm0,-0xf0(%rax)
movups %xmm1,-0x100(%rax)
movups %xmm0,-0x10(%rax)
movups %xmm1,-0x20(%rax)
movups %xmm0,-0x30(%rax)
movups %xmm1,-0x40(%rax)
movups %xmm0,-0x50(%rax)
movups %xmm1,-0x60(%rax)
movups %xmm0,-0x70(%rax)
movups %xmm1,-0x80(%rax)
movups %xmm0,0x70(%rax)
movups %xmm1,0x60(%rax)
movups %xmm0,0x50(%rax)
movups %xmm1,0x40(%rax)
movups %xmm0,0x30(%rax)
movups %xmm1,0x20(%rax)
movups %xmm0,0x10(%rax)
movups %xmm1,(%rax)
add    $0x10,%rdx
add    $0x200,%rax
add    $0xfffffffffffffffc,%rcx
jne    1270 <inicializaArray+0x170>
test   %r10,%r10
je     138e <inicializaArray+0x28e>
shl    $0x3,%rdx
movaps 0xcbd(%rip),%xmm0
movaps 0xcc6(%rip),%xmm1
nopw   0x0(%rax,%rax,1)
lea    0x0(,%rdx,4),%rax
or     $0x20,%rax
movups %xmm0,0x54(%rdi,%rax,1)
movups %xmm1,0x44(%rdi,%rax,1)
movups %xmm0,0x34(%rdi,%rax,1)
movups %xmm1,0x24(%rdi,%rax,1)
movups %xmm0,0x14(%rdi,%rax,1)
movups %xmm1,0x4(%rdi,%rax,1)
movups %xmm0,-0xc(%rdi,%rax,1)
movups %xmm1,-0x1c(%rdi,%rax,1)
add    $0x20,%rdx
add    $0xffffffffffffffff,%r10
jne    1350 <inicializaArray+0x250>
cmp    %r9,%r8
je     13c2 <inicializaArray+0x2c2>
lea    0x1(,%r9,8),%rcx
movaps 0xc6e(%rip),%xmm0
movaps 0xc57(%rip),%xmm1
nopl   0x0(%rax)
movups %xmm0,(%rdi,%rcx,4)
movups %xmm1,0x10(%rdi,%rcx,4)
add    $0x8,%rcx
cmp    %rsi,%rcx
jb     13b0 <inicializaArray+0x2b0>
ret

LLVM IR (-O0):
define void @inicializaArray(float* %0, i64 %1) {
%3 = alloca float*
%4 = alloca i64
%5 = alloca i64
store float* %0, float** %3
store i64 %1, i64* %4
store i64 1, i64* %5
br label %6
6: ; preds = %42, %2
%7 = load i64, i64* %5
%8 = load i64, i64* %4
%9 = icmp ult i64 %7, %8
br i1 %9, label %10, label %45
10: ; preds = %6
%11 = load float*, float** %3
%12 = load i64, i64* %5
%13 = getelementptr inbounds float, float* %11, i64 %12
store float 0.000000e+00, float* %13
%14 = load float*, float** %3
%15 = load i64, i64* %5
%16 = add i64 %15, 1
%17 = getelementptr inbounds float, float* %14, i64 %16
store float 0.000000e+00, float* %17
%18 = load float*, float** %3
%19 = load i64, i64* %5
%20 = add i64 %19, 2
%21 = getelementptr inbounds float, float* %18, i64 %20
store float 1.000000e+00, float* %21
%22 = load float*, float** %3
%23 = load i64, i64* %5
%24 = add i64 %23, 3
%25 = getelementptr inbounds float, float* %22, i64 %24
store float 0.000000e+00, float* %25
%26 = load float*, float** %3
%27 = load i64, i64* %5
%28 = add i64 %27, 4
%29 = getelementptr inbounds float, float* %26, i64 %28
store float 2.000000e+00, float* %29
%30 = load float*, float** %3
%31 = load i64, i64* %5
%32 = add i64 %31, 5
%33 = getelementptr inbounds float, float* %30, i64 %32
store float 0.000000e+00, float* %33
%34 = load float*, float** %3
%35 = load i64, i64* %5
%36 = add i64 %35, 6
%37 = getelementptr inbounds float, float* %34, i64 %36
store float 3.000000e+00, float* %37
%38 = load float*, float** %3
%39 = load i64, i64* %5
%40 = add i64 %39, 7
%41 = getelementptr inbounds float, float* %38, i64 %40
store float 0.000000e+00, float* %41
br label %42
42: ; preds = %10
%43 = load i64, i64* %5
%44 = add i64 %43, 8
store i64 %44, i64* %5
br label %6
45: ; preds = %6
ret void
}

LLVM IR (-O2):
define void @inicializaArray(float* nocapture writeonly %0, i64 %1) {
%3 = icmp ugt i64 %1, 1
br i1 %3, label %4, label %148
4: ; preds = %2
%5 = add i64 %1, -2
%6 = lshr i64 %5, 3
%7 = add nuw nsw i64 %6, 1
%8 = icmp ult i64 %5, 24
br i1 %8, label %137, label %9
9: ; preds = %4
%10 = add i64 %1, -2
%11 = lshr i64 %10, 3
%12 = getelementptr float, float* %0, i64 7
%13 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %11, i64 32)
%14 = extractvalue { i64, i1 } %13, 0
%15 = extractvalue { i64, i1 } %13, 1
%16 = bitcast float* %12 to i8*
%17 = getelementptr i8, i8* %16, i64 %14
%18 = icmp ult i8* %17, %16
%19 = or i1 %18, %15
%20 = getelementptr float, float* %0, i64 8
%21 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %11, i64 32)
%22 = extractvalue { i64, i1 } %21, 0
%23 = extractvalue { i64, i1 } %21, 1
%24 = bitcast float* %20 to i8*
%25 = getelementptr i8, i8* %24, i64 %22
%26 = icmp ult i8* %25, %24
%27 = or i1 %26, %23
%28 = getelementptr float, float* %0, i64 6
%29 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %11, i64 32)
%30 = extractvalue { i64, i1 } %29, 0
%31 = extractvalue { i64, i1 } %29, 1
%32 = bitcast float* %28 to i8*
%33 = getelementptr i8, i8* %32, i64 %30
%34 = icmp ult i8* %33, %32
%35 = or i1 %34, %31
%36 = getelementptr float, float* %0, i64 5
%37 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %11, i64 32)
%38 = extractvalue { i64, i1 } %37, 0
%39 = extractvalue { i64, i1 } %37, 1
%40 = bitcast float* %36 to i8*
%41 = getelementptr i8, i8* %40, i64 %38
%42 = icmp ult i8* %41, %40
%43 = or i1 %42, %39
%44 = getelementptr float, float* %0, i64 4
%45 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %11, i64 32)
%46 = extractvalue { i64, i1 } %45, 0
%47 = extractvalue { i64, i1 } %45, 1
%48 = bitcast float* %44 to i8*
%49 = getelementptr i8, i8* %48, i64 %46
%50 = icmp ult i8* %49, %48
%51 = or i1 %50, %47
%52 = getelementptr float, float* %0, i64 3
%53 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %11, i64 32)
%54 = extractvalue { i64, i1 } %53, 0
%55 = extractvalue { i64, i1 } %53, 1
%56 = bitcast float* %52 to i8*
%57 = getelementptr i8, i8* %56, i64 %54
%58 = icmp ult i8* %57, %56
%59 = or i1 %58, %55
%60 = getelementptr float, float* %0, i64 2
%61 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %11, i64 32)
%62 = extractvalue { i64, i1 } %61, 0
%63 = extractvalue { i64, i1 } %61, 1
%64 = bitcast float* %60 to i8*
%65 = getelementptr i8, i8* %64, i64 %62
%66 = icmp ult i8* %65, %64
%67 = or i1 %66, %63
%68 = getelementptr float, float* %0, i64 1
%69 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %11, i64 32)
%70 = extractvalue { i64, i1 } %69, 0
%71 = extractvalue { i64, i1 } %69, 1
%72 = bitcast float* %68 to i8*
%73 = getelementptr i8, i8* %72, i64 %70
%74 = icmp ult i8* %73, %72
%75 = or i1 %74, %71
%76 = or i1 %19, %27
%77 = or i1 %76, %35
%78 = or i1 %77, %43
%79 = or i1 %78, %51
%80 = or i1 %79, %59
%81 = or i1 %80, %67
%82 = or i1 %81, %75
br i1 %82, label %137, label %83
83: ; preds = %9
%84 = and i64 %7, 4611686018427387900
%85 = shl i64 %84, 3
%86 = or i64 %85, 1
%87 = add nsw i64 %84, -4
%88 = lshr exact i64 %87, 2
%89 = add nuw nsw i64 %88, 1
%90 = and i64 %89, 3
%91 = icmp ult i64 %87, 12
br i1 %91, label %120, label %92
92: ; preds = %83
%93 = and i64 %89, 9223372036854775804
%94 = getelementptr inbounds float, float* %0, i64 -7
%95 = getelementptr inbounds float, float* %0, i64 -7
%96 = getelementptr inbounds float, float* %0, i64 -7
%97 = getelementptr inbounds float, float* %0, i64 -7
br label %98
98: ; preds = %98, %92
%99 = phi i64 [ 0, %92 ], [ %117, %98 ]
%100 = phi i64 [ 0, %92 ], [ %118, %98 ]
%101 = shl i64 %99, 3
%102 = or i64 %101, 8
%103 = getelementptr inbounds float, float* %94, i64 %102
%104 = bitcast float* %103 to <32 x float>*
store <32 x float> <float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00>, <32 x float>* %104
%105 = shl i64 %99, 3
%106 = or i64 %105, 40
%107 = getelementptr inbounds float, float* %95, i64 %106
%108 = bitcast float* %107 to <32 x float>*
store <32 x float> <float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00>, <32 x float>* %108
%109 = shl i64 %99, 3
%110 = or i64 %109, 72
%111 = getelementptr inbounds float, float* %96, i64 %110
%112 = bitcast float* %111 to <32 x float>*
store <32 x float> <float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00>, <32 x float>* %112
%113 = shl i64 %99, 3
%114 = or i64 %113, 104
%115 = getelementptr inbounds float, float* %97, i64 %114
%116 = bitcast float* %115 to <32 x float>*
store <32 x float> <float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00>, <32 x float>* %116
%117 = add nuw i64 %99, 16
%118 = add nuw i64 %100, 4
%119 = icmp eq i64 %118, %93
br i1 %119, label %120, label %98
120: ; preds = %98, %83
%121 = phi i64 [ 0, %83 ], [ %117, %98 ]
%122 = icmp eq i64 %90, 0
br i1 %122, label %135, label %123
123: ; preds = %120
%124 = getelementptr inbounds float, float* %0, i64 -7
br label %125
125: ; preds = %125, %123
%126 = phi i64 [ %121, %123 ], [ %132, %125 ]
%127 = phi i64 [ 0, %123 ], [ %133, %125 ]
%128 = shl i64 %126, 3
%129 = or i64 %128, 8
%130 = getelementptr inbounds float, float* %124, i64 %129
%131 = bitcast float* %130 to <32 x float>*
store <32 x float> <float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00>, <32 x float>* %131
%132 = add nuw i64 %126, 4
%133 = add i64 %127, 1
%134 = icmp eq i64 %133, %90
br i1 %134, label %135, label %125
135: ; preds = %125, %120
%136 = icmp eq i64 %7, %84
br i1 %136, label %148, label %137
137: ; preds = %9, %4, %135
%138 = phi i64 [ 1, %9 ], [ 1, %4 ], [ %86, %135 ]
br label %139
139: ; preds = %137, %139
%140 = phi i64 [ %146, %139 ], [ %138, %137 ]
%141 = getelementptr inbounds float, float* %0, i64 %140
%142 = bitcast float* %141 to <4 x float>*
store <4 x float> <float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00>, <4 x float>* %142
%143 = add nuw nsw i64 %140, 4
%144 = getelementptr inbounds float, float* %0, i64 %143
%145 = bitcast float* %144 to <4 x float>*
store <4 x float> <float 2.000000e+00, float 0.000000e+00, float 3.000000e+00, float 0.000000e+00>, <4 x float>* %145
%146 = add nuw i64 %140, 8
%147 = icmp ult i64 %146, %1
br i1 %147, label %139, label %148
148: ; preds = %139, %135, %2
ret void
}