Skip to content

Commit 2b4b9cb

Browse files
natebiggsCommit Queue
authored and
Commit Queue
committed
Reland "[dart2js] Move Dart2js const conditional simplifier to phase 0b, the CFE linker."
This is a reland of commit fdfca11 Original change's description: > [dart2js] Move Dart2js const conditional simplifier to phase 0b, the CFE linker. > > Change-Id: I9ed7f46c5641c28dc71b7712dbd4e8d2062b1f4d > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/332820 > Reviewed-by: Sigmund Cherem <[email protected]> > Reviewed-by: Mayank Patke <[email protected]> Change-Id: I0ddf00c551196085e2a17936d15d6bc46c76efad Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/336580 Commit-Queue: Nate Biggs <[email protected]> Reviewed-by: Mayank Patke <[email protected]>
1 parent 193db9b commit 2b4b9cb

File tree

2 files changed

+37
-36
lines changed

2 files changed

+37
-36
lines changed

pkg/compiler/lib/src/compiler.dart

-35
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,12 @@ import 'inferrer/types.dart'
4747
show GlobalTypeInferenceResults, GlobalTypeInferenceTask;
4848
import 'inferrer/wrapped.dart' show WrappedAbstractValueStrategy;
4949
import 'io/source_information.dart';
50-
import 'ir/annotations.dart';
5150
import 'js_backend/codegen_inputs.dart' show CodegenInputs;
5251
import 'js_backend/enqueuer.dart';
5352
import 'js_backend/inferred_data.dart';
5453
import 'js_model/js_strategy.dart';
5554
import 'js_model/js_world.dart';
5655
import 'js_model/locals.dart';
57-
import 'kernel/dart2js_target.dart';
5856
import 'kernel/front_end_adapter.dart' show CompilerFileSystem;
5957
import 'kernel/kernel_strategy.dart';
6058
import 'kernel/kernel_world.dart';
@@ -437,34 +435,6 @@ class Compiler {
437435
bool shouldStopAfterLoadKernel(load_kernel.Output? output) =>
438436
output == null || compilationFailed || stage.shouldOnlyComputeDill;
439437

440-
void simplifyConstConditionals(ir.Component component) {
441-
void reportMessage(
442-
fe.LocatedMessage message, List<fe.LocatedMessage>? context) {
443-
reportLocatedMessage(reporter, message, context);
444-
}
445-
446-
bool shouldNotInline(ir.TreeNode node) {
447-
if (node is! ir.Annotatable) {
448-
return false;
449-
}
450-
return computePragmaAnnotationDataFromIr(node).any((pragma) =>
451-
pragma == const PragmaAnnotationData('noInline') ||
452-
pragma == const PragmaAnnotationData('never-inline'));
453-
}
454-
455-
fe.ConstConditionalSimplifier(
456-
const Dart2jsDartLibrarySupport(),
457-
const Dart2jsConstantsBackend(supportsUnevaluatedConstants: false),
458-
component,
459-
reportMessage,
460-
environmentDefines: environment.definitions,
461-
evaluationMode: options.useLegacySubtyping
462-
? fe.EvaluationMode.weak
463-
: fe.EvaluationMode.strong,
464-
shouldNotInline: shouldNotInline)
465-
.run();
466-
}
467-
468438
GlobalTypeInferenceResults performGlobalTypeInference(
469439
JClosedWorld closedWorld) {
470440
FunctionEntity mainFunction = closedWorld.elementEnvironment.mainFunction!;
@@ -551,11 +521,6 @@ class Compiler {
551521
ir.Component component = output.component;
552522
JClosedWorld? closedWorld;
553523
if (!stage.shouldReadClosedWorld) {
554-
// If we're deserializing the closed world, the input .dill already
555-
// contains the modified AST, so the transformer only needs to run if
556-
// the closed world is being computed from scratch.
557-
simplifyConstConditionals(component);
558-
559524
Uri rootLibraryUri = output.rootLibraryUri!;
560525
List<Uri> libraries = output.libraries!;
561526
closedWorld = computeClosedWorld(component, rootLibraryUri, libraries);

pkg/compiler/lib/src/phase/load_kernel.dart

+37-1
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,14 @@ import '../commandline_options.dart';
2222
import '../common.dart';
2323
import '../diagnostics/diagnostic_listener.dart';
2424
import '../environment.dart';
25+
import '../ir/annotations.dart';
2526
import '../ir/constants.dart';
2627
import '../kernel/dart2js_target.dart'
27-
show Dart2jsTarget, implicitlyUsedLibraries;
28+
show
29+
Dart2jsConstantsBackend,
30+
Dart2jsDartLibrarySupport,
31+
Dart2jsTarget,
32+
implicitlyUsedLibraries;
2833
import '../kernel/front_end_adapter.dart';
2934
import '../kernel/transformations/global/transform.dart' as globalTransforms;
3035
import '../options.dart';
@@ -113,6 +118,36 @@ class _LoadFromKernelResult {
113118
_LoadFromKernelResult(this.component, this.entryLibrary);
114119
}
115120

121+
void _simplifyConstConditionals(ir.Component component, CompilerOptions options,
122+
ir.ClassHierarchy classHierarchy, DiagnosticReporter reporter) {
123+
void reportMessage(
124+
fe.LocatedMessage message, List<fe.LocatedMessage>? context) {
125+
reportLocatedMessage(reporter, message, context);
126+
}
127+
128+
bool shouldNotInline(ir.TreeNode node) {
129+
if (node is! ir.Annotatable) {
130+
return false;
131+
}
132+
return computePragmaAnnotationDataFromIr(node).any((pragma) =>
133+
pragma == const PragmaAnnotationData('noInline') ||
134+
pragma == const PragmaAnnotationData('never-inline'));
135+
}
136+
137+
fe.ConstConditionalSimplifier(
138+
const Dart2jsDartLibrarySupport(),
139+
const Dart2jsConstantsBackend(supportsUnevaluatedConstants: false),
140+
component,
141+
reportMessage,
142+
environmentDefines: options.environment,
143+
classHierarchy: classHierarchy,
144+
evaluationMode: options.useLegacySubtyping
145+
? fe.EvaluationMode.weak
146+
: fe.EvaluationMode.strong,
147+
shouldNotInline: shouldNotInline)
148+
.run();
149+
}
150+
116151
// Perform any backend-specific transforms here that can be done on both
117152
// serialized components and components from source.
118153
void _doTransformsOnKernelLoad(
@@ -142,6 +177,7 @@ void _doTransformsOnKernelLoad(
142177
.visitComponent(component);
143178
globalTransforms.transformLibraries(
144179
component.libraries, constantsEvaluator, coreTypes, options);
180+
_simplifyConstConditionals(component, options, classHierarchy, reporter);
145181
}
146182
}
147183

0 commit comments

Comments
 (0)