authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-02-11 11:13:41-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-02-11 11:13:41-08:00
log31c132081857b126524ccd261da331c9b1bda856
treef456655cf908a14d31541282f2af13fb30541741
parent4162f401cbaa2013eae8fa518cf255ce4c5c952b

ZigLLVMTargetMachineEmitToFile: schedule sancov pass depending on mode

In debug mode, schedule it early. In release modes, schedule it late.

1 files changed, 27 insertions(+), 11 deletions(-)

src/zig_llvm.cpp+27-11
......@@ -311,19 +311,35 @@ ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machi
311311 }
312312 });
313313
314 //pass_builder.registerOptimizerEarlyEPCallback([&](ModulePassManager &module_pm, OptimizationLevel OL) {
315 //});
316
317 pass_builder.registerOptimizerLastEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level) {
318 // Code coverage instrumentation.
319 if (options->sancov) {
320 module_pm.addPass(SanitizerCoveragePass(getSanCovOptions(options->coverage)));
314 const bool early_san = options->is_debug;
315
316 pass_builder.registerOptimizerEarlyEPCallback([&](ModulePassManager &module_pm, OptimizationLevel OL) {
317 if (early_san) {
318 // Code coverage instrumentation.
319 if (options->sancov) {
320 module_pm.addPass(SanitizerCoveragePass(getSanCovOptions(options->coverage)));
321 }
322
323 // Thread sanitizer
324 if (options->tsan) {
325 module_pm.addPass(ModuleThreadSanitizerPass());
326 module_pm.addPass(createModuleToFunctionPassAdaptor(ThreadSanitizerPass()));
327 }
321328 }
329 });
322330
323 // Thread sanitizer
324 if (options->tsan) {
325 module_pm.addPass(ModuleThreadSanitizerPass());
326 module_pm.addPass(createModuleToFunctionPassAdaptor(ThreadSanitizerPass()));
331 pass_builder.registerOptimizerLastEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level) {
332 if (!early_san) {
333 // Code coverage instrumentation.
334 if (options->sancov) {
335 module_pm.addPass(SanitizerCoveragePass(getSanCovOptions(options->coverage)));
336 }
337
338 // Thread sanitizer
339 if (options->tsan) {
340 module_pm.addPass(ModuleThreadSanitizerPass());
341 module_pm.addPass(createModuleToFunctionPassAdaptor(ThreadSanitizerPass()));
342 }
327343 }
328344
329345 // Verify the output