-
Enhancement
-
Resolution: Fixed
-
P3
-
16, 17
-
b24
// See if a shared loop-varying computation has no loop-varying uses.
// Happens if something is only used for JVM state in uncommon trap exits,
// like various versions of induction variable+offset. Clone the
// computation per usage to allow it to sink out of the loop.
if (has_ctrl(n) && !n->in(0)) {// n not dead and has no control edge (can float about)
is really doing what it is supposed to do. There are several things to be checked and might to be reworked:
- Revisit the entire cloning optimization:
- Is it really required or would other loop opts move loads out of the loop anyways if there are no uses inside?
- What if there are some uses inside and outside, is it really beneficial to do the cloning and possibly ending up with multiple loads?
If optimization is required:
- We should rethink the yanking part as it does not prevent the nodes to be put back on the worklist and might block some optimizations. Is there another way to prevent nodes without control to float back into the loop? Maybe adding a cast node with an explicit control?
- Make sure to not pin loads inside the loop if x_ctrl turns out to be a node inside the loop at the end (if that is not already guaranteed)
- Make sure not to pin loads in an outer strip mined loop if they do not have a use there (i.e. think about late_load_ctrl, maybe have a look at idea in
http://cr.openjdk.java.net/~chagedorn/8249607/webrev.01/ which tackles that problem)
- duplicates
-
JDK-8229015 Check removal of yank() in PhaseIdealLoop::split_if_with_blocks_post
- Closed
- relates to
-
JDK-8260709 C2: assert(false) failed: unscheduable graph
- Resolved
-
JDK-8271954 C2: assert(false) failed: Bad graph detected in build_loop_late
- Resolved
-
JDK-8229483 Sinking load out of loop may trigger: assert(found_sfpt) failed: no node in loop that's not input to safepoint
- Resolved
-
JDK-8249607 C2: assert(!had_error) failed: bad dominance
- Resolved
-
JDK-8260420 C2 compilation fails with assert(found_sfpt) failed: no node in loop that's not input to safepoint
- Resolved
-
JDK-8272562 C2: assert(false) failed: Bad graph detected in build_loop_late
- Resolved
-
JDK-8274074 SIGFPE with C2 compiled code with -XX:+StressGCM
- Resolved
-
JDK-8276846 JDK-8273416 is incomplete for UseSSE=1
- Resolved
-
JDK-8308103 Massive (up to ~30x) increase in C2 compilation time since JDK 17
- Resolved
-
JDK-8315377 C2: assert(u->find_out_with(Op_AddP) == nullptr) failed: more than 2 chained AddP nodes?
- Resolved
-
JDK-8338100 C2: assert(!n_loop->is_member(get_loop(lca))) failed: control must not be back in the loop
- Resolved
-
JDK-8267988 C2: assert(!addp->is_AddP() || addp->in(AddPNode::Base)->is_top() || addp->in(AddPNode::Base) == n->in(AddPNode::Base)) failed: Base pointers must match (addp 1301)
- Closed
-
JDK-8269088 C2 fails with assert(!n->is_Store() && !n->is_LoadStore()) failed: no node with a side effect
- Closed
-
JDK-8269752 C2: assert(false) failed: Bad graph detected in build_loop_late
- Closed
-
JDK-8269797 C2: assert(!in->is_CFG()) failed: CFG Node with no controlling input after JDK-8252372
- Closed
-
JDK-8270296 C2: Another assert(!had_error) failed: bad dominance
- Closed
-
JDK-8293941 C2: assert(false) failed: Bad graph detected in build_loop_late
- Closed
-
JDK-8340214 C2 compilation asserts with "no node with a side effect" in PhaseIdealLoop::try_sink_out_of_loop
- Resolved
-
JDK-8271600 C2: CheckCastPP which should closely follow Allocate is sunk of a loop
- Resolved
-
JDK-8273416 C2: assert(false) failed: bad AD file after JDK-8252372 with UseSSE={0,1}
- Resolved
-
JDK-8276064 CheckCastPP with raw oop input floats below a safepoint
- Resolved
-
JDK-8280600 C2: assert(!had_error) failed: bad dominance
- Resolved
-
JDK-8280696 C2 compilation hits assert(is_dominator(c, n_ctrl)) failed
- Resolved
-
JDK-8286625 C2 fails with assert(!n->is_Store() && !n->is_LoadStore()) failed: no node with a side effect
- Resolved
-
JDK-8290850 C2: create_new_if_for_predicate() does not clone pinned phi input nodes resulting in a broken graph
- Resolved
-
JDK-8335709 C2: assert(!loop->is_member(get_loop(useblock))) failed: must be outside loop
- Resolved
-
JDK-8273115 CountedLoopEndNode::stride_con crash in debug build with -XX:+TraceLoopOpts
- Resolved
-
JDK-8268017 C2: assert(phi_type->isa_int() || phi_type->isa_ptr() || phi_type->isa_long()) failed: bad phi type
- Closed
-
JDK-8269575 C2: assert(false) failed: graph should be schedulable after JDK-8252372
- Closed
-
JDK-8270307 C2: assert(false) failed: bad AD file after JDK-8267687
- Closed
-
JDK-8277529 SIGSEGV in C2 CompilerThread Node::rematerialize() compiling Packet::readUnsignedTrint
- Closed
-
JDK-8313262 C2: Sinking node may cause required cast to be dropped
- Closed
-
JDK-8336472 C2: assert(!n->is_Store() && !n->is_LoadStore()) failed: no node with a side effect
- Closed