#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ SCIprintf(char *, int, double);
double cos(double);
double sin(double);
double sqrt(double);
void dft_set_signal(int npoint, double din_re[], int sel, int mon_sw) {
  int i;
  double a;
  double ofst;
  double dth, th;
  double th0;
  double fi;
  for (i = 0; i < npoint; i++) {
    din_re[i] = 0.0;
  }
  switch (sel) {
  default:
  case 10:
    for (i = 0; i < npoint; i++) {
      din_re[i] += (double)((i % 2) * 2 - 1);
    }
    fi = 1;
    a = 1700.0;
    ofst = 2048.0;
    dth = 2.0 * 3.14159265358979323846 / (double)npoint;
    th0 = 0.0;
    for (i = 0; i < npoint; i++) {
      th = dth * ((double)(i * fi)) + th0;
      din_re[i] += a * sin(th) + ofst;
    }
    fi = 3;
    a = 60000.0;
    for (i = 0; i < npoint; i++) {
      th = dth * ((double)(i * fi));
      din_re[i] += a * cos(th);
    }
    fi = 7;
    a = 123.4 * sqrt(2.0) * 2.0;
    th0 = 3.14159265358979323846 / 4.0;
    for (i = 0; i < npoint; i++) {
      th = dth * ((double)(i * fi)) + th0;
      din_re[i] += a * sin(th);
    }
    break;
  case 0:
    for (i = 0; i < npoint; i++) {
      din_re[i] = 1.0;
    }
    break;
  case 1:
    for (i = 0; i < npoint; i++) {
      din_re[i] = 0.0;
    }
    din_re[0] = 1.0;
    break;
  case 2:
    for (i = 0; i < npoint; i++) {
      din_re[i] = 0.0;
    }
    din_re[0] = 1.0;
    din_re[1] = 2.0;
    din_re[2] = 4.0;
    din_re[3] = 8.0;
    break;
  case 3:
    for (i = 0; i < npoint; i++) {
      din_re[i] = (double)((i % 2) * 2 - 1);
    }
    break;
  }
  if (mon_sw == 1) {
    for (i = 0; i < npoint; i++) {
      SCIprintf(" i=%3d: re = %12.3le\n", i, din_re[i]);
    }
  }
}


