Sub-word comparisons
Roland Schatz
roland.schatz at oracle.com
Mon Nov 7 10:34:27 UTC 2016
On 11/04/2016 01:16 PM, Roland Schatz wrote:
> On 11/04/2016 12:46 PM, Andrew Haley wrote:
>> Ah, I just looked at SPARC, and it does the exact same thing:
>>
>> int compareBytes = cmpKind.getSizeInBytes();
>> // SPARC compares 32 or 64 bits
>> if (compareBytes < left.getPlatformKind().getSizeInBytes()) {
>> left = arithmeticLIRGen.emitSignExtend(left,
>> compareBytes * 8, XWORD.getSizeInBytes() * 8);
>> }
>> if (compareBytes < right.getPlatformKind().getSizeInBytes()) {
>> right = arithmeticLIRGen.emitSignExtend(right,
>> compareBytes * 8, XWORD.getSizeInBytes() * 8);
>> }
>>
>> OK, I give up. That must be the only way to do it.
> Yes, unfortunately that's the only way to do it right now.
>
> The issue comes from the x86 backend, where doing sub-word comparisons
> sometimes makes code faster. In hindsight, the decision to do this
> optimization in the platform independent code was wrong. When this
> code was written, there was only the x86 backend, and it was easier to
> do it that way.
>
> In general, the convention in graal is that if a platform doesn't
> support some operation, then this operation should not exist in the
> final high-level graph. Most of the time, we're doing this with
> platform specific phases or lowerings.
> In this particular case, I think the best fix is to move the
> optimization that produces the sub-word compares to x86-specific code,
> i.e., never produce them on platforms that don't support them instead
> of having to back out after the fact.
>
> Since we already have two backends that stumble over it, I think it's
> time to look into fixing this ;)
> I think it shouldn't be too hard. In the meantime, you can just copy
> the SPARC workaround.
Should be fixed
(https://github.com/graalvm/graal-core/commit/e276a1dc73876559f2ada69797dcb961076b51f0).
- Roland
>
> - Roland
>>
>> Andrew.
>
>
More information about the graal-dev
mailing list