void RandomFunc(unsigned long input[1], unsigned long output[1]) {
  unsigned long state[1];
  char copy11;
  unsigned int copy13;
  unsigned int copy14;
  unsigned short copy16;
  {
    state[0UL] = (input[0UL] + 914778474UL) * 67330564296145686UL;
    if (state[0UL] & 1UL) {
      if (state[0UL] & 1UL) {
        if (state[0UL] & 1UL) {
          copy11 = *((char *)(&state[0UL]) + 1);
          *((char *)(&state[0UL]) + 1) = *((char *)(&state[0UL]) + 7);
          *((char *)(&state[0UL]) + 7) = copy11;
        } else {
          copy13 = *((unsigned int *)(&state[0UL]) + 1);
          *((unsigned int *)(&state[0UL]) + 1) =
              *((unsigned int *)(&state[0UL]) + 0);
          *((unsigned int *)(&state[0UL]) + 0) = copy13;
          copy13 = *((unsigned int *)(&state[0UL]) + 0);
          *((unsigned int *)(&state[0UL]) + 0) =
              *((unsigned int *)(&state[0UL]) + 1);
          *((unsigned int *)(&state[0UL]) + 1) = copy13;
          state[0UL] += state[0UL];
        }
      } else if ((state[0UL] >> 1UL) & 1UL) {
        copy14 = *((unsigned int *)(&state[0UL]) + 1);
        *((unsigned int *)(&state[0UL]) + 1) =
            *((unsigned int *)(&state[0UL]) + 0);
        *((unsigned int *)(&state[0UL]) + 0) = copy14;
        copy14 = *((unsigned int *)(&state[0UL]) + 0);
        *((unsigned int *)(&state[0UL]) + 0) =
            *((unsigned int *)(&state[0UL]) + 1);
        *((unsigned int *)(&state[0UL]) + 1) = copy14;
      } else {
        state[0UL] *= state[0UL];
        copy16 = *((unsigned short *)(&state[0UL]) + 3);
        *((unsigned short *)(&state[0UL]) + 3) =
            *((unsigned short *)(&state[0UL]) + 0);
        *((unsigned short *)(&state[0UL]) + 0) = copy16;
      }
    } else {
      state[0UL] += state[0UL];
      state[0UL] += state[0UL];
    }
    output[0UL] = (state[0UL] + 218093449UL) + 0xfc5c68e1698ca65eUL;
  }
}


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
movabs $0xef34ca9f65fb16,%rcx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     121b <RandomFunc+0x11b>
mov    -0x18(%rbp),%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     11ad <RandomFunc+0xad>
mov    -0x18(%rbp),%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     1178 <RandomFunc+0x78>
mov    -0x17(%rbp),%al
mov    %al,-0x19(%rbp)
mov    -0x11(%rbp),%al
mov    %al,-0x17(%rbp)
mov    -0x19(%rbp),%al
mov    %al,-0x11(%rbp)
jmp    11a8 <RandomFunc+0xa8>
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)
mov    -0x18(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
jmp    1216 <RandomFunc+0x116>
mov    -0x18(%rbp),%rax
shr    $0x1,%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     11ec <RandomFunc+0xec>
mov    -0x14(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1211 <RandomFunc+0x111>
mov    -0x18(%rbp),%rax
imul   -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x12(%rbp),%ax
mov    %ax,-0x26(%rbp)
mov    -0x18(%rbp),%ax
mov    %ax,-0x12(%rbp)
mov    -0x26(%rbp),%ax
mov    %ax,-0x18(%rbp)
jmp    1216 <RandomFunc+0x116>
jmp    1233 <RandomFunc+0x133>
mov    -0x18(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rcx
add    $0xcffd789,%rcx
movabs $0xfc5c68e1698ca65e,%rax
68 5c fc
add    %rax,%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<RandomFunc>:
movabs $0xef34ca9f65fb16,%rcx
imul   (%rdi),%rcx
movabs $0xdf61e99ee5b9fd1c,%r8
e9 61 df
add    %rcx,%r8
mov    %r8,%rdx
shr    $0x20,%rdx
mov    %rdx,%rdi
shl    $0x21,%rdi
lea    (%r8,%r8,1),%rcx
movabs $0x100000000,%rax
and    %rcx,%rax
or     %rdi,%rax
mov    %ecx,%edi
or     %rax,%rdi
shr    $0x1f,%rdi
and    $0x7f,%ecx
add    %rcx,%rcx
movzwl %di,%eax
and    $0xffffc000,%edx
lea    (%rax,%rdx,4),%eax
shl    $0x20,%rax
and    $0x3fffffc0,%r8d
lea    (%rcx,%r8,4),%rcx
or     %rax,%rcx
movabs $0xfc5c68e1768c7de7,%rax
68 5c fc
add    %rcx,%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 i8
%7 = alloca i32
%8 = alloca i32
%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 = mul i64 %13, 67330564296145686
%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 %143
20: ; preds = %2
%21 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%22 = load i64, i64* %21
%23 = and i64 %22, 1
%24 = icmp ne i64 %23, 0
br i1 %24, label %25, label %83
25: ; preds = %20
%26 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%27 = load i64, i64* %26
%28 = and i64 %27, 1
%29 = icmp ne i64 %28, 0
br i1 %29, label %30, label %46
30: ; preds = %25
%31 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%32 = bitcast i64* %31 to i8*
%33 = getelementptr inbounds i8, i8* %32, i64 1
%34 = load i8, i8* %33
store i8 %34, i8* %6
%35 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%36 = bitcast i64* %35 to i8*
%37 = getelementptr inbounds i8, i8* %36, i64 7
%38 = load i8, i8* %37
%39 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%40 = bitcast i64* %39 to i8*
%41 = getelementptr inbounds i8, i8* %40, i64 1
store i8 %38, i8* %41
%42 = load i8, i8* %6
%43 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%44 = bitcast i64* %43 to i8*
%45 = getelementptr inbounds i8, i8* %44, i64 7
store i8 %42, i8* %45
br label %82
46: ; preds = %25
%47 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%48 = bitcast i64* %47 to i32*
%49 = getelementptr inbounds i32, i32* %48, i64 1
%50 = load i32, i32* %49
store i32 %50, i32* %7
%51 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%52 = bitcast i64* %51 to i32*
%53 = getelementptr inbounds i32, i32* %52, i64 0
%54 = load i32, i32* %53
%55 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%56 = bitcast i64* %55 to i32*
%57 = getelementptr inbounds i32, i32* %56, i64 1
store i32 %54, i32* %57
%58 = load i32, i32* %7
%59 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%60 = bitcast i64* %59 to i32*
%61 = getelementptr inbounds i32, i32* %60, i64 0
store i32 %58, i32* %61
%62 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%63 = bitcast i64* %62 to i32*
%64 = getelementptr inbounds i32, i32* %63, i64 0
%65 = load i32, i32* %64
store i32 %65, i32* %7
%66 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%67 = bitcast i64* %66 to i32*
%68 = getelementptr inbounds i32, i32* %67, i64 1
%69 = load i32, i32* %68
%70 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%71 = bitcast i64* %70 to i32*
%72 = getelementptr inbounds i32, i32* %71, i64 0
store i32 %69, i32* %72
%73 = load i32, i32* %7
%74 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%75 = bitcast i64* %74 to i32*
%76 = getelementptr inbounds i32, i32* %75, i64 1
store i32 %73, i32* %76
%77 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%78 = load i64, i64* %77
%79 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%80 = load i64, i64* %79
%81 = add i64 %80, %78
store i64 %81, i64* %79
br label %82
82: ; preds = %46, %30
br label %142
83: ; preds = %20
%84 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%85 = load i64, i64* %84
%86 = lshr i64 %85, 1
%87 = and i64 %86, 1
%88 = icmp ne i64 %87, 0
br i1 %88, label %89, label %120
89: ; preds = %83
%90 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%91 = bitcast i64* %90 to i32*
%92 = getelementptr inbounds i32, i32* %91, i64 1
%93 = load i32, i32* %92
store i32 %93, i32* %8
%94 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%95 = bitcast i64* %94 to i32*
%96 = getelementptr inbounds i32, i32* %95, i64 0
%97 = load i32, i32* %96
%98 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%99 = bitcast i64* %98 to i32*
%100 = getelementptr inbounds i32, i32* %99, i64 1
store i32 %97, i32* %100
%101 = load i32, i32* %8
%102 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%103 = bitcast i64* %102 to i32*
%104 = getelementptr inbounds i32, i32* %103, i64 0
store i32 %101, i32* %104
%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
store i32 %108, i32* %8
%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
%112 = load i32, i32* %111
%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 = load i32, i32* %8
%117 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%118 = bitcast i64* %117 to i32*
%119 = getelementptr inbounds i32, i32* %118, i64 1
store i32 %116, i32* %119
br label %141
120: ; preds = %83
%121 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%122 = load i64, i64* %121
%123 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%124 = load i64, i64* %123
%125 = mul i64 %124, %122
store i64 %125, i64* %123
%126 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%127 = bitcast i64* %126 to i16*
%128 = getelementptr inbounds i16, i16* %127, i64 3
%129 = load i16, i16* %128
store i16 %129, i16* %9
%130 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%131 = bitcast i64* %130 to i16*
%132 = getelementptr inbounds i16, i16* %131, i64 0
%133 = load i16, i16* %132
%134 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%135 = bitcast i64* %134 to i16*
%136 = getelementptr inbounds i16, i16* %135, i64 3
store i16 %133, i16* %136
%137 = load i16, i16* %9
%138 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%139 = bitcast i64* %138 to i16*
%140 = getelementptr inbounds i16, i16* %139, i64 0
store i16 %137, i16* %140
br label %141
141: ; preds = %120, %89
br label %142
142: ; preds = %141, %82
br label %154
143: ; preds = %2
%144 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%145 = load i64, i64* %144
%146 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%147 = load i64, i64* %146
%148 = add i64 %147, %145
store i64 %148, i64* %146
%149 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%150 = load i64, i64* %149
%151 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%152 = load i64, i64* %151
%153 = add i64 %152, %150
store i64 %153, i64* %151
br label %154
154: ; preds = %143, %142
%155 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%156 = load i64, i64* %155
%157 = add i64 %156, 218093449
%158 = add i64 %157, -262219360946575778
%159 = load i64*, i64** %4
%160 = getelementptr inbounds i64, i64* %159, i64 0
store i64 %158, i64* %160
ret void
}

LLVM IR (-O2):
define void @RandomFunc(i64* nocapture %0, i64* nocapture writeonly %1) {
%3 = load i64, i64* %0
%4 = mul i64 %3, 67330564296145686
%5 = add i64 %4, -2350340661842412260
%6 = lshr i64 %5, 32
%7 = shl i64 %6, 33
%8 = shl i64 %5, 1
%9 = and i64 %8, 4294967296
%10 = and i64 %8, 4294967292
%11 = or i64 %7, %9
%12 = or i64 %11, %10
%13 = shl nuw nsw i64 %10, 1
%14 = lshr i64 %12, 31
%15 = shl i64 %5, 2
%16 = and i64 %13, 248
%17 = and i64 %15, 65280
%18 = shl nuw nsw i64 %6, 2
%19 = and i64 %18, 4278190080
%20 = shl nuw nsw i64 %6, 2
%21 = and i64 %20, 16711680
%22 = and i64 %14, 65535
%23 = or i64 %19, %21
%24 = or i64 %22, %23
%25 = shl nuw i64 %24, 32
%26 = and i64 %15, 4294901760
%27 = add nuw nsw i64 %17, -262219360728482329
%28 = add nuw nsw i64 %27, %26
%29 = add nuw nsw i64 %28, %16
%30 = add i64 %29, %25
store i64 %30, i64* %1
ret void
}