void mdct_butterfly_generic(double *trig, double *x, int points, int trigint) {
  double *x1 = x + points - 8;
  double *x2 = x + (points >> 1) - 8;
  double r0;
  double r1;
  do {
    r0 = x1[6] - x2[6];
    r1 = x1[7] - x2[7];
    x1[6] += x2[6];
    x1[7] += x2[7];
    x2[6] = (r1 * trig[1] + r0 * trig[0]);
    x2[7] = (r1 * trig[0] - r0 * trig[1]);
    trig += trigint;
    r0 = x1[4] - x2[4];
    r1 = x1[5] - x2[5];
    x1[4] += x2[4];
    x1[5] += x2[5];
    x2[4] = (r1 * trig[1] + r0 * trig[0]);
    x2[5] = (r1 * trig[0] - r0 * trig[1]);
    trig += trigint;
    r0 = x1[2] - x2[2];
    r1 = x1[3] - x2[3];
    x1[2] += x2[2];
    x1[3] += x2[3];
    x2[2] = (r1 * trig[1] + r0 * trig[0]);
    x2[3] = (r1 * trig[0] - r0 * trig[1]);
    trig += trigint;
    r0 = x1[0] - x2[0];
    r1 = x1[1] - x2[1];
    x1[0] += x2[0];
    x1[1] += x2[1];
    x2[0] = (r1 * trig[1] + r0 * trig[0]);
    x2[1] = (r1 * trig[0] - r0 * trig[1]);
    trig += trigint;
    x1 -= 8;
    x2 -= 8;
  } while (x2 >= x);
}


x86 assembly (clang, -O0):
<mdct_butterfly_generic>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xffffffffffffffc0,%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
sar    $0x1,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xffffffffffffffc0,%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x20(%rbp),%rax
addsd  0x30(%rax),%xmm0
movsd  %xmm0,0x30(%rax)
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x20(%rbp),%rax
addsd  0x38(%rax),%xmm0
movsd  %xmm0,0x38(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm2
movsd  -0x30(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mulsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x30(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x18(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x20(%rbp),%rax
addsd  0x20(%rax),%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x20(%rbp),%rax
addsd  0x28(%rax),%xmm0
movsd  %xmm0,0x28(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm2
movsd  -0x30(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mulsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x30(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x18(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
addsd  0x10(%rax),%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
addsd  0x18(%rax),%xmm0
movsd  %xmm0,0x18(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm2
movsd  -0x30(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mulsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x30(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x18(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
addsd  0x8(%rax),%xmm0
movsd  %xmm0,0x8(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm2
movsd  -0x30(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mulsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x30(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x20(%rbp),%rax
add    $0xffffffffffffffc0,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffc0,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
cmp    -0x10(%rbp),%rax
jae    1145 <mdct_butterfly_generic+0x45>
pop    %rbp
ret

x86 assembly (clang, -O2):
<mdct_butterfly_generic>:
movslq %edx,%rdx
lea    (%rsi,%rdx,8),%rax
add    $0xfffffffffffffff8,%rax
sar    %edx
movslq %edx,%rdx
lea    (%rsi,%rdx,8),%rdx
add    $0xffffffffffffffc0,%rdx
movslq %ecx,%r9
mov    %r9,%r8
shl    $0x5,%r8
mov    %r9,%r11
shl    $0x4,%r11
lea    0x0(,%r9,8),%rcx
lea    (%rcx,%rcx,2),%r10
cs nopw 0x0(%rax,%rax,1)
nop
movsd  0x30(%rdx),%xmm0
movsd  -0x8(%rax),%xmm1
movsd  (%rax),%xmm2
movapd %xmm1,%xmm3
subsd  %xmm0,%xmm3
movapd %xmm2,%xmm4
subsd  0x38(%rdx),%xmm4
addsd  %xmm0,%xmm1
movsd  %xmm1,-0x8(%rax)
addsd  0x38(%rdx),%xmm2
movsd  %xmm2,(%rax)
movsd  (%rdi),%xmm0
mulsd  %xmm3,%xmm0
movsd  0x8(%rdi),%xmm1
mulsd  %xmm4,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x30(%rdx)
mulsd  0x8(%rdi),%xmm3
mulsd  (%rdi),%xmm4
subsd  %xmm3,%xmm4
movsd  %xmm4,0x38(%rdx)
movsd  0x20(%rdx),%xmm0
movsd  -0x18(%rax),%xmm1
movsd  -0x10(%rax),%xmm2
movapd %xmm1,%xmm3
subsd  %xmm0,%xmm3
movapd %xmm2,%xmm4
subsd  0x28(%rdx),%xmm4
addsd  %xmm0,%xmm1
movsd  %xmm1,-0x18(%rax)
addsd  0x28(%rdx),%xmm2
movsd  %xmm2,-0x10(%rax)
movsd  (%rdi,%r9,8),%xmm0
mulsd  %xmm3,%xmm0
movsd  0x8(%rdi,%r9,8),%xmm1
mulsd  %xmm4,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x20(%rdx)
mulsd  0x8(%rdi,%r9,8),%xmm3
mulsd  (%rdi,%r9,8),%xmm4
subsd  %xmm3,%xmm4
movsd  %xmm4,0x28(%rdx)
movsd  0x10(%rdx),%xmm0
movsd  -0x28(%rax),%xmm1
movsd  -0x20(%rax),%xmm2
movapd %xmm1,%xmm3
subsd  %xmm0,%xmm3
movapd %xmm2,%xmm4
subsd  0x18(%rdx),%xmm4
addsd  %xmm0,%xmm1
movsd  %xmm1,-0x28(%rax)
addsd  0x18(%rdx),%xmm2
movsd  %xmm2,-0x20(%rax)
movsd  (%rdi,%r11,1),%xmm0
mulsd  %xmm3,%xmm0
movsd  0x8(%rdi,%r11,1),%xmm1
mulsd  %xmm4,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rdx)
mulsd  0x8(%rdi,%r11,1),%xmm3
mulsd  (%rdi,%r11,1),%xmm4
subsd  %xmm3,%xmm4
movsd  %xmm4,0x18(%rdx)
movsd  (%rdx),%xmm0
movsd  -0x38(%rax),%xmm1
movsd  -0x30(%rax),%xmm2
movapd %xmm1,%xmm3
subsd  %xmm0,%xmm3
movapd %xmm2,%xmm4
subsd  0x8(%rdx),%xmm4
addsd  %xmm0,%xmm1
movsd  %xmm1,-0x38(%rax)
addsd  0x8(%rdx),%xmm2
movsd  %xmm2,-0x30(%rax)
movsd  (%rdi,%r10,1),%xmm0
mulsd  %xmm3,%xmm0
movsd  0x8(%rdi,%r10,1),%xmm1
mulsd  %xmm4,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rdx)
mulsd  0x8(%rdi,%r10,1),%xmm3
mulsd  (%rdi,%r10,1),%xmm4
subsd  %xmm3,%xmm4
movsd  %xmm4,0x8(%rdx)
add    $0xffffffffffffffc0,%rdx
add    $0xffffffffffffffc0,%rax
add    %r8,%rdi
cmp    %rsi,%rdx
jae    1140 <mdct_butterfly_generic+0x40>
ret

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

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