#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*/ printf(char *, ...);
void pv_output_events_on_circle(int step, float f[], float h[]) {
  int k;
  const int size = 35;
  int ka[] = {2727, 2728, 2736, 2744, 2753, 2999, 3057, 3270, 3362,
              3550, 3658, 4117, 4243, 4685, 4827, 4972, 5116, 5260,
              5404, 5548, 5692, 5835, 5981, 6419, 6549, 7002, 7118,
              7298, 7398, 7601, 7671, 7905, 7912, 7920, 7928};
  printf("%d: f  =", step);
  for (k = 0; k < size; k++) {
    if (f[ka[k]] > 0.0)
      printf("1");
    else
      printf("0");
  }
  printf(" h=");
  for (k = 0; k < size; k++) {
    if (h[ka[k]] > 0.0)
      printf("1");
    else
      printf("0");
  }
  printf("\n");
}


x86 assembly (clang, -O0):
<pv_output_events_on_circle>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x23,-0x20(%rbp)
lea    -0xb0(%rbp),%rdi
lea    0xeb5(%rip),%rsi
mov    $0x8c,%edx
call   1040 <memcpy@plt>
mov    -0x4(%rbp),%esi
lea    0xf2d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x23,-0x1c(%rbp)
jge    11d1 <pv_output_events_on_circle+0xb1>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movslq -0xb0(%rbp,%rcx,4),%rcx
ff
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    11b0 <pv_output_events_on_circle+0x90>
lea    0xef1(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    11be <pv_output_events_on_circle+0x9e>
lea    0xee0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    11c3 <pv_output_events_on_circle+0xa3>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    116d <pv_output_events_on_circle+0x4d>
lea    0xec1(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x23,-0x1c(%rbp)
jge    124a <pv_output_events_on_circle+0x12a>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movslq -0xb0(%rbp,%rcx,4),%rcx
ff
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1229 <pv_output_events_on_circle+0x109>
lea    0xe78(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1237 <pv_output_events_on_circle+0x117>
lea    0xe67(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    123c <pv_output_events_on_circle+0x11c>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11e6 <pv_output_events_on_circle+0xc6>
lea    0xe4c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pv_output_events_on_circle>:
push   %r15
push   %r14
push   %r12
push   %rbx
push   %rax
mov    %rdx,%r14
mov    %rsi,%r12
mov    %edi,%esi
lea    0xf65(%rip),%rdi
xor    %ebx,%ebx
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xec9(%rip),%r15
nopw   0x0(%rax,%rax,1)
movslq (%rbx,%r15,1),%rax
movss  (%r12,%rax,4),%xmm0
xor    %edi,%edi
ucomiss 0xe9d(%rip),%xmm0
seta   %dil
or     $0x30,%edi
call   1030 <putchar@plt>
add    $0x4,%rbx
cmp    $0x8c,%rbx
jne    1150 <pv_output_events_on_circle+0x30>
lea    0xf22(%rip),%rdi
xor    %ebx,%ebx
xor    %eax,%eax
call   1040 <printf@plt>
nopl   0x0(%rax)
movslq (%rbx,%r15,1),%rax
movss  (%r14,%rax,4),%xmm0
xor    %edi,%edi
ucomiss 0xe5d(%rip),%xmm0
seta   %dil
or     $0x30,%edi
call   1030 <putchar@plt>
add    $0x4,%rbx
cmp    $0x8c,%rbx
jne    1190 <pv_output_events_on_circle+0x70>
mov    $0xa,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
jmp    1030 <putchar@plt>

LLVM IR (-O0):
@__const.pv_output_events_on_circle.ka = [35 x i32] [i32 2727, i32 2728, i32 2736, i32 2744, i32 2753, i32 2999, i32 3057, i32 3270, i32 3362, i32 3550, i32 3658, i32 4117, i32 4243, i32 4685, i32 4827, i32 4972, i32 5116, i32 5260, i32 5404, i32 5548, i32 5692, i32 5835, i32 5981, i32 6419, i32 6549, i32 7002, i32 7118, i32 7298, i32 7398, i32 7601, i32 7671, i32 7905, i32 7912, i32 7920, i32 7928]
@.str = [9 x i8] c"%d: f =\00"
@.str.1 = [2 x i8] c"1\00"
@.str.2 = [2 x i8] c"0\00"
@.str.3 = [4 x i8] c" h=\00"
@.str.4 = [2 x i8] c"\0A\00"
define void @pv_output_events_on_circle(i32 %0, float* %1, float* %2) {
%4 = alloca i32
%5 = alloca float*
%6 = alloca float*
%7 = alloca i32
%8 = alloca i32
%9 = alloca [35 x i32]
store i32 %0, i32* %4
store float* %1, float** %5
store float* %2, float** %6
store i32 35, i32* %8
%10 = bitcast [35 x i32]* %9 to i8*
%11 = load i32, i32* %4
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %11)
store i32 0, i32* %7
br label %13
13: ; preds = %32, %3
%14 = load i32, i32* %7
%15 = icmp slt i32 %14, 35
br i1 %15, label %16, label %35
16: ; preds = %13
%17 = load float*, float** %5
%18 = load i32, i32* %7
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds [35 x i32], [35 x i32]* %9, i64 0, i64 %19
%21 = load i32, i32* %20
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds float, float* %17, i64 %22
%24 = load float, float* %23
%25 = fpext float %24 to double
%26 = fcmp ogt double %25, 0.000000e+00
br i1 %26, label %27, label %29
27: ; preds = %16
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %31
29: ; preds = %16
%30 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
br label %31
31: ; preds = %29, %27
br label %32
32: ; preds = %31
%33 = load i32, i32* %7
%34 = add nsw i32 %33, 1
store i32 %34, i32* %7
br label %13
35: ; preds = %13
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %7
br label %37
37: ; preds = %56, %35
%38 = load i32, i32* %7
%39 = icmp slt i32 %38, 35
br i1 %39, label %40, label %59
40: ; preds = %37
%41 = load float*, float** %6
%42 = load i32, i32* %7
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [35 x i32], [35 x i32]* %9, i64 0, i64 %43
%45 = load i32, i32* %44
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds float, float* %41, i64 %46
%48 = load float, float* %47
%49 = fpext float %48 to double
%50 = fcmp ogt double %49, 0.000000e+00
br i1 %50, label %51, label %53
51: ; preds = %40
%52 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %55
53: ; preds = %40
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
br label %55
55: ; preds = %53, %51
br label %56
56: ; preds = %55
%57 = load i32, i32* %7
%58 = add nsw i32 %57, 1
store i32 %58, i32* %7
br label %37
59: ; preds = %37
%60 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@__const.pv_output_events_on_circle.ka = [35 x i32] [i32 2727, i32 2728, i32 2736, i32 2744, i32 2753, i32 2999, i32 3057, i32 3270, i32 3362, i32 3550, i32 3658, i32 4117, i32 4243, i32 4685, i32 4827, i32 4972, i32 5116, i32 5260, i32 5404, i32 5548, i32 5692, i32 5835, i32 5981, i32 6419, i32 6549, i32 7002, i32 7118, i32 7298, i32 7398, i32 7601, i32 7671, i32 7905, i32 7912, i32 7920, i32 7928]
@.str = [9 x i8] c"%d: f =\00"
@.str.3 = [4 x i8] c" h=\00"
define void @pv_output_events_on_circle(i32 %0, float* nocapture %1, float* nocapture %2) {
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %0)
br label %5
5: ; preds = %3, %5
%6 = phi i64 [ 0, %3 ], [ %15, %5 ]
%7 = getelementptr inbounds [35 x i32], [35 x i32]* @__const.pv_output_events_on_circle.ka, i64 0, i64 %6
%8 = load i32, i32* %7
%9 = sext i32 %8 to i64
%10 = getelementptr inbounds float, float* %1, i64 %9
%11 = load float, float* %10
%12 = fcmp ogt float %11, 0.000000e+00
%13 = select i1 %12, i32 49, i32 48
%14 = tail call i32 @putchar(i32 %13)
%15 = add nuw nsw i64 %6, 1
%16 = icmp eq i64 %15, 35
br i1 %16, label %17, label %5
17: ; preds = %5
%18 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
br label %19
19: ; preds = %17, %19
%20 = phi i64 [ 0, %17 ], [ %29, %19 ]
%21 = getelementptr inbounds [35 x i32], [35 x i32]* @__const.pv_output_events_on_circle.ka, i64 0, i64 %20
%22 = load i32, i32* %21
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds float, float* %2, i64 %23
%25 = load float, float* %24
%26 = fcmp ogt float %25, 0.000000e+00
%27 = select i1 %26, i32 49, i32 48
%28 = tail call i32 @putchar(i32 %27)
%29 = add nuw nsw i64 %20, 1
%30 = icmp eq i64 %29, 35
br i1 %30, label %31, label %19
31: ; preds = %19
%32 = tail call i32 @putchar(i32 10)
ret void
}