int odscal(int *n, double *da, double *dx, int *incx) {
  int i__1, i__2;
  int i__, m, mp1, nincx;
  --dx;
  if (*n <= 0 || *incx <= 0) {
    return 0;
  }
  if (*incx == 1) {
    goto L20;
  }
  nincx = *n * *incx;
  i__1 = nincx;
  i__2 = *incx;
  for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) {
    dx[i__] = *da * dx[i__];
  }
  return 0;
L20:
  m = *n % 5;
  if (m == 0) {
    goto L40;
  }
  i__2 = m;
  for (i__ = 1; i__ <= i__2; ++i__) {
    dx[i__] = *da * dx[i__];
  }
  if (*n < 5) {
    return 0;
  }
L40:
  mp1 = m + 1;
  i__2 = *n;
  for (i__ = mp1; i__ <= i__2; i__ += 5) {
    dx[i__] = *da * dx[i__];
    dx[i__ + 1] = *da * dx[i__ + 1];
    dx[i__ + 2] = *da * dx[i__ + 2];
    dx[i__ + 3] = *da * dx[i__ + 3];
    dx[i__ + 4] = *da * dx[i__ + 4];
  }
  return 0;
}


x86 assembly (clang, -O0):
<odscal>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    -0x20(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,(%rax)
jle    113a <odscal+0x3a>
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jg     1146 <odscal+0x46>
movl   $0x0,-0x4(%rbp)
jmp    1389 <odscal+0x289>
mov    -0x28(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1158 <odscal+0x58>
jmp    11f7 <odscal+0xf7>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    -0x28(%rbp),%rcx
imul   (%rcx),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x30(%rbp)
movl   $0x1,-0x34(%rbp)
cmpl   $0x0,-0x30(%rbp)
jge    119e <odscal+0x9e>
mov    -0x34(%rbp),%eax
cmp    -0x2c(%rbp),%eax
setge  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x44(%rbp)
jmp    11af <odscal+0xaf>
mov    -0x34(%rbp),%eax
cmp    -0x2c(%rbp),%eax
setle  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    $0x0,%eax
je     11eb <odscal+0xeb>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
jmp    117e <odscal+0x7e>
movl   $0x0,-0x4(%rbp)
jmp    1389 <odscal+0x289>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
mov    %edx,-0x38(%rbp)
cmpl   $0x0,-0x38(%rbp)
jne    1217 <odscal+0x117>
jmp    127e <odscal+0x17e>
mov    -0x38(%rbp),%eax
mov    %eax,-0x30(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x30(%rbp),%eax
jg     1260 <odscal+0x160>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1224 <odscal+0x124>
mov    -0x10(%rbp),%rax
cmpl   $0x5,(%rax)
jge    1279 <odscal+0x179>
movl   $0x0,-0x4(%rbp)
jmp    1389 <odscal+0x289>
jmp    127e <odscal+0x17e>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x30(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x30(%rbp),%eax
jg     1382 <odscal+0x282>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x34(%rbp)
jmp    1296 <odscal+0x196>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<odscal>:
push   %rbx
mov    (%rdi),%eax
test   %eax,%eax
jle    1366 <odscal+0x266>
mov    (%rcx),%ecx
test   %ecx,%ecx
jle    1366 <odscal+0x266>
cmp    $0x1,%ecx
jne    11fe <odscal+0xfe>
mov    %eax,%ebx
mov    $0xcccccccd,%edi
mov    %rbx,%rcx
imul   %rdi,%rcx
shr    $0x22,%rcx
lea    (%rcx,%rcx,4),%ecx
mov    %eax,%r8d
sub    %ecx,%r8d
je     122d <odscal+0x12d>
imul   %rdi,%rbx
shr    $0x22,%rbx
lea    (%rbx,%rbx,4),%ecx
mov    %eax,%r9d
sub    %ecx,%r9d
lea    0x1(%r9),%r10
mov    $0x1,%ecx
cmp    $0x4,%r9d
jb     1278 <odscal+0x178>
lea    0x8(%rsi),%rdi
cmp    %rdx,%rdi
jbe    117d <odscal+0x7d>
lea    (%rdx,%r10,8),%rdi
add    $0xfffffffffffffff8,%rdi
cmp    %rsi,%rdi
ja     1278 <odscal+0x178>
mov    %r9d,%ecx
and    $0xfffffffc,%ecx
lea    -0x4(%rcx),%rdi
mov    %rdi,%r11
shr    $0x2,%r11
add    $0x1,%r11
test   %rdi,%rdi
je     1238 <odscal+0x138>
mov    %r11,%rbx
and    $0xfffffffffffffffe,%rbx
movsd  (%rsi),%xmm0
unpcklpd %xmm0,%xmm0
mov    $0x6,%edi
nop
movupd -0x30(%rdx,%rdi,8),%xmm1
movupd -0x20(%rdx,%rdi,8),%xmm2
movupd -0x10(%rdx,%rdi,8),%xmm3
movupd (%rdx,%rdi,8),%xmm4
mulpd  %xmm0,%xmm1
mulpd  %xmm0,%xmm2
movupd %xmm1,-0x30(%rdx,%rdi,8)
movupd %xmm2,-0x20(%rdx,%rdi,8)
mulpd  %xmm0,%xmm3
mulpd  %xmm0,%xmm4
movupd %xmm3,-0x10(%rdx,%rdi,8)
movupd %xmm4,(%rdx,%rdi,8)
add    $0x8,%rdi
add    $0xfffffffffffffffe,%rbx
jne    11b0 <odscal+0xb0>
add    $0xfffffffffffffffb,%rdi
jmp    123d <odscal+0x13d>
imul   %ecx,%eax
test   %eax,%eax
jle    1366 <odscal+0x266>
mov    %eax,%eax
mov    $0x1,%edi
movsd  (%rsi),%xmm0
mulsd  -0x8(%rdx,%rdi,8),%xmm0
movsd  %xmm0,-0x8(%rdx,%rdi,8)
add    %rcx,%rdi
cmp    %rax,%rdi
jle    1210 <odscal+0x110>
jmp    1366 <odscal+0x266>
mov    $0x1,%r8d
jmp    1305 <odscal+0x205>
mov    $0x1,%edi
test   $0x1,%r11b
je     126b <odscal+0x16b>
movsd  (%rsi),%xmm0
unpcklpd %xmm0,%xmm0
movupd -0x8(%rdx,%rdi,8),%xmm1
movupd 0x8(%rdx,%rdi,8),%xmm2
mulpd  %xmm0,%xmm1
mulpd  %xmm0,%xmm2
movupd %xmm1,-0x8(%rdx,%rdi,8)
movupd %xmm2,0x8(%rdx,%rdi,8)
cmp    %rcx,%r9
je     12f7 <odscal+0x1f7>
or     $0x1,%rcx
mov    %r10d,%ebx
sub    %ecx,%ebx
mov    %rcx,%rdi
not    %rdi
add    %r10,%rdi
and    $0x3,%rbx
je     12aa <odscal+0x1aa>
nopl   0x0(%rax)
movsd  (%rsi),%xmm0
mulsd  -0x8(%rdx,%rcx,8),%xmm0
movsd  %xmm0,-0x8(%rdx,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rbx
jne    1290 <odscal+0x190>
cmp    $0x3,%rdi
jb     12f7 <odscal+0x1f7>
movsd  (%rsi),%xmm0
mulsd  -0x8(%rdx,%rcx,8),%xmm0
movsd  %xmm0,-0x8(%rdx,%rcx,8)
movsd  (%rsi),%xmm0
mulsd  (%rdx,%rcx,8),%xmm0
movsd  %xmm0,(%rdx,%rcx,8)
movsd  (%rsi),%xmm0
mulsd  0x8(%rdx,%rcx,8),%xmm0
movsd  %xmm0,0x8(%rdx,%rcx,8)
movsd  (%rsi),%xmm0
mulsd  0x10(%rdx,%rcx,8),%xmm0
movsd  %xmm0,0x10(%rdx,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%r10
jne    12b0 <odscal+0x1b0>
cmp    $0x5,%eax
jl     1366 <odscal+0x266>
cmp    %eax,%r8d
jge    1366 <odscal+0x266>
add    $0x1,%r8d
mov    %r8d,%ecx
nopl   0x0(%rax,%rax,1)
movsd  (%rsi),%xmm0
mulsd  -0x8(%rdx,%rcx,8),%xmm0
movsd  %xmm0,-0x8(%rdx,%rcx,8)
movsd  (%rsi),%xmm0
mulsd  (%rdx,%rcx,8),%xmm0
movsd  %xmm0,(%rdx,%rcx,8)
movsd  (%rsi),%xmm0
mulsd  0x8(%rdx,%rcx,8),%xmm0
movsd  %xmm0,0x8(%rdx,%rcx,8)
movsd  (%rsi),%xmm0
mulsd  0x10(%rdx,%rcx,8),%xmm0
movsd  %xmm0,0x10(%rdx,%rcx,8)
movsd  (%rsi),%xmm0
mulsd  0x18(%rdx,%rcx,8),%xmm0
movsd  %xmm0,0x18(%rdx,%rcx,8)
add    $0x5,%rcx
cmp    %ecx,%eax
jge    1310 <odscal+0x210>
xor    %eax,%eax
pop    %rbx
ret

LLVM IR (-O0):
define i32 @odscal(i32* %0, double* %1, double* %2, i32* %3) {
%5 = alloca i32
%6 = alloca i32*
%7 = alloca double*
%8 = alloca double*
%9 = alloca i32*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
store i32* %0, i32** %6
store double* %1, double** %7
store double* %2, double** %8
store i32* %3, i32** %9
%16 = load double*, double** %8
%17 = getelementptr inbounds double, double* %16, i32 -1
store double* %17, double** %8
%18 = load i32*, i32** %6
%19 = load i32, i32* %18
%20 = icmp sle i32 %19, 0
br i1 %20, label %25, label %21
21: ; preds = %4
%22 = load i32*, i32** %9
%23 = load i32, i32* %22
%24 = icmp sle i32 %23, 0
br i1 %24, label %25, label %26
25: ; preds = %21, %4
store i32 0, i32* %5
br label %192
26: ; preds = %21
%27 = load i32*, i32** %9
%28 = load i32, i32* %27
%29 = icmp eq i32 %28, 1
br i1 %29, label %30, label %31
30: ; preds = %26
br label %74
31: ; preds = %26
%32 = load i32*, i32** %6
%33 = load i32, i32* %32
%34 = load i32*, i32** %9
%35 = load i32, i32* %34
%36 = mul nsw i32 %33, %35
store i32 %36, i32* %15
%37 = load i32, i32* %15
store i32 %37, i32* %10
%38 = load i32*, i32** %9
%39 = load i32, i32* %38
store i32 %39, i32* %11
store i32 1, i32* %12
br label %40
40: ; preds = %69, %31
%41 = load i32, i32* %11
%42 = icmp slt i32 %41, 0
br i1 %42, label %43, label %48
43: ; preds = %40
%44 = load i32, i32* %12
%45 = load i32, i32* %10
%46 = icmp sge i32 %44, %45
%47 = zext i1 %46 to i32
br label %53
48: ; preds = %40
%49 = load i32, i32* %12
%50 = load i32, i32* %10
%51 = icmp sle i32 %49, %50
%52 = zext i1 %51 to i32
br label %53
53: ; preds = %48, %43
%54 = phi i32 [ %47, %43 ], [ %52, %48 ]
%55 = icmp ne i32 %54, 0
br i1 %55, label %56, label %73
56: ; preds = %53
%57 = load double*, double** %7
%58 = load double, double* %57
%59 = load double*, double** %8
%60 = load i32, i32* %12
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds double, double* %59, i64 %61
%63 = load double, double* %62
%64 = fmul double %58, %63
%65 = load double*, double** %8
%66 = load i32, i32* %12
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds double, double* %65, i64 %67
store double %64, double* %68
br label %69
69: ; preds = %56
%70 = load i32, i32* %11
%71 = load i32, i32* %12
%72 = add nsw i32 %71, %70
store i32 %72, i32* %12
br label %40
73: ; preds = %53
store i32 0, i32* %5
br label %192
74: ; preds = %30
%75 = load i32*, i32** %6
%76 = load i32, i32* %75
%77 = srem i32 %76, 5
store i32 %77, i32* %13
%78 = load i32, i32* %13
%79 = icmp eq i32 %78, 0
br i1 %79, label %80, label %81
80: ; preds = %74
br label %109
81: ; preds = %74
%82 = load i32, i32* %13
store i32 %82, i32* %11
store i32 1, i32* %12
br label %83
83: ; preds = %100, %81
%84 = load i32, i32* %12
%85 = load i32, i32* %11
%86 = icmp sle i32 %84, %85
br i1 %86, label %87, label %103
87: ; preds = %83
%88 = load double*, double** %7
%89 = load double, double* %88
%90 = load double*, double** %8
%91 = load i32, i32* %12
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds double, double* %90, i64 %92
%94 = load double, double* %93
%95 = fmul double %89, %94
%96 = load double*, double** %8
%97 = load i32, i32* %12
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds double, double* %96, i64 %98
store double %95, double* %99
br label %100
100: ; preds = %87
%101 = load i32, i32* %12
%102 = add nsw i32 %101, 1
store i32 %102, i32* %12
br label %83
103: ; preds = %83
%104 = load i32*, i32** %6
%105 = load i32, i32* %104
%106 = icmp slt i32 %105, 5
br i1 %106, label %107, label %108
107: ; preds = %103
store i32 0, i32* %5
br label %192
108: ; preds = %103
br label %109
109: ; preds = %108, %80
%110 = load i32, i32* %13
%111 = add nsw i32 %110, 1
store i32 %111, i32* %14
%112 = load i32*, i32** %6
%113 = load i32, i32* %112
store i32 %113, i32* %11
%114 = load i32, i32* %14
store i32 %114, i32* %12
br label %115
115: ; preds = %188, %109
%116 = load i32, i32* %12
%117 = load i32, i32* %11
%118 = icmp sle i32 %116, %117
br i1 %118, label %119, label %191
119: ; preds = %115
%120 = load double*, double** %7
%121 = load double, double* %120
%122 = load double*, double** %8
%123 = load i32, i32* %12
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds double, double* %122, i64 %124
%126 = load double, double* %125
%127 = fmul double %121, %126
%128 = load double*, double** %8
%129 = load i32, i32* %12
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds double, double* %128, i64 %130
store double %127, double* %131
%132 = load double*, double** %7
%133 = load double, double* %132
%134 = load double*, double** %8
%135 = load i32, i32* %12
%136 = add nsw i32 %135, 1
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds double, double* %134, i64 %137
%139 = load double, double* %138
%140 = fmul double %133, %139
%141 = load double*, double** %8
%142 = load i32, i32* %12
%143 = add nsw i32 %142, 1
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds double, double* %141, i64 %144
store double %140, double* %145
%146 = load double*, double** %7
%147 = load double, double* %146
%148 = load double*, double** %8
%149 = load i32, i32* %12
%150 = add nsw i32 %149, 2
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds double, double* %148, i64 %151
%153 = load double, double* %152
%154 = fmul double %147, %153
%155 = load double*, double** %8
%156 = load i32, i32* %12
%157 = add nsw i32 %156, 2
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds double, double* %155, i64 %158
store double %154, double* %159
%160 = load double*, double** %7
%161 = load double, double* %160
%162 = load double*, double** %8
%163 = load i32, i32* %12
%164 = add nsw i32 %163, 3
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds double, double* %162, i64 %165
%167 = load double, double* %166
%168 = fmul double %161, %167
%169 = load double*, double** %8
%170 = load i32, i32* %12
%171 = add nsw i32 %170, 3
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds double, double* %169, i64 %172
store double %168, double* %173
%174 = load double*, double** %7
%175 = load double, double* %174
%176 = load double*, double** %8
%177 = load i32, i32* %12
%178 = add nsw i32 %177, 4
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds double, double* %176, i64 %179
%181 = load double, double* %180
%182 = fmul double %175, %181
%183 = load double*, double** %8
%184 = load i32, i32* %12
%185 = add nsw i32 %184, 4
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds double, double* %183, i64 %186
store double %182, double* %187
br label %188
188: ; preds = %119
%189 = load i32, i32* %12
%190 = add nsw i32 %189, 5
store i32 %190, i32* %12
br label %115
191: ; preds = %115
store i32 0, i32* %5
br label %192
192: ; preds = %191, %107, %73, %25
%193 = load i32, i32* %5
ret i32 %193
}

LLVM IR (-O2):
define i32 @odscal(i32* nocapture %0, double* nocapture %1, double* nocapture %2, i32* nocapture %3) {
%5 = getelementptr inbounds double, double* %2, i64 -1
%6 = load i32, i32* %0
%7 = icmp slt i32 %6, 1
br i1 %7, label %192, label %8
8: ; preds = %4
%9 = load i32, i32* %3
%10 = icmp slt i32 %9, 1
br i1 %10, label %192, label %11
11: ; preds = %8
%12 = icmp eq i32 %9, 1
br i1 %12, label %27, label %13
13: ; preds = %11
%14 = mul nsw i32 %9, %6
%15 = icmp slt i32 %14, 1
br i1 %15, label %192, label %16
16: ; preds = %13
%17 = zext i32 %9 to i64
%18 = zext i32 %14 to i64
br label %19
19: ; preds = %16, %19
%20 = phi i64 [ 1, %16 ], [ %25, %19 ]
%21 = load double, double* %1
%22 = getelementptr inbounds double, double* %5, i64 %20
%23 = load double, double* %22
%24 = fmul double %21, %23
store double %24, double* %22
%25 = add i64 %20, %17
%26 = icmp sgt i64 %25, %18
br i1 %26, label %192, label %19
27: ; preds = %11
%28 = urem i32 %6, 5
%29 = icmp eq i32 %28, 0
br i1 %29, label %161, label %30
30: ; preds = %27
%31 = urem i32 %6, 5
%32 = add nuw nsw i32 %31, 1
%33 = zext i32 %32 to i64
%34 = add nsw i64 %33, -1
%35 = icmp ult i64 %34, 4
br i1 %35, label %114, label %36
36: ; preds = %30
%37 = add nsw i64 %33, -1
%38 = getelementptr double, double* %2, i64 %37
%39 = getelementptr double, double* %1, i64 1
%40 = icmp ugt double* %39, %2
%41 = icmp ugt double* %38, %1
%42 = and i1 %40, %41
br i1 %42, label %114, label %43
43: ; preds = %36
%44 = and i64 %34, -4
%45 = or i64 %44, 1
%46 = add nsw i64 %44, -4
%47 = lshr exact i64 %46, 2
%48 = add nuw nsw i64 %47, 1
%49 = and i64 %48, 1
%50 = icmp eq i64 %46, 0
br i1 %50, label %93, label %51
51: ; preds = %43
%52 = and i64 %48, 9223372036854775806
%53 = load double, double* %1
%54 = insertelement <2 x double> poison, double %53, i64 0
%55 = shufflevector <2 x double> %54, <2 x double> poison, <2 x i32> zeroinitializer
%56 = insertelement <2 x double> poison, double %53, i64 0
%57 = shufflevector <2 x double> %56, <2 x double> poison, <2 x i32> zeroinitializer
%58 = load double, double* %1
%59 = insertelement <2 x double> poison, double %58, i64 0
%60 = shufflevector <2 x double> %59, <2 x double> poison, <2 x i32> zeroinitializer
%61 = insertelement <2 x double> poison, double %58, i64 0
%62 = shufflevector <2 x double> %61, <2 x double> poison, <2 x i32> zeroinitializer
br label %63
63: ; preds = %63, %51
%64 = phi i64 [ 0, %51 ], [ %88, %63 ]
%65 = phi i64 [ 0, %51 ], [ %89, %63 ]
%66 = or i64 %64, 1
%67 = getelementptr inbounds double, double* %5, i64 %66
%68 = bitcast double* %67 to <2 x double>*
%69 = load <2 x double>, <2 x double>* %68
%70 = getelementptr inbounds double, double* %67, i64 2
%71 = bitcast double* %70 to <2 x double>*
%72 = load <2 x double>, <2 x double>* %71
%73 = fmul <2 x double> %55, %69
%74 = fmul <2 x double> %57, %72
%75 = bitcast double* %67 to <2 x double>*
store <2 x double> %73, <2 x double>* %75
%76 = bitcast double* %70 to <2 x double>*
store <2 x double> %74, <2 x double>* %76
%77 = or i64 %64, 5
%78 = getelementptr inbounds double, double* %5, i64 %77
%79 = bitcast double* %78 to <2 x double>*
%80 = load <2 x double>, <2 x double>* %79
%81 = getelementptr inbounds double, double* %78, i64 2
%82 = bitcast double* %81 to <2 x double>*
%83 = load <2 x double>, <2 x double>* %82
%84 = fmul <2 x double> %60, %80
%85 = fmul <2 x double> %62, %83
%86 = bitcast double* %78 to <2 x double>*
store <2 x double> %84, <2 x double>* %86
%87 = bitcast double* %81 to <2 x double>*
store <2 x double> %85, <2 x double>* %87
%88 = add nuw i64 %64, 8
%89 = add i64 %65, 2
%90 = icmp eq i64 %89, %52
br i1 %90, label %91, label %63
91: ; preds = %63
%92 = or i64 %88, 1
br label %93
93: ; preds = %91, %43
%94 = phi i64 [ 1, %43 ], [ %92, %91 ]
%95 = icmp eq i64 %49, 0
br i1 %95, label %112, label %96
96: ; preds = %93
%97 = load double, double* %1
%98 = insertelement <2 x double> poison, double %97, i64 0
%99 = shufflevector <2 x double> %98, <2 x double> poison, <2 x i32> zeroinitializer
%100 = insertelement <2 x double> poison, double %97, i64 0
%101 = shufflevector <2 x double> %100, <2 x double> poison, <2 x i32> zeroinitializer
%102 = getelementptr inbounds double, double* %5, i64 %94
%103 = bitcast double* %102 to <2 x double>*
%104 = load <2 x double>, <2 x double>* %103
%105 = getelementptr inbounds double, double* %102, i64 2
%106 = bitcast double* %105 to <2 x double>*
%107 = load <2 x double>, <2 x double>* %106
%108 = fmul <2 x double> %99, %104
%109 = fmul <2 x double> %101, %107
%110 = bitcast double* %102 to <2 x double>*
store <2 x double> %108, <2 x double>* %110
%111 = bitcast double* %105 to <2 x double>*
store <2 x double> %109, <2 x double>* %111
br label %112
112: ; preds = %93, %96
%113 = icmp eq i64 %34, %44
br i1 %113, label %156, label %114
114: ; preds = %36, %30, %112
%115 = phi i64 [ 1, %36 ], [ 1, %30 ], [ %45, %112 ]
%116 = sub nsw i64 %33, %115
%117 = xor i64 %115, -1
%118 = add nsw i64 %117, %33
%119 = and i64 %116, 3
%120 = icmp eq i64 %119, 0
br i1 %120, label %131, label %121
121: ; preds = %114, %121
%122 = phi i64 [ %128, %121 ], [ %115, %114 ]
%123 = phi i64 [ %129, %121 ], [ 0, %114 ]
%124 = load double, double* %1
%125 = getelementptr inbounds double, double* %5, i64 %122
%126 = load double, double* %125
%127 = fmul double %124, %126
store double %127, double* %125
%128 = add nuw nsw i64 %122, 1
%129 = add i64 %123, 1
%130 = icmp eq i64 %129, %119
br i1 %130, label %131, label %121
131: ; preds = %121, %114
%132 = phi i64 [ %115, %114 ], [ %128, %121 ]
%133 = icmp ult i64 %118, 3
br i1 %133, label %156, label %134
134: ; preds = %131, %134
%135 = phi i64 [ %154, %134 ], [ %132, %131 ]
%136 = load double, double* %1
%137 = getelementptr inbounds double, double* %5, i64 %135
%138 = load double, double* %137
%139 = fmul double %136, %138
store double %139, double* %137
%140 = load double, double* %1
%141 = getelementptr inbounds double, double* %2, i64 %135
%142 = load double, double* %141
%143 = fmul double %140, %142
store double %143, double* %141
%144 = add nuw nsw i64 %135, 2
%145 = load double, double* %1
%146 = getelementptr inbounds double, double* %5, i64 %144
%147 = load double, double* %146
%148 = fmul double %145, %147
store double %148, double* %146
%149 = add nuw nsw i64 %135, 3
%150 = load double, double* %1
%151 = getelementptr inbounds double, double* %5, i64 %149
%152 = load double, double* %151
%153 = fmul double %150, %152
store double %153, double* %151
%154 = add nuw nsw i64 %135, 4
%155 = icmp eq i64 %154, %33
br i1 %155, label %156, label %134
156: ; preds = %131, %134, %112
%157 = icmp slt i32 %6, 5
%158 = add nuw nsw i32 %28, 1
%159 = icmp sge i32 %28, %6
%160 = or i1 %157, %159
br i1 %160, label %192, label %161
161: ; preds = %27, %156
%162 = phi i32 [ %158, %156 ], [ 1, %27 ]
%163 = zext i32 %162 to i64
br label %164
164: ; preds = %161, %164
%165 = phi i64 [ %163, %161 ], [ %189, %164 ]
%166 = load double, double* %1
%167 = getelementptr inbounds double, double* %5, i64 %165
%168 = load double, double* %167
%169 = fmul double %166, %168
store double %169, double* %167
%170 = load double, double* %1
%171 = getelementptr inbounds double, double* %2, i64 %165
%172 = load double, double* %171
%173 = fmul double %170, %172
store double %173, double* %171
%174 = load double, double* %1
%175 = add nuw nsw i64 %165, 2
%176 = getelementptr inbounds double, double* %5, i64 %175
%177 = load double, double* %176
%178 = fmul double %174, %177
store double %178, double* %176
%179 = load double, double* %1
%180 = add nuw nsw i64 %165, 3
%181 = getelementptr inbounds double, double* %5, i64 %180
%182 = load double, double* %181
%183 = fmul double %179, %182
store double %183, double* %181
%184 = load double, double* %1
%185 = add nuw nsw i64 %165, 4
%186 = getelementptr inbounds double, double* %5, i64 %185
%187 = load double, double* %186
%188 = fmul double %184, %187
store double %188, double* %186
%189 = add nuw nsw i64 %165, 5
%190 = trunc i64 %189 to i32
%191 = icmp slt i32 %6, %190
br i1 %191, label %192, label %164
192: ; preds = %19, %164, %13, %156, %4, %8
ret i32 0
}