void RandomFunc(unsigned long input[1], unsigned long output[1]) {
  unsigned long state[1];
  unsigned short copy11;
  unsigned int copy12;
  unsigned short copy13;
  unsigned short copy14;
  {
    state[0UL] = (input[0UL] + 914778474UL) ^ 0xffffffffce5d000bUL;
    if (state[0UL] & 1UL) {
      if ((state[0UL] >> 1UL) & 1UL) {
        if ((state[0UL] >> 3UL) & 1UL) {
          copy11 = *((unsigned short *)(&state[0UL]) + 3);
          *((unsigned short *)(&state[0UL]) + 3) =
              *((unsigned short *)(&state[0UL]) + 0);
          *((unsigned short *)(&state[0UL]) + 0) = copy11;
          state[0UL] |=
              ((state[0UL] << (((state[0UL] >> 4UL) & 7UL) | 1UL)) & 15UL)
              << 2UL;
        } else {
          state[0UL] |=
              (((state[0UL] >> (((state[0UL] >> 2UL) & 15UL) | 1UL)) |
                (state[0UL] << (64 - (((state[0UL] >> 2UL) & 15UL) | 1UL)))) &
               63UL)
              << 4UL;
          state[0UL] |= (state[0UL] & 63UL) << 4UL;
        }
      } else {
        state[0UL] |= (state[0UL] & 7UL) << 2UL;
        copy12 = *((unsigned int *)(&state[0UL]) + 1);
        *((unsigned int *)(&state[0UL]) + 1) =
            *((unsigned int *)(&state[0UL]) + 0);
        *((unsigned int *)(&state[0UL]) + 0) = copy12;
        copy12 = *((unsigned int *)(&state[0UL]) + 0);
        *((unsigned int *)(&state[0UL]) + 0) =
            *((unsigned int *)(&state[0UL]) + 1);
        *((unsigned int *)(&state[0UL]) + 1) = copy12;
      }
    } else {
      copy13 = *((unsigned short *)(&state[0UL]) + 3);
      *((unsigned short *)(&state[0UL]) + 3) =
          *((unsigned short *)(&state[0UL]) + 0);
      *((unsigned short *)(&state[0UL]) + 0) = copy13;
      copy13 = *((unsigned short *)(&state[0UL]) + 2);
      *((unsigned short *)(&state[0UL]) + 2) =
          *((unsigned short *)(&state[0UL]) + 1);
      *((unsigned short *)(&state[0UL]) + 1) = copy13;
      copy14 = *((unsigned short *)(&state[0UL]) + 3);
      *((unsigned short *)(&state[0UL]) + 3) =
          *((unsigned short *)(&state[0UL]) + 2);
      *((unsigned short *)(&state[0UL]) + 2) = copy14;
    }
    output[0UL] = (state[0UL] + 438262866UL) - 1930621409UL;
  }
}


