[Issue 10226] core.simd inefficient codegen
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Mon Mar 13 18:03:42 PDT 2017
https://issues.dlang.org/show_bug.cgi?id=10226
--- Comment #12 from Martin Nowak <code at dawg.eu> ---
The cause for the example in comment 11 seems to be the void16 parameters of
__simd_sto which breaks the
(tyfloating(em->Ety) != 0) == (tyfloating(e->Ety) != 0)
condition in localizer.
https://github.com/dlang/dmd/blob/0089ae06db7c7b4bebe4d11bfcf02eab69936d81/src/ddmd/backend/glocal.c#L344
The assignment of value
{
(__vector(float[4])* p = &a[0];) , ((__vector(float[4]) value = b - c;));
__simd_sto(cast(XMM)3857, cast(__vector(void[16]))*p,
cast(__vector(void[16]))value);
}
is optimized to this el
el:0x9003b0 cnt=0 cs=0 * TYsigned char[16] 0x900350
el:0x900350 cnt=0 cs=0 var TY* __a_8
el:0x8ffc94 cnt=0 cs=0 - TYsigned char[16] 0x8ffbd4 0x8ffc34
el:0x8ffbd4 cnt=0 cs=0 var TYfloat[4] b
el:0x8ffc34 cnt=0 cs=0 var TYfloat[4] c
which assigns a float[4] vector to a byte[16] vector.
--
More information about the Digitalmars-d-bugs
mailing list