int equaltempc(int n, double m, double scale[]) {
  int i;
  m /= n;
  for (i = 0; i < n; i++)
    scale[i] = i * m;
  return n;
}


x86 assembly (clang, -O0):
<equaltempc>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
cvtsi2sdl -0x4(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    115b <equaltempc+0x5b>
cvtsi2sdl -0x1c(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    112a <equaltempc+0x2a>
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<equaltempc>:
mov    %edi,%eax
test   %edi,%edi
jle    1229 <equaltempc+0x129>
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
mov    %eax,%r9d
cmp    $0x4,%eax
jae    1121 <equaltempc+0x21>
xor    %edx,%edx
jmp    1210 <equaltempc+0x110>
mov    %r9d,%edx
and    $0xfffffffc,%edx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%rdx),%rcx
mov    %rcx,%r8
shr    $0x2,%r8
add    $0x1,%r8
test   %rcx,%rcx
je     122a <equaltempc+0x12a>
mov    %r8,%rcx
and    $0xfffffffffffffffe,%rcx
movdqa 0xeaa(%rip),%xmm4
xor    %edi,%edi
movdqa 0xeaf(%rip),%xmm8
movdqa 0xeb6(%rip),%xmm9
movdqa 0xebe(%rip),%xmm5
movdqa 0xec6(%rip),%xmm6
nopw   0x0(%rax,%rax,1)
movdqa %xmm4,%xmm7
cvtdq2pd %xmm4,%xmm3
paddd  %xmm8,%xmm7
cvtdq2pd %xmm7,%xmm7
mulpd  %xmm1,%xmm3
mulpd  %xmm1,%xmm7
movupd %xmm3,(%rsi,%rdi,8)
movdqa %xmm4,%xmm3
paddd  %xmm9,%xmm3
movdqa %xmm4,%xmm2
paddd  %xmm5,%xmm2
cvtdq2pd %xmm3,%xmm3
cvtdq2pd %xmm2,%xmm2
movupd %xmm7,0x10(%rsi,%rdi,8)
mulpd  %xmm1,%xmm3
mulpd  %xmm1,%xmm2
movupd %xmm3,0x20(%rsi,%rdi,8)
movupd %xmm2,0x30(%rsi,%rdi,8)
add    $0x8,%rdi
paddd  %xmm6,%xmm4
add    $0xfffffffffffffffe,%rcx
jne    1180 <equaltempc+0x80>
test   $0x1,%r8b
je     1208 <equaltempc+0x108>
cvtdq2pd %xmm4,%xmm2
paddd  0xe1f(%rip),%xmm4
cvtdq2pd %xmm4,%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,(%rsi,%rdi,8)
movupd %xmm3,0x10(%rsi,%rdi,8)
cmp    %r9,%rdx
je     1229 <equaltempc+0x129>
nopl   (%rax)
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rsi,%rdx,8)
add    $0x1,%rdx
cmp    %rdx,%r9
jne    1210 <equaltempc+0x110>
ret
movdqa 0xdce(%rip),%xmm4
xor    %edi,%edi
test   $0x1,%r8b
jne    11e5 <equaltempc+0xe5>
jmp    1208 <equaltempc+0x108>

LLVM IR (-O0):
define i32 @equaltempc(i32 %0, double %1, double* %2) {
%4 = alloca i32
%5 = alloca double
%6 = alloca double*
%7 = alloca i32
store i32 %0, i32* %4
store double %1, double* %5
store double* %2, double** %6
%8 = load i32, i32* %4
%9 = sitofp i32 %8 to double
%10 = load double, double* %5
%11 = fdiv double %10, %9
store double %11, double* %5
store i32 0, i32* %7
br label %12
12: ; preds = %25, %3
%13 = load i32, i32* %7
%14 = load i32, i32* %4
%15 = icmp slt i32 %13, %14
br i1 %15, label %16, label %28
16: ; preds = %12
%17 = load i32, i32* %7
%18 = sitofp i32 %17 to double
%19 = load double, double* %5
%20 = fmul double %18, %19
%21 = load double*, double** %6
%22 = load i32, i32* %7
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds double, double* %21, i64 %23
store double %20, double* %24
br label %25
25: ; preds = %16
%26 = load i32, i32* %7
%27 = add nsw i32 %26, 1
store i32 %27, i32* %7
br label %12
28: ; preds = %12
%29 = load i32, i32* %4
ret i32 %29
}

