Skip to content

feat: add SKIP_OPTIMIZATIONS option to CMakeLists.txt #7569

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ option(EMSCRIPTEN_ENABLE_SINGLE_FILE "Enable SINGLE_FILE mode in emscripten buil

option(ENABLE_WERROR "Enable -Werror" ON)

# Turn this on to skip all optimizations but leave ones which just print
option(SKIP_OPTIMIZATIONS "Skip all optimizations but Print* ones" OFF)

# For git users, attempt to generate a more useful version string
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
find_package(Git QUIET REQUIRED)
Expand Down Expand Up @@ -480,6 +483,10 @@ if(BUILD_MIMALLOC)
endif()
endif()

if(SKIP_OPTIMIZATIONS)
add_definitions(-DSKIP_OPTIMIZATIONS)
endif()

add_subdirectory(src/ir)
add_subdirectory(src/asmjs)
add_subdirectory(src/cfg)
Expand Down
232 changes: 120 additions & 112 deletions src/passes/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,126 +17,134 @@ set(passes_SOURCES
pass.cpp
string-utils.cpp
test_passes.cpp
AbstractTypeRefining.cpp
AlignmentLowering.cpp
Asyncify.cpp
AvoidReinterprets.cpp
CoalesceLocals.cpp
CodePushing.cpp
CodeFolding.cpp
ConstantFieldPropagation.cpp
ConstHoisting.cpp
DataFlowOpts.cpp
DeadArgumentElimination.cpp
DeadCodeElimination.cpp
DeAlign.cpp
DebugLocationPropagation.cpp
DeNaN.cpp
Directize.cpp
DuplicateImportElimination.cpp
DuplicateFunctionElimination.cpp
DWARF.cpp
EncloseWorld.cpp
ExtractFunction.cpp
Flatten.cpp
FuncCastEmulation.cpp
GenerateDynCalls.cpp
GlobalEffects.cpp
GlobalRefining.cpp
GlobalStructInference.cpp
GlobalTypeOptimization.cpp
GUFA.cpp
hash-stringify-walker.cpp
Outlining.cpp
Heap2Local.cpp
HeapStoreOptimization.cpp
I64ToI32Lowering.cpp
Inlining.cpp
InstrumentLocals.cpp
InstrumentMemory.cpp
Intrinsics.cpp
J2CLItableMerging.cpp
J2CLOpts.cpp
JSPI.cpp
LegalizeJSInterface.cpp
LimitSegments.cpp
LLVMMemoryCopyFillLowering.cpp
LocalCSE.cpp
LocalSubtyping.cpp
LogExecution.cpp
LoopInvariantCodeMotion.cpp
Memory64Lowering.cpp
MemoryPacking.cpp
MergeBlocks.cpp
MergeSimilarFunctions.cpp
MergeLocals.cpp
Metrics.cpp
MinifyImportsAndExports.cpp
MinimizeRecGroups.cpp
Monomorphize.cpp
MultiMemoryLowering.cpp
NameList.cpp
NameTypes.cpp
NoInline.cpp
LLVMNontrappingFPToIntLowering.cpp
OnceReduction.cpp
OptimizeAddedConstants.cpp
OptimizeCasts.cpp
OptimizeInstructions.cpp
OptimizeForJS.cpp
PickLoadSigns.cpp
Poppify.cpp
PostEmscripten.cpp
Precompute.cpp
Print.cpp
PrintCallGraph.cpp
PrintFeatures.cpp
PrintFunctionMap.cpp
RoundTrip.cpp
SetGlobals.cpp
SignaturePruning.cpp
SignatureRefining.cpp
SignExtLowering.cpp
StringLifting.cpp
StringLowering.cpp
Strip.cpp
StripTargetFeatures.cpp
TraceCalls.cpp
RedundantSetElimination.cpp
RemoveImports.cpp
RemoveMemoryInit.cpp
RemoveNonJSOps.cpp
RemoveUnusedBrs.cpp
RemoveUnusedNames.cpp
RemoveUnusedModuleElements.cpp
RemoveUnusedTypes.cpp
ReorderFunctions.cpp
ReorderGlobals.cpp
ReorderLocals.cpp
ReReloop.cpp
TrapMode.cpp
TypeGeneralizing.cpp
TypeRefining.cpp
TypeMerging.cpp
TypeSSA.cpp
SafeHeap.cpp
SeparateDataSegments.cpp
SimplifyGlobals.cpp
SimplifyLocals.cpp
Souperify.cpp
SpillPointers.cpp
StackCheck.cpp
StripEH.cpp
SSAify.cpp
TupleOptimization.cpp
TranslateEH.cpp
TypeFinalizing.cpp
Unsubtyping.cpp
Untee.cpp
Vacuum.cpp
${CMAKE_CURRENT_BINARY_DIR}/WasmIntrinsics.cpp
${passes_HEADERS}
)

if(NOT SKIP_OPTIMIZATIONS)
list(
APPEND
passes_SOURCES
AbstractTypeRefining.cpp
AlignmentLowering.cpp
Asyncify.cpp
AvoidReinterprets.cpp
CoalesceLocals.cpp
CodePushing.cpp
CodeFolding.cpp
ConstantFieldPropagation.cpp
ConstHoisting.cpp
DataFlowOpts.cpp
DeadArgumentElimination.cpp
DeadCodeElimination.cpp
DeAlign.cpp
DebugLocationPropagation.cpp
DeNaN.cpp
Directize.cpp
DuplicateImportElimination.cpp
DuplicateFunctionElimination.cpp
DWARF.cpp
EncloseWorld.cpp
ExtractFunction.cpp
Flatten.cpp
FuncCastEmulation.cpp
GenerateDynCalls.cpp
GlobalEffects.cpp
GlobalRefining.cpp
GlobalStructInference.cpp
GlobalTypeOptimization.cpp
GUFA.cpp
hash-stringify-walker.cpp
Outlining.cpp
Heap2Local.cpp
HeapStoreOptimization.cpp
I64ToI32Lowering.cpp
Inlining.cpp
InstrumentLocals.cpp
InstrumentMemory.cpp
Intrinsics.cpp
J2CLItableMerging.cpp
J2CLOpts.cpp
JSPI.cpp
LegalizeJSInterface.cpp
LimitSegments.cpp
LLVMMemoryCopyFillLowering.cpp
LocalCSE.cpp
LocalSubtyping.cpp
LogExecution.cpp
LoopInvariantCodeMotion.cpp
Memory64Lowering.cpp
MemoryPacking.cpp
MergeBlocks.cpp
MergeSimilarFunctions.cpp
MergeLocals.cpp
Metrics.cpp
MinifyImportsAndExports.cpp
MinimizeRecGroups.cpp
Monomorphize.cpp
MultiMemoryLowering.cpp
NameList.cpp
NameTypes.cpp
NoInline.cpp
LLVMNontrappingFPToIntLowering.cpp
OnceReduction.cpp
OptimizeAddedConstants.cpp
OptimizeCasts.cpp
OptimizeInstructions.cpp
OptimizeForJS.cpp
PickLoadSigns.cpp
Poppify.cpp
PostEmscripten.cpp
Precompute.cpp
RoundTrip.cpp
SetGlobals.cpp
SignaturePruning.cpp
SignatureRefining.cpp
SignExtLowering.cpp
StringLowering.cpp
Strip.cpp
StripTargetFeatures.cpp
TraceCalls.cpp
RedundantSetElimination.cpp
RemoveImports.cpp
RemoveMemoryInit.cpp
RemoveNonJSOps.cpp
RemoveUnusedBrs.cpp
RemoveUnusedNames.cpp
RemoveUnusedModuleElements.cpp
RemoveUnusedTypes.cpp
ReorderFunctions.cpp
ReorderGlobals.cpp
ReorderLocals.cpp
ReReloop.cpp
TrapMode.cpp
TypeGeneralizing.cpp
TypeRefining.cpp
TypeMerging.cpp
TypeSSA.cpp
SafeHeap.cpp
SeparateDataSegments.cpp
SimplifyGlobals.cpp
SimplifyLocals.cpp
Souperify.cpp
SpillPointers.cpp
StackCheck.cpp
StripEH.cpp
SSAify.cpp
TupleOptimization.cpp
TranslateEH.cpp
TypeFinalizing.cpp
Unsubtyping.cpp
Untee.cpp
Vacuum.cpp
)
endif()

# The below condition is intended for removal once the suffix_tree and
# suffix_tree_node source files no longer depend on LLVM code in the
# third_party folder
Expand Down
69 changes: 35 additions & 34 deletions src/passes/pass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,37 @@ bool PassRegistry::isPassHidden(std::string name) {
// PassRunner

void PassRegistry::registerPasses() {
registerPass("print", "print in s-expression format", createPrinterPass);
registerPass("print-minified",
"print in minified s-expression format",
createMinifiedPrinterPass);
registerPass("print-features",
"print options for enabled features",
createPrintFeaturesPass);
registerPass(
"print-full", "print in full s-expression format", createFullPrinterPass);
registerPass(
"print-call-graph", "print call graph", createPrintCallGraphPass);

// Register PrintFunctionMap using its normal name.
registerPass("print-function-map",
"print a map of function indexes to names",
createPrintFunctionMapPass);
// Also register it as "symbolmap" so that wasm-opt --symbolmap=foo is the
// same as wasm-as --symbolmap=foo even though the latter is not a pass
// (wasm-as cannot run arbitrary passes).
// TODO: switch emscripten to this name, then remove the old one
registerPass(
"symbolmap", "(alias for print-function-map)", createPrintFunctionMapPass);

// Register passes used for internal testing. These don't show up in --help.
registerTestPass("catch-pop-fixup",
"fixup nested pops within catches",
createCatchPopFixupPass);
registerTestPass("experimental-type-generalizing",
"generalize types (not yet sound)",
createTypeGeneralizingPass);
#ifndef SKIP_OPTIMIZATIONS
registerPass("alignment-lowering",
"lower unaligned loads and stores to smaller aligned ones",
createAlignmentLoweringPass);
Expand Down Expand Up @@ -383,32 +414,9 @@ void PassRegistry::registerPasses() {
"computes compile-time evaluatable expressions and propagates "
"them through locals",
createPrecomputePropagatePass);
registerPass("print", "print in s-expression format", createPrinterPass);
registerPass("print-minified",
"print in minified s-expression format",
createMinifiedPrinterPass);
registerPass("print-features",
"print options for enabled features",
createPrintFeaturesPass);
registerPass(
"print-full", "print in full s-expression format", createFullPrinterPass);
registerPass(
"print-call-graph", "print call graph", createPrintCallGraphPass);

// Register PrintFunctionMap using its normal name.
registerPass("print-function-map",
"print a map of function indexes to names",
createPrintFunctionMapPass);
// Also register it as "symbolmap" so that wasm-opt --symbolmap=foo is the
// same as wasm-as --symbolmap=foo even though the latter is not a pass
// (wasm-as cannot run arbitrary passes).
// TODO: switch emscripten to this name, then remove the old one
registerPass(
"symbolmap", "(alias for print-function-map)", createPrintFunctionMapPass);

registerPass("propagate-globals-globally",
"propagate global values to other globals (useful for tests)",
createPropagateGlobalsGloballyPass);
registerPass("propagate-globals-globally",
"propagate global values to other globals (useful for tests)",
createPropagateGlobalsGloballyPass);
registerPass("remove-non-js-ops",
"removes operations incompatible with js",
createRemoveNonJSOpsPass);
Expand Down Expand Up @@ -588,14 +596,7 @@ void PassRegistry::registerPasses() {
registerPass("vacuum", "removes obviously unneeded code", createVacuumPass);
// registerPass(
// "lower-i64", "lowers i64 into pairs of i32s", createLowerInt64Pass);

// Register passes used for internal testing. These don't show up in --help.
registerTestPass("catch-pop-fixup",
"fixup nested pops within catches",
createCatchPopFixupPass);
registerTestPass("experimental-type-generalizing",
"generalize types (not yet sound)",
createTypeGeneralizingPass);
#endif
}

void PassRunner::addIfNoDWARFIssues(std::string passName) {
Expand Down
Loading