dart-sdk/tests/web_2
Stephen Adams 75d4047276 [dart2js] Dead code eliminator should remove dead phis
The bad codegen reported in #48383 was due to an unused phi confusing
the expression-tree construction algorithm. It was trying to generate

    data = cond ? callWithSideEffects() : null;

but `data` is unused, so somehow we generated only

    cond;

We should not have unused phis at this point so I put a safety check
in the above code to not try to build an unused conditional, and
changed the dead-code eliminator to eliminate dead phis.

Now we get

    if (cond)
      callWithSideEffects();

I compared the output for some large apps and there were about a dozen
changes. All looked like improvements, e.g. not assigning to an unused
variable. There was some code missing that is now present, but luckily
for the large apps, it was all code that did not have real-world side
effects.


Fixed: 48383
Change-Id: Id7b32cfa0cbfb47a4d9eff174ad9ae52da99f6a4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/232781
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Stephen Adams <sra@google.com>
2022-02-14 20:15:30 +00:00
..
deferred
internal [dart2js] Handle Object members of dart:html types 2022-01-21 01:04:10 +00:00
native Rename status files in tests/web 2022-01-20 18:35:27 +00:00
regress [dart2js] Some DartTypeVisitor cleanup. 2021-07-15 19:04:25 +00:00
supermixin
3_test.dart
7_test.dart
12_test.dart
33_test.dart
43_test.dart
881_test.dart
10216a_test.dart
10216b_test.dart
11673_test.dart
12320_test.dart
16400_test.dart
16407_test.dart
16967_test.dart
17094_test.dart
17645_test.dart
17856_test.dart
18383_test.dart
19191_test.dart
21351_test.dart
21579_test.dart
22487_test.dart
22776_test.dart
22868_test.dart
22917_test.dart
23404_test.dart
23432_test.dart
23486_helper.dart
23486_test.dart
23804_test.dart
23828_test.dart
26243_test.dart
27198_test.dart
27199_test.dart
27323_test.dart
27354_test.dart
28749_test.dart
28919_test.dart
29130_test.dart
31803_test.dart
32770a_test.dart
32770b_test.dart
32770c_test.dart
32774_test.dart
32828_test.dart
32853_test.dart
32928_test.dart
32969_test.dart
32997a_lib.dart
32997a_test.dart
32997b_lib.dart
32997b_test.dart
33296_test.dart
33572_test.dart
34156_test.dart
34701_test.dart
35341_test.dart
35356_test.dart
35853_test.dart
35965a_test.dart
37494_test.dart
37576_test.dart
38005_test.dart
38949_test.dart
40152a_test.dart
40902_test.dart
41449a_test.dart
41449b_test.dart
41449c_test.dart
41449d_test.dart [dart2js] Add failing tests for issue #41449. 2021-02-08 23:23:34 +00:00
42088_test.dart Add language versions to _2 test libraries 2021-04-26 17:58:57 +00:00
42189_test.dart
42501_test.dart Add language versions to _2 test libraries 2021-04-26 17:58:57 +00:00
42531_test.dart Add language versions to _2 test libraries 2021-04-26 17:58:57 +00:00
45046_test.dart [dart2js] Add failing tests for issue #45046. 2021-03-12 04:47:59 +00:00
47691_test.dart [dart2js] Add failing tests for #47691. 2021-11-18 20:37:36 +00:00
48383_test.dart [dart2js] Dead code eliminator should remove dead phis 2022-02-14 20:15:30 +00:00
assert_with_message_test.dart
async_helper.dart
async_stacktrace_test.dart
big_allocation_expression_test.dart
block_expression_on_field_test.dart
boolean_conversion_test.dart
bound_closure_interceptor_methods_test.dart
bounded_type_literal_test.dart
bounds_check1a_test.dart
bounds_check1b_test.dart
bounds_check2a_test.dart
bounds_check2b_test.dart
bounds_check3a_test.dart
bounds_check3b_test.dart
bounds_check3c_test.dart
bounds_check4a_test.dart
bounds_check4b_test.dart
bounds_check_test.dart
break_test.dart
call_is_function_test.dart
call_signature_test.dart
call_uninlined_test.dart
cfe_instance_constant_test.dart
checked_setter_test.dart
class_hierarchy_extends_clause_test.dart
closure2_test.dart
closure3_test.dart
closure4_test.dart
closure5_test.dart
closure6_test.dart
closure7_test.dart
closure_capture2_test.dart
closure_capture3_test.dart
closure_capture4_test.dart
closure_capture5_test.dart
closure_capture6_test.dart
closure_capture7_test.dart
closure_capture_test.dart
closure_signature_unneeded_test.dart
closure_test.dart
code_motion_exception_test.dart
compile_time_constant4_test.dart
compound_operator_index_test.dart
conditional_rewrite_test.dart
conditional_send_test.dart
conditional_test.dart
conflict_index_test.dart
consistent_add_error_test.dart
consistent_codeUnitAt_error_test.dart
consistent_index_error_array_test.dart
consistent_index_error_string_test.dart
consistent_index_error_typed_list_test.dart
consistent_null_add_error_test.dart
consistent_subtract_error_test.dart
consistent_type_error_test.dart
constant_fold_number_dart2_j_s_test.dart
constant_folding2_test.dart Add language versions to _2 test libraries 2021-04-26 17:58:57 +00:00
constant_folding_test.dart
constant_javascript_semantics2_test.dart
constant_javascript_semantics3_test.dart
constant_javascript_semantics_test5.dart
constant_truncate_test.dart Add language versions to _2 test libraries 2021-04-26 17:58:57 +00:00
crash_library_metadata.dart
data_uri_test.dart
deferred_fail_and_retry_lib.dart
deferred_fail_and_retry_test.dart
deferred_function_types1_test.dart
deferred_function_types2_test.dart
deferred_function_types3_test.dart
deferred_function_types4_test.dart
deferred_function_types5_test.dart
deferred_function_types6_test.dart
deferred_function_types7_test.dart
deferred_function_types8_test.dart
deferred_function_types_lib1.dart
deferred_function_types_lib2.dart
deferred_inheritance_lib1.dart Add language versions to _2 test libraries 2021-04-26 17:58:57 +00:00
deferred_inheritance_lib2.dart Add language versions to _2 test libraries 2021-04-26 17:58:57 +00:00
deferred_inheritance_test.dart Remove obsolete internal dart2js annotations 2021-08-04 23:27:18 +00:00
deferred_split_lib1.dart
deferred_split_lib2.dart
deferred_split_test.dart
deferred_tearoff_load_library_lib.dart
deferred_tearoff_load_library_test.dart
deferred_with_cross_origin_lib.dart
deferred_with_cross_origin_test.dart
deferred_with_csp_nonce2_test.dart
deferred_with_csp_nonce_lib.dart
deferred_with_csp_nonce_test.dart
do_test.dart
dynamic_bounds_check_test.dart
dynamic_invocation_test.dart
dynamic_type_literal_test.dart
effectively_constant_fields_test.dart
effectively_constant_instance_field_test.dart
empty_method_test.dart
eof_line_ending_test.dart
equals_test.dart
expose_this1_test.dart
expose_this2_test.dart
field_access_test.dart
field_in_constructor_test.dart
field_initializer_test.dart
fields_test.dart
first_class_types_hashcode_test.dart
fixed_type_argument_implements_test.dart
fixed_type_argument_test.dart
foo7_test.dart
for_in_test.dart
for_test.dart
function_parameters_test.dart
function_typed_arguments_test.dart
generator_elided_parameter_test.dart
generic_bounds_test.dart
generic_class_is_test.dart
generic_in_mixin_field_test.dart
generic_in_redirect_test.dart
generic_in_super_test.dart
generic_instantiation1_test.dart
generic_instantiation2_test.dart
generic_instantiation3_test.dart
generic_instantiation4_test.dart
generic_method_dynamic_is_test.dart
generic_method_dynamic_type_test.dart
generic_method_static_is_test.dart
generic_type_error_message_test.dart
generics_factories_test.dart
generics_is_check1_test.dart
getter_element_test.dart
getters_setters_test.dart
hash_code_test.dart
identical_trace_test.dart
if_in_loop_test.dart
if_null2_test.dart
if_null3_test.dart
if_null_test.dart
if_test.dart
index_test.dart
indirect_type_literal_test.dart
inference_super_set_call_test.dart
inferrer_is_int_test.dart [test] Replace non-implemented @DontInline() annotations 2021-07-26 13:22:31 +00:00
injected_cast_test.dart
inline_generic_test.dart
inline_position_crash_source.dart
inline_position_crash_test.dart
instantiation_stub_2_test.dart
instantiation_stub_test.dart
int_index_test.dart
interceptor_named_arguments_test.dart
interface_type_optimization_test.dart
invalid_annotation_test.dart
invoke_dynamic_test.dart
is_check_instanceof_test.dart
is_operator_test.dart
issue36562_test.dart
js_array_index_error_test.dart
js_array_removeLast_error_test.dart
js_array_sort_default_test.dart
js_interop_cast_test.dart
js_interop_implements_test.dart
js_interop_no_elide_optional_arg_test.dart
js_interop_optional_arg_test.dart
js_interop_test.dart
jsinterop_test.dart
label_test.dart
lax_runtime_type_closure_equals1_test.dart
lax_runtime_type_closure_equals2_test.dart
lax_runtime_type_closure_equals3_test.dart
lax_runtime_type_closure_equals4_test.dart
lax_runtime_type_closure_equals5_test.dart
lax_runtime_type_closure_equals6_test.dart
lax_runtime_type_closure_equals7_test.dart
lax_runtime_type_closure_equals8_test.dart
lax_runtime_type_closure_to_string3_test.dart
lax_runtime_type_closure_to_string4_test.dart
lax_runtime_type_closure_to_string5_test.dart
lax_runtime_type_closure_to_string6_test.dart
lax_runtime_type_equals1_test.dart
lax_runtime_type_equals2_test.dart
lax_runtime_type_equals3_test.dart
lax_runtime_type_equals4_test.dart
lax_runtime_type_instantiate_to_string_test.dart [dart2js] Rti-need fix for generic instantiations 2021-10-19 23:48:31 +00:00
LayoutTests_fast_mediastream_getusermedia_t01_test.dart
list_factory_test.dart
literal_string_juxtaposition_test.dart
literals_test.dart
local_function_call2_test.dart
local_function_call_test.dart
local_function_generic_strong_test.dart
local_function_signatures_strong_test.dart
local_function_signatures_test.dart
local_signature_test.dart
locals_test.dart
logical_and_test.dart
logical_or_test.dart
loop_if_phi_test.dart
many_constants_test.dart
many_fields_test.dart
many_instantiations_test.dart
map_to_set_test.dart
math_lib_prefix_test.dart
math_lib_test.dart
member_namespace_test.dart
method_signatures_strong_test.dart
method_signatures_test.dart
minus_zero2_test.dart
minus_zero_test.dart
mixin_subtype_test.dart
mixin_type_variable_test.dart
multi_global_def_single_instantiation_test.dart
named_mixin_runtime_type_test.dart
named_parameter_for_static_test.dart
named_parameter_test.dart
nan_negate_test.dart
new_from_env_test.dart
no_such_method_strong1_test.dart
no_such_method_strong2_test.dart
no_such_method_strong3_test.dart
no_such_method_strong4_test.dart
no_such_method_strong5_test.dart
no_such_method_strong6_test.dart
no_such_method_strong7_test.dart
no_such_method_strong8_test.dart
no_such_method_strong9_test.dart
no_such_method_strong10_test.dart
no_such_method_strong11_lib.dart
no_such_method_strong11_test.dart
no_such_method_strong12_test.dart
no_such_method_test.dart
non_jsinterop_test.dart
non_trivial_substitution_test.dart
not_equals_test.dart
not_test.dart
null_stacktrace_test.dart
null_test.dart
operator2_test.dart
operator3_test.dart
operator_equals_test.dart
operator_test.dart
optional_parameter_test.dart
panda_lib.dart
panda_test.dart
phi_elimination_test.dart
phi_gvn_test.dart
phi_test.dart
recursive_metadata_test.dart
regress_32069_test.dart
regress_36222_test.dart
regress_40349_test.dart
regress_42281_test.dart Add language versions to _2 test libraries 2021-04-26 17:58:57 +00:00
regress_null_aware_test.dart
regression_2913_test.dart
replaced_type_variable_test.dart
return_setter_test.dart
round_constant_folding_test.dart
rti_need_for_closure_signature_test.dart
rti_need_for_runtime_type_test.dart
runtime_type_closure_equals1_test.dart
runtime_type_closure_equals2_test.dart
runtime_type_closure_equals3_test.dart
runtime_type_closure_equals4_test.dart
runtime_type_closure_equals5_test.dart
runtime_type_closure_equals6_test.dart
runtime_type_closure_equals7_test.dart
runtime_type_closure_equals8_test.dart
runtime_type_equals1_test.dart
runtime_type_equals2_test.dart
runtime_type_equals3_test.dart
runtime_type_equals4_test.dart
runtime_type_equals5_test.dart
runtime_type_equals6_test.dart
runtime_type_equals7_test.dart
runtime_type_equals8_test.dart
runtime_type_int_test.dart
runtime_type_test.dart
runtime_type_to_string1_test.dart
send_test.dart
simple_string_constant_test.dart
source_mapping_crash_source.dart
source_mapping_crash_test.dart
static_field2_test.dart
static_field_test.dart
static_method2_test.dart
static_method_test.dart
static_var_no_initializer_test.dart
static_var_test.dart
string_escape_test.dart
string_interpolation_dynamic_test.dart
string_interpolation_opt1_test.dart
string_interpolation_test.dart
super_call_test.dart
super_constructor1_test.dart
super_constructor2_test.dart
switch_equals_test.dart
switch_test.dart
sync_star_element_rti_need_test.dart Add language versions to _2 test libraries 2021-04-26 17:58:57 +00:00
tear_off_types_test.dart
this_phi_elimination_test.dart
this_redirecting_constructor_test.dart
this_test.dart
throw1_test.dart
throw2_test.dart
timer_test.dart
to_string_test.dart
truncation_errors_test.dart
type_argument_factory_crash_test.dart
type_argument_factory_nocrash_test.dart
type_argument_optimization_test.dart
type_error_message_test.dart
type_literal2_test.dart
type_literal_test.dart
typevariable_factory_test.dart
typevariable_substitution_test.dart
typevariable_typedef_test.dart
unconditional_dartio_import_test.dart
unused_local_const_test.dart
useful_error_message_1_test.dart
weak_reference_test.dart Add WeakReference and Finalizer patches for ddc and dart2js 2022-02-08 22:01:36 +00:00
web_2.status Add WeakReference and Finalizer patches for ddc and dart2js 2022-02-08 22:01:36 +00:00
while_test.dart