Skip to content

Commit 4f866de

Browse files
authoredJul 4, 2023
fix(es/minifier): Add usage to inlined ident eagerly (#7597)
**Related issue:** - Closes #7591.
1 parent 9214427 commit 4f866de

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed
 

‎crates/swc_ecma_minifier/src/compress/optimize/inline.rs

+22-11
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ impl Optimizer<'_> {
9696

9797
self.vars.inline_with_multi_replacer(init);
9898

99+
let id = ident.to_id();
100+
99101
// We inline arrays partially if it's pure (all elements are literal), and not
100102
// modified.
101103
// We don't drop definition, but we just inline array accesses with numeric
@@ -243,7 +245,17 @@ impl Optimizer<'_> {
243245
_ => false,
244246
}
245247
{
246-
self.mode.store(ident.to_id(), &*init);
248+
self.mode.store(id.clone(), &*init);
249+
250+
let usage_count = usage.usage_count;
251+
let mut inc_usage = || {
252+
if let Expr::Ident(i) = &*init {
253+
if let Some(u) = self.data.vars.get_mut(&i.to_id()) {
254+
u.ref_count += ref_count;
255+
u.usage_count += usage_count;
256+
}
257+
}
258+
};
247259

248260
if self.options.inline != 0
249261
&& !should_preserve
@@ -264,7 +276,9 @@ impl Optimizer<'_> {
264276
// var.span = var.span.apply_mark(self.marks.non_top_level);
265277
// }
266278

267-
self.vars.lits.insert(ident.to_id(), init.take().into());
279+
inc_usage();
280+
281+
self.vars.lits.insert(id.clone(), init.take().into());
268282

269283
ident.take();
270284
} else if self.options.inline != 0 || self.options.reduce_vars {
@@ -274,12 +288,16 @@ impl Optimizer<'_> {
274288
ident.span.ctxt
275289
);
276290

277-
self.mode.store(ident.to_id(), &*init);
291+
self.mode.store(id.clone(), &*init);
278292

279-
self.vars.lits.insert(ident.to_id(), init.clone().into());
293+
inc_usage();
294+
295+
self.vars.lits.insert(id.clone(), init.clone().into());
280296
}
281297
}
282298

299+
let usage = self.data.vars.get(&id).unwrap();
300+
283301
// Single use => inlined
284302
if !self.ctx.is_exported
285303
&& is_inline_enabled
@@ -760,13 +778,6 @@ impl Optimizer<'_> {
760778
self.changed = true;
761779
report_change!("inline: Replacing a variable `{}` with cheap expression", i);
762780

763-
if let Expr::Ident(i) = &*value {
764-
if let Some(usage) = self.data.vars.get_mut(&i.to_id()) {
765-
usage.ref_count += 1;
766-
usage.usage_count += 1;
767-
}
768-
}
769-
770781
*e = *value;
771782
return;
772783
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
var x = someFunction;
2+
3+
function someFunction() {
4+
return 2;
5+
}
6+
7+
console.log(x);
8+
console.log(x);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
function someFunction() {
2+
return 2;
3+
}
4+
console.log(someFunction), console.log(someFunction);

1 commit comments

Comments
 (1)

