From b6bd51ed69f75930bbf9a80b5b8841d1517a6828 Mon Sep 17 00:00:00 2001 From: Noam Preil Date: Mon, 15 Jun 2020 17:55:24 -0400 Subject: [PATCH] Stage2/Testing: Move Transformation case to ZIRCase --- src-self-hosted/test.zig | 10 +-- test/stage2/zir.zig | 132 +++++++++++++++------------------------ 2 files changed, 57 insertions(+), 85 deletions(-) diff --git a/src-self-hosted/test.zig b/src-self-hosted/test.zig index c0fb52a74..a9a4c4fc4 100644 --- a/src-self-hosted/test.zig +++ b/src-self-hosted/test.zig @@ -141,21 +141,21 @@ pub const TestContext = struct { /// such as QEMU is required for tests to complete. /// target: std.zig.CrossTarget, - stages: []ZIRUpdate, + stages: []const ZIRUpdate, }; pub fn addZIRCase( ctx: *TestContext, name: []const u8, target: std.zig.CrossTarget, - stages: []ZIRUpdate, - ) !void { - const case = .{ + stages: []const ZIRUpdate, + ) void { + const case = ZIRCase{ .name = name, .target = target, .stages = stages, }; - try ctx.cases.append(case); + ctx.zir_cases.append(case) catch |err| std.debug.panic("Error: {}", .{err}); } pub fn addZIRCompareOutput( diff --git a/test/stage2/zir.zig b/test/stage2/zir.zig index bf5d4b8ea..a8cf4ca96 100644 --- a/test/stage2/zir.zig +++ b/test/stage2/zir.zig @@ -1,5 +1,6 @@ const std = @import("std"); const TestContext = @import("../../src-self-hosted/test.zig").TestContext; +const ZIRUpdate = TestContext.ZIRUpdate; // self-hosted does not yet support PE executable files / COFF object files // or mach-o files. So we do the ZIR transform test cases cross compiling for // x86_64-linux. @@ -9,86 +10,57 @@ const linux_x64 = std.zig.CrossTarget{ }; pub fn addCases(ctx: *TestContext) void { - ctx.addZIRTransform("referencing decls which appear later in the file", linux_x64, - \\@void = primitive(void) - \\@fnty = fntype([], @void, cc=C) - \\ - \\@9 = str("entry") - \\@10 = ref(@9) - \\@11 = export(@10, @entry) - \\ - \\@entry = fn(@fnty, { - \\ %11 = return() - \\}) - , - \\@void = primitive(void) - \\@fnty = fntype([], @void, cc=C) - \\@9 = str("entry") - \\@10 = ref(@9) - \\@unnamed$6 = str("entry") - \\@unnamed$7 = ref(@unnamed$6) - \\@unnamed$8 = export(@unnamed$7, @entry) - \\@unnamed$10 = fntype([], @void, cc=C) - \\@entry = fn(@unnamed$10, { - \\ %0 = return() - \\}) - \\ - ); - ctx.addZIRTransform("elemptr, add, cmp, condbr, return, breakpoint", linux_x64, - \\@void = primitive(void) - \\@usize = primitive(usize) - \\@fnty = fntype([], @void, cc=C) - \\@0 = int(0) - \\@1 = int(1) - \\@2 = int(2) - \\@3 = int(3) - \\ - \\@entry = fn(@fnty, { - \\ %a = str("\x32\x08\x01\x0a") - \\ %aref = ref(%a) - \\ %eptr0 = elemptr(%aref, @0) - \\ %eptr1 = elemptr(%aref, @1) - \\ %eptr2 = elemptr(%aref, @2) - \\ %eptr3 = elemptr(%aref, @3) - \\ %v0 = deref(%eptr0) - \\ %v1 = deref(%eptr1) - \\ %v2 = deref(%eptr2) - \\ %v3 = deref(%eptr3) - \\ %x0 = add(%v0, %v1) - \\ %x1 = add(%v2, %v3) - \\ %result = add(%x0, %x1) - \\ - \\ %expected = int(69) - \\ %ok = cmp(%result, eq, %expected) - \\ %10 = condbr(%ok, { - \\ %11 = return() - \\ }, { - \\ %12 = breakpoint() - \\ }) - \\}) - \\ - \\@9 = str("entry") - \\@10 = ref(@9) - \\@11 = export(@10, @entry) - , - \\@void = primitive(void) - \\@fnty = fntype([], @void, cc=C) - \\@0 = int(0) - \\@1 = int(1) - \\@2 = int(2) - \\@3 = int(3) - \\@unnamed$7 = fntype([], @void, cc=C) - \\@entry = fn(@unnamed$7, { - \\ %0 = return() - \\}) - \\@a = str("2\x08\x01\n") - \\@9 = str("entry") - \\@10 = ref(@9) - \\@unnamed$14 = str("entry") - \\@unnamed$15 = ref(@unnamed$14) - \\@unnamed$16 = export(@unnamed$15, @entry) - \\ - ); + ctx.addZIRCase("elemptr, add, cmp, condbr, return, breakpoint", linux_x64, &[_]ZIRUpdate{ZIRUpdate{ + .src = + \\@void = primitive(void) + \\@usize = primitive(usize) + \\@fnty = fntype([], @void, cc=C) + \\@0 = int(0) + \\@1 = int(1) + \\@2 = int(2) + \\@3 = int(3) + \\ + \\@entry = fn(@fnty, { + \\ %a = str("\x32\x08\x01\x0a") + \\ %aref = ref(%a) + \\ %eptr0 = elemptr(%aref, @0) + \\ %eptr1 = elemptr(%aref, @1) + \\ %eptr2 = elemptr(%aref, @2) + \\ %eptr3 = elemptr(%aref, @3) + \\ %v0 = deref(%eptr0) + \\ %v1 = deref(%eptr1) + \\ %v2 = deref(%eptr2) + \\ %v3 = deref(%eptr3) + \\ %x0 = add(%v0, %v1) + \\ %x1 = add(%v2, %v3) + \\ %result = add(%x0, %x1) + \\ + \\ %expected = int(69) + \\ %ok = cmp(%result, eq, %expected) + \\ %10 = condbr(%ok, { + \\ %11 = return() + \\ }, { + \\ %12 = breakpoint() + \\ }) + \\}) + \\ + \\@9 = str("entry") + \\@10 = ref(@9) + \\@11 = export(@10, @entry) + , + .case = .{ + .Transformation = + \\@0 = primitive(void) + \\@1 = fntype([], @0, cc=C) + \\@2 = fn(@1, { + \\ %0 = return() + \\}) + \\@3 = str("entry") + \\@4 = ref(@3) + \\@5 = export(@4, @2) + \\ + }, + }}); { var case = ctx.addZIRMulti("reference cycle with compile error in the cycle", linux_x64);