- Refactored @simd implementation.

- Regression vector ABI: npot vectors would load incorrectly from pointers and other things. #2576
This commit is contained in:
Christoffer Lerno
2025-11-16 00:15:18 +01:00
parent 5f96b8e4c6
commit 4e66693065
77 changed files with 1152 additions and 1067 deletions

View File

@@ -448,8 +448,8 @@ noerr_block124: ; preds = %after_check122
br label %voiderr126
voiderr126: ; preds = %noerr_block124, %guard_block123, %guard_block117, %guard_block111
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal127, ptr align 16 @.__const.6, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x128, ptr align 4 %literal127, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal127, ptr align 16 @.__const.6, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x128, ptr align 16 %literal127, i32 20, i1 false)
%60 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x129, ptr align 16 %x128, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x132, ptr align 16 %x129, i32 20, i1 false)
@@ -754,8 +754,8 @@ entry:
%indirectarg651 = alloca %"any[]", align 8
%error_var657 = alloca i64, align 8
%error_var663 = alloca i64, align 8
call void @llvm.memset.p0.i64(ptr align 4 %literal, i8 0, i64 32, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x, ptr align 4 %literal, i32 32, i1 false)
call void @llvm.memset.p0.i64(ptr align 16 %literal, i8 0, i64 32, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x, ptr align 16 %literal, i32 32, i1 false)
%0 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x1, ptr align 16 %x, i32 32, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x2, ptr align 16 %x1, i32 32, i1 false)
@@ -826,7 +826,7 @@ noerr_block15: ; preds = %after_check13
br label %voiderr
voiderr: ; preds = %noerr_block15, %guard_block14, %guard_block8, %guard_block
store i32 0, ptr %literal16, align 4
store i32 0, ptr %literal16, align 16
%ptradd17 = getelementptr inbounds i8, ptr %literal16, i64 4
store i32 0, ptr %ptradd17, align 4
%ptradd18 = getelementptr inbounds i8, ptr %literal16, i64 8
@@ -835,7 +835,7 @@ voiderr: ; preds = %noerr_block15, %gua
store i32 1, ptr %ptradd19, align 4
%ptradd20 = getelementptr inbounds i8, ptr %literal16, i64 16
store i32 2, ptr %ptradd20, align 4
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x21, ptr align 4 %literal16, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x21, ptr align 16 %literal16, i32 20, i1 false)
%14 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x22, ptr align 16 %x21, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x25, ptr align 16 %x22, i32 20, i1 false)
@@ -906,8 +906,8 @@ noerr_block51: ; preds = %after_check49
br label %voiderr53
voiderr53: ; preds = %noerr_block51, %guard_block50, %guard_block44, %guard_block38
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal54, ptr align 16 @.__const.10, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x55, ptr align 4 %literal54, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal54, ptr align 16 @.__const.10, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x55, ptr align 16 %literal54, i32 20, i1 false)
%28 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x56, ptr align 16 %x55, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x59, ptr align 16 %x56, i32 20, i1 false)
@@ -978,8 +978,8 @@ noerr_block85: ; preds = %after_check83
br label %voiderr87
voiderr87: ; preds = %noerr_block85, %guard_block84, %guard_block78, %guard_block72
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal88, ptr align 16 @.__const.12, i32 32, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x89, ptr align 4 %literal88, i32 32, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal88, ptr align 16 @.__const.12, i32 32, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x89, ptr align 16 %literal88, i32 32, i1 false)
%42 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x90, ptr align 16 %x89, i32 32, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x93, ptr align 16 %x90, i32 32, i1 false)
@@ -1050,7 +1050,7 @@ noerr_block119: ; preds = %after_check117
br label %voiderr121
voiderr121: ; preds = %noerr_block119, %guard_block118, %guard_block112, %guard_block106
store i32 1, ptr %literal122, align 4
store i32 1, ptr %literal122, align 16
%ptradd123 = getelementptr inbounds i8, ptr %literal122, i64 4
store i32 2, ptr %ptradd123, align 4
%ptradd124 = getelementptr inbounds i8, ptr %literal122, i64 8
@@ -1059,7 +1059,7 @@ voiderr121: ; preds = %noerr_block119, %gu
store i32 0, ptr %ptradd125, align 4
%ptradd126 = getelementptr inbounds i8, ptr %literal122, i64 16
store i32 0, ptr %ptradd126, align 4
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x127, ptr align 4 %literal122, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x127, ptr align 16 %literal122, i32 20, i1 false)
%56 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x128, ptr align 16 %x127, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x131, ptr align 16 %x128, i32 20, i1 false)
@@ -1130,8 +1130,8 @@ noerr_block157: ; preds = %after_check155
br label %voiderr159
voiderr159: ; preds = %noerr_block157, %guard_block156, %guard_block150, %guard_block144
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal160, ptr align 16 @.__const.15, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x161, ptr align 4 %literal160, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal160, ptr align 16 @.__const.15, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x161, ptr align 16 %literal160, i32 16, i1 false)
%70 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x162, ptr align 16 %x161, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x165, ptr align 16 %x162, i32 16, i1 false)
@@ -1202,7 +1202,7 @@ noerr_block191: ; preds = %after_check189
br label %voiderr193
voiderr193: ; preds = %noerr_block191, %guard_block190, %guard_block184, %guard_block178
store i32 1, ptr %literal194, align 4
store i32 1, ptr %literal194, align 16
%ptradd195 = getelementptr inbounds i8, ptr %literal194, i64 4
store i32 2, ptr %ptradd195, align 4
%ptradd196 = getelementptr inbounds i8, ptr %literal194, i64 8
@@ -1215,7 +1215,7 @@ voiderr193: ; preds = %noerr_block191, %gu
store i32 1, ptr %ptradd199, align 4
%ptradd200 = getelementptr inbounds i8, ptr %literal194, i64 24
store i32 0, ptr %ptradd200, align 4
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x201, ptr align 4 %literal194, i32 28, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x201, ptr align 16 %literal194, i32 28, i1 false)
%84 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x202, ptr align 16 %x201, i32 28, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x205, ptr align 16 %x202, i32 28, i1 false)
@@ -1286,8 +1286,8 @@ noerr_block231: ; preds = %after_check229
br label %voiderr233
voiderr233: ; preds = %noerr_block231, %guard_block230, %guard_block224, %guard_block218
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal234, ptr align 16 @.__const.18, i32 32, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x235, ptr align 4 %literal234, i32 32, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal234, ptr align 16 @.__const.18, i32 32, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x235, ptr align 16 %literal234, i32 32, i1 false)
%98 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x236, ptr align 16 %x235, i32 32, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x239, ptr align 16 %x236, i32 32, i1 false)
@@ -1358,7 +1358,7 @@ noerr_block265: ; preds = %after_check263
br label %voiderr267
voiderr267: ; preds = %noerr_block265, %guard_block264, %guard_block258, %guard_block252
store i32 99, ptr %literal268, align 4
store i32 99, ptr %literal268, align 16
%ptradd269 = getelementptr inbounds i8, ptr %literal268, i64 4
store i32 0, ptr %ptradd269, align 4
%ptradd270 = getelementptr inbounds i8, ptr %literal268, i64 8
@@ -1371,7 +1371,7 @@ voiderr267: ; preds = %noerr_block265, %gu
store i32 1, ptr %ptradd273, align 4
%ptradd274 = getelementptr inbounds i8, ptr %literal268, i64 24
store i32 2, ptr %ptradd274, align 4
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x275, ptr align 4 %literal268, i32 28, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x275, ptr align 16 %literal268, i32 28, i1 false)
%112 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x276, ptr align 16 %x275, i32 28, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x279, ptr align 16 %x276, i32 28, i1 false)
@@ -1442,15 +1442,15 @@ noerr_block305: ; preds = %after_check303
br label %voiderr307
voiderr307: ; preds = %noerr_block305, %guard_block304, %guard_block298, %guard_block292
call void @llvm.memset.p0.i64(ptr align 4 %literal308, i8 0, i64 40, i1 false)
store i32 99, ptr %literal308, align 4
call void @llvm.memset.p0.i64(ptr align 16 %literal308, i8 0, i64 40, i1 false)
store i32 99, ptr %literal308, align 16
%ptradd309 = getelementptr inbounds i8, ptr %literal308, i64 12
store i32 1, ptr %ptradd309, align 4
%ptradd310 = getelementptr inbounds i8, ptr %literal308, i64 20
store i32 99, ptr %ptradd310, align 4
%ptradd311 = getelementptr inbounds i8, ptr %literal308, i64 32
store i32 1, ptr %ptradd311, align 4
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x312, ptr align 4 %literal308, i32 40, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x312, ptr align 16 %literal308, i32 40, i1 false)
%126 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x313, ptr align 16 %x312, i32 40, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x316, ptr align 16 %x313, i32 40, i1 false)
@@ -1521,8 +1521,8 @@ noerr_block342: ; preds = %after_check340
br label %voiderr344
voiderr344: ; preds = %noerr_block342, %guard_block341, %guard_block335, %guard_block329
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal345, ptr align 16 @.__const.22, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x346, ptr align 4 %literal345, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal345, ptr align 16 @.__const.22, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x346, ptr align 16 %literal345, i32 16, i1 false)
%140 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x347, ptr align 16 %x346, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x350, ptr align 16 %x347, i32 16, i1 false)
@@ -1593,8 +1593,8 @@ noerr_block376: ; preds = %after_check374
br label %voiderr378
voiderr378: ; preds = %noerr_block376, %guard_block375, %guard_block369, %guard_block363
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal379, ptr align 16 @.__const.24, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x380, ptr align 4 %literal379, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal379, ptr align 16 @.__const.24, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x380, ptr align 16 %literal379, i32 16, i1 false)
%154 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x381, ptr align 16 %x380, i32 16, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x384, ptr align 16 %x381, i32 16, i1 false)
@@ -1665,7 +1665,7 @@ noerr_block410: ; preds = %after_check408
br label %voiderr412
voiderr412: ; preds = %noerr_block410, %guard_block409, %guard_block403, %guard_block397
store i32 0, ptr %literal413, align 4
store i32 0, ptr %literal413, align 16
%ptradd414 = getelementptr inbounds i8, ptr %literal413, i64 4
store i32 0, ptr %ptradd414, align 4
%ptradd415 = getelementptr inbounds i8, ptr %literal413, i64 8
@@ -1674,7 +1674,7 @@ voiderr412: ; preds = %noerr_block410, %gu
store i32 98, ptr %ptradd416, align 4
%ptradd417 = getelementptr inbounds i8, ptr %literal413, i64 16
store i32 91, ptr %ptradd417, align 4
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x418, ptr align 4 %literal413, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x418, ptr align 16 %literal413, i32 20, i1 false)
%168 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x419, ptr align 16 %x418, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x422, ptr align 16 %x419, i32 20, i1 false)
@@ -1745,8 +1745,8 @@ noerr_block448: ; preds = %after_check446
br label %voiderr450
voiderr450: ; preds = %noerr_block448, %guard_block447, %guard_block441, %guard_block435
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal451, ptr align 16 @.__const.27, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x452, ptr align 4 %literal451, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal451, ptr align 16 @.__const.27, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x452, ptr align 16 %literal451, i32 20, i1 false)
%182 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x453, ptr align 16 %x452, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x456, ptr align 16 %x453, i32 20, i1 false)
@@ -1817,8 +1817,8 @@ noerr_block482: ; preds = %after_check480
br label %voiderr484
voiderr484: ; preds = %noerr_block482, %guard_block481, %guard_block475, %guard_block469
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal485, ptr align 16 @.__const.29, i32 28, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x486, ptr align 4 %literal485, i32 28, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal485, ptr align 16 @.__const.29, i32 28, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x486, ptr align 16 %literal485, i32 28, i1 false)
%196 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x487, ptr align 16 %x486, i32 28, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x490, ptr align 16 %x487, i32 28, i1 false)
@@ -1889,7 +1889,7 @@ noerr_block516: ; preds = %after_check514
br label %voiderr518
voiderr518: ; preds = %noerr_block516, %guard_block515, %guard_block509, %guard_block503
store i32 99, ptr %literal519, align 4
store i32 99, ptr %literal519, align 16
%ptradd520 = getelementptr inbounds i8, ptr %literal519, i64 4
store i32 0, ptr %ptradd520, align 4
%ptradd521 = getelementptr inbounds i8, ptr %literal519, i64 8
@@ -1902,7 +1902,7 @@ voiderr518: ; preds = %noerr_block516, %gu
store i32 98, ptr %ptradd524, align 4
%ptradd525 = getelementptr inbounds i8, ptr %literal519, i64 24
store i32 91, ptr %ptradd525, align 4
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x526, ptr align 4 %literal519, i32 28, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x526, ptr align 16 %literal519, i32 28, i1 false)
%210 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x527, ptr align 16 %x526, i32 28, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x530, ptr align 16 %x527, i32 28, i1 false)
@@ -1973,7 +1973,7 @@ noerr_block556: ; preds = %after_check554
br label %voiderr558
voiderr558: ; preds = %noerr_block556, %guard_block555, %guard_block549, %guard_block543
store i32 0, ptr %literal559, align 4
store i32 0, ptr %literal559, align 16
%ptradd560 = getelementptr inbounds i8, ptr %literal559, i64 4
store i32 0, ptr %ptradd560, align 4
%ptradd561 = getelementptr inbounds i8, ptr %literal559, i64 8
@@ -1992,7 +1992,7 @@ voiderr558: ; preds = %noerr_block556, %gu
store i32 0, ptr %ptradd567, align 4
%ptradd568 = getelementptr inbounds i8, ptr %ptradd565, i64 4
store i32 5, ptr %ptradd568, align 4
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x569, ptr align 4 %literal559, i32 36, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x569, ptr align 16 %literal559, i32 36, i1 false)
%224 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x570, ptr align 16 %x569, i32 36, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x573, ptr align 16 %x570, i32 36, i1 false)

