void RandomFunc(unsigned char input[1], unsigned char output[1]) {
  unsigned char state[1];
  unsigned char local1;
  {
    state[0UL] = input[0UL] ^ (unsigned char)219;
    local1 = 0UL;
    while (local1 < (unsigned char)0) {
      if (state[0UL] != local1) {
        state[local1] = state[0UL] << (((state[0UL] >> (unsigned char)2) &
                                        (unsigned char)7) |
                                       1UL);
        state[0UL] =
            state[local1] >>
            (((state[local1] >> (unsigned char)1) & (unsigned char)7) | 1UL);
      } else {
        state[0UL] = state[local1] << (((state[local1] >> (unsigned char)4) &
                                        (unsigned char)7) |
                                       1UL);
        state[0UL] <<=
            ((state[local1] >> (unsigned char)3) & (unsigned char)7) | 1UL;
      }
      if (state[0UL] > local1) {
        state[local1] = state[0UL] << (((state[0UL] >> (unsigned char)2) &
                                        (unsigned char)7) |
                                       1UL);
        state[0UL] >>=
            ((state[0UL] >> (unsigned char)4) & (unsigned char)7) | 1UL;
      } else {
        state[0UL] <<=
            ((state[0UL] >> (unsigned char)4) & (unsigned char)7) | 1UL;
        state[0UL] = state[local1] & state[0UL];
      }
      local1 += 2UL;
    }
    output[0UL] = (state[0UL] & 739954775UL) | (unsigned char)146;
  }
}


x86 assembly (clang, -O0):
<RandomFunc>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movzbl (%rax),%eax
xor    $0xdb,%eax
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
movzbl -0x12(%rbp),%eax
cmp    $0x0,%eax
jge    1255 <RandomFunc+0x155>
movzbl -0x11(%rbp),%eax
movzbl -0x12(%rbp),%ecx
cmp    %ecx,%eax
je     1186 <RandomFunc+0x86>
movzbl -0x11(%rbp),%eax
movzbl -0x11(%rbp),%ecx
sar    $0x2,%ecx
and    $0x7,%ecx
movslq %ecx,%rcx
or     $0x1,%rcx
shl    %cl,%eax
mov    %al,%cl
movzbl -0x12(%rbp),%eax
mov    %cl,-0x11(%rbp,%rax,1)
movzbl -0x12(%rbp),%eax
movzbl -0x11(%rbp,%rax,1),%eax
movzbl -0x12(%rbp),%ecx
movzbl -0x11(%rbp,%rcx,1),%ecx
sar    $0x1,%ecx
and    $0x7,%ecx
movslq %ecx,%rcx
or     $0x1,%rcx
sar    %cl,%eax
mov    %al,-0x11(%rbp)
jmp    11c9 <RandomFunc+0xc9>
movzbl -0x12(%rbp),%eax
movzbl -0x11(%rbp,%rax,1),%eax
movzbl -0x12(%rbp),%ecx
movzbl -0x11(%rbp,%rcx,1),%ecx
sar    $0x4,%ecx
and    $0x7,%ecx
movslq %ecx,%rcx
or     $0x1,%rcx
shl    %cl,%eax
mov    %al,-0x11(%rbp)
movzbl -0x12(%rbp),%eax
movzbl -0x11(%rbp,%rax,1),%eax
sar    $0x3,%eax
and    $0x7,%eax
movslq %eax,%rcx
or     $0x1,%rcx
movzbl -0x11(%rbp),%eax
shl    %cl,%eax
mov    %al,-0x11(%rbp)
movzbl -0x11(%rbp),%eax
movzbl -0x12(%rbp),%ecx
cmp    %ecx,%eax
jle    1219 <RandomFunc+0x119>
movzbl -0x11(%rbp),%eax
movzbl -0x11(%rbp),%ecx
sar    $0x2,%ecx
and    $0x7,%ecx
movslq %ecx,%rcx
or     $0x1,%rcx
shl    %cl,%eax
mov    %al,%cl
movzbl -0x12(%rbp),%eax
mov    %cl,-0x11(%rbp,%rax,1)
movzbl -0x11(%rbp),%eax
sar    $0x4,%eax
and    $0x7,%eax
movslq %eax,%rcx
or     $0x1,%rcx
movzbl -0x11(%rbp),%eax
sar    %cl,%eax
mov    %al,-0x11(%rbp)
jmp    1245 <RandomFunc+0x145>
movzbl -0x11(%rbp),%eax
sar    $0x4,%eax
and    $0x7,%eax
movslq %eax,%rcx
or     $0x1,%rcx
movzbl -0x11(%rbp),%eax
shl    %cl,%eax
mov    %al,-0x11(%rbp)
movzbl -0x12(%rbp),%eax
movzbl -0x11(%rbp,%rax,1),%eax
movzbl -0x11(%rbp),%ecx
and    %ecx,%eax
mov    %al,-0x11(%rbp)
movzbl -0x12(%rbp),%eax
add    $0x2,%rax
mov    %al,-0x12(%rbp)
jmp    111f <RandomFunc+0x1f>
movzbl -0x11(%rbp),%eax
and    $0x2c1ad057,%rax
or     $0x92,%rax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<RandomFunc>:
mov    (%rdi),%al
and    $0x45,%al
xor    $0xd3,%al
mov    %al,(%rsi)
ret

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

LLVM IR (-O2):
define void @RandomFunc(i8* nocapture %0, i8* nocapture writeonly %1) {
%3 = load i8, i8* %0
%4 = and i8 %3, 69
%5 = xor i8 %4, -45
store i8 %5, i8* %1
ret void
}