void btrfly(int j, double wk1r, double wk1i, double wk2r, double wk2i,
            double wk3r, double wk3i, double *a, double *b, double *c,
            double *d) {
  double x0r = a[j] + b[j];
  double x0i = a[j + 1] + b[j + 1];
  double x1r = a[j] - b[j];
  double x1i = a[j + 1] - b[j + 1];
  double x2r = c[j] + d[j];
  double x2i = c[j + 1] + d[j + 1];
  double x3r = c[j] - d[j];
  double x3i = c[j + 1] - d[j + 1];
  a[j] = x0r + x2r;
  a[j + 1] = x0i + x2i;
  x0r -= x2r;
  x0i -= x2i;
  c[j] = wk2r * x0r - wk2i * x0i;
  c[j + 1] = wk2r * x0i + wk2i * x0r;
  x0r = x1r - x3i;
  x0i = x1i + x3r;
  b[j] = wk1r * x0r - wk1i * x0i;
  b[j + 1] = wk1r * x0i + wk1i * x0r;
  x0r = x1r + x3i;
  x0i = x1i - x3r;
  d[j] = wk3r * x0r - wk3i * x0i;
  d[j + 1] = wk3r * x0i + wk3i * x0r;
}


x86 assembly (clang, -O0):
<btrfly>:
push   %rbp
mov    %rsp,%rbp
sub    $0x18,%rsp
mov    %edi,-0x4(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
mov    %rsi,-0x40(%rbp)
mov    %rdx,-0x48(%rbp)
mov    %rcx,-0x50(%rbp)
mov    %r8,-0x58(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x4(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x48(%rbp),%rax
movslq -0x4(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x48(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x4(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x48(%rbp),%rax
movslq -0x4(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x48(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x50(%rbp),%rax
movslq -0x4(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
movslq -0x4(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x50(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x50(%rbp),%rax
movslq -0x4(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
movslq -0x4(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x50(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x4(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x68(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movslq -0x4(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x20(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x70(%rbp),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movslq -0x4(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x70(%rbp),%xmm0
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x78(%rbp),%xmm0
subsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movslq -0x4(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x30(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
add    $0x18,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<btrfly>:
movslq %edi,%rax
movupd (%rsi,%rax,8),%xmm9
movupd (%rdx,%rax,8),%xmm7
movapd %xmm9,%xmm6
addpd  %xmm7,%xmm6
subpd  %xmm7,%xmm9
movupd (%rcx,%rax,8),%xmm11
movupd (%r8,%rax,8),%xmm8
movapd %xmm11,%xmm10
addpd  %xmm8,%xmm10
subpd  %xmm8,%xmm11
shufpd $0x1,%xmm11,%xmm11
movapd %xmm6,%xmm7
addpd  %xmm10,%xmm7
movupd %xmm7,(%rsi,%rax,8)
subpd  %xmm10,%xmm6
movapd %xmm6,%xmm7
unpckhpd %xmm6,%xmm7
movapd 0xe9f(%rip),%xmm8
xorpd  %xmm8,%xmm7
unpcklpd %xmm6,%xmm7
unpcklpd %xmm3,%xmm3
mulpd  %xmm7,%xmm3
unpcklpd %xmm2,%xmm2
mulpd  %xmm6,%xmm2
addpd  %xmm3,%xmm2
movupd %xmm2,(%rcx,%rax,8)
movapd %xmm9,%xmm2
subpd  %xmm11,%xmm2
addpd  %xmm9,%xmm11
movapd %xmm11,%xmm3
movsd  %xmm2,%xmm3
movapd %xmm11,%xmm6
unpckhpd %xmm11,%xmm6
xorpd  %xmm8,%xmm6
unpcklpd %xmm2,%xmm6
unpcklpd %xmm1,%xmm1
mulpd  %xmm6,%xmm1
unpcklpd %xmm0,%xmm0
mulpd  %xmm3,%xmm0
addpd  %xmm1,%xmm0
movupd %xmm0,(%rdx,%rax,8)
movapd %xmm2,%xmm0
movsd  %xmm11,%xmm0
unpckhpd %xmm2,%xmm2
xorpd  %xmm8,%xmm2
unpcklpd %xmm11,%xmm2
unpcklpd %xmm5,%xmm5
mulpd  %xmm2,%xmm5
unpcklpd %xmm4,%xmm4
mulpd  %xmm0,%xmm4
addpd  %xmm5,%xmm4
movupd %xmm4,(%r8,%rax,8)
ret

LLVM IR (-O0):
define void @btrfly(i32 %0, double %1, double %2, double %3, double %4, double %5, double %6, double* %7, double* %8, double* %9, double* %10) {
%12 = alloca i32
%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 double
%30 = alloca double
store i32 %0, i32* %12
store double %1, double* %13
store double %2, double* %14
store double %3, double* %15
store double %4, double* %16
store double %5, double* %17
store double %6, double* %18
store double* %7, double** %19
store double* %8, double** %20
store double* %9, double** %21
store double* %10, double** %22
%31 = load double*, double** %19
%32 = load i32, i32* %12
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds double, double* %31, i64 %33
%35 = load double, double* %34
%36 = load double*, double** %20
%37 = load i32, i32* %12
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds double, double* %36, i64 %38
%40 = load double, double* %39
%41 = fadd double %35, %40
store double %41, double* %23
%42 = load double*, double** %19
%43 = load i32, i32* %12
%44 = add nsw i32 %43, 1
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds double, double* %42, i64 %45
%47 = load double, double* %46
%48 = load double*, double** %20
%49 = load i32, i32* %12
%50 = add nsw i32 %49, 1
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds double, double* %48, i64 %51
%53 = load double, double* %52
%54 = fadd double %47, %53
store double %54, double* %24
%55 = load double*, double** %19
%56 = load i32, i32* %12
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds double, double* %55, i64 %57
%59 = load double, double* %58
%60 = load double*, double** %20
%61 = load i32, i32* %12
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds double, double* %60, i64 %62
%64 = load double, double* %63
%65 = fsub double %59, %64
store double %65, double* %25
%66 = load double*, double** %19
%67 = load i32, i32* %12
%68 = add nsw i32 %67, 1
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds double, double* %66, i64 %69
%71 = load double, double* %70
%72 = load double*, double** %20
%73 = load i32, i32* %12
%74 = add nsw i32 %73, 1
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds double, double* %72, i64 %75
%77 = load double, double* %76
%78 = fsub double %71, %77
store double %78, double* %26
%79 = load double*, double** %21
%80 = load i32, i32* %12
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds double, double* %79, i64 %81
%83 = load double, double* %82
%84 = load double*, double** %22
%85 = load i32, i32* %12
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds double, double* %84, i64 %86
%88 = load double, double* %87
%89 = fadd double %83, %88
store double %89, double* %27
%90 = load double*, double** %21
%91 = load i32, i32* %12
%92 = add nsw i32 %91, 1
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds double, double* %90, i64 %93
%95 = load double, double* %94
%96 = load double*, double** %22
%97 = load i32, i32* %12
%98 = add nsw i32 %97, 1
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds double, double* %96, i64 %99
%101 = load double, double* %100
%102 = fadd double %95, %101
store double %102, double* %28
%103 = load double*, double** %21
%104 = load i32, i32* %12
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds double, double* %103, i64 %105
%107 = load double, double* %106
%108 = load double*, double** %22
%109 = load i32, i32* %12
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds double, double* %108, i64 %110
%112 = load double, double* %111
%113 = fsub double %107, %112
store double %113, double* %29
%114 = load double*, double** %21
%115 = load i32, i32* %12
%116 = add nsw i32 %115, 1
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds double, double* %114, i64 %117
%119 = load double, double* %118
%120 = load double*, double** %22
%121 = load i32, i32* %12
%122 = add nsw i32 %121, 1
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds double, double* %120, i64 %123
%125 = load double, double* %124
%126 = fsub double %119, %125
store double %126, double* %30
%127 = load double, double* %23
%128 = load double, double* %27
%129 = fadd double %127, %128
%130 = load double*, double** %19
%131 = load i32, i32* %12
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds double, double* %130, i64 %132
store double %129, double* %133
%134 = load double, double* %24
%135 = load double, double* %28
%136 = fadd double %134, %135
%137 = load double*, double** %19
%138 = load i32, i32* %12
%139 = add nsw i32 %138, 1
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds double, double* %137, i64 %140
store double %136, double* %141
%142 = load double, double* %27
%143 = load double, double* %23
%144 = fsub double %143, %142
store double %144, double* %23
%145 = load double, double* %28
%146 = load double, double* %24
%147 = fsub double %146, %145
store double %147, double* %24
%148 = load double, double* %15
%149 = load double, double* %23
%150 = load double, double* %16
%151 = load double, double* %24
%152 = fmul double %150, %151
%153 = fneg double %152
%154 = call double @llvm.fmuladd.f64(double %148, double %149, double %153)
%155 = load double*, double** %21
%156 = load i32, i32* %12
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds double, double* %155, i64 %157
store double %154, double* %158
%159 = load double, double* %15
%160 = load double, double* %24
%161 = load double, double* %16
%162 = load double, double* %23
%163 = fmul double %161, %162
%164 = call double @llvm.fmuladd.f64(double %159, double %160, double %163)
%165 = load double*, double** %21
%166 = load i32, i32* %12
%167 = add nsw i32 %166, 1
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds double, double* %165, i64 %168
store double %164, double* %169
%170 = load double, double* %25
%171 = load double, double* %30
%172 = fsub double %170, %171
store double %172, double* %23
%173 = load double, double* %26
%174 = load double, double* %29
%175 = fadd double %173, %174
store double %175, double* %24
%176 = load double, double* %13
%177 = load double, double* %23
%178 = load double, double* %14
%179 = load double, double* %24
%180 = fmul double %178, %179
%181 = fneg double %180
%182 = call double @llvm.fmuladd.f64(double %176, double %177, double %181)
%183 = load double*, double** %20
%184 = load i32, i32* %12
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds double, double* %183, i64 %185
store double %182, double* %186
%187 = load double, double* %13
%188 = load double, double* %24
%189 = load double, double* %14
%190 = load double, double* %23
%191 = fmul double %189, %190
%192 = call double @llvm.fmuladd.f64(double %187, double %188, double %191)
%193 = load double*, double** %20
%194 = load i32, i32* %12
%195 = add nsw i32 %194, 1
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds double, double* %193, i64 %196
store double %192, double* %197
%198 = load double, double* %25
%199 = load double, double* %30
%200 = fadd double %198, %199
store double %200, double* %23
%201 = load double, double* %26
%202 = load double, double* %29
%203 = fsub double %201, %202
store double %203, double* %24
%204 = load double, double* %17
%205 = load double, double* %23
%206 = load double, double* %18
%207 = load double, double* %24
%208 = fmul double %206, %207
%209 = fneg double %208
%210 = call double @llvm.fmuladd.f64(double %204, double %205, double %209)
%211 = load double*, double** %22
%212 = load i32, i32* %12
%213 = sext i32 %212 to i64
%214 = getelementptr inbounds double, double* %211, i64 %213
store double %210, double* %214
%215 = load double, double* %17
%216 = load double, double* %24
%217 = load double, double* %18
%218 = load double, double* %23
%219 = fmul double %217, %218
%220 = call double @llvm.fmuladd.f64(double %215, double %216, double %219)
%221 = load double*, double** %22
%222 = load i32, i32* %12
%223 = add nsw i32 %222, 1
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds double, double* %221, i64 %224
store double %220, double* %225
ret void
}

LLVM IR (-O2):
define void @btrfly(i32 %0, double %1, double %2, double %3, double %4, double %5, double %6, double* nocapture %7, double* nocapture %8, double* nocapture %9, double* nocapture %10) {
%12 = sext i32 %0 to i64
%13 = getelementptr inbounds double, double* %7, i64 %12
%14 = getelementptr inbounds double, double* %8, i64 %12
%15 = bitcast double* %13 to <2 x double>*
%16 = load <2 x double>, <2 x double>* %15
%17 = bitcast double* %14 to <2 x double>*
%18 = load <2 x double>, <2 x double>* %17
%19 = fadd <2 x double> %16, %18
%20 = fsub <2 x double> %16, %18
%21 = getelementptr inbounds double, double* %9, i64 %12
%22 = getelementptr inbounds double, double* %10, i64 %12
%23 = bitcast double* %21 to <2 x double>*
%24 = load <2 x double>, <2 x double>* %23
%25 = bitcast double* %22 to <2 x double>*
%26 = load <2 x double>, <2 x double>* %25
%27 = fadd <2 x double> %24, %26
%28 = fsub <2 x double> %24, %26
%29 = shufflevector <2 x double> %28, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%30 = fadd <2 x double> %19, %27
%31 = bitcast double* %13 to <2 x double>*
store <2 x double> %30, <2 x double>* %31
%32 = fsub <2 x double> %19, %27
%33 = extractelement <2 x double> %32, i64 1
%34 = fneg double %33
%35 = insertelement <2 x double> poison, double %34, i64 0
%36 = shufflevector <2 x double> %35, <2 x double> %32, <2 x i32> <i32 0, i32 2>
%37 = insertelement <2 x double> poison, double %4, i64 0
%38 = shufflevector <2 x double> %37, <2 x double> poison, <2 x i32> zeroinitializer
%39 = fmul <2 x double> %36, %38
%40 = insertelement <2 x double> poison, double %3, i64 0
%41 = shufflevector <2 x double> %40, <2 x double> poison, <2 x i32> zeroinitializer
%42 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %41, <2 x double> %32, <2 x double> %39)
%43 = bitcast double* %21 to <2 x double>*
store <2 x double> %42, <2 x double>* %43
%44 = fsub <2 x double> %20, %29
%45 = fadd <2 x double> %20, %29
%46 = shufflevector <2 x double> %44, <2 x double> %45, <2 x i32> <i32 0, i32 3>
%47 = extractelement <2 x double> %45, i64 1
%48 = fneg double %47
%49 = insertelement <2 x double> poison, double %48, i64 0
%50 = shufflevector <2 x double> %49, <2 x double> %44, <2 x i32> <i32 0, i32 2>
%51 = insertelement <2 x double> poison, double %2, i64 0
%52 = shufflevector <2 x double> %51, <2 x double> poison, <2 x i32> zeroinitializer
%53 = fmul <2 x double> %50, %52
%54 = insertelement <2 x double> poison, double %1, i64 0
%55 = shufflevector <2 x double> %54, <2 x double> poison, <2 x i32> zeroinitializer
%56 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %55, <2 x double> %46, <2 x double> %53)
%57 = bitcast double* %14 to <2 x double>*
store <2 x double> %56, <2 x double>* %57
%58 = shufflevector <2 x double> %45, <2 x double> %44, <2 x i32> <i32 0, i32 3>
%59 = extractelement <2 x double> %44, i64 1
%60 = fneg double %59
%61 = insertelement <2 x double> poison, double %60, i64 0
%62 = shufflevector <2 x double> %61, <2 x double> %45, <2 x i32> <i32 0, i32 2>
%63 = insertelement <2 x double> poison, double %6, i64 0
%64 = shufflevector <2 x double> %63, <2 x double> poison, <2 x i32> zeroinitializer
%65 = fmul <2 x double> %62, %64
%66 = insertelement <2 x double> poison, double %5, i64 0
%67 = shufflevector <2 x double> %66, <2 x double> poison, <2 x i32> zeroinitializer
%68 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %67, <2 x double> %58, <2 x double> %65)
%69 = bitcast double* %22 to <2 x double>*
store <2 x double> %68, <2 x double>* %69
ret void
}