stage2: enable passing tests

This commit is contained in:
Andrew Kelley 2021-03-24 20:58:38 -07:00
parent 01bfd835bb
commit 12d18a36e5

View File

@ -622,197 +622,197 @@ pub fn addCases(ctx: *TestContext) !void {
);
// Labeled blocks (no conditional branch)
//case.addCompareOutput(
// \\export fn _start() noreturn {
// \\ assert(add(3, 4) == 20);
// \\
// \\ exit();
// \\}
// \\
// \\fn add(a: u32, b: u32) u32 {
// \\ const x: u32 = blk: {
// \\ const c = a + b; // 7
// \\ const d = a + c; // 10
// \\ const e = d + b; // 14
// \\ break :blk e;
// \\ };
// \\ const y = x + a; // 17
// \\ const z = y + a; // 20
// \\ return z;
// \\}
// \\
// \\pub fn assert(ok: bool) void {
// \\ if (!ok) unreachable; // assertion failure
// \\}
// \\
// \\fn exit() noreturn {
// \\ asm volatile ("syscall"
// \\ :
// \\ : [number] "{rax}" (231),
// \\ [arg1] "{rdi}" (0)
// \\ : "rcx", "r11", "memory"
// \\ );
// \\ unreachable;
// \\}
//,
// "",
//);
case.addCompareOutput(
\\export fn _start() noreturn {
\\ assert(add(3, 4) == 20);
\\
\\ exit();
\\}
\\
\\fn add(a: u32, b: u32) u32 {
\\ const x: u32 = blk: {
\\ const c = a + b; // 7
\\ const d = a + c; // 10
\\ const e = d + b; // 14
\\ break :blk e;
\\ };
\\ const y = x + a; // 17
\\ const z = y + a; // 20
\\ return z;
\\}
\\
\\pub fn assert(ok: bool) void {
\\ if (!ok) unreachable; // assertion failure
\\}
\\
\\fn exit() noreturn {
\\ asm volatile ("syscall"
\\ :
\\ : [number] "{rax}" (231),
\\ [arg1] "{rdi}" (0)
\\ : "rcx", "r11", "memory"
\\ );
\\ unreachable;
\\}
,
"",
);
// This catches a possible bug in the logic for re-using dying operands.
//case.addCompareOutput(
// \\export fn _start() noreturn {
// \\ assert(add(3, 4) == 116);
// \\
// \\ exit();
// \\}
// \\
// \\fn add(a: u32, b: u32) u32 {
// \\ const x: u32 = blk: {
// \\ const c = a + b; // 7
// \\ const d = a + c; // 10
// \\ const e = d + b; // 14
// \\ const f = d + e; // 24
// \\ const g = e + f; // 38
// \\ const h = f + g; // 62
// \\ const i = g + h; // 100
// \\ const j = i + d; // 110
// \\ break :blk j;
// \\ };
// \\ const y = x + a; // 113
// \\ const z = y + a; // 116
// \\ return z;
// \\}
// \\
// \\pub fn assert(ok: bool) void {
// \\ if (!ok) unreachable; // assertion failure
// \\}
// \\
// \\fn exit() noreturn {
// \\ asm volatile ("syscall"
// \\ :
// \\ : [number] "{rax}" (231),
// \\ [arg1] "{rdi}" (0)
// \\ : "rcx", "r11", "memory"
// \\ );
// \\ unreachable;
// \\}
//,
// "",
//);
case.addCompareOutput(
\\export fn _start() noreturn {
\\ assert(add(3, 4) == 116);
\\
\\ exit();
\\}
\\
\\fn add(a: u32, b: u32) u32 {
\\ const x: u32 = blk: {
\\ const c = a + b; // 7
\\ const d = a + c; // 10
\\ const e = d + b; // 14
\\ const f = d + e; // 24
\\ const g = e + f; // 38
\\ const h = f + g; // 62
\\ const i = g + h; // 100
\\ const j = i + d; // 110
\\ break :blk j;
\\ };
\\ const y = x + a; // 113
\\ const z = y + a; // 116
\\ return z;
\\}
\\
\\pub fn assert(ok: bool) void {
\\ if (!ok) unreachable; // assertion failure
\\}
\\
\\fn exit() noreturn {
\\ asm volatile ("syscall"
\\ :
\\ : [number] "{rax}" (231),
\\ [arg1] "{rdi}" (0)
\\ : "rcx", "r11", "memory"
\\ );
\\ unreachable;
\\}
,
"",
);
// Spilling registers to the stack.
//case.addCompareOutput(
// \\export fn _start() noreturn {
// \\ assert(add(3, 4) == 791);
// \\
// \\ exit();
// \\}
// \\
// \\fn add(a: u32, b: u32) u32 {
// \\ const x: u32 = blk: {
// \\ const c = a + b; // 7
// \\ const d = a + c; // 10
// \\ const e = d + b; // 14
// \\ const f = d + e; // 24
// \\ const g = e + f; // 38
// \\ const h = f + g; // 62
// \\ const i = g + h; // 100
// \\ const j = i + d; // 110
// \\ const k = i + j; // 210
// \\ const l = k + c; // 217
// \\ const m = l + d; // 227
// \\ const n = m + e; // 241
// \\ const o = n + f; // 265
// \\ const p = o + g; // 303
// \\ const q = p + h; // 365
// \\ const r = q + i; // 465
// \\ const s = r + j; // 575
// \\ const t = s + k; // 785
// \\ break :blk t;
// \\ };
// \\ const y = x + a; // 788
// \\ const z = y + a; // 791
// \\ return z;
// \\}
// \\
// \\pub fn assert(ok: bool) void {
// \\ if (!ok) unreachable; // assertion failure
// \\}
// \\
// \\fn exit() noreturn {
// \\ asm volatile ("syscall"
// \\ :
// \\ : [number] "{rax}" (231),
// \\ [arg1] "{rdi}" (0)
// \\ : "rcx", "r11", "memory"
// \\ );
// \\ unreachable;
// \\}
//,
// "",
//);
case.addCompareOutput(
\\export fn _start() noreturn {
\\ assert(add(3, 4) == 791);
\\
\\ exit();
\\}
\\
\\fn add(a: u32, b: u32) u32 {
\\ const x: u32 = blk: {
\\ const c = a + b; // 7
\\ const d = a + c; // 10
\\ const e = d + b; // 14
\\ const f = d + e; // 24
\\ const g = e + f; // 38
\\ const h = f + g; // 62
\\ const i = g + h; // 100
\\ const j = i + d; // 110
\\ const k = i + j; // 210
\\ const l = k + c; // 217
\\ const m = l + d; // 227
\\ const n = m + e; // 241
\\ const o = n + f; // 265
\\ const p = o + g; // 303
\\ const q = p + h; // 365
\\ const r = q + i; // 465
\\ const s = r + j; // 575
\\ const t = s + k; // 785
\\ break :blk t;
\\ };
\\ const y = x + a; // 788
\\ const z = y + a; // 791
\\ return z;
\\}
\\
\\pub fn assert(ok: bool) void {
\\ if (!ok) unreachable; // assertion failure
\\}
\\
\\fn exit() noreturn {
\\ asm volatile ("syscall"
\\ :
\\ : [number] "{rax}" (231),
\\ [arg1] "{rdi}" (0)
\\ : "rcx", "r11", "memory"
\\ );
\\ unreachable;
\\}
,
"",
);
// Reusing the registers of dead operands playing nicely with conditional branching.
//case.addCompareOutput(
// \\export fn _start() noreturn {
// \\ assert(add(3, 4) == 791);
// \\ assert(add(4, 3) == 79);
// \\
// \\ exit();
// \\}
// \\
// \\fn add(a: u32, b: u32) u32 {
// \\ const x: u32 = if (a < b) blk: {
// \\ const c = a + b; // 7
// \\ const d = a + c; // 10
// \\ const e = d + b; // 14
// \\ const f = d + e; // 24
// \\ const g = e + f; // 38
// \\ const h = f + g; // 62
// \\ const i = g + h; // 100
// \\ const j = i + d; // 110
// \\ const k = i + j; // 210
// \\ const l = k + c; // 217
// \\ const m = l + d; // 227
// \\ const n = m + e; // 241
// \\ const o = n + f; // 265
// \\ const p = o + g; // 303
// \\ const q = p + h; // 365
// \\ const r = q + i; // 465
// \\ const s = r + j; // 575
// \\ const t = s + k; // 785
// \\ break :blk t;
// \\ } else blk: {
// \\ const t = b + b + a; // 10
// \\ const c = a + t; // 14
// \\ const d = c + t; // 24
// \\ const e = d + t; // 34
// \\ const f = e + t; // 44
// \\ const g = f + t; // 54
// \\ const h = c + g; // 68
// \\ break :blk h + b; // 71
// \\ };
// \\ const y = x + a; // 788, 75
// \\ const z = y + a; // 791, 79
// \\ return z;
// \\}
// \\
// \\pub fn assert(ok: bool) void {
// \\ if (!ok) unreachable; // assertion failure
// \\}
// \\
// \\fn exit() noreturn {
// \\ asm volatile ("syscall"
// \\ :
// \\ : [number] "{rax}" (231),
// \\ [arg1] "{rdi}" (0)
// \\ : "rcx", "r11", "memory"
// \\ );
// \\ unreachable;
// \\}
//,
// "",
//);
case.addCompareOutput(
\\export fn _start() noreturn {
\\ assert(add(3, 4) == 791);
\\ assert(add(4, 3) == 79);
\\
\\ exit();
\\}
\\
\\fn add(a: u32, b: u32) u32 {
\\ const x: u32 = if (a < b) blk: {
\\ const c = a + b; // 7
\\ const d = a + c; // 10
\\ const e = d + b; // 14
\\ const f = d + e; // 24
\\ const g = e + f; // 38
\\ const h = f + g; // 62
\\ const i = g + h; // 100
\\ const j = i + d; // 110
\\ const k = i + j; // 210
\\ const l = k + c; // 217
\\ const m = l + d; // 227
\\ const n = m + e; // 241
\\ const o = n + f; // 265
\\ const p = o + g; // 303
\\ const q = p + h; // 365
\\ const r = q + i; // 465
\\ const s = r + j; // 575
\\ const t = s + k; // 785
\\ break :blk t;
\\ } else blk: {
\\ const t = b + b + a; // 10
\\ const c = a + t; // 14
\\ const d = c + t; // 24
\\ const e = d + t; // 34
\\ const f = e + t; // 44
\\ const g = f + t; // 54
\\ const h = c + g; // 68
\\ break :blk h + b; // 71
\\ };
\\ const y = x + a; // 788, 75
\\ const z = y + a; // 791, 79
\\ return z;
\\}
\\
\\pub fn assert(ok: bool) void {
\\ if (!ok) unreachable; // assertion failure
\\}
\\
\\fn exit() noreturn {
\\ asm volatile ("syscall"
\\ :
\\ : [number] "{rax}" (231),
\\ [arg1] "{rdi}" (0)
\\ : "rcx", "r11", "memory"
\\ );
\\ unreachable;
\\}
,
"",
);
// Character literals and multiline strings.
case.addCompareOutput(