On Mon, Feb 6, 2012 at 9:01 PM, Jose Fonseca <jfons...@vmware.com> wrote:
> ----- Original Message -----
>> On Mon, Feb 6, 2012 at 7:47 PM, Jose Fonseca <jfons...@vmware.com>
>> wrote:
>> > Dave,
>> >
>> > I really see no point of inferring anything when translating MOVs.
>> > The src/dst value will need to be converted from/to a floating
>> > point anyway so this is unnecessary complexity AFAICS. If you
>> > believe this is really necessary please provide a concrete
>> > example.
>>
>> The problem is MOV from immediate, since immediates are stored as the
>> correct internal type, so we don't get to infer the src in that case,
>> then we try to MOV int4* to float4* and llvm crashes.
>
> I see.
>
> In that case I'd suggest you to:
>
> - in lp_emit_immediate_soa() bitcast _all_ integer immediates to floats 
> (i.e., bld->immediates[] is always of llvm type float, just like 
> bld->temps[], and bld->outputs[], etc.).
>
> - in emit_fetch_immediate() bitcast back to integer when stype == INT or UINT

I've started looking at this, but it means we have to change
immediates from being constants to being something we can bitcast. At
the moment the immediate fetch just fetches one immediate value from a
vector, not a pointer to an immediate value, making this pointer based
just seems like an unnecessary step and seems to be like it will get
in the way of optimisations that can work on constant values.

Dave.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to