#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 */
struct timespec {
  unsigned long long tv_sec;
  unsigned long long tv_nsec;
};
typedef int /*<<< orphan*/ mpz_t;

/* Variables and functions */
int /*<<< orphan*/ mpz_add(int /*<<< orphan*/, int /*<<< orphan*/,
                           int /*<<< orphan*/);
int /*<<< orphan*/ mpz_add_ui(int /*<<< orphan*/, int /*<<< orphan*/,
                              unsigned long);
int /*<<< orphan*/ mpz_clear(int /*<<< orphan*/);
int /*<<< orphan*/ mpz_init(int /*<<< orphan*/);
int /*<<< orphan*/ mpz_mul(int /*<<< orphan*/, int /*<<< orphan*/,
                           int /*<<< orphan*/);
int /*<<< orphan*/ mpz_mul_ui(int /*<<< orphan*/, int /*<<< orphan*/, int);
int /*<<< orphan*/ mpz_set_si(int /*<<< orphan*/, scalar_t__);
int /*<<< orphan*/ mpz_sqrt(int /*<<< orphan*/, int /*<<< orphan*/);
int /*<<< orphan*/ mpz_tdiv_q_ui(int /*<<< orphan*/, int /*<<< orphan*/,
                                 unsigned long);
int /*<<< orphan*/ mpz_tdiv_qr_ui(int /*<<< orphan*/, int /*<<< orphan*/,
                                  int /*<<< orphan*/, int);
void time_stats(const struct timespec *all_times, unsigned long int timecount,
                unsigned long int cut, struct timespec *avg, mpz_t *q,
                mpz_t *r) {
  if (cut > 0) {
    all_times += cut;
    timecount -= 2 * cut;
  }
  unsigned long long int temp = 0;
  for (unsigned long int i = 0; i < timecount; ++i)
    temp += all_times[i].tv_sec * 1000000000ull + all_times[i].tv_nsec;
  temp /= timecount;
  avg->tv_nsec = temp % 1000000000ull;
  avg->tv_sec = temp / 1000000000ull;
  mpz_t sumsqdif;
  mpz_init(sumsqdif);
  for (unsigned long int i = 0; i < timecount; ++i)
    if (all_times[i].tv_sec != 0 || all_times[i].tv_nsec != 0) {
      struct timespec dif;
      dif.tv_sec = all_times[i].tv_sec - avg->tv_sec;
      dif.tv_nsec = all_times[i].tv_nsec - avg->tv_nsec;
      if (dif.tv_nsec < 0) {
        dif.tv_nsec += 1000000000;
        --dif.tv_sec;
      }
      mpz_t tmp;
      mpz_init(tmp);
      mpz_set_si(tmp, dif.tv_sec);
      mpz_mul_ui(tmp, tmp, 1000000000);
      mpz_add_ui(tmp, tmp, dif.tv_nsec);
      mpz_mul(tmp, tmp, tmp);
      mpz_add(sumsqdif, sumsqdif, tmp);
      mpz_clear(tmp);
    }
  if (timecount > 1) {
    mpz_add_ui(sumsqdif, sumsqdif, (timecount - 1) / 2);
    mpz_tdiv_q_ui(sumsqdif, sumsqdif, timecount - 1);
  }
  mpz_sqrt(sumsqdif, sumsqdif);
  mpz_init(*q);
  mpz_init(*r);
  mpz_tdiv_qr_ui(*q, *r, sumsqdif, 1000000000);
}


