History log of /openjdk10/hotspot/src/share/vm/opto/loopTransform.cpp
Revision Date Author Comments
# 13316:a361c7f25575 19-Jul-2017 vdeshpande

8175096: Analyse subword in the loop to set maximum vector size
Reviewed-by: kvn


# 13254:c044f8d03932 05-Jul-2017 jwilhelm

8182299: Enable disabled clang warnings, build on OSX 10 + Xcode 8
8182656: Make the required changes in GC code to build on OSX 10 + Xcode 8
8182657: Make the required changes in Runtime code to build on OSX 10 + Xcode 8
8182658: Make the required changes in Compiler code to build on OSX 10 + Xcode 8
Reviewed-by: jwilhelm, ehelin, phh
Contributed-by: phh <hohensee@amazon.com>, jwilhelm <jesper.wilhelmsson@oracle.com>


# 12698:55e3f1f3d0a7 09-Mar-2017 rraghavan

8175345: Reported null pointer dereference defect groups
Summary: Added required explicit NULL checks
Reviewed-by: thartmann, kvn


# 12380:1cc5d8cdfeb8 30-Nov-2016 roland

8170470: superword may miss reductions
Reviewed-by: kvn


# 11679:b725de5c248a 27-Jun-2016 thartmann

8159016: Over-unrolled loop is partially removed
Summary: Prevent over-unrolling of loops by computing upper bound for trip count.
Reviewed-by: kvn


# 11525:c23bf7df628c 20-Jun-2016 thartmann

8159715: Fix for 8072422 is incorrect
Summary: Fixed several issues introduced by 8072422.
Reviewed-by: zmajo, kvn


# 11515:aa5cd232c161 15-Jun-2016 shade

8157726: VarHandles/Unsafe should support sub-word atomic ops
Reviewed-by: psandoz, vlivanov, lagergren


# 11075:19f0981cb686 25-Apr-2016 thartmann

8154763: Crash with "assert(RangeCheckElimination)" if RangeCheckElimination is disabled
Summary: Disable multiversioning if range check elimination is turned off.
Reviewed-by: mcberg, kvn


# 10806:7010ee970bfb 05-Apr-2016 mcberg

8151573: Multiversioning for range check elimination
Summary: range check elimination in post loops
Reviewed-by: kvn


# 10801:a1e41855499b 03-Apr-2016 zmajo

8072422: Cleanup: Remove some unused flags/code in loop optimizations
Summary: Remove unused flags, change test using them.
Reviewed-by: kvn, twisti


# 10509:bcf5a0a5731b 21-Mar-2016 zmajo

8148754: C2 loop unrolling fails due to unexpected graph shape
Summary: Check if graph shape is appropriate for optimization, bail out optimization if not.
Reviewed-by: kvn, twisti, shade, dnsimon


# 10328:8b9fdaeb8c57 23-Feb-2016 shade

8148146: Integrate new internal Unsafe entry points, and basic intrinsic support for VarHandles
Reviewed-by: psandoz, kvn, jrose, adinn, simonis, coleenp


# 10228:5fefcbeda616 12-Feb-2016 mcberg

8149421: Vectorized Post Loops
Summary: add vectorised post loop for counted loops with vectors.
Reviewed-by: kvn


# 10099:56e0e1930e35 29-Jan-2016 roland

8137049: Code quality: reducing an trivial integer loop does not produce an optimal code
Summary: canonicalized if shape not recognized by empty loop detection code
Reviewed-by: kvn, shade


# 10074:796b8077f6e6 03-Feb-2016 roland

8147645: get_ctrl_no_update() code is wrong
Summary: Array.fill intrinsification code doesn't mark replaced control as dead
Reviewed-by: kvn


# 10029:bfb7a8a004de 18-Jan-2016 thartmann

6675699: need comprehensive fix for unconstrained ConvI2L with narrowed type
Summary: Emit CastII to make narrow ConvI2L dependent on the corresponding range check.
Reviewed-by: kvn, roland


# 9821:867bdec7c8c5 21-Dec-2015 aph

8145096: Undefined behaviour in HotSpot
Summary: Fix some integer overflows
Reviewed-by: jrose, kvn, kbarrett, adinn, iklam


