[Mono-dev] Mono generates inefficient vectorized code

Sergei Dyshel qyron.private at gmail.com
Thu Apr 8 10:59:53 EDT 2010

Hello Rodrigo,
Just picking up this conversation we had some time ago. I was asking why JIT
does unneeded loads and stores and you answered that this behavior is
because of lack of global reg allocator. I understand it so that any vreg
which is used in different basic blocks is "promoted" to "memory variable"
and hence gets loaded and stored each time.
Then I asked why bare "global" 'ints' are treated differently (and more
effectively) and you said that there are callee-saved iregs so there is a
specialized allocator for them.
Can you please point at the relevant place in code?

On Altivec we have callee-saved vector registers too. Is it possible to use
the same trick with them , in order to remove unnecessary loads/stores?
Sergei Dyshel

On Fri, Mar 12, 2010 at 02:34, Rodrigo Kumpera <kumpera at gmail.com> wrote:

> On Thu, Mar 11, 2010 at 9:15 PM, Sergei Dyshel <qyron.private at gmail.com>wrote:
>> Hello Rodrigo,
>> Thanks for the quick answer! But do you mean by it that the only
>> problem is in lack of global register allocator? What if 'temp' was
>> not vector but some bare 'int' temporary, would it be loaded and
>> stored in each iteration?
>>  Sorry, I hit reply to early.
> Ints are treated in a separate way. Since some of the scalar registers
> don't need
> to be saved across a call, we have a specialized global register allocator
> for them.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20100408/41de5321/attachment.html 

More information about the Mono-devel-list mailing list