x86 assembly (clang, -O0):
<dft_set_signal>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1186 <dft_set_signal+0x46>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    115c <dft_set_signal+0x1c>
mov    -0x14(%rbp),%eax
mov    %rax,-0x58(%rbp)
sub    $0xa,%rax
ja     11ab <dft_set_signal+0x6b>
mov    -0x58(%rbp),%rax
lea    0xebe(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
jmp    11b0 <dft_set_signal+0x70>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    11fa <dft_set_signal+0xba>
mov    -0x1c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
shl    $0x1,%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11b7 <dft_set_signal+0x77>
movsd  0xe16(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xe21(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xe0c(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
cvtsi2sdl -0x4(%rbp),%xmm1
movsd  0xdf2(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    12bc <dft_set_signal+0x17c>
movsd  -0x38(%rbp),%xmm0
cvtsi2sdl -0x1c(%rbp),%xmm2
mulsd  -0x50(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x40(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm2
movsd  -0x60(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1246 <dft_set_signal+0x106>
movsd  0xd7c(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xd67(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1345 <dft_set_signal+0x205>
movsd  -0x38(%rbp),%xmm0
cvtsi2sdl -0x1c(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
call   1050 <cos@plt>
movaps %xmm0,%xmm2
movsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    12dd <dft_set_signal+0x19d>
movsd  0xd0b(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xcb6(%rip),%xmm0
call   1060 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0xce6(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0xc9a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xcc1(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1404 <dft_set_signal+0x2c4>
movsd  -0x38(%rbp),%xmm0
cvtsi2sdl -0x1c(%rbp),%xmm2
mulsd  -0x50(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm2
movsd  -0x70(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1393 <dft_set_signal+0x253>
jmp    154d <dft_set_signal+0x40d>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    143f <dft_set_signal+0x2ff>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  0xbec(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1410 <dft_set_signal+0x2d0>
jmp    154d <dft_set_signal+0x40d>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1475 <dft_set_signal+0x335>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    144b <dft_set_signal+0x30b>
mov    -0x10(%rbp),%rax
movsd  0xb97(%rip),%xmm0
movsd  %xmm0,(%rax)
jmp    154d <dft_set_signal+0x40d>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    14bb <dft_set_signal+0x37b>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1491 <dft_set_signal+0x351>
mov    -0x10(%rbp),%rax
movsd  0xb51(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xb39(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0xb20(%rip),%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0xb07(%rip),%xmm0
movsd  %xmm0,0x18(%rax)
jmp    154d <dft_set_signal+0x40d>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1548 <dft_set_signal+0x408>
mov    -0x1c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
shl    $0x1,%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    150a <dft_set_signal+0x3ca>
jmp    154d <dft_set_signal+0x40d>
cmpl   $0x1,-0x18(%rbp)
jne    1599 <dft_set_signal+0x459>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1594 <dft_set_signal+0x454>
mov    -0x1c(%rbp),%esi
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xb0b(%rip),%rdi
call   1030 <SCIprintf@plt>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    155e <dft_set_signal+0x41e>
jmp    1599 <dft_set_signal+0x459>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dft_set_signal>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %ecx,%r14d
mov    %edx,%ebp
mov    %rsi,%r12
mov    %edi,%r15d
test   %edi,%edi
jle    116e <dft_set_signal+0x2e>
mov    %r15d,%edx
shl    $0x3,%rdx
mov    %r12,%rdi
xor    %esi,%esi
call   1040 <memset@plt>
cmp    $0x3,%ebp
ja     11a2 <dft_set_signal+0x62>
mov    %ebp,%eax
lea    0xf4c(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
test   %r15d,%r15d
jle    1809 <dft_set_signal+0x6c9>
mov    %r15d,%eax
cmp    $0x4,%r15d
jae    123b <dft_set_signal+0xfb>
xor    %ecx,%ecx
jmp    17a9 <dft_set_signal+0x669>
test   %r15d,%r15d
jle    1809 <dft_set_signal+0x6c9>
mov    %r15d,%r13d
cmp    $0x4,%r15d
jae    1265 <dft_set_signal+0x125>
xor    %eax,%eax
jmp    12e8 <dft_set_signal+0x1a8>
test   %r15d,%r15d
jle    11d5 <dft_set_signal+0x95>
mov    %r15d,%edx
shl    $0x3,%rdx
mov    %r12,%rdi
xor    %esi,%esi
call   1040 <memset@plt>
movabs $0x3ff0000000000000,%rax
mov    %rax,(%r12)
jmp    17cd <dft_set_signal+0x68d>
test   %r15d,%r15d
jle    11fe <dft_set_signal+0xbe>
mov    %r15d,%edx
shl    $0x3,%rdx
mov    %r12,%rdi
xor    %esi,%esi
call   1040 <memset@plt>
movaps 0xdfb(%rip),%xmm0
movups %xmm0,(%r12)
movapd 0xdfe(%rip),%xmm0
movupd %xmm0,0x10(%r12)
jmp    17cd <dft_set_signal+0x68d>
test   %r15d,%r15d
jle    1809 <dft_set_signal+0x6c9>
mov    %r15d,%eax
cmp    $0x4,%r15d
jae    15b9 <dft_set_signal+0x479>
xor    %ecx,%ecx
jmp    1694 <dft_set_signal+0x554>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
lea    -0x4(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x7,%edx
cmp    $0x1c,%rdi
jae    16c6 <dft_set_signal+0x586>
xor    %edi,%edi
jmp    1775 <dft_set_signal+0x635>
mov    %r13d,%eax
and    $0xfffffffc,%eax
lea    0x0(,%r13,8),%rcx
and    $0xffffffffffffffe0,%rcx
movdqa 0xdc1(%rip),%xmm0
xor    %edx,%edx
movdqa 0xdc7(%rip),%xmm1
pcmpeqd %xmm2,%xmm2
movdqa 0xddb(%rip),%xmm3
cs nopw 0x0(%rax,%rax,1)
nop
movdqa %xmm0,%xmm4
paddd  %xmm0,%xmm4
pand   %xmm1,%xmm4
paddd  %xmm2,%xmm4
cvtdq2pd %xmm4,%xmm4
movupd (%r12,%rdx,1),%xmm5
movupd 0x10(%r12,%rdx,1),%xmm6
addpd  %xmm4,%xmm5
addpd  %xmm4,%xmm6
movupd %xmm5,(%r12,%rdx,1)
movupd %xmm6,0x10(%r12,%rdx,1)
paddd  %xmm3,%xmm0
add    $0x20,%rdx
cmp    %rdx,%rcx
jne    12a0 <dft_set_signal+0x160>
cmp    %r13,%rax
je     1317 <dft_set_signal+0x1d7>
lea    (%rax,%rax,1),%ecx
nopl   0x0(%rax,%rax,1)
mov    %ecx,%edx
and    $0x2,%edx
add    $0xffffffff,%edx
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
addsd  (%r12,%rax,8),%xmm0
movsd  %xmm0,(%r12,%rax,8)
add    $0x1,%rax
add    $0x2,%ecx
cmp    %rax,%r13
jne    12f0 <dft_set_signal+0x1b0>
test   %r15d,%r15d
jle    1809 <dft_set_signal+0x6c9>
xorps  %xmm0,%xmm0
cvtsi2sd %r15d,%xmm0
movsd  0xd50(%rip),%xmm1
divsd  %xmm0,%xmm1
mov    %r13,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,0x10(%rsp)
movsd  %xmm1,0x8(%rsp)
je     1818 <dft_set_signal+0x6d8>
mov    %r13d,%ebx
and    $0xfffffffe,%ebx
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
mulsd  0x8(%rsp),%xmm0
xorpd  %xmm1,%xmm1
addsd  %xmm1,%xmm0
call   1050 <sin@plt>
movsd  0xd06(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd02(%rip),%xmm1
addsd  %xmm1,%xmm0
addsd  (%r12,%rbp,8),%xmm0
movsd  %xmm0,(%r12,%rbp,8)
lea    0x1(%rbp),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x8(%rsp),%xmm0
addsd  0xd0a(%rip),%xmm0
call   1050 <sin@plt>
mulsd  0xcc5(%rip),%xmm0
addsd  0xcc5(%rip),%xmm0
addsd  0x8(%r12,%rbp,8),%xmm0
movsd  %xmm0,0x8(%r12,%rbp,8)
add    $0x2,%rbp
cmp    %rbx,%rbp
jne    1360 <dft_set_signal+0x220>
movsd  0x8(%rsp),%xmm0
test   $0x1,%r13b
je     142c <dft_set_signal+0x2ec>
xorps  %xmm1,%xmm1
cvtsi2sd %ebp,%xmm1
mulsd  %xmm0,%xmm1
xorpd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sin@plt>
mulsd  0xc76(%rip),%xmm0
addsd  0xc76(%rip),%xmm0
addsd  (%r12,%rbp,8),%xmm0
movsd  %xmm0,(%r12,%rbp,8)
movsd  0x8(%rsp),%xmm0
test   %r15d,%r15d
jle    1809 <dft_set_signal+0x6c9>
cmpq   $0x0,0x10(%rsp)
je     1845 <dft_set_signal+0x705>
mov    %r13d,%ebx
and    $0xfffffffe,%ebx
xor    %ebp,%ebp
nopl   0x0(%rax)
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
movsd  0xc39(%rip),%xmm1
mulsd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
call   1060 <cos@plt>
movsd  0xc2a(%rip),%xmm1
mulsd  %xmm1,%xmm0
addsd  (%r12,%rbp,8),%xmm0
movsd  %xmm0,(%r12,%rbp,8)
lea    0x1(%rbp),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xc00(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1060 <cos@plt>
mulsd  0xbf5(%rip),%xmm0
addsd  0x8(%r12,%rbp,8),%xmm0
movsd  %xmm0,0x8(%r12,%rbp,8)
add    $0x2,%rbp
cmp    %rbx,%rbp
jne    1450 <dft_set_signal+0x310>
movsd  0x8(%rsp),%xmm0
test   $0x1,%r13b
je     1502 <dft_set_signal+0x3c2>
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
mulsd  0xbbb(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1060 <cos@plt>
mulsd  0xbb0(%rip),%xmm0
addsd  (%r12,%rbp,8),%xmm0
movsd  %xmm0,(%r12,%rbp,8)
movsd  0x8(%rsp),%xmm0
test   %r15d,%r15d
jle    1809 <dft_set_signal+0x6c9>
cmpq   $0x0,0x10(%rsp)
je     1856 <dft_set_signal+0x716>
mov    %r13d,%ebx
and    $0xfffffffe,%ebx
xor    %ebp,%ebp
nop
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
movsd  0xb79(%rip),%xmm1
mulsd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
movsd  0xb6f(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1050 <sin@plt>
movsd  0xb66(%rip),%xmm1
mulsd  %xmm1,%xmm0
addsd  (%r12,%rbp,8),%xmm0
lea    0x1(%rbp),%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  %xmm0,(%r12,%rbp,8)
mulsd  0xb34(%rip),%xmm1
mulsd  0x8(%rsp),%xmm1
addsd  0xb2e(%rip),%xmm1
movapd %xmm1,%xmm0
call   1050 <sin@plt>
mulsd  0xb25(%rip),%xmm0
addsd  0x8(%r12,%rbp,8),%xmm0
movsd  %xmm0,0x8(%r12,%rbp,8)
add    $0x2,%rbp
cmp    %rbx,%rbp
jne    1520 <dft_set_signal+0x3e0>
movsd  0x8(%rsp),%xmm0
jmp    1858 <dft_set_signal+0x718>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
lea    -0x4(%rcx),%rsi
mov    %rsi,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     182d <dft_set_signal+0x6ed>
movabs $0x7ffffffffffffff8,%rdi
ff ff 7f
or     $0x6,%rdi
and    %rdx,%rdi
movdqa 0xa51(%rip),%xmm0
xor    %esi,%esi
movdqa 0xa57(%rip),%xmm1
pcmpeqd %xmm2,%xmm2
movdqa 0xa5b(%rip),%xmm3
cs nopw 0x0(%rax,%rax,1)
nop
movdqa %xmm0,%xmm4
paddd  %xmm0,%xmm4
movdqa %xmm4,%xmm5
pand   %xmm1,%xmm5
paddd  %xmm2,%xmm5
cvtdq2pd %xmm5,%xmm5
movupd %xmm5,(%r12,%rsi,8)
movupd %xmm5,0x10(%r12,%rsi,8)
paddd  %xmm3,%xmm4
pand   %xmm1,%xmm4
paddd  %xmm2,%xmm4
cvtdq2pd %xmm4,%xmm4
movupd %xmm4,0x20(%r12,%rsi,8)
movupd %xmm4,0x30(%r12,%rsi,8)
add    $0x8,%rsi
paddd  %xmm3,%xmm0
add    $0xfffffffffffffffe,%rdi
jne    1610 <dft_set_signal+0x4d0>
paddd  %xmm0,%xmm0
pand   0x9e3(%rip),%xmm0
pcmpeqd %xmm1,%xmm1
paddd  %xmm0,%xmm1
cvtdq2pd %xmm1,%xmm0
test   $0x1,%dl
je     168b <dft_set_signal+0x54b>
movupd %xmm0,(%r12,%rsi,8)
movupd %xmm0,0x10(%r12,%rsi,8)
cmp    %rax,%rcx
je     17cd <dft_set_signal+0x68d>
lea    (%rcx,%rcx,1),%edx
nopw   0x0(%rax,%rax,1)
mov    %edx,%esi
and    $0x2,%esi
add    $0xffffffff,%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
movsd  %xmm0,(%r12,%rcx,8)
add    $0x1,%rcx
add    $0x2,%edx
cmp    %rcx,%rax
jne    16a0 <dft_set_signal+0x560>
jmp    17cd <dft_set_signal+0x68d>
and    $0xfffffffffffffff8,%rsi
xor    %edi,%edi
movapd 0x94c(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movupd %xmm0,(%r12,%rdi,8)
movupd %xmm0,0x10(%r12,%rdi,8)
movupd %xmm0,0x20(%r12,%rdi,8)
movupd %xmm0,0x30(%r12,%rdi,8)
movupd %xmm0,0x40(%r12,%rdi,8)
movupd %xmm0,0x50(%r12,%rdi,8)
movupd %xmm0,0x60(%r12,%rdi,8)
movupd %xmm0,0x70(%r12,%rdi,8)
movupd %xmm0,0x80(%r12,%rdi,8)
movupd %xmm0,0x90(%r12,%rdi,8)
movupd %xmm0,0xa0(%r12,%rdi,8)
movupd %xmm0,0xb0(%r12,%rdi,8)
movupd %xmm0,0xc0(%r12,%rdi,8)
movupd %xmm0,0xd0(%r12,%rdi,8)
movupd %xmm0,0xe0(%r12,%rdi,8)
movupd %xmm0,0xf0(%r12,%rdi,8)
add    $0x20,%rdi
add    $0xfffffffffffffff8,%rsi
jne    16e0 <dft_set_signal+0x5a0>
test   %rdx,%rdx
je     17a4 <dft_set_signal+0x664>
lea    (%r12,%rdi,8),%rsi
add    $0x10,%rsi
shl    $0x5,%rdx
xor    %edi,%edi
movapd 0x890(%rip),%xmm0
movupd %xmm0,-0x10(%rsi,%rdi,1)
movupd %xmm0,(%rsi,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rdx
jne    1790 <dft_set_signal+0x650>
cmp    %rax,%rcx
je     17cd <dft_set_signal+0x68d>
movabs $0x3ff0000000000000,%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %rdx,(%r12,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    17c0 <dft_set_signal+0x680>
cmp    $0x1,%r14d
jne    1809 <dft_set_signal+0x6c9>
test   %r15d,%r15d
jle    1809 <dft_set_signal+0x6c9>
mov    %r15d,%ebx
xor    %ebp,%ebp
lea    0x8f4(%rip),%r14
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%r12,%rbp,8),%xmm0
mov    %r14,%rdi
mov    %ebp,%esi
call   1030 <SCIprintf@plt>
add    $0x1,%rbp
cmp    %rbp,%rbx
jne    17f0 <dft_set_signal+0x6b0>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movapd %xmm1,%xmm0
xor    %ebp,%ebp
test   $0x1,%r13b
jne    13f2 <dft_set_signal+0x2b2>
jmp    142c <dft_set_signal+0x2ec>
movapd 0x7fb(%rip),%xmm0
xor    %esi,%esi
test   $0x1,%dl
jne    167e <dft_set_signal+0x53e>
jmp    168b <dft_set_signal+0x54b>
xor    %ebp,%ebp
test   $0x1,%r13b
jne    14ce <dft_set_signal+0x38e>
jmp    1502 <dft_set_signal+0x3c2>
xor    %ebp,%ebp
test   $0x1,%r13b
je     17cd <dft_set_signal+0x68d>
xorps  %xmm1,%xmm1
cvtsi2sd %ebp,%xmm1
mulsd  0x837(%rip),%xmm1
mulsd  %xmm1,%xmm0
addsd  0x833(%rip),%xmm0
call   1050 <sin@plt>
mulsd  0x82e(%rip),%xmm0
addsd  (%r12,%rbp,8),%xmm0
movsd  %xmm0,(%r12,%rbp,8)
jmp    17cd <dft_set_signal+0x68d>

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

LLVM IR (-O2):
@.str = [22 x i8] c" i=%3d: re = %12.3le\0A\00"
define void @dft_set_signal(i32 %0, double* nocapture %1, i32 %2, i32 %3) {
%5 = bitcast double* %1 to i8*
%6 = icmp sgt i32 %0, 0
br i1 %6, label %7, label %10
7: ; preds = %4
%8 = zext i32 %0 to i64
%9 = shl nuw nsw i64 %8, 3
br label %10
10: ; preds = %7, %4
switch i32 %2, label %159 [
i32 3, label %94
i32 0, label %19
i32 1, label %15
i32 2, label %11
]
11: ; preds = %10
br i1 %6, label %12, label %325
12: ; preds = %11
%13 = zext i32 %0 to i64
%14 = shl nuw nsw i64 %13, 3
br label %325
15: ; preds = %10
br i1 %6, label %16, label %324
16: ; preds = %15
%17 = zext i32 %0 to i64
%18 = shl nuw nsw i64 %17, 3
br label %324
19: ; preds = %10
br i1 %6, label %20, label %364
20: ; preds = %19
%21 = zext i32 %0 to i64
%22 = icmp ult i32 %0, 4
br i1 %22, label %92, label %23
23: ; preds = %20
%24 = and i64 %21, 4294967292
%25 = add nsw i64 %24, -4
%26 = lshr exact i64 %25, 2
%27 = add nuw nsw i64 %26, 1
%28 = and i64 %27, 7
%29 = icmp ult i64 %25, 28
br i1 %29, label %77, label %30
30: ; preds = %23
%31 = and i64 %27, 9223372036854775800
br label %32
32: ; preds = %32, %30
%33 = phi i64 [ 0, %30 ], [ %74, %32 ]
%34 = phi i64 [ 0, %30 ], [ %75, %32 ]
%35 = getelementptr inbounds double, double* %1, i64 %33
%36 = bitcast double* %35 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %36
%37 = getelementptr inbounds double, double* %35, i64 2
%38 = bitcast double* %37 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %38
%39 = or i64 %33, 4
%40 = getelementptr inbounds double, double* %1, i64 %39
%41 = bitcast double* %40 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %41
%42 = getelementptr inbounds double, double* %40, i64 2
%43 = bitcast double* %42 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %43
%44 = or i64 %33, 8
%45 = getelementptr inbounds double, double* %1, i64 %44
%46 = bitcast double* %45 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %46
%47 = getelementptr inbounds double, double* %45, i64 2
%48 = bitcast double* %47 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %48
%49 = or i64 %33, 12
%50 = getelementptr inbounds double, double* %1, i64 %49
%51 = bitcast double* %50 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %51
%52 = getelementptr inbounds double, double* %50, i64 2
%53 = bitcast double* %52 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %53
%54 = or i64 %33, 16
%55 = getelementptr inbounds double, double* %1, i64 %54
%56 = bitcast double* %55 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %56
%57 = getelementptr inbounds double, double* %55, i64 2
%58 = bitcast double* %57 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %58
%59 = or i64 %33, 20
%60 = getelementptr inbounds double, double* %1, i64 %59
%61 = bitcast double* %60 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %61
%62 = getelementptr inbounds double, double* %60, i64 2
%63 = bitcast double* %62 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %63
%64 = or i64 %33, 24
%65 = getelementptr inbounds double, double* %1, i64 %64
%66 = bitcast double* %65 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %66
%67 = getelementptr inbounds double, double* %65, i64 2
%68 = bitcast double* %67 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %68
%69 = or i64 %33, 28
%70 = getelementptr inbounds double, double* %1, i64 %69
%71 = bitcast double* %70 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %71
%72 = getelementptr inbounds double, double* %70, i64 2
%73 = bitcast double* %72 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %73
%74 = add nuw i64 %33, 32
%75 = add i64 %34, 8
%76 = icmp eq i64 %75, %31
br i1 %76, label %77, label %32
77: ; preds = %32, %23
%78 = phi i64 [ 0, %23 ], [ %74, %32 ]
%79 = icmp eq i64 %28, 0
br i1 %79, label %90, label %80
80: ; preds = %77, %80
%81 = phi i64 [ %87, %80 ], [ %78, %77 ]
%82 = phi i64 [ %88, %80 ], [ 0, %77 ]
%83 = getelementptr inbounds double, double* %1, i64 %81
%84 = bitcast double* %83 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %84
%85 = getelementptr inbounds double, double* %83, i64 2
%86 = bitcast double* %85 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 1.000000e+00>, <2 x double>* %86
%87 = add nuw i64 %81, 4
%88 = add i64 %82, 1
%89 = icmp eq i64 %88, %28
br i1 %89, label %90, label %80
90: ; preds = %80, %77
%91 = icmp eq i64 %24, %21
br i1 %91, label %351, label %92
92: ; preds = %20, %90
%93 = phi i64 [ 0, %20 ], [ %24, %90 ]
br label %319
94: ; preds = %10
br i1 %6, label %95, label %364
95: ; preds = %94
%96 = zext i32 %0 to i64
%97 = icmp ult i32 %0, 4
br i1 %97, label %157, label %98
98: ; preds = %95
%99 = and i64 %96, 4294967292
%100 = add nsw i64 %99, -4
%101 = lshr exact i64 %100, 2
%102 = add nuw nsw i64 %101, 1
%103 = and i64 %102, 1
%104 = icmp eq i64 %100, 0
br i1 %104, label %146, label %105
105: ; preds = %98
%106 = and i64 %102, 9223372036854775806
br label %107
107: ; preds = %107, %105
%108 = phi i64 [ 0, %105 ], [ %137, %107 ]
%109 = phi <2 x i32> [ <i32 0, i32 1>, %105 ], [ %138, %107 ]
%110 = phi i64 [ 0, %105 ], [ %139, %107 ]
%111 = shl <2 x i32> %109, <i32 1, i32 1>
%112 = shl <2 x i32> %109, <i32 1, i32 1>
%113 = and <2 x i32> %111, <i32 2, i32 2>
%114 = and <2 x i32> %112, <i32 2, i32 2>
%115 = add nsw <2 x i32> %113, <i32 -1, i32 -1>
%116 = add nsw <2 x i32> %114, <i32 -1, i32 -1>
%117 = sitofp <2 x i32> %115 to <2 x double>
%118 = sitofp <2 x i32> %116 to <2 x double>
%119 = getelementptr inbounds double, double* %1, i64 %108
%120 = bitcast double* %119 to <2 x double>*
store <2 x double> %117, <2 x double>* %120
%121 = getelementptr inbounds double, double* %119, i64 2
%122 = bitcast double* %121 to <2 x double>*
store <2 x double> %118, <2 x double>* %122
%123 = or i64 %108, 4
%124 = add <2 x i32> %109, <i32 4, i32 4>
%125 = shl <2 x i32> %124, <i32 1, i32 1>
%126 = shl <2 x i32> %124, <i32 1, i32 1>
%127 = and <2 x i32> %125, <i32 2, i32 2>
%128 = and <2 x i32> %126, <i32 2, i32 2>
%129 = add nsw <2 x i32> %127, <i32 -1, i32 -1>
%130 = add nsw <2 x i32> %128, <i32 -1, i32 -1>
%131 = sitofp <2 x i32> %129 to <2 x double>
%132 = sitofp <2 x i32> %130 to <2 x double>
%133 = getelementptr inbounds double, double* %1, i64 %123
%134 = bitcast double* %133 to <2 x double>*
store <2 x double> %131, <2 x double>* %134
%135 = getelementptr inbounds double, double* %133, i64 2
%136 = bitcast double* %135 to <2 x double>*
store <2 x double> %132, <2 x double>* %136
%137 = add nuw i64 %108, 8
%138 = add <2 x i32> %109, <i32 8, i32 8>
%139 = add i64 %110, 2
%140 = icmp eq i64 %139, %106
br i1 %140, label %141, label %107
141: ; preds = %107
%142 = shl <2 x i32> %138, <i32 1, i32 1>
%143 = and <2 x i32> %142, <i32 2, i32 2>
%144 = add nsw <2 x i32> %143, <i32 -1, i32 -1>
%145 = sitofp <2 x i32> %144 to <2 x double>
br label %146
146: ; preds = %141, %98
%147 = phi i64 [ 0, %98 ], [ %137, %141 ]
%148 = phi <2 x double> [ <double -1.000000e+00, double 1.000000e+00>, %98 ], [ %145, %141 ]
%149 = icmp eq i64 %103, 0
br i1 %149, label %155, label %150
150: ; preds = %146
%151 = getelementptr inbounds double, double* %1, i64 %147
%152 = bitcast double* %151 to <2 x double>*
store <2 x double> %148, <2 x double>* %152
%153 = getelementptr inbounds double, double* %151, i64 2
%154 = bitcast double* %153 to <2 x double>*
store <2 x double> %148, <2 x double>* %154
br label %155
155: ; preds = %146, %150
%156 = icmp eq i64 %99, %96
br i1 %156, label %351, label %157
157: ; preds = %95, %155
%158 = phi i64 [ 0, %95 ], [ %99, %155 ]
br label %329
159: ; preds = %10
br i1 %6, label %160, label %364
160: ; preds = %159
%161 = zext i32 %0 to i64
%162 = icmp ult i32 %0, 4
br i1 %162, label %191, label %163
163: ; preds = %160
%164 = and i64 %161, 4294967292
br label %165
165: ; preds = %165, %163
%166 = phi i64 [ 0, %163 ], [ %186, %165 ]
%167 = phi <2 x i32> [ <i32 0, i32 1>, %163 ], [ %187, %165 ]
%168 = shl <2 x i32> %167, <i32 1, i32 1>
%169 = shl <2 x i32> %167, <i32 1, i32 1>
%170 = and <2 x i32> %168, <i32 2, i32 2>
%171 = and <2 x i32> %169, <i32 2, i32 2>
%172 = add nsw <2 x i32> %170, <i32 -1, i32 -1>
%173 = add nsw <2 x i32> %171, <i32 -1, i32 -1>
%174 = sitofp <2 x i32> %172 to <2 x double>
%175 = sitofp <2 x i32> %173 to <2 x double>
%176 = getelementptr inbounds double, double* %1, i64 %166
%177 = bitcast double* %176 to <2 x double>*
%178 = load <2 x double>, <2 x double>* %177
%179 = getelementptr inbounds double, double* %176, i64 2
%180 = bitcast double* %179 to <2 x double>*
%181 = load <2 x double>, <2 x double>* %180
%182 = fadd <2 x double> %178, %174
%183 = fadd <2 x double> %181, %175
%184 = bitcast double* %176 to <2 x double>*
store <2 x double> %182, <2 x double>* %184
%185 = bitcast double* %179 to <2 x double>*
store <2 x double> %183, <2 x double>* %185
%186 = add nuw i64 %166, 4
%187 = add <2 x i32> %167, <i32 4, i32 4>
%188 = icmp eq i64 %186, %164
br i1 %188, label %189, label %165
189: ; preds = %165
%190 = icmp eq i64 %164, %161
br i1 %190, label %205, label %191
191: ; preds = %160, %189
%192 = phi i64 [ 0, %160 ], [ %164, %189 ]
br label %193
193: ; preds = %191, %193
%194 = phi i64 [ %203, %193 ], [ %192, %191 ]
%195 = trunc i64 %194 to i32
%196 = shl i32 %195, 1
%197 = and i32 %196, 2
%198 = add nsw i32 %197, -1
%199 = sitofp i32 %198 to double
%200 = getelementptr inbounds double, double* %1, i64 %194
%201 = load double, double* %200
%202 = fadd double %201, %199
store double %202, double* %200
%203 = add nuw nsw i64 %194, 1
%204 = icmp eq i64 %203, %161
br i1 %204, label %205, label %193
205: ; preds = %193, %189
%206 = sitofp i32 %0 to double
%207 = fdiv double 0x401921FB54442D18, %206
br i1 %6, label %208, label %364
208: ; preds = %205
%209 = add nsw i64 %161, -1
%210 = and i64 %161, 1
%211 = icmp eq i64 %209, 0
br i1 %211, label %214, label %212
212: ; preds = %208
%213 = and i64 %161, 4294967294
br label %232
214: ; preds = %232, %208
%215 = phi i64 [ 0, %208 ], [ %252, %232 ]
%216 = icmp eq i64 %210, 0
br i1 %216, label %226, label %217
217: ; preds = %214
%218 = trunc i64 %215 to i32
%219 = sitofp i32 %218 to double
%220 = tail call double @llvm.fmuladd.f64(double %207, double %219, double 0.000000e+00)
%221 = tail call double @sin(double %220)
%222 = tail call double @llvm.fmuladd.f64(double %221, double 1.700000e+03, double 2.048000e+03)
%223 = getelementptr inbounds double, double* %1, i64 %215
%224 = load double, double* %223
%225 = fadd double %224, %222
store double %225, double* %223
br label %226
226: ; preds = %214, %217
br i1 %6, label %227, label %364
227: ; preds = %226
%228 = and i64 %161, 1
%229 = icmp eq i64 %209, 0
br i1 %229, label %255, label %230
230: ; preds = %227
%231 = and i64 %161, 4294967294
br label %273
232: ; preds = %232, %212
%233 = phi i64 [ 0, %212 ], [ %252, %232 ]
%234 = phi i64 [ 0, %212 ], [ %253, %232 ]
%235 = trunc i64 %233 to i32
%236 = sitofp i32 %235 to double
%237 = tail call double @llvm.fmuladd.f64(double %207, double %236, double 0.000000e+00)
%238 = tail call double @sin(double %237)
%239 = tail call double @llvm.fmuladd.f64(double %238, double 1.700000e+03, double 2.048000e+03)
%240 = getelementptr inbounds double, double* %1, i64 %233
%241 = load double, double* %240
%242 = fadd double %241, %239
store double %242, double* %240
%243 = or i64 %233, 1
%244 = trunc i64 %243 to i32
%245 = sitofp i32 %244 to double
%246 = tail call double @llvm.fmuladd.f64(double %207, double %245, double 0.000000e+00)
%247 = tail call double @sin(double %246)
%248 = tail call double @llvm.fmuladd.f64(double %247, double 1.700000e+03, double 2.048000e+03)
%249 = getelementptr inbounds double, double* %1, i64 %243
%250 = load double, double* %249
%251 = fadd double %250, %248
store double %251, double* %249
%252 = add nuw nsw i64 %233, 2
%253 = add i64 %234, 2
%254 = icmp eq i64 %253, %213
br i1 %254, label %214, label %232
255: ; preds = %273, %227
%256 = phi i64 [ 0, %227 ], [ %293, %273 ]
%257 = icmp eq i64 %228, 0
br i1 %257, label %267, label %258
258: ; preds = %255
%259 = trunc i64 %256 to i32
%260 = sitofp i32 %259 to double
%261 = fmul double %260, 3.000000e+00
%262 = fmul double %207, %261
%263 = tail call double @cos(double %262)
%264 = getelementptr inbounds double, double* %1, i64 %256
%265 = load double, double* %264
%266 = tail call double @llvm.fmuladd.f64(double %263, double 6.000000e+04, double %265)
store double %266, double* %264
br label %267
267: ; preds = %255, %258
br i1 %6, label %268, label %364
268: ; preds = %267
%269 = and i64 %161, 1
%270 = icmp eq i64 %209, 0
br i1 %270, label %339, label %271
271: ; preds = %268
%272 = and i64 %161, 4294967294
br label %296
273: ; preds = %273, %230
%274 = phi i64 [ 0, %230 ], [ %293, %273 ]
%275 = phi i64 [ 0, %230 ], [ %294, %273 ]
%276 = trunc i64 %274 to i32
%277 = sitofp i32 %276 to double
%278 = fmul double %277, 3.000000e+00
%279 = fmul double %207, %278
%280 = tail call double @cos(double %279)
%281 = getelementptr inbounds double, double* %1, i64 %274
%282 = load double, double* %281
%283 = tail call double @llvm.fmuladd.f64(double %280, double 6.000000e+04, double %282)
store double %283, double* %281
%284 = or i64 %274, 1
%285 = trunc i64 %284 to i32
%286 = sitofp i32 %285 to double
%287 = fmul double %286, 3.000000e+00
%288 = fmul double %207, %287
%289 = tail call double @cos(double %288)
%290 = getelementptr inbounds double, double* %1, i64 %284
%291 = load double, double* %290
%292 = tail call double @llvm.fmuladd.f64(double %289, double 6.000000e+04, double %291)
store double %292, double* %290
%293 = add nuw nsw i64 %274, 2
%294 = add i64 %275, 2
%295 = icmp eq i64 %294, %231
br i1 %295, label %255, label %273
296: ; preds = %296, %271
%297 = phi i64 [ 0, %271 ], [ %316, %296 ]
%298 = phi i64 [ 0, %271 ], [ %317, %296 ]
%299 = trunc i64 %297 to i32
%300 = sitofp i32 %299 to double
%301 = fmul double %300, 7.000000e+00
%302 = tail call double @llvm.fmuladd.f64(double %207, double %301, double 0x3FE921FB54442D18)
%303 = tail call double @sin(double %302)
%304 = getelementptr inbounds double, double* %1, i64 %297
%305 = load double, double* %304
%306 = tail call double @llvm.fmuladd.f64(double %303, double 0x4075D0724ED042DA, double %305)
store double %306, double* %304
%307 = or i64 %297, 1
%308 = trunc i64 %307 to i32
%309 = sitofp i32 %308 to double
%310 = fmul double %309, 7.000000e+00
%311 = tail call double @llvm.fmuladd.f64(double %207, double %310, double 0x3FE921FB54442D18)
%312 = tail call double @sin(double %311)
%313 = getelementptr inbounds double, double* %1, i64 %307
%314 = load double, double* %313
%315 = tail call double @llvm.fmuladd.f64(double %312, double 0x4075D0724ED042DA, double %314)
store double %315, double* %313
%316 = add nuw nsw i64 %297, 2
%317 = add i64 %298, 2
%318 = icmp eq i64 %317, %272
br i1 %318, label %339, label %296
319: ; preds = %92, %319
%320 = phi i64 [ %322, %319 ], [ %93, %92 ]
%321 = getelementptr inbounds double, double* %1, i64 %320
store double 1.000000e+00, double* %321
%322 = add nuw nsw i64 %320, 1
%323 = icmp eq i64 %322, %21
br i1 %323, label %351, label %319
324: ; preds = %16, %15
store double 1.000000e+00, double* %1
br label %351
325: ; preds = %12, %11
%326 = bitcast double* %1 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 2.000000e+00>, <2 x double>* %326
%327 = getelementptr inbounds double, double* %1, i64 2
%328 = bitcast double* %327 to <2 x double>*
store <2 x double> <double 4.000000e+00, double 8.000000e+00>, <2 x double>* %328
br label %351
329: ; preds = %157, %329
%330 = phi i64 [ %337, %329 ], [ %158, %157 ]
%331 = trunc i64 %330 to i32
%332 = shl i32 %331, 1
%333 = and i32 %332, 2
%334 = add nsw i32 %333, -1
%335 = sitofp i32 %334 to double
%336 = getelementptr inbounds double, double* %1, i64 %330
store double %335, double* %336
%337 = add nuw nsw i64 %330, 1
%338 = icmp eq i64 %337, %96
br i1 %338, label %351, label %329
339: ; preds = %296, %268
%340 = phi i64 [ 0, %268 ], [ %316, %296 ]
%341 = icmp eq i64 %269, 0
br i1 %341, label %351, label %342
342: ; preds = %339
%343 = trunc i64 %340 to i32
%344 = sitofp i32 %343 to double
%345 = fmul double %344, 7.000000e+00
%346 = tail call double @llvm.fmuladd.f64(double %207, double %345, double 0x3FE921FB54442D18)
%347 = tail call double @sin(double %346)
%348 = getelementptr inbounds double, double* %1, i64 %340
%349 = load double, double* %348
%350 = tail call double @llvm.fmuladd.f64(double %347, double 0x4075D0724ED042DA, double %349)
store double %350, double* %348
br label %351
351: ; preds = %319, %329, %342, %339, %90, %155, %325, %324
%352 = icmp eq i32 %3, 1
%353 = and i1 %352, %6
br i1 %353, label %354, label %364
354: ; preds = %351
%355 = zext i32 %0 to i64
br label %356
356: ; preds = %354, %356
%357 = phi i64 [ 0, %354 ], [ %362, %356 ]
%358 = getelementptr inbounds double, double* %1, i64 %357
%359 = load double, double* %358
%360 = trunc i64 %357 to i32
%361 = tail call i32 @SCIprintf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0), i32 %360, double %359)
%362 = add nuw nsw i64 %357, 1
%363 = icmp eq i64 %362, %355
br i1 %363, label %364, label %356
364: ; preds = %356, %159, %205, %226, %267, %94, %19, %351
ret void
}