// #target: macos-x64

module foo;

bitstruct BitField : long
{
  int a : 0..2;
  int b : 3..8;
  int c : 9..18;
  bool d : 19;
  bool e : 20;
}

bitstruct BitField2 : char[3]
{
  int a : 0..2;
  int b : 3..8;
  int c : 9..18;
  bool d : 19;
  bool e : 20;
}

bitstruct BitField3 : char[3]
{
  int a : 1..3;
  int b : 4..9;
  int c : 10..19;
  bool d : 20;
  bool e : 21;
}

extern fn void printf(char*, ...);

fn void main()
{
    test1();
    test2();
    test3();
}
fn void test1()
{
    BitField xx = { 2, 3, 15, true, false };
    xx.a = 3;
    printf("%d, %d\n", xx.a, xx.b);
    xx.a -= 1;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b *= 2;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b ^= 4;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b |= 4;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b <<= 1;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b >>= 1;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b /= 2;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b %= 2;
    printf("%d, %d\n", xx.a, xx.b);
    xx.e = true;
    printf("%d\n", xx.e);
    xx.e = false;
    printf("%d\n", xx.e);
}

fn void test2()
{
    BitField2 xx = { 2, 3, 15, false, false };
    xx.a = 3;
    printf("%d, %d\n", xx.a, xx.b);
    xx.a -= 1;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b *= 2;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b ^= 4;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b |= 4;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b <<= 1;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b >>= 1;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b /= 2;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b %= 2;
    printf("%d, %d\n", xx.a, xx.b);
    printf("..%d\n", xx.e);
    xx.e = true;
    printf("%d\n", xx.e);
    xx.e = false;
    printf("%d\n", xx.e);
}

fn void test3()
{
    BitField3 xx = { 2, 3, 15, false, false };
    xx.a = 3;
    printf("%d, %d\n", xx.a, xx.b);
    xx.a -= 1;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b *= 2;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b ^= 4;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b |= 4;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b <<= 1;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b >>= 1;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b /= 2;
    printf("%d, %d\n", xx.a, xx.b);
    xx.b %= 2;
    printf("%d, %d\n", xx.a, xx.b);
    printf("..%d\n", xx.e);
    xx.e = true;
    printf("%d\n", xx.e);
    xx.e = false;
    printf("%d\n", xx.e);
}

