#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 */
double abs(float);
float pow(float, int);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ scanf(char *, ...);
float sin(float);
int main() {
  int n = 0;
  float x = 0, sine = 0, delta = 0;
  int done = 0;
  printf("how many terms? ");
  scanf("%d", &n);
  printf("value of x? ");
  scanf("%f", &x);
  x *= (3.1415926535 / 180.0);
  int cnt = 1;
  int i = 0;
  for (i = 1; i < (n + 1); i++) {
    int fac = 1, j;
    for (j = cnt; j > 0; j--)
      fac *= j;
    float term = pow(x, cnt) / (float)(fac);
    (i % 2) ? (sine += term) : (sine -= term);
    cnt += 2;
  }
  printf("approximate value of sin(%.6f) is %.6f\n", x, sine);
  delta = sin(x) - sine;
  delta > 0 ? printf("this is %e greater than the exact value", delta)
            : printf("this is %e less than the exact value", abs(delta));
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
lea    0xe7c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe7f(%rip),%rdi
lea    -0x8(%rbp),%rsi
mov    $0x0,%al
call   1060 <scanf@plt>
lea    0xe70(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe6f(%rip),%rdi
lea    -0xc(%rbp),%rsi
mov    $0x0,%al
call   1060 <scanf@plt>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe2a(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
movl   $0x1,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x1,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x8(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    12a5 <main+0x155>
movl   $0x1,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x28(%rbp)
jle    1238 <main+0xe8>
mov    -0x28(%rbp),%eax
imul   -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    1216 <main+0xc6>
movss  -0xc(%rbp),%xmm0
mov    -0x1c(%rbp),%edi
call   1070 <pow@plt>
cvtsi2ssl -0x24(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x20(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     127b <main+0x12b>
movss  -0x2c(%rbp),%xmm0
addss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
jmp    128e <main+0x13e>
movss  -0x2c(%rbp),%xmm1
movss  -0x10(%rbp),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0x10(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11f8 <main+0xa8>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x10(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xd6e(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
movss  -0xc(%rbp),%xmm0
call   1050 <sin@plt>
subss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1306 <main+0x1b6>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0xd5a(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
jmp    131e <main+0x1ce>
movss  -0x14(%rbp),%xmm0
call   1030 <abs@plt>
lea    0xd65(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x10,%rsp
movl   $0x0,0xc(%rsp)
movl   $0x0,0x4(%rsp)
lea    0xf51(%rip),%rdi
xor    %r14d,%r14d
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf51(%rip),%rdi
lea    0xc(%rsp),%rsi
xor    %eax,%eax
call   1060 <scanf@plt>
lea    0xf41(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf40(%rip),%rdi
lea    0x4(%rsp),%rsi
xor    %eax,%eax
call   1060 <scanf@plt>
movss  0x4(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  0xe3d(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x4(%rsp)
cmpl   $0x0,0xc(%rsp)
pxor   %xmm1,%xmm1
jle    1501 <main+0x3b1>
mov    $0x1,%r15d
pxor   %xmm1,%xmm1
movdqa 0xe41(%rip),%xmm10
movdqa 0xe48(%rip),%xmm11
movdqa 0xe4f(%rip),%xmm12
movdqa 0xe56(%rip),%xmm13
movdqa 0xe5d(%rip),%xmm14
movdqa 0xe64(%rip),%xmm15
movdqa 0xe6b(%rip),%xmm9
xor    %r12d,%r12d
mov    $0x1,%ebx
jmp    1296 <main+0x146>
nop
movss  0x8(%rsp),%xmm1
movdqa 0xdf1(%rip),%xmm10
movdqa 0xdf8(%rip),%xmm11
movdqa 0xdff(%rip),%xmm12
movdqa 0xe06(%rip),%xmm13
movdqa 0xe0d(%rip),%xmm14
movdqa 0xe14(%rip),%xmm15
movdqa 0xe1b(%rip),%xmm9
addss  %xmm0,%xmm1
add    $0x2,%ebx
lea    0x1(%r15),%eax
add    $0x1,%r12d
add    $0x2,%r14d
cmp    0xc(%rsp),%r15d
mov    %eax,%r15d
jge    14fb <main+0x3ab>
mov    %ebx,%eax
mov    $0x1,%ebp
cmp    $0x8,%ebx
movd   %xmm1,0x8(%rsp)
jb     14c0 <main+0x370>
mov    %r14d,%eax
and    $0x7ffffff8,%eax
add    $0xfffffff8,%eax
shr    $0x3,%eax
mov    %r12d,%ecx
and    $0x3ffffffc,%ecx
lea    (%rcx,%rcx,1),%edx
add    $0xfffffff8,%edx
mov    %edx,%ecx
shr    $0x3,%ecx
add    $0x1,%ecx
movd   %ebx,%xmm0
pshufd $0x0,%xmm0,%xmm0
paddd  0xd2e(%rip),%xmm0
cmp    $0x18,%edx
jae    1300 <main+0x1b0>
movdqa 0xd31(%rip),%xmm2
movdqa %xmm2,%xmm1
jmp    1401 <main+0x2b1>
nopl   0x0(%rax,%rax,1)
lea    0x1(%rax),%edx
and    $0xfffffffc,%edx
movdqa 0xd12(%rip),%xmm2
movdqa %xmm2,%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa %xmm0,%xmm3
paddd  %xmm10,%xmm3
pshufd $0xf5,%xmm1,%xmm4
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm4,%xmm5
pmuludq %xmm0,%xmm1
pshufd $0xf5,%xmm2,%xmm4
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm4,%xmm6
pmuludq %xmm2,%xmm3
movdqa %xmm0,%xmm2
paddd  %xmm11,%xmm2
movdqa %xmm0,%xmm4
paddd  %xmm12,%xmm4
pmuludq %xmm2,%xmm1
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm5,%xmm2
pmuludq %xmm4,%xmm3
pshufd $0xf5,%xmm4,%xmm4
pmuludq %xmm6,%xmm4
movdqa %xmm0,%xmm5
paddd  %xmm13,%xmm5
movdqa %xmm0,%xmm6
paddd  %xmm14,%xmm6
pshufd $0xf5,%xmm5,%xmm7
pmuludq %xmm2,%xmm7
pmuludq %xmm1,%xmm5
pshufd $0xf5,%xmm6,%xmm8
pmuludq %xmm4,%xmm8
pmuludq %xmm3,%xmm6
movdqa %xmm0,%xmm2
paddd  %xmm15,%xmm2
movdqa %xmm0,%xmm3
paddd  %xmm9,%xmm3
pmuludq %xmm2,%xmm5
pshufd $0xe8,%xmm5,%xmm1
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm7,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
pmuludq %xmm3,%xmm6
pshufd $0xe8,%xmm6,%xmm2
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm8,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
paddd  0xca8(%rip),%xmm0
add    $0xfffffffc,%edx
jne    1320 <main+0x1d0>
mov    %ebx,%edx
and    $0x7ffffff8,%edx
movdqa %xmm1,%xmm3
movdqa %xmm2,%xmm4
test   $0x3,%cl
je     147f <main+0x32f>
add    $0x1,%al
movzbl %al,%eax
and    $0x3,%eax
xchg   %ax,%ax
movdqa %xmm0,%xmm4
paddd  %xmm10,%xmm4
movdqa %xmm0,%xmm3
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pshufd $0xf5,%xmm1,%xmm1
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm1
punpckldq %xmm1,%xmm3
pshufd $0xf5,%xmm4,%xmm1
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm4
paddd  %xmm11,%xmm0
movdqa %xmm3,%xmm1
movdqa %xmm4,%xmm2
add    $0xffffffff,%eax
jne    1420 <main+0x2d0>
pshufd $0xf5,%xmm3,%xmm0
pshufd $0xf5,%xmm4,%xmm1
pmuludq %xmm0,%xmm1
pmuludq %xmm3,%xmm4
pshufd $0xee,%xmm4,%xmm0
pmuludq %xmm4,%xmm0
pshufd $0xaa,%xmm1,%xmm2
pmuludq %xmm1,%xmm2
pmuludq %xmm0,%xmm2
movd   %xmm2,%ebp
cmp    %edx,%ebx
je     14cd <main+0x37d>
mov    %ebx,%eax
and    $0x7,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
imul   %eax,%ebp
lea    -0x1(%rax),%ecx
cmp    $0x1,%eax
mov    %ecx,%eax
jg     14c0 <main+0x370>
movss  0x4(%rsp),%xmm0
mov    %ebx,%edi
call   1070 <pow@plt>
xorps  %xmm1,%xmm1
cvtsi2ss %ebp,%xmm1
divss  %xmm1,%xmm0
test   $0x1,%r15b
jne    1230 <main+0xe0>
xorps  0xbba(%rip),%xmm0
jmp    1230 <main+0xe0>
movss  0x4(%rsp),%xmm0
movd   %xmm1,0x8(%rsp)
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm1,%xmm1
lea    0xbd2(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
movss  0x4(%rsp),%xmm0
call   1050 <sin@plt>
subss  0x8(%rsp),%xmm0
ucomiss 0xb8b(%rip),%xmm0
jbe    1544 <main+0x3f4>
cvtss2sd %xmm0,%xmm0
lea    0xbce(%rip),%rdi
jmp    1550 <main+0x400>
call   1030 <abs@plt>
lea    0xbe8(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [17 x i8] c"how many terms? \00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [13 x i8] c"value of x? \00"
@.str.3 = [3 x i8] c"%f\00"
@.str.4 = [40 x i8] c"approximate value of sin(%.6f) is %.6f\0A\00"
@.str.5 = [40 x i8] c"this is %e greater than the exact value\00"
@.str.6 = [37 x i8] c"this is %e less than the exact value\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca float
store i32 0, i32* %1
store i32 0, i32* %2
store float 0.000000e+00, float* %3
store float 0.000000e+00, float* %4
store float 0.000000e+00, float* %5
store i32 0, i32* %6
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0))
%13 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %2)
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.2, i64 0, i64 0))
%15 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), float* %3)
%16 = load float, float* %3
%17 = fpext float %16 to double
%18 = fmul double %17, 0x3F91DF46A2506B91
%19 = fptrunc double %18 to float
store float %19, float* %3
store i32 1, i32* %7
store i32 0, i32* %8
store i32 1, i32* %8
br label %20
20: ; preds = %59, %0
%21 = load i32, i32* %8
%22 = load i32, i32* %2
%23 = add nsw i32 %22, 1
%24 = icmp slt i32 %21, %23
br i1 %24, label %25, label %62
25: ; preds = %20
store i32 1, i32* %9
%26 = load i32, i32* %7
store i32 %26, i32* %10
br label %27
27: ; preds = %34, %25
%28 = load i32, i32* %10
%29 = icmp sgt i32 %28, 0
br i1 %29, label %30, label %37
30: ; preds = %27
%31 = load i32, i32* %10
%32 = load i32, i32* %9
%33 = mul nsw i32 %32, %31
store i32 %33, i32* %9
br label %34
34: ; preds = %30
%35 = load i32, i32* %10
%36 = add nsw i32 %35, -1
store i32 %36, i32* %10
br label %27
37: ; preds = %27
%38 = load float, float* %3
%39 = load i32, i32* %7
%40 = call float @pow(float %38, i32 %39)
%41 = load i32, i32* %9
%42 = sitofp i32 %41 to float
%43 = fdiv float %40, %42
store float %43, float* %11
%44 = load i32, i32* %8
%45 = srem i32 %44, 2
%46 = icmp ne i32 %45, 0
br i1 %46, label %47, label %51
47: ; preds = %37
%48 = load float, float* %11
%49 = load float, float* %4
%50 = fadd float %49, %48
store float %50, float* %4
br label %55
51: ; preds = %37
%52 = load float, float* %11
%53 = load float, float* %4
%54 = fsub float %53, %52
store float %54, float* %4
br label %55
55: ; preds = %51, %47
%56 = phi float [ %50, %47 ], [ %54, %51 ]
%57 = load i32, i32* %7
%58 = add nsw i32 %57, 2
store i32 %58, i32* %7
br label %59
59: ; preds = %55
%60 = load i32, i32* %8
%61 = add nsw i32 %60, 1
store i32 %61, i32* %8
br label %20
62: ; preds = %20
%63 = load float, float* %3
%64 = fpext float %63 to double
%65 = load float, float* %4
%66 = fpext float %65 to double
%67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.4, i64 0, i64 0), double %64, double %66)
%68 = load float, float* %3
%69 = call float @sin(float %68)
%70 = load float, float* %4
%71 = fsub float %69, %70
store float %71, float* %5
%72 = load float, float* %5
%73 = fcmp ogt float %72, 0.000000e+00
br i1 %73, label %74, label %78
74: ; preds = %62
%75 = load float, float* %5
%76 = fpext float %75 to double
%77 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.5, i64 0, i64 0), double %76)
br label %82
78: ; preds = %62
%79 = load float, float* %5
%80 = call double @abs(float %79)
%81 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.6, i64 0, i64 0), double %80)
br label %82
82: ; preds = %78, %74
%83 = phi i32 [ %77, %74 ], [ %81, %78 ]
ret i32 0
}

LLVM IR (-O2):
@.str = [17 x i8] c"how many terms? \00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [13 x i8] c"value of x? \00"
@.str.3 = [3 x i8] c"%f\00"
@.str.4 = [40 x i8] c"approximate value of sin(%.6f) is %.6f\0A\00"
@.str.5 = [40 x i8] c"this is %e greater than the exact value\00"
@.str.6 = [37 x i8] c"this is %e less than the exact value\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca float
%3 = bitcast i32* %1 to i8*
store i32 0, i32* %1
%4 = bitcast float* %2 to i8*
store float 0.000000e+00, float* %2
%5 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0))
%6 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %1)
%7 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.2, i64 0, i64 0))
%8 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), float* %2)
%9 = load float, float* %2
%10 = fpext float %9 to double
%11 = fmul double %10, 0x3F91DF46A2506B91
%12 = fptrunc double %11 to float
store float %12, float* %2
%13 = load i32, i32* %1
%14 = icmp slt i32 %13, 1
br i1 %14, label %110, label %15
15: ; preds = %0, %92
%16 = phi i32 [ %107, %92 ], [ 0, %0 ]
%17 = phi float [ %102, %92 ], [ 0.000000e+00, %0 ]
%18 = phi i32 [ %104, %92 ], [ 1, %0 ]
%19 = phi i32 [ %103, %92 ], [ 1, %0 ]
%20 = shl i32 %16, 1
%21 = and i32 %20, 2147483640
%22 = add nsw i32 %21, -8
%23 = lshr exact i32 %22, 3
%24 = add nuw nsw i32 %23, 1
%25 = icmp ult i32 %19, 8
br i1 %25, label %83, label %26
26: ; preds = %15
%27 = and i32 %19, 2147483640
%28 = and i32 %19, 7
%29 = insertelement <4 x i32> poison, i32 %19, i64 0
%30 = shufflevector <4 x i32> %29, <4 x i32> poison, <4 x i32> zeroinitializer
%31 = add <4 x i32> %30, <i32 0, i32 -1, i32 -2, i32 -3>
%32 = and i32 %24, 3
%33 = icmp ult i32 %22, 24
br i1 %33, label %59, label %34
34: ; preds = %26
%35 = and i32 %24, 1073741820
br label %36
36: ; preds = %36, %34
%37 = phi <4 x i32> [ %31, %34 ], [ %56, %36 ]
%38 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %34 ], [ %54, %36 ]
%39 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %34 ], [ %55, %36 ]
%40 = phi i32 [ 0, %34 ], [ %57, %36 ]
%41 = add <4 x i32> %37, <i32 -4, i32 -4, i32 -4, i32 -4>
%42 = mul <4 x i32> %37, %38
%43 = mul <4 x i32> %41, %39
%44 = add <4 x i32> %37, <i32 -8, i32 -8, i32 -8, i32 -8>
%45 = add <4 x i32> %37, <i32 -12, i32 -12, i32 -12, i32 -12>
%46 = mul <4 x i32> %44, %42
%47 = mul <4 x i32> %45, %43
%48 = add <4 x i32> %37, <i32 -16, i32 -16, i32 -16, i32 -16>
%49 = add <4 x i32> %37, <i32 -20, i32 -20, i32 -20, i32 -20>
%50 = mul <4 x i32> %48, %46
%51 = mul <4 x i32> %49, %47
%52 = add <4 x i32> %37, <i32 -24, i32 -24, i32 -24, i32 -24>
%53 = add <4 x i32> %37, <i32 -28, i32 -28, i32 -28, i32 -28>
%54 = mul <4 x i32> %52, %50
%55 = mul <4 x i32> %53, %51
%56 = add <4 x i32> %37, <i32 -32, i32 -32, i32 -32, i32 -32>
%57 = add i32 %40, 4
%58 = icmp eq i32 %57, %35
br i1 %58, label %59, label %36
59: ; preds = %36, %26
%60 = phi <4 x i32> [ undef, %26 ], [ %54, %36 ]
%61 = phi <4 x i32> [ undef, %26 ], [ %55, %36 ]
%62 = phi <4 x i32> [ %31, %26 ], [ %56, %36 ]
%63 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %26 ], [ %54, %36 ]
%64 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %26 ], [ %55, %36 ]
%65 = icmp eq i32 %32, 0
br i1 %65, label %77, label %66
66: ; preds = %59, %66
%67 = phi <4 x i32> [ %74, %66 ], [ %62, %59 ]
%68 = phi <4 x i32> [ %72, %66 ], [ %63, %59 ]
%69 = phi <4 x i32> [ %73, %66 ], [ %64, %59 ]
%70 = phi i32 [ %75, %66 ], [ 0, %59 ]
%71 = add <4 x i32> %67, <i32 -4, i32 -4, i32 -4, i32 -4>
%72 = mul <4 x i32> %67, %68
%73 = mul <4 x i32> %71, %69
%74 = add <4 x i32> %67, <i32 -8, i32 -8, i32 -8, i32 -8>
%75 = add i32 %70, 1
%76 = icmp eq i32 %75, %32
br i1 %76, label %77, label %66
77: ; preds = %66, %59
%78 = phi <4 x i32> [ %60, %59 ], [ %72, %66 ]
%79 = phi <4 x i32> [ %61, %59 ], [ %73, %66 ]
%80 = mul <4 x i32> %79, %78
%81 = call i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> %80)
%82 = icmp eq i32 %19, %27
br i1 %82, label %92, label %83
83: ; preds = %15, %77
%84 = phi i32 [ %19, %15 ], [ %28, %77 ]
%85 = phi i32 [ 1, %15 ], [ %81, %77 ]
br label %86
86: ; preds = %83, %86
%87 = phi i32 [ %90, %86 ], [ %84, %83 ]
%88 = phi i32 [ %89, %86 ], [ %85, %83 ]
%89 = mul nsw i32 %87, %88
%90 = add nsw i32 %87, -1
%91 = icmp sgt i32 %87, 1
br i1 %91, label %86, label %92
92: ; preds = %86, %77
%93 = phi i32 [ %81, %77 ], [ %89, %86 ]
%94 = load float, float* %2
%95 = call float @pow(float %94, i32 %19)
%96 = sitofp i32 %93 to float
%97 = fdiv float %95, %96
%98 = and i32 %18, 1
%99 = icmp eq i32 %98, 0
%100 = fneg float %97
%101 = select i1 %99, float %100, float %97
%102 = fadd float %17, %101
%103 = add nuw nsw i32 %19, 2
%104 = add nuw nsw i32 %18, 1
%105 = load i32, i32* %1
%106 = icmp slt i32 %18, %105
%107 = add i32 %16, 1
br i1 %106, label %15, label %108
108: ; preds = %92
%109 = load float, float* %2
br label %110
110: ; preds = %108, %0
%111 = phi float [ %12, %0 ], [ %109, %108 ]
%112 = phi float [ 0.000000e+00, %0 ], [ %102, %108 ]
%113 = fpext float %111 to double
%114 = fpext float %112 to double
%115 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @.str.4, i64 0, i64 0), double %113, double %114)
%116 = load float, float* %2
%117 = call float @sin(float %116)
%118 = fsub float %117, %112
%119 = fcmp ogt float %118, 0.000000e+00
br i1 %119, label %120, label %123
120: ; preds = %110
%121 = fpext float %118 to double
%122 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @.str.5, i64 0, i64 0), double %121)
br label %126
123: ; preds = %110
%124 = call double @abs(float %118)
%125 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @.str.6, i64 0, i64 0), double %124)
br label %126
126: ; preds = %123, %120
ret i32 0
}