# 9805:0e9d64117522 21-Dec-2015 thartmann

8145754: PhaseIdealLoop::is_scaled_iv_plus_offset() does not match AddI
Summary: is_scaled_iv_plus_offset() should handle AddI nodes with scaled iv as second input.
Reviewed-by: kvn


# 9462:231763c1883e 11-Nov-2015 twisti

8140424: don't prefix developer and notproduct flag variables with CONST_ in product builds
Reviewed-by: goetz, stefank


# 9452:8faaeb9dbb96 09-Nov-2015 roland

8137168: Replace IfNode with a new RangeCheckNode for range checks
Summary: new RangeCheckNode to enable optimization of explicit library level range checks
Reviewed-by: kvn, thartmann


# 9283:f31349f1215e 03-Nov-2015 thartmann

8141132: JEP 254: Compact Strings
Summary: Adopt a more space-efficient internal representation for strings.
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
Contributed-by: Brent Christian <brent.christian@oracle.com>, Vivek Deshpande <vivek.r.deshpande@intel.com>, Tobias Hartmann <tobias.hartmann@oracle.com>, Charlie Hunt <charlie.hunt@oracle.com>, Vladimir Kozlov <vladimir.kozlov@oracle.com>, Roger Riggs <roger.riggs@oracle.com>, Xueming Shen <xueming.shen@oracle.com>, Aleksey Shipilev <aleksey.shipilev@oracle.com>, Sandhya Viswanathan <sandhya.viswanathan@intel.com>


# 8829:af60f1cb36f2 10-Aug-2015 kvn

8011858: Use Compile::live_nodes() instead of Compile::unique() in appropriate places
Reviewed-by: kvn, vlivanov
Contributed-by: vlad.ureche@gmail.com


# 8688:94403236f303 10-Jul-2015 kvn

8129920: Vectorized loop unrolling
Summary: optimize loop opts for vectorizible loops.
Reviewed-by: kvn, roland


# 8636:d7f63963925f 29-Jun-2015 goetz

8086069: Adapt runtime calls to recent intrinsics to pass ints as long
Summary: Remove CCallingConventionRequiresIntsAsLongs from shared code and push functionality to native wrapper. Less optimal but more flexible.
Reviewed-by: jrose, kvn


# 8601:9251516ec93d 16-Jun-2015 mcberg

8080325: SuperWord loop unrolling analysis
Summary: Determine loop unroll factor based on supported vectors sizes.
Reviewed-by: roland, kvn


# 8508:421989a11af8 12-May-2015 roland

8085832: Optimize main and post loop out when pre loop is found empty
Summary: Eliminate main loop and post loop if pre loop becomes empty
Reviewed-by: kvn, mcberg


# 8506:ac1a9d805f11 04-Jun-2015 roland

8078866: compiler/eliminateAutobox/6934604/TestIntBoxing.java assert(p_f->Opcode() == Op_IfFalse) failed
Summary: Bail out from range check elimination if pre loop is not found
Reviewed-by: kvn


# 8495:141cca8431be 29-May-2015 roland

8080976: Unexpected AIOOB thrown from 1.9.0-ea-b64 on (regression)
Summary: Loop variant use in reduction should prevent vectorization
Reviewed-by: kvn, mcberg


# 8348:2032f163aec9 05-May-2015 kvn

8076284: Improve vectorization of parallel streams
Summary: Improve vectorization of java/util/stream/Streams$RangeIntSpliterator::forEachRemaining() method and enable loop vectorization in a given method on demand.
Reviewed-by: kvn
Contributed-by: jan.civlin@intel.com


# 8196:6fff5df5f3d2 01-Apr-2015 kvn

8074981: Integer/FP scalar reduction optimization
Summary: Add scalar reduction optimization to C2 to take advantage of vector instructions in modern x86 CPUs.
Reviewed-by: kvn, twisti
Contributed-by: michael.c.berg@intel.com


# 7942:0fd143632552 24-Feb-2015 roland

8073184: Compile of java.lang.Integer::getChars fails with LoopLimitCheck = false after 8054478
Summary: CastII that guards counted loops confuses range check elimination with LoopLimitCheck off
Reviewed-by: kvn, iveresov


