int *getkeydirective(int *key) {
  int key_directive[32];
  int i;
  for (i = 0; i < 32; i++) {
    key_directive[i] = floor(key[i] / 64.0f);
  }
  int *kd;
  kd = &key_directive;
  return kd;
}


x86 assembly (clang, -O0):
<getkeydirective>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0x94(%rbp)
cmpl   $0x20,-0x94(%rbp)
jge    1181 <getkeydirective+0x71>
mov    -0x8(%rbp),%rax
movslq -0x94(%rbp),%rcx
cvtsi2ssl (%rax,%rcx,4),%xmm0
movss  0xeb2(%rip),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
call   1030 <floor@plt>
cvttsd2si %xmm0,%ecx
movslq -0x94(%rbp),%rax
mov    %ecx,-0x90(%rbp,%rax,4)
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    1129 <getkeydirective+0x19>
lea    -0x90(%rbp),%rax
mov    %rax,-0xa0(%rbp)
mov    -0xa0(%rbp),%rax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<getkeydirective>:
push   %rax
lea    -0x80(%rsp),%rax
pop    %rcx
ret

LLVM IR (-O0):
define i32* @getkeydirective(i32* %0) {
%2 = alloca i32*
%3 = alloca [32 x i32]
%4 = alloca i32
%5 = alloca i32*
store i32* %0, i32** %2
store i32 0, i32* %4
br label %6
6: ; preds = %23, %1
%7 = load i32, i32* %4
%8 = icmp slt i32 %7, 32
br i1 %8, label %9, label %26
9: ; preds = %6
%10 = load i32*, i32** %2
%11 = load i32, i32* %4
%12 = sext i32 %11 to i64
%13 = getelementptr inbounds i32, i32* %10, i64 %12
%14 = load i32, i32* %13
%15 = sitofp i32 %14 to float
%16 = fdiv float %15, 6.400000e+01
%17 = fpext float %16 to double
%18 = call double @llvm.floor.f64(double %17)
%19 = fptosi double %18 to i32
%20 = load i32, i32* %4
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [32 x i32], [32 x i32]* %3, i64 0, i64 %21
store i32 %19, i32* %22
br label %23
23: ; preds = %9
%24 = load i32, i32* %4
%25 = add nsw i32 %24, 1
store i32 %25, i32* %4
br label %6
26: ; preds = %6
%27 = bitcast [32 x i32]* %3 to i32*
store i32* %27, i32** %5
%28 = load i32*, i32** %5
ret i32* %28
}

