X[]==Y[] is 7X slower than it should be -- why?

Tomas Lindquist Olsen tomas at famolsen.dk
Sun Jun 22 09:53:08 PDT 2008


Sean Kelly wrote:
> == Quote from Sean Kelly (sean at invisibleduck.org)'s article
>> == Quote from Tomas Lindquist Olsen (tomas at famolsen.dk)'s article
>>> Sean Kelly wrote:
>>>> == Quote from Jarrett Billingsley (kb3ctd2 at yahoo.com)'s article
>>>>> "Sean Kelly" <sean at invisibleduck.org> wrote in message
>>>>> news:g3gtvk$1tm7$1 at digitalmars.com...
>>>>>> Done :p
>>>>>>
>>>>>> http://dsource.org/projects/tango/changeset/3651
>>>>> In _adCmp,
>>>>> if (a1.ptr == a2.ptr)
>>>>>     return 0;
>>>>> erm, that's not right at all.  Two slices with the same pointer and
>>>>> different lengths.
>>>> Darnit, you're right.  Good catch.
>>>>
>>>>
>>>> Sean
>>> After having a look at this I don't see how it could work.
>>> The TypeInfo passed to _adEq/Cmp is the *element* typeinfo, not the *array*
>> typeinfo.
>>> With the current code, the way I read it, only arrays with elementsize==1 will
>> work (and only
>>> if the element is not a 1byte struct that overloads the comparison operators.
>>> Am I missing something or should the compilers not be changed to pass the
>> *array* typeinfo if
>>> these optimizations are to make any sense ?
>> I was wondering about that.  *sigh* I guess I'll have to change it back then.  How
>> terribly annoying.
> 
> Hold on.  Why would that routine get the TypeInfo for the element and not the
> array?  Similar typed arrays can only be compared anyway, and the differences
> between static and sdynamic arrays are irrelevant for comparisons.  What am I
> missing?  I'm inclined to just file a bug report asking that this be changed.
> 
> 
> Sean

Yeah, after writing my reply I wondered a bit about this and went on and changed LLVMDC to pass 
the array's typeinfo :)

There's really no reason no to make this change (besides forcing people to recompile), the 
implementation becomes *both* cleaner and faster :)



More information about the Digitalmars-d mailing list