# 7729:f25dbfaa75c2 14-Jan-2015 kvn

8068864: C2 failed: modified node is not on IGVN._worklist
Summary: Use igvn.replace_input_of() instead of set_req().
Reviewed-by: iveresov, vlivanov


# 7449:49dd956bc8c0 13-Nov-2014 roland

8054478: C2: Incorrectly compiled char[] array access crashes JVM
Summary: dead backbranch in main loop results in erroneous array access
Reviewed-by: kvn, iveresov


# 7448:7dd010c9fab1 24-Nov-2014 vlivanov

8058148: MaxNodeLimit and LiveNodeCountInliningCutoff
Reviewed-by: kvn, roland


# 6834:1c20691306e9 31-Jul-2014 thartmann

8053915: bigapps assert failure in C2: modified node is not on IGVN._worklist
Summary: Add modified node to the IGVN worklist in 'PhaseIdealLoop::do_range_check'.
Reviewed-by: kvn, roland


# 6820:c1d7ba5b5d45 25-Jul-2014 thartmann

8040213: C2 does not put all modified nodes on IGVN worklist
Summary: Verification code is added that checks if modified nodes are put on the IGVN worklist and modified nodes are processed by 'PhaseIterGVN::transform_old()'
Reviewed-by: kvn, jrose


# 6546:3533da0f7728 02-Jun-2014 thartmann

8034812: remove IDX_INIT macro hack in Node class
Summary: The IDX_INIT macro used by Node::Node(...) to retrieve the Compile object is removed and replaced by a call to Compile::current(). The Node constructor, new operator and all calls to it are adapted accordingly.
Reviewed-by: kvn, jrose, iveresov, goetz


# 6309:218bc7e588be 15-Apr-2014 kvn

8039050: Crash in C2 compiler at Node::rematerialize
Summary: Added missing calls to record_for_igvn() in loop opts. Added verification of def-use domination.
Reviewed-by: iveresov


# 6219:12cd03f831d8 01-Apr-2014 morris

8001532: C2 node files refactoring
Summary: Split C2 node files into cast, convert, countbits, intrinsic, move, narrowptr and opaquenode classes
Reviewed-by: kvn, morris


# 6182:2f459c5235f9 20-Mar-2014 kvn

8031320: Use Intel RTM instructions for locks
Summary: Use RTM for inflated locks and stack locks.
Reviewed-by: iveresov, twisti, roland, dcubed


# 6049:cd5d10655495 22-Jan-2014 rbackman

8027754: Enable loop optimizations for loops with MathExact inside
Reviewed-by: kvn, iveresov


# 6010:abec000618bf 28-Jan-2014 kvn

Merge


# 5989:da862781b584 21-Nov-2013 kvn

Merge


# 5976:2b8e28fdf503 05-Nov-2013 kvn

Merge


# 5972:cfd05ec74089 18-Sep-2013 goetz

8024342: PPC64 (part 111): Support for C calling conventions that require 64-bit ints.
Summary: Some platforms, as ppc and s390x/zArch require that 32-bit ints are passed as 64-bit values to C functions. This change adds support to adapt the signature and to issue proper casts to c2-compiled stubs. The functions are used in generate_native_wrapper(). Adapt signature used by the compiler as in PhaseIdealLoop::intrinsify_fill().
Reviewed-by: kvn


# 5776:de6a9e811145 24-Dec-2013 mikael

8029233: Update copyright year to match last edit in jdk8 hotspot repository for 2013
Summary: Copyright year updated for files modified during 2013
Reviewed-by: twisti, iveresov


# 5635:94a83e0f9ce1 05-Nov-2013 iveresov

8017065: C2 allows safepoint checks to leak into G1 pre-barriers
Summary: Make all raw loads strictly respect control dependencies, make sure RCE doesn't move raw loads, add verification of G1 pre-barriers.
Reviewed-by: kvn, roland


# 5614:60a32bb8ff99 30-Oct-2013 rbackman

8027444: mathExact: assert(i < _max) failed: oob: i=1, _max=1
Reviewed-by: duke


# 5356:c9ccd7b85f20 27-Sep-2013 rbackman