View File

@@ -252,7 +252,7 @@ entry:
%indirectarg = alloca %"any[]", align 8
%error_var3 = alloca i64, align 8
%error_var9 = alloca i64, align 8
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal, ptr align 16 @.__const.5, i32 28, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal, ptr align 16 @.__const.5, i32 28, i1 false)
%0 = insertvalue %"int[]" undef, ptr %literal, 0
%1 = insertvalue %"int[]" %0, i64 7, 1
%2 = call ptr @std.io.stdout()
@@ -341,8 +341,8 @@ entry:
%indirectarg = alloca %"any[]", align 8
%error_var4 = alloca i64, align 8
%error_var10 = alloca i64, align 8
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal, ptr align 16 @.__const.7, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x, ptr align 4 %literal, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal, ptr align 16 @.__const.7, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x, ptr align 16 %literal, i32 20, i1 false)
%0 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x1, ptr align 16 %x, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x2, ptr align 16 %x1, i32 20, i1 false)
@@ -430,8 +430,8 @@ entry:
%indirectarg = alloca %"any[]", align 8
%error_var4 = alloca i64, align 8
%error_var10 = alloca i64, align 8
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal, ptr align 16 @.__const.9, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x, ptr align 4 %literal, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal, ptr align 16 @.__const.9, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x, ptr align 16 %literal, i32 20, i1 false)
%0 = call ptr @std.io.stdout()
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x1, ptr align 16 %x, i32 20, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x2, ptr align 16 %x1, i32 20, i1 false)

