Files
c3c/test/test_suite/bitstruct/bitstruct_arrays.c3t
Christoffer Lerno e293c435af 0.6.0: init_new/init_temp removed. LinkedList API rewritten. List "pop" and "remove" function now return Optionals. RingBuffer API rewritten. Allocator interface changed. Deprecated Allocator, DString and mem functions removed. "identity" functions are now constants for Matrix and Complex numbers. @default implementations for interfaces removed. any* => any, same for interfaces. Emit local/private globals as "private" in LLVM, following C "static". Updated enum syntax. Add support [rgba] properties in vectors. Improved checks of aliased "void". Subarray -> slice. Fix of llvm codegen enum check. Improved alignment handling. Add --output-dir #1155. Removed List/Object append. GenericList renamed AnyList. Remove unused "unwrap". Fixes to cond. Optimize output in dead branches. Better checking of operator methods. Disallow any from implementing dynamic methods. Check for operator mismatch. Remove unnecessary bitfield. Remove numbering in --list* commands Old style enum declaration for params/type, but now the type is optional. Add note on #1086. Allow making distinct types out of "void", "typeid", "anyfault" and faults. Remove system linker build options. "Try" expressions must be simple expressions. Add optimized build to Mac tests. Register int. assert(false) only allowed in unused branches or in tests. Compile time failed asserts is a compile time error. Remove current_block_is_target. Bug when assigning an optional from an optional. Remove unused emit_zstring. Simplify phi code. Remove unnecessary unreachable blocks and remove unnecessary current_block NULL assignments. Proper handling of '.' and Win32 '//server' paths. Add "no discard" to expression blocks with a return value. Detect "unsigned >= 0" as errors. Fix issue with distinct void as a member #1147. Improve callstack debug information #1184. Fix issue with absolute output-dir paths. Lambdas were not type checked thoroughly #1185. Fix compilation warning #1187. Request jump table using @jump for switches. Path normalization - fix possible null terminator out of bounds. Improved error messages on inlined macros.
Upgrade of mingw in CI. Fix problems using reflection on interface types #1203. Improved debug information on defer. $foreach doesn't create an implicit syntactic scope.
Error if `@if` depends on `@if`. Updated Linux stacktrace. Fix of default argument stacktrace. Allow linking libraries directly by file path. Improve inlining warning messages. Added `index_of_char_from`. Compiler crash using enum nameof from different module #1205. Removed unused fields in find_msvc. Use vswhere to find msvc. Update tests for LLVM 19
2024-06-12 10:14:26 +02:00

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
%boolsi = zext i1 %68 to i32
call void (ptr, ...) @printf(ptr @.str.9, i32 %boolsi)
%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
%lshrl93 = lshr i64 %71, 20
%72 = and i64 1, %lshrl93
%trunc94 = trunc i64 %72 to i8
%73 = trunc i8 %trunc94 to i1
%boolsi95 = zext i1 %73 to i32
call void (ptr, ...) @printf(ptr @.str.10, i32 %boolsi95)
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
%boolsi = zext i1 %117 to i32
call void (ptr, ...) @printf(ptr @.str.20, i32 %boolsi)
%ptradd177 = getelementptr inbounds i8, ptr %xx, i64 2
%118 = load i8, ptr %ptradd177, align 1
%119 = and i8 %118, -17
%120 = or i8 %119, 16
store i8 %120, ptr %ptradd177, align 1
%ptradd178 = getelementptr inbounds i8, ptr %xx, i64 2
%121 = load i8, ptr %ptradd178, align 1
%lshrl179 = lshr i8 %121, 4
%122 = trunc i8 %lshrl179 to i1
%boolsi180 = zext i1 %122 to i32
call void (ptr, ...) @printf(ptr @.str.21, i32 %boolsi180)
%ptradd181 = getelementptr inbounds i8, ptr %xx, i64 2
%123 = load i8, ptr %ptradd181, align 1
%124 = and i8 %123, -17
store i8 %124, ptr %ptradd181, align 1
%ptradd182 = getelementptr inbounds i8, ptr %xx, i64 2
%125 = load i8, ptr %ptradd182, align 1
%lshrl183 = lshr i8 %125, 4
%126 = trunc i8 %lshrl183 to i1
%boolsi184 = zext i1 %126 to i32
call void (ptr, ...) @printf(ptr @.str.22, i32 %boolsi184)
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
%boolsi = zext i1 %117 to i32
call void (ptr, ...) @printf(ptr @.str.32, i32 %boolsi)
%ptradd189 = getelementptr inbounds i8, ptr %xx, i64 2
%118 = load i8, ptr %ptradd189, align 1
%119 = and i8 %118, -33
%120 = or i8 %119, 32
store i8 %120, ptr %ptradd189, align 1
%ptradd190 = getelementptr inbounds i8, ptr %xx, i64 2
%121 = load i8, ptr %ptradd190, align 1
%lshrl191 = lshr i8 %121, 5
%122 = trunc i8 %lshrl191 to i1
%boolsi192 = zext i1 %122 to i32
call void (ptr, ...) @printf(ptr @.str.33, i32 %boolsi192)
%ptradd193 = getelementptr inbounds i8, ptr %xx, i64 2
%123 = load i8, ptr %ptradd193, align 1
%124 = and i8 %123, -33
store i8 %124, ptr %ptradd193, align 1
%ptradd194 = getelementptr inbounds i8, ptr %xx, i64 2
%125 = load i8, ptr %ptradd194, align 1
%lshrl195 = lshr i8 %125, 5
%126 = trunc i8 %lshrl195 to i1
%boolsi196 = zext i1 %126 to i32
call void (ptr, ...) @printf(ptr @.str.34, i32 %boolsi196)
ret void
}