#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*/ SysCtlDelay(int);
void SysCtlClockSet(unsigned long ulConfig) {
  unsigned long ulDelay, ulRCC, ulRCC2;
  if (((((*((volatile unsigned long *)(0x400FE000))) & 0x70000000) ==
        0x00000000) ||
       (((*((volatile unsigned long *)(0x400FE000))) &
         (0x70000000 | 0x00FF0000)) == (0x10000000 | 0x00000000))) &&
      (ulConfig & 0x80000000)) {
    return;
  }
  ulRCC = (*((volatile unsigned long *)(0x400FE060)));
  ulRCC2 = (*((volatile unsigned long *)(0x400FE070)));
  ulRCC |= 0x00000800;
  ulRCC &= ~(0x00400000);
  ulRCC2 |= 0x00000800;
  (*((volatile unsigned long *)(0x400FE060))) = ulRCC;
  (*((volatile unsigned long *)(0x400FE070))) = ulRCC2;
  if (((ulRCC & 0x00000002) && !(ulConfig & 0x00000002)) ||
      ((ulRCC & 0x00000001) && !(ulConfig & 0x00000001))) {
    ulRCC &=
        (~(0x00000002 | 0x00000001) | (ulConfig & (0x00000002 | 0x00000001)));
    (*((volatile unsigned long *)(0x400FE060))) = ulRCC;
    if (((ulRCC2 & 0x80000000) && (((ulRCC2 & 0x00000070) == 0x00000030) ||
                                   ((ulRCC2 & 0x00000070) == 0x00000070))) ||
        (!(ulRCC2 & 0x80000000) && ((ulRCC & 0x00000030) == 0x00000030))) {
      SysCtlDelay(4096);
    } else {
      SysCtlDelay(524288);
    }
  }
  ulRCC &= ~(0x000007C0 | 0x00000030);
  ulRCC |= ulConfig & (0x000007C0 | 0x00000030);
  ulRCC2 &= ~(0x80000000 | 0x00000070);
  ulRCC2 |= ulConfig & (0x80000000 | 0x00000030);
  ulRCC2 |= (ulConfig & 0x00000008) << 3;
  (*((volatile unsigned long *)(0x400FE060))) = ulRCC;
  (*((volatile unsigned long *)(0x400FE070))) = ulRCC2;
  SysCtlDelay(16);
  ulRCC &= ~(0x00002000 | 0x00001000);
  ulRCC |= ulConfig & (0x00002000 | 0x00001000);
  ulRCC2 &= ~(0x00002000);
  ulRCC2 |= ulConfig & 0x00002000;
  (*((volatile unsigned long *)(0x400FE058))) = 0x00000040;
  if (ulRCC2 & 0x80000000) {
    (*((volatile unsigned long *)(0x400FE070))) = ulRCC2;
    (*((volatile unsigned long *)(0x400FE060))) = ulRCC;
  } else {
    (*((volatile unsigned long *)(0x400FE060))) = ulRCC;
    (*((volatile unsigned long *)(0x400FE070))) = ulRCC2;
  }
  ulRCC &= ~(0x07800000 | 0x00400000 | 0x00000002 | 0x00000001);
  ulRCC |= ulConfig & (0x07800000 | 0x00400000 | 0x00000002 | 0x00000001);
  ulRCC2 &= ~(0x1F800000);
  ulRCC2 |= ulConfig & 0x1F800000;
  if (ulConfig & 0x40000000) {
    ulRCC |= 0x00400000;
    ulRCC2 &= ~(0x00400000);
    ulRCC2 |= ulConfig & (0x40000000 | 0x00400000);
  } else {
    ulRCC2 &= ~(0x40000000);
  }
  if (!(ulConfig & 0x00000800)) {
    for (ulDelay = 32768; ulDelay > 0; ulDelay--) {
      if ((*((volatile unsigned long *)(0x400FE050))) & 0x00000040) {
        break;
      }
    }
    ulRCC &= ~(0x00000800);
    ulRCC2 &= ~(0x00000800);
  }
  (*((volatile unsigned long *)(0x400FE060))) = ulRCC;
  (*((volatile unsigned long *)(0x400FE070))) = ulRCC2;
  SysCtlDelay(16);
}


