Request for review (L): 6797305: Add LoadUB and LoadUI opcode class

Tom Rodriguez Thomas.Rodriguez at Sun.COM
Fri Mar 6 10:33:22 PST 2009


If you want to see how it gets matched you can set breakpoints in the  
dfa code for the various node types.  Do a case insensitive search for  
loadUB2L in dfa_x86_64.cpp to see all the matching machinery for it.   
If you set a breakpoint on the SET_VALID part you can call dump() on  
the State to see what dfa states it considered valid at the match  
point.  I can take a look at the generated dfa if you like to see if  
there's anything weird about it.  Could you send me a pointer to it?

tom

On Mar 6, 2009, at 9:46 AM, Christian Thalinger wrote:

> On Fri, 2009-03-06 at 09:38 -0800, Vladimir Kozlov wrote:
>> Is this
>>
>> Is it possible that matcher is confused by the cost?
>> You changed the cost of ConvI2L:
>>
>>   instruct convI2L_reg( eRegL dst, eRegI src, eFlagsReg cr) %{
>>     match(Set dst (ConvI2L src));
>>     effect(KILL cr);
>> +   ins_cost(375);
>>
>> and cost of "ConvI2L (LoadUB" is lower:
>>
>> ! instruct loadUB2L(eRegL dst, memory mem)
>> ! %{
>> !   match(Set dst (ConvI2L (LoadUB mem)));
>> !
>> !   ins_cost(250);
>
> Ahh, sorry, I didn't mention that this happens on x86_64.  I just  
> wonder
> why the matcher matches the rule when there is no LoadB that could be
> matched.  If I remove that instruction, then the next is matched:
>
>  match(Set dst (ConvI2L (LoadUB mem)));
>
> -- Christian
>




More information about the hotspot-compiler-dev mailing list