|
This is becoming a fairly dependable failure that we should aim to close by 3.0. Another example here:
I've tried repeating the error with the OTH and failed. spec/jbb/TransactionManager.go is a long method making it difficult to pinpoint the inlining problem. Related bug statements added in r14769, r14807 and r14808. An example of the error:
what appears to be happening is a call from spec.jbb.TransactionManager.go is getting the wrong targets. Ie in the bytecode: 665: invokevirtual #105; //Method spec/jbb/NewOrderTransaction.process the call to process() at PC=665 is returning the methods from updateTimerData at PC=703. There are similar sequence elsewhere in the very large go method but always the distance between the bytecodes appears to be 38. I believe the cause of the bug may be OSR, this is what makes it hard to reproduce. I think OSR may have inserted extra bytecodes into go (probably 38 of them) and by a fluke this means that when we ask for targets of process we get them for a method that is 38bytes later. There is a bug that the callHelper in BC2IR doesn't take into account the bciAdjustment of OSR, we can therefore currently get the wrong targets for a method called during OSR from the adaptive systems weighted call graph (which quite logically doesn't know anything about OSR bytecode adjustments). We know SPECjbb2000 is likely to be hitting this problem because of the array index out of bounds exception, bloat could be getting this problem too, but perversely the called method and the wrong target methods may have the same or a greater number of arguments.
Fix committed in r14811. Will close after some regression tests go by.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
http://jikesrvm.anu.edu.au/cattrack/results/rvmx86lnx32.anu.edu.au/perf/4531/production/default/perf-jbb2000/jbb2000/1/Output.txt