Skip to content

Commit 337c678

Browse files
committed
Make warn missed transformations pass optional (JuliaLang#54871)
This makes the `WarnMissedTransformationsPass` compiler pass optional and off by default. This is a backport of 1fc9fe1.
1 parent 884c71e commit 337c678

File tree

4 files changed

+32
-6
lines changed

4 files changed

+32
-6
lines changed

src/codegen-stubs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ JL_DLLEXPORT uint64_t jl_getUnwindInfo_fallback(uint64_t dwAddr)
110110
JL_DLLEXPORT void jl_add_optimization_passes_fallback(void *PM, int opt_level, int lower_intrinsics) UNAVAILABLE
111111

112112
JL_DLLEXPORT void jl_build_newpm_pipeline_fallback(void *MPM, void *PB, int Speedup, int Size,
113-
int lower_intrinsics, int dump_native, int external_use, int llvm_only) UNAVAILABLE
113+
int lower_intrinsics, int dump_native, int external_use, int llvm_only, int warn_missed_transformations) UNAVAILABLE
114114

115115
JL_DLLEXPORT void jl_register_passbuilder_callbacks_fallback(void *PB) { }
116116

src/jitlayers.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,15 @@ struct OptimizationOptions {
9090
bool dump_native;
9191
bool external_use;
9292
bool llvm_only;
93+
bool warn_missed_transformations;
9394

9495
static constexpr OptimizationOptions defaults(
9596
bool lower_intrinsics=true,
9697
bool dump_native=false,
9798
bool external_use=false,
98-
bool llvm_only=false) {
99-
return {lower_intrinsics, dump_native, external_use, llvm_only};
99+
bool llvm_only=false,
100+
bool warn_missed_transformations=false) {
101+
return {lower_intrinsics, dump_native, external_use, llvm_only, warn_missed_transformations};
100102
}
101103
};
102104

src/pipeline.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,9 @@ static void buildPipeline(ModulePassManager &MPM, PassBuilder *PB, OptimizationL
568568
if (O.getSpeedupLevel() >= 2) {
569569
buildVectorPipeline(FPM, PB, O, options);
570570
}
571-
FPM.addPass(WarnMissedTransformationsPass());
571+
if (options.warn_missed_transformations) {
572+
FPM.addPass(WarnMissedTransformationsPass());
573+
}
572574
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM)));
573575
}
574576
buildIntrinsicLoweringPipeline(MPM, PB, O, options);
@@ -577,7 +579,8 @@ static void buildPipeline(ModulePassManager &MPM, PassBuilder *PB, OptimizationL
577579
}
578580

579581
extern "C" JL_DLLEXPORT_CODEGEN void jl_build_newpm_pipeline_impl(void *MPM, void *PB, int Speedup, int Size,
580-
int lower_intrinsics, int dump_native, int external_use, int llvm_only) JL_NOTSAFEPOINT
582+
int lower_intrinsics, int dump_native, int external_use, int llvm_only,
583+
int warn_missed_transformations) JL_NOTSAFEPOINT
581584
{
582585
OptimizationLevel O;
583586
switch (Size) {
@@ -604,7 +607,7 @@ extern "C" JL_DLLEXPORT_CODEGEN void jl_build_newpm_pipeline_impl(void *MPM, voi
604607
}
605608
}
606609
buildPipeline(*reinterpret_cast<ModulePassManager*>(MPM), reinterpret_cast<PassBuilder*>(PB), O,
607-
OptimizationOptions{!!lower_intrinsics, !!dump_native, !!external_use, !!llvm_only});
610+
OptimizationOptions{!!lower_intrinsics, !!dump_native, !!external_use, !!llvm_only, !!warn_missed_transformations});
608611
}
609612

610613
#undef JULIA_PASS
@@ -779,6 +782,7 @@ static llvm::Optional<std::pair<OptimizationLevel, OptimizationOptions>> parseJu
779782
OPTION(dump_native),
780783
OPTION(external_use),
781784
OPTION(llvm_only)
785+
OPTION(warn_missed_transformations)
782786
#undef OPTION
783787
};
784788
while (!name.empty()) {

test/misc.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1402,3 +1402,23 @@ end
14021402
GC.gc(true); yield()
14031403
@test in_fin[]
14041404
end
1405+
1406+
@testset "Silenced missed transformations" begin
1407+
# Ensure the WarnMissedTransformationsPass is not on by default
1408+
src = """
1409+
@noinline iteration(i) = (@show(i); return nothing)
1410+
@eval function loop_unroll_full_fail(N)
1411+
for i in 1:N
1412+
iteration(i)
1413+
\$(Expr(:loopinfo, (Symbol("llvm.loop.unroll.full"), 1)))
1414+
end
1415+
end
1416+
loop_unroll_full_fail(3)
1417+
"""
1418+
out_err = mktemp() do _, f
1419+
run(`$(Base.julia_cmd()) -e "$src"`, devnull, devnull, f)
1420+
seekstart(f)
1421+
read(f, String)
1422+
end
1423+
@test !occursin("loop not unrolled", out_err)
1424+
end

0 commit comments

Comments
 (0)