github-actions[bot] commented on Jul 4, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 4f866de Previous: ff1ad95 Ratio
es/full/bugs-1 313670 ns/iter (± 13555) 306225 ns/iter (± 4237) 1.02
es/full/minify/libraries/antd 1445922017 ns/iter (± 21274518) 1463826563 ns/iter (± 15880339) 0.99
es/full/minify/libraries/d3 319988202 ns/iter (± 3253456) 311852291 ns/iter (± 628917) 1.03
es/full/minify/libraries/echarts 1181212957 ns/iter (± 7205089) 1182368047 ns/iter (± 3110877) 1.00
es/full/minify/libraries/jquery 96161534 ns/iter (± 451880) 95663256 ns/iter (± 244711) 1.01
es/full/minify/libraries/lodash 114276644 ns/iter (± 123387) 113228438 ns/iter (± 243178) 1.01
es/full/minify/libraries/moment 56655584 ns/iter (± 84742) 56058986 ns/iter (± 132721) 1.01
es/full/minify/libraries/react 20226189 ns/iter (± 42444) 20127877 ns/iter (± 69924) 1.00
es/full/minify/libraries/terser 247620621 ns/iter (± 429935) 247483599 ns/iter (± 642413) 1.00
es/full/minify/libraries/three 435887300 ns/iter (± 2713987) 434822429 ns/iter (± 1648553) 1.00
es/full/minify/libraries/typescript 2979039021 ns/iter (± 28105926) 2976570567 ns/iter (± 6821636) 1.00
es/full/minify/libraries/victory 635470563 ns/iter (± 4010453) 633314912 ns/iter (± 3387657) 1.00
es/full/minify/libraries/vue 136830462 ns/iter (± 1368148) 138214836 ns/iter (± 373458) 0.99
es/full/codegen/es3 35641 ns/iter (± 561) 36574 ns/iter (± 69) 0.97
es/full/codegen/es5 36782 ns/iter (± 711) 36557 ns/iter (± 53) 1.01
es/full/codegen/es2015 36734 ns/iter (± 617) 36528 ns/iter (± 51) 1.01
es/full/codegen/es2016 36799 ns/iter (± 750) 36582 ns/iter (± 112) 1.01
es/full/codegen/es2017 36321 ns/iter (± 568) 36622 ns/iter (± 108) 0.99
es/full/codegen/es2018 36511 ns/iter (± 456) 36557 ns/iter (± 46) 1.00
es/full/codegen/es2019 36579 ns/iter (± 704) 36704 ns/iter (± 84) 1.00
es/full/codegen/es2020 37294 ns/iter (± 260) 36631 ns/iter (± 51) 1.02
es/full/all/es3 180826896 ns/iter (± 1197156) 181870481 ns/iter (± 711836) 0.99
es/full/all/es5 173258446 ns/iter (± 1108923) 173265734 ns/iter (± 929359) 1.00
es/full/all/es2015 128864385 ns/iter (± 1191664) 130964670 ns/iter (± 809552) 0.98
es/full/all/es2016 128911320 ns/iter (± 750106) 130009052 ns/iter (± 740954) 0.99
es/full/all/es2017 128334025 ns/iter (± 290591) 129004512 ns/iter (± 579145) 0.99
es/full/all/es2018 125394532 ns/iter (± 1282795) 127488613 ns/iter (± 655999) 0.98
es/full/all/es2019 125210636 ns/iter (± 4618785) 126244221 ns/iter (± 496360) 0.99
es/full/all/es2020 120394919 ns/iter (± 1247221) 122050528 ns/iter (± 614869) 0.99
es/full/parser 534334 ns/iter (± 8702) 569310 ns/iter (± 5703) 0.94
es/full/base/fixer 18147 ns/iter (± 273) 19049 ns/iter (± 82) 0.95
es/full/base/resolver_and_hygiene 90132 ns/iter (± 1608) 93798 ns/iter (± 201) 0.96
serialization of serde 292 ns/iter (± 4) 297 ns/iter (± 2) 0.98
css/minify/libraries/bootstrap 30656615 ns/iter (± 396805) 30586901 ns/iter (± 41651) 1.00
css/visitor/compare/clone 2083654 ns/iter (± 41364) 2076005 ns/iter (± 21031) 1.00
css/visitor/compare/visit_mut_span 2244687 ns/iter (± 28190) 2211484 ns/iter (± 24556) 1.02
css/visitor/compare/visit_mut_span_panic 2323015 ns/iter (± 39717) 2304850 ns/iter (± 19471) 1.01
css/visitor/compare/fold_span 3068689 ns/iter (± 27132) 2913217 ns/iter (± 17853) 1.05
css/visitor/compare/fold_span_panic 3252861 ns/iter (± 32140) 3129798 ns/iter (± 43009) 1.04
css/lexer/bootstrap_5_1_3 4708449 ns/iter (± 109476) 4741492 ns/iter (± 6750) 0.99
css/lexer/foundation_6_7_4 3880824 ns/iter (± 53533) 4004102 ns/iter (± 1938) 0.97
css/lexer/tailwind_3_1_1 743116 ns/iter (± 7801) 763625 ns/iter (± 840) 0.97
css/parser/bootstrap_5_1_3 19905012 ns/iter (± 261386) 20361805 ns/iter (± 29762) 0.98
css/parser/foundation_6_7_4 16223371 ns/iter (± 304717) 16425556 ns/iter (± 13202) 0.99
css/parser/tailwind_3_1_1 3097346 ns/iter (± 37938) 3166770 ns/iter (± 2008) 0.98
es/codegen/colors 729402 ns/iter (± 395733) 733185 ns/iter (± 395356) 0.99
es/codegen/large 2995828 ns/iter (± 1578154) 3017522 ns/iter (± 1603419) 0.99
es/codegen/with-parser/colors 48329 ns/iter (± 631) 47897 ns/iter (± 161) 1.01
es/codegen/with-parser/large 513098 ns/iter (± 6595) 510187 ns/iter (± 953) 1.01
es/minify/libraries/antd 1260850853 ns/iter (± 18978099) 1282549722 ns/iter (± 7914435) 0.98
es/minify/libraries/d3 274572593 ns/iter (± 2054286) 280630769 ns/iter (± 695271) 0.98
es/minify/libraries/echarts 1003205004 ns/iter (± 7588248) 1036876357 ns/iter (± 3353216) 0.97
es/minify/libraries/jquery 83281047 ns/iter (± 137930) 84386565 ns/iter (± 104369) 0.99
es/minify/libraries/lodash 101043222 ns/iter (± 828387) 103929895 ns/iter (± 133425) 0.97
es/minify/libraries/moment 48990707 ns/iter (± 225385) 49924497 ns/iter (± 65917) 0.98
es/minify/libraries/react 17877290 ns/iter (± 104591) 18193382 ns/iter (± 73738) 0.98
es/minify/libraries/terser 209415316 ns/iter (± 793430) 214257005 ns/iter (± 218049) 0.98
es/minify/libraries/three 357702109 ns/iter (± 2729343) 369159576 ns/iter (± 3063660) 0.97
es/minify/libraries/typescript 2500242995 ns/iter (± 20194062) 2572360953 ns/iter (± 6785002) 0.97
es/minify/libraries/victory 528555535 ns/iter (± 4039940) 535918758 ns/iter (± 3293022) 0.99
es/minify/libraries/vue 121818942 ns/iter (± 925379) 124302157 ns/iter (± 192070) 0.98
es/visitor/compare/clone 2048236 ns/iter (± 21010) 2068497 ns/iter (± 20112) 0.99
es/visitor/compare/visit_mut_span 2344425 ns/iter (± 31443) 2398686 ns/iter (± 3101) 0.98
es/visitor/compare/visit_mut_span_panic 2388555 ns/iter (± 45869) 2448911 ns/iter (± 5885) 0.98
es/visitor/compare/fold_span 3401565 ns/iter (± 71023) 3465468 ns/iter (± 5966) 0.98
es/visitor/compare/fold_span_panic 3533401 ns/iter (± 61410) 3611167 ns/iter (± 5421) 0.98
es/lexer/colors 12963 ns/iter (± 199) 13692 ns/iter (± 47) 0.95
es/lexer/angular 6086383 ns/iter (± 132078) 6282668 ns/iter (± 17113) 0.97
es/lexer/backbone 824108 ns/iter (± 17421) 825969 ns/iter (± 4580) 1.00
es/lexer/jquery 4576391 ns/iter (± 81670) 4680110 ns/iter (± 2459) 0.98
es/lexer/jquery mobile 7163735 ns/iter (± 75192) 7185444 ns/iter (± 5982) 1.00
es/lexer/mootools 3680527 ns/iter (± 18032) 3683580 ns/iter (± 4194) 1.00
es/lexer/underscore 692428 ns/iter (± 1063) 686962 ns/iter (± 676) 1.01
es/lexer/three 21615812 ns/iter (± 234087) 22223667 ns/iter (± 34775) 0.97
es/lexer/yui 4017867 ns/iter (± 39464) 4175213 ns/iter (± 28998) 0.96
es/parser/colors 28639 ns/iter (± 137) 28832 ns/iter (± 63) 0.99
es/parser/angular 13815153 ns/iter (± 163209) 14176454 ns/iter (± 52872) 0.97
es/parser/backbone 2093812 ns/iter (± 30813) 2117291 ns/iter (± 7905) 0.99
es/parser/jquery 11281753 ns/iter (± 109128) 11602153 ns/iter (± 42703) 0.97
es/parser/jquery mobile 17316521 ns/iter (± 266254) 17659660 ns/iter (± 46544) 0.98
es/parser/mootools 8497691 ns/iter (± 121382) 8844481 ns/iter (± 16659) 0.96
es/parser/underscore 1809824 ns/iter (± 22143) 1826559 ns/iter (± 7906) 0.99
es/parser/three 47762868 ns/iter (± 719304) 48818634 ns/iter (± 151667) 0.98
es/parser/yui 8797331 ns/iter (± 50734) 8840203 ns/iter (± 85491) 1.00
es/preset-env/usage/builtin_type 143579 ns/iter (± 33542) 143117 ns/iter (± 33161) 1.00
es/preset-env/usage/property 18467 ns/iter (± 45) 18585 ns/iter (± 35) 0.99
es/resolver/typescript 93770120 ns/iter (± 949236) 93879809 ns/iter (± 608481) 1.00
es/fixer/typescript 64086211 ns/iter (± 347510) 65323720 ns/iter (± 466407) 0.98
es/hygiene/typescript 141236316 ns/iter (± 703680) 142943350 ns/iter (± 452248) 0.99
es/resolver_with_hygiene/typescript 299342153 ns/iter (± 2516556) 302473587 ns/iter (± 1616950) 0.99
es/visitor/base-perf/module_clone 60821 ns/iter (± 603) 61601 ns/iter (± 265) 0.99
es/visitor/base-perf/fold_empty 64084 ns/iter (± 573) 64923 ns/iter (± 220) 0.99
es/visitor/base-perf/fold_noop_impl_all 64419 ns/iter (± 250) 64948 ns/iter (± 260) 0.99
es/visitor/base-perf/fold_noop_impl_vec 64269 ns/iter (± 865) 65138 ns/iter (± 236) 0.99
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 57 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 40 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 113 ns/iter (± 0) 114 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 79 ns/iter (± 0) 81 ns/iter (± 0) 0.98
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2561 ns/iter (± 55) 2680 ns/iter (± 40) 0.96
es/base/parallel/resolver/typescript 4313968310 ns/iter (± 224937964) 4406967009 ns/iter (± 242975847) 0.98
es/base/parallel/hygiene/typescript 1566295485 ns/iter (± 11498481) 1581319862 ns/iter (± 6680169) 0.99
misc/visitors/time-complexity/time 5 100 ns/iter (± 1) 101 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 295 ns/iter (± 1) 263 ns/iter (± 0) 1.12
misc/visitors/time-complexity/time 15 514 ns/iter (± 13) 501 ns/iter (± 9) 1.03
misc/visitors/time-complexity/time 20 1022 ns/iter (± 7) 921 ns/iter (± 4) 1.11
misc/visitors/time-complexity/time 40 3754 ns/iter (± 37) 3738 ns/iter (± 21) 1.00
misc/visitors/time-complexity/time 60 8481 ns/iter (± 65) 7795 ns/iter (± 20) 1.09
es/full-target/es2016 232602 ns/iter (± 4211) 241978 ns/iter (± 470) 0.96
es/full-target/es2017 226055 ns/iter (± 3393) 229699 ns/iter (± 979) 0.98
es/full-target/es2018 209773 ns/iter (± 2857) 219385 ns/iter (± 25780) 0.96
es2020_nullish_coalescing 69422 ns/iter (± 661) 73195 ns/iter (± 375) 0.95
es2020_optional_chaining 80909 ns/iter (± 1454) 84430 ns/iter (± 1139) 0.96
es2022_class_properties 117504 ns/iter (± 829) 125275 ns/iter (± 413) 0.94
es2018_object_rest_spread 72989 ns/iter (± 1343) 77815 ns/iter (± 358) 0.94
es2019_optional_catch_binding 63228 ns/iter (± 716) 67388 ns/iter (± 291) 0.94
es2017_async_to_generator 63978 ns/iter (± 655) 65871 ns/iter (± 379) 0.97
es2016_exponentiation 68480 ns/iter (± 894) 71037 ns/iter (± 158) 0.96
es2015_arrow 71601 ns/iter (± 588) 75493 ns/iter (± 334) 0.95
es2015_block_scoped_fn 67733 ns/iter (± 916) 70686 ns/iter (± 220) 0.96
es2015_block_scoping 132835 ns/iter (± 2180) 135042 ns/iter (± 500) 0.98

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.