void VecAdd3fv(float v[3], const int a[3], const int b[3], const int c[3]) {
  v[0] = ((float)(a[0])) + ((float)(b[0])) + ((float)(c[0]));
  v[1] = ((float)(a[1])) + ((float)(b[1])) + ((float)(c[1]));
  v[2] = ((float)(a[2])) + ((float)(b[2])) + ((float)(c[2]));
}


x86 assembly (clang, -O0):
<VecAdd3fv>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x10(%rbp),%rax
cvtsi2ssl (%rax),%xmm0
mov    -0x18(%rbp),%rax
cvtsi2ssl (%rax),%xmm1
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
cvtsi2ssl (%rax),%xmm1
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
cvtsi2ssl 0x4(%rax),%xmm0
mov    -0x18(%rbp),%rax
cvtsi2ssl 0x4(%rax),%xmm1
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
cvtsi2ssl 0x4(%rax),%xmm1
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
mov    -0x10(%rbp),%rax
cvtsi2ssl 0x8(%rax),%xmm0
mov    -0x18(%rbp),%rax
cvtsi2ssl 0x8(%rax),%xmm1
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
cvtsi2ssl 0x8(%rax),%xmm1
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<VecAdd3fv>:
cvtsi2ssl (%rsi),%xmm0
cvtsi2ssl (%rdx),%xmm1
addss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2ssl (%rcx),%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rdi)
xorps  %xmm0,%xmm0
cvtsi2ssl 0x4(%rsi),%xmm0
xorps  %xmm1,%xmm1
cvtsi2ssl 0x4(%rdx),%xmm1
addss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2ssl 0x4(%rcx),%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,0x4(%rdi)
xorps  %xmm0,%xmm0
cvtsi2ssl 0x8(%rsi),%xmm0
xorps  %xmm1,%xmm1
cvtsi2ssl 0x8(%rdx),%xmm1
cvtsi2ssl 0x8(%rcx),%xmm2
addss  %xmm0,%xmm1
addss  %xmm1,%xmm2
movss  %xmm2,0x8(%rdi)
ret

LLVM IR (-O0):
define void @VecAdd3fv(float* %0, i32* %1, i32* %2, i32* %3) {
%5 = alloca float*
%6 = alloca i32*
%7 = alloca i32*
%8 = alloca i32*
store float* %0, float** %5
store i32* %1, i32** %6
store i32* %2, i32** %7
store i32* %3, i32** %8
%9 = load i32*, i32** %6
%10 = getelementptr inbounds i32, i32* %9, i64 0
%11 = load i32, i32* %10
%12 = sitofp i32 %11 to float
%13 = load i32*, i32** %7
%14 = getelementptr inbounds i32, i32* %13, i64 0
%15 = load i32, i32* %14
%16 = sitofp i32 %15 to float
%17 = fadd float %12, %16
%18 = load i32*, i32** %8
%19 = getelementptr inbounds i32, i32* %18, i64 0
%20 = load i32, i32* %19
%21 = sitofp i32 %20 to float
%22 = fadd float %17, %21
%23 = load float*, float** %5
%24 = getelementptr inbounds float, float* %23, i64 0
store float %22, float* %24
%25 = load i32*, i32** %6
%26 = getelementptr inbounds i32, i32* %25, i64 1
%27 = load i32, i32* %26
%28 = sitofp i32 %27 to float
%29 = load i32*, i32** %7
%30 = getelementptr inbounds i32, i32* %29, i64 1
%31 = load i32, i32* %30
%32 = sitofp i32 %31 to float
%33 = fadd float %28, %32
%34 = load i32*, i32** %8
%35 = getelementptr inbounds i32, i32* %34, i64 1
%36 = load i32, i32* %35
%37 = sitofp i32 %36 to float
%38 = fadd float %33, %37
%39 = load float*, float** %5
%40 = getelementptr inbounds float, float* %39, i64 1
store float %38, float* %40
%41 = load i32*, i32** %6
%42 = getelementptr inbounds i32, i32* %41, i64 2
%43 = load i32, i32* %42
%44 = sitofp i32 %43 to float
%45 = load i32*, i32** %7
%46 = getelementptr inbounds i32, i32* %45, i64 2
%47 = load i32, i32* %46
%48 = sitofp i32 %47 to float
%49 = fadd float %44, %48
%50 = load i32*, i32** %8
%51 = getelementptr inbounds i32, i32* %50, i64 2
%52 = load i32, i32* %51
%53 = sitofp i32 %52 to float
%54 = fadd float %49, %53
%55 = load float*, float** %5
%56 = getelementptr inbounds float, float* %55, i64 2
store float %54, float* %56
ret void
}

LLVM IR (-O2):
define void @VecAdd3fv(float* nocapture writeonly %0, i32* nocapture %1, i32* nocapture %2, i32* nocapture %3) {
%5 = load i32, i32* %1
%6 = sitofp i32 %5 to float
%7 = load i32, i32* %2
%8 = sitofp i32 %7 to float
%9 = fadd float %6, %8
%10 = load i32, i32* %3
%11 = sitofp i32 %10 to float
%12 = fadd float %9, %11
store float %12, float* %0
%13 = getelementptr inbounds i32, i32* %1, i64 1
%14 = load i32, i32* %13
%15 = sitofp i32 %14 to float
%16 = getelementptr inbounds i32, i32* %2, i64 1
%17 = load i32, i32* %16
%18 = sitofp i32 %17 to float
%19 = fadd float %15, %18
%20 = getelementptr inbounds i32, i32* %3, i64 1
%21 = load i32, i32* %20
%22 = sitofp i32 %21 to float
%23 = fadd float %19, %22
%24 = getelementptr inbounds float, float* %0, i64 1
store float %23, float* %24
%25 = getelementptr inbounds i32, i32* %1, i64 2
%26 = load i32, i32* %25
%27 = sitofp i32 %26 to float
%28 = getelementptr inbounds i32, i32* %2, i64 2
%29 = load i32, i32* %28
%30 = sitofp i32 %29 to float
%31 = fadd float %27, %30
%32 = getelementptr inbounds i32, i32* %3, i64 2
%33 = load i32, i32* %32
%34 = sitofp i32 %33 to float
%35 = fadd float %31, %34
%36 = getelementptr inbounds float, float* %0, i64 2
store float %35, float* %36
ret void
}