Skip to content

Commit 692069c

Browse files
authored
Refactor optimization defaults (#1366)
Followup to #1357. This moves the optimization settings into pass.h, and uses it from there in the various places. This also splits up huge lines from the tracing code, which put all block children (whose number can be arbitrarily large) on one line. This seems to have caused random errors on the bots, I suspect from overflowing a buffer. Anyhow, it's much more clear to split the lines at a reasonable length.
1 parent 0a9ddae commit 692069c

File tree

9 files changed

+116
-119
lines changed

9 files changed

+116
-119
lines changed

bin/binaryen.js

Lines changed: 28 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bin/wasm.js

Lines changed: 29 additions & 33 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/binaryen-c.cpp

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
#include "cfg/Relooper.h"
3434
#include "ir/utils.h"
3535
#include "shell-interface.h"
36-
#include "support/defaults.h"
3736

3837
using namespace wasm;
3938

@@ -72,9 +71,7 @@ static std::mutex BinaryenFunctionMutex;
7271
static std::mutex BinaryenFunctionTypeMutex;
7372

7473
// Optimization options
75-
static int optimizeLevel = BINARYEN_DEFAULT_OPTIMIZE_LEVEL;
76-
static int shrinkLevel = BINARYEN_DEFAULT_SHRINK_LEVEL;
77-
static bool debugInfo = BINARYEN_DEFAULT_DEBUG_INFO;
74+
static PassOptions globalPassOptions = PassOptions::getWithDefaultOptimizationOptions();
7875

7976
// Tracing support
8077

@@ -385,6 +382,7 @@ BinaryenExpressionRef BinaryenBlock(BinaryenModuleRef module, const char* name,
385382
std::cout << " BinaryenExpressionRef children[] = { ";
386383
for (BinaryenIndex i = 0; i < numChildren; i++) {
387384
if (i > 0) std::cout << ", ";
385+
if (i % 6 == 5) std::cout << "\n "; // don't create hugely long lines
388386
std::cout << "expressions[" << expressions[children[i]] << "]";
389387
}
390388
if (numChildren == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS
@@ -2013,9 +2011,7 @@ void BinaryenModuleOptimize(BinaryenModuleRef module) {
20132011

20142012
Module* wasm = (Module*)module;
20152013
PassRunner passRunner(wasm);
2016-
passRunner.options.optimizeLevel = optimizeLevel;
2017-
passRunner.options.shrinkLevel = shrinkLevel;
2018-
passRunner.options.debugInfo = debugInfo;
2014+
passRunner.options = globalPassOptions;
20192015
passRunner.addDefaultOptimizationPasses();
20202016
passRunner.run();
20212017
}
@@ -2025,47 +2021,47 @@ int BinaryenGetOptimizeLevel() {
20252021
std::cout << " BinaryenGetOptimizeLevel();\n";
20262022
}
20272023

2028-
return optimizeLevel;
2024+
return globalPassOptions.optimizeLevel;
20292025
}
20302026

20312027
void BinaryenSetOptimizeLevel(int level) {
20322028
if (tracing) {
20332029
std::cout << " BinaryenSetOptimizeLevel(" << level << ");\n";
20342030
}
20352031

2036-
optimizeLevel = level;
2032+
globalPassOptions.optimizeLevel = level;
20372033
}
20382034

20392035
int BinaryenGetShrinkLevel() {
20402036
if (tracing) {
20412037
std::cout << " BinaryenGetShrinkLevel();\n";
20422038
}
20432039

2044-
return shrinkLevel;
2040+
return globalPassOptions.shrinkLevel;
20452041
}
20462042

20472043
void BinaryenSetShrinkLevel(int level) {
20482044
if (tracing) {
20492045
std::cout << " BinaryenSetShrinkLevel(" << level << ");\n";
20502046
}
20512047

2052-
shrinkLevel = level;
2048+
globalPassOptions.shrinkLevel = level;
20532049
}
20542050

20552051
int BinaryenGetDebugInfo() {
20562052
if (tracing) {
20572053
std::cout << " BinaryenGetDebugInfo();\n";
20582054
}
20592055

2060-
return debugInfo;
2056+
return globalPassOptions.debugInfo;
20612057
}
20622058

20632059
void BinaryenSetDebugInfo(int on) {
20642060
if (tracing) {
20652061
std::cout << " BinaryenSetDebugInfo(" << on << ");\n";
20662062
}
20672063

2068-
debugInfo = bool(on);
2064+
globalPassOptions.debugInfo = bool(on);
20692065
}
20702066

20712067
void BinaryenModuleRunPasses(BinaryenModuleRef module, const char **passes, BinaryenIndex numPasses) {
@@ -2083,9 +2079,7 @@ void BinaryenModuleRunPasses(BinaryenModuleRef module, const char **passes, Bina
20832079

20842080
Module* wasm = (Module*)module;
20852081
PassRunner passRunner(wasm);
2086-
passRunner.options.optimizeLevel = optimizeLevel;
2087-
passRunner.options.shrinkLevel = shrinkLevel;
2088-
passRunner.options.debugInfo = debugInfo;
2082+
passRunner.options = globalPassOptions;
20892083
for (BinaryenIndex i = 0; i < numPasses; i++) {
20902084
passRunner.add(passes[i]);
20912085
}
@@ -2099,7 +2093,7 @@ void BinaryenModuleAutoDrop(BinaryenModuleRef module) {
20992093

21002094
Module* wasm = (Module*)module;
21012095
PassRunner passRunner(wasm);
2102-
passRunner.options.debugInfo = debugInfo;
2096+
passRunner.options = globalPassOptions;
21032097
passRunner.add<AutoDrop>();
21042098
passRunner.run();
21052099
}
@@ -2112,7 +2106,7 @@ size_t BinaryenModuleWrite(BinaryenModuleRef module, char* output, size_t output
21122106
Module* wasm = (Module*)module;
21132107
BufferWithRandomAccess buffer(false);
21142108
WasmBinaryWriter writer(wasm, buffer, false);
2115-
writer.setNamesSection(debugInfo);
2109+
writer.setNamesSection(globalPassOptions.debugInfo);
21162110
writer.write();
21172111
size_t bytes = std::min(buffer.size(), outputSize);
21182112
std::copy_n(buffer.begin(), bytes, output);
@@ -2254,9 +2248,7 @@ void BinaryenFunctionOptimize(BinaryenFunctionRef func, BinaryenModuleRef module
22542248

22552249
Module* wasm = (Module*)module;
22562250
PassRunner passRunner(wasm);
2257-
passRunner.options.optimizeLevel = optimizeLevel;
2258-
passRunner.options.shrinkLevel = shrinkLevel;
2259-
passRunner.options.debugInfo = debugInfo;
2251+
passRunner.options = globalPassOptions;
22602252
passRunner.addDefaultOptimizationPasses();
22612253
passRunner.runOnFunction((Function*)func);
22622254
}
@@ -2275,9 +2267,7 @@ void BinaryenFunctionRunPasses(BinaryenFunctionRef func, BinaryenModuleRef modul
22752267

22762268
Module* wasm = (Module*)module;
22772269
PassRunner passRunner(wasm);
2278-
passRunner.options.optimizeLevel = optimizeLevel;
2279-
passRunner.options.shrinkLevel = shrinkLevel;
2280-
passRunner.options.debugInfo = debugInfo;
2270+
passRunner.options = globalPassOptions;
22812271
for (BinaryenIndex i = 0; i < numPasses; i++) {
22822272
passRunner.add(passes[i]);
22832273
}

src/binaryen-c.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
#include <stdint.h>
4949

5050
#include "compiler-support.h"
51-
#include "support/defaults.h"
5251

5352
#ifdef __cplusplus
5453
extern "C" {

src/pass.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@ struct PassOptions {
6363
bool ignoreImplicitTraps = false; // optimize assuming things like div by 0, bad load/store, will not trap
6464
bool debugInfo = false; // whether to try to preserve debug info through, which are special calls
6565
FeatureSet features = Feature::MVP; // Which wasm features to accept, and be allowed to use
66+
67+
void setDefaultOptimizationOptions() {
68+
// -Os is our default
69+
optimizeLevel = 2;
70+
shrinkLevel = 1;
71+
}
72+
73+
static PassOptions getWithDefaultOptimizationOptions() {
74+
PassOptions ret;
75+
ret.setDefaultOptimizationOptions();
76+
return ret;
77+
}
6678
};
6779

6880
//

src/support/defaults.h

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/tools/optimization-options.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
#include "support/command-line.h"
18-
#include "support/defaults.h"
1918

2019
//
2120
// Shared optimization options for commandline tools
@@ -34,8 +33,7 @@ struct OptimizationOptions : public Options {
3433
(*this).add("", "-O", "execute default optimization passes",
3534
Options::Arguments::Zero,
3635
[this](Options*, const std::string&) {
37-
passOptions.optimizeLevel = BINARYEN_DEFAULT_OPTIMIZE_LEVEL;
38-
passOptions.shrinkLevel = BINARYEN_DEFAULT_SHRINK_LEVEL;
36+
passOptions.setDefaultOptimizationOptions();
3937
passes.push_back(DEFAULT_OPT_PASSES);
4038
})
4139
.add("", "-O0", "execute no optimization passes",

test/binaryen.js/kitchen-sink.js.txt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1418,7 +1418,22 @@ getExpressionInfo(f32.const)={"id":15,"type":3,"value":8.5}
14181418
BinaryenConstGetValueF64(expressions[250]);
14191419
getExpressionInfo(f64.const)={"id":15,"type":4,"value":9.5}
14201420
{
1421-
], expressions[160], expressions[163], expressions[166], expressions[169], expressions[172], expressions[175], expressions[178], expressions[181], expressions[184], expressions[187], expressions[190], expressions[191], expressions[192], expressions[193], expressions[195], expressions[197], expressions[198], expressions[200], expressions[202], expressions[203], expressions[204], expressions[206], expressions[212], expressions[217], expressions[224], expressions[226], expressions[228], expressions[231], expressions[233], expressions[235], expressions[237], expressions[239], expressions[240], expressions[241], expressions[242], expressions[244], expressions[245], expressions[246] };
1421+
BinaryenExpressionRef children[] = { expressions[24], expressions[26], expressions[28], expressions[30], expressions[32],
1422+
expressions[34], expressions[36], expressions[38], expressions[40], expressions[42], expressions[44],
1423+
expressions[46], expressions[48], expressions[50], expressions[52], expressions[54], expressions[56],
1424+
expressions[58], expressions[60], expressions[62], expressions[64], expressions[66], expressions[68],
1425+
expressions[70], expressions[72], expressions[74], expressions[76], expressions[78], expressions[80],
1426+
expressions[82], expressions[84], expressions[86], expressions[88], expressions[90], expressions[92],
1427+
expressions[94], expressions[97], expressions[100], expressions[103], expressions[106], expressions[109],
1428+
expressions[112], expressions[115], expressions[118], expressions[121], expressions[124], expressions[127],
1429+
expressions[130], expressions[133], expressions[136], expressions[139], expressions[142], expressions[145],
1430+
expressions[148], expressions[151], expressions[154], expressions[157], expressions[160], expressions[163],
1431+
expressions[166], expressions[169], expressions[172], expressions[175], expressions[178], expressions[181],
1432+
expressions[184], expressions[187], expressions[190], expressions[191], expressions[192], expressions[193],
1433+
expressions[195], expressions[197], expressions[198], expressions[200], expressions[202], expressions[203],
1434+
expressions[204], expressions[206], expressions[212], expressions[217], expressions[224], expressions[226],
1435+
expressions[228], expressions[231], expressions[233], expressions[235], expressions[237], expressions[239],
1436+
expressions[240], expressions[241], expressions[242], expressions[244], expressions[245], expressions[246] };
14221437
expressions[251] = BinaryenBlock(the_module, "the-value", children, 95, 0);
14231438
}
14241439
expressions[252] = BinaryenDrop(the_module, expressions[251]);

test/example/c-api-kitchen-sink.txt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1368,7 +1368,22 @@ int main() {
13681368
(f32.const -33.61199951171875)
13691369
)
13701370
{
1371-
BinaryenExpressionRef children[] = { expressions[34], expressions[36], expressions[38], expressions[40], expressions[42], expressions[44], expressions[46], expressions[48], expressions[50], expressions[52], expressions[54], expressions[56], expressions[58], expressions[60], expressions[62], expressions[64], expressions[66], expressions[68], expressions[70], expressions[72], expressions[74], expressions[76], expressions[78], expressions[80], expressions[82], expressions[84], expressions[86], expressions[88], expressions[90], expressions[92], expressions[94], expressions[96], expressions[98], expressions[100], expressions[102], expressions[104], expressions[107], expressions[110], expressions[113], expressions[116], expressions[119], expressions[122], expressions[125], expressions[128], expressions[131], expressions[134], expressions[137], expressions[140], expressions[143], expressions[146], expressions[149], expressions[152], expressions[155], expressions[158], expressions[161], expressions[164], expressions[167], expressions[170], expressions[173], expressions[176], expressions[179], expressions[182], expressions[185], expressions[188], expressions[191], expressions[194], expressions[197], expressions[200], expressions[201], expressions[202], expressions[203], expressions[205], expressions[207], expressions[208], expressions[210], expressions[212], expressions[213], expressions[214], expressions[216], expressions[218], expressions[221], expressions[224], expressions[226], expressions[228], expressions[231], expressions[233], expressions[235], expressions[237], expressions[239], expressions[240], expressions[241], expressions[242], expressions[244], expressions[245], expressions[246] };
1371+
BinaryenExpressionRef children[] = { expressions[34], expressions[36], expressions[38], expressions[40], expressions[42],
1372+
expressions[44], expressions[46], expressions[48], expressions[50], expressions[52], expressions[54],
1373+
expressions[56], expressions[58], expressions[60], expressions[62], expressions[64], expressions[66],
1374+
expressions[68], expressions[70], expressions[72], expressions[74], expressions[76], expressions[78],
1375+
expressions[80], expressions[82], expressions[84], expressions[86], expressions[88], expressions[90],
1376+
expressions[92], expressions[94], expressions[96], expressions[98], expressions[100], expressions[102],
1377+
expressions[104], expressions[107], expressions[110], expressions[113], expressions[116], expressions[119],
1378+
expressions[122], expressions[125], expressions[128], expressions[131], expressions[134], expressions[137],
1379+
expressions[140], expressions[143], expressions[146], expressions[149], expressions[152], expressions[155],
1380+
expressions[158], expressions[161], expressions[164], expressions[167], expressions[170], expressions[173],
1381+
expressions[176], expressions[179], expressions[182], expressions[185], expressions[188], expressions[191],
1382+
expressions[194], expressions[197], expressions[200], expressions[201], expressions[202], expressions[203],
1383+
expressions[205], expressions[207], expressions[208], expressions[210], expressions[212], expressions[213],
1384+
expressions[214], expressions[216], expressions[218], expressions[221], expressions[224], expressions[226],
1385+
expressions[228], expressions[231], expressions[233], expressions[235], expressions[237], expressions[239],
1386+
expressions[240], expressions[241], expressions[242], expressions[244], expressions[245], expressions[246] };
13721387
expressions[247] = BinaryenBlock(the_module, "the-value", children, 95, BinaryenTypeAuto());
13731388
}
13741389
expressions[248] = BinaryenDrop(the_module, expressions[247]);

0 commit comments

Comments
 (0)