bin/spec: support "special flags"

This commit is contained in:
2025-05-30 11:42:42 +08:00
parent 49b51328e8
commit 2dc7d71c2b
3 changed files with 38 additions and 12 deletions

View File

@@ -96,6 +96,8 @@ default: # data model applies to all benchmarks
CPORTABILITY = -DSPEC_CASE_FLAG
FPORTABILITY = -Mbyteswapio
@@SpecialFlags@@
%if %{bits} == 32
intspeed,fpspeed:

View File

@@ -94,36 +94,58 @@ const uuid = crypto.randomUUID();
const prefix = path.resolve(argv.compilerPrefix);
const baseFlags = [
"-O3",
"-flto",
"-fuse-ld=lld",
...argv.simd ? ["-Wl,-plugin-opt,--mattr=simd"] : [],
];
const optimizeProfiles = {
base: [
"-O3",
"-flto=thin",
],
O2: [
"-O2",
]
};
const unalignedFlags = [
"-mllvm",
"-sw64-allows-misaligned-memory-accesses",
];
const optimizeFlags = optimizeProfiles[argv.optimizeProfile as (keyof (typeof optimizeProfiles))];
const spec = mkSPEC(path.resolve(argv.spec));
const sw64UnalignedFlag = "-sw64-allows-misaligned-memory-accesses";
function getSpecialFlags() {
if (argv.optimizeProfile === "base") {
return [
"648.exchange2_s:",
" EXTRA_OPTIMIZE = -mllvm -enable-ipsccp-pass",
" EXTRA_LDFLAGS = -Wl,-mllvm,-enable-ipsccp-pass",
].join("\n");
}
return "";
}
const specProc = await spawnSPECWithID(
spec,
{
optimize: [
...argv.optimizeProfile === "O2" ? ["-O2"] : baseFlags,
...argv.allowMisaligned ? unalignedFlags : [],
...optimizeFlags,
...argv.allowMisaligned ? ["-mllvm", sw64UnalignedFlag] : [],
...sw64TargetOptions({ simd: argv.simd }),
...["--sysroot", "/usr/sw/swgcc1030_native_tools"],
...argv.compilerSuite == "llvm" ? [sunway.mcpu(sunwayGeneration)] : [], // Only add -mcpu for llvm
],
ldflags: [
'-static',
`-L${path.resolve(prefix, 'lib')}`,
...optimizeFlags,
"-fuse-ld=lld",
...["--sysroot", "/usr/sw/swgcc1030_native_tools"],
...argv.optimizeProfile === "base" ? [
...argv.simd ? ["-Wl,-plugin-opt,-mattr=+simd"] : [],
...argv.allowMisaligned ? [`-Wl,-plugin-opt,${sw64UnalignedFlag}`] : [],
...sunwayGeneration === "8a" ? ["-Wl,-plugin-opt,-mattr=+core4"] : [],
] : [],
],
compilerPaths: toolchain(argv.compilerPrefix, argv.compilerSuite as ToolchainSuite),
libs: argv.compilerSuite === "llvm" ? cflangLibs(prefix) : [],
specialFlags: getSpecialFlags(),
},
{
setprocgroup: true,

View File

@@ -69,6 +69,7 @@ export interface ConfigOptions {
CC: string,
FC: string,
};
specialFlags: string,
}
// Pure function to render configuration
@@ -81,6 +82,7 @@ export const renderConfig = (options: ConfigOptions): string => {
.replace("@@CompilerCXX@@", options.compilerPaths.CXX)
.replace("@@CompilerFC@@", options.compilerPaths.FC)
.replace("@@LIBS@@", options.libs.join(" "))
.replace("@@SpecialFlags@@", options.specialFlags)
;
};