aboutsummaryrefslogtreecommitdiff
path: root/test/tests.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-01-22 17:13:31 -0500
committerAndrew Kelley <andrew@ziglang.org>2020-01-22 17:13:31 -0500
commit48c7e6c48b81e6e0423b3e4aea238402189eecb7 (patch)
tree1d585eaa73a43b473809ffdc85b4207e2e72ee9c /test/tests.zig
parentc6bfece1d54c54024397d7aff9f25087cc4dbfda (diff)
downloadzig-48c7e6c48b81e6e0423b3e4aea238402189eecb7.tar.gz
zig-48c7e6c48b81e6e0423b3e4aea238402189eecb7.zip
std.Target.CpuFeatures is now a struct with both CPU and feature set
Previously it was a tagged union which was one of: * baseline * a specific CPU * a set of features Now, it's possible to have a CPU but also modify the CPU's feature set on top of that. This is closer to what LLVM does. This is more correct because Zig's notion of CPUs (and LLVM's) is not exact CPU models. For example "skylake" is not one very specific model; there are several different pieces of hardware that match "skylake" that have different feature sets enabled.
Diffstat (limited to 'test/tests.zig')
-rw-r--r--test/tests.zig416
1 files changed, 220 insertions, 196 deletions
diff --git a/test/tests.zig b/test/tests.zig
index 7c97e46e02..1ec25d11ec 100644
--- a/test/tests.zig
+++ b/test/tests.zig
@@ -38,236 +38,260 @@ const TestTarget = struct {
disable_native: bool = false,
};
-const test_targets = [_]TestTarget{
- TestTarget{},
- TestTarget{
- .link_libc = true,
- },
- TestTarget{
- .single_threaded = true,
- },
-
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = .x86_64,
- .abi = .none,
+const test_targets = blk: {
+ // getBaselineCpuFeatures calls populateDependencies which has a O(N ^ 2) algorithm
+ // (where N is roughly 160, which technically makes it O(1), but it adds up to a
+ // lot of branches)
+ @setEvalBranchQuota(50000);
+ break :blk [_]TestTarget{
+ TestTarget{},
+ TestTarget{
+ .link_libc = true,
+ },
+ TestTarget{
+ .single_threaded = true,
+ },
+
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = .x86_64,
+ .abi = .none,
+ .cpu_features = Target.Arch.x86_64.getBaselineCpuFeatures(),
+ },
},
},
- },
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = .x86_64,
- .abi = .gnu,
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = .x86_64,
+ .abi = .gnu,
+ .cpu_features = Target.Arch.x86_64.getBaselineCpuFeatures(),
+ },
},
+ .link_libc = true,
},
- .link_libc = true,
- },
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = .x86_64,
- .abi = .musl,
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = .x86_64,
+ .cpu_features = Target.Arch.x86_64.getBaselineCpuFeatures(),
+ .abi = .musl,
+ },
},
+ .link_libc = true,
},
- .link_libc = true,
- },
-
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = .i386,
- .abi = .none,
+
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = .i386,
+ .cpu_features = Target.Arch.i386.getBaselineCpuFeatures(),
+ .abi = .none,
+ },
},
},
- },
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = .i386,
- .abi = .musl,
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = .i386,
+ .cpu_features = Target.Arch.i386.getBaselineCpuFeatures(),
+ .abi = .musl,
+ },
},
+ .link_libc = true,
},
- .link_libc = true,
- },
-
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = builtin.Arch{ .aarch64 = builtin.Arch.Arm64.v8_5a },
- .abi = .none,
+
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = Target.Arch{ .aarch64 = .v8_5a },
+ .cpu_features = (Target.Arch{ .aarch64 = .v8_5a }).getBaselineCpuFeatures(),
+ .abi = .none,
+ },
},
},
- },
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = builtin.Arch{ .aarch64 = builtin.Arch.Arm64.v8_5a },
- .abi = .musl,
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = Target.Arch{ .aarch64 = .v8_5a },
+ .cpu_features = (Target.Arch{ .aarch64 = .v8_5a }).getBaselineCpuFeatures(),
+ .abi = .musl,
+ },
},
+ .link_libc = true,
},
- .link_libc = true,
- },
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = builtin.Arch{ .aarch64 = builtin.Arch.Arm64.v8_5a },
- .abi = .gnu,
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = Target.Arch{ .aarch64 = .v8_5a },
+ .cpu_features = (Target.Arch{ .aarch64 = .v8_5a }).getBaselineCpuFeatures(),
+ .abi = .gnu,
+ },
},
+ .link_libc = true,
},
- .link_libc = true,
- },
-
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = builtin.Arch{ .arm = builtin.Arch.Arm32.v8_5a },
- .abi = .none,
+
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = Target.Arch{ .arm = .v8_5a },
+ .cpu_features = (Target.Arch{ .arm = .v8_5a }).getBaselineCpuFeatures(),
+ .abi = .none,
+ },
},
},
- },
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = builtin.Arch{ .arm = builtin.Arch.Arm32.v8_5a },
- .abi = .musleabihf,
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = Target.Arch{ .arm = .v8_5a },
+ .cpu_features = (Target.Arch{ .arm = .v8_5a }).getBaselineCpuFeatures(),
+ .abi = .musleabihf,
+ },
},
+ .link_libc = true,
},
- .link_libc = true,
- },
- // TODO https://github.com/ziglang/zig/issues/3287
- //TestTarget{
- // .target = Target{
- // .Cross = CrossTarget{
- // .os = .linux,
- // .arch = builtin.Arch{ .arm = builtin.Arch.Arm32.v8_5a },
- // .abi = .gnueabihf,
- // },
- // },
- // .link_libc = true,
- //},
-
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = .mipsel,
- .abi = .none,
+ // TODO https://github.com/ziglang/zig/issues/3287
+ //TestTarget{
+ // .target = Target{
+ // .Cross = CrossTarget{
+ // .os = .linux,
+ // .arch = Target.Arch{ .arm = .v8_5a },
+ // .cpu_features = (Target.Arch{ .arm = .v8_5a }).getBaselineCpuFeatures(),
+ // .abi = .gnueabihf,
+ // },
+ // },
+ // .link_libc = true,
+ //},
+
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = .mipsel,
+ .cpu_features = Target.Arch.mipsel.getBaselineCpuFeatures(),
+ .abi = .none,
+ },
},
},
- },
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .linux,
- .arch = .mipsel,
- .abi = .musl,
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .linux,
+ .arch = .mipsel,
+ .cpu_features = Target.Arch.mipsel.getBaselineCpuFeatures(),
+ .abi = .musl,
+ },
},
+ .link_libc = true,
},
- .link_libc = true,
- },
-
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .macosx,
- .arch = .x86_64,
- .abi = .gnu,
+
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .macosx,
+ .arch = .x86_64,
+ .cpu_features = Target.Arch.x86_64.getBaselineCpuFeatures(),
+ .abi = .gnu,
+ },
},
+ // TODO https://github.com/ziglang/zig/issues/3295
+ .disable_native = true,
},
- // TODO https://github.com/ziglang/zig/issues/3295
- .disable_native = true,
- },
-
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .windows,
- .arch = .i386,
- .abi = .msvc,
+
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .windows,
+ .arch = .i386,
+ .cpu_features = Target.Arch.i386.getBaselineCpuFeatures(),
+ .abi = .msvc,
+ },
},
},
- },
-
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .windows,
- .arch = .x86_64,
- .abi = .msvc,
+
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .windows,
+ .arch = .x86_64,
+ .cpu_features = Target.Arch.x86_64.getBaselineCpuFeatures(),
+ .abi = .msvc,
+ },
},
},
- },
-
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .windows,
- .arch = .i386,
- .abi = .gnu,
+
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .windows,
+ .arch = .i386,
+ .cpu_features = Target.Arch.i386.getBaselineCpuFeatures(),
+ .abi = .gnu,
+ },
},
+ .link_libc = true,
},
- .link_libc = true,
- },
-
- TestTarget{
- .target = Target{
- .Cross = CrossTarget{
- .os = .windows,
- .arch = .x86_64,
- .abi = .gnu,
+
+ TestTarget{
+ .target = Target{
+ .Cross = CrossTarget{
+ .os = .windows,
+ .arch = .x86_64,
+ .cpu_features = Target.Arch.x86_64.getBaselineCpuFeatures(),
+ .abi = .gnu,
+ },
},
+ .link_libc = true,
+ },
+
+ // Do the release tests last because they take a long time
+ TestTarget{
+ .mode = .ReleaseFast,
+ },
+ TestTarget{
+ .link_libc = true,
+ .mode = .ReleaseFast,
},
- .link_libc = true,
- },
-
- // Do the release tests last because they take a long time
- TestTarget{
- .mode = .ReleaseFast,
- },
- TestTarget{
- .link_libc = true,
- .mode = .ReleaseFast,
- },
- TestTarget{
- .mode = .ReleaseFast,
- .single_threaded = true,
- },
-
- TestTarget{
- .mode = .ReleaseSafe,
- },
- TestTarget{
- .link_libc = true,
- .mode = .ReleaseSafe,
- },
- TestTarget{
- .mode = .ReleaseSafe,
- .single_threaded = true,
- },
-
- TestTarget{
- .mode = .ReleaseSmall,
- },
- TestTarget{
- .link_libc = true,
- .mode = .ReleaseSmall,
- },
- TestTarget{
- .mode = .ReleaseSmall,
- .single_threaded = true,
- },
+ TestTarget{
+ .mode = .ReleaseFast,
+ .single_threaded = true,
+ },
+
+ TestTarget{
+ .mode = .ReleaseSafe,
+ },
+ TestTarget{
+ .link_libc = true,
+ .mode = .ReleaseSafe,
+ },
+ TestTarget{
+ .mode = .ReleaseSafe,
+ .single_threaded = true,
+ },
+
+ TestTarget{
+ .mode = .ReleaseSmall,
+ },
+ TestTarget{
+ .link_libc = true,
+ .mode = .ReleaseSmall,
+ },
+ TestTarget{
+ .mode = .ReleaseSmall,
+ .single_threaded = true,
+ },
+ };
};
const max_stdout_size = 1 * 1024 * 1024; // 1 MB