void bw_expand2(float input[], float z_out[], float p_out[], int order,
                float z_vec[], float p_vec[]) {
  int i;
  for (i = 1; i <= order; i++)
    z_out[i] = z_vec[i] * input[i];
  for (i = 1; i <= order; i++)
    p_out[i] = p_vec[i] * input[i];
}


x86 assembly (clang, -O0):
<bw_expand2>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     1163 <bw_expand2+0x63>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1122 <bw_expand2+0x22>
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     11ab <bw_expand2+0xab>
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    116a <bw_expand2+0x6a>
pop    %rbp
ret

x86 assembly (clang, -O2):
<bw_expand2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
test   %ecx,%ecx
jle    1480 <bw_expand2+0x380>
mov    %ecx,%r11d
lea    0x1(%r11),%r10
mov    $0x1,%eax
cmp    $0x8,%ecx
jb     1234 <bw_expand2+0x134>
lea    0x4(%rsi),%rbx
lea    (%rsi,%r10,4),%rbp
lea    0x4(%r8),%r14
lea    (%r8,%r10,4),%r15
lea    0x4(%rdi),%r12
lea    (%rdi,%r10,4),%r13
cmp    %r15,%rbx
setb   %r15b
cmp    %rbp,%r14
setb   %r14b
cmp    %r13,%rbx
setb   %bl
cmp    %rbp,%r12
setb   %bpl
test   %r14b,%r15b
jne    1234 <bw_expand2+0x134>
and    %bpl,%bl
jne    1234 <bw_expand2+0x134>
mov    %r11d,%eax
and    $0xfffffff8,%eax
lea    -0x8(%rax),%rbx
mov    %rbx,%r14
shr    $0x3,%r14
add    $0x1,%r14
test   %rbx,%rbx
je     148b <bw_expand2+0x38b>
mov    %r14,%r15
and    $0xfffffffffffffffe,%r15
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movups 0x4(%r8,%rbx,4),%xmm0
movups 0x14(%r8,%rbx,4),%xmm1
movups 0x4(%rdi,%rbx,4),%xmm2
mulps  %xmm0,%xmm2
movups 0x14(%rdi,%rbx,4),%xmm0
mulps  %xmm1,%xmm0
movups %xmm2,0x4(%rsi,%rbx,4)
movups %xmm0,0x14(%rsi,%rbx,4)
movups 0x24(%r8,%rbx,4),%xmm0
movups 0x34(%r8,%rbx,4),%xmm1
movups 0x24(%rdi,%rbx,4),%xmm2
mulps  %xmm0,%xmm2
movups 0x34(%rdi,%rbx,4),%xmm0
mulps  %xmm1,%xmm0
movups %xmm2,0x24(%rsi,%rbx,4)
movups %xmm0,0x34(%rsi,%rbx,4)
add    $0x10,%rbx
add    $0xfffffffffffffffe,%r15
jne    11a0 <bw_expand2+0xa0>
test   $0x1,%r14b
je     1227 <bw_expand2+0x127>
shl    $0x2,%rbx
or     $0x4,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups (%rdi,%rbx,1),%xmm2
mulps  %xmm0,%xmm2
movups 0x10(%rdi,%rbx,1),%xmm0
mulps  %xmm1,%xmm0
movups %xmm2,(%rsi,%rbx,1)
movups %xmm0,0x10(%rsi,%rbx,1)
cmp    %rax,%r11
je     12c2 <bw_expand2+0x1c2>
or     $0x1,%rax
mov    %r10d,%ebx
sub    %eax,%ebx
mov    %rax,%r11
not    %r11
add    %r10,%r11
and    $0x3,%rbx
je     126a <bw_expand2+0x16a>
nopl   0x0(%rax,%rax,1)
movss  (%r8,%rax,4),%xmm0
mulss  (%rdi,%rax,4),%xmm0
movss  %xmm0,(%rsi,%rax,4)
add    $0x1,%rax
add    $0xffffffffffffffff,%rbx
jne    1250 <bw_expand2+0x150>
cmp    $0x3,%r11
jb     12c2 <bw_expand2+0x1c2>
movss  (%r8,%rax,4),%xmm0
mulss  (%rdi,%rax,4),%xmm0
movss  %xmm0,(%rsi,%rax,4)
movss  0x4(%r8,%rax,4),%xmm0
mulss  0x4(%rdi,%rax,4),%xmm0
movss  %xmm0,0x4(%rsi,%rax,4)
movss  0x8(%r8,%rax,4),%xmm0
mulss  0x8(%rdi,%rax,4),%xmm0
movss  %xmm0,0x8(%rsi,%rax,4)
movss  0xc(%r8,%rax,4),%xmm0
mulss  0xc(%rdi,%rax,4),%xmm0
movss  %xmm0,0xc(%rsi,%rax,4)
add    $0x4,%rax
cmp    %rax,%r10
jne    1270 <bw_expand2+0x170>
test   %ecx,%ecx
jle    1480 <bw_expand2+0x380>
lea    -0x1(%r10),%r8
mov    $0x1,%eax
cmp    $0x8,%r8
jae    1387 <bw_expand2+0x287>
mov    %r10d,%esi
sub    %eax,%esi
mov    %rax,%rcx
not    %rcx
add    %r10,%rcx
and    $0x3,%rsi
je     131a <bw_expand2+0x21a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movss  (%r9,%rax,4),%xmm0
mulss  (%rdi,%rax,4),%xmm0
movss  %xmm0,(%rdx,%rax,4)
add    $0x1,%rax
add    $0xffffffffffffffff,%rsi
jne    1300 <bw_expand2+0x200>
cmp    $0x3,%rcx
jb     1480 <bw_expand2+0x380>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movss  (%r9,%rax,4),%xmm0
mulss  (%rdi,%rax,4),%xmm0
movss  %xmm0,(%rdx,%rax,4)
movss  0x4(%r9,%rax,4),%xmm0
mulss  0x4(%rdi,%rax,4),%xmm0
movss  %xmm0,0x4(%rdx,%rax,4)
movss  0x8(%r9,%rax,4),%xmm0
mulss  0x8(%rdi,%rax,4),%xmm0
movss  %xmm0,0x8(%rdx,%rax,4)
movss  0xc(%r9,%rax,4),%xmm0
mulss  0xc(%rdi,%rax,4),%xmm0
movss  %xmm0,0xc(%rdx,%rax,4)
add    $0x4,%rax
cmp    %rax,%r10
jne    1330 <bw_expand2+0x230>
jmp    1480 <bw_expand2+0x380>
lea    0x4(%rdx),%rcx
lea    (%rdx,%r10,4),%rsi
lea    0x4(%r9),%r14
lea    (%r9,%r10,4),%rbx
lea    0x4(%rdi),%r11
lea    (%rdi,%r10,4),%rbp
cmp    %rbx,%rcx
setb   %r15b
cmp    %rsi,%r14
setb   %bl
cmp    %rbp,%rcx
setb   %cl
cmp    %rsi,%r11
setb   %sil
test   %bl,%r15b
jne    12dd <bw_expand2+0x1dd>
and    %sil,%cl
jne    12dd <bw_expand2+0x1dd>
mov    %r8,%rax
and    $0xfffffffffffffff8,%rax
lea    -0x8(%rax),%rsi
mov    %rsi,%rcx
shr    $0x3,%rcx
add    $0x1,%rcx
test   %rsi,%rsi
je     14a5 <bw_expand2+0x3a5>
mov    %rcx,%rbx
and    $0xfffffffffffffffe,%rbx
mov    $0x1,%esi
cs nopw 0x0(%rax,%rax,1)
movups (%r9,%rsi,4),%xmm0
movups 0x10(%r9,%rsi,4),%xmm1
movups (%rdi,%rsi,4),%xmm2
mulps  %xmm0,%xmm2
movups 0x10(%rdi,%rsi,4),%xmm0
mulps  %xmm1,%xmm0
movups %xmm2,(%rdx,%rsi,4)
movups %xmm0,0x10(%rdx,%rsi,4)
movups 0x20(%r9,%rsi,4),%xmm0
movups 0x30(%r9,%rsi,4),%xmm1
movups 0x20(%rdi,%rsi,4),%xmm2
mulps  %xmm0,%xmm2
movups 0x30(%rdi,%rsi,4),%xmm0
mulps  %xmm1,%xmm0
movups %xmm2,0x20(%rdx,%rsi,4)
movups %xmm0,0x30(%rdx,%rsi,4)
add    $0x10,%rsi
add    $0xfffffffffffffffe,%rbx
jne    1400 <bw_expand2+0x300>
test   $0x1,%cl
je     147b <bw_expand2+0x37b>
movups (%r9,%rsi,4),%xmm0
movups 0x10(%r9,%rsi,4),%xmm1
movups (%rdi,%rsi,4),%xmm2
mulps  %xmm0,%xmm2
movups 0x10(%rdi,%rsi,4),%xmm0
mulps  %xmm1,%xmm0
movups %xmm2,(%rdx,%rsi,4)
movups %xmm0,0x10(%rdx,%rsi,4)
cmp    %rax,%r8
jne    149c <bw_expand2+0x39c>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %ebx,%ebx
test   $0x1,%r14b
jne    11fc <bw_expand2+0xfc>
jmp    1227 <bw_expand2+0x127>
or     $0x1,%rax
jmp    12dd <bw_expand2+0x1dd>
mov    $0x1,%esi
test   $0x1,%cl
jne    1458 <bw_expand2+0x358>
jmp    147b <bw_expand2+0x37b>

