mix-object: auto bisect ref miscompilation
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
* 3. Link the set to an executable -> SPEC path, invoke "runcpu"
|
* 3. Link the set to an executable -> SPEC path, invoke "runcpu"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { binSearch } from "./algorithm";
|
import { autoBisect, binSearch } from "./algorithm";
|
||||||
import { pop2, SPEC, Bench, mkBench, mkSPEC, defaultSPEC, watchSPEC, parseSPECCSVResultsTable } from "./spec";
|
import { pop2, SPEC, Bench, mkBench, mkSPEC, defaultSPEC, watchSPEC, parseSPECCSVResultsTable } from "./spec";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { FLANG, LLVM_EXTRACT, PREFIX, SW_AUTOVEC, SYSROOT_PREFIX, projectRoot } from "./environment";
|
import { FLANG, LLVM_EXTRACT, PREFIX, SW_AUTOVEC, SYSROOT_PREFIX, projectRoot } from "./environment";
|
||||||
@@ -274,7 +274,7 @@ async function verifyGridFunction() {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
(async () => {
|
async function checkBaro() {
|
||||||
// It is known that object index == 207 is also wrong for pop2.
|
// It is known that object index == 207 is also wrong for pop2.
|
||||||
|
|
||||||
const spec = defaultSPEC;
|
const spec = defaultSPEC;
|
||||||
@@ -479,4 +479,65 @@ async function verifyGridFunction() {
|
|||||||
console.log("SPEC does not produce CSV output!");
|
console.log("SPEC does not produce CSV output!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
async function bisectRef() {
|
||||||
|
const spec = defaultSPEC;
|
||||||
|
|
||||||
|
const [vector, scalar] = buildDirs.map(dir => buildPathObj(spec.buildpath(pop2))(dir));
|
||||||
|
|
||||||
|
const pop2Bench = mkPop2Bench(spec);
|
||||||
|
|
||||||
|
|
||||||
|
return await autoBisect(0, pop2.objectNames.length, async (begin, end) => {
|
||||||
|
console.log(`Checking range [${begin}, ${end})`);
|
||||||
|
|
||||||
|
console.log("Linking pop2 executable");
|
||||||
|
await pop2Bench.link(names =>
|
||||||
|
names.map((name, index) => {
|
||||||
|
// These two objects are known to have miscompilation.
|
||||||
|
if (name === "grid.fppized.o" || index == 207) {
|
||||||
|
return scalar(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If index is in range [begin, end), use the vector version.
|
||||||
|
return begin <= index && index < end ? vector(name) : scalar(name);
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.log("Running SPEC2017 benchmark.");
|
||||||
|
|
||||||
|
const specProcess = spawn("runcpu",
|
||||||
|
[
|
||||||
|
...runcpuOptions({
|
||||||
|
benchmarks: [pop2Bench.benchData().num.toString()],
|
||||||
|
config: "clang-O2.cfg",
|
||||||
|
workload: "ref",
|
||||||
|
buildType: "nobuild",
|
||||||
|
outputFormat: ["csv", "config"]
|
||||||
|
}),
|
||||||
|
], { env: spec.getEnvironment() });
|
||||||
|
|
||||||
|
const result = await watchSPEC(specProcess);
|
||||||
|
|
||||||
|
if ("CSV" in result.outputFiles) {
|
||||||
|
assert(result.outputFiles.CSV.length > 0);
|
||||||
|
const Results = parseSPECCSVResultsTable((await fs.readFile(result.outputFiles.CSV[0]))
|
||||||
|
.toString("utf-8"));
|
||||||
|
const benchResult = Results[`${pop2.num}.${pop2.name}`];
|
||||||
|
if (benchResult) {
|
||||||
|
const status = benchResult.baseStatus;
|
||||||
|
console.log(`status of this run: ${status}`);
|
||||||
|
return status !== "S";
|
||||||
|
}
|
||||||
|
assert(false, "Result should have pop2 field!");
|
||||||
|
} else {
|
||||||
|
console.log("SPEC does not produce CSV output!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
console.log(await bisectRef());
|
||||||
})();
|
})();
|
||||||
|
|||||||
Reference in New Issue
Block a user