View File

@@ -25,16 +25,19 @@ fn void main()
define void @test.main() #0 {
entry:
%literal = alloca [3 x %Vector3], align 16
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %literal, ptr align 16 @.__const, i32 36, i1 false)
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %literal, ptr align 16 @.__const, i32 36, i1 false)
%0 = insertvalue %"Vector3[]" undef, ptr %literal, 0
%1 = insertvalue %"Vector3[]" %0, i64 3, 1
br label %loop.cond
loop.cond: ; preds = %loop.inc, %entry
%2 = extractvalue %"Vector3[]" %1, 1
%lt = icmp ult i64 0, %2
br i1 %lt, label %loop.inc, label %loop.exit
loop.inc: ; preds = %loop.cond
br label %loop.cond
loop.exit: ; preds = %loop.cond
ret void
}

View File

@@ -103,9 +103,9 @@ fn void main()
define void @test.hello(i32 %0, double %1, i64 %2, i64 %3, ptr %4, i64 %5) #0 {
entry:
%d = alloca [4 x i32], align 8
%d = alloca [4 x i32], align 16
%args = alloca %"any[]", align 8
store i64 %2, ptr %d, align 8
store i64 %2, ptr %d, align 16
%ptradd = getelementptr inbounds i8, ptr %d, i64 8
store i64 %3, ptr %ptradd, align 8
store ptr %4, ptr %args, align 8