x86 assembly (clang, -O0):
<time_stats>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
cmpq   $0x0,-0x18(%rbp)
jbe    11ee <time_stats+0x4e>
mov    -0x18(%rbp),%rax
shl    $0x4,%rax
add    -0x8(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rcx
shl    $0x1,%rcx
mov    -0x10(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x10(%rbp)
movq   $0x0,-0x38(%rbp)
movq   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x10(%rbp),%rax
jae    124e <time_stats+0xae>
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%rcx
shl    $0x4,%rcx
add    %rcx,%rax
imul   $0x3b9aca00,(%rax),%rax
mov    -0x8(%rbp),%rcx
mov    -0x40(%rbp),%rdx
shl    $0x4,%rdx
add    %rdx,%rcx
add    0x8(%rcx),%rax
add    -0x38(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    11fe <time_stats+0x5e>
mov    -0x10(%rbp),%rcx
mov    -0x38(%rbp),%rax
xor    %edx,%edx
div    %rcx
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
mov    $0x3b9aca00,%ecx
xor    %edx,%edx
div    %rcx
mov    -0x20(%rbp),%rax
mov    %rdx,0x8(%rax)
mov    -0x38(%rbp),%rax
mov    $0x3b9aca00,%ecx
xor    %edx,%edx
div    %rcx
mov    %rax,%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x44(%rbp),%edi
call   1060 <mpz_init@plt>
movq   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%rax
cmp    -0x10(%rbp),%rax
jae    13ac <time_stats+0x20c>
mov    -0x8(%rbp),%rax
mov    -0x50(%rbp),%rcx
shl    $0x4,%rcx
add    %rcx,%rax
cmpq   $0x0,(%rax)
jne    12de <time_stats+0x13e>
mov    -0x8(%rbp),%rax
mov    -0x50(%rbp),%rcx
shl    $0x4,%rcx
add    %rcx,%rax
cmpq   $0x0,0x8(%rax)
je     1396 <time_stats+0x1f6>
mov    -0x8(%rbp),%rax
mov    -0x50(%rbp),%rcx
shl    $0x4,%rcx
add    %rcx,%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%rax
mov    %rax,-0x60(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x50(%rbp),%rcx
shl    $0x4,%rcx
add    %rcx,%rax
mov    0x8(%rax),%rax
mov    -0x20(%rbp),%rcx
sub    0x8(%rcx),%rax
mov    %rax,-0x58(%rbp)
cmpq   $0x0,-0x58(%rbp)
jae    133f <time_stats+0x19f>
mov    -0x58(%rbp),%rax
add    $0x3b9aca00,%rax
mov    %rax,-0x58(%rbp)
mov    -0x60(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x60(%rbp)
mov    -0x64(%rbp),%edi
call   1060 <mpz_init@plt>
mov    -0x64(%rbp),%edi
mov    -0x60(%rbp),%rsi
call   1030 <mpz_set_si@plt>
mov    -0x64(%rbp),%edi
mov    -0x64(%rbp),%esi
mov    $0x3b9aca00,%edx
call   10c0 <mpz_mul_ui@plt>
mov    -0x64(%rbp),%edi
mov    -0x64(%rbp),%esi
mov    -0x58(%rbp),%rdx
call   1050 <mpz_add_ui@plt>
mov    -0x64(%rbp),%edi
mov    -0x64(%rbp),%esi
mov    -0x64(%rbp),%edx
call   1090 <mpz_mul@plt>
mov    -0x44(%rbp),%edi
mov    -0x44(%rbp),%esi
mov    -0x64(%rbp),%edx
call   1080 <mpz_add@plt>
mov    -0x64(%rbp),%edi
call   10b0 <mpz_clear@plt>
jmp    139b <time_stats+0x1fb>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    129d <time_stats+0xfd>
cmpq   $0x1,-0x10(%rbp)
jbe    13e1 <time_stats+0x241>
mov    -0x44(%rbp),%edi
mov    -0x44(%rbp),%esi
mov    -0x10(%rbp),%rdx
sub    $0x1,%rdx
shr    $0x1,%rdx
call   1050 <mpz_add_ui@plt>
mov    -0x44(%rbp),%edi
mov    -0x44(%rbp),%esi
mov    -0x10(%rbp),%rdx
sub    $0x1,%rdx
call   1040 <mpz_tdiv_q_ui@plt>
mov    -0x44(%rbp),%edi
mov    -0x44(%rbp),%esi
call   10a0 <mpz_sqrt@plt>
mov    -0x28(%rbp),%rax
mov    (%rax),%edi
call   1060 <mpz_init@plt>
mov    -0x30(%rbp),%rax
mov    (%rax),%edi
call   1060 <mpz_init@plt>
mov    -0x28(%rbp),%rax
mov    (%rax),%edi
mov    -0x30(%rbp),%rax
mov    (%rax),%esi
mov    -0x44(%rbp),%edx
mov    $0x3b9aca00,%ecx
call   1070 <mpz_tdiv_qr_ui@plt>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<time_stats>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %r9,%r12
mov    %r8,%rbp
mov    %rcx,%r14
mov    %rdi,%r13
mov    %rdx,%rbx
shl    $0x4,%rbx
add    %rdx,%rdx
mov    %rsi,%r15
sub    %rdx,%r15
je     11df <time_stats+0x3f>
mov    $0x1,%eax
sub    %rsi,%rax
add    %rax,%rdx
jne    11e3 <time_stats+0x43>
xor    %ecx,%ecx
xor    %eax,%eax
jmp    122a <time_stats+0x8a>
xor    %eax,%eax
jmp    1248 <time_stats+0xa8>
mov    %r15,%rdx
and    $0xfffffffffffffffe,%rdx
lea    (%rbx,%r13,1),%rsi
add    $0x18,%rsi
xor    %ecx,%ecx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
imul   $0x3b9aca00,-0x18(%rsi),%rdi
3b
add    -0x10(%rsi),%rax
add    %rdi,%rax
imul   $0x3b9aca00,-0x8(%rsi),%rdi
3b
add    (%rsi),%rax
add    %rdi,%rax
add    $0x2,%rcx
add    $0x20,%rsi
cmp    %rcx,%rdx
jne    1200 <time_stats+0x60>
test   $0x1,%r15b
je     1248 <time_stats+0xa8>
lea    (%rbx,%r13,1),%rdx
shl    $0x4,%rcx
imul   $0x3b9aca00,(%rdx,%rcx,1),%rsi
3b
add    0x8(%rdx,%rcx,1),%rax
add    %rsi,%rax
mov    %rax,%rcx
or     %r15,%rcx
shr    $0x20,%rcx
je     125e <time_stats+0xbe>
xor    %edx,%edx
div    %r15
mov    %rax,%rcx
jmp    1265 <time_stats+0xc5>
xor    %edx,%edx
div    %r15d
mov    %eax,%ecx
mov    %rcx,%rax
shr    $0x9,%rax
movabs $0x44b82fa09b5a53,%rdx
mul    %rdx
shr    $0xb,%rdx
imul   $0x3b9aca00,%rdx,%rax
sub    %rax,%rcx
mov    %rcx,0x8(%r14)
mov    %rdx,(%r14)
call   1060 <mpz_init@plt>
test   %r15,%r15
je     1337 <time_stats+0x197>
mov    %rbp,0x8(%rsp)
mov    %r12,0x10(%rsp)
add    %r13,%rbx
add    $0x8,%rbx
mov    %r15,%r12
jmp    12ca <time_stats+0x12a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x10,%rbx
add    $0xffffffffffffffff,%r12
je     1310 <time_stats+0x170>
mov    -0x8(%rbx),%rbp
mov    (%rbx),%r13
mov    %rbp,%rax
or     %r13,%rax
je     12c0 <time_stats+0x120>
sub    0x8(%r14),%r13
sub    (%r14),%rbp
call   1060 <mpz_init@plt>
mov    %rbp,%rsi
call   1030 <mpz_set_si@plt>
mov    $0x3b9aca00,%edx
call   10c0 <mpz_mul_ui@plt>
mov    %r13,%rdx
call   1050 <mpz_add_ui@plt>
call   1090 <mpz_mul@plt>
call   1080 <mpz_add@plt>
call   10b0 <mpz_clear@plt>
jmp    12c0 <time_stats+0x120>
cmp    $0x1,%r15
mov    0x10(%rsp),%r12
mov    0x8(%rsp),%rbp
jbe    1337 <time_stats+0x197>
add    $0xffffffffffffffff,%r15
mov    %r15,%rdx
shr    %rdx
call   1050 <mpz_add_ui@plt>
mov    %r15,%rdx
call   1040 <mpz_tdiv_q_ui@plt>
call   10a0 <mpz_sqrt@plt>
mov    0x0(%rbp),%edi
call   1060 <mpz_init@plt>
mov    (%r12),%edi
call   1060 <mpz_init@plt>
mov    0x0(%rbp),%edi
mov    (%r12),%esi
mov    $0x3b9aca00,%ecx
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1070 <mpz_tdiv_qr_ui@plt>

LLVM IR (-O0):
%struct.timespec = type { i64, i64 }
define void @time_stats(%struct.timespec* %0, i64 %1, i64 %2, %struct.timespec* %3, i32* %4, i32* %5) {
%7 = alloca %struct.timespec*
%8 = alloca i64
%9 = alloca i64
%10 = alloca %struct.timespec*
%11 = alloca i32*
%12 = alloca i32*
%13 = alloca i64
%14 = alloca i64
%15 = alloca i32
%16 = alloca i64
%17 = alloca %struct.timespec
%18 = alloca i32
store %struct.timespec* %0, %struct.timespec** %7
store i64 %1, i64* %8
store i64 %2, i64* %9
store %struct.timespec* %3, %struct.timespec** %10
store i32* %4, i32** %11
store i32* %5, i32** %12
%19 = load i64, i64* %9
%20 = icmp ugt i64 %19, 0
br i1 %20, label %21, label %29
21: ; preds = %6
%22 = load i64, i64* %9
%23 = load %struct.timespec*, %struct.timespec** %7
%24 = getelementptr inbounds %struct.timespec, %struct.timespec* %23, i64 %22
store %struct.timespec* %24, %struct.timespec** %7
%25 = load i64, i64* %9
%26 = mul i64 2, %25
%27 = load i64, i64* %8
%28 = sub i64 %27, %26
store i64 %28, i64* %8
br label %29
29: ; preds = %21, %6
store i64 0, i64* %13
store i64 0, i64* %14
br label %30
30: ; preds = %49, %29
%31 = load i64, i64* %14
%32 = load i64, i64* %8
%33 = icmp ult i64 %31, %32
br i1 %33, label %34, label %52
34: ; preds = %30
%35 = load %struct.timespec*, %struct.timespec** %7
%36 = load i64, i64* %14
%37 = getelementptr inbounds %struct.timespec, %struct.timespec* %35, i64 %36
%38 = getelementptr inbounds %struct.timespec, %struct.timespec* %37, i32 0, i32 0
%39 = load i64, i64* %38
%40 = mul i64 %39, 1000000000
%41 = load %struct.timespec*, %struct.timespec** %7
%42 = load i64, i64* %14
%43 = getelementptr inbounds %struct.timespec, %struct.timespec* %41, i64 %42
%44 = getelementptr inbounds %struct.timespec, %struct.timespec* %43, i32 0, i32 1
%45 = load i64, i64* %44
%46 = add i64 %40, %45
%47 = load i64, i64* %13
%48 = add i64 %47, %46
store i64 %48, i64* %13
br label %49
49: ; preds = %34
%50 = load i64, i64* %14
%51 = add i64 %50, 1
store i64 %51, i64* %14
br label %30
52: ; preds = %30
%53 = load i64, i64* %8
%54 = load i64, i64* %13
%55 = udiv i64 %54, %53
store i64 %55, i64* %13
%56 = load i64, i64* %13
%57 = urem i64 %56, 1000000000
%58 = load %struct.timespec*, %struct.timespec** %10
%59 = getelementptr inbounds %struct.timespec, %struct.timespec* %58, i32 0, i32 1
store i64 %57, i64* %59
%60 = load i64, i64* %13
%61 = udiv i64 %60, 1000000000
%62 = load %struct.timespec*, %struct.timespec** %10
%63 = getelementptr inbounds %struct.timespec, %struct.timespec* %62, i32 0, i32 0
store i64 %61, i64* %63
%64 = load i32, i32* %15
%65 = call i32 @mpz_init(i32 %64)
store i64 0, i64* %16
br label %66
66: ; preds = %141, %52
%67 = load i64, i64* %16
%68 = load i64, i64* %8
%69 = icmp ult i64 %67, %68
br i1 %69, label %70, label %144
70: ; preds = %66
%71 = load %struct.timespec*, %struct.timespec** %7
%72 = load i64, i64* %16
%73 = getelementptr inbounds %struct.timespec, %struct.timespec* %71, i64 %72
%74 = getelementptr inbounds %struct.timespec, %struct.timespec* %73, i32 0, i32 0
%75 = load i64, i64* %74
%76 = icmp ne i64 %75, 0
br i1 %76, label %84, label %77
77: ; preds = %70
%78 = load %struct.timespec*, %struct.timespec** %7
%79 = load i64, i64* %16
%80 = getelementptr inbounds %struct.timespec, %struct.timespec* %78, i64 %79
%81 = getelementptr inbounds %struct.timespec, %struct.timespec* %80, i32 0, i32 1
%82 = load i64, i64* %81
%83 = icmp ne i64 %82, 0
br i1 %83, label %84, label %140
84: ; preds = %77, %70
%85 = load %struct.timespec*, %struct.timespec** %7
%86 = load i64, i64* %16
%87 = getelementptr inbounds %struct.timespec, %struct.timespec* %85, i64 %86
%88 = getelementptr inbounds %struct.timespec, %struct.timespec* %87, i32 0, i32 0
%89 = load i64, i64* %88
%90 = load %struct.timespec*, %struct.timespec** %10
%91 = getelementptr inbounds %struct.timespec, %struct.timespec* %90, i32 0, i32 0
%92 = load i64, i64* %91
%93 = sub i64 %89, %92
%94 = getelementptr inbounds %struct.timespec, %struct.timespec* %17, i32 0, i32 0
store i64 %93, i64* %94
%95 = load %struct.timespec*, %struct.timespec** %7
%96 = load i64, i64* %16
%97 = getelementptr inbounds %struct.timespec, %struct.timespec* %95, i64 %96
%98 = getelementptr inbounds %struct.timespec, %struct.timespec* %97, i32 0, i32 1
%99 = load i64, i64* %98
%100 = load %struct.timespec*, %struct.timespec** %10
%101 = getelementptr inbounds %struct.timespec, %struct.timespec* %100, i32 0, i32 1
%102 = load i64, i64* %101
%103 = sub i64 %99, %102
%104 = getelementptr inbounds %struct.timespec, %struct.timespec* %17, i32 0, i32 1
store i64 %103, i64* %104
%105 = getelementptr inbounds %struct.timespec, %struct.timespec* %17, i32 0, i32 1
%106 = load i64, i64* %105
%107 = icmp ult i64 %106, 0
br i1 %107, label %108, label %115
108: ; preds = %84
%109 = getelementptr inbounds %struct.timespec, %struct.timespec* %17, i32 0, i32 1
%110 = load i64, i64* %109
%111 = add i64 %110, 1000000000
store i64 %111, i64* %109
%112 = getelementptr inbounds %struct.timespec, %struct.timespec* %17, i32 0, i32 0
%113 = load i64, i64* %112
%114 = add i64 %113, -1
store i64 %114, i64* %112
br label %115
115: ; preds = %108, %84
%116 = load i32, i32* %18
%117 = call i32 @mpz_init(i32 %116)
%118 = load i32, i32* %18
%119 = getelementptr inbounds %struct.timespec, %struct.timespec* %17, i32 0, i32 0
%120 = load i64, i64* %119
%121 = call i32 @mpz_set_si(i32 %118, i64 %120)
%122 = load i32, i32* %18
%123 = load i32, i32* %18
%124 = call i32 @mpz_mul_ui(i32 %122, i32 %123, i32 1000000000)
%125 = load i32, i32* %18
%126 = load i32, i32* %18
%127 = getelementptr inbounds %struct.timespec, %struct.timespec* %17, i32 0, i32 1
%128 = load i64, i64* %127
%129 = call i32 @mpz_add_ui(i32 %125, i32 %126, i64 %128)
%130 = load i32, i32* %18
%131 = load i32, i32* %18
%132 = load i32, i32* %18
%133 = call i32 @mpz_mul(i32 %130, i32 %131, i32 %132)
%134 = load i32, i32* %15
%135 = load i32, i32* %15
%136 = load i32, i32* %18
%137 = call i32 @mpz_add(i32 %134, i32 %135, i32 %136)
%138 = load i32, i32* %18
%139 = call i32 @mpz_clear(i32 %138)
br label %140
140: ; preds = %115, %77
br label %141
141: ; preds = %140
%142 = load i64, i64* %16
%143 = add i64 %142, 1
store i64 %143, i64* %16
br label %66
144: ; preds = %66
%145 = load i64, i64* %8
%146 = icmp ugt i64 %145, 1
br i1 %146, label %147, label %159
147: ; preds = %144
%148 = load i32, i32* %15
%149 = load i32, i32* %15
%150 = load i64, i64* %8
%151 = sub i64 %150, 1
%152 = udiv i64 %151, 2
%153 = call i32 @mpz_add_ui(i32 %148, i32 %149, i64 %152)
%154 = load i32, i32* %15
%155 = load i32, i32* %15
%156 = load i64, i64* %8
%157 = sub i64 %156, 1
%158 = call i32 @mpz_tdiv_q_ui(i32 %154, i32 %155, i64 %157)
br label %159
159: ; preds = %147, %144
%160 = load i32, i32* %15
%161 = load i32, i32* %15
%162 = call i32 @mpz_sqrt(i32 %160, i32 %161)
%163 = load i32*, i32** %11
%164 = load i32, i32* %163
%165 = call i32 @mpz_init(i32 %164)
%166 = load i32*, i32** %12
%167 = load i32, i32* %166
%168 = call i32 @mpz_init(i32 %167)
%169 = load i32*, i32** %11
%170 = load i32, i32* %169
%171 = load i32*, i32** %12
%172 = load i32, i32* %171
%173 = load i32, i32* %15
%174 = call i32 @mpz_tdiv_qr_ui(i32 %170, i32 %172, i32 %173, i32 1000000000)
ret void
}

LLVM IR (-O2):
%struct.timespec = type { i64, i64 }
define void @time_stats(%struct.timespec* nocapture %0, i64 %1, i64 %2, %struct.timespec* nocapture %3, i32* nocapture %4, i32* nocapture %5) {
%7 = getelementptr %struct.timespec, %struct.timespec* %0, i64 %2
%8 = mul i64 %2, -2
%9 = add i64 %8, %1
%10 = icmp eq i64 %9, 0
br i1 %10, label %31, label %11
11: ; preds = %6
%12 = mul i64 %2, -2
%13 = and i64 %9, 1
%14 = sub i64 1, %1
%15 = icmp eq i64 %12, %14
br i1 %15, label %18, label %16
16: ; preds = %11
%17 = and i64 %9, -2
br label %39
18: ; preds = %39, %11
%19 = phi i64 [ undef, %11 ], [ %57, %39 ]
%20 = phi i64 [ 0, %11 ], [ %58, %39 ]
%21 = phi i64 [ 0, %11 ], [ %57, %39 ]
%22 = icmp eq i64 %13, 0
br i1 %22, label %31, label %23
23: ; preds = %18
%24 = getelementptr inbounds %struct.timespec, %struct.timespec* %7, i64 %20, i32 0
%25 = load i64, i64* %24
%26 = mul i64 %25, 1000000000
%27 = getelementptr inbounds %struct.timespec, %struct.timespec* %7, i64 %20, i32 1
%28 = load i64, i64* %27
%29 = add i64 %28, %21
%30 = add i64 %29, %26
br label %31
31: ; preds = %23, %18, %6
%32 = phi i64 [ 0, %6 ], [ %19, %18 ], [ %30, %23 ]
%33 = udiv i64 %32, %9
%34 = urem i64 %33, 1000000000
%35 = getelementptr inbounds %struct.timespec, %struct.timespec* %3, i64 0, i32 1
store i64 %34, i64* %35
%36 = udiv i64 %33, 1000000000
%37 = getelementptr inbounds %struct.timespec, %struct.timespec* %3, i64 0, i32 0
store i64 %36, i64* %37
%38 = tail call i32 @mpz_init(i32 undef)
br i1 %10, label %92, label %63
39: ; preds = %39, %16
%40 = phi i64 [ 0, %16 ], [ %58, %39 ]
%41 = phi i64 [ 0, %16 ], [ %57, %39 ]
%42 = phi i64 [ 0, %16 ], [ %59, %39 ]
%43 = getelementptr inbounds %struct.timespec, %struct.timespec* %7, i64 %40, i32 0
%44 = load i64, i64* %43
%45 = mul i64 %44, 1000000000
%46 = getelementptr inbounds %struct.timespec, %struct.timespec* %7, i64 %40, i32 1
%47 = load i64, i64* %46
%48 = add i64 %47, %41
%49 = add i64 %48, %45
%50 = or i64 %40, 1
%51 = getelementptr inbounds %struct.timespec, %struct.timespec* %7, i64 %50, i32 0
%52 = load i64, i64* %51
%53 = mul i64 %52, 1000000000
%54 = getelementptr inbounds %struct.timespec, %struct.timespec* %7, i64 %50, i32 1
%55 = load i64, i64* %54
%56 = add i64 %55, %49
%57 = add i64 %56, %53
%58 = add nuw i64 %40, 2
%59 = add i64 %42, 2
%60 = icmp eq i64 %59, %17
br i1 %60, label %18, label %39
61: ; preds = %84
%62 = icmp ugt i64 %9, 1
br i1 %62, label %87, label %92
63: ; preds = %31, %84
%64 = phi i64 [ %85, %84 ], [ 0, %31 ]
%65 = getelementptr inbounds %struct.timespec, %struct.timespec* %7, i64 %64, i32 0
%66 = load i64, i64* %65
%67 = icmp eq i64 %66, 0
%68 = getelementptr inbounds %struct.timespec, %struct.timespec* %7, i64 %64, i32 1
%69 = load i64, i64* %68
%70 = icmp eq i64 %69, 0
%71 = select i1 %67, i1 %70, i1 false
br i1 %71, label %84, label %72
72: ; preds = %63
%73 = load i64, i64* %35
%74 = sub i64 %69, %73
%75 = load i64, i64* %37
%76 = sub i64 %66, %75
%77 = tail call i32 @mpz_init(i32 undef)
%78 = tail call i32 @mpz_set_si(i32 undef, i64 %76)
%79 = tail call i32 @mpz_mul_ui(i32 undef, i32 undef, i32 1000000000)
%80 = tail call i32 @mpz_add_ui(i32 undef, i32 undef, i64 %74)
%81 = tail call i32 @mpz_mul(i32 undef, i32 undef, i32 undef)
%82 = tail call i32 @mpz_add(i32 undef, i32 undef, i32 undef)
%83 = tail call i32 @mpz_clear(i32 undef)
br label %84
84: ; preds = %63, %72
%85 = add nuw i64 %64, 1
%86 = icmp eq i64 %85, %9
br i1 %86, label %61, label %63
87: ; preds = %61
%88 = add i64 %9, -1
%89 = lshr i64 %88, 1
%90 = tail call i32 @mpz_add_ui(i32 undef, i32 undef, i64 %89)
%91 = tail call i32 @mpz_tdiv_q_ui(i32 undef, i32 undef, i64 %88)
br label %92
92: ; preds = %31, %87, %61
%93 = tail call i32 @mpz_sqrt(i32 undef, i32 undef)
%94 = load i32, i32* %4
%95 = tail call i32 @mpz_init(i32 %94)
%96 = load i32, i32* %5
%97 = tail call i32 @mpz_init(i32 %96)
%98 = load i32, i32* %4
%99 = load i32, i32* %5
%100 = tail call i32 @mpz_tdiv_qr_ui(i32 %98, i32 %99, i32 undef, i32 1000000000)
ret void
}