LLVM IR (-O0):
define void @bw_expand2(float* %0, float* %1, float* %2, i32 %3, float* %4, float* %5) {
%7 = alloca float*
%8 = alloca float*
%9 = alloca float*
%10 = alloca i32
%11 = alloca float*
%12 = alloca float*
%13 = alloca i32
store float* %0, float** %7
store float* %1, float** %8
store float* %2, float** %9
store i32 %3, i32* %10
store float* %4, float** %11
store float* %5, float** %12
store i32 1, i32* %13
br label %14
14: ; preds = %34, %6
%15 = load i32, i32* %13
%16 = load i32, i32* %10
%17 = icmp sle i32 %15, %16
br i1 %17, label %18, label %37
18: ; preds = %14
%19 = load float*, float** %11
%20 = load i32, i32* %13
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds float, float* %19, i64 %21
%23 = load float, float* %22
%24 = load float*, float** %7
%25 = load i32, i32* %13
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds float, float* %24, i64 %26
%28 = load float, float* %27
%29 = fmul float %23, %28
%30 = load float*, float** %8
%31 = load i32, i32* %13
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds float, float* %30, i64 %32
store float %29, float* %33
br label %34
34: ; preds = %18
%35 = load i32, i32* %13
%36 = add nsw i32 %35, 1
store i32 %36, i32* %13
br label %14
37: ; preds = %14
store i32 1, i32* %13
br label %38
38: ; preds = %58, %37
%39 = load i32, i32* %13
%40 = load i32, i32* %10
%41 = icmp sle i32 %39, %40
br i1 %41, label %42, label %61
42: ; preds = %38
%43 = load float*, float** %12
%44 = load i32, i32* %13
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds float, float* %43, i64 %45
%47 = load float, float* %46
%48 = load float*, float** %7
%49 = load i32, i32* %13
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds float, float* %48, i64 %50
%52 = load float, float* %51
%53 = fmul float %47, %52
%54 = load float*, float** %9
%55 = load i32, i32* %13
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds float, float* %54, i64 %56
store float %53, float* %57
br label %58
58: ; preds = %42
%59 = load i32, i32* %13
%60 = add nsw i32 %59, 1
store i32 %60, i32* %13
br label %38
61: ; preds = %38
ret void
}

