void RandomFunc(unsigned long input[1], unsigned long output[1]) {
  unsigned long state[1];
  unsigned short copy11;
  unsigned short copy14;
  unsigned short copy15;
  unsigned short copy16;
  unsigned short copy17;
  {
    state[0UL] = (input[0UL] + 51238316UL) + 274866410UL;
    if ((state[0UL] >> 4UL) & 1UL) {
      if ((state[0UL] >> 3UL) & 1UL) {
        if ((state[0UL] >> 2UL) & 1UL) {
          state[0UL] += state[0UL];
          state[0UL] += state[0UL];
        } else {
          state[0UL] += state[0UL];
          copy11 = *((unsigned short *)(&state[0UL]) + 0);
          *((unsigned short *)(&state[0UL]) + 0) =
              *((unsigned short *)(&state[0UL]) + 1);
          *((unsigned short *)(&state[0UL]) + 1) = copy11;
        }
      } else if (!((state[0UL] >> 1UL) & 1UL)) {
        state[0UL] += state[0UL];
        copy14 = *((unsigned short *)(&state[0UL]) + 2);
        *((unsigned short *)(&state[0UL]) + 2) =
            *((unsigned short *)(&state[0UL]) + 3);
        *((unsigned short *)(&state[0UL]) + 3) = copy14;
      }
    } else if ((state[0UL] >> 3UL) & 1UL) {
      state[0UL] += state[0UL];
      copy15 = *((unsigned short *)(&state[0UL]) + 1);
      *((unsigned short *)(&state[0UL]) + 1) =
          *((unsigned short *)(&state[0UL]) + 2);
      *((unsigned short *)(&state[0UL]) + 2) = copy15;
      copy15 = *((unsigned short *)(&state[0UL]) + 2);
      *((unsigned short *)(&state[0UL]) + 2) =
          *((unsigned short *)(&state[0UL]) + 3);
      *((unsigned short *)(&state[0UL]) + 3) = copy15;
    } else {
      copy16 = *((unsigned short *)(&state[0UL]) + 2);
      *((unsigned short *)(&state[0UL]) + 2) =
          *((unsigned short *)(&state[0UL]) + 1);
      *((unsigned short *)(&state[0UL]) + 1) = copy16;
      copy17 = *((unsigned short *)(&state[0UL]) + 1);
      *((unsigned short *)(&state[0UL]) + 1) =
          *((unsigned short *)(&state[0UL]) + 2);
      *((unsigned short *)(&state[0UL]) + 2) = copy17;
    }
    output[0UL] = (state[0UL] - 536195496UL) - 1936332071UL;
  }
}


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    $0x30dd5ac,%rax
add    $0x106220ea,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
shr    $0x4,%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     11ef <RandomFunc+0xef>
mov    -0x18(%rbp),%rax
shr    $0x3,%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     11ab <RandomFunc+0xab>
mov    -0x18(%rbp),%rax
shr    $0x2,%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     1182 <RandomFunc+0x82>
mov    -0x18(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
jmp    11a6 <RandomFunc+0xa6>
mov    -0x18(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%ax
mov    %ax,-0x1a(%rbp)
mov    -0x16(%rbp),%ax
mov    %ax,-0x18(%rbp)
mov    -0x1a(%rbp),%ax
mov    %ax,-0x16(%rbp)
jmp    11ea <RandomFunc+0xea>
mov    -0x18(%rbp),%rax
shr    $0x1,%rax
and    $0x1,%rax
cmp    $0x0,%rax
jne    11e5 <RandomFunc+0xe5>
mov    -0x18(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x14(%rbp),%ax
mov    %ax,-0x1c(%rbp)
mov    -0x12(%rbp),%ax
mov    %ax,-0x14(%rbp)
mov    -0x1c(%rbp),%ax
mov    %ax,-0x12(%rbp)
jmp    11ea <RandomFunc+0xea>
jmp    127b <RandomFunc+0x17b>
mov    -0x18(%rbp),%rax
shr    $0x3,%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     1246 <RandomFunc+0x146>
mov    -0x18(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x16(%rbp),%ax
mov    %ax,-0x1e(%rbp)
mov    -0x14(%rbp),%ax
mov    %ax,-0x16(%rbp)
mov    -0x1e(%rbp),%ax
mov    %ax,-0x14(%rbp)
mov    -0x14(%rbp),%ax
mov    %ax,-0x1e(%rbp)
mov    -0x12(%rbp),%ax
mov    %ax,-0x14(%rbp)
mov    -0x1e(%rbp),%ax
mov    %ax,-0x12(%rbp)
jmp    1276 <RandomFunc+0x176>
mov    -0x14(%rbp),%ax
mov    %ax,-0x20(%rbp)
mov    -0x16(%rbp),%ax
mov    %ax,-0x14(%rbp)
mov    -0x20(%rbp),%ax
mov    %ax,-0x16(%rbp)
mov    -0x16(%rbp),%ax
mov    %ax,-0x22(%rbp)
mov    -0x14(%rbp),%ax
mov    %ax,-0x16(%rbp)
mov    -0x22(%rbp),%ax
mov    %ax,-0x14(%rbp)
jmp    127b <RandomFunc+0x17b>
mov    -0x18(%rbp),%rcx
sub    $0x1ff5b1a8,%rcx
sub    $0x736a1527,%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<RandomFunc>:
mov    $0x136ff696,%eax
add    (%rdi),%rax
mov    %rax,%rcx
shr    $0x10,%rcx
mov    %rax,%rdi
shr    $0x20,%rdi
mov    %rax,%rdx
shr    $0x30,%rdx
test   $0x10,%al
jne    1138 <RandomFunc+0x38>
test   $0x8,%al
je     1190 <RandomFunc+0x90>
add    %rax,%rax
mov    %rax,%rdx
shr    $0x10,%rdx
mov    %rax,%rcx
shr    $0x20,%rcx
jmp    1151 <RandomFunc+0x51>
test   $0x8,%al
jne    115a <RandomFunc+0x5a>
test   $0x2,%al
jne    1190 <RandomFunc+0x90>
add    %rax,%rax
mov    %rax,%rcx
shr    $0x10,%rcx
mov    %rax,%rdx
shr    $0x20,%rdx
mov    %rax,%rdi
shr    $0x30,%rdi
jmp    1190 <RandomFunc+0x90>
test   $0x4,%al
jne    1177 <RandomFunc+0x77>
mov    %rax,%rcx
add    %rax,%rcx
mov    %rcx,%rax
shr    $0x10,%rax
mov    %rcx,%rdi
shr    $0x20,%rdi
mov    %rcx,%rdx
jmp    118c <RandomFunc+0x8c>
shl    $0x2,%rax
mov    %rax,%rcx
shr    $0x10,%rcx
mov    %rax,%rdi
shr    $0x20,%rdi
mov    %rax,%rdx
shr    $0x30,%rdx
shl    $0x30,%rdx
movzwl %di,%edi
shl    $0x20,%rdi
shl    $0x10,%ecx
movzwl %ax,%eax
or     %rcx,%rax
or     %rdi,%rax
or     %rdx,%rax
movabs $0xffffffff6ca03931,%rcx
ff ff ff
add    %rax,%rcx
mov    %rcx,(%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 i16
%8 = alloca i16
%9 = alloca i16
%10 = alloca i16
store i64* %0, i64** %3
store i64* %1, i64** %4
%11 = load i64*, i64** %3
%12 = getelementptr inbounds i64, i64* %11, i64 0
%13 = load i64, i64* %12
%14 = add i64 %13, 51238316
%15 = add i64 %14, 274866410
%16 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
store i64 %15, i64* %16
%17 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%18 = load i64, i64* %17
%19 = lshr i64 %18, 4
%20 = and i64 %19, 1
%21 = icmp ne i64 %20, 0
br i1 %21, label %22, label %96
22: ; preds = %2
%23 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%24 = load i64, i64* %23
%25 = lshr i64 %24, 3
%26 = and i64 %25, 1
%27 = icmp ne i64 %26, 0
br i1 %27, label %28, label %67
28: ; preds = %22
%29 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%30 = load i64, i64* %29
%31 = lshr i64 %30, 2
%32 = and i64 %31, 1
%33 = icmp ne i64 %32, 0
br i1 %33, label %34, label %45
34: ; preds = %28
%35 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%36 = load i64, i64* %35
%37 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%38 = load i64, i64* %37
%39 = add i64 %38, %36
store i64 %39, i64* %37
%40 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%41 = load i64, i64* %40
%42 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%43 = load i64, i64* %42
%44 = add i64 %43, %41
store i64 %44, i64* %42
br label %66
45: ; preds = %28
%46 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%47 = load i64, i64* %46
%48 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%49 = load i64, i64* %48
%50 = add i64 %49, %47
store i64 %50, i64* %48
%51 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%52 = bitcast i64* %51 to i16*
%53 = getelementptr inbounds i16, i16* %52, i64 0
%54 = load i16, i16* %53
store i16 %54, i16* %6
%55 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%56 = bitcast i64* %55 to i16*
%57 = getelementptr inbounds i16, i16* %56, i64 1
%58 = load i16, i16* %57
%59 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%60 = bitcast i64* %59 to i16*
%61 = getelementptr inbounds i16, i16* %60, i64 0
store i16 %58, i16* %61
%62 = load i16, i16* %6
%63 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%64 = bitcast i64* %63 to i16*
%65 = getelementptr inbounds i16, i16* %64, i64 1
store i16 %62, i16* %65
br label %66
66: ; preds = %45, %34
br label %95
67: ; preds = %22
%68 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%69 = load i64, i64* %68
%70 = lshr i64 %69, 1
%71 = and i64 %70, 1
%72 = icmp ne i64 %71, 0
br i1 %72, label %94, label %73
73: ; preds = %67
%74 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%75 = load i64, i64* %74
%76 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%77 = load i64, i64* %76
%78 = add i64 %77, %75
store i64 %78, i64* %76
%79 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%80 = bitcast i64* %79 to i16*
%81 = getelementptr inbounds i16, i16* %80, i64 2
%82 = load i16, i16* %81
store i16 %82, i16* %7
%83 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%84 = bitcast i64* %83 to i16*
%85 = getelementptr inbounds i16, i16* %84, i64 3
%86 = load i16, i16* %85
%87 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%88 = bitcast i64* %87 to i16*
%89 = getelementptr inbounds i16, i16* %88, i64 2
store i16 %86, i16* %89
%90 = load i16, i16* %7
%91 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%92 = bitcast i64* %91 to i16*
%93 = getelementptr inbounds i16, i16* %92, i64 3
store i16 %90, i16* %93
br label %94
94: ; preds = %73, %67
br label %95
95: ; preds = %94, %66
br label %170
96: ; preds = %2
%97 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%98 = load i64, i64* %97
%99 = lshr i64 %98, 3
%100 = and i64 %99, 1
%101 = icmp ne i64 %100, 0
br i1 %101, label %102, label %138
102: ; preds = %96
%103 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%104 = load i64, i64* %103
%105 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%106 = load i64, i64* %105
%107 = add i64 %106, %104
store i64 %107, i64* %105
%108 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%109 = bitcast i64* %108 to i16*
%110 = getelementptr inbounds i16, i16* %109, i64 1
%111 = load i16, i16* %110
store i16 %111, i16* %8
%112 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%113 = bitcast i64* %112 to i16*
%114 = getelementptr inbounds i16, i16* %113, i64 2
%115 = load i16, i16* %114
%116 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%117 = bitcast i64* %116 to i16*
%118 = getelementptr inbounds i16, i16* %117, i64 1
store i16 %115, i16* %118
%119 = load i16, i16* %8
%120 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%121 = bitcast i64* %120 to i16*
%122 = getelementptr inbounds i16, i16* %121, i64 2
store i16 %119, i16* %122
%123 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%124 = bitcast i64* %123 to i16*
%125 = getelementptr inbounds i16, i16* %124, i64 2
%126 = load i16, i16* %125
store i16 %126, i16* %8
%127 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%128 = bitcast i64* %127 to i16*
%129 = getelementptr inbounds i16, i16* %128, i64 3
%130 = load i16, i16* %129
%131 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%132 = bitcast i64* %131 to i16*
%133 = getelementptr inbounds i16, i16* %132, i64 2
store i16 %130, i16* %133
%134 = load i16, i16* %8
%135 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%136 = bitcast i64* %135 to i16*
%137 = getelementptr inbounds i16, i16* %136, i64 3
store i16 %134, i16* %137
br label %169
138: ; preds = %96
%139 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%140 = bitcast i64* %139 to i16*
%141 = getelementptr inbounds i16, i16* %140, i64 2
%142 = load i16, i16* %141
store i16 %142, i16* %9
%143 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%144 = bitcast i64* %143 to i16*
%145 = getelementptr inbounds i16, i16* %144, i64 1
%146 = load i16, i16* %145
%147 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%148 = bitcast i64* %147 to i16*
%149 = getelementptr inbounds i16, i16* %148, i64 2
store i16 %146, i16* %149
%150 = load i16, i16* %9
%151 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%152 = bitcast i64* %151 to i16*
%153 = getelementptr inbounds i16, i16* %152, i64 1
store i16 %150, i16* %153
%154 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%155 = bitcast i64* %154 to i16*
%156 = getelementptr inbounds i16, i16* %155, i64 1
%157 = load i16, i16* %156
store i16 %157, i16* %10
%158 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%159 = bitcast i64* %158 to i16*
%160 = getelementptr inbounds i16, i16* %159, i64 2
%161 = load i16, i16* %160
%162 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%163 = bitcast i64* %162 to i16*
%164 = getelementptr inbounds i16, i16* %163, i64 1
store i16 %161, i16* %164
%165 = load i16, i16* %10
%166 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%167 = bitcast i64* %166 to i16*
%168 = getelementptr inbounds i16, i16* %167, i64 2
store i16 %165, i16* %168
br label %169
169: ; preds = %138, %102
br label %170
170: ; preds = %169, %95
%171 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%172 = load i64, i64* %171
%173 = sub i64 %172, 536195496
%174 = sub i64 %173, 1936332071
%175 = load i64*, i64** %4
%176 = getelementptr inbounds i64, i64* %175, i64 0
store i64 %174, i64* %176
ret void
}

LLVM IR (-O2):
define void @RandomFunc(i64* nocapture %0, i64* nocapture writeonly %1) {
%3 = load i64, i64* %0
%4 = add i64 %3, 326104726
%5 = lshr i64 %4, 16
%6 = lshr i64 %4, 32
%7 = lshr i64 %4, 48
%8 = and i64 %4, 16
%9 = icmp eq i64 %8, 0
%10 = and i64 %4, 8
%11 = icmp eq i64 %10, 0
br i1 %9, label %34, label %12
12: ; preds = %2
br i1 %11, label %26, label %13
13: ; preds = %12
%14 = and i64 %4, 4
%15 = icmp eq i64 %14, 0
br i1 %15, label %21, label %16
16: ; preds = %13
%17 = shl i64 %4, 2
%18 = lshr i64 %17, 16
%19 = lshr i64 %17, 32
%20 = lshr i64 %17, 48
br label %40
21: ; preds = %13
%22 = shl i64 %4, 1
%23 = lshr i64 %22, 16
%24 = lshr i64 %22, 32
%25 = lshr i64 %22, 48
br label %40
26: ; preds = %12
%27 = and i64 %4, 2
%28 = icmp eq i64 %27, 0
br i1 %28, label %29, label %40
29: ; preds = %26
%30 = shl i64 %4, 1
%31 = lshr i64 %30, 16
%32 = lshr i64 %30, 32
%33 = lshr i64 %30, 48
br label %40
34: ; preds = %2
br i1 %11, label %40, label %35
35: ; preds = %34
%36 = shl i64 %4, 1
%37 = lshr i64 %36, 16
%38 = lshr i64 %36, 32
%39 = lshr i64 %36, 48
br label %40
40: ; preds = %34, %35, %21, %16, %29, %26
%41 = phi i64 [ %17, %16 ], [ %23, %21 ], [ %4, %26 ], [ %30, %29 ], [ %36, %35 ], [ %4, %34 ]
%42 = phi i64 [ %18, %16 ], [ %22, %21 ], [ %5, %26 ], [ %31, %29 ], [ %38, %35 ], [ %5, %34 ]
%43 = phi i64 [ %19, %16 ], [ %24, %21 ], [ %6, %26 ], [ %33, %29 ], [ %39, %35 ], [ %6, %34 ]
%44 = phi i64 [ %20, %16 ], [ %25, %21 ], [ %7, %26 ], [ %32, %29 ], [ %37, %35 ], [ %7, %34 ]
%45 = shl i64 %44, 48
%46 = shl nuw i64 %43, 32
%47 = and i64 %46, 281470681743360
%48 = shl i64 %42, 16
%49 = and i64 %48, 4294901760
%50 = and i64 %41, 65535
%51 = add nuw nsw i64 %50, -2472527567
%52 = add nsw i64 %51, %49
%53 = add nsw i64 %52, %47
%54 = add i64 %53, %45
store i64 %54, i64* %1
ret void
}