void tap_clip_and_warp(float *state) {
  int i;
  for (i = 0; i < 3; i++) {
    while (state[i] < 0) {
      state[i] += (double)6.2831853071795862;
    }
    while (state[i] >= (double)6.2831853071795862) {
      state[i] -= (double)6.2831853071795862;
    }
  }
  if (state[3] > 8.0) {
    state[3] = 8.0;
  }
  if (state[3] < -8.0) {
    state[3] = -8.0;
  }
  if (state[4] > 10.0) {
    state[4] = 10.0;
  }
  if (state[4] < -10.0) {
    state[4] = -10.0;
  }
  if (state[5] > 10.0) {
    state[5] = 10.0;
  }
  if (state[5] < -10.0) {
    state[5] = -10.0;
  }
}


x86 assembly (clang, -O0):
<tap_clip_and_warp>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x3,-0xc(%rbp)
jge    11c4 <tap_clip_and_warp+0xc4>
jmp    111e <tap_clip_and_warp+0x1e>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
xorps  %xmm0,%xmm0
ucomiss (%rax,%rcx,4),%xmm0
jbe    115e <tap_clip_and_warp+0x5e>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xed4(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    111e <tap_clip_and_warp+0x1e>
jmp    1163 <tap_clip_and_warp+0x63>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xea4(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     11b1 <tap_clip_and_warp+0xb1>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe81(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    1163 <tap_clip_and_warp+0x63>
jmp    11b6 <tap_clip_and_warp+0xb6>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    110f <tap_clip_and_warp+0xf>
mov    -0x8(%rbp),%rax
movss  0xc(%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe27(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11f4 <tap_clip_and_warp+0xf4>
mov    -0x8(%rbp),%rax
movss  0xe39(%rip),%xmm0
movss  %xmm0,0xc(%rax)
mov    -0x8(%rbp),%rax
movss  0xc(%rax),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdff(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1224 <tap_clip_and_warp+0x124>
mov    -0x8(%rbp),%rax
movss  0xe0d(%rip),%xmm0
movss  %xmm0,0xc(%rax)
mov    -0x8(%rbp),%rax
movss  0x10(%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdd7(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1254 <tap_clip_and_warp+0x154>
mov    -0x8(%rbp),%rax
movss  0xde1(%rip),%xmm0
movss  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movss  0x10(%rax),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdaf(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1284 <tap_clip_and_warp+0x184>
mov    -0x8(%rbp),%rax
movss  0xdb5(%rip),%xmm0
movss  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movss  0x14(%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd77(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12b4 <tap_clip_and_warp+0x1b4>
mov    -0x8(%rbp),%rax
movss  0xd81(%rip),%xmm0
movss  %xmm0,0x14(%rax)
mov    -0x8(%rbp),%rax
movss  0x14(%rax),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd4f(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12e4 <tap_clip_and_warp+0x1e4>
mov    -0x8(%rbp),%rax
movss  0xd55(%rip),%xmm0
movss  %xmm0,0x14(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<tap_clip_and_warp>:
movss  (%rdi),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm0,%xmm1
jbe    1135 <tap_clip_and_warp+0x35>
movsd  0xeec(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cvtss2sd %xmm0,%xmm0
addsd  %xmm2,%xmm0
cvtsd2ss %xmm0,%xmm0
ucomiss %xmm0,%xmm1
ja     1120 <tap_clip_and_warp+0x20>
movss  %xmm0,(%rdi)
cvtss2sd %xmm0,%xmm0
ucomisd 0xebf(%rip),%xmm0
jb     117c <tap_clip_and_warp+0x7c>
movsd  0xebd(%rip),%xmm1
movsd  0xead(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
addsd  %xmm1,%xmm0
xorps  %xmm3,%xmm3
cvtsd2ss %xmm0,%xmm3
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
ucomisd %xmm2,%xmm0
jae    1160 <tap_clip_and_warp+0x60>
movss  %xmm3,(%rdi)
movss  0x4(%rdi),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm0,%xmm1
jbe    11b6 <tap_clip_and_warp+0xb6>
movsd  0xe6f(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cvtss2sd %xmm0,%xmm0
addsd  %xmm2,%xmm0
cvtsd2ss %xmm0,%xmm0
ucomiss %xmm0,%xmm1
ja     11a0 <tap_clip_and_warp+0xa0>
movss  %xmm0,0x4(%rdi)
cvtss2sd %xmm0,%xmm0
ucomisd 0xe3e(%rip),%xmm0
jb     11fd <tap_clip_and_warp+0xfd>
movsd  0xe3c(%rip),%xmm1
movsd  0xe2c(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
addsd  %xmm1,%xmm0
xorps  %xmm3,%xmm3
cvtsd2ss %xmm0,%xmm3
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
ucomisd %xmm2,%xmm0
jae    11e0 <tap_clip_and_warp+0xe0>
movss  %xmm3,0x4(%rdi)
movss  0x8(%rdi),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm0,%xmm1
jbe    1236 <tap_clip_and_warp+0x136>
movsd  0xdee(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cvtss2sd %xmm0,%xmm0
addsd  %xmm2,%xmm0
cvtsd2ss %xmm0,%xmm0
ucomiss %xmm0,%xmm1
ja     1220 <tap_clip_and_warp+0x120>
movss  %xmm0,0x8(%rdi)
cvtss2sd %xmm0,%xmm0
ucomisd 0xdbe(%rip),%xmm0
jb     127d <tap_clip_and_warp+0x17d>
movsd  0xdbc(%rip),%xmm1
movsd  0xdac(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
addsd  %xmm1,%xmm0
xorps  %xmm3,%xmm3
cvtsd2ss %xmm0,%xmm3
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
ucomisd %xmm2,%xmm0
jae    1260 <tap_clip_and_warp+0x160>
movss  %xmm3,0x8(%rdi)
movss  0xc(%rdi),%xmm1
movss  0xd86(%rip),%xmm0
ucomiss %xmm0,%xmm1
ja     129c <tap_clip_and_warp+0x19c>
movss  0xd7d(%rip),%xmm0
ucomiss %xmm1,%xmm0
jbe    12a1 <tap_clip_and_warp+0x1a1>
movss  %xmm0,0xc(%rdi)
movss  0x10(%rdi),%xmm1
movss  0xd6a(%rip),%xmm0
ucomiss %xmm0,%xmm1
ja     12c0 <tap_clip_and_warp+0x1c0>
movss  0xd61(%rip),%xmm0
ucomiss %xmm1,%xmm0
jbe    12c5 <tap_clip_and_warp+0x1c5>
movss  %xmm0,0x10(%rdi)
movss  0x14(%rdi),%xmm1
movss  0xd46(%rip),%xmm0
ucomiss %xmm0,%xmm1
ja     12e4 <tap_clip_and_warp+0x1e4>
movss  0xd3d(%rip),%xmm0
ucomiss %xmm1,%xmm0
jbe    12e9 <tap_clip_and_warp+0x1e9>
movss  %xmm0,0x14(%rdi)
ret

LLVM IR (-O0):
define void @tap_clip_and_warp(float* %0) {
%2 = alloca float*
%3 = alloca i32
store float* %0, float** %2
store i32 0, i32* %3
br label %4
4: ; preds = %43, %1
%5 = load i32, i32* %3
%6 = icmp slt i32 %5, 3
br i1 %6, label %7, label %46
7: ; preds = %4
br label %8
8: ; preds = %15, %7
%9 = load float*, float** %2
%10 = load i32, i32* %3
%11 = sext i32 %10 to i64
%12 = getelementptr inbounds float, float* %9, i64 %11
%13 = load float, float* %12
%14 = fcmp olt float %13, 0.000000e+00
br i1 %14, label %15, label %24
15: ; preds = %8
%16 = load float*, float** %2
%17 = load i32, i32* %3
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds float, float* %16, i64 %18
%20 = load float, float* %19
%21 = fpext float %20 to double
%22 = fadd double %21, 0x401921FB54442D18
%23 = fptrunc double %22 to float
store float %23, float* %19
br label %8
24: ; preds = %8
br label %25
25: ; preds = %33, %24
%26 = load float*, float** %2
%27 = load i32, i32* %3
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds float, float* %26, i64 %28
%30 = load float, float* %29
%31 = fpext float %30 to double
%32 = fcmp oge double %31, 0x401921FB54442D18
br i1 %32, label %33, label %42
33: ; preds = %25
%34 = load float*, float** %2
%35 = load i32, i32* %3
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds float, float* %34, i64 %36
%38 = load float, float* %37
%39 = fpext float %38 to double
%40 = fsub double %39, 0x401921FB54442D18
%41 = fptrunc double %40 to float
store float %41, float* %37
br label %25
42: ; preds = %25
br label %43
43: ; preds = %42
%44 = load i32, i32* %3
%45 = add nsw i32 %44, 1
store i32 %45, i32* %3
br label %4
46: ; preds = %4
%47 = load float*, float** %2
%48 = getelementptr inbounds float, float* %47, i64 3
%49 = load float, float* %48
%50 = fpext float %49 to double
%51 = fcmp ogt double %50, 8.000000e+00
br i1 %51, label %52, label %55
52: ; preds = %46
%53 = load float*, float** %2
%54 = getelementptr inbounds float, float* %53, i64 3
store float 8.000000e+00, float* %54
br label %55
55: ; preds = %52, %46
%56 = load float*, float** %2
%57 = getelementptr inbounds float, float* %56, i64 3
%58 = load float, float* %57
%59 = fpext float %58 to double
%60 = fcmp olt double %59, -8.000000e+00
br i1 %60, label %61, label %64
61: ; preds = %55
%62 = load float*, float** %2
%63 = getelementptr inbounds float, float* %62, i64 3
store float -8.000000e+00, float* %63
br label %64
64: ; preds = %61, %55
%65 = load float*, float** %2
%66 = getelementptr inbounds float, float* %65, i64 4
%67 = load float, float* %66
%68 = fpext float %67 to double
%69 = fcmp ogt double %68, 1.000000e+01
br i1 %69, label %70, label %73
70: ; preds = %64
%71 = load float*, float** %2
%72 = getelementptr inbounds float, float* %71, i64 4
store float 1.000000e+01, float* %72
br label %73
73: ; preds = %70, %64
%74 = load float*, float** %2
%75 = getelementptr inbounds float, float* %74, i64 4
%76 = load float, float* %75
%77 = fpext float %76 to double
%78 = fcmp olt double %77, -1.000000e+01
br i1 %78, label %79, label %82
79: ; preds = %73
%80 = load float*, float** %2
%81 = getelementptr inbounds float, float* %80, i64 4
store float -1.000000e+01, float* %81
br label %82
82: ; preds = %79, %73
%83 = load float*, float** %2
%84 = getelementptr inbounds float, float* %83, i64 5
%85 = load float, float* %84
%86 = fpext float %85 to double
%87 = fcmp ogt double %86, 1.000000e+01
br i1 %87, label %88, label %91
88: ; preds = %82
%89 = load float*, float** %2
%90 = getelementptr inbounds float, float* %89, i64 5
store float 1.000000e+01, float* %90
br label %91
91: ; preds = %88, %82
%92 = load float*, float** %2
%93 = getelementptr inbounds float, float* %92, i64 5
%94 = load float, float* %93
%95 = fpext float %94 to double
%96 = fcmp olt double %95, -1.000000e+01
br i1 %96, label %97, label %100
97: ; preds = %91
%98 = load float*, float** %2
%99 = getelementptr inbounds float, float* %98, i64 5
store float -1.000000e+01, float* %99
br label %100
100: ; preds = %97, %91
ret void
}

LLVM IR (-O2):
define void @tap_clip_and_warp(float* nocapture %0) {
%2 = load float, float* %0
%3 = fcmp olt float %2, 0.000000e+00
br i1 %3, label %9, label %5
4: ; preds = %9
store float %13, float* %0
br label %5
5: ; preds = %4, %1
%6 = phi float [ %13, %4 ], [ %2, %1 ]
%7 = fpext float %6 to double
%8 = fcmp ult double %7, 0x401921FB54442D18
br i1 %8, label %22, label %15
9: ; preds = %1, %9
%10 = phi float [ %13, %9 ], [ %2, %1 ]
%11 = fpext float %10 to double
%12 = fadd double %11, 0x401921FB54442D18
%13 = fptrunc double %12 to float
%14 = fcmp olt float %13, 0.000000e+00
br i1 %14, label %9, label %4
15: ; preds = %5, %15
%16 = phi double [ %19, %15 ], [ %7, %5 ]
%17 = fadd double %16, 0xC01921FB54442D18
%18 = fptrunc double %17 to float
%19 = fpext float %18 to double
%20 = fcmp ult double %19, 0x401921FB54442D18
br i1 %20, label %21, label %15
21: ; preds = %15
store float %18, float* %0
br label %22
22: ; preds = %21, %5
%23 = getelementptr inbounds float, float* %0, i64 1
%24 = load float, float* %23
%25 = fcmp olt float %24, 0.000000e+00
br i1 %25, label %26, label %33
26: ; preds = %22, %26
%27 = phi float [ %30, %26 ], [ %24, %22 ]
%28 = fpext float %27 to double
%29 = fadd double %28, 0x401921FB54442D18
%30 = fptrunc double %29 to float
%31 = fcmp olt float %30, 0.000000e+00
br i1 %31, label %26, label %32
32: ; preds = %26
store float %30, float* %23
br label %33
33: ; preds = %32, %22
%34 = phi float [ %30, %32 ], [ %24, %22 ]
%35 = fpext float %34 to double
%36 = fcmp ult double %35, 0x401921FB54442D18
br i1 %36, label %44, label %37
37: ; preds = %33, %37
%38 = phi double [ %41, %37 ], [ %35, %33 ]
%39 = fadd double %38, 0xC01921FB54442D18
%40 = fptrunc double %39 to float
%41 = fpext float %40 to double
%42 = fcmp ult double %41, 0x401921FB54442D18
br i1 %42, label %43, label %37
43: ; preds = %37
store float %40, float* %23
br label %44
44: ; preds = %43, %33
%45 = getelementptr inbounds float, float* %0, i64 2
%46 = load float, float* %45
%47 = fcmp olt float %46, 0.000000e+00
br i1 %47, label %48, label %55
48: ; preds = %44, %48
%49 = phi float [ %52, %48 ], [ %46, %44 ]
%50 = fpext float %49 to double
%51 = fadd double %50, 0x401921FB54442D18
%52 = fptrunc double %51 to float
%53 = fcmp olt float %52, 0.000000e+00
br i1 %53, label %48, label %54
54: ; preds = %48
store float %52, float* %45
br label %55
55: ; preds = %54, %44
%56 = phi float [ %52, %54 ], [ %46, %44 ]
%57 = fpext float %56 to double
%58 = fcmp ult double %57, 0x401921FB54442D18
br i1 %58, label %66, label %59
59: ; preds = %55, %59
%60 = phi double [ %63, %59 ], [ %57, %55 ]
%61 = fadd double %60, 0xC01921FB54442D18
%62 = fptrunc double %61 to float
%63 = fpext float %62 to double
%64 = fcmp ult double %63, 0x401921FB54442D18
br i1 %64, label %65, label %59
65: ; preds = %59
store float %62, float* %45
br label %66
66: ; preds = %65, %55
%67 = getelementptr inbounds float, float* %0, i64 3
%68 = load float, float* %67
%69 = fcmp ogt float %68, 8.000000e+00
br i1 %69, label %72, label %70
70: ; preds = %66
%71 = fcmp olt float %68, -8.000000e+00
br i1 %71, label %72, label %74
72: ; preds = %70, %66
%73 = phi float [ 8.000000e+00, %66 ], [ -8.000000e+00, %70 ]
store float %73, float* %67
br label %74
74: ; preds = %72, %70
%75 = getelementptr inbounds float, float* %0, i64 4
%76 = load float, float* %75
%77 = fcmp ogt float %76, 1.000000e+01
br i1 %77, label %80, label %78
78: ; preds = %74
%79 = fcmp olt float %76, -1.000000e+01
br i1 %79, label %80, label %82
80: ; preds = %78, %74
%81 = phi float [ 1.000000e+01, %74 ], [ -1.000000e+01, %78 ]
store float %81, float* %75
br label %82
82: ; preds = %80, %78
%83 = getelementptr inbounds float, float* %0, i64 5
%84 = load float, float* %83
%85 = fcmp ogt float %84, 1.000000e+01
br i1 %85, label %88, label %86
86: ; preds = %82
%87 = fcmp olt float %84, -1.000000e+01
br i1 %87, label %88, label %90
88: ; preds = %86, %82
%89 = phi float [ 1.000000e+01, %82 ], [ -1.000000e+01, %86 ]
store float %89, float* %83
br label %90
90: ; preds = %88, %86
ret void
}