x86 assembly (clang, -O0):
<SysCtlClockSet>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    $0x400fe000,%eax
mov    (%rax),%rax
and    $0x70000000,%rax
cmp    $0x0,%rax
je     114e <SysCtlClockSet+0x3e>
mov    $0x400fe000,%eax
mov    (%rax),%rax
and    $0x70ff0000,%rax
cmp    $0x10000000,%rax
jne    116b <SysCtlClockSet+0x5b>
movabs $0x80000000,%rax
and    -0x8(%rbp),%rax
cmp    $0x0,%rax
je     116b <SysCtlClockSet+0x5b>
jmp    14ef <SysCtlClockSet+0x3df>
mov    $0x400fe060,%eax
mov    (%rax),%rax
mov    %rax,-0x18(%rbp)
mov    $0x400fe070,%eax
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
or     $0x800,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
and    $0xffffffffffbfffff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
or     $0x800,%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rcx
mov    $0x400fe060,%eax
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rcx
mov    $0x400fe070,%eax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
and    $0x2,%rax
cmp    $0x0,%rax
je     11e9 <SysCtlClockSet+0xd9>
mov    -0x8(%rbp),%rax
and    $0x2,%rax
cmp    $0x0,%rax
je     120d <SysCtlClockSet+0xfd>
mov    -0x18(%rbp),%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     12b1 <SysCtlClockSet+0x1a1>
mov    -0x8(%rbp),%rax
and    $0x1,%rax
cmp    $0x0,%rax
jne    12b1 <SysCtlClockSet+0x1a1>
mov    -0x8(%rbp),%rax
and    $0x3,%rax
or     $0xfffffffffffffffc,%rax
and    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rcx
mov    $0x400fe060,%eax
mov    %rcx,(%rax)
movabs $0x80000000,%rax
and    -0x20(%rbp),%rax
cmp    $0x0,%rax
je     1269 <SysCtlClockSet+0x159>
mov    -0x20(%rbp),%rax
and    $0x70,%rax
cmp    $0x30,%rax
je     1293 <SysCtlClockSet+0x183>
mov    -0x20(%rbp),%rax
and    $0x70,%rax
cmp    $0x70,%rax
je     1293 <SysCtlClockSet+0x183>
movabs $0x80000000,%rax
and    -0x20(%rbp),%rax
cmp    $0x0,%rax
jne    12a2 <SysCtlClockSet+0x192>
mov    -0x18(%rbp),%rax
and    $0x30,%rax
cmp    $0x30,%rax
jne    12a2 <SysCtlClockSet+0x192>
mov    $0x1000,%edi
call   1030 <SysCtlDelay@plt>
jmp    12ac <SysCtlClockSet+0x19c>
mov    $0x80000,%edi
call   1030 <SysCtlDelay@plt>
jmp    12b1 <SysCtlClockSet+0x1a1>
mov    -0x18(%rbp),%rax
and    $0xfffffffffffff80f,%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
and    $0x7f0,%rax
or     -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
and    $0x7fffff8f,%rax
mov    %rax,-0x20(%rbp)
movabs $0x80000030,%rax
and    -0x8(%rbp),%rax
or     -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
and    $0x8,%rax
shl    $0x3,%rax
or     -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rcx
mov    $0x400fe060,%eax
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rcx
mov    $0x400fe070,%eax
mov    %rcx,(%rax)
mov    $0x10,%edi
call   1030 <SysCtlDelay@plt>
mov    -0x18(%rbp),%rax
and    $0xffffffffffffcfff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
and    $0x3000,%rax
or     -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
and    $0xffffffffffffdfff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
and    $0x2000,%rax
or     -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    $0x400fe058,%eax
movq   $0x40,(%rax)
movabs $0x80000000,%rax
and    -0x20(%rbp),%rax
cmp    $0x0,%rax
je     13ac <SysCtlClockSet+0x29c>
mov    -0x20(%rbp),%rcx
mov    $0x400fe070,%eax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rcx
mov    $0x400fe060,%eax
mov    %rcx,(%rax)
jmp    13c4 <SysCtlClockSet+0x2b4>
mov    -0x18(%rbp),%rcx
mov    $0x400fe060,%eax
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rcx
mov    $0x400fe070,%eax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
and    $0xfffffffff83ffffc,%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
and    $0x7c00003,%rax
or     -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
and    $0xffffffffe07fffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
and    $0x1f800000,%rax
or     -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
and    $0x40000000,%rax
cmp    $0x0,%rax
je     144b <SysCtlClockSet+0x33b>
mov    -0x18(%rbp),%rax
or     $0x400000,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
and    $0xffffffffffbfffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
and    $0x40400000,%rax
or     -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
jmp    1459 <SysCtlClockSet+0x349>
mov    -0x20(%rbp),%rax
and    $0xffffffffbfffffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
and    $0x800,%rax
cmp    $0x0,%rax
jne    14cd <SysCtlClockSet+0x3bd>
movq   $0x8000,-0x10(%rbp)
cmpq   $0x0,-0x10(%rbp)
jbe    14b1 <SysCtlClockSet+0x3a1>
mov    $0x400fe050,%eax
mov    (%rax),%rax
and    $0x40,%rax
cmp    $0x0,%rax
je     149b <SysCtlClockSet+0x38b>
jmp    14b1 <SysCtlClockSet+0x3a1>
jmp    14a0 <SysCtlClockSet+0x390>
mov    -0x10(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x10(%rbp)
jmp    1475 <SysCtlClockSet+0x365>
mov    -0x18(%rbp),%rax
and    $0xfffffffffffff7ff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
and    $0xfffffffffffff7ff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rcx
mov    $0x400fe060,%eax
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rcx
mov    $0x400fe070,%eax
mov    %rcx,(%rax)
mov    $0x10,%edi
call   1030 <SysCtlDelay@plt>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<SysCtlClockSet>:
push   %r15
push   %r14
push   %r12
push   %rbx
push   %rax
mov    %rdi,%r15
testq  $0x70000000,0x400fe000
je     1152 <SysCtlClockSet+0x42>
mov    0x400fe000,%rax
40
test   $0x80000000,%r15d
je     115b <SysCtlClockSet+0x4b>
and    $0x70ff0000,%eax
cmp    $0x10000000,%eax
jne    115b <SysCtlClockSet+0x4b>
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret
test   $0x80000000,%r15d
jne    1146 <SysCtlClockSet+0x36>
mov    0x400fe060,%rax
40
mov    0x400fe070,%rcx
40
mov    %rax,%r12
and    $0xffffffffffbff7ff,%r12
or     $0x800,%r12
mov    %rcx,%r14
or     $0x800,%r14
mov    %r12,0x400fe060
40
mov    %r14,0x400fe070
40
test   $0x2,%r15b
jne    11a6 <SysCtlClockSet+0x96>
mov    %eax,%edx
and    $0x2,%edx
test   %rdx,%rdx
jne    11b6 <SysCtlClockSet+0xa6>
test   $0x1,%r15b
jne    11e7 <SysCtlClockSet+0xd7>
mov    %eax,%edx
and    $0x1,%edx
test   %rdx,%rdx
je     11e7 <SysCtlClockSet+0xd7>
mov    %r15,%rdx
or     $0xfffffffffffffffc,%rdx
and    %rdx,%r12
mov    %r12,0x400fe060
40
test   $0x80000000,%ecx
cmovne %ecx,%eax
not    %eax
test   $0x30,%al
mov    $0x1000,%eax
mov    $0x80000,%edi
cmove  %eax,%edi
call   1030 <SysCtlDelay@plt>
and    $0xfffffffffffff80f,%r12
mov    %r15d,%ebx
and    $0x7f0,%ebx
or     %r12,%rbx
and    $0x7fffff8f,%r14d
mov    %r15d,%eax
and    $0x80000030,%eax
mov    %r15d,%ecx
and    $0x8,%ecx
lea    (%rax,%rcx,8),%r12
or     %r14,%r12
mov    %rbx,0x400fe060
40
mov    %r12,0x400fe070
40
mov    $0x10,%edi
call   1030 <SysCtlDelay@plt>
and    $0xffffffffffffcfff,%rbx
mov    %r15d,%ecx
and    $0x3000,%ecx
or     %rbx,%rcx
and    $0xffffdfff,%r12d
mov    %r15d,%edx
and    $0x2000,%edx
or     %r12,%rdx
movq   $0x40,0x400fe058
test   $0x80000000,%r15d
jne    127d <SysCtlClockSet+0x16d>
mov    %rcx,0x400fe060
40
mov    %rdx,0x400fe070
40
jmp    128d <SysCtlClockSet+0x17d>
mov    %rdx,0x400fe070
40
mov    %rcx,0x400fe060
40
and    $0xfffffffff83ffffc,%rcx
mov    %r15d,%eax
and    $0x7c00003,%eax
or     %rcx,%rax
and    $0xe07fffff,%edx
mov    %r15d,%esi
and    $0x1f800000,%esi
or     %rdx,%rsi
test   $0x40000000,%r15d
jne    12ce <SysCtlClockSet+0x1be>
and    $0xbfffffff,%esi
mov    %rsi,%rcx
test   $0x800,%r15d
je     12ef <SysCtlClockSet+0x1df>
jmp    1326 <SysCtlClockSet+0x216>
or     $0x400000,%rax
and    $0xffbfffff,%esi
mov    %r15d,%ecx
and    $0x40400000,%ecx
or     %rsi,%rcx
test   $0x800,%r15d
jne    1326 <SysCtlClockSet+0x216>
mov    $0xffffffffffff8001,%rdx
cs nopw 0x0(%rax,%rax,1)
testq  $0x40,0x400fe050
jne    131a <SysCtlClockSet+0x20a>
lea    0x1(%rdx),%rsi
test   %rdx,%rdx
mov    %rsi,%rdx
jne    1300 <SysCtlClockSet+0x1f0>
and    $0xfffffffffffff7ff,%rax
and    $0xfffff7ff,%ecx
mov    %rax,0x400fe060
40
mov    %rcx,0x400fe070
40
mov    $0x10,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
jmp    1030 <SysCtlDelay@plt>

LLVM IR (-O0):
define void @SysCtlClockSet(i64 %0) {
%2 = alloca i64
%3 = alloca i64
%4 = alloca i64
%5 = alloca i64
store i64 %0, i64* %2
%6 = load volatile i64, i64* inttoptr (i64 1074782208 to i64*)
%7 = and i64 %6, 1879048192
%8 = icmp eq i64 %7, 0
br i1 %8, label %13, label %9
9: ; preds = %1
%10 = load volatile i64, i64* inttoptr (i64 1074782208 to i64*)
%11 = and i64 %10, 1895759872
%12 = icmp eq i64 %11, 268435456
br i1 %12, label %13, label %18
13: ; preds = %9, %1
%14 = load i64, i64* %2
%15 = and i64 %14, 2147483648
%16 = icmp ne i64 %15, 0
br i1 %16, label %17, label %18
17: ; preds = %13
br label %171
18: ; preds = %13, %9
%19 = load volatile i64, i64* inttoptr (i64 1074782304 to i64*)
store i64 %19, i64* %4
%20 = load volatile i64, i64* inttoptr (i64 1074782320 to i64*)
store i64 %20, i64* %5
%21 = load i64, i64* %4
%22 = or i64 %21, 2048
store i64 %22, i64* %4
%23 = load i64, i64* %4
%24 = and i64 %23, -4194305
store i64 %24, i64* %4
%25 = load i64, i64* %5
%26 = or i64 %25, 2048
store i64 %26, i64* %5
%27 = load i64, i64* %4
store volatile i64 %27, i64* inttoptr (i64 1074782304 to i64*)
%28 = load i64, i64* %5
store volatile i64 %28, i64* inttoptr (i64 1074782320 to i64*)
%29 = load i64, i64* %4
%30 = and i64 %29, 2
%31 = icmp ne i64 %30, 0
br i1 %31, label %32, label %36
32: ; preds = %18
%33 = load i64, i64* %2
%34 = and i64 %33, 2
%35 = icmp ne i64 %34, 0
br i1 %35, label %36, label %44
36: ; preds = %32, %18
%37 = load i64, i64* %4
%38 = and i64 %37, 1
%39 = icmp ne i64 %38, 0
br i1 %39, label %40, label %75
40: ; preds = %36
%41 = load i64, i64* %2
%42 = and i64 %41, 1
%43 = icmp ne i64 %42, 0
br i1 %43, label %75, label %44
44: ; preds = %40, %32
%45 = load i64, i64* %2
%46 = and i64 %45, 3
%47 = or i64 -4, %46
%48 = load i64, i64* %4
%49 = and i64 %48, %47
store i64 %49, i64* %4
%50 = load i64, i64* %4
store volatile i64 %50, i64* inttoptr (i64 1074782304 to i64*)
%51 = load i64, i64* %5
%52 = and i64 %51, 2147483648
%53 = icmp ne i64 %52, 0
br i1 %53, label %54, label %62
54: ; preds = %44
%55 = load i64, i64* %5
%56 = and i64 %55, 112
%57 = icmp eq i64 %56, 48
br i1 %57, label %70, label %58
58: ; preds = %54
%59 = load i64, i64* %5
%60 = and i64 %59, 112
%61 = icmp eq i64 %60, 112
br i1 %61, label %70, label %62
62: ; preds = %58, %44
%63 = load i64, i64* %5
%64 = and i64 %63, 2147483648
%65 = icmp ne i64 %64, 0
br i1 %65, label %72, label %66
66: ; preds = %62
%67 = load i64, i64* %4
%68 = and i64 %67, 48
%69 = icmp eq i64 %68, 48
br i1 %69, label %70, label %72
70: ; preds = %66, %58, %54
%71 = call i32 @SysCtlDelay(i32 4096)
br label %74
72: ; preds = %66, %62
%73 = call i32 @SysCtlDelay(i32 524288)
br label %74
74: ; preds = %72, %70
br label %75
75: ; preds = %74, %40, %36
%76 = load i64, i64* %4
%77 = and i64 %76, -2033
store i64 %77, i64* %4
%78 = load i64, i64* %2
%79 = and i64 %78, 2032
%80 = load i64, i64* %4
%81 = or i64 %80, %79
store i64 %81, i64* %4
%82 = load i64, i64* %5
%83 = and i64 %82, 2147483535
store i64 %83, i64* %5
%84 = load i64, i64* %2
%85 = and i64 %84, 2147483696
%86 = load i64, i64* %5
%87 = or i64 %86, %85
store i64 %87, i64* %5
%88 = load i64, i64* %2
%89 = and i64 %88, 8
%90 = shl i64 %89, 3
%91 = load i64, i64* %5
%92 = or i64 %91, %90
store i64 %92, i64* %5
%93 = load i64, i64* %4
store volatile i64 %93, i64* inttoptr (i64 1074782304 to i64*)
%94 = load i64, i64* %5
store volatile i64 %94, i64* inttoptr (i64 1074782320 to i64*)
%95 = call i32 @SysCtlDelay(i32 16)
%96 = load i64, i64* %4
%97 = and i64 %96, -12289
store i64 %97, i64* %4
%98 = load i64, i64* %2
%99 = and i64 %98, 12288
%100 = load i64, i64* %4
%101 = or i64 %100, %99
store i64 %101, i64* %4
%102 = load i64, i64* %5
%103 = and i64 %102, -8193
store i64 %103, i64* %5
%104 = load i64, i64* %2
%105 = and i64 %104, 8192
%106 = load i64, i64* %5
%107 = or i64 %106, %105
store i64 %107, i64* %5
store volatile i64 64, i64* inttoptr (i64 1074782296 to i64*)
%108 = load i64, i64* %5
%109 = and i64 %108, 2147483648
%110 = icmp ne i64 %109, 0
br i1 %110, label %111, label %114
111: ; preds = %75
%112 = load i64, i64* %5
store volatile i64 %112, i64* inttoptr (i64 1074782320 to i64*)
%113 = load i64, i64* %4
store volatile i64 %113, i64* inttoptr (i64 1074782304 to i64*)
br label %117
114: ; preds = %75
%115 = load i64, i64* %4
store volatile i64 %115, i64* inttoptr (i64 1074782304 to i64*)
%116 = load i64, i64* %5
store volatile i64 %116, i64* inttoptr (i64 1074782320 to i64*)
br label %117
117: ; preds = %114, %111
%118 = load i64, i64* %4
%119 = and i64 %118, -130023428
store i64 %119, i64* %4
%120 = load i64, i64* %2
%121 = and i64 %120, 130023427
%122 = load i64, i64* %4
%123 = or i64 %122, %121
store i64 %123, i64* %4
%124 = load i64, i64* %5
%125 = and i64 %124, -528482305
store i64 %125, i64* %5
%126 = load i64, i64* %2
%127 = and i64 %126, 528482304
%128 = load i64, i64* %5
%129 = or i64 %128, %127
store i64 %129, i64* %5
%130 = load i64, i64* %2
%131 = and i64 %130, 1073741824
%132 = icmp ne i64 %131, 0
br i1 %132, label %133, label %142
133: ; preds = %117
%134 = load i64, i64* %4
%135 = or i64 %134, 4194304
store i64 %135, i64* %4
%136 = load i64, i64* %5
%137 = and i64 %136, -4194305
store i64 %137, i64* %5
%138 = load i64, i64* %2
%139 = and i64 %138, 1077936128
%140 = load i64, i64* %5
%141 = or i64 %140, %139
store i64 %141, i64* %5
br label %145
142: ; preds = %117
%143 = load i64, i64* %5
%144 = and i64 %143, -1073741825
store i64 %144, i64* %5
br label %145
145: ; preds = %142, %133
%146 = load i64, i64* %2
%147 = and i64 %146, 2048
%148 = icmp ne i64 %147, 0
br i1 %148, label %167, label %149
149: ; preds = %145
store i64 32768, i64* %3
br label %150
150: ; preds = %159, %149
%151 = load i64, i64* %3
%152 = icmp ugt i64 %151, 0
br i1 %152, label %153, label %162
153: ; preds = %150
%154 = load volatile i64, i64* inttoptr (i64 1074782288 to i64*)
%155 = and i64 %154, 64
%156 = icmp ne i64 %155, 0
br i1 %156, label %157, label %158
157: ; preds = %153
br label %162
158: ; preds = %153
br label %159
159: ; preds = %158
%160 = load i64, i64* %3
%161 = add i64 %160, -1
store i64 %161, i64* %3
br label %150
162: ; preds = %157, %150
%163 = load i64, i64* %4
%164 = and i64 %163, -2049
store i64 %164, i64* %4
%165 = load i64, i64* %5
%166 = and i64 %165, -2049
store i64 %166, i64* %5
br label %167
167: ; preds = %162, %145
%168 = load i64, i64* %4
store volatile i64 %168, i64* inttoptr (i64 1074782304 to i64*)
%169 = load i64, i64* %5
store volatile i64 %169, i64* inttoptr (i64 1074782320 to i64*)
%170 = call i32 @SysCtlDelay(i32 16)
br label %171
171: ; preds = %167, %17
ret void
}

LLVM IR (-O2):
define void @SysCtlClockSet(i64 %0) {
%2 = load volatile i64, i64* inttoptr (i64 1074782208 to i64*)
%3 = and i64 %2, 1879048192
%4 = icmp eq i64 %3, 0
br i1 %4, label %12, label %5
5: ; preds = %1
%6 = load volatile i64, i64* inttoptr (i64 1074782208 to i64*)
%7 = and i64 %6, 1895759872
%8 = icmp ne i64 %7, 268435456
%9 = and i64 %0, 2147483648
%10 = icmp eq i64 %9, 0
%11 = or i1 %10, %8
br i1 %11, label %15, label %100
12: ; preds = %1
%13 = and i64 %0, 2147483648
%14 = icmp eq i64 %13, 0
br i1 %14, label %15, label %100
15: ; preds = %12, %5
%16 = load volatile i64, i64* inttoptr (i64 1074782304 to i64*)
%17 = load volatile i64, i64* inttoptr (i64 1074782320 to i64*)
%18 = and i64 %16, -4196353
%19 = or i64 %18, 2048
%20 = or i64 %17, 2048
store volatile i64 %19, i64* inttoptr (i64 1074782304 to i64*)
store volatile i64 %20, i64* inttoptr (i64 1074782320 to i64*)
%21 = and i64 %16, 2
%22 = icmp ne i64 %21, 0
%23 = and i64 %0, 2
%24 = icmp eq i64 %23, 0
%25 = and i1 %24, %22
br i1 %25, label %32, label %26
26: ; preds = %15
%27 = and i64 %16, 1
%28 = icmp ne i64 %27, 0
%29 = and i64 %0, 1
%30 = icmp eq i64 %29, 0
%31 = and i1 %30, %28
br i1 %31, label %32, label %42
32: ; preds = %26, %15
%33 = or i64 %0, -4
%34 = and i64 %19, %33
store volatile i64 %34, i64* inttoptr (i64 1074782304 to i64*)
%35 = and i64 %17, 2147483648
%36 = icmp eq i64 %35, 0
%37 = select i1 %36, i64 %16, i64 %17
%38 = and i64 %37, 48
%39 = icmp eq i64 %38, 48
%40 = select i1 %39, i32 4096, i32 524288
%41 = tail call i32 @SysCtlDelay(i32 %40)
br label %42
42: ; preds = %32, %26
%43 = phi i64 [ %19, %26 ], [ %34, %32 ]
%44 = and i64 %43, -2033
%45 = and i64 %0, 2032
%46 = or i64 %44, %45
%47 = and i64 %20, 2147483535
%48 = and i64 %0, 2147483696
%49 = shl i64 %0, 3
%50 = and i64 %49, 64
%51 = or i64 %50, %48
%52 = or i64 %51, %47
store volatile i64 %46, i64* inttoptr (i64 1074782304 to i64*)
store volatile i64 %52, i64* inttoptr (i64 1074782320 to i64*)
%53 = tail call i32 @SysCtlDelay(i32 16)
%54 = and i64 %46, -12289
%55 = and i64 %0, 12288
%56 = or i64 %54, %55
%57 = and i64 %52, 4294959103
%58 = and i64 %0, 8192
%59 = or i64 %57, %58
store volatile i64 64, i64* inttoptr (i64 1074782296 to i64*)
%60 = and i64 %0, 2147483648
%61 = icmp eq i64 %60, 0
br i1 %61, label %63, label %62
62: ; preds = %42
store volatile i64 %59, i64* inttoptr (i64 1074782320 to i64*)
store volatile i64 %56, i64* inttoptr (i64 1074782304 to i64*)
br label %64
63: ; preds = %42
store volatile i64 %56, i64* inttoptr (i64 1074782304 to i64*)
store volatile i64 %59, i64* inttoptr (i64 1074782320 to i64*)
br label %64
64: ; preds = %63, %62
%65 = and i64 %56, -130023428
%66 = and i64 %0, 130023427
%67 = or i64 %65, %66
%68 = and i64 %59, 3766484991
%69 = and i64 %0, 528482304
%70 = or i64 %68, %69
%71 = and i64 %0, 1073741824
%72 = icmp eq i64 %71, 0
br i1 %72, label %78, label %73
73: ; preds = %64
%74 = or i64 %67, 4194304
%75 = and i64 %70, 4290772991
%76 = and i64 %0, 1077936128
%77 = or i64 %75, %76
br label %80
78: ; preds = %64
%79 = and i64 %70, 3221225471
br label %80
80: ; preds = %78, %73
%81 = phi i64 [ %74, %73 ], [ %67, %78 ]
%82 = phi i64 [ %77, %73 ], [ %79, %78 ]
%83 = and i64 %0, 2048
%84 = icmp eq i64 %83, 0
br i1 %84, label %85, label %96
85: ; preds = %80, %85
%86 = phi i64 [ %90, %85 ], [ 32768, %80 ]
%87 = load volatile i64, i64* inttoptr (i64 1074782288 to i64*)
%88 = and i64 %87, 64
%89 = icmp ne i64 %88, 0
%90 = add nsw i64 %86, -1
%91 = icmp eq i64 %90, 0
%92 = select i1 %89, i1 true, i1 %91
br i1 %92, label %93, label %85
93: ; preds = %85
%94 = and i64 %81, -2049
%95 = and i64 %82, -2049
br label %96
96: ; preds = %93, %80
%97 = phi i64 [ %81, %80 ], [ %94, %93 ]
%98 = phi i64 [ %82, %80 ], [ %95, %93 ]
store volatile i64 %97, i64* inttoptr (i64 1074782304 to i64*)
store volatile i64 %98, i64* inttoptr (i64 1074782320 to i64*)
%99 = tail call i32 @SysCtlDelay(i32 16)
br label %100
100: ; preds = %12, %5, %96
ret void
}