-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Clone all instrs in linearized instr list so that when JIT starts it …
…cannot mangle anything in those instrs. Cannot see any measurable startup impact in this change
- 9.4.12.0
- 9.4.11.0
- 9.4.10.0
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
- 9.1.6.0
- 9.1.5.0
- 9.1.4.0
- 9.1.3.0
- 9.1.2.0
- 9.1.1.0
- 9.1.0.0
- 9.0.5.0
- 9.0.4.0
- 9.0.3.0
- 9.0.1.0
- 9.0.0.0
- 9.0.0.0.rc2
- 9.0.0.0.rc1
- 9.0.0.0.pre2
- 9.0.0.0.pre1
Showing
3 changed files
with
27 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -475,16 +475,17 @@ private synchronized Instr[] prepareInstructions() { | |
|
||
setupLinearization(); | ||
|
||
SimpleCloneInfo cloneInfo = new SimpleCloneInfo(this, false); | ||
|
||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
enebo
Author
Member
|
||
// FIXME: If CFG (or linearizedBBList) knew number of instrs we could end up allocing better | ||
|
||
// Pass 1. Set up IPCs for labels and instruct and build linear instr list | ||
List<Instr> newInstrs = new ArrayList<Instr>(); | ||
HashMap<Label, Integer> labelIPCMap = new HashMap<Label, Integer>(); | ||
int ipc = 0; | ||
for (BasicBlock b: linearizedBBList) { | ||
Label l = b.getLabel(); | ||
labelIPCMap.put(l, ipc); | ||
// This assumes if multiple equal/same labels exist which are scattered around the scope | ||
// must be the same Java instance or only this one will get a targetPC set. | ||
l.setTargetPC(ipc); | ||
// All same-named labels must be same Java instance for this to work or we would need | ||
// to examine all Label operands and update this as well which would be expensive. | ||
b.getLabel().setTargetPC(ipc); | ||
List<Instr> bbInstrs = b.getInstrs(); | ||
int bbInstrsLength = bbInstrs.size(); | ||
for (int i = 0; i < bbInstrsLength; i++) { | ||
|
@@ -508,16 +509,23 @@ private synchronized Instr[] prepareInstructions() { | |
// System.out.println("SCOPE: " + getName()); | ||
// System.out.println("INSTRS: " + cfg().toStringInstrs()); | ||
|
||
// Pass 2: Use ipc info from before to mark all instrs rpc | ||
linearizedInstrArray = newInstrs.toArray(new Instr[newInstrs.size()]); | ||
|
||
// Pass 2: Use ipc info from previous to mark all linearized instrs rpc | ||
ipc = 0; | ||
for (BasicBlock b : linearizedBBList) { | ||
BasicBlock rescuerBB = cfg().getRescuerBBFor(b); | ||
int rescuerPC = (rescuerBB == null) ? -1 : rescuerBB.getLabel().getTargetPC(); | ||
for (Instr i : b.getInstrs()) { | ||
i.setRPC(rescuerPC); | ||
for (Instr instr : b.getInstrs()) { | ||
// FIXME: If we did not omit instrs from previous pass we could end up just doing a | ||
// a size and for loop this n times instead of walking an examining each instr | ||
if (!(instr instanceof ReceiveSelfInstr)) { | ||
linearizedInstrArray[ipc].setRPC(rescuerPC); | ||
ipc++; | ||
} | ||
} | ||
} | ||
|
||
linearizedInstrArray = newInstrs.toArray(new Instr[newInstrs.size()]); | ||
return linearizedInstrArray; | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 5 additions & 0 deletions
5
core/src/main/java/org/jruby/ir/instructions/ReceiveSelfInstr.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
You actually forgot to clone the instr and set it in the array ... I have a fix in my local branch .. and it is a great test for uncovering bugs in the cloning code :) ... gem list fails, and 20+ rubyspecs fails ... also discovered perf. benefit from specialized call instrs accidentally when I cloned after specializing and got the unspecialized versions ... 50% slower without specialized calls ... figured out what was going on after puzzling a bit. Anyway, just a heads up.