8024924: Intrinsify java.lang.Math.addExact
Reviewed-by: kvn, twisti


# 5078:bcc4f6f54d83 14-Aug-2013 kvn

8022993: Convert MAX_UNROLL constant to LoopMaxUnroll C2 flag
Summary: Replace MAX_UNROLL constant with new C2 LoopMaxUnroll flag.
Reviewed-by: roland


# 4344:a59625d96f71 20-Mar-2013 morris

8009181: [parfait] Null pointer deference in hotspot/src/share/vm/opto/loopTransform.cpp
Summary: add guarantee() to insert_pre_post_loops()
Reviewed-by: kvn


# 4268:b5cb079ecaa4 03-Feb-2013 ewendeli

Merge


# 4266:b95ad0610fef 26-Oct-2012 asaha

Merge


# 4044:b30b3c2a0cf2 22-Jan-2013 kvn

6896617: Optimize sun.nio.cs.ISO_8859_1$Encode.encodeArrayLoop() on x86
Summary: Use SSE4.2 and AVX2 instructions for encodeArray intrinsic.
Reviewed-by: roland


# 3880:2aff40cb4703 27-Nov-2012 bharadwaj

7092905: C2: Keep track of the number of dead nodes
Summary: keep an (almost) accurate running count of the reachable (live) flow graph nodes.
Reviewed-by: kvn, twisti, jrose, vlivanov


# 3787:d2582a08fa5d 18-Oct-2012 asaha

Merge


# 3785:218a94758fe7 10-Oct-2012 asaha

Merge


# 3782:521c82b9cbf8 19-Sep-2012 kvn

7198606: Improve VM optimization
Summary: Remove incorrect code in OptimizeFill optimization.
Reviewed-by: roland, twisti


# 3729:d804e148cff8 12-Oct-2012 kvn

Merge


# 3724:8e47bac5643a 09-Oct-2012 roland

7054512: Compress class pointers after perm gen removal
Summary: support of compress class pointers in the compilers.
Reviewed-by: kvn, twisti


# 3722:377508648226 08-Oct-2012 vlivanov

8000313: C2 should use jlong for 64bit values
Summary: Replace all occurrences of long with jlong in C2 code.
Reviewed-by: kvn, twisti


# 3718:b9a9ed0f8eeb 09-Oct-2012 mikael

7197424: update copyright year to match last edit in jdk8 hotspot repository
Summary: Update copyright year to 2012 for relevant files
Reviewed-by: dholmes, coleenp


# 3680:e626685e9f6c 27-Sep-2012 kvn

7193318: C2: remove number of inputs requirement from Node's new operator
Summary: Deleted placement new operator of Node - node(size_t, Compile *, int).
Reviewed-by: kvn, twisti
Contributed-by: bharadwaj.yadavalli@oracle.com


# 3588:0acd345fd810 29-Aug-2012 kvn

7160161: Missed safepoint in non-Counted loop
Summary: Do not remove safepoints during peeling optimization.
Reviewed-by: twisti


# 3412:5e990493719e 12-Jun-2012 kvn

7173340: C2: code cleanup: use PhaseIterGVN::replace_edge(Node*, int, Node*) where applicable
Summary: replace frequent C2 optimizer code patterns with new methods calls
Reviewed-by: kvn, twisti
Contributed-by: vladimir.x.ivanov@oracle.com


# 2694:da6a29fb0da5 07-Sep-2011 kvn

7054211: No loop unrolling done in jdk7b144 for a test update() while loop
Summary: restore unrolling code for CaffeineMark.
Reviewed-by: never


# 2613:6987871cfb9b 10-Aug-2011 kvn

7077439: Possible reference through NULL in loopPredicate.cpp:726
Summary: Use cl->is_valid_counted_loop() check.
Reviewed-by: never


# 2608:c96c3eb1efae 29-Jul-2011 kvn

7068051: SIGSEGV in PhaseIdealLoop::build_loop_late_post
Summary: Removed predicate cloning from loop peeling optimization and from split fall-in paths.
Reviewed-by: never


# 2550:e3cbc9ddd434 28-Jun-2011 kvn