x86 assembly (clang, -O0):
<RandomFunc>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
add    $0x3686696a,%rax
xor    $0xffffffffce5d000b,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     1247 <RandomFunc+0x147>
mov    -0x18(%rbp),%rax
shr    $0x1,%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     120a <RandomFunc+0x10a>
mov    -0x18(%rbp),%rax
shr    $0x3,%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     11a5 <RandomFunc+0xa5>
mov    -0x12(%rbp),%ax
mov    %ax,-0x1a(%rbp)
mov    -0x18(%rbp),%ax
mov    %ax,-0x12(%rbp)
mov    -0x1a(%rbp),%ax
mov    %ax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x18(%rbp),%rcx
shr    $0x4,%rcx
and    $0x7,%rcx
or     $0x1,%rcx
shl    %cl,%rax
and    $0xf,%rax
shl    $0x2,%rax
or     -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
jmp    1205 <RandomFunc+0x105>
mov    -0x18(%rbp),%rax
mov    -0x18(%rbp),%rcx
shr    $0x2,%rcx
and    $0xf,%rcx
or     $0x1,%rcx
shr    %cl,%rax
mov    -0x18(%rbp),%rdx
mov    -0x18(%rbp),%rsi
shr    $0x2,%rsi
and    $0xf,%rsi
or     $0x1,%rsi
mov    $0x40,%ecx
sub    %rsi,%rcx
shl    %cl,%rdx
mov    %rdx,%rcx
or     %rcx,%rax
and    $0x3f,%rax
shl    $0x4,%rax
or     -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
and    $0x3f,%rax
shl    $0x4,%rax
or     -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
jmp    1242 <RandomFunc+0x142>
mov    -0x18(%rbp),%rax
and    $0x7,%rax
shl    $0x2,%rax
or     -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    128f <RandomFunc+0x18f>
mov    -0x12(%rbp),%ax
mov    %ax,-0x22(%rbp)
mov    -0x18(%rbp),%ax
mov    %ax,-0x12(%rbp)
mov    -0x22(%rbp),%ax
mov    %ax,-0x18(%rbp)
mov    -0x14(%rbp),%ax
mov    %ax,-0x22(%rbp)
mov    -0x16(%rbp),%ax
mov    %ax,-0x14(%rbp)
mov    -0x22(%rbp),%ax
mov    %ax,-0x16(%rbp)
mov    -0x12(%rbp),%ax
mov    %ax,-0x24(%rbp)
mov    -0x14(%rbp),%ax
mov    %ax,-0x12(%rbp)
mov    -0x24(%rbp),%ax
mov    %ax,-0x14(%rbp)
mov    -0x18(%rbp),%rcx
add    $0x1a1f5c52,%rcx
sub    $0x7312f1e1,%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<RandomFunc>:
mov    $0x3686696a,%edx
add    (%rdi),%rdx
xor    $0xffffffffce5d000b,%rdx
mov    %rdx,%r8
shr    $0x10,%r8
mov    %rdx,%rdi
shr    $0x20,%rdi
mov    %rdx,%r11
shr    $0x30,%r11
mov    %r8d,%r10d
shl    $0x10,%r10d
movzwl %dx,%r9d
lea    (%r10,%r9,1),%ecx
test   $0x1,%cl
jne    1140 <RandomFunc+0x40>
mov    %r8d,%r9d
jmp    11ce <RandomFunc+0xce>
mov    %r11d,%eax
shl    $0x10,%eax
movzwl %di,%edx
or     %edx,%eax
test   $0x2,%cl
jne    116c <RandomFunc+0x6c>
shl    $0x2,%r9d
and    $0x1c,%r9d
mov    %r9d,%r10d
or     %ecx,%r10d
movzwl %r8w,%edi
mov    %eax,%edx
mov    %r11d,%r9d
mov    %r10d,%r11d
jmp    11ce <RandomFunc+0xce>
test   $0x8,%cl
jne    11ad <RandomFunc+0xad>
shl    $0x20,%rax
or     %rcx,%rax
shr    $0x2,%ecx
and    $0xe,%ecx
or     $0x1,%ecx
ror    %cl,%rax
and    $0x3f,%eax
shl    $0x4,%eax
or     %r9d,%eax
or     %eax,%r10d
and    $0x3f,%eax
shl    $0x4,%eax
or     %r10d,%eax
mov    %edi,%r9d
mov    %edi,%edx
movzwl %r8w,%ecx
shr    $0x10,%r9d
mov    %eax,%r11d
mov    %ecx,%edi
jmp    11ce <RandomFunc+0xce>
or     %r11d,%r10d
mov    %r11d,%ecx
shr    $0x4,%cl
and    $0x6,%cl
or     $0x1,%cl
shl    %cl,%r11d
shl    $0x2,%r11d
and    $0x38,%r11d
or     %r10d,%r11d
movzwl %r8w,%edi
shl    $0x10,%edi
movzwl %r11w,%eax
or     %edi,%eax
shl    $0x10,%r9d
movzwl %dx,%ecx
or     %r9d,%ecx
shl    $0x20,%rcx
add    %rcx,%rax
add    $0xffffffffa70c6a71,%rax
mov    %rax,(%rsi)
ret

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

