├── .github
├── issue_template.md
└── pull_request_template.md
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── deprecate_32_bit
├── Deprecate_32-bit_Proposal_JEP.md
└── webrev
│ ├── doc
│ ├── building.html
│ ├── building.html-.html
│ ├── building.html.cdiff.html
│ ├── building.html.frames.html
│ ├── building.html.frames.prev_next.html
│ ├── building.html.html
│ ├── building.html.lhs.html
│ ├── building.html.patch
│ ├── building.html.rhs.html
│ ├── building.html.sdiff.html
│ ├── building.html.udiff.html
│ ├── building.md
│ ├── building.md-.html
│ ├── building.md.cdiff.html
│ ├── building.md.frames.html
│ ├── building.md.frames.prev_next.html
│ ├── building.md.html
│ ├── building.md.lhs.html
│ ├── building.md.patch
│ ├── building.md.rhs.html
│ ├── building.md.sdiff.html
│ └── building.md.udiff.html
│ ├── index.html
│ ├── jdk.patch
│ ├── make
│ └── autoconf
│ │ ├── platform.m4
│ │ ├── platform.m4-.html
│ │ ├── platform.m4.cdiff.html
│ │ ├── platform.m4.frames.html
│ │ ├── platform.m4.frames.prev_next.html
│ │ ├── platform.m4.html
│ │ ├── platform.m4.lhs.html
│ │ ├── platform.m4.patch
│ │ ├── platform.m4.rhs.html
│ │ ├── platform.m4.sdiff.html
│ │ └── platform.m4.udiff.html
│ ├── nanoduke.ico
│ ├── navigation.html
│ ├── navigation.js
│ └── style.css
├── ergonomics_profiles
├── JVMLS Ergonomics Profile 2023.pdf
└── readme.md
├── jdbc_auth_plugin
├── README.md
└── jdbc-auth-design.png
├── remove_win32_bit
└── jep.md
└── stack_allocation
├── Stack_Allocation_JEP.md
└── webrev
├── Initial stack allocation prototype.patch
├── index.html
├── nanoduke.ico
├── navigation.html
├── navigation.js
├── src
├── hotspot
│ └── share
│ │ ├── code
│ │ ├── debugInfo.cpp
│ │ ├── debugInfo.cpp-.html
│ │ ├── debugInfo.cpp.cdiff.html
│ │ ├── debugInfo.cpp.frames.html
│ │ ├── debugInfo.cpp.frames.prev_next.html
│ │ ├── debugInfo.cpp.html
│ │ ├── debugInfo.cpp.lhs.html
│ │ ├── debugInfo.cpp.patch
│ │ ├── debugInfo.cpp.rhs.html
│ │ ├── debugInfo.cpp.sdiff.html
│ │ ├── debugInfo.cpp.udiff.html
│ │ ├── debugInfo.hpp
│ │ ├── debugInfo.hpp-.html
│ │ ├── debugInfo.hpp.cdiff.html
│ │ ├── debugInfo.hpp.frames.html
│ │ ├── debugInfo.hpp.frames.prev_next.html
│ │ ├── debugInfo.hpp.html
│ │ ├── debugInfo.hpp.lhs.html
│ │ ├── debugInfo.hpp.patch
│ │ ├── debugInfo.hpp.rhs.html
│ │ ├── debugInfo.hpp.sdiff.html
│ │ └── debugInfo.hpp.udiff.html
│ │ ├── compiler
│ │ ├── compilerDefinitions.cpp
│ │ ├── compilerDefinitions.cpp-.html
│ │ ├── compilerDefinitions.cpp.cdiff.html
│ │ ├── compilerDefinitions.cpp.frames.html
│ │ ├── compilerDefinitions.cpp.frames.prev_next.html
│ │ ├── compilerDefinitions.cpp.html
│ │ ├── compilerDefinitions.cpp.lhs.html
│ │ ├── compilerDefinitions.cpp.patch
│ │ ├── compilerDefinitions.cpp.rhs.html
│ │ ├── compilerDefinitions.cpp.sdiff.html
│ │ ├── compilerDefinitions.cpp.udiff.html
│ │ ├── compilerDirectives.hpp
│ │ ├── compilerDirectives.hpp-.html
│ │ ├── compilerDirectives.hpp.cdiff.html
│ │ ├── compilerDirectives.hpp.frames.html
│ │ ├── compilerDirectives.hpp.frames.prev_next.html
│ │ ├── compilerDirectives.hpp.html
│ │ ├── compilerDirectives.hpp.lhs.html
│ │ ├── compilerDirectives.hpp.patch
│ │ ├── compilerDirectives.hpp.rhs.html
│ │ ├── compilerDirectives.hpp.sdiff.html
│ │ ├── compilerDirectives.hpp.udiff.html
│ │ ├── oopMap.cpp
│ │ ├── oopMap.cpp-.html
│ │ ├── oopMap.cpp.cdiff.html
│ │ ├── oopMap.cpp.frames.html
│ │ ├── oopMap.cpp.frames.prev_next.html
│ │ ├── oopMap.cpp.html
│ │ ├── oopMap.cpp.lhs.html
│ │ ├── oopMap.cpp.patch
│ │ ├── oopMap.cpp.rhs.html
│ │ ├── oopMap.cpp.sdiff.html
│ │ ├── oopMap.cpp.udiff.html
│ │ ├── oopMap.hpp
│ │ ├── oopMap.hpp-.html
│ │ ├── oopMap.hpp.cdiff.html
│ │ ├── oopMap.hpp.frames.html
│ │ ├── oopMap.hpp.frames.prev_next.html
│ │ ├── oopMap.hpp.html
│ │ ├── oopMap.hpp.lhs.html
│ │ ├── oopMap.hpp.patch
│ │ ├── oopMap.hpp.rhs.html
│ │ ├── oopMap.hpp.sdiff.html
│ │ └── oopMap.hpp.udiff.html
│ │ ├── gc
│ │ ├── g1
│ │ │ └── c2
│ │ │ │ ├── g1BarrierSetC2.cpp
│ │ │ │ ├── g1BarrierSetC2.cpp-.html
│ │ │ │ ├── g1BarrierSetC2.cpp.cdiff.html
│ │ │ │ ├── g1BarrierSetC2.cpp.frames.html
│ │ │ │ ├── g1BarrierSetC2.cpp.frames.prev_next.html
│ │ │ │ ├── g1BarrierSetC2.cpp.html
│ │ │ │ ├── g1BarrierSetC2.cpp.lhs.html
│ │ │ │ ├── g1BarrierSetC2.cpp.patch
│ │ │ │ ├── g1BarrierSetC2.cpp.rhs.html
│ │ │ │ ├── g1BarrierSetC2.cpp.sdiff.html
│ │ │ │ ├── g1BarrierSetC2.cpp.udiff.html
│ │ │ │ ├── g1BarrierSetC2.hpp
│ │ │ │ ├── g1BarrierSetC2.hpp-.html
│ │ │ │ ├── g1BarrierSetC2.hpp.cdiff.html
│ │ │ │ ├── g1BarrierSetC2.hpp.frames.html
│ │ │ │ ├── g1BarrierSetC2.hpp.frames.prev_next.html
│ │ │ │ ├── g1BarrierSetC2.hpp.html
│ │ │ │ ├── g1BarrierSetC2.hpp.lhs.html
│ │ │ │ ├── g1BarrierSetC2.hpp.patch
│ │ │ │ ├── g1BarrierSetC2.hpp.rhs.html
│ │ │ │ ├── g1BarrierSetC2.hpp.sdiff.html
│ │ │ │ └── g1BarrierSetC2.hpp.udiff.html
│ │ ├── parallel
│ │ │ ├── psParallelCompact.inline.hpp
│ │ │ ├── psParallelCompact.inline.hpp-.html
│ │ │ ├── psParallelCompact.inline.hpp.cdiff.html
│ │ │ ├── psParallelCompact.inline.hpp.frames.html
│ │ │ ├── psParallelCompact.inline.hpp.frames.prev_next.html
│ │ │ ├── psParallelCompact.inline.hpp.html
│ │ │ ├── psParallelCompact.inline.hpp.lhs.html
│ │ │ ├── psParallelCompact.inline.hpp.patch
│ │ │ ├── psParallelCompact.inline.hpp.rhs.html
│ │ │ ├── psParallelCompact.inline.hpp.sdiff.html
│ │ │ └── psParallelCompact.inline.hpp.udiff.html
│ │ └── shared
│ │ │ ├── c2
│ │ │ ├── barrierSetC2.hpp
│ │ │ ├── barrierSetC2.hpp-.html
│ │ │ ├── barrierSetC2.hpp.cdiff.html
│ │ │ ├── barrierSetC2.hpp.frames.html
│ │ │ ├── barrierSetC2.hpp.frames.prev_next.html
│ │ │ ├── barrierSetC2.hpp.html
│ │ │ ├── barrierSetC2.hpp.lhs.html
│ │ │ ├── barrierSetC2.hpp.patch
│ │ │ ├── barrierSetC2.hpp.rhs.html
│ │ │ ├── barrierSetC2.hpp.sdiff.html
│ │ │ ├── barrierSetC2.hpp.udiff.html
│ │ │ ├── cardTableBarrierSetC2.cpp
│ │ │ ├── cardTableBarrierSetC2.cpp-.html
│ │ │ ├── cardTableBarrierSetC2.cpp.cdiff.html
│ │ │ ├── cardTableBarrierSetC2.cpp.frames.html
│ │ │ ├── cardTableBarrierSetC2.cpp.frames.prev_next.html
│ │ │ ├── cardTableBarrierSetC2.cpp.html
│ │ │ ├── cardTableBarrierSetC2.cpp.lhs.html
│ │ │ ├── cardTableBarrierSetC2.cpp.patch
│ │ │ ├── cardTableBarrierSetC2.cpp.rhs.html
│ │ │ ├── cardTableBarrierSetC2.cpp.sdiff.html
│ │ │ ├── cardTableBarrierSetC2.cpp.udiff.html
│ │ │ ├── cardTableBarrierSetC2.hpp
│ │ │ ├── cardTableBarrierSetC2.hpp-.html
│ │ │ ├── cardTableBarrierSetC2.hpp.cdiff.html
│ │ │ ├── cardTableBarrierSetC2.hpp.frames.html
│ │ │ ├── cardTableBarrierSetC2.hpp.frames.prev_next.html
│ │ │ ├── cardTableBarrierSetC2.hpp.html
│ │ │ ├── cardTableBarrierSetC2.hpp.lhs.html
│ │ │ ├── cardTableBarrierSetC2.hpp.patch
│ │ │ ├── cardTableBarrierSetC2.hpp.rhs.html
│ │ │ ├── cardTableBarrierSetC2.hpp.sdiff.html
│ │ │ └── cardTableBarrierSetC2.hpp.udiff.html
│ │ │ ├── cardTable.hpp
│ │ │ ├── cardTable.hpp-.html
│ │ │ ├── cardTable.hpp.cdiff.html
│ │ │ ├── cardTable.hpp.frames.html
│ │ │ ├── cardTable.hpp.frames.prev_next.html
│ │ │ ├── cardTable.hpp.html
│ │ │ ├── cardTable.hpp.lhs.html
│ │ │ ├── cardTable.hpp.patch
│ │ │ ├── cardTable.hpp.rhs.html
│ │ │ ├── cardTable.hpp.sdiff.html
│ │ │ └── cardTable.hpp.udiff.html
│ │ ├── memory
│ │ ├── iterator.cpp
│ │ ├── iterator.cpp-.html
│ │ ├── iterator.cpp.cdiff.html
│ │ ├── iterator.cpp.frames.html
│ │ ├── iterator.cpp.frames.prev_next.html
│ │ ├── iterator.cpp.html
│ │ ├── iterator.cpp.lhs.html
│ │ ├── iterator.cpp.patch
│ │ ├── iterator.cpp.rhs.html
│ │ ├── iterator.cpp.sdiff.html
│ │ └── iterator.cpp.udiff.html
│ │ ├── opto
│ │ ├── block.cpp
│ │ ├── block.cpp-.html
│ │ ├── block.cpp.cdiff.html
│ │ ├── block.cpp.frames.html
│ │ ├── block.cpp.frames.prev_next.html
│ │ ├── block.cpp.html
│ │ ├── block.cpp.lhs.html
│ │ ├── block.cpp.patch
│ │ ├── block.cpp.rhs.html
│ │ ├── block.cpp.sdiff.html
│ │ ├── block.cpp.udiff.html
│ │ ├── buildOopMap.cpp
│ │ ├── buildOopMap.cpp-.html
│ │ ├── buildOopMap.cpp.cdiff.html
│ │ ├── buildOopMap.cpp.frames.html
│ │ ├── buildOopMap.cpp.frames.prev_next.html
│ │ ├── buildOopMap.cpp.html
│ │ ├── buildOopMap.cpp.lhs.html
│ │ ├── buildOopMap.cpp.patch
│ │ ├── buildOopMap.cpp.rhs.html
│ │ ├── buildOopMap.cpp.sdiff.html
│ │ ├── buildOopMap.cpp.udiff.html
│ │ ├── c2_globals.hpp
│ │ ├── c2_globals.hpp-.html
│ │ ├── c2_globals.hpp.cdiff.html
│ │ ├── c2_globals.hpp.frames.html
│ │ ├── c2_globals.hpp.frames.prev_next.html
│ │ ├── c2_globals.hpp.html
│ │ ├── c2_globals.hpp.lhs.html
│ │ ├── c2_globals.hpp.patch
│ │ ├── c2_globals.hpp.rhs.html
│ │ ├── c2_globals.hpp.sdiff.html
│ │ ├── c2_globals.hpp.udiff.html
│ │ ├── callnode.cpp
│ │ ├── callnode.cpp-.html
│ │ ├── callnode.cpp.cdiff.html
│ │ ├── callnode.cpp.frames.html
│ │ ├── callnode.cpp.frames.prev_next.html
│ │ ├── callnode.cpp.html
│ │ ├── callnode.cpp.lhs.html
│ │ ├── callnode.cpp.patch
│ │ ├── callnode.cpp.rhs.html
│ │ ├── callnode.cpp.sdiff.html
│ │ ├── callnode.cpp.udiff.html
│ │ ├── callnode.hpp
│ │ ├── callnode.hpp-.html
│ │ ├── callnode.hpp.cdiff.html
│ │ ├── callnode.hpp.frames.html
│ │ ├── callnode.hpp.frames.prev_next.html
│ │ ├── callnode.hpp.html
│ │ ├── callnode.hpp.lhs.html
│ │ ├── callnode.hpp.patch
│ │ ├── callnode.hpp.rhs.html
│ │ ├── callnode.hpp.sdiff.html
│ │ ├── callnode.hpp.udiff.html
│ │ ├── compile.cpp
│ │ ├── compile.cpp-.html
│ │ ├── compile.cpp.cdiff.html
│ │ ├── compile.cpp.frames.html
│ │ ├── compile.cpp.frames.prev_next.html
│ │ ├── compile.cpp.html
│ │ ├── compile.cpp.lhs.html
│ │ ├── compile.cpp.patch
│ │ ├── compile.cpp.rhs.html
│ │ ├── compile.cpp.sdiff.html
│ │ ├── compile.cpp.udiff.html
│ │ ├── compile.hpp
│ │ ├── compile.hpp-.html
│ │ ├── compile.hpp.cdiff.html
│ │ ├── compile.hpp.frames.html
│ │ ├── compile.hpp.frames.prev_next.html
│ │ ├── compile.hpp.html
│ │ ├── compile.hpp.lhs.html
│ │ ├── compile.hpp.patch
│ │ ├── compile.hpp.rhs.html
│ │ ├── compile.hpp.sdiff.html
│ │ ├── compile.hpp.udiff.html
│ │ ├── escape.cpp
│ │ ├── escape.cpp-.html
│ │ ├── escape.cpp.cdiff.html
│ │ ├── escape.cpp.frames.html
│ │ ├── escape.cpp.frames.prev_next.html
│ │ ├── escape.cpp.html
│ │ ├── escape.cpp.lhs.html
│ │ ├── escape.cpp.patch
│ │ ├── escape.cpp.rhs.html
│ │ ├── escape.cpp.sdiff.html
│ │ ├── escape.cpp.udiff.html
│ │ ├── escape.hpp
│ │ ├── escape.hpp-.html
│ │ ├── escape.hpp.cdiff.html
│ │ ├── escape.hpp.frames.html
│ │ ├── escape.hpp.frames.prev_next.html
│ │ ├── escape.hpp.html
│ │ ├── escape.hpp.lhs.html
│ │ ├── escape.hpp.patch
│ │ ├── escape.hpp.rhs.html
│ │ ├── escape.hpp.sdiff.html
│ │ ├── escape.hpp.udiff.html
│ │ ├── idealKit.cpp
│ │ ├── idealKit.cpp-.html
│ │ ├── idealKit.cpp.cdiff.html
│ │ ├── idealKit.cpp.frames.html
│ │ ├── idealKit.cpp.frames.prev_next.html
│ │ ├── idealKit.cpp.html
│ │ ├── idealKit.cpp.lhs.html
│ │ ├── idealKit.cpp.patch
│ │ ├── idealKit.cpp.rhs.html
│ │ ├── idealKit.cpp.sdiff.html
│ │ ├── idealKit.cpp.udiff.html
│ │ ├── idealKit.hpp
│ │ ├── idealKit.hpp-.html
│ │ ├── idealKit.hpp.cdiff.html
│ │ ├── idealKit.hpp.frames.html
│ │ ├── idealKit.hpp.frames.prev_next.html
│ │ ├── idealKit.hpp.html
│ │ ├── idealKit.hpp.lhs.html
│ │ ├── idealKit.hpp.patch
│ │ ├── idealKit.hpp.rhs.html
│ │ ├── idealKit.hpp.sdiff.html
│ │ ├── idealKit.hpp.udiff.html
│ │ ├── loopnode.cpp
│ │ ├── loopnode.cpp-.html
│ │ ├── loopnode.cpp.cdiff.html
│ │ ├── loopnode.cpp.frames.html
│ │ ├── loopnode.cpp.frames.prev_next.html
│ │ ├── loopnode.cpp.html
│ │ ├── loopnode.cpp.lhs.html
│ │ ├── loopnode.cpp.patch
│ │ ├── loopnode.cpp.rhs.html
│ │ ├── loopnode.cpp.sdiff.html
│ │ ├── loopnode.cpp.udiff.html
│ │ ├── machnode.hpp
│ │ ├── machnode.hpp-.html
│ │ ├── machnode.hpp.cdiff.html
│ │ ├── machnode.hpp.frames.html
│ │ ├── machnode.hpp.frames.prev_next.html
│ │ ├── machnode.hpp.html
│ │ ├── machnode.hpp.lhs.html
│ │ ├── machnode.hpp.patch
│ │ ├── machnode.hpp.rhs.html
│ │ ├── machnode.hpp.sdiff.html
│ │ ├── machnode.hpp.udiff.html
│ │ ├── macro.cpp
│ │ ├── macro.cpp-.html
│ │ ├── macro.cpp.cdiff.html
│ │ ├── macro.cpp.frames.html
│ │ ├── macro.cpp.frames.prev_next.html
│ │ ├── macro.cpp.html
│ │ ├── macro.cpp.lhs.html
│ │ ├── macro.cpp.patch
│ │ ├── macro.cpp.rhs.html
│ │ ├── macro.cpp.sdiff.html
│ │ ├── macro.cpp.udiff.html
│ │ ├── macro.hpp
│ │ ├── macro.hpp-.html
│ │ ├── macro.hpp.cdiff.html
│ │ ├── macro.hpp.frames.html
│ │ ├── macro.hpp.frames.prev_next.html
│ │ ├── macro.hpp.html
│ │ ├── macro.hpp.lhs.html
│ │ ├── macro.hpp.patch
│ │ ├── macro.hpp.rhs.html
│ │ ├── macro.hpp.sdiff.html
│ │ ├── macro.hpp.udiff.html
│ │ ├── memnode.cpp
│ │ ├── memnode.cpp-.html
│ │ ├── memnode.cpp.cdiff.html
│ │ ├── memnode.cpp.frames.html
│ │ ├── memnode.cpp.frames.prev_next.html
│ │ ├── memnode.cpp.html
│ │ ├── memnode.cpp.lhs.html
│ │ ├── memnode.cpp.patch
│ │ ├── memnode.cpp.rhs.html
│ │ ├── memnode.cpp.sdiff.html
│ │ ├── memnode.cpp.udiff.html
│ │ ├── output.cpp
│ │ ├── output.cpp-.html
│ │ ├── output.cpp.cdiff.html
│ │ ├── output.cpp.frames.html
│ │ ├── output.cpp.frames.prev_next.html
│ │ ├── output.cpp.html
│ │ ├── output.cpp.lhs.html
│ │ ├── output.cpp.patch
│ │ ├── output.cpp.rhs.html
│ │ ├── output.cpp.sdiff.html
│ │ └── output.cpp.udiff.html
│ │ └── runtime
│ │ ├── deoptimization.cpp
│ │ ├── deoptimization.cpp-.html
│ │ ├── deoptimization.cpp.cdiff.html
│ │ ├── deoptimization.cpp.frames.html
│ │ ├── deoptimization.cpp.frames.prev_next.html
│ │ ├── deoptimization.cpp.html
│ │ ├── deoptimization.cpp.lhs.html
│ │ ├── deoptimization.cpp.patch
│ │ ├── deoptimization.cpp.rhs.html
│ │ ├── deoptimization.cpp.sdiff.html
│ │ ├── deoptimization.cpp.udiff.html
│ │ ├── deoptimization.hpp
│ │ ├── deoptimization.hpp-.html
│ │ ├── deoptimization.hpp.cdiff.html
│ │ ├── deoptimization.hpp.frames.html
│ │ ├── deoptimization.hpp.frames.prev_next.html
│ │ ├── deoptimization.hpp.html
│ │ ├── deoptimization.hpp.lhs.html
│ │ ├── deoptimization.hpp.patch
│ │ ├── deoptimization.hpp.rhs.html
│ │ ├── deoptimization.hpp.sdiff.html
│ │ ├── deoptimization.hpp.udiff.html
│ │ ├── vframe_hp.cpp
│ │ ├── vframe_hp.cpp-.html
│ │ ├── vframe_hp.cpp.cdiff.html
│ │ ├── vframe_hp.cpp.frames.html
│ │ ├── vframe_hp.cpp.frames.prev_next.html
│ │ ├── vframe_hp.cpp.html
│ │ ├── vframe_hp.cpp.lhs.html
│ │ ├── vframe_hp.cpp.patch
│ │ ├── vframe_hp.cpp.rhs.html
│ │ ├── vframe_hp.cpp.sdiff.html
│ │ ├── vframe_hp.cpp.udiff.html
│ │ ├── vframe_hp.hpp
│ │ ├── vframe_hp.hpp-.html
│ │ ├── vframe_hp.hpp.cdiff.html
│ │ ├── vframe_hp.hpp.frames.html
│ │ ├── vframe_hp.hpp.frames.prev_next.html
│ │ ├── vframe_hp.hpp.html
│ │ ├── vframe_hp.hpp.lhs.html
│ │ ├── vframe_hp.hpp.patch
│ │ ├── vframe_hp.hpp.rhs.html
│ │ ├── vframe_hp.hpp.sdiff.html
│ │ └── vframe_hp.hpp.udiff.html
└── java.base
│ └── share
│ └── classes
│ └── java
│ └── util
│ ├── ArrayList.java
│ ├── ArrayList.java-.html
│ ├── ArrayList.java.cdiff.html
│ ├── ArrayList.java.frames.html
│ ├── ArrayList.java.frames.prev_next.html
│ ├── ArrayList.java.html
│ ├── ArrayList.java.lhs.html
│ ├── ArrayList.java.patch
│ ├── ArrayList.java.rhs.html
│ ├── ArrayList.java.sdiff.html
│ ├── ArrayList.java.udiff.html
│ └── regex
│ ├── Matcher.java
│ ├── Matcher.java-.html
│ ├── Matcher.java.cdiff.html
│ ├── Matcher.java.frames.html
│ ├── Matcher.java.frames.prev_next.html
│ ├── Matcher.java.html
│ ├── Matcher.java.lhs.html
│ ├── Matcher.java.patch
│ ├── Matcher.java.rhs.html
│ ├── Matcher.java.sdiff.html
│ └── Matcher.java.udiff.html
└── style.css
/.github/issue_template.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Proposal issue
3 | about: Use this template for creating proposals.
4 | title: "[DATE]: [PROPOSAL]"
5 | labels: needs triage
6 | assignees: karianna
7 | ---
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | Reviewers, please check our [Contributing Guide](../CONTRIBUTING.md) has been followed
2 | before accepting this PR.
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # IDES
2 | .idea/*
3 | .vscode/
4 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Microsoft Open Source Code of Conduct
2 |
3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
4 |
5 | Resources:
6 |
7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
10 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | Contributing to OpenJDK Proposals
2 | =====
3 |
4 | # Proposals
5 | Please contact the javaplatformteam@microsoft.com before submitting a PR.
6 |
7 | # Code of Conduct
8 | Please see our [Code of Conduct](CODE_OF_CONDUCT.md).
9 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Please see https://openjdk.java.net/legal/gplv2+ce.html
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # OpenJDK Proposals
2 | A place for Microsoft's Java Engineering Group to put [OpenJDK](https://openjdk.java.net)
3 | JDK Enhancement Proposals, and patches in case we don't have an author space at OpenJDK itself.
4 |
5 | ## Proposals
6 |
7 | 1. [Stack Allocation](./stack_allocation/Stack_Allocation_JEP.md) [(webrev)](https://microsoft.github.io/openjdk-proposals/stack_allocation/webrev/)
8 | 1. [Deprecate the Windows x86-32 port](./deprecate_32_bit/Deprecate_32-bit_Proposal_JEP.md) [(webrev)](https://microsoft.github.io/openjdk-proposals/deprecate_32_bit/webrev/)
9 | 1. [Ergonomics Profiles](./ergonomics_profiles/readme.md)
10 |
11 | ## Notes
12 | Files will be held here on a temporary basis.
13 |
14 | The [LICENSE](LICENSE) matches that of the OpenJDK project.
15 |
16 | Our [Code of Conduct](CODE_OF_CONDUCT.md).
17 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Security
4 |
5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
6 |
7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below.
8 |
9 | ## Reporting Security Issues
10 |
11 | **Please do not report security vulnerabilities through public GitHub issues.**
12 |
13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report).
14 |
15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc).
16 |
17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
18 |
19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
20 |
21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
22 | * Full paths of source file(s) related to the manifestation of the issue
23 | * The location of the affected source code (tag/branch/commit or direct URL)
24 | * Any special configuration required to reproduce the issue
25 | * Step-by-step instructions to reproduce the issue
26 | * Proof-of-concept or exploit code (if possible)
27 | * Impact of the issue, including how an attacker might exploit the issue
28 |
29 | This information will help us triage your report more quickly.
30 |
31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs.
32 |
33 | ## Preferred Languages
34 |
35 | We prefer all communications to be in English.
36 |
37 | ## Policy
38 |
39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd).
40 |
41 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/doc/building.html.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/doc/building.html.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames doc/building.html
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/doc/building.html.patch:
--------------------------------------------------------------------------------
1 | diff a/doc/building.html b/doc/building.html
2 | --- a/doc/building.html
3 | +++ b/doc/building.html
4 | @@ -319,10 +319,11 @@
5 | GB of RAM. (The more cores to use, the more memory you need.) At least 6
6 | GB of free disk space is required.
7 | Even for 32-bit builds, it is recommended to use a 64-bit build
8 | machine, and instead create a 32-bit target using
9 | --with-target-bits=32
.
10 | +Note: The Windows x86 port is deprecated.
11 | Building on aarch64
12 | At a minimum, a machine with 8 cores is advisable, as well as 8 GB of
13 | RAM. (The more cores to use, the more memory you need.) At least 6 GB of
14 | free disk space is required.
15 | If you do not have access to sufficiently powerful hardware, it is
16 | @@ -395,10 +396,11 @@
17 | than C:\git\jdk\Makefile
. This rule also applies to input
18 | to the build system, e.g. in arguments to configure
. So,
19 | use --with-msvcr-dll=/cygdrive/c/msvcr100.dll
rather than
20 | --with-msvcr-dll=c:\msvcr100.dll
. For details on this
21 | conversion, see the section on Fixpath .
22 | +Note: The Windows x86 port is deprecated.
23 | Cygwin
24 | A functioning Cygwin environment
25 | is required for building the JDK on Windows. If you have a 64-bit OS, we
26 | strongly recommend using the 64-bit version of Cygwin.
27 | Note: Cygwin has a model of continuously updating
28 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/doc/building.html.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff doc/building.html
6 |
7 |
8 |
9 | < prev index next > doc/building.html
10 | Print this page
11 |
12 |
13 |
14 | GB of RAM. (The more cores to use, the more memory you need.) At least 6
15 | GB of free disk space is required.</p>
16 | <p>Even for 32-bit builds, it is recommended to use a 64-bit build
17 | machine, and instead create a 32-bit target using
18 | <code>--with-target-bits=32</code>.</p>
19 | + <p>Note: The Windows x86 port is deprecated.</p>
20 | <h3 id="building-on-aarch64">Building on aarch64</h3>
21 | <p>At a minimum, a machine with 8 cores is advisable, as well as 8 GB of
22 | RAM. (The more cores to use, the more memory you need.) At least 6 GB of
23 | free disk space is required.</p>
24 | <p>If you do not have access to sufficiently powerful hardware, it is
25 |
26 |
27 |
28 |
29 | than <code>C:\git\jdk\Makefile</code>. This rule also applies to input
30 | to the build system, e.g. in arguments to <code>configure</code>. So,
31 | use <code>--with-msvcr-dll=/cygdrive/c/msvcr100.dll</code> rather than
32 | <code>--with-msvcr-dll=c:\msvcr100.dll</code>. For details on this
33 | conversion, see the section on <a href="#fixpath">Fixpath</a>.</p>
34 | + <p>Note: The Windows x86 port is deprecated.</p>
35 | <h4 id="cygwin">Cygwin</h4>
36 | <p>A functioning <a href="http://www.cygwin.com/">Cygwin</a> environment
37 | is required for building the JDK on Windows. If you have a 64-bit OS, we
38 | strongly recommend using the 64-bit version of Cygwin.</p>
39 | <p><strong>Note:</strong> Cygwin has a model of continuously updating
40 |
41 | < prev index next >
42 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/doc/building.md.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff doc/building.md
6 |
7 |
8 |
9 | < prev index next > doc/building.md
10 | Print this page
11 |
12 |
13 |
14 |
15 | space is required.
16 |
17 | Even for 32-bit builds, it is recommended to use a 64-bit build machine, and
18 | instead create a 32-bit target using `--with-target-bits=32`.
19 |
20 | + Note: The Widows x86 port is deprecated.
21 | +
22 | ### Building on aarch64
23 |
24 | At a minimum, a machine with 8 cores is advisable, as well as 8 GB of RAM.
25 | (The more cores to use, the more memory you need.) At least 6 GB of free disk
26 | space is required.
27 |
28 |
29 |
30 |
31 |
32 | rule also applies to input to the build system, e.g. in arguments to
33 | `configure`. So, use `--with-msvcr-dll=/cygdrive/c/msvcr100.dll` rather than
34 | `--with-msvcr-dll=c:\msvcr100.dll`. For details on this conversion, see the section
35 | on [Fixpath](#fixpath).
36 |
37 | + Note: The Widows x86 port is deprecated.
38 | +
39 | #### Cygwin
40 |
41 | A functioning [Cygwin](http://www.cygwin.com/) environment is required for
42 | building the JDK on Windows. If you have a 64-bit OS, we strongly recommend
43 | using the 64-bit version of Cygwin.
44 |
45 | < prev index next >
46 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/doc/building.md.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames doc/building.md
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/doc/building.md.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames doc/building.md
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/doc/building.md.patch:
--------------------------------------------------------------------------------
1 | diff a/doc/building.md b/doc/building.md
2 | --- a/doc/building.md
3 | +++ b/doc/building.md
4 | @@ -124,10 +124,12 @@
5 | space is required.
6 |
7 | Even for 32-bit builds, it is recommended to use a 64-bit build machine, and
8 | instead create a 32-bit target using `--with-target-bits=32`.
9 |
10 | +Note: The Widows x86 port is deprecated.
11 | +
12 | ### Building on aarch64
13 |
14 | At a minimum, a machine with 8 cores is advisable, as well as 8 GB of RAM.
15 | (The more cores to use, the more memory you need.) At least 6 GB of free disk
16 | space is required.
17 | @@ -197,10 +199,12 @@
18 | rule also applies to input to the build system, e.g. in arguments to
19 | `configure`. So, use `--with-msvcr-dll=/cygdrive/c/msvcr100.dll` rather than
20 | `--with-msvcr-dll=c:\msvcr100.dll`. For details on this conversion, see the section
21 | on [Fixpath](#fixpath).
22 |
23 | +Note: The Widows x86 port is deprecated.
24 | +
25 | #### Cygwin
26 |
27 | A functioning [Cygwin](http://www.cygwin.com/) environment is required for
28 | building the JDK on Windows. If you have a 64-bit OS, we strongly recommend
29 | using the 64-bit version of Cygwin.
30 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/doc/building.md.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff doc/building.md
6 |
7 |
8 |
9 | < prev index next > doc/building.md
10 | Print this page
11 |
12 |
13 |
14 | space is required.
15 |
16 | Even for 32-bit builds, it is recommended to use a 64-bit build machine, and
17 | instead create a 32-bit target using `--with-target-bits=32`.
18 |
19 | + Note: The Widows x86 port is deprecated.
20 | +
21 | ### Building on aarch64
22 |
23 | At a minimum, a machine with 8 cores is advisable, as well as 8 GB of RAM.
24 | (The more cores to use, the more memory you need.) At least 6 GB of free disk
25 | space is required.
26 |
27 |
28 |
29 |
30 | rule also applies to input to the build system, e.g. in arguments to
31 | `configure`. So, use `--with-msvcr-dll=/cygdrive/c/msvcr100.dll` rather than
32 | `--with-msvcr-dll=c:\msvcr100.dll`. For details on this conversion, see the section
33 | on [Fixpath](#fixpath).
34 |
35 | + Note: The Widows x86 port is deprecated.
36 | +
37 | #### Cygwin
38 |
39 | A functioning [Cygwin](http://www.cygwin.com/) environment is required for
40 | building the JDK on Windows. If you have a 64-bit OS, we strongly recommend
41 | using the 64-bit version of Cygwin.
42 |
43 | < prev index next >
44 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/make/autoconf/platform.m4.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff make/autoconf/platform.m4
6 |
7 |
8 |
9 | < prev index next > make/autoconf/platform.m4
10 | Print this page
11 |
12 |
13 |
14 |
15 | PLATFORM_EXTRACT_TARGET_AND_BUILD
16 | PLATFORM_SETUP_TARGET_CPU_BITS
17 | PLATFORM_SET_MODULE_TARGET_OS_VALUES
18 | PLATFORM_SET_RELEASE_FILE_OS_VALUES
19 | PLATFORM_SETUP_LEGACY_VARS
20 | + PLATFORM_CHECK_DEPRECATION
21 | + ])
22 | +
23 | + AC_DEFUN_ONCE([PLATFORM_CHECK_DEPRECATION],
24 | + [
25 | + AC_ARG_ENABLE(deprecated-ports, [AS_HELP_STRING([--enable-deprecated-ports@<:@=yes/no@:>@],
26 | + [Suppress the error when configuring for a deprecated port @<:@no@:>@])])
27 | + AC_REQUIRE([PLATFORM_EXTRACT_TARGET_AND_BUILD])
28 | + if test "x$OPENJDK_TARGET_OS" = xwindows && test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then
29 | + if test "x$enable_deprecated_ports" = "xyes"; then
30 | + AC_MSG_WARN([The Windows x86-32 port is deprecated and may be removed in a future release.])
31 | + else
32 | + AC_MSG_ERROR(m4_normalize([The Windows x86-32 port is deprecated and may be removed in a future release.
33 | + Use --enable-deprecated-ports=yes to suppress this error.]))
34 | + fi
35 | + fi
36 | ])
37 |
38 | AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION],
39 | [
40 | ###############################################################################
41 |
42 | < prev index next >
43 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/make/autoconf/platform.m4.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames make/autoconf/platform.m4
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/make/autoconf/platform.m4.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames make/autoconf/platform.m4
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/make/autoconf/platform.m4.patch:
--------------------------------------------------------------------------------
1 | diff a/make/autoconf/platform.m4 b/make/autoconf/platform.m4
2 | --- a/make/autoconf/platform.m4
3 | +++ b/make/autoconf/platform.m4
4 | @@ -654,10 +654,26 @@
5 | PLATFORM_EXTRACT_TARGET_AND_BUILD
6 | PLATFORM_SETUP_TARGET_CPU_BITS
7 | PLATFORM_SET_MODULE_TARGET_OS_VALUES
8 | PLATFORM_SET_RELEASE_FILE_OS_VALUES
9 | PLATFORM_SETUP_LEGACY_VARS
10 | + PLATFORM_CHECK_DEPRECATION
11 | +])
12 | +
13 | +AC_DEFUN_ONCE([PLATFORM_CHECK_DEPRECATION],
14 | +[
15 | + AC_ARG_ENABLE(deprecated-ports, [AS_HELP_STRING([--enable-deprecated-ports@<:@=yes/no@:>@],
16 | + [Suppress the error when configuring for a deprecated port @<:@no@:>@])])
17 | + AC_REQUIRE([PLATFORM_EXTRACT_TARGET_AND_BUILD])
18 | + if test "x$OPENJDK_TARGET_OS" = xwindows && test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then
19 | + if test "x$enable_deprecated_ports" = "xyes"; then
20 | + AC_MSG_WARN([The Windows x86-32 port is deprecated and may be removed in a future release.])
21 | + else
22 | + AC_MSG_ERROR(m4_normalize([The Windows x86-32 port is deprecated and may be removed in a future release.
23 | + Use --enable-deprecated-ports=yes to suppress this error.]))
24 | + fi
25 | + fi
26 | ])
27 |
28 | AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION],
29 | [
30 | ###############################################################################
31 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/make/autoconf/platform.m4.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff make/autoconf/platform.m4
6 |
7 |
8 |
9 | < prev index next > make/autoconf/platform.m4
10 | Print this page
11 |
12 |
13 |
14 | PLATFORM_EXTRACT_TARGET_AND_BUILD
15 | PLATFORM_SETUP_TARGET_CPU_BITS
16 | PLATFORM_SET_MODULE_TARGET_OS_VALUES
17 | PLATFORM_SET_RELEASE_FILE_OS_VALUES
18 | PLATFORM_SETUP_LEGACY_VARS
19 | + PLATFORM_CHECK_DEPRECATION
20 | + ])
21 | +
22 | + AC_DEFUN_ONCE([PLATFORM_CHECK_DEPRECATION],
23 | + [
24 | + AC_ARG_ENABLE(deprecated-ports, [AS_HELP_STRING([--enable-deprecated-ports@<:@=yes/no@:>@],
25 | + [Suppress the error when configuring for a deprecated port @<:@no@:>@])])
26 | + AC_REQUIRE([PLATFORM_EXTRACT_TARGET_AND_BUILD])
27 | + if test "x$OPENJDK_TARGET_OS" = xwindows && test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then
28 | + if test "x$enable_deprecated_ports" = "xyes"; then
29 | + AC_MSG_WARN([The Windows x86-32 port is deprecated and may be removed in a future release.])
30 | + else
31 | + AC_MSG_ERROR(m4_normalize([The Windows x86-32 port is deprecated and may be removed in a future release.
32 | + Use --enable-deprecated-ports=yes to suppress this error.]))
33 | + fi
34 | + fi
35 | ])
36 |
37 | AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION],
38 | [
39 | ###############################################################################
40 |
41 | < prev index next >
42 |
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/nanoduke.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/openjdk-proposals/b8c7737a46e63b8709ce93812a96a5c6dffa8fea/deprecate_32_bit/webrev/nanoduke.ico
--------------------------------------------------------------------------------
/deprecate_32_bit/webrev/style.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 | *
5 | * This code is free software; you can redistribute it and/or modify it
6 | * under the terms of the GNU General Public License version 2 only, as
7 | * published by the Free Software Foundation.
8 | *
9 | * This code is distributed in the hope that it will be useful, but WITHOUT
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 | * version 2 for more details (a copy is included in the LICENSE file that
13 | * accompanied this code).
14 | *
15 | * You should have received a copy of the GNU General Public License version
16 | * 2 along with this work; if not, write to the Free Software Foundation,
17 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 | *
19 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 | * or visit www.oracle.com if you need additional information or have any
21 | * questions.
22 | */
23 |
24 | body {
25 | background-color: #eeeeee;
26 | }
27 |
28 | span.line-old-header {
29 | color: red;
30 | font-size: large;
31 | font-weight: bold;
32 | }
33 |
34 | span.line-new-header {
35 | color: green;
36 | font-size: large;
37 | font-weight: bold;
38 | }
39 |
40 | span.line-added {
41 | color: blue;
42 | font-weight: bold;
43 | }
44 |
45 | span.line-modified {
46 | color: blue;
47 | }
48 |
49 | span.line-removed {
50 | color: brown;
51 | }
52 |
53 | span.udiff-line-added {
54 | color: blue;
55 | }
56 |
57 | span.udiff-line-modified-added {
58 | color: blue;
59 | }
60 |
61 | span.udiff-line-removed {
62 | color: brown;
63 | }
64 |
65 | span.udiff-line-modified-removed {
66 | color: brown;
67 | }
68 |
69 | span.file-modified {
70 | font-weight: bold;
71 | }
72 |
73 | span.file-renamed {
74 | font-style: italic;
75 | }
76 |
77 | span.file-added {
78 | color: green;
79 | font-weight: bold;
80 | }
81 |
82 | span.file-removed {
83 | color: red;
84 | font-weight: bold;
85 | }
86 |
87 | hr {
88 | border: none 0;
89 | border-top: 1px solid #aaa;
90 | height: 1px;
91 | }
92 |
93 | table.navigation {
94 | width: 100%;
95 | border: 0;
96 | align: center;
97 | }
98 |
99 | td.button {
100 | padding-left: 5px;
101 | padding-right: 5px;
102 | background-color: #eee;
103 | text-align: center;
104 | border: 1px #444 outset;
105 | cursor: pointer;
106 | }
107 |
108 | td.button a {
109 | font-weight: bold;
110 | color: black
111 | }
112 |
113 | td.button:hover {
114 | background: #ffcc99;
115 | }
116 |
117 | div.summary {
118 | font-size: .8em;
119 | border-bottom: 1px solid #aaa;
120 | padding-left: 1em;
121 | padding-right: 1em;
122 | }
123 |
124 | h2.summary {
125 | margin-bottom: 0.3em;
126 | }
127 |
128 | table.summary {
129 | white-space: nowrap;
130 | }
131 |
132 | table.summary th {
133 | vertical-align: top;
134 | text-align: right;
135 | }
136 |
137 | span.stat {
138 | font-size: .7em;
139 | }
140 |
141 | p.version {
142 | font-size: small;
143 | }
144 |
--------------------------------------------------------------------------------
/ergonomics_profiles/JVMLS Ergonomics Profile 2023.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/openjdk-proposals/b8c7737a46e63b8709ce93812a96a5c6dffa8fea/ergonomics_profiles/JVMLS Ergonomics Profile 2023.pdf
--------------------------------------------------------------------------------
/jdbc_auth_plugin/jdbc-auth-design.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/openjdk-proposals/b8c7737a46e63b8709ce93812a96a5c6dffa8fea/jdbc_auth_plugin/jdbc-auth-design.png
--------------------------------------------------------------------------------
/remove_win32_bit/jep.md:
--------------------------------------------------------------------------------
1 | # JEP NNN: Remove the Windows 32-bit x86 Port
2 |
3 | _Author_ Bruno Borges & George Adams
4 |
5 | _Owner_ Bruno Borges
6 |
7 | _Type_ Feature
8 |
9 | _Scope_ Implementation
10 |
11 | _Status_ Draft
12 |
13 | _Release_ 23
14 |
15 | _Component_ hotspot / other
16 |
17 | _Discussion_ jdk dash dev at openjdk dot org
18 |
19 | _Effort_ ?
20 |
21 | _Duration_ ?
22 |
23 | _Reviewed by_ Magnus Ihse Bursie
24 |
25 | _Endorsed by_ Magnus Ihse Bursie
26 |
27 | _Created_
28 |
29 | _Updated_
30 |
31 | _Issue_
32 |
33 | Summary
34 | -------
35 |
36 | Remove the source code and build support for the Windows 32-bit x86 port. This port was deprecated for removal in JDK 21 with the express intent to remove it in a future release.
37 |
38 | Goals
39 | -----
40 |
41 | - Remove all code paths that apply only to Windows 32-bit x86.
42 | - Cease all testing and development efforts targeting the Windows 32-bit x86 platform.
43 | - Simplify the JDK's build and test infrastructure.
44 |
45 | Non-Goals
46 | ---------
47 |
48 | - It is not a goal to remove or change 32-bit support for any platforms other than Windows.
49 | - It is not a goal to remove either code or support for Windows 32-bit in previous releases.
50 |
51 | Motivation
52 | ----------
53 |
54 | - Allow contributors in the OpenJDK Community to accelerate the development of new features and enhancements that will move the platform forward.
55 | - The implementation of [JEP 436 (Virtual Threads)](https://openjdk.org/jeps/436) for Windows x86-32 falls back to the use of kernel threads and therefore does not bring the expected benefits of Project Loom.
56 | - Windows 10, the last Windows operating system to support 32-bit operation, will reach End of Life in [October 2025](https://learn.microsoft.com/lifecycle/products/windows-10-home-and-pro).
57 |
58 | Description
59 | -----------
60 |
61 | - Find and remove all code paths in the code base that apply only to Windows 32-bit.
62 | - Modify the JDK build system to remove support for compiling on Windows 32-bit platforms, and halt testing activities for this architecture.
63 | - Update the JDK documentation to reflect the removal of Windows 32-bit support, and publicize this change so as to ensure a smooth transition for users and developers.
64 |
65 | Risks and Assumptions
66 | ---------------------
67 |
68 | Some users may still rely on 32-bit Java applications on Windows. This change requires Java applications running on 32-bit Windows to migrate to a 64-bit JDK and Windows environment, or else remain on legacy versions of the JDK, prior to JDK 23, which still include 32-bit support. Transition guidance and support by distributions and vendors of JDK binaries will be critical.
69 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/nanoduke.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/openjdk-proposals/b8c7737a46e63b8709ce93812a96a5c6dffa8fea/stack_allocation/webrev/nanoduke.ico
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/code/debugInfo.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/code/debugInfo.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/code/debugInfo.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/code/debugInfo.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/code/debugInfo.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/code/debugInfo.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/code/debugInfo.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/code/debugInfo.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/code/debugInfo.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/code/debugInfo.hpp b/src/hotspot/share/code/debugInfo.hpp
2 | --- a/src/hotspot/share/code/debugInfo.hpp
3 | +++ b/src/hotspot/share/code/debugInfo.hpp
4 | @@ -143,12 +143,14 @@
5 | bool is_visited() const { return _visited; }
6 |
7 | void set_value(oop value);
8 | void set_visited(bool visited) { _visited = false; }
9 |
10 | + virtual bool is_stack_object() { return false; }
11 | +
12 | // Serialization of debugging information
13 | - void read_object(DebugInfoReadStream* stream);
14 | + virtual void read_object(DebugInfoReadStream* stream);
15 | void write_on(DebugInfoWriteStream* stream);
16 |
17 | // Printing
18 | void print_on(outputStream* st) const;
19 | void print_fields_on(outputStream* st) const;
20 | @@ -183,10 +185,29 @@
21 |
22 | // Printing
23 | void print_on(outputStream* st) const;
24 | };
25 |
26 | +class StackObjectValue: public ObjectValue {
27 | +private:
28 | + Location _location;
29 | + ConstantIntValue *_field_length;
30 | +public:
31 | + StackObjectValue(int id, ScopeValue* klass, Location location, ConstantIntValue *field_length);
32 | + StackObjectValue(int id) : ObjectValue(id), _location(), _field_length(NULL) { }
33 | +
34 | + Location get_stack_location() { return _location; }
35 | + ConstantIntValue* get_field_length() { return _field_length; }
36 | +
37 | + bool is_stack_object(){ return true; }
38 | +
39 | + // Serialization of debugging information
40 | + void read_object(DebugInfoReadStream* stream);
41 | + void write_on(DebugInfoWriteStream* stream);
42 | +};
43 | +
44 | +
45 | class ConstantLongValue: public ScopeValue {
46 | private:
47 | jlong _value;
48 | public:
49 | ConstantLongValue(jlong value) { _value = value; }
50 | @@ -302,11 +323,11 @@
51 | Method* o = (Method*)(code()->metadata_at(read_int()));
52 | // is_metadata() is a faster check than is_metaspace_object()
53 | assert(o == NULL || o->is_metadata(), "meta data only");
54 | return o;
55 | }
56 | - ScopeValue* read_object_value(bool is_auto_box);
57 | + ScopeValue* read_object_value(int type);
58 | ScopeValue* get_cached_object();
59 | // BCI encoding is mostly unsigned, but -1 is a distinguished value
60 | int read_bci() { return read_int() + InvocationEntryBci; }
61 | };
62 |
63 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/compilerDefinitions.cpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/compiler/compilerDefinitions.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/compiler/compilerDefinitions.cpp
10 | Print this page
11 |
12 |
13 |
14 |
15 | }
16 | if (FLAG_IS_DEFAULT(LoopStripMiningIterShortLoop)) {
17 | // blind guess
18 | LoopStripMiningIterShortLoop = LoopStripMiningIter / 10;
19 | }
20 | + if (UseStackAllocation) {
21 | + if (!(UseSerialGC || UseParallelGC || UseG1GC)) {
22 | + vm_exit_during_initialization("UseStackAllocation is not supported with selected GC", GCConfig::hs_err_name());
23 | + FLAG_SET_DEFAULT(UseStackAllocation, false);
24 | + FLAG_SET_ERGO(UseStackAllocationRuntime, false);
25 | + } else {
26 | + FLAG_SET_ERGO(UseStackAllocationRuntime, true);
27 | + }
28 | + }
29 | #endif // COMPILER2
30 | }
31 |
32 | static CompLevel highest_compile_level() {
33 | return TieredCompilation ? MIN2((CompLevel) TieredStopAtLevel, CompLevel_highest_tier) : CompLevel_highest_tier;
34 |
35 | < prev index next >
36 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/compilerDefinitions.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/compiler/compilerDefinitions.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/compilerDefinitions.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/compiler/compilerDefinitions.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/compilerDefinitions.cpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/compiler/compilerDefinitions.cpp b/src/hotspot/share/compiler/compilerDefinitions.cpp
2 | --- a/src/hotspot/share/compiler/compilerDefinitions.cpp
3 | +++ b/src/hotspot/share/compiler/compilerDefinitions.cpp
4 | @@ -520,10 +520,19 @@
5 | }
6 | if (FLAG_IS_DEFAULT(LoopStripMiningIterShortLoop)) {
7 | // blind guess
8 | LoopStripMiningIterShortLoop = LoopStripMiningIter / 10;
9 | }
10 | + if (UseStackAllocation) {
11 | + if (!(UseSerialGC || UseParallelGC || UseG1GC)) {
12 | + vm_exit_during_initialization("UseStackAllocation is not supported with selected GC", GCConfig::hs_err_name());
13 | + FLAG_SET_DEFAULT(UseStackAllocation, false);
14 | + FLAG_SET_ERGO(UseStackAllocationRuntime, false);
15 | + } else {
16 | + FLAG_SET_ERGO(UseStackAllocationRuntime, true);
17 | + }
18 | + }
19 | #endif // COMPILER2
20 | }
21 |
22 | static CompLevel highest_compile_level() {
23 | return TieredCompilation ? MIN2((CompLevel) TieredStopAtLevel, CompLevel_highest_tier) : CompLevel_highest_tier;
24 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/compilerDefinitions.cpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/compiler/compilerDefinitions.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/compiler/compilerDefinitions.cpp
10 | Print this page
11 |
12 |
13 |
14 | }
15 | if (FLAG_IS_DEFAULT(LoopStripMiningIterShortLoop)) {
16 | // blind guess
17 | LoopStripMiningIterShortLoop = LoopStripMiningIter / 10;
18 | }
19 | + if (UseStackAllocation) {
20 | + if (!(UseSerialGC || UseParallelGC || UseG1GC)) {
21 | + vm_exit_during_initialization("UseStackAllocation is not supported with selected GC", GCConfig::hs_err_name());
22 | + FLAG_SET_DEFAULT(UseStackAllocation, false);
23 | + FLAG_SET_ERGO(UseStackAllocationRuntime, false);
24 | + } else {
25 | + FLAG_SET_ERGO(UseStackAllocationRuntime, true);
26 | + }
27 | + }
28 | #endif // COMPILER2
29 | }
30 |
31 | static CompLevel highest_compile_level() {
32 | return TieredCompilation ? MIN2((CompLevel) TieredStopAtLevel, CompLevel_highest_tier) : CompLevel_highest_tier;
33 |
34 | < prev index next >
35 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/compilerDirectives.hpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/compiler/compilerDirectives.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/compiler/compilerDirectives.hpp
10 | Print this page
11 |
12 |
13 |
14 | NOT_PRODUCT(cflags(IGVPrintLevel, intx, PrintIdealGraphLevel, IGVPrintLevel)) \
15 | cflags(TraceSpilling, bool, TraceSpilling, TraceSpilling) \
16 | cflags(Vectorize, bool, false, Vectorize) \
17 | cflags(VectorizeDebug, uintx, 0, VectorizeDebug) \
18 | cflags(CloneMapDebug, bool, false, CloneMapDebug) \
19 | ! cflags(MaxNodeLimit, intx, MaxNodeLimit, MaxNodeLimit)
20 | #else
21 | #define compilerdirectives_c2_flags(cflags)
22 | #endif
23 |
24 | class CompilerDirectives;
25 |
26 | NOT_PRODUCT(cflags(IGVPrintLevel, intx, PrintIdealGraphLevel, IGVPrintLevel)) \
27 | cflags(TraceSpilling, bool, TraceSpilling, TraceSpilling) \
28 | cflags(Vectorize, bool, false, Vectorize) \
29 | cflags(VectorizeDebug, uintx, 0, VectorizeDebug) \
30 | cflags(CloneMapDebug, bool, false, CloneMapDebug) \
31 | ! cflags(MaxNodeLimit, intx, MaxNodeLimit, MaxNodeLimit) \
32 | + NOT_PRODUCT(cflags(PrintEscapeAnalysis, bool, PrintEscapeAnalysis, PrintEscapeAnalysis)) \
33 | + NOT_PRODUCT(cflags(PrintEliminateAllocations, bool, PrintEliminateAllocations, PrintEliminateAllocations)) \
34 | + cflags(UseStackAllocation, bool, UseStackAllocation, UseStackAllocation) \
35 | + NOT_PRODUCT(cflags(PrintStackAllocation, bool, PrintStackAllocation, PrintStackAllocation))
36 | #else
37 | #define compilerdirectives_c2_flags(cflags)
38 | #endif
39 |
40 | class CompilerDirectives;
41 |
42 | < prev index next >
43 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/compilerDirectives.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/compiler/compilerDirectives.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/compilerDirectives.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/compiler/compilerDirectives.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/compilerDirectives.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/compiler/compilerDirectives.hpp b/src/hotspot/share/compiler/compilerDirectives.hpp
2 | --- a/src/hotspot/share/compiler/compilerDirectives.hpp
3 | +++ b/src/hotspot/share/compiler/compilerDirectives.hpp
4 | @@ -67,11 +67,15 @@
5 | NOT_PRODUCT(cflags(IGVPrintLevel, intx, PrintIdealGraphLevel, IGVPrintLevel)) \
6 | cflags(TraceSpilling, bool, TraceSpilling, TraceSpilling) \
7 | cflags(Vectorize, bool, false, Vectorize) \
8 | cflags(VectorizeDebug, uintx, 0, VectorizeDebug) \
9 | cflags(CloneMapDebug, bool, false, CloneMapDebug) \
10 | - cflags(MaxNodeLimit, intx, MaxNodeLimit, MaxNodeLimit)
11 | + cflags(MaxNodeLimit, intx, MaxNodeLimit, MaxNodeLimit) \
12 | +NOT_PRODUCT(cflags(PrintEscapeAnalysis, bool, PrintEscapeAnalysis, PrintEscapeAnalysis)) \
13 | +NOT_PRODUCT(cflags(PrintEliminateAllocations, bool, PrintEliminateAllocations, PrintEliminateAllocations)) \
14 | + cflags(UseStackAllocation, bool, UseStackAllocation, UseStackAllocation) \
15 | +NOT_PRODUCT(cflags(PrintStackAllocation, bool, PrintStackAllocation, PrintStackAllocation))
16 | #else
17 | #define compilerdirectives_c2_flags(cflags)
18 | #endif
19 |
20 | class CompilerDirectives;
21 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/compilerDirectives.hpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/compiler/compilerDirectives.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/compiler/compilerDirectives.hpp
10 | Print this page
11 |
12 |
13 |
14 | NOT_PRODUCT(cflags(IGVPrintLevel, intx, PrintIdealGraphLevel, IGVPrintLevel)) \
15 | cflags(TraceSpilling, bool, TraceSpilling, TraceSpilling) \
16 | cflags(Vectorize, bool, false, Vectorize) \
17 | cflags(VectorizeDebug, uintx, 0, VectorizeDebug) \
18 | cflags(CloneMapDebug, bool, false, CloneMapDebug) \
19 | - cflags(MaxNodeLimit, intx, MaxNodeLimit, MaxNodeLimit)
20 | + cflags(MaxNodeLimit, intx, MaxNodeLimit, MaxNodeLimit) \
21 | + NOT_PRODUCT(cflags(PrintEscapeAnalysis, bool, PrintEscapeAnalysis, PrintEscapeAnalysis)) \
22 | + NOT_PRODUCT(cflags(PrintEliminateAllocations, bool, PrintEliminateAllocations, PrintEliminateAllocations)) \
23 | + cflags(UseStackAllocation, bool, UseStackAllocation, UseStackAllocation) \
24 | + NOT_PRODUCT(cflags(PrintStackAllocation, bool, PrintStackAllocation, PrintStackAllocation))
25 | #else
26 | #define compilerdirectives_c2_flags(cflags)
27 | #endif
28 |
29 | class CompilerDirectives;
30 |
31 | < prev index next >
32 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/oopMap.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/compiler/oopMap.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/oopMap.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/compiler/oopMap.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/oopMap.hpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/compiler/oopMap.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/compiler/oopMap.hpp
10 | Print this page
11 |
12 |
13 |
14 |
15 | };
16 |
17 |
18 | class OopMapSet : public ResourceObj {
19 | friend class VMStructs;
20 | + friend class OopClosureWalker;
21 | private:
22 | GrowableArray<OopMap*> _list;
23 |
24 | void add(OopMap* value) { _list.append(value); }
25 |
26 | + static void stack_oop_do(oop *p, OopClosure* oop_fn,
27 | + GrowableArray<oop> *stack_oops,
28 | + intptr_t *stack_base, intptr_t *stack_top);
29 | +
30 | public:
31 | OopMapSet();
32 |
33 | // returns the number of OopMaps in this OopMapSet
34 | int size() const { return _list.length(); }
35 |
36 | < prev index next >
37 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/oopMap.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/compiler/oopMap.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/oopMap.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/compiler/oopMap.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/oopMap.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/compiler/oopMap.hpp b/src/hotspot/share/compiler/oopMap.hpp
2 | --- a/src/hotspot/share/compiler/oopMap.hpp
3 | +++ b/src/hotspot/share/compiler/oopMap.hpp
4 | @@ -197,15 +197,20 @@
5 | };
6 |
7 |
8 | class OopMapSet : public ResourceObj {
9 | friend class VMStructs;
10 | + friend class OopClosureWalker;
11 | private:
12 | GrowableArray _list;
13 |
14 | void add(OopMap* value) { _list.append(value); }
15 |
16 | + static void stack_oop_do(oop *p, OopClosure* oop_fn,
17 | + GrowableArray *stack_oops,
18 | + intptr_t *stack_base, intptr_t *stack_top);
19 | +
20 | public:
21 | OopMapSet();
22 |
23 | // returns the number of OopMaps in this OopMapSet
24 | int size() const { return _list.length(); }
25 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/compiler/oopMap.hpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/compiler/oopMap.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/compiler/oopMap.hpp
10 | Print this page
11 |
12 |
13 |
14 | };
15 |
16 |
17 | class OopMapSet : public ResourceObj {
18 | friend class VMStructs;
19 | + friend class OopClosureWalker;
20 | private:
21 | GrowableArray<OopMap*> _list;
22 |
23 | void add(OopMap* value) { _list.append(value); }
24 |
25 | + static void stack_oop_do(oop *p, OopClosure* oop_fn,
26 | + GrowableArray<oop> *stack_oops,
27 | + intptr_t *stack_base, intptr_t *stack_top);
28 | +
29 | public:
30 | OopMapSet();
31 |
32 | // returns the number of OopMaps in this OopMapSet
33 | int size() const { return _list.length(); }
34 |
35 | < prev index next >
36 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/g1/c2/g1BarrierSetC2.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/g1/c2/g1BarrierSetC2.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp
10 | Print this page
11 |
12 |
13 |
14 |
15 |
16 | public:
17 | virtual bool is_gc_barrier_node(Node* node) const;
18 | virtual void eliminate_gc_barrier(PhaseMacroExpand* macro, Node* node) const;
19 | virtual Node* step_over_gc_barrier(Node* c) const;
20 | + virtual bool process_barrier_node(Node* cast_node, PhaseIterGVN& igvn) const;
21 | +
22 |
23 | #ifdef ASSERT
24 | virtual void verify_gc_barriers(Compile* compile, CompilePhase phase) const;
25 | #endif
26 |
27 |
28 | < prev index next >
29 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp b/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp
2 | --- a/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp
3 | +++ b/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp
4 | @@ -86,10 +86,12 @@
5 |
6 | public:
7 | virtual bool is_gc_barrier_node(Node* node) const;
8 | virtual void eliminate_gc_barrier(PhaseMacroExpand* macro, Node* node) const;
9 | virtual Node* step_over_gc_barrier(Node* c) const;
10 | + virtual bool process_barrier_node(Node* cast_node, PhaseIterGVN& igvn) const;
11 | +
12 |
13 | #ifdef ASSERT
14 | virtual void verify_gc_barriers(Compile* compile, CompilePhase phase) const;
15 | #endif
16 |
17 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp
10 | Print this page
11 |
12 |
13 |
14 |
15 | public:
16 | virtual bool is_gc_barrier_node(Node* node) const;
17 | virtual void eliminate_gc_barrier(PhaseMacroExpand* macro, Node* node) const;
18 | virtual Node* step_over_gc_barrier(Node* c) const;
19 | + virtual bool process_barrier_node(Node* cast_node, PhaseIterGVN& igvn) const;
20 | +
21 |
22 | #ifdef ASSERT
23 | virtual void verify_gc_barriers(Compile* compile, CompilePhase phase) const;
24 | #endif
25 |
26 |
27 | < prev index next >
28 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp
10 | Print this page
11 |
12 |
13 |
14 | oop obj = CompressedOops::decode_not_null(heap_oop);
15 | assert(ParallelScavengeHeap::heap()->is_in(obj), "should be in heap");
16 |
17 | oop new_obj = (oop)summary_data().calc_new_pointer(obj, cm);
18 | assert(new_obj != NULL, // is forwarding ptr?
19 | ! "should be forwarded");
20 | // Just always do the update unconditionally?
21 | if (new_obj != NULL) {
22 | assert(ParallelScavengeHeap::heap()->is_in_reserved(new_obj),
23 | ! "should be in object space");
24 | RawAccess<IS_NOT_NULL>::oop_store(p, new_obj);
25 | }
26 | }
27 | }
28 |
29 |
30 | oop obj = CompressedOops::decode_not_null(heap_oop);
31 | assert(ParallelScavengeHeap::heap()->is_in(obj), "should be in heap");
32 |
33 | oop new_obj = (oop)summary_data().calc_new_pointer(obj, cm);
34 | assert(new_obj != NULL, // is forwarding ptr?
35 | ! "should be forwarded");
36 | // Just always do the update unconditionally?
37 | if (new_obj != NULL) {
38 | assert(ParallelScavengeHeap::heap()->is_in_reserved(new_obj),
39 | ! "should be in object space");
40 | RawAccess<IS_NOT_NULL>::oop_store(p, new_obj);
41 | }
42 | }
43 | }
44 |
45 |
46 | < prev index next >
47 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp b/src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp
2 | --- a/src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp
3 | +++ b/src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp
4 | @@ -112,15 +112,15 @@
5 | oop obj = CompressedOops::decode_not_null(heap_oop);
6 | assert(ParallelScavengeHeap::heap()->is_in(obj), "should be in heap");
7 |
8 | oop new_obj = (oop)summary_data().calc_new_pointer(obj, cm);
9 | assert(new_obj != NULL, // is forwarding ptr?
10 | - "should be forwarded");
11 | + "should be forwarded");
12 | // Just always do the update unconditionally?
13 | if (new_obj != NULL) {
14 | assert(ParallelScavengeHeap::heap()->is_in_reserved(new_obj),
15 | - "should be in object space");
16 | + "should be in object space");
17 | RawAccess::oop_store(p, new_obj);
18 | }
19 | }
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/gc/parallel/psParallelCompact.inline.hpp
10 | Print this page
11 |
12 |
13 |
14 | oop obj = CompressedOops::decode_not_null(heap_oop);
15 | assert(ParallelScavengeHeap::heap()->is_in(obj), "should be in heap");
16 |
17 | oop new_obj = (oop)summary_data().calc_new_pointer(obj, cm);
18 | assert(new_obj != NULL, // is forwarding ptr?
19 | - "should be forwarded");
20 | + "should be forwarded");
21 | // Just always do the update unconditionally?
22 | if (new_obj != NULL) {
23 | assert(ParallelScavengeHeap::heap()->is_in_reserved(new_obj),
24 | - "should be in object space");
25 | + "should be in object space");
26 | RawAccess<IS_NOT_NULL>::oop_store(p, new_obj);
27 | }
28 | }
29 | }
30 |
31 |
32 | < prev index next >
33 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
10 | Print this page
11 |
12 |
13 |
14 |
15 | // This could for example comprise macro nodes to be expanded during macro expansion.
16 | virtual void* create_barrier_state(Arena* comp_arena) const { return NULL; }
17 | // If the BarrierSetC2 state has barrier nodes in its compilation
18 | // unit state to be expanded later, then now is the time to do so.
19 | virtual bool expand_barriers(Compile* C, PhaseIterGVN& igvn) const { return false; }
20 | + virtual bool process_barrier_node(Node* cast_node, PhaseIterGVN& igvn) const { return false; }
21 | virtual bool optimize_loops(PhaseIdealLoop* phase, LoopOptsMode mode, VectorSet& visited, Node_Stack& nstack, Node_List& worklist) const { return false; }
22 | virtual bool strip_mined_loops_expanded(LoopOptsMode mode) const { return false; }
23 | virtual bool is_gc_specific_loop_opts_pass(LoopOptsMode mode) const { return false; }
24 |
25 | enum CompilePhase {
26 |
27 | < prev index next >
28 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
2 | --- a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
3 | +++ b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
4 | @@ -271,10 +271,11 @@
5 | // This could for example comprise macro nodes to be expanded during macro expansion.
6 | virtual void* create_barrier_state(Arena* comp_arena) const { return NULL; }
7 | // If the BarrierSetC2 state has barrier nodes in its compilation
8 | // unit state to be expanded later, then now is the time to do so.
9 | virtual bool expand_barriers(Compile* C, PhaseIterGVN& igvn) const { return false; }
10 | + virtual bool process_barrier_node(Node* cast_node, PhaseIterGVN& igvn) const { return false; }
11 | virtual bool optimize_loops(PhaseIdealLoop* phase, LoopOptsMode mode, VectorSet& visited, Node_Stack& nstack, Node_List& worklist) const { return false; }
12 | virtual bool strip_mined_loops_expanded(LoopOptsMode mode) const { return false; }
13 | virtual bool is_gc_specific_loop_opts_pass(LoopOptsMode mode) const { return false; }
14 |
15 | enum CompilePhase {
16 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
10 | Print this page
11 |
12 |
13 |
14 | // This could for example comprise macro nodes to be expanded during macro expansion.
15 | virtual void* create_barrier_state(Arena* comp_arena) const { return NULL; }
16 | // If the BarrierSetC2 state has barrier nodes in its compilation
17 | // unit state to be expanded later, then now is the time to do so.
18 | virtual bool expand_barriers(Compile* C, PhaseIterGVN& igvn) const { return false; }
19 | + virtual bool process_barrier_node(Node* cast_node, PhaseIterGVN& igvn) const { return false; }
20 | virtual bool optimize_loops(PhaseIdealLoop* phase, LoopOptsMode mode, VectorSet& visited, Node_Stack& nstack, Node_List& worklist) const { return false; }
21 | virtual bool strip_mined_loops_expanded(LoopOptsMode mode) const { return false; }
22 | virtual bool is_gc_specific_loop_opts_pass(LoopOptsMode mode) const { return false; }
23 |
24 | enum CompilePhase {
25 |
26 | < prev index next >
27 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp-.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Old src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp
6 |
7 |
8 |
9 |
10 | 1 /*
11 | 2 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
12 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
13 | 4 *
14 | 5 * This code is free software; you can redistribute it and/or modify it
15 | 6 * under the terms of the GNU General Public License version 2 only, as
16 | 7 * published by the Free Software Foundation.
17 | 8 *
18 | 9 * This code is distributed in the hope that it will be useful, but WITHOUT
19 | 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 | 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 | 12 * version 2 for more details (a copy is included in the LICENSE file that
22 | 13 * accompanied this code).
23 | 14 *
24 | 15 * You should have received a copy of the GNU General Public License version
25 | 16 * 2 along with this work; if not, write to the Free Software Foundation,
26 | 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
27 | 18 *
28 | 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
29 | 20 * or visit www.oracle.com if you need additional information or have any
30 | 21 * questions.
31 | 22 *
32 | 23 */
33 | 24
34 | 25 #ifndef SHARE_GC_SHARED_C2_CARDTABLEBARRIERSETC2_HPP
35 | 26 #define SHARE_GC_SHARED_C2_CARDTABLEBARRIERSETC2_HPP
36 | 27
37 | 28 #include "gc/shared/c2/modRefBarrierSetC2.hpp"
38 | 29
39 | 30 class CardTableBarrierSetC2: public ModRefBarrierSetC2 {
40 | 31 protected:
41 | 32 virtual void post_barrier(GraphKit* kit,
42 | 33 Node* ctl,
43 | 34 Node* store,
44 | 35 Node* obj,
45 | 36 Node* adr,
46 | 37 uint adr_idx,
47 | 38 Node* val,
48 | 39 BasicType bt,
49 | 40 bool use_precise) const;
50 | 41
51 | 42 Node* byte_map_base_node(GraphKit* kit) const;
52 | 43
53 | 44 public:
54 | 45 virtual void clone(GraphKit* kit, Node* src, Node* dst, Node* size, bool is_array) const;
55 | 46 virtual bool is_gc_barrier_node(Node* node) const;
56 | 47 virtual void eliminate_gc_barrier(PhaseMacroExpand* macro, Node* node) const;
57 | 48 virtual bool array_copy_requires_gc_barriers(bool tightly_coupled_alloc, BasicType type, bool is_clone, ArrayCopyPhase phase) const;
58 | 49
59 | 50 bool use_ReduceInitialCardMarks() const;
60 | 51 };
61 | 52
62 | 53 #endif // SHARE_GC_SHARED_C2_CARDTABLEBARRIERSETC2_HPP
63 |
64 |
65 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp b/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp
2 | --- a/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp
3 | +++ b/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp
4 | @@ -24,10 +24,28 @@
5 |
6 | #ifndef SHARE_GC_SHARED_C2_CARDTABLEBARRIERSETC2_HPP
7 | #define SHARE_GC_SHARED_C2_CARDTABLEBARRIERSETC2_HPP
8 |
9 | #include "gc/shared/c2/modRefBarrierSetC2.hpp"
10 | +#include "utilities/growableArray.hpp"
11 | +
12 | +class CastP2XNode;
13 | +
14 | +class BarrierSetC2State : public ResourceObj {
15 | +private:
16 | + GrowableArray* _enqueue_barriers;
17 | +
18 | +public:
19 | + BarrierSetC2State(Arena* comp_arena);
20 | +
21 | + int enqueue_barriers_count() const;
22 | + CastP2XNode* enqueue_barrier(int idx) const;
23 | + void add_enqueue_barrier(CastP2XNode* n);
24 | + void remove_enqueue_barrier(CastP2XNode* n);
25 | + bool is_a_barrier(CastP2XNode* n);
26 | +};
27 | +
28 |
29 | class CardTableBarrierSetC2: public ModRefBarrierSetC2 {
30 | protected:
31 | virtual void post_barrier(GraphKit* kit,
32 | Node* ctl,
33 | @@ -44,10 +62,19 @@
34 | public:
35 | virtual void clone(GraphKit* kit, Node* src, Node* dst, Node* size, bool is_array) const;
36 | virtual bool is_gc_barrier_node(Node* node) const;
37 | virtual void eliminate_gc_barrier(PhaseMacroExpand* macro, Node* node) const;
38 | virtual bool array_copy_requires_gc_barriers(bool tightly_coupled_alloc, BasicType type, bool is_clone, ArrayCopyPhase phase) const;
39 | + virtual bool process_barrier_node(Node* cast_node, PhaseIterGVN& igvn) const;
40 | + virtual Node* step_over_gc_barrier(Node* c) const;
41 |
42 | bool use_ReduceInitialCardMarks() const;
43 | +
44 | + BarrierSetC2State* state() const;
45 | +
46 | + virtual void register_potential_barrier_node(Node* node) const;
47 | + virtual void unregister_potential_barrier_node(Node* node) const;
48 | + virtual bool expand_barriers(Compile* C, PhaseIterGVN& igvn) const;
49 | + virtual void* create_barrier_state(Arena* comp_arena) const;
50 | };
51 |
52 | #endif // SHARE_GC_SHARED_C2_CARDTABLEBARRIERSETC2_HPP
53 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/cardTable.hpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/gc/shared/cardTable.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/gc/shared/cardTable.hpp
10 | Print this page
11 |
12 |
13 |
14 |
15 | // This would be the 0th element of _byte_map, if the heap started at 0x0.
16 | // But since the heap starts at some higher address, this points to somewhere
17 | // before the beginning of the actual _byte_map.
18 | CardValue* byte_map_base() const { return _byte_map_base; }
19 | bool scanned_concurrently() const { return _scanned_concurrently; }
20 | + size_t byte_map_top_offset() const { return uintptr_t(_whole_heap.end()); }
21 | + size_t byte_map_bottom_offset() const { return uintptr_t(_whole_heap.start()); }
22 |
23 | virtual bool is_in_young(oop obj) const = 0;
24 |
25 | // Print a description of the memory for the card table
26 | virtual void print_on(outputStream* st) const;
27 |
28 | < prev index next >
29 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/cardTable.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/shared/cardTable.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/cardTable.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/gc/shared/cardTable.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/cardTable.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/gc/shared/cardTable.hpp b/src/hotspot/share/gc/shared/cardTable.hpp
2 | --- a/src/hotspot/share/gc/shared/cardTable.hpp
3 | +++ b/src/hotspot/share/gc/shared/cardTable.hpp
4 | @@ -246,10 +246,12 @@
5 | // This would be the 0th element of _byte_map, if the heap started at 0x0.
6 | // But since the heap starts at some higher address, this points to somewhere
7 | // before the beginning of the actual _byte_map.
8 | CardValue* byte_map_base() const { return _byte_map_base; }
9 | bool scanned_concurrently() const { return _scanned_concurrently; }
10 | + size_t byte_map_top_offset() const { return uintptr_t(_whole_heap.end()); }
11 | + size_t byte_map_bottom_offset() const { return uintptr_t(_whole_heap.start()); }
12 |
13 | virtual bool is_in_young(oop obj) const = 0;
14 |
15 | // Print a description of the memory for the card table
16 | virtual void print_on(outputStream* st) const;
17 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/gc/shared/cardTable.hpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/gc/shared/cardTable.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/gc/shared/cardTable.hpp
10 | Print this page
11 |
12 |
13 |
14 | // This would be the 0th element of _byte_map, if the heap started at 0x0.
15 | // But since the heap starts at some higher address, this points to somewhere
16 | // before the beginning of the actual _byte_map.
17 | CardValue* byte_map_base() const { return _byte_map_base; }
18 | bool scanned_concurrently() const { return _scanned_concurrently; }
19 | + size_t byte_map_top_offset() const { return uintptr_t(_whole_heap.end()); }
20 | + size_t byte_map_bottom_offset() const { return uintptr_t(_whole_heap.start()); }
21 |
22 | virtual bool is_in_young(oop obj) const = 0;
23 |
24 | // Print a description of the memory for the card table
25 | virtual void print_on(outputStream* st) const;
26 |
27 | < prev index next >
28 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/memory/iterator.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 | *
5 | * This code is free software; you can redistribute it and/or modify it
6 | * under the terms of the GNU General Public License version 2 only, as
7 | * published by the Free Software Foundation.
8 | *
9 | * This code is distributed in the hope that it will be useful, but WITHOUT
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 | * version 2 for more details (a copy is included in the LICENSE file that
13 | * accompanied this code).
14 | *
15 | * You should have received a copy of the GNU General Public License version
16 | * 2 along with this work; if not, write to the Free Software Foundation,
17 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 | *
19 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 | * or visit www.oracle.com if you need additional information or have any
21 | * questions.
22 | *
23 | */
24 |
25 | #include "precompiled.hpp"
26 | #include "code/nmethod.hpp"
27 | #include "memory/iterator.inline.hpp"
28 | #include "oops/oop.inline.hpp"
29 | #include "runtime/fieldDescriptor.inline.hpp"
30 | #include "utilities/debug.hpp"
31 | #include "utilities/globalDefinitions.hpp"
32 |
33 | DoNothingClosure do_nothing_cl;
34 |
35 | void CLDToOopClosure::do_cld(ClassLoaderData* cld) {
36 | cld->oops_do(_oop_closure, _cld_claim);
37 | }
38 |
39 | void ObjectToOopClosure::do_object(oop obj) {
40 | obj->oop_iterate(_cl);
41 | }
42 |
43 | void VoidClosure::do_void() {
44 | ShouldNotCallThis();
45 | }
46 |
47 | void CodeBlobToOopClosure::do_nmethod(nmethod* nm) {
48 | nm->oops_do(_cl);
49 | if (_fix_relocations) {
50 | nm->fix_oop_relocations();
51 | }
52 | }
53 |
54 | void CodeBlobToOopClosure::do_code_blob(CodeBlob* cb) {
55 | nmethod* nm = cb->as_nmethod_or_null();
56 | if (nm != NULL) {
57 | do_nmethod(nm);
58 | }
59 | }
60 |
61 | void MarkingCodeBlobClosure::do_code_blob(CodeBlob* cb) {
62 | nmethod* nm = cb->as_nmethod_or_null();
63 | if (nm != NULL && nm->oops_do_try_claim()) {
64 | do_nmethod(nm);
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/memory/iterator.cpp-.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Old src/hotspot/share/memory/iterator.cpp
6 |
7 |
8 |
9 |
10 | 1 /*
11 | 2 * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
12 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
13 | 4 *
14 | 5 * This code is free software; you can redistribute it and/or modify it
15 | 6 * under the terms of the GNU General Public License version 2 only, as
16 | 7 * published by the Free Software Foundation.
17 | 8 *
18 | 9 * This code is distributed in the hope that it will be useful, but WITHOUT
19 | 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 | 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 | 12 * version 2 for more details (a copy is included in the LICENSE file that
22 | 13 * accompanied this code).
23 | 14 *
24 | 15 * You should have received a copy of the GNU General Public License version
25 | 16 * 2 along with this work; if not, write to the Free Software Foundation,
26 | 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
27 | 18 *
28 | 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
29 | 20 * or visit www.oracle.com if you need additional information or have any
30 | 21 * questions.
31 | 22 *
32 | 23 */
33 | 24
34 | 25 #include "precompiled.hpp"
35 | 26 #include "code/nmethod.hpp"
36 | 27 #include "memory/iterator.inline.hpp"
37 | 28 #include "oops/oop.inline.hpp"
38 | 29 #include "utilities/debug.hpp"
39 | 30 #include "utilities/globalDefinitions.hpp"
40 | 31
41 | 32 DoNothingClosure do_nothing_cl;
42 | 33
43 | 34 void CLDToOopClosure::do_cld(ClassLoaderData* cld) {
44 | 35 cld->oops_do(_oop_closure, _cld_claim);
45 | 36 }
46 | 37
47 | 38 void ObjectToOopClosure::do_object(oop obj) {
48 | 39 obj->oop_iterate(_cl);
49 | 40 }
50 | 41
51 | 42 void VoidClosure::do_void() {
52 | 43 ShouldNotCallThis();
53 | 44 }
54 | 45
55 | 46 void CodeBlobToOopClosure::do_nmethod(nmethod* nm) {
56 | 47 nm->oops_do(_cl);
57 | 48 if (_fix_relocations) {
58 | 49 nm->fix_oop_relocations();
59 | 50 }
60 | 51 }
61 | 52
62 | 53 void CodeBlobToOopClosure::do_code_blob(CodeBlob* cb) {
63 | 54 nmethod* nm = cb->as_nmethod_or_null();
64 | 55 if (nm != NULL) {
65 | 56 do_nmethod(nm);
66 | 57 }
67 | 58 }
68 | 59
69 | 60 void MarkingCodeBlobClosure::do_code_blob(CodeBlob* cb) {
70 | 61 nmethod* nm = cb->as_nmethod_or_null();
71 | 62 if (nm != NULL && nm->oops_do_try_claim()) {
72 | 63 do_nmethod(nm);
73 | 64 }
74 | 65 }
75 |
76 |
77 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/memory/iterator.cpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/memory/iterator.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/memory/iterator.cpp
10 | Print this page
11 |
12 |
13 |
14 |
15 |
16 | #include "precompiled.hpp"
17 | #include "code/nmethod.hpp"
18 | #include "memory/iterator.inline.hpp"
19 | #include "oops/oop.inline.hpp"
20 | + #include "runtime/fieldDescriptor.inline.hpp"
21 | #include "utilities/debug.hpp"
22 | #include "utilities/globalDefinitions.hpp"
23 |
24 | DoNothingClosure do_nothing_cl;
25 |
26 |
27 | < prev index next >
28 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/memory/iterator.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/memory/iterator.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/memory/iterator.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/memory/iterator.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/memory/iterator.cpp.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | New src/hotspot/share/memory/iterator.cpp
6 |
7 |
8 |
9 |
10 | 1 /*
11 | 2 * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
12 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
13 | 4 *
14 | 5 * This code is free software; you can redistribute it and/or modify it
15 | 6 * under the terms of the GNU General Public License version 2 only, as
16 | 7 * published by the Free Software Foundation.
17 | 8 *
18 | 9 * This code is distributed in the hope that it will be useful, but WITHOUT
19 | 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 | 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 | 12 * version 2 for more details (a copy is included in the LICENSE file that
22 | 13 * accompanied this code).
23 | 14 *
24 | 15 * You should have received a copy of the GNU General Public License version
25 | 16 * 2 along with this work; if not, write to the Free Software Foundation,
26 | 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
27 | 18 *
28 | 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
29 | 20 * or visit www.oracle.com if you need additional information or have any
30 | 21 * questions.
31 | 22 *
32 | 23 */
33 | 24
34 | 25 #include "precompiled.hpp"
35 | 26 #include "code/nmethod.hpp"
36 | 27 #include "memory/iterator.inline.hpp"
37 | 28 #include "oops/oop.inline.hpp"
38 | 29 #include "runtime/fieldDescriptor.inline.hpp"
39 | 30 #include "utilities/debug.hpp"
40 | 31 #include "utilities/globalDefinitions.hpp"
41 | 32
42 | 33 DoNothingClosure do_nothing_cl;
43 | 34
44 | 35 void CLDToOopClosure::do_cld(ClassLoaderData* cld) {
45 | 36 cld->oops_do(_oop_closure, _cld_claim);
46 | 37 }
47 | 38
48 | 39 void ObjectToOopClosure::do_object(oop obj) {
49 | 40 obj->oop_iterate(_cl);
50 | 41 }
51 | 42
52 | 43 void VoidClosure::do_void() {
53 | 44 ShouldNotCallThis();
54 | 45 }
55 | 46
56 | 47 void CodeBlobToOopClosure::do_nmethod(nmethod* nm) {
57 | 48 nm->oops_do(_cl);
58 | 49 if (_fix_relocations) {
59 | 50 nm->fix_oop_relocations();
60 | 51 }
61 | 52 }
62 | 53
63 | 54 void CodeBlobToOopClosure::do_code_blob(CodeBlob* cb) {
64 | 55 nmethod* nm = cb->as_nmethod_or_null();
65 | 56 if (nm != NULL) {
66 | 57 do_nmethod(nm);
67 | 58 }
68 | 59 }
69 | 60
70 | 61 void MarkingCodeBlobClosure::do_code_blob(CodeBlob* cb) {
71 | 62 nmethod* nm = cb->as_nmethod_or_null();
72 | 63 if (nm != NULL && nm->oops_do_try_claim()) {
73 | 64 do_nmethod(nm);
74 | 65 }
75 | 66 }
76 |
77 |
78 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/memory/iterator.cpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/memory/iterator.cpp b/src/hotspot/share/memory/iterator.cpp
2 | --- a/src/hotspot/share/memory/iterator.cpp
3 | +++ b/src/hotspot/share/memory/iterator.cpp
4 | @@ -24,10 +24,11 @@
5 |
6 | #include "precompiled.hpp"
7 | #include "code/nmethod.hpp"
8 | #include "memory/iterator.inline.hpp"
9 | #include "oops/oop.inline.hpp"
10 | +#include "runtime/fieldDescriptor.inline.hpp"
11 | #include "utilities/debug.hpp"
12 | #include "utilities/globalDefinitions.hpp"
13 |
14 | DoNothingClosure do_nothing_cl;
15 |
16 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/memory/iterator.cpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/memory/iterator.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/memory/iterator.cpp
10 | Print this page
11 |
12 |
13 |
14 |
15 | #include "precompiled.hpp"
16 | #include "code/nmethod.hpp"
17 | #include "memory/iterator.inline.hpp"
18 | #include "oops/oop.inline.hpp"
19 | + #include "runtime/fieldDescriptor.inline.hpp"
20 | #include "utilities/debug.hpp"
21 | #include "utilities/globalDefinitions.hpp"
22 |
23 | DoNothingClosure do_nothing_cl;
24 |
25 |
26 | < prev index next >
27 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/block.cpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/opto/block.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/block.cpp
10 | Print this page
11 |
12 |
13 |
14 | }
15 |
16 | // Ideal nodes are allowable in empty blocks: skip them Only MachNodes
17 | // turn directly into code, because only MachNodes have non-trivial
18 | // emit() functions.
19 | ! while ((end_idx > 0) && !get_node(end_idx)->is_Mach()) {
20 | end_idx--;
21 | }
22 |
23 | // No room for any interesting instructions?
24 | if (end_idx == 0) {
25 |
26 | }
27 |
28 | // Ideal nodes are allowable in empty blocks: skip them Only MachNodes
29 | // turn directly into code, because only MachNodes have non-trivial
30 | // emit() functions.
31 | ! while ((end_idx > 0) && !(get_node(end_idx)->is_Mach() || get_node(end_idx)->is_BoxLock())) {
32 | end_idx--;
33 | }
34 |
35 | // No room for any interesting instructions?
36 | if (end_idx == 0) {
37 |
38 | < prev index next >
39 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/block.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/block.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/block.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/block.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/block.cpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/opto/block.cpp b/src/hotspot/share/opto/block.cpp
2 | --- a/src/hotspot/share/opto/block.cpp
3 | +++ b/src/hotspot/share/opto/block.cpp
4 | @@ -175,11 +175,11 @@
5 | }
6 |
7 | // Ideal nodes are allowable in empty blocks: skip them Only MachNodes
8 | // turn directly into code, because only MachNodes have non-trivial
9 | // emit() functions.
10 | - while ((end_idx > 0) && !get_node(end_idx)->is_Mach()) {
11 | + while ((end_idx > 0) && !(get_node(end_idx)->is_Mach() || get_node(end_idx)->is_BoxLock())) {
12 | end_idx--;
13 | }
14 |
15 | // No room for any interesting instructions?
16 | if (end_idx == 0) {
17 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/block.cpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/opto/block.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/block.cpp
10 | Print this page
11 |
12 |
13 |
14 | }
15 |
16 | // Ideal nodes are allowable in empty blocks: skip them Only MachNodes
17 | // turn directly into code, because only MachNodes have non-trivial
18 | // emit() functions.
19 | - while ((end_idx > 0) && !get_node(end_idx)->is_Mach()) {
20 | + while ((end_idx > 0) && !(get_node(end_idx)->is_Mach() || get_node(end_idx)->is_BoxLock())) {
21 | end_idx--;
22 | }
23 |
24 | // No room for any interesting instructions?
25 | if (end_idx == 0) {
26 |
27 | < prev index next >
28 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/buildOopMap.cpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/opto/buildOopMap.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/buildOopMap.cpp
10 | Print this page
11 |
12 |
13 |
14 | Node *def = _defs[reg]; // Get reaching def
15 | assert( def, "since live better have reaching def" );
16 |
17 | // Classify the reaching def as oop, derived, callee-save, dead, or other
18 | const Type *t = def->bottom_type();
19 | ! if( t->isa_oop_ptr() ) { // Oop or derived?
20 | assert( !OptoReg::is_valid(_callees[reg]), "oop can't be callee save" );
21 | #ifdef _LP64
22 | // 64-bit pointers record oop-ishness on 2 aligned adjacent registers.
23 | // Make sure both are record from the same reaching def, but do not
24 | // put both into the oopmap.
25 |
26 | Node *def = _defs[reg]; // Get reaching def
27 | assert( def, "since live better have reaching def" );
28 |
29 | // Classify the reaching def as oop, derived, callee-save, dead, or other
30 | const Type *t = def->bottom_type();
31 | ! if( t->isa_oop_ptr() || // Oop or derived?
32 | + (C->do_stack_allocation() && t->isa_rawptr() && def->is_BoxLock())) { // consider stack oops too
33 | assert( !OptoReg::is_valid(_callees[reg]), "oop can't be callee save" );
34 | #ifdef _LP64
35 | // 64-bit pointers record oop-ishness on 2 aligned adjacent registers.
36 | // Make sure both are record from the same reaching def, but do not
37 | // put both into the oopmap.
38 |
39 | < prev index next >
40 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/buildOopMap.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/buildOopMap.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/buildOopMap.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/buildOopMap.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/buildOopMap.cpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/opto/buildOopMap.cpp b/src/hotspot/share/opto/buildOopMap.cpp
2 | --- a/src/hotspot/share/opto/buildOopMap.cpp
3 | +++ b/src/hotspot/share/opto/buildOopMap.cpp
4 | @@ -239,11 +239,12 @@
5 | Node *def = _defs[reg]; // Get reaching def
6 | assert( def, "since live better have reaching def" );
7 |
8 | // Classify the reaching def as oop, derived, callee-save, dead, or other
9 | const Type *t = def->bottom_type();
10 | - if( t->isa_oop_ptr() ) { // Oop or derived?
11 | + if( t->isa_oop_ptr() || // Oop or derived?
12 | + (C->do_stack_allocation() && t->isa_rawptr() && def->is_BoxLock())) { // consider stack oops too
13 | assert( !OptoReg::is_valid(_callees[reg]), "oop can't be callee save" );
14 | #ifdef _LP64
15 | // 64-bit pointers record oop-ishness on 2 aligned adjacent registers.
16 | // Make sure both are record from the same reaching def, but do not
17 | // put both into the oopmap.
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/buildOopMap.cpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/opto/buildOopMap.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/buildOopMap.cpp
10 | Print this page
11 |
12 |
13 |
14 | Node *def = _defs[reg]; // Get reaching def
15 | assert( def, "since live better have reaching def" );
16 |
17 | // Classify the reaching def as oop, derived, callee-save, dead, or other
18 | const Type *t = def->bottom_type();
19 | - if( t->isa_oop_ptr() ) { // Oop or derived?
20 | + if( t->isa_oop_ptr() || // Oop or derived?
21 | + (C->do_stack_allocation() && t->isa_rawptr() && def->is_BoxLock())) { // consider stack oops too
22 | assert( !OptoReg::is_valid(_callees[reg]), "oop can't be callee save" );
23 | #ifdef _LP64
24 | // 64-bit pointers record oop-ishness on 2 aligned adjacent registers.
25 | // Make sure both are record from the same reaching def, but do not
26 | // put both into the oopmap.
27 |
28 | < prev index next >
29 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/c2_globals.hpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/opto/c2_globals.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/c2_globals.hpp
10 | Print this page
11 |
12 |
13 |
14 |
15 | \
16 | product(intx, EliminateAllocationArraySizeLimit, 64, \
17 | "Array size (number of elements) limit for scalar replacement") \
18 | range(0, max_jint) \
19 | \
20 | + experimental(bool, UseStackAllocation, false, \
21 | + "Leverage stack allocation to reduce heap pressure") \
22 | + \
23 | + experimental(bool, UseStackAllocationRuntime, false, \
24 | + "Enable the stack allocation runtime code in oopmap") \
25 | + \
26 | + notproduct(bool, PrintStackAllocation, false, \
27 | + "Print stack allocation debug information") \
28 | + \
29 | product(bool, OptimizePtrCompare, true, \
30 | "Use escape analysis to optimize pointers compare") \
31 | \
32 | notproduct(bool, PrintOptimizePtrCompare, false, \
33 | "Print information about optimized pointers compare") \
34 |
35 | < prev index next >
36 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/c2_globals.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/c2_globals.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/c2_globals.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/c2_globals.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/c2_globals.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/opto/c2_globals.hpp b/src/hotspot/share/opto/c2_globals.hpp
2 | --- a/src/hotspot/share/opto/c2_globals.hpp
3 | +++ b/src/hotspot/share/opto/c2_globals.hpp
4 | @@ -532,10 +532,19 @@
5 | \
6 | product(intx, EliminateAllocationArraySizeLimit, 64, \
7 | "Array size (number of elements) limit for scalar replacement") \
8 | range(0, max_jint) \
9 | \
10 | + experimental(bool, UseStackAllocation, false, \
11 | + "Leverage stack allocation to reduce heap pressure") \
12 | + \
13 | + experimental(bool, UseStackAllocationRuntime, false, \
14 | + "Enable the stack allocation runtime code in oopmap") \
15 | + \
16 | + notproduct(bool, PrintStackAllocation, false, \
17 | + "Print stack allocation debug information") \
18 | + \
19 | product(bool, OptimizePtrCompare, true, \
20 | "Use escape analysis to optimize pointers compare") \
21 | \
22 | notproduct(bool, PrintOptimizePtrCompare, false, \
23 | "Print information about optimized pointers compare") \
24 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/c2_globals.hpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/opto/c2_globals.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/c2_globals.hpp
10 | Print this page
11 |
12 |
13 |
14 | \
15 | product(intx, EliminateAllocationArraySizeLimit, 64, \
16 | "Array size (number of elements) limit for scalar replacement") \
17 | range(0, max_jint) \
18 | \
19 | + experimental(bool, UseStackAllocation, false, \
20 | + "Leverage stack allocation to reduce heap pressure") \
21 | + \
22 | + experimental(bool, UseStackAllocationRuntime, false, \
23 | + "Enable the stack allocation runtime code in oopmap") \
24 | + \
25 | + notproduct(bool, PrintStackAllocation, false, \
26 | + "Print stack allocation debug information") \
27 | + \
28 | product(bool, OptimizePtrCompare, true, \
29 | "Use escape analysis to optimize pointers compare") \
30 | \
31 | notproduct(bool, PrintOptimizePtrCompare, false, \
32 | "Print information about optimized pointers compare") \
33 |
34 | < prev index next >
35 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/callnode.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/callnode.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/callnode.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/callnode.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/callnode.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/callnode.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/callnode.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/callnode.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/callnode.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/opto/callnode.hpp b/src/hotspot/share/opto/callnode.hpp
2 | --- a/src/hotspot/share/opto/callnode.hpp
3 | +++ b/src/hotspot/share/opto/callnode.hpp
4 | @@ -492,10 +492,11 @@
5 | class SafePointScalarObjectNode: public TypeNode {
6 | uint _first_index; // First input edge relative index of a SafePoint node where
7 | // states of the scalarized object fields are collected.
8 | // It is relative to the last (youngest) jvms->_scloff.
9 | uint _n_fields; // Number of non-static fields of the scalarized object.
10 | + bool _is_stack_allocated;
11 | DEBUG_ONLY(AllocateNode* _alloc;)
12 |
13 | virtual uint hash() const ; // { return NO_HASH; }
14 | virtual bool cmp( const Node &n ) const;
15 |
16 | @@ -517,10 +518,13 @@
17 | assert(jvms != NULL, "missed JVMS");
18 | return jvms->scloff() + _first_index;
19 | }
20 | uint n_fields() const { return _n_fields; }
21 |
22 | + void set_stack_allocated(bool v) { _is_stack_allocated = true; }
23 | + bool stack_allocated() { return _is_stack_allocated; }
24 | +
25 | #ifdef ASSERT
26 | AllocateNode* alloc() const { return _alloc; }
27 | #endif
28 |
29 | virtual uint size_of() const { return sizeof(*this); }
30 | @@ -637,10 +641,11 @@
31 | void extract_projections(CallProjections* projs, bool separate_io_proj, bool do_asserts = true);
32 |
33 | virtual uint match_edge(uint idx) const;
34 |
35 | bool is_call_to_arraycopystub() const;
36 | + bool is_call_to_osr_migration_end() const;
37 |
38 | #ifndef PRODUCT
39 | virtual void dump_req(outputStream *st = tty) const;
40 | virtual void dump_spec(outputStream *st) const;
41 | #endif
42 | @@ -839,10 +844,13 @@
43 | InitialTest, // slow-path test (may be constant)
44 | ALength, // array length (or TOP if none)
45 | ParmLimit
46 | };
47 |
48 | + // Maximum object size considered for stack allocation
49 | + static const int StackAllocSizeLimit = 0x100;
50 | +
51 | static const TypeFunc* alloc_type(const Type* t) {
52 | const Type** fields = TypeTuple::fields(ParmLimit - TypeFunc::Parms);
53 | fields[AllocSize] = TypeInt::POS;
54 | fields[KlassNode] = TypeInstPtr::NOTNULL;
55 | fields[InitialTest] = TypeInt::BOOL;
56 | @@ -860,10 +868,12 @@
57 | }
58 |
59 | // Result of Escape Analysis
60 | bool _is_scalar_replaceable;
61 | bool _is_non_escaping;
62 | + bool _is_stack_allocateable;
63 | + bool _is_referenced_stack_allocation;
64 | // True when MemBar for new is redundant with MemBar at initialzer exit
65 | bool _is_allocation_MemBar_redundant;
66 |
67 | virtual uint size_of() const; // Size is bigger
68 | AllocateNode(Compile* C, const TypeFunc *atype, Node *ctrl, Node *mem, Node *abio,
69 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/compile.cpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/opto/compile.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/compile.cpp
10 | Print this page
11 |
12 |
13 |
14 |
15 | env()->set_oop_recorder(new OopRecorder(env()->arena()));
16 | env()->set_debug_info(new DebugInformationRecorder(env()->oop_recorder()));
17 | env()->set_dependencies(new Dependencies(env()));
18 |
19 | _fixed_slots = 0;
20 | + _stack_allocated_slots = 0;
21 | + set_fail_stack_allocation_with_references(false);
22 | set_has_split_ifs(false);
23 | set_has_loops(has_method() && method()->has_loops()); // first approximation
24 | set_has_stringbuilder(false);
25 | set_has_boxed_value(false);
26 | _trap_can_recompile = false; // no traps emitted yet
27 |
28 | < prev index next >
29 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/compile.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/compile.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/compile.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/compile.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/compile.cpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/opto/compile.cpp b/src/hotspot/share/opto/compile.cpp
2 | --- a/src/hotspot/share/opto/compile.cpp
3 | +++ b/src/hotspot/share/opto/compile.cpp
4 | @@ -902,10 +902,12 @@
5 | env()->set_oop_recorder(new OopRecorder(env()->arena()));
6 | env()->set_debug_info(new DebugInformationRecorder(env()->oop_recorder()));
7 | env()->set_dependencies(new Dependencies(env()));
8 |
9 | _fixed_slots = 0;
10 | + _stack_allocated_slots = 0;
11 | + set_fail_stack_allocation_with_references(false);
12 | set_has_split_ifs(false);
13 | set_has_loops(has_method() && method()->has_loops()); // first approximation
14 | set_has_stringbuilder(false);
15 | set_has_boxed_value(false);
16 | _trap_can_recompile = false; // no traps emitted yet
17 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/compile.cpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/opto/compile.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/compile.cpp
10 | Print this page
11 |
12 |
13 |
14 | env()->set_oop_recorder(new OopRecorder(env()->arena()));
15 | env()->set_debug_info(new DebugInformationRecorder(env()->oop_recorder()));
16 | env()->set_dependencies(new Dependencies(env()));
17 |
18 | _fixed_slots = 0;
19 | + _stack_allocated_slots = 0;
20 | + set_fail_stack_allocation_with_references(false);
21 | set_has_split_ifs(false);
22 | set_has_loops(has_method() && method()->has_loops()); // first approximation
23 | set_has_stringbuilder(false);
24 | set_has_boxed_value(false);
25 | _trap_can_recompile = false; // no traps emitted yet
26 |
27 | < prev index next >
28 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/compile.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/compile.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/compile.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/compile.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/escape.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/escape.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/escape.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/escape.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/escape.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/escape.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/escape.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/escape.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/escape.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/opto/escape.hpp b/src/hotspot/share/opto/escape.hpp
2 | --- a/src/hotspot/share/opto/escape.hpp
3 | +++ b/src/hotspot/share/opto/escape.hpp
4 | @@ -331,10 +331,12 @@
5 | // is still being collected. If false,
6 | // no new nodes will be processed.
7 |
8 | bool _verify; // verify graph
9 |
10 | + bool _has_locks; // Used by stack allocation
11 | +
12 | JavaObjectNode* null_obj;
13 | Node* _pcmp_neq; // ConI(#CC_GT)
14 | Node* _pcmp_eq; // ConI(#CC_EQ)
15 |
16 | Compile* _compile; // Compile object for current compilation
17 | @@ -598,12 +600,42 @@
18 | }
19 |
20 | void add_to_congraph_unsafe_access(Node* n, uint opcode, Unique_Node_List* delayed_worklist);
21 | bool add_final_edges_unsafe_access(Node* n, uint opcode);
22 |
23 | + // Helpers for stack allocation
24 | +
25 | + // If an allocation is dominated by a loop, check to see if the lifetime of two instances
26 | + // may overlap. If they do this allocate is not eligible for stack allocation
27 | + bool allocation_lifetime_overlap(AllocateNode *alloc, PhiNode *phi);
28 | + // Stack allocation has limited support for compressed references at the moment.
29 | + // This helper checks if an oop may be compressed at some point in the graph.
30 | + bool oop_may_be_compressed(Node* alloc_result);
31 | + // Check if the alloc node is eligible for stack allocation
32 | + bool eligible_for_stack_allocation(PointsToNode* ptn);
33 | + // Check if the alloc has uses that make it ineligible for stack allocation
34 | + bool all_uses_eligible_for_stack_allocation(PointsToNode *ptn);
35 | + // Verify object chains for stack allocated objects. Heap objects cannot point to stack allocated objects.
36 | + bool verify_stack_allocated_object_chains(GrowableArray &non_escaped_worklist, int non_escaped_length);
37 | +#ifndef PRODUCT
38 | + void print_stack_allocated_candidates(GrowableArray &non_escaped_worklist, int non_escaped_length);
39 | +#endif
40 | +
41 | #ifndef PRODUCT
42 | void dump(GrowableArray& ptnodes_worklist);
43 | +
44 | + bool print_escape_analysis() {
45 | + return PrintEscapeAnalysis || _compile->directive()->PrintEscapeAnalysisOption;
46 | + }
47 | +
48 | + bool print_eliminate_allocations() {
49 | + return PrintEliminateAllocations || _compile->directive()->PrintEliminateAllocationsOption;
50 | + }
51 | +
52 | + bool print_stack_allocation() {
53 | + return PrintStackAllocation || _compile->directive()->PrintStackAllocationOption;
54 | + }
55 | #endif
56 | };
57 |
58 | inline PointsToNode::PointsToNode(ConnectionGraph *CG, Node* n, EscapeState es, NodeType type):
59 | _edges(CG->_compile->comp_arena(), 2, 0, NULL),
60 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/idealKit.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/idealKit.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/idealKit.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/idealKit.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/idealKit.cpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/opto/idealKit.cpp b/src/hotspot/share/opto/idealKit.cpp
2 | --- a/src/hotspot/share/opto/idealKit.cpp
3 | +++ b/src/hotspot/share/opto/idealKit.cpp
4 | @@ -62,10 +62,34 @@
5 | set_all_memory(gkit->merged_memory());
6 | set_i_o(gkit->i_o());
7 | set_ctrl(gkit->control());
8 | }
9 |
10 | +//-------------------------------uif_then-------------------------------------
11 | +// Create: unsigned if(left relop right)
12 | +// / \
13 | +// iffalse iftrue
14 | +// Push the iffalse cvstate onto the stack. The iftrue becomes the current cvstate.
15 | +void IdealKit::uif_then(Node* left, BoolTest::mask relop,
16 | + Node* right, float prob, float cnt, bool push_new_state) {
17 | + assert((state() & (BlockS|LoopS|IfThenS|ElseS)), "bad state for new If");
18 | + Node* bol;
19 | + if (left->bottom_type()->isa_ptr() == NULL) {
20 | + if (left->bottom_type()->isa_int() != NULL) {
21 | + bol = Bool(CmpU(left, right), relop);
22 | + } else {
23 | + assert(left->bottom_type()->isa_long() != NULL, "what else?");
24 | + bol = Bool(CmpUL(left, right), relop);
25 | + }
26 | +
27 | + } else {
28 | + bol = Bool(CmpP(left, right), relop);
29 | + }
30 | +
31 | + if_then_common(bol, prob, cnt, push_new_state);
32 | +}
33 | +
34 | //-------------------------------if_then-------------------------------------
35 | // Create: if(left relop right)
36 | // / \
37 | // iffalse iftrue
38 | // Push the iffalse cvstate onto the stack. The iftrue becomes the current cvstate.
39 | @@ -82,10 +106,17 @@
40 | }
41 |
42 | } else {
43 | bol = Bool(CmpP(left, right), relop);
44 | }
45 | +
46 | + if_then_common(bol, prob, cnt, push_new_state);
47 | +}
48 | +
49 | +// Common helper to create the If nodes for if_then and uif_then
50 | +void IdealKit::if_then_common(Node* bol, float prob, float cnt,
51 | + bool push_new_state) {
52 | // Delay gvn.tranform on if-nodes until construction is finished
53 | // to prevent a constant bool input from discarding a control output.
54 | IfNode* iff = delay_transform(new IfNode(ctrl(), bol, prob, cnt))->as_If();
55 | Node* then = IfTrue(iff);
56 | Node* elsen = IfFalse(iff);
57 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/idealKit.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/idealKit.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/idealKit.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/idealKit.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/idealKit.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/opto/idealKit.hpp b/src/hotspot/share/opto/idealKit.hpp
2 | --- a/src/hotspot/share/opto/idealKit.hpp
3 | +++ b/src/hotspot/share/opto/idealKit.hpp
4 | @@ -125,10 +125,14 @@
5 | Node* promote_to_phi(Node* n, Node* reg);// Promote "n" to a phi on region "reg"
6 | bool was_promoted_to_phi(Node* n, Node* reg) {
7 | return (n->is_Phi() && n->in(0) == reg);
8 | }
9 | void declare(IdealVariable* v) { v->set_id(_var_ct++); }
10 | +
11 | + void if_then_common(Node* bol, float prob = PROB_FAIR, float cnt = COUNT_UNKNOWN,
12 | + bool push_new_state = true);
13 | +
14 | // This declares the position where vars are kept in the cvstate
15 | // For some degree of consistency we use the TypeFunc enum to
16 | // soak up spots in the inputs even though we only use early Control
17 | // and Memory slots. (So far.)
18 | static const uint first_var; // = TypeFunc::Parms + 1;
19 | @@ -161,10 +165,13 @@
20 | Node* value(IdealVariable& v) { return _cvstate->in(first_var + v.id()); }
21 | void dead(IdealVariable& v) { set(v, (Node*)NULL); }
22 | void if_then(Node* left, BoolTest::mask relop, Node* right,
23 | float prob = PROB_FAIR, float cnt = COUNT_UNKNOWN,
24 | bool push_new_state = true);
25 | + void uif_then(Node* left, BoolTest::mask relop, Node* right,
26 | + float prob = PROB_FAIR, float cnt = COUNT_UNKNOWN,
27 | + bool push_new_state = true);
28 | void else_();
29 | void end_if();
30 | void loop(GraphKit* gkit, int nargs, IdealVariable& iv, Node* init, BoolTest::mask cmp, Node* limit,
31 | float prob = PROB_LIKELY(0.9), float cnt = COUNT_UNKNOWN);
32 | void end_loop();
33 | @@ -180,20 +187,23 @@
34 | Node* ConI(jint k) { return (Node*)gvn().intcon(k); }
35 | Node* makecon(const Type *t) const { return _gvn.makecon(t); }
36 |
37 | Node* AddI(Node* l, Node* r) { return transform(new AddINode(l, r)); }
38 | Node* SubI(Node* l, Node* r) { return transform(new SubINode(l, r)); }
39 | + Node* SubL(Node* l, Node* r) { return transform(new SubLNode(l, r)); }
40 | Node* AndI(Node* l, Node* r) { return transform(new AndINode(l, r)); }
41 | Node* OrI(Node* l, Node* r) { return transform(new OrINode(l, r)); }
42 | Node* MaxI(Node* l, Node* r) { return transform(new MaxINode(l, r)); }
43 | Node* LShiftI(Node* l, Node* r) { return transform(new LShiftINode(l, r)); }
44 | Node* CmpI(Node* l, Node* r) { return transform(new CmpINode(l, r)); }
45 | + Node* CmpU(Node* l, Node* r) { return transform(new CmpUNode(l, r)); }
46 | Node* Bool(Node* cmp, BoolTest::mask relop) { return transform(new BoolNode(cmp, relop)); }
47 | void increment(IdealVariable& v, Node* j) { set(v, AddI(value(v), j)); }
48 | void decrement(IdealVariable& v, Node* j) { set(v, SubI(value(v), j)); }
49 |
50 | Node* CmpL(Node* l, Node* r) { return transform(new CmpLNode(l, r)); }
51 | + Node* CmpUL(Node* l, Node* r) { return transform(new CmpULNode(l, r)); }
52 |
53 | // TLS
54 | Node* thread() { return gvn().transform(new ThreadLocalNode()); }
55 |
56 | // Pointers
57 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/loopnode.cpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/opto/loopnode.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/loopnode.cpp
10 | Print this page
11 |
12 |
13 |
14 | (n->in(0)->Opcode() == Op_IfFalse &&
15 | (1.0 - iff->as_If()->_prob) >= 0.01) ||
16 | (iff->as_If()->_prob >= 0.01) )
17 | innermost->_has_call = 1;
18 | }
19 | ! } else if( n->is_Allocate() && n->as_Allocate()->_is_scalar_replaceable ) {
20 | // Disable loop optimizations if the loop has a scalar replaceable
21 | // allocation. This disabling may cause a potential performance lost
22 | // if the allocation is not eliminated for some reason.
23 | innermost->_allow_optimizations = false;
24 | innermost->_has_call = 1; // = true
25 |
26 | (n->in(0)->Opcode() == Op_IfFalse &&
27 | (1.0 - iff->as_If()->_prob) >= 0.01) ||
28 | (iff->as_If()->_prob >= 0.01) )
29 | innermost->_has_call = 1;
30 | }
31 | ! } else if( n->is_Allocate() && (n->as_Allocate()->_is_scalar_replaceable || n->as_Allocate()->_is_stack_allocateable) ) {
32 | // Disable loop optimizations if the loop has a scalar replaceable
33 | // allocation. This disabling may cause a potential performance lost
34 | // if the allocation is not eliminated for some reason.
35 | innermost->_allow_optimizations = false;
36 | innermost->_has_call = 1; // = true
37 |
38 | < prev index next >
39 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/loopnode.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/loopnode.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/loopnode.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/loopnode.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/loopnode.cpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/opto/loopnode.cpp b/src/hotspot/share/opto/loopnode.cpp
2 | --- a/src/hotspot/share/opto/loopnode.cpp
3 | +++ b/src/hotspot/share/opto/loopnode.cpp
4 | @@ -3889,11 +3889,11 @@
5 | (n->in(0)->Opcode() == Op_IfFalse &&
6 | (1.0 - iff->as_If()->_prob) >= 0.01) ||
7 | (iff->as_If()->_prob >= 0.01) )
8 | innermost->_has_call = 1;
9 | }
10 | - } else if( n->is_Allocate() && n->as_Allocate()->_is_scalar_replaceable ) {
11 | + } else if( n->is_Allocate() && (n->as_Allocate()->_is_scalar_replaceable || n->as_Allocate()->_is_stack_allocateable) ) {
12 | // Disable loop optimizations if the loop has a scalar replaceable
13 | // allocation. This disabling may cause a potential performance lost
14 | // if the allocation is not eliminated for some reason.
15 | innermost->_allow_optimizations = false;
16 | innermost->_has_call = 1; // = true
17 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/loopnode.cpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/opto/loopnode.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/loopnode.cpp
10 | Print this page
11 |
12 |
13 |
14 | (n->in(0)->Opcode() == Op_IfFalse &&
15 | (1.0 - iff->as_If()->_prob) >= 0.01) ||
16 | (iff->as_If()->_prob >= 0.01) )
17 | innermost->_has_call = 1;
18 | }
19 | - } else if( n->is_Allocate() && n->as_Allocate()->_is_scalar_replaceable ) {
20 | + } else if( n->is_Allocate() && (n->as_Allocate()->_is_scalar_replaceable || n->as_Allocate()->_is_stack_allocateable) ) {
21 | // Disable loop optimizations if the loop has a scalar replaceable
22 | // allocation. This disabling may cause a potential performance lost
23 | // if the allocation is not eliminated for some reason.
24 | innermost->_allow_optimizations = false;
25 | innermost->_has_call = 1; // = true
26 |
27 | < prev index next >
28 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/machnode.hpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/opto/machnode.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/machnode.hpp
10 | Print this page
11 |
12 |
13 |
14 | return in(_jvmadj + jvms->locoff() + idx);
15 | }
16 | Node *stack(const JVMState* jvms, uint idx) const {
17 | assert(verify_jvms(jvms), "jvms must match");
18 | return in(_jvmadj + jvms->stkoff() + idx);
19 | ! }
20 | Node *monitor_obj(const JVMState* jvms, uint idx) const {
21 | assert(verify_jvms(jvms), "jvms must match");
22 | return in(_jvmadj + jvms->monitor_obj_offset(idx));
23 | }
24 | Node *monitor_box(const JVMState* jvms, uint idx) const {
25 |
26 | return in(_jvmadj + jvms->locoff() + idx);
27 | }
28 | Node *stack(const JVMState* jvms, uint idx) const {
29 | assert(verify_jvms(jvms), "jvms must match");
30 | return in(_jvmadj + jvms->stkoff() + idx);
31 | ! }
32 | + Node *scalar(const JVMState* jvms, uint idx) const {
33 | + assert(verify_jvms(jvms), "jvms must match");
34 | + return in(_jvmadj + jvms->scloff() + idx);
35 | + }
36 | Node *monitor_obj(const JVMState* jvms, uint idx) const {
37 | assert(verify_jvms(jvms), "jvms must match");
38 | return in(_jvmadj + jvms->monitor_obj_offset(idx));
39 | }
40 | Node *monitor_box(const JVMState* jvms, uint idx) const {
41 |
42 | < prev index next >
43 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/machnode.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/machnode.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/machnode.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/machnode.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/machnode.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/opto/machnode.hpp b/src/hotspot/share/opto/machnode.hpp
2 | --- a/src/hotspot/share/opto/machnode.hpp
3 | +++ b/src/hotspot/share/opto/machnode.hpp
4 | @@ -844,11 +844,15 @@
5 | return in(_jvmadj + jvms->locoff() + idx);
6 | }
7 | Node *stack(const JVMState* jvms, uint idx) const {
8 | assert(verify_jvms(jvms), "jvms must match");
9 | return in(_jvmadj + jvms->stkoff() + idx);
10 | - }
11 | + }
12 | + Node *scalar(const JVMState* jvms, uint idx) const {
13 | + assert(verify_jvms(jvms), "jvms must match");
14 | + return in(_jvmadj + jvms->scloff() + idx);
15 | + }
16 | Node *monitor_obj(const JVMState* jvms, uint idx) const {
17 | assert(verify_jvms(jvms), "jvms must match");
18 | return in(_jvmadj + jvms->monitor_obj_offset(idx));
19 | }
20 | Node *monitor_box(const JVMState* jvms, uint idx) const {
21 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/machnode.hpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/opto/machnode.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/machnode.hpp
10 | Print this page
11 |
12 |
13 |
14 | return in(_jvmadj + jvms->locoff() + idx);
15 | }
16 | Node *stack(const JVMState* jvms, uint idx) const {
17 | assert(verify_jvms(jvms), "jvms must match");
18 | return in(_jvmadj + jvms->stkoff() + idx);
19 | - }
20 | + }
21 | + Node *scalar(const JVMState* jvms, uint idx) const {
22 | + assert(verify_jvms(jvms), "jvms must match");
23 | + return in(_jvmadj + jvms->scloff() + idx);
24 | + }
25 | Node *monitor_obj(const JVMState* jvms, uint idx) const {
26 | assert(verify_jvms(jvms), "jvms must match");
27 | return in(_jvmadj + jvms->monitor_obj_offset(idx));
28 | }
29 | Node *monitor_box(const JVMState* jvms, uint idx) const {
30 |
31 | < prev index next >
32 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/macro.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/macro.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/macro.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/macro.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/macro.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/macro.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/macro.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/macro.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/memnode.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/memnode.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/memnode.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/memnode.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/memnode.cpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/opto/memnode.cpp b/src/hotspot/share/opto/memnode.cpp
2 | --- a/src/hotspot/share/opto/memnode.cpp
3 | +++ b/src/hotspot/share/opto/memnode.cpp
4 | @@ -186,11 +186,14 @@
5 | result = proj_in->in(TypeFunc::Memory);
6 | } else {
7 | assert(false, "unexpected projection");
8 | }
9 | } else if (result->is_ClearArray()) {
10 | - if (!is_instance || !ClearArrayNode::step_through(&result, instance_id, phase)) {
11 | + intptr_t offset;
12 | + AllocateNode* alloc = AllocateNode::Ideal_allocation(result->in(3), phase, offset);
13 | +
14 | + if (!is_instance || (alloc == NULL) || !ClearArrayNode::step_through(&result, instance_id, phase)) {
15 | // Can not bypass initialization of the instance
16 | // we are looking for.
17 | break;
18 | }
19 | // Otherwise skip it (the call updated 'result' value).
20 | @@ -706,11 +709,14 @@
21 | break;
22 | }
23 | mem = mem->in(0)->in(TypeFunc::Memory);
24 | continue; // (a) advance through independent MemBar memory
25 | } else if (mem->is_ClearArray()) {
26 | - if (ClearArrayNode::step_through(&mem, (uint)addr_t->instance_id(), phase)) {
27 | + intptr_t offset;
28 | + AllocateNode* alloc = AllocateNode::Ideal_allocation(mem->in(3), phase, offset);
29 | +
30 | + if ((alloc != NULL) && ClearArrayNode::step_through(&mem, (uint)addr_t->instance_id(), phase)) {
31 | // (the call updated 'mem' value)
32 | continue; // (a) advance through independent allocation memory
33 | } else {
34 | // Can not bypass initialization of the instance
35 | // we are looking for.
36 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/memnode.cpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/opto/memnode.cpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/opto/memnode.cpp
10 | Print this page
11 |
12 |
13 |
14 | result = proj_in->in(TypeFunc::Memory);
15 | } else {
16 | assert(false, "unexpected projection");
17 | }
18 | } else if (result->is_ClearArray()) {
19 | - if (!is_instance || !ClearArrayNode::step_through(&result, instance_id, phase)) {
20 | + intptr_t offset;
21 | + AllocateNode* alloc = AllocateNode::Ideal_allocation(result->in(3), phase, offset);
22 | +
23 | + if (!is_instance || (alloc == NULL) || !ClearArrayNode::step_through(&result, instance_id, phase)) {
24 | // Can not bypass initialization of the instance
25 | // we are looking for.
26 | break;
27 | }
28 | // Otherwise skip it (the call updated 'result' value).
29 |
30 |
31 |
32 |
33 | break;
34 | }
35 | mem = mem->in(0)->in(TypeFunc::Memory);
36 | continue; // (a) advance through independent MemBar memory
37 | } else if (mem->is_ClearArray()) {
38 | - if (ClearArrayNode::step_through(&mem, (uint)addr_t->instance_id(), phase)) {
39 | + intptr_t offset;
40 | + AllocateNode* alloc = AllocateNode::Ideal_allocation(mem->in(3), phase, offset);
41 | +
42 | + if ((alloc != NULL) && ClearArrayNode::step_through(&mem, (uint)addr_t->instance_id(), phase)) {
43 | // (the call updated 'mem' value)
44 | continue; // (a) advance through independent allocation memory
45 | } else {
46 | // Can not bypass initialization of the instance
47 | // we are looking for.
48 |
49 | < prev index next >
50 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/output.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/output.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/opto/output.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/opto/output.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/deoptimization.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/runtime/deoptimization.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/deoptimization.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/runtime/deoptimization.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/deoptimization.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/runtime/deoptimization.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/deoptimization.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/runtime/deoptimization.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/deoptimization.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/runtime/deoptimization.hpp b/src/hotspot/share/runtime/deoptimization.hpp
2 | --- a/src/hotspot/share/runtime/deoptimization.hpp
3 | +++ b/src/hotspot/share/runtime/deoptimization.hpp
4 | @@ -168,12 +168,19 @@
5 | #if COMPILER2_OR_JVMCI
6 | public:
7 |
8 | // Support for restoring non-escaping objects
9 | static bool realloc_objects(JavaThread* thread, frame* fr, RegisterMap* reg_map, GrowableArray* objects, TRAPS);
10 | - static void reassign_type_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, typeArrayOop obj, BasicType type);
11 | - static void reassign_object_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, objArrayOop obj);
12 | + static void reassign_stack_allocated_fields(frame *fr, GrowableArray* objects, ObjectValue *sv, Handle obj, Klass* k);
13 | + static void reassign_stack_allocated_type_array_elements(oop orig, oop newly_allocated, Klass *k);
14 | + static void reassign_stack_allocated_object_array_elements(oop orig, oop newly_allocated, intptr_t *sp_base, intptr_t *sp_top, GrowableArray* objects);
15 | + static void reassign_scalar_replaced_fields(frame *fr, RegisterMap *reg_map, GrowableArray* objects, ObjectValue *sv, Handle obj, Klass* k, bool skip_internal);
16 | + static void reassign_scalar_replaced_type_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, typeArrayOop obj, BasicType type);
17 | + static void reassign_scalar_replaced_object_array_elements(frame* fr, RegisterMap* reg_map, GrowableArray* objects, ObjectValue* sv, objArrayOop obj);
18 | + static ScopeValue *get_scope_value(frame* fr, RegisterMap* reg_map, ScopeValue* sv, GrowableArray* objects);
19 | + static ScopeValue *match_object_to_stack_oop(intptr_t *oop_ptr, intptr_t *sp_base, GrowableArray* objects);
20 | + static void reassign_scalar_replaced_fields_by_klass(InstanceKlass* klass, frame* fr, RegisterMap* reg_map, GrowableArray* objects, ObjectValue* sv, int svIndex, oop obj, bool skip_internal);
21 | static void reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray* objects, bool realloc_failures, bool skip_internal);
22 | static void relock_objects(GrowableArray* monitors, JavaThread* thread, bool realloc_failures);
23 | static void pop_frames_failed_reallocs(JavaThread* thread, vframeArray* array);
24 | NOT_PRODUCT(static void print_objects(GrowableArray* objects, bool realloc_failures);)
25 | #endif // COMPILER2_OR_JVMCI
26 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/vframe_hp.cpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/runtime/vframe_hp.cpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/vframe_hp.cpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/runtime/vframe_hp.cpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/vframe_hp.hpp.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/hotspot/share/runtime/vframe_hp.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/runtime/vframe_hp.hpp
10 | Print this page
11 |
12 |
13 |
14 |
15 | compiledVFrame* at_scope(int decode_offset, int vframe_id);
16 |
17 | // Returns SynchronizationEntryBCI or bci() (used for synchronization)
18 | int raw_bci() const;
19 |
20 | + // Used by stack allocation to match a stack oop to a described stack allocated object
21 | + ScopeValue *match_object_to_stack_oop(intptr_t *oop_ptr, intptr_t *sp_base, GrowableArray<ScopeValue*>* objects) const;
22 | +
23 | protected:
24 | ScopeDesc* _scope;
25 | int _vframe_id;
26 |
27 | //StackValue resolve(ScopeValue* sv) const;
28 | BasicLock* resolve_monitor_lock(Location location) const;
29 | StackValue *create_stack_value(ScopeValue *sv) const;
30 | + ScopeValue *get_scope_value(GrowableArray<ScopeValue*>* scv_list, int index, GrowableArray<ScopeValue*>* objects) const;
31 |
32 | private:
33 | compiledVFrame(const frame* fr, const RegisterMap* reg_map, JavaThread* thread, ScopeDesc* scope, int vframe_id);
34 |
35 | #ifndef PRODUCT
36 |
37 | < prev index next >
38 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/vframe_hp.hpp.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/runtime/vframe_hp.hpp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/vframe_hp.hpp.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/hotspot/share/runtime/vframe_hp.hpp
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/vframe_hp.hpp.patch:
--------------------------------------------------------------------------------
1 | diff a/src/hotspot/share/runtime/vframe_hp.hpp b/src/hotspot/share/runtime/vframe_hp.hpp
2 | --- a/src/hotspot/share/runtime/vframe_hp.hpp
3 | +++ b/src/hotspot/share/runtime/vframe_hp.hpp
4 | @@ -76,17 +76,21 @@
5 | compiledVFrame* at_scope(int decode_offset, int vframe_id);
6 |
7 | // Returns SynchronizationEntryBCI or bci() (used for synchronization)
8 | int raw_bci() const;
9 |
10 | + // Used by stack allocation to match a stack oop to a described stack allocated object
11 | + ScopeValue *match_object_to_stack_oop(intptr_t *oop_ptr, intptr_t *sp_base, GrowableArray* objects) const;
12 | +
13 | protected:
14 | ScopeDesc* _scope;
15 | int _vframe_id;
16 |
17 | //StackValue resolve(ScopeValue* sv) const;
18 | BasicLock* resolve_monitor_lock(Location location) const;
19 | StackValue *create_stack_value(ScopeValue *sv) const;
20 | + ScopeValue *get_scope_value(GrowableArray* scv_list, int index, GrowableArray* objects) const;
21 |
22 | private:
23 | compiledVFrame(const frame* fr, const RegisterMap* reg_map, JavaThread* thread, ScopeDesc* scope, int vframe_id);
24 |
25 | #ifndef PRODUCT
26 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/hotspot/share/runtime/vframe_hp.hpp.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/hotspot/share/runtime/vframe_hp.hpp
6 |
7 |
8 |
9 | < prev index next > src/hotspot/share/runtime/vframe_hp.hpp
10 | Print this page
11 |
12 |
13 |
14 | compiledVFrame* at_scope(int decode_offset, int vframe_id);
15 |
16 | // Returns SynchronizationEntryBCI or bci() (used for synchronization)
17 | int raw_bci() const;
18 |
19 | + // Used by stack allocation to match a stack oop to a described stack allocated object
20 | + ScopeValue *match_object_to_stack_oop(intptr_t *oop_ptr, intptr_t *sp_base, GrowableArray<ScopeValue*>* objects) const;
21 | +
22 | protected:
23 | ScopeDesc* _scope;
24 | int _vframe_id;
25 |
26 | //StackValue resolve(ScopeValue* sv) const;
27 | BasicLock* resolve_monitor_lock(Location location) const;
28 | StackValue *create_stack_value(ScopeValue *sv) const;
29 | + ScopeValue *get_scope_value(GrowableArray<ScopeValue*>* scv_list, int index, GrowableArray<ScopeValue*>* objects) const;
30 |
31 | private:
32 | compiledVFrame(const frame* fr, const RegisterMap* reg_map, JavaThread* thread, ScopeDesc* scope, int vframe_id);
33 |
34 | #ifndef PRODUCT
35 |
36 | < prev index next >
37 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/java.base/share/classes/java/util/ArrayList.java.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/java.base/share/classes/java/util/ArrayList.java
6 |
7 |
8 |
9 | < prev index next > src/java.base/share/classes/java/util/ArrayList.java
10 | Print this page
11 |
12 |
13 |
14 | int newCapacity = ArraysSupport.newLength(oldCapacity,
15 | minCapacity - oldCapacity, /* minimum growth */
16 | oldCapacity >> 1 /* preferred growth */);
17 | return elementData = Arrays.copyOf(elementData, newCapacity);
18 | } else {
19 | ! return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)];
20 | ! }
21 | }
22 |
23 | private Object[] grow() {
24 | return grow(size + 1);
25 | }
26 |
27 | int newCapacity = ArraysSupport.newLength(oldCapacity,
28 | minCapacity - oldCapacity, /* minimum growth */
29 | oldCapacity >> 1 /* preferred growth */);
30 | return elementData = Arrays.copyOf(elementData, newCapacity);
31 | } else {
32 | ! if (DEFAULT_CAPACITY > minCapacity) {
33 | ! return elementData = new Object[DEFAULT_CAPACITY];
34 | + }
35 | + return elementData = new Object[minCapacity];
36 | + }
37 | }
38 |
39 | private Object[] grow() {
40 | return grow(size + 1);
41 | }
42 |
43 | < prev index next >
44 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/java.base/share/classes/java/util/ArrayList.java.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/java.base/share/classes/java/util/ArrayList.java
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/java.base/share/classes/java/util/ArrayList.java.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/java.base/share/classes/java/util/ArrayList.java
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/java.base/share/classes/java/util/ArrayList.java.patch:
--------------------------------------------------------------------------------
1 | diff a/src/java.base/share/classes/java/util/ArrayList.java b/src/java.base/share/classes/java/util/ArrayList.java
2 | --- a/src/java.base/share/classes/java/util/ArrayList.java
3 | +++ b/src/java.base/share/classes/java/util/ArrayList.java
4 | @@ -233,12 +233,15 @@
5 | int newCapacity = ArraysSupport.newLength(oldCapacity,
6 | minCapacity - oldCapacity, /* minimum growth */
7 | oldCapacity >> 1 /* preferred growth */);
8 | return elementData = Arrays.copyOf(elementData, newCapacity);
9 | } else {
10 | - return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)];
11 | - }
12 | + if (DEFAULT_CAPACITY > minCapacity) {
13 | + return elementData = new Object[DEFAULT_CAPACITY];
14 | + }
15 | + return elementData = new Object[minCapacity];
16 | + }
17 | }
18 |
19 | private Object[] grow() {
20 | return grow(size + 1);
21 | }
22 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/java.base/share/classes/java/util/ArrayList.java.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/java.base/share/classes/java/util/ArrayList.java
6 |
7 |
8 |
9 | < prev index next > src/java.base/share/classes/java/util/ArrayList.java
10 | Print this page
11 |
12 |
13 |
14 | int newCapacity = ArraysSupport.newLength(oldCapacity,
15 | minCapacity - oldCapacity, /* minimum growth */
16 | oldCapacity >> 1 /* preferred growth */);
17 | return elementData = Arrays.copyOf(elementData, newCapacity);
18 | } else {
19 | - return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)];
20 | - }
21 | + if (DEFAULT_CAPACITY > minCapacity) {
22 | + return elementData = new Object[DEFAULT_CAPACITY];
23 | + }
24 | + return elementData = new Object[minCapacity];
25 | + }
26 | }
27 |
28 | private Object[] grow() {
29 | return grow(size + 1);
30 | }
31 |
32 | < prev index next >
33 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/java.base/share/classes/java/util/regex/Matcher.java.cdiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Cdiff src/java.base/share/classes/java/util/regex/Matcher.java
6 |
7 |
8 |
9 | < prev index next > src/java.base/share/classes/java/util/regex/Matcher.java
10 | Print this page
11 |
12 |
13 |
14 | Matcher(Pattern parent, CharSequence text) {
15 | this.parentPattern = parent;
16 | this.text = text;
17 |
18 | // Allocate state storage
19 | ! int parentGroupCount = Math.max(parent.capturingGroupCount, 10);
20 | ! groups = new int[parentGroupCount * 2];
21 | locals = new int[parent.localCount];
22 | localsPos = new IntHashSet[parent.localTCNCount];
23 |
24 | // Put fields into initial states
25 | reset();
26 |
27 | Matcher(Pattern parent, CharSequence text) {
28 | this.parentPattern = parent;
29 | this.text = text;
30 |
31 | // Allocate state storage
32 | ! if (parent.capturingGroupCount > 10) {
33 | ! groups = new int[parent.capturingGroupCount * 2];
34 | + } else {
35 | + groups = new int[20];
36 | + }
37 | locals = new int[parent.localCount];
38 | localsPos = new IntHashSet[parent.localTCNCount];
39 |
40 | // Put fields into initial states
41 | reset();
42 |
43 | < prev index next >
44 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/java.base/share/classes/java/util/regex/Matcher.java.frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/java.base/share/classes/java/util/regex/Matcher.java
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/java.base/share/classes/java/util/regex/Matcher.java.frames.prev_next.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frames src/java.base/share/classes/java/util/regex/Matcher.java
6 |
7 |
8 | < prev index next >
9 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/java.base/share/classes/java/util/regex/Matcher.java.patch:
--------------------------------------------------------------------------------
1 | diff a/src/java.base/share/classes/java/util/regex/Matcher.java b/src/java.base/share/classes/java/util/regex/Matcher.java
2 | --- a/src/java.base/share/classes/java/util/regex/Matcher.java
3 | +++ b/src/java.base/share/classes/java/util/regex/Matcher.java
4 | @@ -242,12 +242,15 @@
5 | Matcher(Pattern parent, CharSequence text) {
6 | this.parentPattern = parent;
7 | this.text = text;
8 |
9 | // Allocate state storage
10 | - int parentGroupCount = Math.max(parent.capturingGroupCount, 10);
11 | - groups = new int[parentGroupCount * 2];
12 | + if (parent.capturingGroupCount > 10) {
13 | + groups = new int[parent.capturingGroupCount * 2];
14 | + } else {
15 | + groups = new int[20];
16 | + }
17 | locals = new int[parent.localCount];
18 | localsPos = new IntHashSet[parent.localTCNCount];
19 |
20 | // Put fields into initial states
21 | reset();
22 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/src/java.base/share/classes/java/util/regex/Matcher.java.udiff.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Udiff src/java.base/share/classes/java/util/regex/Matcher.java
6 |
7 |
8 |
9 | < prev index next > src/java.base/share/classes/java/util/regex/Matcher.java
10 | Print this page
11 |
12 |
13 |
14 | Matcher(Pattern parent, CharSequence text) {
15 | this.parentPattern = parent;
16 | this.text = text;
17 |
18 | // Allocate state storage
19 | - int parentGroupCount = Math.max(parent.capturingGroupCount, 10);
20 | - groups = new int[parentGroupCount * 2];
21 | + if (parent.capturingGroupCount > 10) {
22 | + groups = new int[parent.capturingGroupCount * 2];
23 | + } else {
24 | + groups = new int[20];
25 | + }
26 | locals = new int[parent.localCount];
27 | localsPos = new IntHashSet[parent.localTCNCount];
28 |
29 | // Put fields into initial states
30 | reset();
31 |
32 | < prev index next >
33 |
--------------------------------------------------------------------------------
/stack_allocation/webrev/style.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 | *
5 | * This code is free software; you can redistribute it and/or modify it
6 | * under the terms of the GNU General Public License version 2 only, as
7 | * published by the Free Software Foundation.
8 | *
9 | * This code is distributed in the hope that it will be useful, but WITHOUT
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 | * version 2 for more details (a copy is included in the LICENSE file that
13 | * accompanied this code).
14 | *
15 | * You should have received a copy of the GNU General Public License version
16 | * 2 along with this work; if not, write to the Free Software Foundation,
17 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 | *
19 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 | * or visit www.oracle.com if you need additional information or have any
21 | * questions.
22 | */
23 |
24 | body {
25 | background-color: #eeeeee;
26 | }
27 |
28 | span.line-old-header {
29 | color: red;
30 | font-size: large;
31 | font-weight: bold;
32 | }
33 |
34 | span.line-new-header {
35 | color: green;
36 | font-size: large;
37 | font-weight: bold;
38 | }
39 |
40 | span.line-added {
41 | color: blue;
42 | font-weight: bold;
43 | }
44 |
45 | span.line-modified {
46 | color: blue;
47 | }
48 |
49 | span.line-removed {
50 | color: brown;
51 | }
52 |
53 | span.udiff-line-added {
54 | color: blue;
55 | }
56 |
57 | span.udiff-line-modified-added {
58 | color: blue;
59 | }
60 |
61 | span.udiff-line-removed {
62 | color: brown;
63 | }
64 |
65 | span.udiff-line-modified-removed {
66 | color: brown;
67 | }
68 |
69 | span.file-modified {
70 | font-weight: bold;
71 | }
72 |
73 | span.file-renamed {
74 | font-style: italic;
75 | }
76 |
77 | span.file-added {
78 | color: green;
79 | font-weight: bold;
80 | }
81 |
82 | span.file-removed {
83 | color: red;
84 | font-weight: bold;
85 | }
86 |
87 | hr {
88 | border: none 0;
89 | border-top: 1px solid #aaa;
90 | height: 1px;
91 | }
92 |
93 | table.navigation {
94 | width: 100%;
95 | border: 0;
96 | align: center;
97 | }
98 |
99 | td.button {
100 | padding-left: 5px;
101 | padding-right: 5px;
102 | background-color: #eee;
103 | text-align: center;
104 | border: 1px #444 outset;
105 | cursor: pointer;
106 | }
107 |
108 | td.button a {
109 | font-weight: bold;
110 | color: black
111 | }
112 |
113 | td.button:hover {
114 | background: #ffcc99;
115 | }
116 |
117 | div.summary {
118 | font-size: .8em;
119 | border-bottom: 1px solid #aaa;
120 | padding-left: 1em;
121 | padding-right: 1em;
122 | }
123 |
124 | h2.summary {
125 | margin-bottom: 0.3em;
126 | }
127 |
128 | table.summary {
129 | white-space: nowrap;
130 | }
131 |
132 | table.summary th {
133 | vertical-align: top;
134 | text-align: right;
135 | }
136 |
137 | span.stat {
138 | font-size: .7em;
139 | }
140 |
141 | p.version {
142 | font-size: small;
143 | }
144 |
--------------------------------------------------------------------------------