mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
- `$for` "()" replaced by trailing ":" `$for (var $x = 0; $x < FOO; $x++)` -> `$for var $x = 0; $x < FOO; $x++:` - `$switch` "()" replaced by trailing ":" `$switch ($Type)` -> `$switch $Type:` - Empty `$switch` requires trailing ":" `$switch` -> `$switch:`
147 lines
5.0 KiB
Plaintext
147 lines
5.0 KiB
Plaintext
// #target: macos-x64
|
|
module rawsplat;
|
|
|
|
int x;
|
|
macro void foo(...)
|
|
{
|
|
$for var $i = 0; $i < $vacount; $i++:
|
|
x += $vaarg[$i] * $i;
|
|
$endfor
|
|
}
|
|
|
|
fn void main()
|
|
{
|
|
int[3] y = { 33, 44, 55 };
|
|
foo(...y);
|
|
foo(1, ...y);
|
|
int[] z = &y;
|
|
foo(...z[1..2]);
|
|
foo(1, ...z[1..2], 5);
|
|
}
|
|
|
|
/* #expect: rawsplat.ll
|
|
|
|
define void @rawsplat.main() #0 {
|
|
entry:
|
|
%y = alloca [3 x i32], align 4
|
|
%.anon = alloca [3 x i32], align 4
|
|
%.anon1 = alloca i32, align 4
|
|
%.anon2 = alloca i32, align 4
|
|
%.anon4 = alloca i32, align 4
|
|
%.anon9 = alloca [3 x i32], align 4
|
|
%.anon10 = alloca i32, align 4
|
|
%.anon12 = alloca i32, align 4
|
|
%.anon14 = alloca i32, align 4
|
|
%z = alloca %"int[]", align 8
|
|
%.anon23 = alloca i32, align 4
|
|
%.anon25 = alloca i32, align 4
|
|
%.anon31 = alloca i32, align 4
|
|
%.anon33 = alloca i32, align 4
|
|
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %y, ptr align 4 @.__const, i32 12, i1 false)
|
|
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %.anon, ptr align 4 %y, i32 12, i1 false)
|
|
%0 = load i32, ptr %.anon, align 4
|
|
store i32 %0, ptr %.anon1, align 4
|
|
%ptradd = getelementptr inbounds i8, ptr %.anon, i64 4
|
|
%1 = load i32, ptr %ptradd, align 4
|
|
store i32 %1, ptr %.anon2, align 4
|
|
%ptradd3 = getelementptr inbounds i8, ptr %.anon, i64 8
|
|
%2 = load i32, ptr %ptradd3, align 4
|
|
store i32 %2, ptr %.anon4, align 4
|
|
%3 = load i32, ptr @rawsplat.x, align 4
|
|
%4 = load i32, ptr %.anon1, align 4
|
|
%mul = mul i32 %4, 0
|
|
%add = add i32 %3, %mul
|
|
store i32 %add, ptr @rawsplat.x, align 4
|
|
%5 = load i32, ptr @rawsplat.x, align 4
|
|
%6 = load i32, ptr %.anon2, align 4
|
|
%mul5 = mul i32 %6, 1
|
|
%add6 = add i32 %5, %mul5
|
|
store i32 %add6, ptr @rawsplat.x, align 4
|
|
%7 = load i32, ptr @rawsplat.x, align 4
|
|
%8 = load i32, ptr %.anon4, align 4
|
|
%mul7 = mul i32 %8, 2
|
|
%add8 = add i32 %7, %mul7
|
|
store i32 %add8, ptr @rawsplat.x, align 4
|
|
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %.anon9, ptr align 4 %y, i32 12, i1 false)
|
|
%9 = load i32, ptr %.anon9, align 4
|
|
store i32 %9, ptr %.anon10, align 4
|
|
%ptradd11 = getelementptr inbounds i8, ptr %.anon9, i64 4
|
|
%10 = load i32, ptr %ptradd11, align 4
|
|
store i32 %10, ptr %.anon12, align 4
|
|
%ptradd13 = getelementptr inbounds i8, ptr %.anon9, i64 8
|
|
%11 = load i32, ptr %ptradd13, align 4
|
|
store i32 %11, ptr %.anon14, align 4
|
|
%12 = load i32, ptr @rawsplat.x, align 4
|
|
%add15 = add i32 %12, 0
|
|
store i32 %add15, ptr @rawsplat.x, align 4
|
|
%13 = load i32, ptr @rawsplat.x, align 4
|
|
%14 = load i32, ptr %.anon10, align 4
|
|
%mul16 = mul i32 %14, 1
|
|
%add17 = add i32 %13, %mul16
|
|
store i32 %add17, ptr @rawsplat.x, align 4
|
|
%15 = load i32, ptr @rawsplat.x, align 4
|
|
%16 = load i32, ptr %.anon12, align 4
|
|
%mul18 = mul i32 %16, 2
|
|
%add19 = add i32 %15, %mul18
|
|
store i32 %add19, ptr @rawsplat.x, align 4
|
|
%17 = load i32, ptr @rawsplat.x, align 4
|
|
%18 = load i32, ptr %.anon14, align 4
|
|
%mul20 = mul i32 %18, 3
|
|
%add21 = add i32 %17, %mul20
|
|
store i32 %add21, ptr @rawsplat.x, align 4
|
|
%19 = insertvalue %"int[]" undef, ptr %y, 0
|
|
%20 = insertvalue %"int[]" %19, i64 3, 1
|
|
store %"int[]" %20, ptr %z, align 8
|
|
%21 = load %"int[]", ptr %z, align 8
|
|
%22 = extractvalue %"int[]" %21, 0
|
|
%ptradd22 = getelementptr inbounds i8, ptr %22, i64 4
|
|
%23 = insertvalue %"int[]" undef, ptr %ptradd22, 0
|
|
%24 = insertvalue %"int[]" %23, i64 2, 1
|
|
%25 = extractvalue %"int[]" %24, 0
|
|
%26 = load i32, ptr %25, align 4
|
|
store i32 %26, ptr %.anon23, align 4
|
|
%27 = extractvalue %"int[]" %24, 0
|
|
%ptradd24 = getelementptr inbounds i8, ptr %27, i64 4
|
|
%28 = load i32, ptr %ptradd24, align 4
|
|
store i32 %28, ptr %.anon25, align 4
|
|
%29 = load i32, ptr @rawsplat.x, align 4
|
|
%30 = load i32, ptr %.anon23, align 4
|
|
%mul26 = mul i32 %30, 0
|
|
%add27 = add i32 %29, %mul26
|
|
store i32 %add27, ptr @rawsplat.x, align 4
|
|
%31 = load i32, ptr @rawsplat.x, align 4
|
|
%32 = load i32, ptr %.anon25, align 4
|
|
%mul28 = mul i32 %32, 1
|
|
%add29 = add i32 %31, %mul28
|
|
store i32 %add29, ptr @rawsplat.x, align 4
|
|
%33 = load %"int[]", ptr %z, align 8
|
|
%34 = extractvalue %"int[]" %33, 0
|
|
%ptradd30 = getelementptr inbounds i8, ptr %34, i64 4
|
|
%35 = insertvalue %"int[]" undef, ptr %ptradd30, 0
|
|
%36 = insertvalue %"int[]" %35, i64 2, 1
|
|
%37 = extractvalue %"int[]" %36, 0
|
|
%38 = load i32, ptr %37, align 4
|
|
store i32 %38, ptr %.anon31, align 4
|
|
%39 = extractvalue %"int[]" %36, 0
|
|
%ptradd32 = getelementptr inbounds i8, ptr %39, i64 4
|
|
%40 = load i32, ptr %ptradd32, align 4
|
|
store i32 %40, ptr %.anon33, align 4
|
|
%41 = load i32, ptr @rawsplat.x, align 4
|
|
%add34 = add i32 %41, 0
|
|
store i32 %add34, ptr @rawsplat.x, align 4
|
|
%42 = load i32, ptr @rawsplat.x, align 4
|
|
%43 = load i32, ptr %.anon31, align 4
|
|
%mul35 = mul i32 %43, 1
|
|
%add36 = add i32 %42, %mul35
|
|
store i32 %add36, ptr @rawsplat.x, align 4
|
|
%44 = load i32, ptr @rawsplat.x, align 4
|
|
%45 = load i32, ptr %.anon33, align 4
|
|
%mul37 = mul i32 %45, 2
|
|
%add38 = add i32 %44, %mul37
|
|
store i32 %add38, ptr @rawsplat.x, align 4
|
|
%46 = load i32, ptr @rawsplat.x, align 4
|
|
%add39 = add i32 %46, 15
|
|
store i32 %add39, ptr @rawsplat.x, align 4
|
|
ret void
|
|
}
|