LLVM IR (-O2):
define i32 @equaltempc(i32 returned %0, double %1, double* nocapture writeonly %2) {
%4 = sitofp i32 %0 to double
%5 = fdiv double %1, %4
%6 = icmp sgt i32 %0, 0
br i1 %6, label %7, label %77
7: ; preds = %3
%8 = zext i32 %0 to i64
%9 = icmp ult i32 %0, 4
br i1 %9, label %67, label %10
10: ; preds = %7
%11 = and i64 %8, 4294967292
%12 = insertelement <2 x double> poison, double %5, i64 0
%13 = shufflevector <2 x double> %12, <2 x double> poison, <2 x i32> zeroinitializer
%14 = insertelement <2 x double> poison, double %5, i64 0
%15 = shufflevector <2 x double> %14, <2 x double> poison, <2 x i32> zeroinitializer
%16 = add nsw i64 %11, -4
%17 = lshr exact i64 %16, 2
%18 = add nuw nsw i64 %17, 1
%19 = and i64 %18, 1
%20 = icmp eq i64 %16, 0
br i1 %20, label %51, label %21
21: ; preds = %10
%22 = and i64 %18, 9223372036854775806
br label %23
23: ; preds = %23, %21
%24 = phi i64 [ 0, %21 ], [ %47, %23 ]
%25 = phi <2 x i32> [ <i32 0, i32 1>, %21 ], [ %48, %23 ]
%26 = phi i64 [ 0, %21 ], [ %49, %23 ]
%27 = add <2 x i32> %25, <i32 2, i32 2>
%28 = sitofp <2 x i32> %25 to <2 x double>
%29 = sitofp <2 x i32> %27 to <2 x double>
%30 = fmul <2 x double> %13, %28
%31 = fmul <2 x double> %15, %29
%32 = getelementptr inbounds double, double* %2, i64 %24
%33 = bitcast double* %32 to <2 x double>*
store <2 x double> %30, <2 x double>* %33
%34 = getelementptr inbounds double, double* %32, i64 2
%35 = bitcast double* %34 to <2 x double>*
store <2 x double> %31, <2 x double>* %35
%36 = or i64 %24, 4
%37 = add <2 x i32> %25, <i32 4, i32 4>
%38 = add <2 x i32> %25, <i32 6, i32 6>
%39 = sitofp <2 x i32> %37 to <2 x double>
%40 = sitofp <2 x i32> %38 to <2 x double>
%41 = fmul <2 x double> %13, %39
%42 = fmul <2 x double> %15, %40
%43 = getelementptr inbounds double, double* %2, i64 %36
%44 = bitcast double* %43 to <2 x double>*
store <2 x double> %41, <2 x double>* %44
%45 = getelementptr inbounds double, double* %43, i64 2
%46 = bitcast double* %45 to <2 x double>*
store <2 x double> %42, <2 x double>* %46
%47 = add nuw i64 %24, 8
%48 = add <2 x i32> %25, <i32 8, i32 8>
%49 = add i64 %26, 2
%50 = icmp eq i64 %49, %22
br i1 %50, label %51, label %23
51: ; preds = %23, %10
%52 = phi i64 [ 0, %10 ], [ %47, %23 ]
%53 = phi <2 x i32> [ <i32 0, i32 1>, %10 ], [ %48, %23 ]
%54 = icmp eq i64 %19, 0
br i1 %54, label %65, label %55
55: ; preds = %51
%56 = add <2 x i32> %53, <i32 2, i32 2>
%57 = sitofp <2 x i32> %53 to <2 x double>
%58 = sitofp <2 x i32> %56 to <2 x double>
%59 = fmul <2 x double> %13, %57
%60 = fmul <2 x double> %15, %58
%61 = getelementptr inbounds double, double* %2, i64 %52
%62 = bitcast double* %61 to <2 x double>*
store <2 x double> %59, <2 x double>* %62
%63 = getelementptr inbounds double, double* %61, i64 2
%64 = bitcast double* %63 to <2 x double>*
store <2 x double> %60, <2 x double>* %64
br label %65
65: ; preds = %51, %55
%66 = icmp eq i64 %11, %8
br i1 %66, label %77, label %67
67: ; preds = %7, %65
%68 = phi i64 [ 0, %7 ], [ %11, %65 ]
br label %69
69: ; preds = %67, %69
%70 = phi i64 [ %75, %69 ], [ %68, %67 ]
%71 = trunc i64 %70 to i32
%72 = sitofp i32 %71 to double
%73 = fmul double %5, %72
%74 = getelementptr inbounds double, double* %2, i64 %70
store double %73, double* %74
%75 = add nuw nsw i64 %70, 1
%76 = icmp eq i64 %75, %8
br i1 %76, label %77, label %69
77: ; preds = %69, %65, %3
ret i32 %0
}