LLVM IR (-O2):
define noalias i32* @getkeydirective(i32* nocapture %0) {
%2 = alloca [32 x i32]
%3 = bitcast [32 x i32]* %2 to i8*
%4 = bitcast i32* %0 to <4 x i32>*
%5 = load <4 x i32>, <4 x i32>* %4
%6 = sitofp <4 x i32> %5 to <4 x float>
%7 = fmul <4 x float> %6, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
%8 = call <4 x float> @llvm.floor.v4f32(<4 x float> %7)
%9 = fptosi <4 x float> %8 to <4 x i32>
%10 = bitcast [32 x i32]* %2 to <4 x i32>*
store <4 x i32> %9, <4 x i32>* %10
%11 = getelementptr inbounds i32, i32* %0, i64 4
%12 = bitcast i32* %11 to <4 x i32>*
%13 = load <4 x i32>, <4 x i32>* %12
%14 = sitofp <4 x i32> %13 to <4 x float>
%15 = fmul <4 x float> %14, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
%16 = call <4 x float> @llvm.floor.v4f32(<4 x float> %15)
%17 = fptosi <4 x float> %16 to <4 x i32>
%18 = getelementptr inbounds [32 x i32], [32 x i32]* %2, i64 0, i64 4
%19 = bitcast i32* %18 to <4 x i32>*
store <4 x i32> %17, <4 x i32>* %19
%20 = getelementptr inbounds i32, i32* %0, i64 8
%21 = bitcast i32* %20 to <4 x i32>*
%22 = load <4 x i32>, <4 x i32>* %21
%23 = sitofp <4 x i32> %22 to <4 x float>
%24 = fmul <4 x float> %23, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
%25 = call <4 x float> @llvm.floor.v4f32(<4 x float> %24)
%26 = fptosi <4 x float> %25 to <4 x i32>
%27 = getelementptr inbounds [32 x i32], [32 x i32]* %2, i64 0, i64 8
%28 = bitcast i32* %27 to <4 x i32>*
store <4 x i32> %26, <4 x i32>* %28
%29 = getelementptr inbounds i32, i32* %0, i64 12
%30 = bitcast i32* %29 to <4 x i32>*
%31 = load <4 x i32>, <4 x i32>* %30
%32 = sitofp <4 x i32> %31 to <4 x float>
%33 = fmul <4 x float> %32, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
%34 = call <4 x float> @llvm.floor.v4f32(<4 x float> %33)
%35 = fptosi <4 x float> %34 to <4 x i32>
%36 = getelementptr inbounds [32 x i32], [32 x i32]* %2, i64 0, i64 12
%37 = bitcast i32* %36 to <4 x i32>*
store <4 x i32> %35, <4 x i32>* %37
%38 = getelementptr inbounds i32, i32* %0, i64 16
%39 = bitcast i32* %38 to <4 x i32>*
%40 = load <4 x i32>, <4 x i32>* %39
%41 = sitofp <4 x i32> %40 to <4 x float>
%42 = fmul <4 x float> %41, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
%43 = call <4 x float> @llvm.floor.v4f32(<4 x float> %42)
%44 = fptosi <4 x float> %43 to <4 x i32>
%45 = getelementptr inbounds [32 x i32], [32 x i32]* %2, i64 0, i64 16
%46 = bitcast i32* %45 to <4 x i32>*
store <4 x i32> %44, <4 x i32>* %46
%47 = getelementptr inbounds i32, i32* %0, i64 20
%48 = bitcast i32* %47 to <4 x i32>*
%49 = load <4 x i32>, <4 x i32>* %48
%50 = sitofp <4 x i32> %49 to <4 x float>
%51 = fmul <4 x float> %50, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
%52 = call <4 x float> @llvm.floor.v4f32(<4 x float> %51)
%53 = fptosi <4 x float> %52 to <4 x i32>
%54 = getelementptr inbounds [32 x i32], [32 x i32]* %2, i64 0, i64 20
%55 = bitcast i32* %54 to <4 x i32>*
store <4 x i32> %53, <4 x i32>* %55
%56 = getelementptr inbounds i32, i32* %0, i64 24
%57 = bitcast i32* %56 to <4 x i32>*
%58 = load <4 x i32>, <4 x i32>* %57
%59 = sitofp <4 x i32> %58 to <4 x float>
%60 = fmul <4 x float> %59, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
%61 = call <4 x float> @llvm.floor.v4f32(<4 x float> %60)
%62 = fptosi <4 x float> %61 to <4 x i32>
%63 = getelementptr inbounds [32 x i32], [32 x i32]* %2, i64 0, i64 24
%64 = bitcast i32* %63 to <4 x i32>*
store <4 x i32> %62, <4 x i32>* %64
%65 = getelementptr inbounds i32, i32* %0, i64 28
%66 = bitcast i32* %65 to <4 x i32>*
%67 = load <4 x i32>, <4 x i32>* %66
%68 = sitofp <4 x i32> %67 to <4 x float>
%69 = fmul <4 x float> %68, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
%70 = call <4 x float> @llvm.floor.v4f32(<4 x float> %69)
%71 = fptosi <4 x float> %70 to <4 x i32>
%72 = getelementptr inbounds [32 x i32], [32 x i32]* %2, i64 0, i64 28
%73 = bitcast i32* %72 to <4 x i32>*
store <4 x i32> %71, <4 x i32>* %73
%74 = getelementptr inbounds [32 x i32], [32 x i32]* %2, i64 0, i64 0
ret i32* %74
}