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...@@ -311,19 +311,35 @@ ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machi
311 }311 }
312 });312 });
313313
314 //pass_builder.registerOptimizerEarlyEPCallback([&](ModulePassManager &module_pm, OptimizationLevel OL) {314 const bool early_san = options->is_debug;
315 //});315
316316 pass_builder.registerOptimizerEarlyEPCallback([&](ModulePassManager &module_pm, OptimizationLevel OL) {
317 pass_builder.registerOptimizerLastEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level) {317 if (early_san) {
318 // Code coverage instrumentation.318 // Code coverage instrumentation.
319 if (options->sancov) {319 if (options->sancov) {
320 module_pm.addPass(SanitizerCoveragePass(getSanCovOptions(options->coverage)));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 }
321 }328 }
329 });
322330
323 // Thread sanitizer331 pass_builder.registerOptimizerLastEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level) {
324 if (options->tsan) {332 if (!early_san) {
325 module_pm.addPass(ModuleThreadSanitizerPass());333 // Code coverage instrumentation.
326 module_pm.addPass(createModuleToFunctionPassAdaptor(ThreadSanitizerPass()));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 }
327 }343 }
328344
329 // Verify the output345 // Verify the output