View File

@@ -25,7 +25,7 @@ entry:
%z_slice = alloca [2 x [2 x i32]], align 16
%f = alloca %Foo, align 4
%y = alloca [2 x i32], align 4
store i32 1, ptr %literal, align 4
store i32 1, ptr %literal, align 16
%ptradd = getelementptr inbounds i8, ptr %literal, i64 4
store i32 2, ptr %ptradd, align 4
%ptradd1 = getelementptr inbounds i8, ptr %literal, i64 8
@@ -35,7 +35,7 @@ entry:
%0 = insertvalue %"int[2][]" undef, ptr %literal, 0
%1 = insertvalue %"int[2][]" %0, i64 2, 1
store %"int[2][]" %1, ptr %z, align 8
store i32 1, ptr %z_slice, align 4
store i32 1, ptr %z_slice, align 16
%ptradd3 = getelementptr inbounds i8, ptr %z_slice, i64 4
store i32 2, ptr %ptradd3, align 4
%ptradd4 = getelementptr inbounds i8, ptr %z_slice, i64 8

View File

@@ -31,8 +31,8 @@ fn void main()
%any = type { ptr, i64 }
@"$ct.test.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
@"$ct.test.Int2V" = linkonce global %.introspect { i8 18, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.v2$int" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
@"$ct.v2$int" = linkonce global %.introspect { i8 17, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.int" to i64), i64 2, [0 x i64] zeroinitializer }, align 8
@"$ct.test.Int2V" = linkonce global %.introspect { i8 18, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.siv2$int" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
@"$ct.siv2$int" = linkonce global %.introspect { i8 17, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.int" to i64), i64 2, [0 x i64] zeroinitializer }, align 8
@"$ct.int" = linkonce global %.introspect { i8 2, i64 0, ptr null, i64 4, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
@.str = private unnamed_addr constant [9 x i8] c"%s %s %s\00", align 1
@"$ct.a2$int" = linkonce global %.introspect { i8 15, i64 0, ptr null, i64 8, i64 ptrtoint (ptr @"$ct.int" to i64), i64 2, [0 x i64] zeroinitializer }, align 8