Files
c3c/test/test_suite2/bitstruct/bitstruct_initializer.c3t

503 lines
20 KiB
C

// #target: macos-x64
module test;
import std::io;
bitstruct Foo : ulong
{
uint x : 0..31;
uint y : 32..62;
bool w : 63;
}
bitstruct Bar : char[8]
{
uint x : 0..31;
uint y : 32..62;
bool w : 63;
}
struct Abc
{
int x;
Foo b;
}
fn void hello(int z)
{
Foo x;
x = { .x = z, .w = z < 100 };
Abc y = { .b.x = 32, .b.y = 10 };
Abc d = { .b = { 23, 11, true } };
Bar b;
b = { .x = z, .w = z < 100 };
io::printfln("%s %s %s", x.x, x.y, x.w);
io::printfln("%s %s %s", y.b.x, y.b.y, y.b.w);
io::printfln("%s %s %s", b.x, b.y, b.w);
x = { z + 1, 1, z > 100 };
y.b = { 33, 11, true };
b = { z + 1, 1, z > 100 };
io::printfln("%s %s %s", x.x, x.y, x.w);
io::printfln("%s %s %s", y.b.x, y.b.y, y.b.w);
io::printfln("%s %s %s", b.x, b.y, b.w);
}
fn void main()
{
hello(12);
}
/* #expect: test.ll
define void @test_hello(i32 %0) #0 {
entry:
%x = alloca i64, align 8
%y = alloca %Abc, align 8
%d = alloca %Abc, align 8
%b = alloca [8 x i8], align 1
%retparam = alloca i64, align 8
%varargslots = alloca [3 x %variant], align 16
%taddr = alloca i32, align 4
%taddr13 = alloca i32, align 4
%taddr16 = alloca i8, align 1
%retparam17 = alloca i64, align 8
%varargslots18 = alloca [3 x %variant], align 16
%taddr20 = alloca i32, align 4
%taddr23 = alloca i32, align 4
%taddr26 = alloca i8, align 1
%retparam30 = alloca i64, align 8
%varargslots31 = alloca [3 x %variant], align 16
%taddr39 = alloca i32, align 4
%taddr47 = alloca i32, align 4
%taddr49 = alloca i8, align 1
%retparam67 = alloca i64, align 8
%varargslots68 = alloca [3 x %variant], align 16
%taddr70 = alloca i32, align 4
%taddr73 = alloca i32, align 4
%taddr76 = alloca i8, align 1
%retparam80 = alloca i64, align 8
%varargslots81 = alloca [3 x %variant], align 16
%taddr83 = alloca i32, align 4
%taddr86 = alloca i32, align 4
%taddr89 = alloca i8, align 1
%retparam93 = alloca i64, align 8
%varargslots94 = alloca [3 x %variant], align 16
%taddr102 = alloca i32, align 4
%taddr110 = alloca i32, align 4
%taddr112 = alloca i8, align 1
store i64 0, ptr %x, align 8
%zext = zext i32 %0 to i64
%1 = and i64 %zext, 4294967295
%lt = icmp slt i32 %0, 100
%2 = zext i1 %lt to i8
%zext1 = zext i8 %2 to i64
%shl = shl i64 %zext1, 63
%3 = and i64 %shl, -9223372036854775808
%4 = and i64 %1, 9223372036854775807
%5 = or i64 %4, %3
store i64 %5, ptr %x, align 8
call void @llvm.memcpy.p0.p0.i32(ptr align 8 %y, ptr align 8 @.__const, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 8 %d, ptr align 8 @.__const.1, i32 16, i1 false)
%6 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 0
store i8 0, ptr %6, align 1
%7 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 1
store i8 0, ptr %7, align 1
%8 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 2
store i8 0, ptr %8, align 1
%9 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 3
store i8 0, ptr %9, align 1
%10 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 4
store i8 0, ptr %10, align 1
%11 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 5
store i8 0, ptr %11, align 1
%12 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 6
store i8 0, ptr %12, align 1
%13 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 7
store i8 0, ptr %13, align 1
%14 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 0
store i8 0, ptr %14, align 1
%15 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 1
store i8 0, ptr %15, align 1
%16 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 2
store i8 0, ptr %16, align 1
%17 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 3
store i8 0, ptr %17, align 1
%18 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 4
store i8 0, ptr %18, align 1
%19 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 5
store i8 0, ptr %19, align 1
%20 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 6
store i8 0, ptr %20, align 1
%21 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 7
store i8 0, ptr %21, align 1
%22 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 0
%ztrunc = trunc i32 %0 to i8
store i8 %ztrunc, ptr %22, align 1
%lshrl = lshr i32 %0, 8
%23 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 1
%ztrunc2 = trunc i32 %lshrl to i8
store i8 %ztrunc2, ptr %23, align 1
%lshrl3 = lshr i32 %lshrl, 8
%24 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 2
%ztrunc4 = trunc i32 %lshrl3 to i8
store i8 %ztrunc4, ptr %24, align 1
%lshrl5 = lshr i32 %lshrl3, 8
%25 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 3
%ztrunc6 = trunc i32 %lshrl5 to i8
store i8 %ztrunc6, ptr %25, align 1
%lshrl7 = lshr i32 %lshrl5, 8
%lt8 = icmp slt i32 %0, 100
%26 = zext i1 %lt8 to i8
%shl9 = shl i8 %26, 7
%27 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 7
%28 = load i8, ptr %27, align 1
%29 = and i8 %28, 127
%30 = or i8 %29, %shl9
store i8 %30, ptr %27, align 1
%31 = load i64, ptr %x, align 8
%32 = and i64 4294967295, %31
%ztrunc10 = trunc i64 %32 to i32
store i32 %ztrunc10, ptr %taddr, align 4
%33 = insertvalue %variant undef, ptr %taddr, 0
%34 = insertvalue %variant %33, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%35 = getelementptr inbounds [3 x %variant], ptr %varargslots, i64 0, i64 0
store %variant %34, ptr %35, align 16
%36 = load i64, ptr %x, align 8
%lshrl11 = lshr i64 %36, 32
%37 = and i64 2147483647, %lshrl11
%ztrunc12 = trunc i64 %37 to i32
store i32 %ztrunc12, ptr %taddr13, align 4
%38 = insertvalue %variant undef, ptr %taddr13, 0
%39 = insertvalue %variant %38, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%40 = getelementptr inbounds [3 x %variant], ptr %varargslots, i64 0, i64 1
store %variant %39, ptr %40, align 16
%41 = load i64, ptr %x, align 8
%lshrl14 = lshr i64 %41, 63
%42 = and i64 1, %lshrl14
%ztrunc15 = trunc i64 %42 to i8
store i8 %ztrunc15, ptr %taddr16, align 1
%43 = insertvalue %variant undef, ptr %taddr16, 0
%44 = insertvalue %variant %43, i64 ptrtoint (ptr @"ct$bool" to i64), 1
%45 = getelementptr inbounds [3 x %variant], ptr %varargslots, i64 0, i64 2
store %variant %44, ptr %45, align 16
%46 = call i64 @std_io_printfln(ptr %retparam, ptr @.str, i64 8, ptr %varargslots, i64 3)
%not_err = icmp eq i64 %46, 0
br i1 %not_err, label %after_check, label %voiderr
after_check: ; preds = %entry
br label %voiderr
voiderr: ; preds = %after_check, %entry
%47 = getelementptr inbounds %Abc, ptr %y, i32 0, i32 1
%48 = load i64, ptr %47, align 8
%49 = and i64 4294967295, %48
%ztrunc19 = trunc i64 %49 to i32
store i32 %ztrunc19, ptr %taddr20, align 4
%50 = insertvalue %variant undef, ptr %taddr20, 0
%51 = insertvalue %variant %50, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%52 = getelementptr inbounds [3 x %variant], ptr %varargslots18, i64 0, i64 0
store %variant %51, ptr %52, align 16
%53 = getelementptr inbounds %Abc, ptr %y, i32 0, i32 1
%54 = load i64, ptr %53, align 8
%lshrl21 = lshr i64 %54, 32
%55 = and i64 2147483647, %lshrl21
%ztrunc22 = trunc i64 %55 to i32
store i32 %ztrunc22, ptr %taddr23, align 4
%56 = insertvalue %variant undef, ptr %taddr23, 0
%57 = insertvalue %variant %56, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%58 = getelementptr inbounds [3 x %variant], ptr %varargslots18, i64 0, i64 1
store %variant %57, ptr %58, align 16
%59 = getelementptr inbounds %Abc, ptr %y, i32 0, i32 1
%60 = load i64, ptr %59, align 8
%lshrl24 = lshr i64 %60, 63
%61 = and i64 1, %lshrl24
%ztrunc25 = trunc i64 %61 to i8
store i8 %ztrunc25, ptr %taddr26, align 1
%62 = insertvalue %variant undef, ptr %taddr26, 0
%63 = insertvalue %variant %62, i64 ptrtoint (ptr @"ct$bool" to i64), 1
%64 = getelementptr inbounds [3 x %variant], ptr %varargslots18, i64 0, i64 2
store %variant %63, ptr %64, align 16
%65 = call i64 @std_io_printfln(ptr %retparam17, ptr @.str.2, i64 8, ptr %varargslots18, i64 3)
%not_err27 = icmp eq i64 %65, 0
br i1 %not_err27, label %after_check28, label %voiderr29
after_check28: ; preds = %voiderr
br label %voiderr29
voiderr29: ; preds = %after_check28, %voiderr
%66 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 0
%67 = load i8, ptr %66, align 1
%zext32 = zext i8 %67 to i32
%68 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 1
%69 = load i8, ptr %68, align 1
%zext33 = zext i8 %69 to i32
%shl34 = shl i32 %zext33, 8
%70 = or i32 %shl34, %zext32
%71 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 2
%72 = load i8, ptr %71, align 1
%zext35 = zext i8 %72 to i32
%shl36 = shl i32 %zext35, 16
%73 = or i32 %shl36, %70
%74 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 3
%75 = load i8, ptr %74, align 1
%zext37 = zext i8 %75 to i32
%shl38 = shl i32 %zext37, 24
%76 = or i32 %shl38, %73
store i32 %76, ptr %taddr39, align 4
%77 = insertvalue %variant undef, ptr %taddr39, 0
%78 = insertvalue %variant %77, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%79 = getelementptr inbounds [3 x %variant], ptr %varargslots31, i64 0, i64 0
store %variant %78, ptr %79, align 16
%80 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 4
%81 = load i8, ptr %80, align 1
%zext40 = zext i8 %81 to i32
%82 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 5
%83 = load i8, ptr %82, align 1
%zext41 = zext i8 %83 to i32
%shl42 = shl i32 %zext41, 8
%84 = or i32 %shl42, %zext40
%85 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 6
%86 = load i8, ptr %85, align 1
%zext43 = zext i8 %86 to i32
%shl44 = shl i32 %zext43, 16
%87 = or i32 %shl44, %84
%88 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 7
%89 = load i8, ptr %88, align 1
%zext45 = zext i8 %89 to i32
%shl46 = shl i32 %zext45, 24
%90 = or i32 %shl46, %87
%91 = and i32 2147483647, %90
store i32 %91, ptr %taddr47, align 4
%92 = insertvalue %variant undef, ptr %taddr47, 0
%93 = insertvalue %variant %92, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%94 = getelementptr inbounds [3 x %variant], ptr %varargslots31, i64 0, i64 1
store %variant %93, ptr %94, align 16
%95 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 7
%96 = load i8, ptr %95, align 1
%lshrl48 = lshr i8 %96, 7
%97 = trunc i8 %lshrl48 to i1
%98 = zext i1 %97 to i8
store i8 %98, ptr %taddr49, align 1
%99 = insertvalue %variant undef, ptr %taddr49, 0
%100 = insertvalue %variant %99, i64 ptrtoint (ptr @"ct$bool" to i64), 1
%101 = getelementptr inbounds [3 x %variant], ptr %varargslots31, i64 0, i64 2
store %variant %100, ptr %101, align 16
%102 = call i64 @std_io_printfln(ptr %retparam30, ptr @.str.3, i64 8, ptr %varargslots31, i64 3)
%not_err50 = icmp eq i64 %102, 0
br i1 %not_err50, label %after_check51, label %voiderr52
after_check51: ; preds = %voiderr29
br label %voiderr52
voiderr52: ; preds = %after_check51, %voiderr29
%add = add i32 %0, 1
%zext53 = zext i32 %add to i64
%103 = and i64 %zext53, 4294967295
%104 = and i64 %103, -9223372032559808513
%105 = or i64 %104, 4294967296
%gt = icmp sgt i32 %0, 100
%106 = zext i1 %gt to i8
%zext54 = zext i8 %106 to i64
%shl55 = shl i64 %zext54, 63
%107 = and i64 %shl55, -9223372036854775808
%108 = and i64 %105, 9223372036854775807
%109 = or i64 %108, %107
store i64 %109, ptr %x, align 8
%110 = getelementptr inbounds %Abc, ptr %y, i32 0, i32 1
store i64 -9223371989610135519, ptr %110, align 8
%111 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 0
store i8 0, ptr %111, align 1
%112 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 1
store i8 0, ptr %112, align 1
%113 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 2
store i8 0, ptr %113, align 1
%114 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 3
store i8 0, ptr %114, align 1
%115 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 4
store i8 0, ptr %115, align 1
%116 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 5
store i8 0, ptr %116, align 1
%117 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 6
store i8 0, ptr %117, align 1
%118 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 7
store i8 0, ptr %118, align 1
%add56 = add i32 %0, 1
%119 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 0
%ztrunc57 = trunc i32 %add56 to i8
store i8 %ztrunc57, ptr %119, align 1
%lshrl58 = lshr i32 %add56, 8
%120 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 1
%ztrunc59 = trunc i32 %lshrl58 to i8
store i8 %ztrunc59, ptr %120, align 1
%lshrl60 = lshr i32 %lshrl58, 8
%121 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 2
%ztrunc61 = trunc i32 %lshrl60 to i8
store i8 %ztrunc61, ptr %121, align 1
%lshrl62 = lshr i32 %lshrl60, 8
%122 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 3
%ztrunc63 = trunc i32 %lshrl62 to i8
store i8 %ztrunc63, ptr %122, align 1
%lshrl64 = lshr i32 %lshrl62, 8
%123 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 4
store i8 1, ptr %123, align 1
%124 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 5
store i8 0, ptr %124, align 1
%125 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 6
store i8 0, ptr %125, align 1
%126 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 7
%127 = load i8, ptr %126, align 1
%128 = and i8 %127, -128
store i8 %128, ptr %126, align 1
%gt65 = icmp sgt i32 %0, 100
%129 = zext i1 %gt65 to i8
%shl66 = shl i8 %129, 7
%130 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 7
%131 = load i8, ptr %130, align 1
%132 = and i8 %131, 127
%133 = or i8 %132, %shl66
store i8 %133, ptr %130, align 1
%134 = load i64, ptr %x, align 8
%135 = and i64 4294967295, %134
%ztrunc69 = trunc i64 %135 to i32
store i32 %ztrunc69, ptr %taddr70, align 4
%136 = insertvalue %variant undef, ptr %taddr70, 0
%137 = insertvalue %variant %136, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%138 = getelementptr inbounds [3 x %variant], ptr %varargslots68, i64 0, i64 0
store %variant %137, ptr %138, align 16
%139 = load i64, ptr %x, align 8
%lshrl71 = lshr i64 %139, 32
%140 = and i64 2147483647, %lshrl71
%ztrunc72 = trunc i64 %140 to i32
store i32 %ztrunc72, ptr %taddr73, align 4
%141 = insertvalue %variant undef, ptr %taddr73, 0
%142 = insertvalue %variant %141, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%143 = getelementptr inbounds [3 x %variant], ptr %varargslots68, i64 0, i64 1
store %variant %142, ptr %143, align 16
%144 = load i64, ptr %x, align 8
%lshrl74 = lshr i64 %144, 63
%145 = and i64 1, %lshrl74
%ztrunc75 = trunc i64 %145 to i8
store i8 %ztrunc75, ptr %taddr76, align 1
%146 = insertvalue %variant undef, ptr %taddr76, 0
%147 = insertvalue %variant %146, i64 ptrtoint (ptr @"ct$bool" to i64), 1
%148 = getelementptr inbounds [3 x %variant], ptr %varargslots68, i64 0, i64 2
store %variant %147, ptr %148, align 16
%149 = call i64 @std_io_printfln(ptr %retparam67, ptr @.str.4, i64 8, ptr %varargslots68, i64 3)
%not_err77 = icmp eq i64 %149, 0
br i1 %not_err77, label %after_check78, label %voiderr79
after_check78: ; preds = %voiderr52
br label %voiderr79
voiderr79: ; preds = %after_check78, %voiderr52
%150 = getelementptr inbounds %Abc, ptr %y, i32 0, i32 1
%151 = load i64, ptr %150, align 8
%152 = and i64 4294967295, %151
%ztrunc82 = trunc i64 %152 to i32
store i32 %ztrunc82, ptr %taddr83, align 4
%153 = insertvalue %variant undef, ptr %taddr83, 0
%154 = insertvalue %variant %153, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%155 = getelementptr inbounds [3 x %variant], ptr %varargslots81, i64 0, i64 0
store %variant %154, ptr %155, align 16
%156 = getelementptr inbounds %Abc, ptr %y, i32 0, i32 1
%157 = load i64, ptr %156, align 8
%lshrl84 = lshr i64 %157, 32
%158 = and i64 2147483647, %lshrl84
%ztrunc85 = trunc i64 %158 to i32
store i32 %ztrunc85, ptr %taddr86, align 4
%159 = insertvalue %variant undef, ptr %taddr86, 0
%160 = insertvalue %variant %159, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%161 = getelementptr inbounds [3 x %variant], ptr %varargslots81, i64 0, i64 1
store %variant %160, ptr %161, align 16
%162 = getelementptr inbounds %Abc, ptr %y, i32 0, i32 1
%163 = load i64, ptr %162, align 8
%lshrl87 = lshr i64 %163, 63
%164 = and i64 1, %lshrl87
%ztrunc88 = trunc i64 %164 to i8
store i8 %ztrunc88, ptr %taddr89, align 1
%165 = insertvalue %variant undef, ptr %taddr89, 0
%166 = insertvalue %variant %165, i64 ptrtoint (ptr @"ct$bool" to i64), 1
%167 = getelementptr inbounds [3 x %variant], ptr %varargslots81, i64 0, i64 2
store %variant %166, ptr %167, align 16
%168 = call i64 @std_io_printfln(ptr %retparam80, ptr @.str.5, i64 8, ptr %varargslots81, i64 3)
%not_err90 = icmp eq i64 %168, 0
br i1 %not_err90, label %after_check91, label %voiderr92
after_check91: ; preds = %voiderr79
br label %voiderr92
voiderr92: ; preds = %after_check91, %voiderr79
%169 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 0
%170 = load i8, ptr %169, align 1
%zext95 = zext i8 %170 to i32
%171 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 1
%172 = load i8, ptr %171, align 1
%zext96 = zext i8 %172 to i32
%shl97 = shl i32 %zext96, 8
%173 = or i32 %shl97, %zext95
%174 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 2
%175 = load i8, ptr %174, align 1
%zext98 = zext i8 %175 to i32
%shl99 = shl i32 %zext98, 16
%176 = or i32 %shl99, %173
%177 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 3
%178 = load i8, ptr %177, align 1
%zext100 = zext i8 %178 to i32
%shl101 = shl i32 %zext100, 24
%179 = or i32 %shl101, %176
store i32 %179, ptr %taddr102, align 4
%180 = insertvalue %variant undef, ptr %taddr102, 0
%181 = insertvalue %variant %180, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%182 = getelementptr inbounds [3 x %variant], ptr %varargslots94, i64 0, i64 0
store %variant %181, ptr %182, align 16
%183 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 4
%184 = load i8, ptr %183, align 1
%zext103 = zext i8 %184 to i32
%185 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 5
%186 = load i8, ptr %185, align 1
%zext104 = zext i8 %186 to i32
%shl105 = shl i32 %zext104, 8
%187 = or i32 %shl105, %zext103
%188 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 6
%189 = load i8, ptr %188, align 1
%zext106 = zext i8 %189 to i32
%shl107 = shl i32 %zext106, 16
%190 = or i32 %shl107, %187
%191 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 7
%192 = load i8, ptr %191, align 1
%zext108 = zext i8 %192 to i32
%shl109 = shl i32 %zext108, 24
%193 = or i32 %shl109, %190
%194 = and i32 2147483647, %193
store i32 %194, ptr %taddr110, align 4
%195 = insertvalue %variant undef, ptr %taddr110, 0
%196 = insertvalue %variant %195, i64 ptrtoint (ptr @"ct$uint" to i64), 1
%197 = getelementptr inbounds [3 x %variant], ptr %varargslots94, i64 0, i64 1
store %variant %196, ptr %197, align 16
%198 = getelementptr inbounds [8 x i8], ptr %b, i64 0, i64 7
%199 = load i8, ptr %198, align 1
%lshrl111 = lshr i8 %199, 7
%200 = trunc i8 %lshrl111 to i1
%201 = zext i1 %200 to i8
store i8 %201, ptr %taddr112, align 1
%202 = insertvalue %variant undef, ptr %taddr112, 0
%203 = insertvalue %variant %202, i64 ptrtoint (ptr @"ct$bool" to i64), 1
%204 = getelementptr inbounds [3 x %variant], ptr %varargslots94, i64 0, i64 2
store %variant %203, ptr %204, align 16
%205 = call i64 @std_io_printfln(ptr %retparam93, ptr @.str.6, i64 8, ptr %varargslots94, i64 3)
%not_err113 = icmp eq i64 %205, 0
br i1 %not_err113, label %after_check114, label %voiderr115
after_check114: ; preds = %voiderr92
br label %voiderr115
voiderr115: ; preds = %after_check114, %voiderr92
ret void
}
; Function Attrs: nounwind
define void @test_main() #0 {
entry:
call void @test_hello(i32 12)
ret void
}