#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 */
scalar_t__ malloc(int);
double *smileDsp_winBar(long _N) {
  long i;
  double *ret = (double *)malloc(sizeof(double) * _N);
  double *x = ret;
  for (i = 0; i < _N / 2; i++) {
    *x = 2.0 * (double)(i) / (double)(_N - 1);
    x++;
  }
  for (i = _N / 2; i < _N; i++) {
    *x = 2.0 * (double)(_N - 1 - i) / (double)(_N - 1);
    x++;
  }
  return ret;
}


x86 assembly (clang, -O0):
<smileDsp_winBar>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x20(%rbp)
movq   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    $0x2,%ecx
cqto
idiv   %rcx
mov    %rax,%rcx
mov    -0x28(%rbp),%rax
cmp    %rcx,%rax
jge    11ad <smileDsp_winBar+0x9d>
cvtsi2sdq -0x10(%rbp),%xmm1
movsd  0xe8d(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
sub    $0x1,%rax
cvtsi2sd %rax,%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    113f <smileDsp_winBar+0x2f>
mov    -0x8(%rbp),%rax
mov    $0x2,%ecx
cqto
idiv   %rcx
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x8(%rbp),%rax
jge    1220 <smileDsp_winBar+0x110>
mov    -0x8(%rbp),%rax
sub    $0x1,%rax
sub    -0x10(%rbp),%rax
cvtsi2sd %rax,%xmm1
movsd  0xe1a(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
sub    $0x1,%rax
cvtsi2sd %rax,%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    11bf <smileDsp_winBar+0xaf>
mov    -0x18(%rbp),%rax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<smileDsp_winBar>:
push   %r14
push   %rbx
push   %rax
mov    %rdi,%r14
lea    0x0(,%rdi,8),%edi
call   1030 <malloc@plt>
mov    %r14,%rcx
shr    $0x3f,%rcx
add    %r14,%rcx
sar    %rcx
mov    %rax,%rdx
cmp    $0x2,%r14
jl     128a <smileDsp_winBar+0x17a>
lea    -0x1(%r14),%rdx
cvtsi2sd %rdx,%xmm0
cmp    $0x2,%rcx
jae    1156 <smileDsp_winBar+0x46>
xor    %esi,%esi
mov    %rax,%rdx
jmp    1269 <smileDsp_winBar+0x159>
mov    %rcx,%rsi
and    $0xfffffffffffffffe,%rsi
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x2(%rsi),%rdx
mov    %rdx,%r8
shr    %r8
add    $0x1,%r8
test   %rdx,%rdx
je     1253 <smileDsp_winBar+0x143>
mov    %r8,%rdx
and    $0xfffffffffffffffe,%rdx
movdqa 0xe85(%rip),%xmm2
xor    %edi,%edi
movdqa 0xe8b(%rip),%xmm3
movdqa 0xe93(%rip),%xmm4
nopl   (%rax)
movq   %xmm2,%rbx
xorps  %xmm5,%xmm5
cvtsi2sd %rbx,%xmm5
pshufd $0xee,%xmm2,%xmm6
movq   %xmm6,%rbx
xorps  %xmm6,%xmm6
cvtsi2sd %rbx,%xmm6
unpcklpd %xmm6,%xmm5
addpd  %xmm5,%xmm5
divpd  %xmm1,%xmm5
movdqa %xmm2,%xmm6
paddq  %xmm3,%xmm6
movq   %xmm6,%rbx
xorps  %xmm7,%xmm7
cvtsi2sd %rbx,%xmm7
pshufd $0xee,%xmm6,%xmm6
movq   %xmm6,%rbx
xorps  %xmm6,%xmm6
cvtsi2sd %rbx,%xmm6
movupd %xmm5,(%rax,%rdi,8)
unpcklpd %xmm6,%xmm7
addpd  %xmm7,%xmm7
divpd  %xmm1,%xmm7
movupd %xmm7,0x10(%rax,%rdi,8)
add    $0x4,%rdi
paddq  %xmm4,%xmm2
add    $0xfffffffffffffffe,%rdx
jne    11a0 <smileDsp_winBar+0x90>
movq   %xmm2,%rdx
xorps  %xmm3,%xmm3
cvtsi2sd %rdx,%xmm3
pshufd $0xee,%xmm2,%xmm2
movq   %xmm2,%rdx
xorps  %xmm2,%xmm2
cvtsi2sd %rdx,%xmm2
unpcklpd %xmm2,%xmm3
addpd  %xmm3,%xmm3
test   $0x1,%r8b
je     124d <smileDsp_winBar+0x13d>
divpd  %xmm1,%xmm3
movupd %xmm3,(%rax,%rdi,8)
lea    (%rax,%rsi,8),%rdx
jmp    1285 <smileDsp_winBar+0x175>
xorpd  %xmm3,%xmm3
movhpd 0xda1(%rip),%xmm3
xor    %edi,%edi
test   $0x1,%r8b
jne    1244 <smileDsp_winBar+0x134>
jmp    124d <smileDsp_winBar+0x13d>
xorps  %xmm1,%xmm1
cvtsi2sd %rsi,%xmm1
addsd  %xmm1,%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,(%rdx)
add    $0x8,%rdx
add    $0x1,%rsi
cmp    %rsi,%rcx
jne    1269 <smileDsp_winBar+0x159>
cmp    %r14,%rcx
jge    13fe <smileDsp_winBar+0x2ee>
lea    -0x1(%r14),%rsi
xorps  %xmm0,%xmm0
cvtsi2sd %rsi,%xmm0
mov    %r14,%r10
sub    %rcx,%r10
cmp    $0x2,%r10
jb     13d2 <smileDsp_winBar+0x2c2>
mov    %r10,%r8
movq   %rcx,%xmm1
pshufd $0x44,%xmm1,%xmm2
paddq  0xd4c(%rip),%xmm2
and    $0xfffffffffffffffe,%r8
movq   %rsi,%xmm1
pshufd $0x44,%xmm1,%xmm3
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x2(%r8),%rsi
mov    %rsi,%r9
shr    %r9
add    $0x1,%r9
test   %rsi,%rsi
je     1406 <smileDsp_winBar+0x2f6>
mov    %r9,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %edi,%edi
movdqa 0xd1d(%rip),%xmm8
movdqa 0xd25(%rip),%xmm5
nopl   0x0(%rax,%rax,1)
movdqa %xmm3,%xmm6
psubq  %xmm2,%xmm6
movq   %xmm6,%rbx
xorps  %xmm7,%xmm7
cvtsi2sd %rbx,%xmm7
pshufd $0xee,%xmm6,%xmm4
movq   %xmm4,%rbx
xorps  %xmm4,%xmm4
cvtsi2sd %rbx,%xmm4
unpcklpd %xmm4,%xmm7
addpd  %xmm7,%xmm7
divpd  %xmm1,%xmm7
psubq  %xmm8,%xmm6
movq   %xmm6,%rbx
xorps  %xmm4,%xmm4
cvtsi2sd %rbx,%xmm4
pshufd $0xee,%xmm6,%xmm6
movq   %xmm6,%rbx
xorps  %xmm6,%xmm6
cvtsi2sd %rbx,%xmm6
movupd %xmm7,(%rdx,%rdi,8)
unpcklpd %xmm6,%xmm4
addpd  %xmm4,%xmm4
divpd  %xmm1,%xmm4
movupd %xmm4,0x10(%rdx,%rdi,8)
add    $0x4,%rdi
paddq  %xmm5,%xmm2
add    $0xfffffffffffffffe,%rsi
jne    1310 <smileDsp_winBar+0x200>
test   $0x1,%r9b
je     13c6 <smileDsp_winBar+0x2b6>
psubq  %xmm2,%xmm3
movq   %xmm3,%rsi
xorps  %xmm2,%xmm2
cvtsi2sd %rsi,%xmm2
pshufd $0xee,%xmm3,%xmm3
movq   %xmm3,%rsi
xorps  %xmm3,%xmm3
cvtsi2sd %rsi,%xmm3
unpcklpd %xmm3,%xmm2
addpd  %xmm2,%xmm2
divpd  %xmm1,%xmm2
movupd %xmm2,(%rdx,%rdi,8)
cmp    %r8,%r10
je     13fe <smileDsp_winBar+0x2ee>
lea    (%rdx,%r8,8),%rdx
add    %r8,%rcx
not    %rcx
add    %r14,%rcx
nopl   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2sd %rcx,%xmm1
addsd  %xmm1,%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,(%rdx)
add    $0x8,%rdx
add    $0xffffffffffffffff,%rcx
jb     13e0 <smileDsp_winBar+0x2d0>
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret
xor    %edi,%edi
test   $0x1,%r9b
jne    1392 <smileDsp_winBar+0x282>
jmp    13c6 <smileDsp_winBar+0x2b6>

LLVM IR (-O0):
define double* @smileDsp_winBar(i64 %0) {
%2 = alloca i64
%3 = alloca i64
%4 = alloca double*
%5 = alloca double*
store i64 %0, i64* %2
%6 = load i64, i64* %2
%7 = mul i64 8, %6
%8 = trunc i64 %7 to i32
%9 = call i64 @malloc(i32 %8)
%10 = inttoptr i64 %9 to double*
store double* %10, double** %4
%11 = load double*, double** %4
store double* %11, double** %5
store i64 0, i64* %3
br label %12
12: ; preds = %28, %1
%13 = load i64, i64* %3
%14 = load i64, i64* %2
%15 = sdiv i64 %14, 2
%16 = icmp slt i64 %13, %15
br i1 %16, label %17, label %31
17: ; preds = %12
%18 = load i64, i64* %3
%19 = sitofp i64 %18 to double
%20 = fmul double 2.000000e+00, %19
%21 = load i64, i64* %2
%22 = sub nsw i64 %21, 1
%23 = sitofp i64 %22 to double
%24 = fdiv double %20, %23
%25 = load double*, double** %5
store double %24, double* %25
%26 = load double*, double** %5
%27 = getelementptr inbounds double, double* %26, i32 1
store double* %27, double** %5
br label %28
28: ; preds = %17
%29 = load i64, i64* %3
%30 = add nsw i64 %29, 1
store i64 %30, i64* %3
br label %12
31: ; preds = %12
%32 = load i64, i64* %2
%33 = sdiv i64 %32, 2
store i64 %33, i64* %3
br label %34
34: ; preds = %52, %31
%35 = load i64, i64* %3
%36 = load i64, i64* %2
%37 = icmp slt i64 %35, %36
br i1 %37, label %38, label %55
38: ; preds = %34
%39 = load i64, i64* %2
%40 = sub nsw i64 %39, 1
%41 = load i64, i64* %3
%42 = sub nsw i64 %40, %41
%43 = sitofp i64 %42 to double
%44 = fmul double 2.000000e+00, %43
%45 = load i64, i64* %2
%46 = sub nsw i64 %45, 1
%47 = sitofp i64 %46 to double
%48 = fdiv double %44, %47
%49 = load double*, double** %5
store double %48, double* %49
%50 = load double*, double** %5
%51 = getelementptr inbounds double, double* %50, i32 1
store double* %51, double** %5
br label %52
52: ; preds = %38
%53 = load i64, i64* %3
%54 = add nsw i64 %53, 1
store i64 %54, i64* %3
br label %34
55: ; preds = %34
%56 = load double*, double** %4
ret double* %56
}

LLVM IR (-O2):
define double* @smileDsp_winBar(i64 %0) {
%2 = trunc i64 %0 to i32
%3 = shl i32 %2, 3
%4 = tail call i64 @malloc(i32 %3)
%5 = inttoptr i64 %4 to double*
%6 = sdiv i64 %0, 2
%7 = icmp sgt i64 %0, 1
br i1 %7, label %8, label %60
8: ; preds = %1
%9 = add nsw i64 %0, -1
%10 = sitofp i64 %9 to double
%11 = icmp ult i64 %6, 2
br i1 %11, label %57, label %12
12: ; preds = %8
%13 = and i64 %6, -2
%14 = getelementptr double, double* %5, i64 %13
%15 = insertelement <2 x double> poison, double %10, i64 0
%16 = shufflevector <2 x double> %15, <2 x double> poison, <2 x i32> zeroinitializer
%17 = add nsw i64 %13, -2
%18 = lshr exact i64 %17, 1
%19 = add nuw i64 %18, 1
%20 = and i64 %19, 1
%21 = icmp eq i64 %17, 0
br i1 %21, label %47, label %22
22: ; preds = %12
%23 = and i64 %19, -2
br label %24
24: ; preds = %24, %22
%25 = phi i64 [ 0, %22 ], [ %40, %24 ]
%26 = phi <2 x i64> [ <i64 0, i64 1>, %22 ], [ %41, %24 ]
%27 = phi i64 [ 0, %22 ], [ %42, %24 ]
%28 = getelementptr double, double* %5, i64 %25
%29 = sitofp <2 x i64> %26 to <2 x double>
%30 = fmul <2 x double> %29, <double 2.000000e+00, double 2.000000e+00>
%31 = fdiv <2 x double> %30, %16
%32 = bitcast double* %28 to <2 x double>*
store <2 x double> %31, <2 x double>* %32
%33 = or i64 %25, 2
%34 = add <2 x i64> %26, <i64 2, i64 2>
%35 = getelementptr double, double* %5, i64 %33
%36 = sitofp <2 x i64> %34 to <2 x double>
%37 = fmul <2 x double> %36, <double 2.000000e+00, double 2.000000e+00>
%38 = fdiv <2 x double> %37, %16
%39 = bitcast double* %35 to <2 x double>*
store <2 x double> %38, <2 x double>* %39
%40 = add nuw i64 %25, 4
%41 = add <2 x i64> %26, <i64 4, i64 4>
%42 = add nuw i64 %27, 2
%43 = icmp eq i64 %42, %23
br i1 %43, label %44, label %24
44: ; preds = %24
%45 = sitofp <2 x i64> %41 to <2 x double>
%46 = fmul <2 x double> %45, <double 2.000000e+00, double 2.000000e+00>
br label %47
47: ; preds = %44, %12
%48 = phi i64 [ 0, %12 ], [ %40, %44 ]
%49 = phi <2 x double> [ <double 0.000000e+00, double 2.000000e+00>, %12 ], [ %46, %44 ]
%50 = icmp eq i64 %20, 0
br i1 %50, label %55, label %51
51: ; preds = %47
%52 = getelementptr double, double* %5, i64 %48
%53 = fdiv <2 x double> %49, %16
%54 = bitcast double* %52 to <2 x double>*
store <2 x double> %53, <2 x double>* %54
br label %55
55: ; preds = %47, %51
%56 = icmp eq i64 %6, %13
br i1 %56, label %60, label %57
57: ; preds = %8, %55
%58 = phi double* [ %5, %8 ], [ %14, %55 ]
%59 = phi i64 [ 0, %8 ], [ %13, %55 ]
br label %124
60: ; preds = %124, %55, %1
%61 = phi double* [ %5, %1 ], [ %14, %55 ], [ %130, %124 ]
%62 = icmp slt i64 %6, %0
br i1 %62, label %63, label %143
63: ; preds = %60
%64 = add nsw i64 %0, -1
%65 = sitofp i64 %64 to double
%66 = sub i64 %0, %6
%67 = icmp ult i64 %66, 2
br i1 %67, label %121, label %68
68: ; preds = %63
%69 = and i64 %66, -2
%70 = getelementptr double, double* %61, i64 %69
%71 = add i64 %6, %69
%72 = insertelement <2 x i64> poison, i64 %6, i64 0
%73 = shufflevector <2 x i64> %72, <2 x i64> poison, <2 x i32> zeroinitializer
%74 = add <2 x i64> %73, <i64 0, i64 1>
%75 = insertelement <2 x i64> poison, i64 %64, i64 0
%76 = shufflevector <2 x i64> %75, <2 x i64> poison, <2 x i32> zeroinitializer
%77 = insertelement <2 x double> poison, double %65, i64 0
%78 = shufflevector <2 x double> %77, <2 x double> poison, <2 x i32> zeroinitializer
%79 = add i64 %69, -2
%80 = lshr exact i64 %79, 1
%81 = add nuw i64 %80, 1
%82 = and i64 %81, 1
%83 = icmp eq i64 %79, 0
br i1 %83, label %108, label %84
84: ; preds = %68
%85 = and i64 %81, -2
br label %86
86: ; preds = %86, %84
%87 = phi i64 [ 0, %84 ], [ %104, %86 ]
%88 = phi <2 x i64> [ %74, %84 ], [ %105, %86 ]
%89 = phi i64 [ 0, %84 ], [ %106, %86 ]
%90 = getelementptr double, double* %61, i64 %87
%91 = sub nsw <2 x i64> %76, %88
%92 = sitofp <2 x i64> %91 to <2 x double>
%93 = fmul <2 x double> %92, <double 2.000000e+00, double 2.000000e+00>
%94 = fdiv <2 x double> %93, %78
%95 = bitcast double* %90 to <2 x double>*
store <2 x double> %94, <2 x double>* %95
%96 = or i64 %87, 2
%97 = add <2 x i64> %88, <i64 2, i64 2>
%98 = getelementptr double, double* %61, i64 %96
%99 = sub nsw <2 x i64> %76, %97
%100 = sitofp <2 x i64> %99 to <2 x double>
%101 = fmul <2 x double> %100, <double 2.000000e+00, double 2.000000e+00>
%102 = fdiv <2 x double> %101, %78
%103 = bitcast double* %98 to <2 x double>*
store <2 x double> %102, <2 x double>* %103
%104 = add nuw i64 %87, 4
%105 = add <2 x i64> %88, <i64 4, i64 4>
%106 = add nuw i64 %89, 2
%107 = icmp eq i64 %106, %85
br i1 %107, label %108, label %86
108: ; preds = %86, %68
%109 = phi i64 [ 0, %68 ], [ %104, %86 ]
%110 = phi <2 x i64> [ %74, %68 ], [ %105, %86 ]
%111 = icmp eq i64 %82, 0
br i1 %111, label %119, label %112
112: ; preds = %108
%113 = getelementptr double, double* %61, i64 %109
%114 = sub nsw <2 x i64> %76, %110
%115 = sitofp <2 x i64> %114 to <2 x double>
%116 = fmul <2 x double> %115, <double 2.000000e+00, double 2.000000e+00>
%117 = fdiv <2 x double> %116, %78
%118 = bitcast double* %113 to <2 x double>*
store <2 x double> %117, <2 x double>* %118
br label %119
119: ; preds = %108, %112
%120 = icmp eq i64 %66, %69
br i1 %120, label %143, label %121
121: ; preds = %63, %119
%122 = phi double* [ %61, %63 ], [ %70, %119 ]
%123 = phi i64 [ %6, %63 ], [ %71, %119 ]
br label %133
124: ; preds = %57, %124
%125 = phi double* [ %130, %124 ], [ %58, %57 ]
%126 = phi i64 [ %131, %124 ], [ %59, %57 ]
%127 = sitofp i64 %126 to double
%128 = fmul double %127, 2.000000e+00
%129 = fdiv double %128, %10
store double %129, double* %125
%130 = getelementptr inbounds double, double* %125, i64 1
%131 = add nuw nsw i64 %126, 1
%132 = icmp eq i64 %131, %6
br i1 %132, label %60, label %124
133: ; preds = %121, %133
%134 = phi double* [ %140, %133 ], [ %122, %121 ]
%135 = phi i64 [ %141, %133 ], [ %123, %121 ]
%136 = sub nsw i64 %64, %135
%137 = sitofp i64 %136 to double
%138 = fmul double %137, 2.000000e+00
%139 = fdiv double %138, %65
store double %139, double* %134
%140 = getelementptr inbounds double, double* %134, i64 1
%141 = add nsw i64 %135, 1
%142 = icmp eq i64 %141, %0
br i1 %142, label %143, label %133
143: ; preds = %133, %119, %60
ret double* %5
}