7044738: Loop unroll optimization causes incorrect result
Summary: take into account memory dependencies when clonning nodes in clone_up_backedge_goo().
Reviewed-by: never


# 2544:aacaff365100 20-Jun-2011 kvn

7052494: Eclipse test fails on JDK 7 b142
Summary: Keep 'ne' test in Counted loop when we can't guarantee during compilation that init < limit.
Reviewed-by: never


# 2494:789d04408ca3 21-May-2011 kvn

7045693: java/util/EnumSet/EnumSetBash.java still failing intermittently
Summary: New limit for unrolled loop should be set only for zero trip guard and loop iteration test.
Reviewed-by: never


# 2480:38569792a45a 16-May-2011 kvn

7044725: -XX:-UnrollLimitCheck -Xcomp : Exception: String index out of range: 29488
Summary: Fix problems in new RCE code.
Reviewed-by: never


# 2464:3b1d58916d5f 10-May-2011 kvn

7043552: regression after 7042327
Summary: Generate Opaque2 node only during first unroll.
Reviewed-by: never


# 2445:f879eafd5835 05-May-2011 kvn

7042327: assert(opaq->outcnt() == 1 && opaq->in(1) == limit)
Summary: Separate limit by Opaque2 node when calculating new limit for unrolled loop.
Reviewed-by: never


# 2442:bad7ecd0b6ed 04-May-2011 kvn

5091921: Sign flip issues in loop optimizer
Summary: Fix integer overflow problem in the code generated by loop optimizer.
Reviewed-by: never


# 2430:ae93231c7a1f 28-Apr-2011 kvn

7039652: Performance regression after 7004547 changes
Summary: Use unrolled_count() to limit unrolling and use the stride check only for initial stride value.
Reviewed-by: never


# 2315:6c97c830fb6f 09-Apr-2011 jrose

Merge


# 2312:3af54845df98 08-Apr-2011 kvn

7004555: Add new policy for one iteration loops
Summary: Add new policy for one iteration loops (mostly formal pre- loops).
Reviewed-by: never


# 2300:d7a3fed1c1c9 04-Apr-2011 kvn

7004547: regular loop unroll should not unroll more than max unrolling
Summary: Take into account that after unroll conjoined heads and tails will fold.
Reviewed-by: never


# 2295:8b2317d732ec 04-Apr-2011 never

7026957: assert(type2aelembytes(store->as_Mem()->memory_type(), true) == 1 << shift->in(2)->get_int()) failed
Reviewed-by: kvn, jrose


# 2292:08eb13460b3a 02-Apr-2011 kvn

7004535: Clone loop predicate during loop unswitch
Summary: Clone loop predicate for clonned loops
Reviewed-by: never


# 2273:1d1603768966 05-Apr-2011 trims

7010070: Update all 2010 Oracle-changed OpenJDK files to have the proper copyright dates - second pass
Summary: Update the copyright to be 2010 on all changed files in OpenJDK
Reviewed-by: ohair


# 2264:cb162b348743 31-Mar-2011 kvn

7032696: Fix for 7029152 broke VM
Summary: StrIntrinsicNode::Ideal() should not optimize memory during Parse.
Reviewed-by: jrose, never


# 2259:f9424955eb18 30-Mar-2011 kvn

7029152: Ideal nodes for String intrinsics miss memory edge optimization
Summary: In Ideal() method of String intrinsics nodes look for TypeAryPtr::CHARS memory slice if memory is MergeMem. Do not unroll a loop with String intrinsics code.
Reviewed-by: never


# 2250:1927db75dd85 27-Mar-2011 never

7024475: loop doesn't terminate when compiled
Reviewed-by: kvn


# 2230:9dc311b8473e 21-Mar-2011 kvn

7008866: Missing loop predicate for loop with multiple entries
Summary: Add predicates when loop head bytecode is parsed instead of when back branch bytecode is parsed.
Reviewed-by: never


# 1879:f95d63e2154a 23-Nov-2010 stefank

6989984: Use standard include model for Hospot
Summary: Replaced MakeDeps and the includeDB files with more standardized solutions.
Reviewed-by: coleenp, kvn, kamg


# 1764:75588558f1bf 07-Oct-2010 never

