void LeftShift(unsigned char *pc, int s, int n) {
  int i;
  for (i = s - 1; i > 0; --i) {
    pc[i] <<= n;
    pc[i] |= (pc[i - 1] >> (8 - n));
  }
  pc[0] <<= n;
}


x86 assembly (clang, -O0):
<LeftShift>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
jle    1177 <LeftShift+0x77>
mov    -0x10(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rdx
mov    %rdx,-0x20(%rbp)
movzbl (%rax,%rdx,1),%edx
shl    %cl,%edx
mov    -0x20(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%esi
mov    $0x8,%ecx
sub    -0x10(%rbp),%ecx
sar    %cl,%esi
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1117 <LeftShift+0x17>
mov    -0x10(%rbp),%ecx
mov    -0x8(%rbp),%rax
movzbl (%rax),%edx
shl    %cl,%edx
mov    %edx,%ecx
mov    %cl,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<LeftShift>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %edx,%r12d
cmp    $0x2,%esi
jl     1184 <LeftShift+0x84>
mov    $0xffffffff,%r8d
mov    $0x8,%r15d
sub    %r12d,%r15d
mov    %esi,%r11d
xor    %r14d,%r14d
mov    %r11,%rcx
sub    $0x2,%rcx
mov    $0x0,%r9d
cmovae %rcx,%r9
add    $0x1,%r9
cmp    $0x4,%r9
jae    1197 <LeftShift+0x97>
mov    %r11,%rsi
lea    (%r8,%rsi,1),%rbx
add    $0xffffffffffffffff,%rbx
add    $0xffffffffffffffff,%rsi
nop
mov    %esi,%eax
movzbl (%rdi,%rax,1),%ebp
mov    %r12d,%ecx
shl    %cl,%ebp
mov    %bpl,(%rdi,%rax,1)
mov    %ebx,%ecx
movzbl (%rdi,%rcx,1),%edx
mov    %r15d,%ecx
shr    %cl,%edx
or     %ebp,%edx
mov    %dl,(%rdi,%rax,1)
add    $0xffffffffffffffff,%rbx
lea    -0x1(%rsi),%rax
add    $0x1,%rsi
cmp    $0x2,%rsi
mov    %rax,%rsi
ja     1150 <LeftShift+0x50>
movzbl (%rdi),%eax
mov    %r12d,%ecx
shl    %cl,%eax
mov    %al,(%rdi)
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r11d,%ebx
sub    $0x2,%ebx
cmovb  %r14d,%ebx
mov    %r11,%rcx
sub    $0x2,%rcx
cmovae %rcx,%r14
lea    -0x1(%rsi),%r10d
cmp    %ebx,%r10d
jb     1140 <LeftShift+0x40>
mov    %r14,%rcx
shr    $0x20,%rcx
jne    1140 <LeftShift+0x40>
add    $0xfffffffe,%esi
cmp    %ebx,%esi
jb     1140 <LeftShift+0x40>
test   %rcx,%rcx
jne    1140 <LeftShift+0x40>
lea    (%rdi,%r10,1),%rcx
mov    %rcx,%rbx
sub    %r14,%rbx
cmp    %rcx,%rbx
ja     1140 <LeftShift+0x40>
lea    (%rdi,%rsi,1),%rcx
mov    %rcx,%rbx
sub    %r14,%rbx
cmp    %rcx,%rbx
ja     1140 <LeftShift+0x40>
cmp    $0x2,%r11
mov    $0x2,%ecx
cmovb  %r11,%rcx
lea    (%rcx,%r10,1),%r14
sub    %r11,%r14
add    %rdi,%r14
lea    (%rsi,%rdi,1),%rbx
add    $0x1,%rbx
cmp    %rbx,%r14
jae    1236 <LeftShift+0x136>
lea    (%r10,%rdi,1),%rbx
add    $0x1,%rbx
add    %rsi,%rcx
sub    %r11,%rcx
add    %rdi,%rcx
cmp    %rbx,%rcx
jb     1140 <LeftShift+0x40>
movd   %r12d,%xmm9
movd   %r15d,%xmm8
cmp    $0x10,%r9
jae    124e <LeftShift+0x14e>
xor    %r10d,%r10d
jmp    145e <LeftShift+0x35e>
mov    %r9,%r10
and    $0xfffffffffffffff0,%r10
lea    (%r11,%r8,1),%rsi
pxor   %xmm13,%xmm13
xorps  %xmm11,%xmm11
movss  %xmm9,%xmm11
movdqa 0xd90(%rip),%xmm10
xorps  %xmm12,%xmm12
movss  %xmm8,%xmm12
mov    %r10,%rcx
nopl   0x0(%rax)
mov    %esi,%r14d
movdqu -0xf(%rdi,%r14,1),%xmm0
movdqa %xmm0,%xmm1
punpcklbw %xmm13,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
punpckhbw %xmm13,%xmm0
pshufhw $0x1b,%xmm1,%xmm1
pshufd $0x4e,%xmm0,%xmm0
pshuflw $0x1b,%xmm0,%xmm0
pshufhw $0x1b,%xmm0,%xmm6
packuswb %xmm1,%xmm6
movdqa %xmm6,%xmm7
punpckhbw %xmm13,%xmm7
movdqa %xmm7,%xmm0
punpckhwd %xmm13,%xmm0
punpcklbw %xmm13,%xmm6
punpcklwd %xmm13,%xmm7
movdqa %xmm6,%xmm1
punpckhwd %xmm13,%xmm1
punpcklwd %xmm13,%xmm6
pslld  %xmm11,%xmm6
pslld  %xmm11,%xmm1
pslld  %xmm11,%xmm7
pslld  %xmm11,%xmm0
movdqa %xmm0,%xmm2
pand   %xmm10,%xmm2
movdqa %xmm7,%xmm3
pand   %xmm10,%xmm3
packuswb %xmm2,%xmm3
movdqa %xmm1,%xmm2
pand   %xmm10,%xmm2
movdqa %xmm6,%xmm4
pand   %xmm10,%xmm4
packuswb %xmm2,%xmm4
packuswb %xmm3,%xmm4
movdqa %xmm4,%xmm2
punpcklbw %xmm13,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
punpckhbw %xmm13,%xmm4
pshufd $0x4e,%xmm4,%xmm3
pshuflw $0x1b,%xmm3,%xmm3
pshufhw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm3,%xmm3
packuswb %xmm2,%xmm3
lea    -0x1(%rsi),%ebx
movdqu %xmm3,-0xf(%rdi,%r14,1)
movdqu -0xf(%rdi,%rbx,1),%xmm2
movdqa %xmm2,%xmm3
punpcklbw %xmm13,%xmm3
pshufd $0x4e,%xmm3,%xmm3
pshuflw $0x1b,%xmm3,%xmm3
punpckhbw %xmm13,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm3,%xmm4
pshufhw $0x1b,%xmm2,%xmm3
packuswb %xmm4,%xmm3
movdqa %xmm3,%xmm5
punpcklbw %xmm13,%xmm5
movdqa %xmm5,%xmm4
punpcklwd %xmm13,%xmm4
punpckhwd %xmm13,%xmm5
punpckhbw %xmm13,%xmm3
movdqa %xmm3,%xmm2
punpcklwd %xmm13,%xmm2
punpckhwd %xmm13,%xmm3
psrld  %xmm12,%xmm3
psrld  %xmm12,%xmm2
psrld  %xmm12,%xmm5
psrld  %xmm12,%xmm4
por    %xmm6,%xmm4
por    %xmm1,%xmm5
por    %xmm7,%xmm2
por    %xmm0,%xmm3
pand   %xmm10,%xmm3
pand   %xmm10,%xmm2
packuswb %xmm3,%xmm2
pand   %xmm10,%xmm5
pand   %xmm10,%xmm4
packuswb %xmm5,%xmm4
packuswb %xmm2,%xmm4
movdqa %xmm4,%xmm0
punpcklbw %xmm13,%xmm0
pshufd $0x4e,%xmm0,%xmm0
pshuflw $0x1b,%xmm0,%xmm0
pshufhw $0x1b,%xmm0,%xmm0
punpckhbw %xmm13,%xmm4
pshufd $0x4e,%xmm4,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm0,%xmm1
movdqu %xmm1,-0xf(%rdi,%r14,1)
add    $0xfffffffffffffff0,%rsi
add    $0xfffffffffffffff0,%rcx
jne    1280 <LeftShift+0x180>
cmp    %r10,%r9
je     1184 <LeftShift+0x84>
test   $0xc,%r9b
je     1561 <LeftShift+0x461>
xor    %r14d,%r14d
mov    %r11,%rsi
sub    $0x2,%rsi
cmovae %rsi,%r14
add    $0x1,%r14
mov    %r14,%r9
and    $0xfffffffffffffffc,%r9
mov    %r11,%rsi
sub    %r9,%rsi
add    %r8,%r11
sub    %r10,%r11
sub    %r9,%r10
movdqa 0xb72(%rip),%xmm0
pxor   %xmm1,%xmm1
pxor   %xmm2,%xmm2
movss  %xmm9,%xmm2
movdqa 0xb6d(%rip),%xmm3
movss  %xmm8,%xmm1
nopl   0x0(%rax,%rax,1)
mov    %r11d,%ebx
movd   -0x3(%rdi,%rbx,1),%xmm4
punpcklbw %xmm4,%xmm4
pshufd $0xc4,%xmm4,%xmm4
pshuflw $0xe7,%xmm4,%xmm4
pshufhw $0xc5,%xmm4,%xmm4
pand   %xmm0,%xmm4
pslld  %xmm2,%xmm4
movdqa %xmm4,%xmm5
pand   %xmm3,%xmm5
pshuflw $0xe8,%xmm5,%xmm5
pshufhw $0xe8,%xmm5,%xmm5
pshufd $0xe8,%xmm5,%xmm5
pshuflw $0x1b,%xmm5,%xmm5
packuswb %xmm5,%xmm5
movd   %xmm5,-0x3(%rdi,%rbx,1)
lea    -0x1(%r11),%ecx
movd   -0x3(%rdi,%rcx,1),%xmm5
punpcklbw %xmm5,%xmm5
pshufd $0xc4,%xmm5,%xmm5
pshuflw $0xe7,%xmm5,%xmm5
pshufhw $0xc5,%xmm5,%xmm5
pand   %xmm0,%xmm5
psrld  %xmm1,%xmm5
por    %xmm4,%xmm5
pand   %xmm3,%xmm5
pshuflw $0xe8,%xmm5,%xmm4
pshufhw $0xe8,%xmm4,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pshuflw $0x1b,%xmm4,%xmm4
packuswb %xmm4,%xmm4
movd   %xmm4,-0x3(%rdi,%rbx,1)
add    $0xfffffffffffffffc,%r11
add    $0x4,%r10
jne    14b0 <LeftShift+0x3b0>
cmp    %r9,%r14
jne    1143 <LeftShift+0x43>
jmp    1184 <LeftShift+0x84>
sub    %r10,%r11
jmp    1140 <LeftShift+0x40>

LLVM IR (-O0):
define void @LeftShift(i8* %0, i32 %1, i32 %2) {
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i8* %0, i8** %4
store i32 %1, i32* %5
store i32 %2, i32* %6
%8 = load i32, i32* %5
%9 = sub nsw i32 %8, 1
store i32 %9, i32* %7
br label %10
10: ; preds = %41, %3
%11 = load i32, i32* %7
%12 = icmp sgt i32 %11, 0
br i1 %12, label %13, label %44
13: ; preds = %10
%14 = load i32, i32* %6
%15 = load i8*, i8** %4
%16 = load i32, i32* %7
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds i8, i8* %15, i64 %17
%19 = load i8, i8* %18
%20 = zext i8 %19 to i32
%21 = shl i32 %20, %14
%22 = trunc i32 %21 to i8
store i8 %22, i8* %18
%23 = load i8*, i8** %4
%24 = load i32, i32* %7
%25 = sub nsw i32 %24, 1
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds i8, i8* %23, i64 %26
%28 = load i8, i8* %27
%29 = zext i8 %28 to i32
%30 = load i32, i32* %6
%31 = sub nsw i32 8, %30
%32 = ashr i32 %29, %31
%33 = load i8*, i8** %4
%34 = load i32, i32* %7
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds i8, i8* %33, i64 %35
%37 = load i8, i8* %36
%38 = zext i8 %37 to i32
%39 = or i32 %38, %32
%40 = trunc i32 %39 to i8
store i8 %40, i8* %36
br label %41
41: ; preds = %13
%42 = load i32, i32* %7
%43 = add nsw i32 %42, -1
store i32 %43, i32* %7
br label %10
44: ; preds = %10
%45 = load i32, i32* %6
%46 = load i8*, i8** %4
%47 = getelementptr inbounds i8, i8* %46, i64 0
%48 = load i8, i8* %47
%49 = zext i8 %48 to i32
%50 = shl i32 %49, %45
%51 = trunc i32 %50 to i8
store i8 %51, i8* %47
ret void
}

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