void RandomFunc(unsigned long input[1], unsigned long output[1]) {
  unsigned long state[1];
  unsigned long local2;
  unsigned long local1;
  unsigned short copy11;
  char copy12;
  {
    state[0UL] = (input[0UL] + 914778474UL) - 981234615UL;
    local1 = 0UL;
    while (local1 < input[1UL]) {
      local2 = 0UL;
      while (local2 < input[1UL]) {
        copy11 = *((unsigned short *)(&state[local2]) + 0);
        *((unsigned short *)(&state[local2]) + 0) =
            *((unsigned short *)(&state[local2]) + 1);
        *((unsigned short *)(&state[local2]) + 1) = copy11;
        copy12 = *((char *)(&state[0UL]) + 7);
        *((char *)(&state[0UL]) + 7) = *((char *)(&state[0UL]) + 2);
        *((char *)(&state[0UL]) + 2) = copy12;
        copy12 = *((char *)(&state[0UL]) + 3);
        *((char *)(&state[0UL]) + 3) = *((char *)(&state[0UL]) + 4);
        *((char *)(&state[0UL]) + 4) = copy12;
        local2++;
      }
      local1++;
    }
    output[0UL] = state[0UL] + 1123742804UL;
  }
}


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
sub    $0x3a7c73b7,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x8(%rbp),%rcx
cmp    0x8(%rcx),%rax
jae    11c9 <RandomFunc+0xc9>
movq   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x8(%rbp),%rcx
cmp    0x8(%rcx),%rax
jae    11b8 <RandomFunc+0xb8>
mov    -0x20(%rbp),%rax
mov    -0x18(%rbp,%rax,8),%ax
mov    %ax,-0x2a(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x16(%rbp,%rax,8),%cx
mov    -0x20(%rbp),%rax
mov    %cx,-0x18(%rbp,%rax,8)
mov    -0x2a(%rbp),%cx
mov    -0x20(%rbp),%rax
mov    %cx,-0x16(%rbp,%rax,8)
mov    -0x11(%rbp),%al
mov    %al,-0x2b(%rbp)
mov    -0x16(%rbp),%al
mov    %al,-0x11(%rbp)
mov    -0x2b(%rbp),%al
mov    %al,-0x16(%rbp)
mov    -0x15(%rbp),%al
mov    %al,-0x2b(%rbp)
mov    -0x14(%rbp),%al
mov    %al,-0x15(%rbp)
mov    -0x2b(%rbp),%al
mov    %al,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1145 <RandomFunc+0x45>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    112b <RandomFunc+0x2b>
mov    -0x18(%rbp),%rcx
add    $0x42faf454,%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<RandomFunc>:
mov    $0xfffffffffc09f5b3,%rax
add    (%rdi),%rax
mov    %rax,-0x8(%rsp)
mov    0x8(%rdi),%r8
test   %r8,%r8
je     11bd <RandomFunc+0xbd>
mov    %rax,%rdx
shr    $0x20,%rdx
shr    $0x38,%rax
mov    %r8,%r10
and    $0xfffffffffffffffe,%r10
xor    %r9d,%r9d
jmp    1149 <RandomFunc+0x49>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r9
cmp    %r8,%r9
je     11b0 <RandomFunc+0xb0>
xor    %ecx,%ecx
cmp    $0x1,%r8
je     118e <RandomFunc+0x8e>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
roll   $0x10,-0x8(%rsp,%rcx,8)
movzwl -0x6(%rsp),%edi
mov    %al,-0x6(%rsp)
mov    %dl,-0x5(%rsp)
roll   $0x10,(%rsp,%rcx,8)
movzbl -0x6(%rsp),%eax
movzbl -0x5(%rsp),%edx
mov    %di,-0x6(%rsp)
add    $0x2,%rcx
cmp    %rcx,%r10
jne    1160 <RandomFunc+0x60>
test   $0x1,%r8b
je     1140 <RandomFunc+0x40>
roll   $0x10,-0x8(%rsp,%rcx,8)
mov    -0x6(%rsp),%cl
mov    -0x5(%rsp),%dil
mov    %al,-0x6(%rsp)
mov    %dl,-0x5(%rsp)
mov    %ecx,%eax
mov    %edi,%edx
jmp    1140 <RandomFunc+0x40>
mov    %al,-0x1(%rsp)
mov    %dl,-0x4(%rsp)
mov    -0x8(%rsp),%rax
add    $0x42faf454,%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 i64
%7 = alloca i64
%8 = alloca i16
%9 = alloca i8
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 = sub i64 %13, 981234615
%15 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
store i64 %14, i64* %15
store i64 0, i64* %7
br label %16
16: ; preds = %81, %2
%17 = load i64, i64* %7
%18 = load i64*, i64** %3
%19 = getelementptr inbounds i64, i64* %18, i64 1
%20 = load i64, i64* %19
%21 = icmp ult i64 %17, %20
br i1 %21, label %22, label %84
22: ; preds = %16
store i64 0, i64* %6
br label %23
23: ; preds = %29, %22
%24 = load i64, i64* %6
%25 = load i64*, i64** %3
%26 = getelementptr inbounds i64, i64* %25, i64 1
%27 = load i64, i64* %26
%28 = icmp ult i64 %24, %27
br i1 %28, label %29, label %81
29: ; preds = %23
%30 = load i64, i64* %6
%31 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 %30
%32 = bitcast i64* %31 to i16*
%33 = getelementptr inbounds i16, i16* %32, i64 0
%34 = load i16, i16* %33
store i16 %34, i16* %8
%35 = load i64, i64* %6
%36 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 %35
%37 = bitcast i64* %36 to i16*
%38 = getelementptr inbounds i16, i16* %37, i64 1
%39 = load i16, i16* %38
%40 = load i64, i64* %6
%41 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 %40
%42 = bitcast i64* %41 to i16*
%43 = getelementptr inbounds i16, i16* %42, i64 0
store i16 %39, i16* %43
%44 = load i16, i16* %8
%45 = load i64, i64* %6
%46 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 %45
%47 = bitcast i64* %46 to i16*
%48 = getelementptr inbounds i16, i16* %47, i64 1
store i16 %44, i16* %48
%49 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%50 = bitcast i64* %49 to i8*
%51 = getelementptr inbounds i8, i8* %50, i64 7
%52 = load i8, i8* %51
store i8 %52, i8* %9
%53 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%54 = bitcast i64* %53 to i8*
%55 = getelementptr inbounds i8, i8* %54, i64 2
%56 = load i8, i8* %55
%57 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%58 = bitcast i64* %57 to i8*
%59 = getelementptr inbounds i8, i8* %58, i64 7
store i8 %56, i8* %59
%60 = load i8, i8* %9
%61 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%62 = bitcast i64* %61 to i8*
%63 = getelementptr inbounds i8, i8* %62, i64 2
store i8 %60, i8* %63
%64 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%65 = bitcast i64* %64 to i8*
%66 = getelementptr inbounds i8, i8* %65, i64 3
%67 = load i8, i8* %66
store i8 %67, i8* %9
%68 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%69 = bitcast i64* %68 to i8*
%70 = getelementptr inbounds i8, i8* %69, i64 4
%71 = load i8, i8* %70
%72 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%73 = bitcast i64* %72 to i8*
%74 = getelementptr inbounds i8, i8* %73, i64 3
store i8 %71, i8* %74
%75 = load i8, i8* %9
%76 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%77 = bitcast i64* %76 to i8*
%78 = getelementptr inbounds i8, i8* %77, i64 4
store i8 %75, i8* %78
%79 = load i64, i64* %6
%80 = add i64 %79, 1
store i64 %80, i64* %6
br label %23
81: ; preds = %23
%82 = load i64, i64* %7
%83 = add i64 %82, 1
store i64 %83, i64* %7
br label %16
84: ; preds = %16
%85 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0
%86 = load i64, i64* %85
%87 = add i64 %86, 1123742804
%88 = load i64*, i64** %4
%89 = getelementptr inbounds i64, i64* %88, i64 0
store i64 %87, i64* %89
ret void
}

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