LLVM IR (-O2):
define void @bw_expand2(float* nocapture %0, float* nocapture writeonly %1, float* nocapture writeonly %2, i32 %3, float* nocapture %4, float* nocapture %5) {
%7 = icmp slt i32 %3, 1
br i1 %7, label %312, label %8
8: ; preds = %6
%9 = add nuw i32 %3, 1
%10 = zext i32 %9 to i64
%11 = add nsw i64 %10, -1
%12 = icmp ult i64 %11, 8
br i1 %12, label %106, label %13
13: ; preds = %8
%14 = getelementptr float, float* %1, i64 1
%15 = getelementptr float, float* %1, i64 %10
%16 = getelementptr float, float* %4, i64 1
%17 = getelementptr float, float* %4, i64 %10
%18 = getelementptr float, float* %0, i64 1
%19 = getelementptr float, float* %0, i64 %10
%20 = icmp ult float* %14, %17
%21 = icmp ult float* %16, %15
%22 = and i1 %20, %21
%23 = icmp ult float* %14, %19
%24 = icmp ult float* %18, %15
%25 = and i1 %23, %24
%26 = or i1 %22, %25
br i1 %26, label %106, label %27
27: ; preds = %13
%28 = and i64 %11, -8
%29 = or i64 %28, 1
%30 = add nsw i64 %28, -8
%31 = lshr exact i64 %30, 3
%32 = add nuw nsw i64 %31, 1
%33 = and i64 %32, 1
%34 = icmp eq i64 %30, 0
br i1 %34, label %81, label %35
35: ; preds = %27
%36 = and i64 %32, 4611686018427387902
br label %37
37: ; preds = %37, %35
%38 = phi i64 [ 0, %35 ], [ %78, %37 ]
%39 = phi i64 [ 0, %35 ], [ %79, %37 ]
%40 = or i64 %38, 1
%41 = getelementptr inbounds float, float* %4, i64 %40
%42 = bitcast float* %41 to <4 x float>*
%43 = load <4 x float>, <4 x float>* %42
%44 = getelementptr inbounds float, float* %41, i64 4
%45 = bitcast float* %44 to <4 x float>*
%46 = load <4 x float>, <4 x float>* %45
%47 = getelementptr inbounds float, float* %0, i64 %40
%48 = bitcast float* %47 to <4 x float>*
%49 = load <4 x float>, <4 x float>* %48
%50 = getelementptr inbounds float, float* %47, i64 4
%51 = bitcast float* %50 to <4 x float>*
%52 = load <4 x float>, <4 x float>* %51
%53 = fmul <4 x float> %43, %49
%54 = fmul <4 x float> %46, %52
%55 = getelementptr inbounds float, float* %1, i64 %40
%56 = bitcast float* %55 to <4 x float>*
store <4 x float> %53, <4 x float>* %56
%57 = getelementptr inbounds float, float* %55, i64 4
%58 = bitcast float* %57 to <4 x float>*
store <4 x float> %54, <4 x float>* %58
%59 = or i64 %38, 9
%60 = getelementptr inbounds float, float* %4, i64 %59
%61 = bitcast float* %60 to <4 x float>*
%62 = load <4 x float>, <4 x float>* %61
%63 = getelementptr inbounds float, float* %60, i64 4
%64 = bitcast float* %63 to <4 x float>*
%65 = load <4 x float>, <4 x float>* %64
%66 = getelementptr inbounds float, float* %0, i64 %59
%67 = bitcast float* %66 to <4 x float>*
%68 = load <4 x float>, <4 x float>* %67
%69 = getelementptr inbounds float, float* %66, i64 4
%70 = bitcast float* %69 to <4 x float>*
%71 = load <4 x float>, <4 x float>* %70
%72 = fmul <4 x float> %62, %68
%73 = fmul <4 x float> %65, %71
%74 = getelementptr inbounds float, float* %1, i64 %59
%75 = bitcast float* %74 to <4 x float>*
store <4 x float> %72, <4 x float>* %75
%76 = getelementptr inbounds float, float* %74, i64 4
%77 = bitcast float* %76 to <4 x float>*
store <4 x float> %73, <4 x float>* %77
%78 = add nuw i64 %38, 16
%79 = add i64 %39, 2
%80 = icmp eq i64 %79, %36
br i1 %80, label %81, label %37
81: ; preds = %37, %27
%82 = phi i64 [ 0, %27 ], [ %78, %37 ]
%83 = icmp eq i64 %33, 0
br i1 %83, label %104, label %84
84: ; preds = %81
%85 = or i64 %82, 1
%86 = getelementptr inbounds float, float* %4, i64 %85
%87 = bitcast float* %86 to <4 x float>*
%88 = load <4 x float>, <4 x float>* %87
%89 = getelementptr inbounds float, float* %86, i64 4
%90 = bitcast float* %89 to <4 x float>*
%91 = load <4 x float>, <4 x float>* %90
%92 = getelementptr inbounds float, float* %0, i64 %85
%93 = bitcast float* %92 to <4 x float>*
%94 = load <4 x float>, <4 x float>* %93
%95 = getelementptr inbounds float, float* %92, i64 4
%96 = bitcast float* %95 to <4 x float>*
%97 = load <4 x float>, <4 x float>* %96
%98 = fmul <4 x float> %88, %94
%99 = fmul <4 x float> %91, %97
%100 = getelementptr inbounds float, float* %1, i64 %85
%101 = bitcast float* %100 to <4 x float>*
store <4 x float> %98, <4 x float>* %101
%102 = getelementptr inbounds float, float* %100, i64 4
%103 = bitcast float* %102 to <4 x float>*
store <4 x float> %99, <4 x float>* %103
br label %104
104: ; preds = %81, %84
%105 = icmp eq i64 %11, %28
br i1 %105, label %128, label %106
106: ; preds = %13, %8, %104
%107 = phi i64 [ 1, %13 ], [ 1, %8 ], [ %29, %104 ]
%108 = sub nsw i64 %10, %107
%109 = xor i64 %107, -1
%110 = add nsw i64 %109, %10
%111 = and i64 %108, 3
%112 = icmp eq i64 %111, 0
br i1 %112, label %125, label %113
113: ; preds = %106, %113
%114 = phi i64 [ %122, %113 ], [ %107, %106 ]
%115 = phi i64 [ %123, %113 ], [ 0, %106 ]
%116 = getelementptr inbounds float, float* %4, i64 %114
%117 = load float, float* %116
%118 = getelementptr inbounds float, float* %0, i64 %114
%119 = load float, float* %118
%120 = fmul float %117, %119
%121 = getelementptr inbounds float, float* %1, i64 %114
store float %120, float* %121
%122 = add nuw nsw i64 %114, 1
%123 = add i64 %115, 1
%124 = icmp eq i64 %123, %111
br i1 %124, label %125, label %113
125: ; preds = %113, %106
%126 = phi i64 [ %107, %106 ], [ %122, %113 ]
%127 = icmp ult i64 %110, 3
br i1 %127, label %128, label %250
128: ; preds = %125, %250, %104
br i1 %7, label %312, label %129
129: ; preds = %128
%130 = add nuw i32 %3, 1
%131 = zext i32 %130 to i64
%132 = add nsw i64 %10, -1
%133 = icmp ult i64 %132, 8
br i1 %133, label %228, label %134
134: ; preds = %129
%135 = getelementptr float, float* %2, i64 1
%136 = getelementptr float, float* %2, i64 %10
%137 = getelementptr float, float* %5, i64 1
%138 = getelementptr float, float* %5, i64 %10
%139 = getelementptr float, float* %0, i64 1
%140 = getelementptr float, float* %0, i64 %10
%141 = icmp ult float* %135, %138
%142 = icmp ult float* %137, %136
%143 = and i1 %141, %142
%144 = icmp ult float* %135, %140
%145 = icmp ult float* %139, %136
%146 = and i1 %144, %145
%147 = or i1 %143, %146
br i1 %147, label %228, label %148
148: ; preds = %134
%149 = and i64 %132, -8
%150 = or i64 %149, 1
%151 = add nsw i64 %149, -8
%152 = lshr exact i64 %151, 3
%153 = add nuw nsw i64 %152, 1
%154 = and i64 %153, 1
%155 = icmp eq i64 %151, 0
br i1 %155, label %204, label %156
156: ; preds = %148
%157 = and i64 %153, 4611686018427387902
br label %158
158: ; preds = %158, %156
%159 = phi i64 [ 0, %156 ], [ %199, %158 ]
%160 = phi i64 [ 0, %156 ], [ %200, %158 ]
%161 = or i64 %159, 1
%162 = getelementptr inbounds float, float* %5, i64 %161
%163 = bitcast float* %162 to <4 x float>*
%164 = load <4 x float>, <4 x float>* %163
%165 = getelementptr inbounds float, float* %162, i64 4
%166 = bitcast float* %165 to <4 x float>*
%167 = load <4 x float>, <4 x float>* %166
%168 = getelementptr inbounds float, float* %0, i64 %161
%169 = bitcast float* %168 to <4 x float>*
%170 = load <4 x float>, <4 x float>* %169
%171 = getelementptr inbounds float, float* %168, i64 4
%172 = bitcast float* %171 to <4 x float>*
%173 = load <4 x float>, <4 x float>* %172
%174 = fmul <4 x float> %164, %170
%175 = fmul <4 x float> %167, %173
%176 = getelementptr inbounds float, float* %2, i64 %161
%177 = bitcast float* %176 to <4 x float>*
store <4 x float> %174, <4 x float>* %177
%178 = getelementptr inbounds float, float* %176, i64 4
%179 = bitcast float* %178 to <4 x float>*
store <4 x float> %175, <4 x float>* %179
%180 = or i64 %159, 9
%181 = getelementptr inbounds float, float* %5, i64 %180
%182 = bitcast float* %181 to <4 x float>*
%183 = load <4 x float>, <4 x float>* %182
%184 = getelementptr inbounds float, float* %181, i64 4
%185 = bitcast float* %184 to <4 x float>*
%186 = load <4 x float>, <4 x float>* %185
%187 = getelementptr inbounds float, float* %0, i64 %180
%188 = bitcast float* %187 to <4 x float>*
%189 = load <4 x float>, <4 x float>* %188
%190 = getelementptr inbounds float, float* %187, i64 4
%191 = bitcast float* %190 to <4 x float>*
%192 = load <4 x float>, <4 x float>* %191
%193 = fmul <4 x float> %183, %189
%194 = fmul <4 x float> %186, %192
%195 = getelementptr inbounds float, float* %2, i64 %180
%196 = bitcast float* %195 to <4 x float>*
store <4 x float> %193, <4 x float>* %196
%197 = getelementptr inbounds float, float* %195, i64 4
%198 = bitcast float* %197 to <4 x float>*
store <4 x float> %194, <4 x float>* %198
%199 = add nuw i64 %159, 16
%200 = add i64 %160, 2
%201 = icmp eq i64 %200, %157
br i1 %201, label %202, label %158
202: ; preds = %158
%203 = or i64 %199, 1
br label %204
204: ; preds = %202, %148
%205 = phi i64 [ 1, %148 ], [ %203, %202 ]
%206 = icmp eq i64 %154, 0
br i1 %206, label %226, label %207
207: ; preds = %204
%208 = getelementptr inbounds float, float* %5, i64 %205
%209 = bitcast float* %208 to <4 x float>*
%210 = load <4 x float>, <4 x float>* %209
%211 = getelementptr inbounds float, float* %208, i64 4
%212 = bitcast float* %211 to <4 x float>*
%213 = load <4 x float>, <4 x float>* %212
%214 = getelementptr inbounds float, float* %0, i64 %205
%215 = bitcast float* %214 to <4 x float>*
%216 = load <4 x float>, <4 x float>* %215
%217 = getelementptr inbounds float, float* %214, i64 4
%218 = bitcast float* %217 to <4 x float>*
%219 = load <4 x float>, <4 x float>* %218
%220 = fmul <4 x float> %210, %216
%221 = fmul <4 x float> %213, %219
%222 = getelementptr inbounds float, float* %2, i64 %205
%223 = bitcast float* %222 to <4 x float>*
store <4 x float> %220, <4 x float>* %223
%224 = getelementptr inbounds float, float* %222, i64 4
%225 = bitcast float* %224 to <4 x float>*
store <4 x float> %221, <4 x float>* %225
br label %226
226: ; preds = %204, %207
%227 = icmp eq i64 %132, %149
br i1 %227, label %312, label %228
228: ; preds = %134, %129, %226
%229 = phi i64 [ 1, %134 ], [ 1, %129 ], [ %150, %226 ]
%230 = sub nsw i64 %10, %229
%231 = xor i64 %229, -1
%232 = add nsw i64 %231, %10
%233 = and i64 %230, 3
%234 = icmp eq i64 %233, 0
br i1 %234, label %247, label %235
235: ; preds = %228, %235
%236 = phi i64 [ %244, %235 ], [ %229, %228 ]
%237 = phi i64 [ %245, %235 ], [ 0, %228 ]
%238 = getelementptr inbounds float, float* %5, i64 %236
%239 = load float, float* %238
%240 = getelementptr inbounds float, float* %0, i64 %236
%241 = load float, float* %240
%242 = fmul float %239, %241
%243 = getelementptr inbounds float, float* %2, i64 %236
store float %242, float* %243
%244 = add nuw nsw i64 %236, 1
%245 = add i64 %237, 1
%246 = icmp eq i64 %245, %233
br i1 %246, label %247, label %235
247: ; preds = %235, %228
%248 = phi i64 [ %229, %228 ], [ %244, %235 ]
%249 = icmp ult i64 %232, 3
br i1 %249, label %312, label %281
250: ; preds = %125, %250
%251 = phi i64 [ %279, %250 ], [ %126, %125 ]
%252 = getelementptr inbounds float, float* %4, i64 %251
%253 = load float, float* %252
%254 = getelementptr inbounds float, float* %0, i64 %251
%255 = load float, float* %254
%256 = fmul float %253, %255
%257 = getelementptr inbounds float, float* %1, i64 %251
store float %256, float* %257
%258 = add nuw nsw i64 %251, 1
%259 = getelementptr inbounds float, float* %4, i64 %258
%260 = load float, float* %259
%261 = getelementptr inbounds float, float* %0, i64 %258
%262 = load float, float* %261
%263 = fmul float %260, %262
%264 = getelementptr inbounds float, float* %1, i64 %258
store float %263, float* %264
%265 = add nuw nsw i64 %251, 2
%266 = getelementptr inbounds float, float* %4, i64 %265
%267 = load float, float* %266
%268 = getelementptr inbounds float, float* %0, i64 %265
%269 = load float, float* %268
%270 = fmul float %267, %269
%271 = getelementptr inbounds float, float* %1, i64 %265
store float %270, float* %271
%272 = add nuw nsw i64 %251, 3
%273 = getelementptr inbounds float, float* %4, i64 %272
%274 = load float, float* %273
%275 = getelementptr inbounds float, float* %0, i64 %272
%276 = load float, float* %275
%277 = fmul float %274, %276
%278 = getelementptr inbounds float, float* %1, i64 %272
store float %277, float* %278
%279 = add nuw nsw i64 %251, 4
%280 = icmp eq i64 %279, %10
br i1 %280, label %128, label %250
281: ; preds = %247, %281
%282 = phi i64 [ %310, %281 ], [ %248, %247 ]
%283 = getelementptr inbounds float, float* %5, i64 %282
%284 = load float, float* %283
%285 = getelementptr inbounds float, float* %0, i64 %282
%286 = load float, float* %285
%287 = fmul float %284, %286
%288 = getelementptr inbounds float, float* %2, i64 %282
store float %287, float* %288
%289 = add nuw nsw i64 %282, 1
%290 = getelementptr inbounds float, float* %5, i64 %289
%291 = load float, float* %290
%292 = getelementptr inbounds float, float* %0, i64 %289
%293 = load float, float* %292
%294 = fmul float %291, %293
%295 = getelementptr inbounds float, float* %2, i64 %289
store float %294, float* %295
%296 = add nuw nsw i64 %282, 2
%297 = getelementptr inbounds float, float* %5, i64 %296
%298 = load float, float* %297
%299 = getelementptr inbounds float, float* %0, i64 %296
%300 = load float, float* %299
%301 = fmul float %298, %300
%302 = getelementptr inbounds float, float* %2, i64 %296
store float %301, float* %302
%303 = add nuw nsw i64 %282, 3
%304 = getelementptr inbounds float, float* %5, i64 %303
%305 = load float, float* %304
%306 = getelementptr inbounds float, float* %0, i64 %303
%307 = load float, float* %306
%308 = fmul float %305, %307
%309 = getelementptr inbounds float, float* %2, i64 %303
store float %308, float* %309
%310 = add nuw nsw i64 %282, 4
%311 = icmp eq i64 %310, %131
br i1 %311, label %312, label %281
312: ; preds = %247, %281, %226, %6, %128
ret void
}