[Issue 23746] New: ICE with bit-wise binops with vector masks
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Feb 26 20:03:21 UTC 2023
https://issues.dlang.org/show_bug.cgi?id=23746
Issue ID: 23746
Summary: ICE with bit-wise binops with vector masks
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: kinke at gmx.net
This crashes the backend of v2.102.1:
```
T clamp(T)(T x)
{
enum min = T(-1);
enum max = T(1);
const ltMask = x < min;
const gtMask = x > max;
version (none) // nice-to-have version
{
return (min & ltMask)
| (max & gtMask)
| (x & ~(ltMask | gtMask));
}
else // currently required ugly version
{
alias I = typeof(ltMask);
return cast(T) (
((cast(I) min) & ltMask)
| ((cast(I) max) & gtMask)
| ((cast(I) x) & ~(ltMask | gtMask)));
}
}
void main()
{
alias int4 = __vector(int[4]);
alias float4 = __vector(float[4]);
assert(clamp!int4([0, 1, -2, 3]).array == [0, 1, -1, 1]);
assert(clamp!float4([-0.25f, 0.5f, 1.5f, -2]).array == [-0.25f, 0.5f, 1,
-1]);
}
```
Output on Linux x64:
```
el:0x556764d27e70 cnt=0 cs=0 > mTYconst|TYulong[4] 0x556764d275a0
0x556764d27480
el:0x556764d275a0 cnt=1 cs=255 var TYfloat4 x
el:0x556764d27480 cnt=0 cs=255 var mTYconst|TYfloat4 _TMP14
Illegal instruction
```
---
As shown in the example, working with vector masks is very cumbersome as of
v2.102, requiring reinterpret-casts all over the place.
--
More information about the Digitalmars-d-bugs
mailing list