Commit graph

22 commits

Author SHA1 Message Date
Roberto Castañeda Lozano
4cfecceb04 8261730: C2 compilation fails with assert(store->find_edge(load) != -1) failed: missing precedence edge
Relax assertion in PhaseCFG::verify() to accept the case where a store is used
to implement an implicit null check and a load is placed in the null block.

Reviewed-by: thartmann, kvn
2021-03-04 07:48:51 +00:00
Roberto Castañeda Lozano
f353fcf256 8258894: C2: Forbid GCM to move stores into loops
Prevent GCM from placing memory-writing nodes (such as stores) into loops deeper
than their home loop (determined by their control input). Such placements are
invalid, as they cause memory definitions to interfere, and risk causing
miscompilations. This change complements JDK-8255763, which only addresses
invalid placements in irreducible CFGs.

Add control input to stores in generated stubs to ensure that all memory-writing
nodes have control inputs from which their home block can be derived.

Add a battery of simplified fuzzer test cases where, before this change, GCM
moves stores into deeper loops.

Reviewed-by: thartmann, kvn
2021-01-27 15:08:39 +00:00
Roberto Castañeda Lozano
4e8338eb13 8255763: C2: OSR miscompilation caused by invalid memory instruction placement
Disable GCM hoisting of memory-writing nodes for irreducible CFGs. This prevents
GCM from wrongly "hoisting" stores into descendants of their original loop. Such
an "inverted hoisting" can happen due to CFGLoop::compute_freq()'s inaccurate
estimation of frequencies for irreducible CFGs.

Extend CFG verification code by checking that memory-writing nodes are placed in
either their original loop or an ancestor.

Add tests for the reducible and irreducible cases. The former was already
handled correctly before the change (the frequency estimation model prevents
"inverted hoisting" for reducible CFGs), and is just added for coverage.

This change addresses the specific miscompilation issue in a conservative way,
for simplicity and safety. Future work includes investigating if only the
illegal blocks can be discarded as candidates for GCM hoisting, and refining
frequency estimation for irreducible CFGs.

Reviewed-by: kvn, chagedorn
2020-12-21 13:04:24 +00:00
Roberto Castañeda Lozano
9fe9b24b88 8254575: C2: Clean up unused TRACK_PHI_INPUTS assertion code
Remove assertion code that was disabled in all build configurations.

Co-authored-by: Vladimir Ivanov <vlivanov@openjdk.org>
Reviewed-by: vlivanov, kvn
2020-10-14 08:06:59 +00:00
Roberto Castañeda Lozano
05459df0c7 8253765: C2: Control randomization in StressLCM and StressGCM
Use the compilation-local seed in 'StressLCM' and 'StressGCM' rather than the
global one. As a consequence, these options use by default a fresh seed in every
compilation, unless 'StressSeed=N' is specified, in which case they behave
deterministically. Annotate tests that use 'StressLCM' and 'StressGCM' with the
'stress' and 'randomness' keys to reflect this change in default behavior.

Reviewed-by: kvn, thartmann
2020-10-12 11:40:50 +00:00
Christian Hagedorn
840867efa6 8247218: Add default constructor to VectorSet to use Thread::current()->resource_area() as arena by default
Add a default construction to VectorSet and clean up uses of the old constructor.

Reviewed-by: kvn, thartmann
2020-06-29 17:14:19 +02:00
Roland Westrelin
c9faf88cb7 8240795: [REDO] 8238384 CTW: C2 compilation fails with "assert(store != load->find_exact_control(load->in(0))) failed: dependence cycle found"
Reviewed-by: kvn, thartmann
2020-03-13 16:32:51 +01:00
Roland Westrelin
43e0165eea 8240794: [BACKOUT] 8238384 CTW: C2 compilation fails with "assert(store != load->find_exact_control(load->in(0))) failed: dependence cycle found"
Reviewed-by: thartmann
2020-03-10 10:45:01 +01:00
Roland Westrelin
86ad195099 8238384: CTW: C2 compilation fails with "assert(store != load->find_exact_control(load->in(0))) failed: dependence cycle found"
Reviewed-by: vlivanov, thartmann
2020-02-20 16:41:05 +01:00
Christian Hagedorn
bd25c0e01a 8239852: java/util/concurrent tests fail with -XX:+VerifyGraphEdges: assert(!VerifyGraphEdges) failed: verification should have failed
Remove an assertion which was too strong for some valid IRs when running with -XX:+VerifyGraphEdges

Reviewed-by: neliasso, thartmann
2020-02-28 15:33:44 +01:00
Christian Hagedorn
b369aefc79 8238765: PhaseCFG::schedule_pinned_nodes cannot handle precedence edges from unmatched CFG nodes correctly
Fix PhaseCFG::schedule_pinned_nodes to correctly handle precedence edges from unmatched CFG nodes.

Reviewed-by: roland, neliasso, kvn
2020-02-17 12:29:03 +01:00
Tobias Hartmann
f225f7cd0b 8233788: Remove useless asserts in PhaseCFG::insert_anti_dependences
Removed useless asserts.

Reviewed-by: kvn
2019-11-08 09:16:48 +01:00
Claes Redestad
12adeca887 8233708: VectorSet cleanup
Reviewed-by: neliasso, shade, thartmann
2019-11-07 12:12:39 +01:00
Tobias Hartmann
f1763a5e86 8228772: C2 compilation fails due to unschedulable graph if DominatorSearchLimit is reached
Ignore membar if the load is already control dependent on it.

Reviewed-by: neliasso, kvn
2019-08-13 09:54:40 +02:00
Goetz Lindenmaier
2e682fa3cd 8207049: Minor improvements of compiler code
Reviewed-by: kvn, mdoerr
2018-07-12 16:31:28 +02:00
Nils Eliasson
9b281d9d05 8205999: C2 compilation fails with "assert(store->find_edge(load) != -1) failed: missing precedence edge"
Backout 8204157 to state before 8192992

Reviewed-by: thartmann, mdoerr
2018-07-03 09:11:00 +02:00
Nils Eliasson
8e9f9e5583 8204157: Compiler.sunflow hangs after JDK-8192992
Treat non-loop phis as stores

Reviewed-by: thartmann
2018-06-27 18:46:30 +02:00
Nils Eliasson
ac9f93a147 8192992: Test8007294.java failed: attempted to spill a non-spillable item
Fix bugs in schedule_late that forces load to early

Reviewed-by: kvn, thartmann
2018-03-21 16:03:12 +01:00
Roland Westrelin
93691571bc 8200303: C2 should leverage profiling for lookupswitch/tableswitch
Reviewed-by: kvn, thartmann
2018-04-24 15:07:20 -07:00
Lois Foltan
b085ebe7b7 8196884: VS2017 Multiple Type Cast Conversion Compilation Errors
Change the type of symbolic constant badAddressVal and introduce specific casts to fix multiple type cast conversion compilation errors.

Reviewed-by: coleenp, kbarrett
2018-02-20 07:46:40 -05:00
Zhengyu Gu
8969bd19e0 8187629: NMT: Memory miscounting in compiler (C2)
Fixed memory counting in compiler (C2)

Reviewed-by: adinn, cjplummer, kvn
2017-09-25 11:56:21 -04:00
Erik Joelsson
3789983e89 8187443: Forest Consolidation: Move files to unified layout
Reviewed-by: darcy, ihse
2017-09-12 19:03:39 +02:00
Renamed from hotspot/src/share/vm/opto/gcm.cpp (Browse further)