RFR: 8013393: Merge templateTable_x86 32 and 64 bit files into one file.

Dean Long dean.long at oracle.com
Mon Mar 2 20:44:20 UTC 2015


OK.  If we had to take as much time to review the "diff -D" merge as
the human merge, then it's probably not worth it.  It's only if we trust
the "diff" merge and use that as a starting point for the pretty human
merge that I see it helping.

dl

On 3/2/2015 12:30 PM, Coleen Phillimore wrote:
>
> Cool option to diff.  I didn't know that existed.  In this case, it 
> would yield a file that would be mostly impossible to review. Max's 
> change goes a lot further in merging these files, and would be 
> unfortunate to go backwards.  This diff would leave a mess in the file 
> with a lot of #ifdefs that were easily resolved with register names 
> that I wouldn't want to look at.
>
> Coleen
>
> On 3/2/15, 1:37 PM, Dean Long wrote:
>> Hi Coleen.  Let's say the _32 file contains
>>
>> 32
>> x
>> y
>> z
>> int
>>
>> and the _64 file contains
>>
>> 64
>> x
>> y
>> z
>> long
>>
>> Then "diff -DLP64 _32 _64" will give:
>>
>> #ifndef LP64
>> 32
>> #else /* LP64 */
>> 64
>> #endif /* LP64 */
>> x
>> y
>> z
>> #ifndef LP64
>> int
>> #else /* LP64 */
>> long
>> #endif /* LP64 */
>>
>> In other words, an automatic merge of the two files, with the 
>> differences in #ifdefs.
>>
>> thanks,
>>
>> dl
>>
>> On 3/2/2015 7:01 AM, Coleen Phillimore wrote:
>>>
>>> Hi Dean,
>>> I'm not sure how to do this diff that you're suggesting.  I don't 
>>> think an intermediate changeset makes sense either. The bytecodes 
>>> are pretty well tested with our normal testing so increasing this to 
>>> more than one change, just increases testing and putback overhead.
>>>
>>> I've looked at this several times and it's not very difficult to 
>>> tell what's done and whether it's correct.  The diffs do not span a 
>>> lot of code (at most 5 lines at a time), so there are no new whole 
>>> functions to read that are new code.
>>>
>>> I'm still really don't understand what kind of diff you're 
>>> requesting that would make it easier.  Can you provide an example?
>>>
>>> thanks,
>>> Coleen
>>>
>>> On 2/27/15, 6:13 PM, Dean Long wrote:
>>>> Hi Coleen.  I believe I understand what Max did, and that it was 
>>>> not an automated merge,
>>>> which to me says that properly reviewing the change requires 
>>>> looking at all 2851
>>>> changed lines and mentally deciding if the result is equivalent to 
>>>> the original.
>>>>
>>>> What I was suggesting was essentially two things.  First, an aid to 
>>>> the reviewer,
>>>> and second, a way to reduce risk.  In the end it's up to the 
>>>> reviewers.  If they
>>>> prefer to see the changes in a single diff, they can compare a 
>>>> single-file
>>>> automated merge with the single-file result of Max's merge. It 
>>>> doesn't matter
>>>> if the reviewer does it or Max does it as a convenience. Regarding 
>>>> risk,
>>>> if the reviewers aren't comfortable deciding that all 2851 are 
>>>> correct,
>>>> the changes could be staged into several pieces, and the first 
>>>> piece could
>>>> be an automated merge that would be cleaned up later, on the 
>>>> assumption
>>>> that an automated merge could be considered trivially correct and 
>>>> therefore
>>>> not risky.  I hope that clears up my somewhat terse comments below.
>>>>
>>>> dl
>>>>
>>>> On 2/27/2015 12:06 PM, Coleen Phillimore wrote:
>>>>>
>>>>> Dean,  This merge wasn't automatic in any way, so I don't think 
>>>>> what you're proposing makes sense.  I think if you look at the 
>>>>> webrev you'll see what Max has done.
>>>>> Thanks,
>>>>> Coleen
>>>>>
>>>>> On 2/27/15, 1:39 PM, Dean Long wrote:
>>>>>> Hi Max.  You could do an automatic merge using something like 
>>>>>> "diff -w -D LP64 templateTable_x86_32.cpp and 
>>>>>> templateTable_x86_64.cpp", then compare
>>>>>> your improvements to that.  That way all the changes would show 
>>>>>> up in
>>>>>> a single diff.  Or you could even check in the automatic merge 
>>>>>> first, to reduce
>>>>>> risk, then break up the improvements into smaller pieces.
>>>>>>
>>>>>> dl
>>>>>>
>>>>>> On 2/27/2015 9:36 AM, Max Ockner wrote:
>>>>>>> Hello all,
>>>>>>> Please review this change which involves merging 32 and 64 bit 
>>>>>>> interpreter files.
>>>>>>>
>>>>>>> Bug ID: 8013393
>>>>>>> Webrev: cr.openjdk.java.net/~coleenp/8013393
>>>>>>>
>>>>>>> Summary: templateTable_x86_64.cpp and templateTable_x86_32.cpp 
>>>>>>> have been merged into one file*. These files originally shared 
>>>>>>> thousands of lines of duplicate code.
>>>>>>> There were also many nearly identical sections of code which 
>>>>>>> differed only in register usage (example: rsi vs. r13) or in the 
>>>>>>> usage of nearly identical functions (example: movptr vs. 
>>>>>>> movq/movl).
>>>>>>> Given that (1) new bytecodes could be added soon, and (2) these 
>>>>>>> files have been tormenting Coleen for years, this change seems 
>>>>>>> overdue.
>>>>>>>
>>>>>>> *There are currently two files. The updated 
>>>>>>> templateTable_x86.cpp is copied into both 
>>>>>>> templateTable_x86_32.cpp and templateTable_x86_64.cpp to make it 
>>>>>>> easier to review (so the diff is not the entire file). This will 
>>>>>>> be changed back to one file after review.
>>>>>>>
>>>>>>> For functions that could be merged, one copy was kept. In some 
>>>>>>> cases, files were merged by factoring out small differences such 
>>>>>>> as register usage (example: rbcp equals r13 or rsi depending on 
>>>>>>> the platform). For functions that could not be merged, the 32 
>>>>>>> and 64 bit versions are adjacent and are defined conditionally 
>>>>>>> using #ifdef based on the platform.
>>>>>>>
>>>>>>> There are still improvements to be made, but they are small and 
>>>>>>> can be filed seperately.
>>>>>>>
>>>>>>> Tested with:
>>>>>>> JPRT
>>>>>>> UTE nsk.jvmti.testlist
>>>>>>>
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Max Ockner
>>>>>>
>>>>>
>>>>
>>>
>>
>



More information about the hotspot-dev mailing list