LLVM IR (-O2):
define void @RandomFunc(i64* nocapture %0, i64* nocapture writeonly %1) {
%3 = load i64, i64* %0
%4 = add i64 %3, 914778474
%5 = xor i64 %4, -832765941
%6 = lshr i64 %5, 16
%7 = lshr i64 %5, 32
%8 = lshr i64 %5, 48
%9 = trunc i64 %6 to i32
%10 = shl i32 %9, 16
%11 = trunc i64 %5 to i32
%12 = and i32 %11, 65535
%13 = or i32 %10, %12
%14 = trunc i64 %8 to i32
%15 = shl nuw i32 %14, 16
%16 = trunc i64 %7 to i32
%17 = and i32 %16, 65535
%18 = or i32 %15, %17
%19 = zext i32 %18 to i64
%20 = shl nuw i64 %19, 32
%21 = zext i32 %13 to i64
%22 = or i64 %20, %21
%23 = and i64 %21, 1
%24 = icmp eq i64 %23, 0
br i1 %24, label %61, label %25
25: ; preds = %2
%26 = and i64 %21, 2
%27 = icmp eq i64 %26, 0
br i1 %27, label %56, label %28
28: ; preds = %25
%29 = and i64 %21, 8
%30 = icmp eq i64 %29, 0
br i1 %30, label %41, label %31
31: ; preds = %28
%32 = or i32 %10, %14
%33 = lshr i32 %14, 4
%34 = and i32 %33, 6
%35 = or i32 %34, 1
%36 = shl i32 %14, %35
%37 = shl nuw nsw i32 %36, 2
%38 = and i32 %37, 56
%39 = or i32 %32, %38
%40 = and i32 %9, 65535
br label %61
41: ; preds = %28
%42 = lshr i64 %21, 2
%43 = and i64 %42, 14
%44 = or i64 %43, 1
%45 = tail call i64 @llvm.fshr.i64(i64 %22, i64 %22, i64 %44)
%46 = trunc i64 %45 to i32
%47 = shl i32 %46, 4
%48 = and i32 %47, 1008
%49 = or i32 %48, %12
%50 = or i32 %49, %10
%51 = shl nuw nsw i32 %49, 4
%52 = and i32 %51, 1008
%53 = or i32 %50, %52
%54 = and i32 %9, 65535
%55 = lshr i32 %16, 16
br label %61
56: ; preds = %25
%57 = shl nuw nsw i32 %12, 2
%58 = and i32 %57, 28
%59 = or i32 %13, %58
%60 = and i32 %9, 65535
br label %61
61: ; preds = %2, %56, %41, %31
%62 = phi i32 [ %17, %31 ], [ %16, %41 ], [ %18, %56 ], [ %11, %2 ]
%63 = phi i32 [ %12, %31 ], [ %55, %41 ], [ %14, %56 ], [ %9, %2 ]
%64 = phi i32 [ %39, %31 ], [ %53, %41 ], [ %59, %56 ], [ %14, %2 ]
%65 = phi i32 [ %40, %31 ], [ %54, %41 ], [ %60, %56 ], [ %16, %2 ]
%66 = shl i32 %65, 16
%67 = and i32 %64, 65535
%68 = or i32 %66, %67
%69 = shl i32 %63, 16
%70 = and i32 %62, 65535
%71 = or i32 %69, %70
%72 = zext i32 %71 to i64
%73 = shl nuw i64 %72, 32
%74 = zext i32 %68 to i64
%75 = add i64 %73, -1492358543
%76 = add i64 %75, %74
store i64 %76, i64* %1
ret void
}