Files
c3c/test/test_suite/bitstruct/bitstruct_arrays.c3t

1070 lines
34 KiB
Plaintext

// #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
}