void DVaxpy33(int n, double y0[], double y1[], double y2[], double alpha[],
              double x0[], double x1[], double x2[]) {
  register double a00, a01, a02, a10, a11, a12, a20, a21, a22;
  register double x0i, x1i, x2i;
  int ii;
  a00 = alpha[0];
  a01 = alpha[1];
  a02 = alpha[2];
  a10 = alpha[3];
  a11 = alpha[4];
  a12 = alpha[5];
  a20 = alpha[6];
  a21 = alpha[7];
  a22 = alpha[8];
  for (ii = 0; ii < n; ii++) {
    x0i = x0[ii];
    x1i = x1[ii];
    x2i = x2[ii];
    y0[ii] += a00 * x0i + a01 * x1i + a02 * x2i;
    y1[ii] += a10 * x0i + a11 * x1i + a12 * x2i;
    y2[ii] += a20 * x0i + a21 * x1i + a22 * x2i;
  }
  return;
}


x86 assembly (clang, -O0):
<DVaxpy33>:
push   %rbp
mov    %rsp,%rbp
sub    $0x18,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x0,-0x94(%rbp)
mov    -0x94(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    12f1 <DVaxpy33+0x1f1>
mov    -0x30(%rbp),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    0x10(%rbp),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    0x18(%rbp),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x38(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    11ae <DVaxpy33+0xae>
add    $0x18,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<DVaxpy33>:
test   %edi,%edi
jle    11e7 <DVaxpy33+0xe7>
mov    0x10(%rsp),%r10
mov    0x8(%rsp),%r11
movsd  (%r8),%xmm8
movsd  0x8(%r8),%xmm9
movsd  0x10(%r8),%xmm10
movsd  0x18(%r8),%xmm11
movsd  0x20(%r8),%xmm12
movsd  0x28(%r8),%xmm13
movsd  0x30(%r8),%xmm6
movsd  0x38(%r8),%xmm7
movsd  0x40(%r8),%xmm0
mov    %edi,%edi
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
movsd  (%r9,%rax,8),%xmm2
movsd  (%r11,%rax,8),%xmm3
movsd  (%r10,%rax,8),%xmm1
movapd %xmm9,%xmm4
mulsd  %xmm3,%xmm4
movapd %xmm8,%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movapd %xmm10,%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm5,%xmm4
addsd  (%rsi,%rax,8),%xmm4
movsd  %xmm4,(%rsi,%rax,8)
movapd %xmm12,%xmm4
mulsd  %xmm3,%xmm4
movapd %xmm11,%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movapd %xmm13,%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm5,%xmm4
addsd  (%rdx,%rax,8),%xmm4
movsd  %xmm4,(%rdx,%rax,8)
mulsd  %xmm7,%xmm3
mulsd  %xmm6,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm0,%xmm1
addsd  %xmm2,%xmm1
addsd  (%rcx,%rax,8),%xmm1
movsd  %xmm1,(%rcx,%rax,8)
add    $0x1,%rax
cmp    %rax,%rdi
jne    1150 <DVaxpy33+0x50>
ret

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

LLVM IR (-O2):
define void @DVaxpy33(i32 %0, double* nocapture %1, double* nocapture %2, double* nocapture %3, double* nocapture %4, double* nocapture %5, double* nocapture %6, double* nocapture %7) {
%9 = load double, double* %4
%10 = getelementptr inbounds double, double* %4, i64 1
%11 = load double, double* %10
%12 = getelementptr inbounds double, double* %4, i64 2
%13 = load double, double* %12
%14 = getelementptr inbounds double, double* %4, i64 3
%15 = load double, double* %14
%16 = getelementptr inbounds double, double* %4, i64 4
%17 = load double, double* %16
%18 = getelementptr inbounds double, double* %4, i64 5
%19 = load double, double* %18
%20 = getelementptr inbounds double, double* %4, i64 6
%21 = load double, double* %20
%22 = getelementptr inbounds double, double* %4, i64 7
%23 = load double, double* %22
%24 = getelementptr inbounds double, double* %4, i64 8
%25 = load double, double* %24
%26 = icmp sgt i32 %0, 0
br i1 %26, label %27, label %57
27: ; preds = %8
%28 = zext i32 %0 to i64
br label %29
29: ; preds = %27, %29
%30 = phi i64 [ 0, %27 ], [ %55, %29 ]
%31 = getelementptr inbounds double, double* %5, i64 %30
%32 = load double, double* %31
%33 = getelementptr inbounds double, double* %6, i64 %30
%34 = load double, double* %33
%35 = getelementptr inbounds double, double* %7, i64 %30
%36 = load double, double* %35
%37 = fmul double %11, %34
%38 = tail call double @llvm.fmuladd.f64(double %9, double %32, double %37)
%39 = tail call double @llvm.fmuladd.f64(double %13, double %36, double %38)
%40 = getelementptr inbounds double, double* %1, i64 %30
%41 = load double, double* %40
%42 = fadd double %41, %39
store double %42, double* %40
%43 = fmul double %17, %34
%44 = tail call double @llvm.fmuladd.f64(double %15, double %32, double %43)
%45 = tail call double @llvm.fmuladd.f64(double %19, double %36, double %44)
%46 = getelementptr inbounds double, double* %2, i64 %30
%47 = load double, double* %46
%48 = fadd double %45, %47
store double %48, double* %46
%49 = fmul double %23, %34
%50 = tail call double @llvm.fmuladd.f64(double %21, double %32, double %49)
%51 = tail call double @llvm.fmuladd.f64(double %25, double %36, double %50)
%52 = getelementptr inbounds double, double* %3, i64 %30
%53 = load double, double* %52
%54 = fadd double %51, %53
store double %54, double* %52
%55 = add nuw nsw i64 %30, 1
%56 = icmp eq i64 %55, %28
br i1 %56, label %57, label %29
57: ; preds = %29, %8
ret void
}