6980792: Crash "exception happened outside interpreter, nmethods and vtable stubs (1)"
Reviewed-by: kvn


# 1733:c77e8f982901 15-Sep-2010 never

6984979: OptimizeFill misses some cases with an odd memory graph
Reviewed-by: kvn


# 1705:5e4f03302987 07-Sep-2010 never

6982533: Crash in ~StubRoutines::jbyte_fill with AggressiveOpts enabled
Reviewed-by: kvn


# 1683:d6f45b55c972 27-Aug-2010 never

4809552: Optimize Arrays.fill(...)
Reviewed-by: kvn


# 1541:6027dddc26c6 28-Jun-2010 kvn

6677629: PhaseIterGVN::subsume_node() should call hash_delete() and add_users_to_worklist()
Summary: Use replace_node() method instead of subsume_node().
Reviewed-by: jrose, never


# 1472:c18cbe5936b8 27-May-2010 trims

6941466: Oracle rebranding changes for Hotspot repositories
Summary: Change all the Sun copyrights to Oracle copyright
Reviewed-by: ohair


# 1303:c047da02984c 17-Mar-2010 never

6930043: C2: SIGSEGV in javasoft.sqe.tests.lang.arr017.arr01702.arr01702.loop_forw(II)I
Reviewed-by: kvn


# 1280:336c6c200f5f 25-Feb-2010 kvn

6930116: loop predication code does not handle If nodes with only one projection
Summary: Add check for iff->outcnt() < 2.
Reviewed-by: never


# 1275:b71f13525cc8 19-Feb-2010 never

6927049: assert(is_Loop(),"invalid node class")
Reviewed-by: kvn


# 1172:b2b6a9bf6238 12-Jan-2010 cfang

6894779: Loop Predication for Loop Optimizer in C2
Summary: Loop predication implementation
Reviewed-by: never, kvn


# 844:bd02caa94611 28-Jul-2009 xdono

6862919: Update copyright year
Summary: Update copyright for files that have been modified in 2009, up to 07/09
Reviewed-by: tbell, ohair


# 789:273b2358ef1a 28-May-2009 cfang

6837146: Should perform unswitch before maximally unroll in loop transformation
Summary: Move loop unswitch before maximally unroll
Reviewed-by: never


# 605:98cb887364d3 27-Feb-2009 twisti

6810672: Comment typos
Summary: I have collected some typos I have found while looking at the code.
Reviewed-by: kvn, never


# 420:a1980da045cc 07-Nov-2008 kvn

6462850: generate biased locking code in C2 ideal graph
Summary: Inline biased locking code in C2 ideal graph during macro nodes expansion
Reviewed-by: never


# 401:ee8f06bfb27c 03-Oct-2008 never

6743188: incomplete fix for 6700047 C2 failed in idom_no_update
Reviewed-by: rasbold, kvn


# 400:cc80376deb0c 02-Oct-2008 kvn

6667595: Set probability FAIR for pre-, post- loops and ALWAYS for main loop
Summary: Fix loop's probability. Add optimizations to avoid spilling. Change InlineSmallCode to product flag.
Reviewed-by: never


# 367:194b8e3a2fc4 17-Sep-2008 never

6384206: Phis which are later unneeded are impairing our ability to inline based on static types
Reviewed-by: rasbold, jrose


# 235:9c2ecc2ffb12 11-Jul-2008 trims

Merge


# 216:8d191a7697e2 20-Jun-2008 kvn

6715633: when matching a memory node the adr_type should not change
Summary: verify the adr_type of a mach node was not changed
Reviewed-by: rasbold, never


# 196:d1605aabd0a1 02-Jul-2008 xdono

6719955: Update copyright year
Summary: Update copyright year for files that have been modified in 2008
Reviewed-by: ohair, tbell


# 113:ba764ed4b6f2 13-Apr-2008 coleenp

6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv
Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold


# 39:76256d272075 06-Mar-2008 kvn

6667612: (Escape Analysis) disable loop cloning if it has a scalar replaceable allocation
Summary: Cloning an allocation will not allow scalar replacement since memory operations could not be associated with one allocation.
Reviewed-by: rasbold


# 0:a61af66fc99e 30-Nov-2007 duke

Initial load