/* #expect: foo.ll

define void @foo.test1() #0 {
entry:
  %xx = alloca i64, align 8
  store i64 531994, ptr %xx, align 8
  %0 = load i64, ptr %xx, align 8
  %1 = and i64 %0, -8
  %2 = or i64 %1, 3
  store i64 %2, ptr %xx, align 8
  %3 = load i64, ptr %xx, align 8
  %shl = shl i64 %3, 61
  %ashr = ashr i64 %shl, 61
  %trunc = trunc i64 %ashr to i32
  %4 = load i64, ptr %xx, align 8
  %shl1 = shl i64 %4, 55
  %ashr2 = ashr i64 %shl1, 58
  %trunc3 = trunc i64 %ashr2 to i32
  call void (ptr, ...) @printf(ptr @.str, i32 %trunc, i32 %trunc3)
  %5 = load i64, ptr %xx, align 8
  %shl4 = shl i64 %5, 61
  %ashr5 = ashr i64 %shl4, 61
  %trunc6 = trunc i64 %ashr5 to i32
  %sub = sub i32 %trunc6, 1
  %6 = load i64, ptr %xx, align 8
  %zext = zext i32 %sub to i64
  %7 = and i64 %zext, 7
  %8 = and i64 %6, -8
  %9 = or i64 %8, %7
  store i64 %9, ptr %xx, align 8
  %10 = load i64, ptr %xx, align 8
  %shl7 = shl i64 %10, 61
  %ashr8 = ashr i64 %shl7, 61
  %trunc9 = trunc i64 %ashr8 to i32
  %11 = load i64, ptr %xx, align 8
  %shl10 = shl i64 %11, 55
  %ashr11 = ashr i64 %shl10, 58
  %trunc12 = trunc i64 %ashr11 to i32
  call void (ptr, ...) @printf(ptr @.str.1, i32 %trunc9, i32 %trunc12)
  %12 = load i64, ptr %xx, align 8
  %shl13 = shl i64 %12, 55
  %ashr14 = ashr i64 %shl13, 58
  %trunc15 = trunc i64 %ashr14 to i32
  %mul = mul i32 %trunc15, 2
  %13 = load i64, ptr %xx, align 8
  %zext16 = zext i32 %mul to i64
  %shl17 = shl i64 %zext16, 3
  %14 = and i64 %shl17, 504
  %15 = and i64 %13, -505
  %16 = or i64 %15, %14
  store i64 %16, ptr %xx, align 8
  %17 = load i64, ptr %xx, align 8
  %shl18 = shl i64 %17, 61
  %ashr19 = ashr i64 %shl18, 61
  %trunc20 = trunc i64 %ashr19 to i32
  %18 = load i64, ptr %xx, align 8
  %shl21 = shl i64 %18, 55
  %ashr22 = ashr i64 %shl21, 58
  %trunc23 = trunc i64 %ashr22 to i32
  call void (ptr, ...) @printf(ptr @.str.2, i32 %trunc20, i32 %trunc23)
  %19 = load i64, ptr %xx, align 8
  %shl24 = shl i64 %19, 55
  %ashr25 = ashr i64 %shl24, 58
  %trunc26 = trunc i64 %ashr25 to i32
  %xor = xor i32 %trunc26, 4
  %20 = load i64, ptr %xx, align 8
  %zext27 = zext i32 %xor to i64
  %shl28 = shl i64 %zext27, 3
  %21 = and i64 %shl28, 504
  %22 = and i64 %20, -505
  %23 = or i64 %22, %21
  store i64 %23, ptr %xx, align 8
  %24 = load i64, ptr %xx, align 8
  %shl29 = shl i64 %24, 61
  %ashr30 = ashr i64 %shl29, 61
  %trunc31 = trunc i64 %ashr30 to i32
  %25 = load i64, ptr %xx, align 8
  %shl32 = shl i64 %25, 55
  %ashr33 = ashr i64 %shl32, 58
  %trunc34 = trunc i64 %ashr33 to i32
  call void (ptr, ...) @printf(ptr @.str.3, i32 %trunc31, i32 %trunc34)
  %26 = load i64, ptr %xx, align 8
  %shl35 = shl i64 %26, 55
  %ashr36 = ashr i64 %shl35, 58
  %trunc37 = trunc i64 %ashr36 to i32
  %or = or i32 %trunc37, 4
  %27 = load i64, ptr %xx, align 8
  %zext38 = zext i32 %or to i64
  %shl39 = shl i64 %zext38, 3
  %28 = and i64 %shl39, 504
  %29 = and i64 %27, -505
  %30 = or i64 %29, %28
  store i64 %30, ptr %xx, align 8
  %31 = load i64, ptr %xx, align 8
  %shl40 = shl i64 %31, 61
  %ashr41 = ashr i64 %shl40, 61
  %trunc42 = trunc i64 %ashr41 to i32
  %32 = load i64, ptr %xx, align 8
  %shl43 = shl i64 %32, 55
  %ashr44 = ashr i64 %shl43, 58
  %trunc45 = trunc i64 %ashr44 to i32
  call void (ptr, ...) @printf(ptr @.str.4, i32 %trunc42, i32 %trunc45)
  %33 = load i64, ptr %xx, align 8
  %shl46 = shl i64 %33, 55
  %ashr47 = ashr i64 %shl46, 58
  %trunc48 = trunc i64 %ashr47 to i32
  %shl49 = shl i32 %trunc48, 1
  %34 = freeze i32 %shl49
  %35 = load i64, ptr %xx, align 8
  %zext50 = zext i32 %34 to i64
  %shl51 = shl i64 %zext50, 3
  %36 = and i64 %shl51, 504
  %37 = and i64 %35, -505
  %38 = or i64 %37, %36
  store i64 %38, ptr %xx, align 8
  %39 = load i64, ptr %xx, align 8
  %shl52 = shl i64 %39, 61
  %ashr53 = ashr i64 %shl52, 61
  %trunc54 = trunc i64 %ashr53 to i32
  %40 = load i64, ptr %xx, align 8
  %shl55 = shl i64 %40, 55
  %ashr56 = ashr i64 %shl55, 58
  %trunc57 = trunc i64 %ashr56 to i32
  call void (ptr, ...) @printf(ptr @.str.5, i32 %trunc54, i32 %trunc57)
  %41 = load i64, ptr %xx, align 8
  %shl58 = shl i64 %41, 55
  %ashr59 = ashr i64 %shl58, 58
  %trunc60 = trunc i64 %ashr59 to i32
  %ashr61 = ashr i32 %trunc60, 1
  %42 = freeze i32 %ashr61
  %43 = load i64, ptr %xx, align 8
  %zext62 = zext i32 %42 to i64
  %shl63 = shl i64 %zext62, 3
  %44 = and i64 %shl63, 504
  %45 = and i64 %43, -505
  %46 = or i64 %45, %44
  store i64 %46, ptr %xx, align 8
  %47 = load i64, ptr %xx, align 8
  %shl64 = shl i64 %47, 61
  %ashr65 = ashr i64 %shl64, 61
  %trunc66 = trunc i64 %ashr65 to i32
  %48 = load i64, ptr %xx, align 8
  %shl67 = shl i64 %48, 55
  %ashr68 = ashr i64 %shl67, 58
  %trunc69 = trunc i64 %ashr68 to i32
  call void (ptr, ...) @printf(ptr @.str.6, i32 %trunc66, i32 %trunc69)
  %49 = load i64, ptr %xx, align 8
  %shl70 = shl i64 %49, 55
  %ashr71 = ashr i64 %shl70, 58
  %trunc72 = trunc i64 %ashr71 to i32
  %sdiv = sdiv i32 %trunc72, 2
  %50 = load i64, ptr %xx, align 8
  %zext73 = zext i32 %sdiv to i64
  %shl74 = shl i64 %zext73, 3
  %51 = and i64 %shl74, 504
  %52 = and i64 %50, -505
  %53 = or i64 %52, %51
  store i64 %53, ptr %xx, align 8
  %54 = load i64, ptr %xx, align 8
  %shl75 = shl i64 %54, 61
  %ashr76 = ashr i64 %shl75, 61
  %trunc77 = trunc i64 %ashr76 to i32
  %55 = load i64, ptr %xx, align 8
  %shl78 = shl i64 %55, 55
  %ashr79 = ashr i64 %shl78, 58
  %trunc80 = trunc i64 %ashr79 to i32
  call void (ptr, ...) @printf(ptr @.str.7, i32 %trunc77, i32 %trunc80)
  %56 = load i64, ptr %xx, align 8
  %shl81 = shl i64 %56, 55
  %ashr82 = ashr i64 %shl81, 58
  %trunc83 = trunc i64 %ashr82 to i32
  %smod = srem i32 %trunc83, 2
  %57 = load i64, ptr %xx, align 8
  %zext84 = zext i32 %smod to i64
  %shl85 = shl i64 %zext84, 3
  %58 = and i64 %shl85, 504
  %59 = and i64 %57, -505
  %60 = or i64 %59, %58
  store i64 %60, ptr %xx, align 8
  %61 = load i64, ptr %xx, align 8
  %shl86 = shl i64 %61, 61
  %ashr87 = ashr i64 %shl86, 61
  %trunc88 = trunc i64 %ashr87 to i32
  %62 = load i64, ptr %xx, align 8
  %shl89 = shl i64 %62, 55
  %ashr90 = ashr i64 %shl89, 58
  %trunc91 = trunc i64 %ashr90 to i32
  call void (ptr, ...) @printf(ptr @.str.8, i32 %trunc88, i32 %trunc91)
  %63 = load i64, ptr %xx, align 8
  %64 = and i64 %63, -1048577
  %65 = or i64 %64, 1048576
  store i64 %65, ptr %xx, align 8
  %66 = load i64, ptr %xx, align 8
  %lshrl = lshr i64 %66, 20
  %67 = and i64 1, %lshrl
  %trunc92 = trunc i64 %67 to i8
  %68 = trunc i8 %trunc92 to i1
  %zext93 = zext i1 %68 to i32
  call void (ptr, ...) @printf(ptr @.str.9, i32 %zext93)
  %69 = load i64, ptr %xx, align 8
  %70 = and i64 %69, -1048577
  store i64 %70, ptr %xx, align 8
  %71 = load i64, ptr %xx, align 8
  %lshrl94 = lshr i64 %71, 20
  %72 = and i64 1, %lshrl94
  %trunc95 = trunc i64 %72 to i8
  %73 = trunc i8 %trunc95 to i1
  %zext96 = zext i1 %73 to i32
  call void (ptr, ...) @printf(ptr @.str.10, i32 %zext96)
  ret void
}

; Function Attrs:
define void @foo.test2() #0 {
entry:
  %xx = alloca [3 x i8], align 1
  store [3 x i8] c"\1A\1E\00", ptr %xx, align 1
  %0 = load i8, ptr %xx, align 1
  %1 = and i8 %0, -8
  %2 = or i8 %1, 3
  store i8 %1, ptr %xx, align 1
  %3 = load i8, ptr %xx, align 1
  %zext = zext i8 %3 to i32
  %shl = shl i32 %zext, 29
  %ashr = ashr i32 %shl, 29
  %4 = load i8, ptr %xx, align 1
  %zext1 = zext i8 %4 to i32
  %lshrl = lshr i32 %zext1, 3
  %ptradd = getelementptr inbounds i8, ptr %xx, i64 1
  %5 = load i8, ptr %ptradd, align 1
  %zext2 = zext i8 %5 to i32
  %shl3 = shl i32 %zext2, 5
  %6 = or i32 %shl3, %lshrl
  %shl4 = shl i32 %6, 26
  %ashr5 = ashr i32 %shl4, 26
  call void (ptr, ...) @printf(ptr @.str.11, i32 %ashr, i32 %ashr5)
  %7 = load i8, ptr %xx, align 1
  %zext6 = zext i8 %7 to i32
  %shl7 = shl i32 %zext6, 29
  %ashr8 = ashr i32 %shl7, 29
  %sub = sub i32 %ashr8, 1
  %trunc = trunc i32 %sub to i8
  %8 = and i8 %trunc, 7
  %9 = load i8, ptr %xx, align 1
  %10 = and i8 %9, -8
  %11 = or i8 %10, %8
  store i8 %10, ptr %xx, align 1
  %12 = load i8, ptr %xx, align 1
  %zext9 = zext i8 %12 to i32
  %shl10 = shl i32 %zext9, 29
  %ashr11 = ashr i32 %shl10, 29
  %13 = load i8, ptr %xx, align 1
  %zext12 = zext i8 %13 to i32
  %lshrl13 = lshr i32 %zext12, 3
  %ptradd14 = getelementptr inbounds i8, ptr %xx, i64 1
  %14 = load i8, ptr %ptradd14, align 1
  %zext15 = zext i8 %14 to i32
  %shl16 = shl i32 %zext15, 5
  %15 = or i32 %shl16, %lshrl13
  %shl17 = shl i32 %15, 26
  %ashr18 = ashr i32 %shl17, 26
  call void (ptr, ...) @printf(ptr @.str.12, i32 %ashr11, i32 %ashr18)
  %16 = load i8, ptr %xx, align 1
  %zext19 = zext i8 %16 to i32
  %lshrl20 = lshr i32 %zext19, 3
  %ptradd21 = getelementptr inbounds i8, ptr %xx, i64 1
  %17 = load i8, ptr %ptradd21, align 1
  %zext22 = zext i8 %17 to i32
  %shl23 = shl i32 %zext22, 5
  %18 = or i32 %shl23, %lshrl20
  %shl24 = shl i32 %18, 26
  %ashr25 = ashr i32 %shl24, 26
  %mul = mul i32 %ashr25, 2
  %shl26 = shl i32 %mul, 3
  %trunc27 = trunc i32 %shl26 to i8
  %19 = load i8, ptr %xx, align 1
  %20 = and i8 %19, 7
  %21 = or i8 %20, %trunc27
  store i8 %21, ptr %xx, align 1
  %lshrl28 = lshr i32 %mul, 5
  %ptradd29 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc30 = trunc i32 %lshrl28 to i8
  %22 = and i8 %trunc30, 1
  %23 = load i8, ptr %ptradd29, align 1
  %24 = and i8 %23, -2
  %25 = or i8 %24, %22
  store i8 %24, ptr %ptradd29, align 1
  %26 = load i8, ptr %xx, align 1
  %zext31 = zext i8 %26 to i32
  %shl32 = shl i32 %zext31, 29
  %ashr33 = ashr i32 %shl32, 29
  %27 = load i8, ptr %xx, align 1
  %zext34 = zext i8 %27 to i32
  %lshrl35 = lshr i32 %zext34, 3
  %ptradd36 = getelementptr inbounds i8, ptr %xx, i64 1
  %28 = load i8, ptr %ptradd36, align 1
  %zext37 = zext i8 %28 to i32
  %shl38 = shl i32 %zext37, 5
  %29 = or i32 %shl38, %lshrl35
  %shl39 = shl i32 %29, 26
  %ashr40 = ashr i32 %shl39, 26
  call void (ptr, ...) @printf(ptr @.str.13, i32 %ashr33, i32 %ashr40)
  %30 = load i8, ptr %xx, align 1
  %zext41 = zext i8 %30 to i32
  %lshrl42 = lshr i32 %zext41, 3
  %ptradd43 = getelementptr inbounds i8, ptr %xx, i64 1
  %31 = load i8, ptr %ptradd43, align 1
  %zext44 = zext i8 %31 to i32
  %shl45 = shl i32 %zext44, 5
  %32 = or i32 %shl45, %lshrl42
  %shl46 = shl i32 %32, 26
  %ashr47 = ashr i32 %shl46, 26
  %xor = xor i32 %ashr47, 4
  %shl48 = shl i32 %xor, 3
  %trunc49 = trunc i32 %shl48 to i8
  %33 = load i8, ptr %xx, align 1
  %34 = and i8 %33, 7
  %35 = or i8 %34, %trunc49
  store i8 %35, ptr %xx, align 1
  %lshrl50 = lshr i32 %xor, 5
  %ptradd51 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc52 = trunc i32 %lshrl50 to i8
  %36 = and i8 %trunc52, 1
  %37 = load i8, ptr %ptradd51, align 1
  %38 = and i8 %37, -2
  %39 = or i8 %38, %36
  store i8 %38, ptr %ptradd51, align 1
  %40 = load i8, ptr %xx, align 1
  %zext53 = zext i8 %40 to i32
  %shl54 = shl i32 %zext53, 29
  %ashr55 = ashr i32 %shl54, 29
  %41 = load i8, ptr %xx, align 1
  %zext56 = zext i8 %41 to i32
  %lshrl57 = lshr i32 %zext56, 3
  %ptradd58 = getelementptr inbounds i8, ptr %xx, i64 1
  %42 = load i8, ptr %ptradd58, align 1
  %zext59 = zext i8 %42 to i32
  %shl60 = shl i32 %zext59, 5
  %43 = or i32 %shl60, %lshrl57
  %shl61 = shl i32 %43, 26
  %ashr62 = ashr i32 %shl61, 26
  call void (ptr, ...) @printf(ptr @.str.14, i32 %ashr55, i32 %ashr62)
  %44 = load i8, ptr %xx, align 1
  %zext63 = zext i8 %44 to i32
  %lshrl64 = lshr i32 %zext63, 3
  %ptradd65 = getelementptr inbounds i8, ptr %xx, i64 1
  %45 = load i8, ptr %ptradd65, align 1
  %zext66 = zext i8 %45 to i32
  %shl67 = shl i32 %zext66, 5
  %46 = or i32 %shl67, %lshrl64
  %shl68 = shl i32 %46, 26
  %ashr69 = ashr i32 %shl68, 26
  %or = or i32 %ashr69, 4
  %shl70 = shl i32 %or, 3
  %trunc71 = trunc i32 %shl70 to i8
  %47 = load i8, ptr %xx, align 1
  %48 = and i8 %47, 7
  %49 = or i8 %48, %trunc71
  store i8 %49, ptr %xx, align 1
  %lshrl72 = lshr i32 %or, 5
  %ptradd73 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc74 = trunc i32 %lshrl72 to i8
  %50 = and i8 %trunc74, 1
  %51 = load i8, ptr %ptradd73, align 1
  %52 = and i8 %51, -2
  %53 = or i8 %52, %50
  store i8 %52, ptr %ptradd73, align 1
  %54 = load i8, ptr %xx, align 1
  %zext75 = zext i8 %54 to i32
  %shl76 = shl i32 %zext75, 29
  %ashr77 = ashr i32 %shl76, 29
  %55 = load i8, ptr %xx, align 1
  %zext78 = zext i8 %55 to i32
  %lshrl79 = lshr i32 %zext78, 3
  %ptradd80 = getelementptr inbounds i8, ptr %xx, i64 1
  %56 = load i8, ptr %ptradd80, align 1
  %zext81 = zext i8 %56 to i32
  %shl82 = shl i32 %zext81, 5
  %57 = or i32 %shl82, %lshrl79
  %shl83 = shl i32 %57, 26
  %ashr84 = ashr i32 %shl83, 26
  call void (ptr, ...) @printf(ptr @.str.15, i32 %ashr77, i32 %ashr84)
  %58 = load i8, ptr %xx, align 1
  %zext85 = zext i8 %58 to i32
  %lshrl86 = lshr i32 %zext85, 3
  %ptradd87 = getelementptr inbounds i8, ptr %xx, i64 1
  %59 = load i8, ptr %ptradd87, align 1
  %zext88 = zext i8 %59 to i32
  %shl89 = shl i32 %zext88, 5
  %60 = or i32 %shl89, %lshrl86
  %shl90 = shl i32 %60, 26
  %ashr91 = ashr i32 %shl90, 26
  %shl92 = shl i32 %ashr91, 1
  %61 = freeze i32 %shl92
  %shl93 = shl i32 %61, 3
  %trunc94 = trunc i32 %shl93 to i8
  %62 = load i8, ptr %xx, align 1
  %63 = and i8 %62, 7
  %64 = or i8 %63, %trunc94
  store i8 %64, ptr %xx, align 1
  %lshrl95 = lshr i32 %61, 5
  %ptradd96 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc97 = trunc i32 %lshrl95 to i8
  %65 = and i8 %trunc97, 1
  %66 = load i8, ptr %ptradd96, align 1
  %67 = and i8 %66, -2
  %68 = or i8 %67, %65
  store i8 %67, ptr %ptradd96, align 1
  %69 = load i8, ptr %xx, align 1
  %zext98 = zext i8 %69 to i32
  %shl99 = shl i32 %zext98, 29
  %ashr100 = ashr i32 %shl99, 29
  %70 = load i8, ptr %xx, align 1
  %zext101 = zext i8 %70 to i32
  %lshrl102 = lshr i32 %zext101, 3
  %ptradd103 = getelementptr inbounds i8, ptr %xx, i64 1
  %71 = load i8, ptr %ptradd103, align 1
  %zext104 = zext i8 %71 to i32
  %shl105 = shl i32 %zext104, 5
  %72 = or i32 %shl105, %lshrl102
  %shl106 = shl i32 %72, 26
  %ashr107 = ashr i32 %shl106, 26
  call void (ptr, ...) @printf(ptr @.str.16, i32 %ashr100, i32 %ashr107)
  %73 = load i8, ptr %xx, align 1
  %zext108 = zext i8 %73 to i32
  %lshrl109 = lshr i32 %zext108, 3
  %ptradd110 = getelementptr inbounds i8, ptr %xx, i64 1
  %74 = load i8, ptr %ptradd110, align 1
  %zext111 = zext i8 %74 to i32
  %shl112 = shl i32 %zext111, 5
  %75 = or i32 %shl112, %lshrl109
  %shl113 = shl i32 %75, 26
  %ashr114 = ashr i32 %shl113, 26
  %ashr115 = ashr i32 %ashr114, 1
  %76 = freeze i32 %ashr115
  %shl116 = shl i32 %76, 3
  %trunc117 = trunc i32 %shl116 to i8
  %77 = load i8, ptr %xx, align 1
  %78 = and i8 %77, 7
  %79 = or i8 %78, %trunc117
  store i8 %79, ptr %xx, align 1
  %lshrl118 = lshr i32 %76, 5
  %ptradd119 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc120 = trunc i32 %lshrl118 to i8
  %80 = and i8 %trunc120, 1
  %81 = load i8, ptr %ptradd119, align 1
  %82 = and i8 %81, -2
  %83 = or i8 %82, %80
  store i8 %82, ptr %ptradd119, align 1
  %84 = load i8, ptr %xx, align 1
  %zext121 = zext i8 %84 to i32
  %shl122 = shl i32 %zext121, 29
  %ashr123 = ashr i32 %shl122, 29
  %85 = load i8, ptr %xx, align 1
  %zext124 = zext i8 %85 to i32
  %lshrl125 = lshr i32 %zext124, 3
  %ptradd126 = getelementptr inbounds i8, ptr %xx, i64 1
  %86 = load i8, ptr %ptradd126, align 1
  %zext127 = zext i8 %86 to i32
  %shl128 = shl i32 %zext127, 5
  %87 = or i32 %shl128, %lshrl125
  %shl129 = shl i32 %87, 26
  %ashr130 = ashr i32 %shl129, 26
  call void (ptr, ...) @printf(ptr @.str.17, i32 %ashr123, i32 %ashr130)
  %88 = load i8, ptr %xx, align 1
  %zext131 = zext i8 %88 to i32
  %lshrl132 = lshr i32 %zext131, 3
  %ptradd133 = getelementptr inbounds i8, ptr %xx, i64 1
  %89 = load i8, ptr %ptradd133, align 1
  %zext134 = zext i8 %89 to i32
  %shl135 = shl i32 %zext134, 5
  %90 = or i32 %shl135, %lshrl132
  %shl136 = shl i32 %90, 26
  %ashr137 = ashr i32 %shl136, 26
  %sdiv = sdiv i32 %ashr137, 2
  %shl138 = shl i32 %sdiv, 3
  %trunc139 = trunc i32 %shl138 to i8
  %91 = load i8, ptr %xx, align 1
  %92 = and i8 %91, 7
  %93 = or i8 %92, %trunc139
  store i8 %93, ptr %xx, align 1
  %lshrl140 = lshr i32 %sdiv, 5
  %ptradd141 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc142 = trunc i32 %lshrl140 to i8
  %94 = and i8 %trunc142, 1
  %95 = load i8, ptr %ptradd141, align 1
  %96 = and i8 %95, -2
  %97 = or i8 %96, %94
  store i8 %96, ptr %ptradd141, align 1
  %98 = load i8, ptr %xx, align 1
  %zext143 = zext i8 %98 to i32
  %shl144 = shl i32 %zext143, 29
  %ashr145 = ashr i32 %shl144, 29
  %99 = load i8, ptr %xx, align 1
  %zext146 = zext i8 %99 to i32
  %lshrl147 = lshr i32 %zext146, 3
  %ptradd148 = getelementptr inbounds i8, ptr %xx, i64 1
  %100 = load i8, ptr %ptradd148, align 1
  %zext149 = zext i8 %100 to i32
  %shl150 = shl i32 %zext149, 5
  %101 = or i32 %shl150, %lshrl147
  %shl151 = shl i32 %101, 26
  %ashr152 = ashr i32 %shl151, 26
  call void (ptr, ...) @printf(ptr @.str.18, i32 %ashr145, i32 %ashr152)
  %102 = load i8, ptr %xx, align 1
  %zext153 = zext i8 %102 to i32
  %lshrl154 = lshr i32 %zext153, 3
  %ptradd155 = getelementptr inbounds i8, ptr %xx, i64 1
  %103 = load i8, ptr %ptradd155, align 1
  %zext156 = zext i8 %103 to i32
  %shl157 = shl i32 %zext156, 5
  %104 = or i32 %shl157, %lshrl154
  %shl158 = shl i32 %104, 26
  %ashr159 = ashr i32 %shl158, 26
  %smod = srem i32 %ashr159, 2
  %shl160 = shl i32 %smod, 3
  %trunc161 = trunc i32 %shl160 to i8
  %105 = load i8, ptr %xx, align 1
  %106 = and i8 %105, 7
  %107 = or i8 %106, %trunc161
  store i8 %107, ptr %xx, align 1
  %lshrl162 = lshr i32 %smod, 5
  %ptradd163 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc164 = trunc i32 %lshrl162 to i8
  %108 = and i8 %trunc164, 1
  %109 = load i8, ptr %ptradd163, align 1
  %110 = and i8 %109, -2
  %111 = or i8 %110, %108
  store i8 %110, ptr %ptradd163, align 1
  %112 = load i8, ptr %xx, align 1
  %zext165 = zext i8 %112 to i32
  %shl166 = shl i32 %zext165, 29
  %ashr167 = ashr i32 %shl166, 29
  %113 = load i8, ptr %xx, align 1
  %zext168 = zext i8 %113 to i32
  %lshrl169 = lshr i32 %zext168, 3
  %ptradd170 = getelementptr inbounds i8, ptr %xx, i64 1
  %114 = load i8, ptr %ptradd170, align 1
  %zext171 = zext i8 %114 to i32
  %shl172 = shl i32 %zext171, 5
  %115 = or i32 %shl172, %lshrl169
  %shl173 = shl i32 %115, 26
  %ashr174 = ashr i32 %shl173, 26
  call void (ptr, ...) @printf(ptr @.str.19, i32 %ashr167, i32 %ashr174)
  %ptradd175 = getelementptr inbounds i8, ptr %xx, i64 2
  %116 = load i8, ptr %ptradd175, align 1
  %lshrl176 = lshr i8 %116, 4
  %117 = trunc i8 %lshrl176 to i1
  %zext177 = zext i1 %117 to i32
  call void (ptr, ...) @printf(ptr @.str.20, i32 %zext177)
  %ptradd178 = getelementptr inbounds i8, ptr %xx, i64 2
  %118 = load i8, ptr %ptradd178, align 1
  %119 = and i8 %118, -17
  %120 = or i8 %119, 16
  store i8 %120, ptr %ptradd178, align 1
  %ptradd179 = getelementptr inbounds i8, ptr %xx, i64 2
  %121 = load i8, ptr %ptradd179, align 1
  %lshrl180 = lshr i8 %121, 4
  %122 = trunc i8 %lshrl180 to i1
  %zext181 = zext i1 %122 to i32
  call void (ptr, ...) @printf(ptr @.str.21, i32 %zext181)
  %ptradd182 = getelementptr inbounds i8, ptr %xx, i64 2
  %123 = load i8, ptr %ptradd182, align 1
  %124 = and i8 %123, -17
  store i8 %124, ptr %ptradd182, align 1
  %ptradd183 = getelementptr inbounds i8, ptr %xx, i64 2
  %125 = load i8, ptr %ptradd183, align 1
  %lshrl184 = lshr i8 %125, 4
  %126 = trunc i8 %lshrl184 to i1
  %zext185 = zext i1 %126 to i32
  call void (ptr, ...) @printf(ptr @.str.22, i32 %zext185)
  ret void
}

; Function Attrs:
define void @foo.test3() #0 {
entry:
  %xx = alloca [3 x i8], align 1
  store [3 x i8] c"4<\00", ptr %xx, align 1
  %0 = load i8, ptr %xx, align 1
  %1 = and i8 %0, -15
  %2 = or i8 %1, 6
  store i8 %2, ptr %xx, align 1
  %3 = load i8, ptr %xx, align 1
  %zext = zext i8 %3 to i32
  %lshrl = lshr i32 %zext, 1
  %shl = shl i32 %lshrl, 29
  %ashr = ashr i32 %shl, 29
  %4 = load i8, ptr %xx, align 1
  %zext1 = zext i8 %4 to i32
  %lshrl2 = lshr i32 %zext1, 4
  %ptradd = getelementptr inbounds i8, ptr %xx, i64 1
  %5 = load i8, ptr %ptradd, align 1
  %zext3 = zext i8 %5 to i32
  %shl4 = shl i32 %zext3, 4
  %6 = or i32 %shl4, %lshrl2
  %shl5 = shl i32 %6, 26
  %ashr6 = ashr i32 %shl5, 26
  call void (ptr, ...) @printf(ptr @.str.23, i32 %ashr, i32 %ashr6)
  %7 = load i8, ptr %xx, align 1
  %zext7 = zext i8 %7 to i32
  %lshrl8 = lshr i32 %zext7, 1
  %shl9 = shl i32 %lshrl8, 29
  %ashr10 = ashr i32 %shl9, 29
  %sub = sub i32 %ashr10, 1
  %shl11 = shl i32 %sub, 1
  %trunc = trunc i32 %shl11 to i8
  %8 = and i8 %trunc, 15
  %9 = load i8, ptr %xx, align 1
  %10 = and i8 %9, -15
  %11 = or i8 %10, %8
  store i8 %11, ptr %xx, align 1
  %lshrl12 = lshr i32 %sub, 7
  %12 = load i8, ptr %xx, align 1
  %zext13 = zext i8 %12 to i32
  %lshrl14 = lshr i32 %zext13, 1
  %shl15 = shl i32 %lshrl14, 29
  %ashr16 = ashr i32 %shl15, 29
  %13 = load i8, ptr %xx, align 1
  %zext17 = zext i8 %13 to i32
  %lshrl18 = lshr i32 %zext17, 4
  %ptradd19 = getelementptr inbounds i8, ptr %xx, i64 1
  %14 = load i8, ptr %ptradd19, align 1
  %zext20 = zext i8 %14 to i32
  %shl21 = shl i32 %zext20, 4
  %15 = or i32 %shl21, %lshrl18
  %shl22 = shl i32 %15, 26
  %ashr23 = ashr i32 %shl22, 26
  call void (ptr, ...) @printf(ptr @.str.24, i32 %ashr16, i32 %ashr23)
  %16 = load i8, ptr %xx, align 1
  %zext24 = zext i8 %16 to i32
  %lshrl25 = lshr i32 %zext24, 4
  %ptradd26 = getelementptr inbounds i8, ptr %xx, i64 1
  %17 = load i8, ptr %ptradd26, align 1
  %zext27 = zext i8 %17 to i32
  %shl28 = shl i32 %zext27, 4
  %18 = or i32 %shl28, %lshrl25
  %shl29 = shl i32 %18, 26
  %ashr30 = ashr i32 %shl29, 26
  %mul = mul i32 %ashr30, 2
  %shl31 = shl i32 %mul, 4
  %trunc32 = trunc i32 %shl31 to i8
  %19 = load i8, ptr %xx, align 1
  %20 = and i8 %19, 15
  %21 = or i8 %20, %trunc32
  store i8 %21, ptr %xx, align 1
  %lshrl33 = lshr i32 %mul, 4
  %ptradd34 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc35 = trunc i32 %lshrl33 to i8
  %22 = and i8 %trunc35, 3
  %23 = load i8, ptr %ptradd34, align 1
  %24 = and i8 %23, -4
  %25 = or i8 %24, %22
  store i8 %24, ptr %ptradd34, align 1
  %26 = load i8, ptr %xx, align 1
  %zext36 = zext i8 %26 to i32
  %lshrl37 = lshr i32 %zext36, 1
  %shl38 = shl i32 %lshrl37, 29
  %ashr39 = ashr i32 %shl38, 29
  %27 = load i8, ptr %xx, align 1
  %zext40 = zext i8 %27 to i32
  %lshrl41 = lshr i32 %zext40, 4
  %ptradd42 = getelementptr inbounds i8, ptr %xx, i64 1
  %28 = load i8, ptr %ptradd42, align 1
  %zext43 = zext i8 %28 to i32
  %shl44 = shl i32 %zext43, 4
  %29 = or i32 %shl44, %lshrl41
  %shl45 = shl i32 %29, 26
  %ashr46 = ashr i32 %shl45, 26
  call void (ptr, ...) @printf(ptr @.str.25, i32 %ashr39, i32 %ashr46)
  %30 = load i8, ptr %xx, align 1
  %zext47 = zext i8 %30 to i32
  %lshrl48 = lshr i32 %zext47, 4
  %ptradd49 = getelementptr inbounds i8, ptr %xx, i64 1
  %31 = load i8, ptr %ptradd49, align 1
  %zext50 = zext i8 %31 to i32
  %shl51 = shl i32 %zext50, 4
  %32 = or i32 %shl51, %lshrl48
  %shl52 = shl i32 %32, 26
  %ashr53 = ashr i32 %shl52, 26
  %xor = xor i32 %ashr53, 4
  %shl54 = shl i32 %xor, 4
  %trunc55 = trunc i32 %shl54 to i8
  %33 = load i8, ptr %xx, align 1
  %34 = and i8 %33, 15
  %35 = or i8 %34, %trunc55
  store i8 %35, ptr %xx, align 1
  %lshrl56 = lshr i32 %xor, 4
  %ptradd57 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc58 = trunc i32 %lshrl56 to i8
  %36 = and i8 %trunc58, 3
  %37 = load i8, ptr %ptradd57, align 1
  %38 = and i8 %37, -4
  %39 = or i8 %38, %36
  store i8 %38, ptr %ptradd57, align 1
  %40 = load i8, ptr %xx, align 1
  %zext59 = zext i8 %40 to i32
  %lshrl60 = lshr i32 %zext59, 1
  %shl61 = shl i32 %lshrl60, 29
  %ashr62 = ashr i32 %shl61, 29
  %41 = load i8, ptr %xx, align 1
  %zext63 = zext i8 %41 to i32
  %lshrl64 = lshr i32 %zext63, 4
  %ptradd65 = getelementptr inbounds i8, ptr %xx, i64 1
  %42 = load i8, ptr %ptradd65, align 1
  %zext66 = zext i8 %42 to i32
  %shl67 = shl i32 %zext66, 4
  %43 = or i32 %shl67, %lshrl64
  %shl68 = shl i32 %43, 26
  %ashr69 = ashr i32 %shl68, 26
  call void (ptr, ...) @printf(ptr @.str.26, i32 %ashr62, i32 %ashr69)
  %44 = load i8, ptr %xx, align 1
  %zext70 = zext i8 %44 to i32
  %lshrl71 = lshr i32 %zext70, 4
  %ptradd72 = getelementptr inbounds i8, ptr %xx, i64 1
  %45 = load i8, ptr %ptradd72, align 1
  %zext73 = zext i8 %45 to i32
  %shl74 = shl i32 %zext73, 4
  %46 = or i32 %shl74, %lshrl71
  %shl75 = shl i32 %46, 26
  %ashr76 = ashr i32 %shl75, 26
  %or = or i32 %ashr76, 4
  %shl77 = shl i32 %or, 4
  %trunc78 = trunc i32 %shl77 to i8
  %47 = load i8, ptr %xx, align 1
  %48 = and i8 %47, 15
  %49 = or i8 %48, %trunc78
  store i8 %49, ptr %xx, align 1
  %lshrl79 = lshr i32 %or, 4
  %ptradd80 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc81 = trunc i32 %lshrl79 to i8
  %50 = and i8 %trunc81, 3
  %51 = load i8, ptr %ptradd80, align 1
  %52 = and i8 %51, -4
  %53 = or i8 %52, %50
  store i8 %52, ptr %ptradd80, align 1
  %54 = load i8, ptr %xx, align 1
  %zext82 = zext i8 %54 to i32
  %lshrl83 = lshr i32 %zext82, 1
  %shl84 = shl i32 %lshrl83, 29
  %ashr85 = ashr i32 %shl84, 29
  %55 = load i8, ptr %xx, align 1
  %zext86 = zext i8 %55 to i32
  %lshrl87 = lshr i32 %zext86, 4
  %ptradd88 = getelementptr inbounds i8, ptr %xx, i64 1
  %56 = load i8, ptr %ptradd88, align 1
  %zext89 = zext i8 %56 to i32
  %shl90 = shl i32 %zext89, 4
  %57 = or i32 %shl90, %lshrl87
  %shl91 = shl i32 %57, 26
  %ashr92 = ashr i32 %shl91, 26
  call void (ptr, ...) @printf(ptr @.str.27, i32 %ashr85, i32 %ashr92)
  %58 = load i8, ptr %xx, align 1
  %zext93 = zext i8 %58 to i32
  %lshrl94 = lshr i32 %zext93, 4
  %ptradd95 = getelementptr inbounds i8, ptr %xx, i64 1
  %59 = load i8, ptr %ptradd95, align 1
  %zext96 = zext i8 %59 to i32
  %shl97 = shl i32 %zext96, 4
  %60 = or i32 %shl97, %lshrl94
  %shl98 = shl i32 %60, 26
  %ashr99 = ashr i32 %shl98, 26
  %shl100 = shl i32 %ashr99, 1
  %61 = freeze i32 %shl100
  %shl101 = shl i32 %61, 4
  %trunc102 = trunc i32 %shl101 to i8
  %62 = load i8, ptr %xx, align 1
  %63 = and i8 %62, 15
  %64 = or i8 %63, %trunc102
  store i8 %64, ptr %xx, align 1
  %lshrl103 = lshr i32 %61, 4
  %ptradd104 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc105 = trunc i32 %lshrl103 to i8
  %65 = and i8 %trunc105, 3
  %66 = load i8, ptr %ptradd104, align 1
  %67 = and i8 %66, -4
  %68 = or i8 %67, %65
  store i8 %67, ptr %ptradd104, align 1
  %69 = load i8, ptr %xx, align 1
  %zext106 = zext i8 %69 to i32
  %lshrl107 = lshr i32 %zext106, 1
  %shl108 = shl i32 %lshrl107, 29
  %ashr109 = ashr i32 %shl108, 29
  %70 = load i8, ptr %xx, align 1
  %zext110 = zext i8 %70 to i32
  %lshrl111 = lshr i32 %zext110, 4
  %ptradd112 = getelementptr inbounds i8, ptr %xx, i64 1
  %71 = load i8, ptr %ptradd112, align 1
  %zext113 = zext i8 %71 to i32
  %shl114 = shl i32 %zext113, 4
  %72 = or i32 %shl114, %lshrl111
  %shl115 = shl i32 %72, 26
  %ashr116 = ashr i32 %shl115, 26
  call void (ptr, ...) @printf(ptr @.str.28, i32 %ashr109, i32 %ashr116)
  %73 = load i8, ptr %xx, align 1
  %zext117 = zext i8 %73 to i32
  %lshrl118 = lshr i32 %zext117, 4
  %ptradd119 = getelementptr inbounds i8, ptr %xx, i64 1
  %74 = load i8, ptr %ptradd119, align 1
  %zext120 = zext i8 %74 to i32
  %shl121 = shl i32 %zext120, 4
  %75 = or i32 %shl121, %lshrl118
  %shl122 = shl i32 %75, 26
  %ashr123 = ashr i32 %shl122, 26
  %ashr124 = ashr i32 %ashr123, 1
  %76 = freeze i32 %ashr124
  %shl125 = shl i32 %76, 4
  %trunc126 = trunc i32 %shl125 to i8
  %77 = load i8, ptr %xx, align 1
  %78 = and i8 %77, 15
  %79 = or i8 %78, %trunc126
  store i8 %79, ptr %xx, align 1
  %lshrl127 = lshr i32 %76, 4
  %ptradd128 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc129 = trunc i32 %lshrl127 to i8
  %80 = and i8 %trunc129, 3
  %81 = load i8, ptr %ptradd128, align 1
  %82 = and i8 %81, -4
  %83 = or i8 %82, %80
  store i8 %82, ptr %ptradd128, align 1
  %84 = load i8, ptr %xx, align 1
  %zext130 = zext i8 %84 to i32
  %lshrl131 = lshr i32 %zext130, 1
  %shl132 = shl i32 %lshrl131, 29
  %ashr133 = ashr i32 %shl132, 29
  %85 = load i8, ptr %xx, align 1
  %zext134 = zext i8 %85 to i32
  %lshrl135 = lshr i32 %zext134, 4
  %ptradd136 = getelementptr inbounds i8, ptr %xx, i64 1
  %86 = load i8, ptr %ptradd136, align 1
  %zext137 = zext i8 %86 to i32
  %shl138 = shl i32 %zext137, 4
  %87 = or i32 %shl138, %lshrl135
  %shl139 = shl i32 %87, 26
  %ashr140 = ashr i32 %shl139, 26
  call void (ptr, ...) @printf(ptr @.str.29, i32 %ashr133, i32 %ashr140)
  %88 = load i8, ptr %xx, align 1
  %zext141 = zext i8 %88 to i32
  %lshrl142 = lshr i32 %zext141, 4
  %ptradd143 = getelementptr inbounds i8, ptr %xx, i64 1
  %89 = load i8, ptr %ptradd143, align 1
  %zext144 = zext i8 %89 to i32
  %shl145 = shl i32 %zext144, 4
  %90 = or i32 %shl145, %lshrl142
  %shl146 = shl i32 %90, 26
  %ashr147 = ashr i32 %shl146, 26
  %sdiv = sdiv i32 %ashr147, 2
  %shl148 = shl i32 %sdiv, 4
  %trunc149 = trunc i32 %shl148 to i8
  %91 = load i8, ptr %xx, align 1
  %92 = and i8 %91, 15
  %93 = or i8 %92, %trunc149
  store i8 %93, ptr %xx, align 1
  %lshrl150 = lshr i32 %sdiv, 4
  %ptradd151 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc152 = trunc i32 %lshrl150 to i8
  %94 = and i8 %trunc152, 3
  %95 = load i8, ptr %ptradd151, align 1
  %96 = and i8 %95, -4
  %97 = or i8 %96, %94
  store i8 %96, ptr %ptradd151, align 1
  %98 = load i8, ptr %xx, align 1
  %zext153 = zext i8 %98 to i32
  %lshrl154 = lshr i32 %zext153, 1
  %shl155 = shl i32 %lshrl154, 29
  %ashr156 = ashr i32 %shl155, 29
  %99 = load i8, ptr %xx, align 1
  %zext157 = zext i8 %99 to i32
  %lshrl158 = lshr i32 %zext157, 4
  %ptradd159 = getelementptr inbounds i8, ptr %xx, i64 1
  %100 = load i8, ptr %ptradd159, align 1
  %zext160 = zext i8 %100 to i32
  %shl161 = shl i32 %zext160, 4
  %101 = or i32 %shl161, %lshrl158
  %shl162 = shl i32 %101, 26
  %ashr163 = ashr i32 %shl162, 26
  call void (ptr, ...) @printf(ptr @.str.30, i32 %ashr156, i32 %ashr163)
  %102 = load i8, ptr %xx, align 1
  %zext164 = zext i8 %102 to i32
  %lshrl165 = lshr i32 %zext164, 4
  %ptradd166 = getelementptr inbounds i8, ptr %xx, i64 1
  %103 = load i8, ptr %ptradd166, align 1
  %zext167 = zext i8 %103 to i32
  %shl168 = shl i32 %zext167, 4
  %104 = or i32 %shl168, %lshrl165
  %shl169 = shl i32 %104, 26
  %ashr170 = ashr i32 %shl169, 26
  %smod = srem i32 %ashr170, 2
  %shl171 = shl i32 %smod, 4
  %trunc172 = trunc i32 %shl171 to i8
  %105 = load i8, ptr %xx, align 1
  %106 = and i8 %105, 15
  %107 = or i8 %106, %trunc172
  store i8 %107, ptr %xx, align 1
  %lshrl173 = lshr i32 %smod, 4
  %ptradd174 = getelementptr inbounds i8, ptr %xx, i64 1
  %trunc175 = trunc i32 %lshrl173 to i8
  %108 = and i8 %trunc175, 3
  %109 = load i8, ptr %ptradd174, align 1
  %110 = and i8 %109, -4
  %111 = or i8 %110, %108
  store i8 %110, ptr %ptradd174, align 1
  %112 = load i8, ptr %xx, align 1
  %zext176 = zext i8 %112 to i32
  %lshrl177 = lshr i32 %zext176, 1
  %shl178 = shl i32 %lshrl177, 29
  %ashr179 = ashr i32 %shl178, 29
  %113 = load i8, ptr %xx, align 1
  %zext180 = zext i8 %113 to i32
  %lshrl181 = lshr i32 %zext180, 4
  %ptradd182 = getelementptr inbounds i8, ptr %xx, i64 1
  %114 = load i8, ptr %ptradd182, align 1
  %zext183 = zext i8 %114 to i32
  %shl184 = shl i32 %zext183, 4
  %115 = or i32 %shl184, %lshrl181
  %shl185 = shl i32 %115, 26
  %ashr186 = ashr i32 %shl185, 26
  call void (ptr, ...) @printf(ptr @.str.31, i32 %ashr179, i32 %ashr186)
  %ptradd187 = getelementptr inbounds i8, ptr %xx, i64 2
  %116 = load i8, ptr %ptradd187, align 1
  %lshrl188 = lshr i8 %116, 5
  %117 = trunc i8 %lshrl188 to i1
  %zext189 = zext i1 %117 to i32
  call void (ptr, ...) @printf(ptr @.str.32, i32 %zext189)
  %ptradd190 = getelementptr inbounds i8, ptr %xx, i64 2
  %118 = load i8, ptr %ptradd190, align 1
  %119 = and i8 %118, -33
  %120 = or i8 %119, 32
  store i8 %120, ptr %ptradd190, align 1
  %ptradd191 = getelementptr inbounds i8, ptr %xx, i64 2
  %121 = load i8, ptr %ptradd191, align 1
  %lshrl192 = lshr i8 %121, 5
  %122 = trunc i8 %lshrl192 to i1
  %zext193 = zext i1 %122 to i32
  call void (ptr, ...) @printf(ptr @.str.33, i32 %zext193)
  %ptradd194 = getelementptr inbounds i8, ptr %xx, i64 2
  %123 = load i8, ptr %ptradd194, align 1
  %124 = and i8 %123, -33
  store i8 %124, ptr %ptradd194, align 1
  %ptradd195 = getelementptr inbounds i8, ptr %xx, i64 2
  %125 = load i8, ptr %ptradd195, align 1
  %lshrl196 = lshr i8 %125, 5
  %126 = trunc i8 %lshrl196 to i1
  %zext197 = zext i1 %126 to i32
  call void (ptr, ...) @printf(ptr @.str.34, i32 %zext197)
  ret void
}
