From a52a6c047d542ac9fd6cac148c43ada76b65c0e1 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Mon, 12 Feb 2024 16:23:04 +0100 Subject: [PATCH] fix Issue 24390 - AssertError@src/dmd/backend/cgxmm.d(1476): Assertion failure --- compiler/src/dmd/backend/inliner.d | 4 +-- compiler/test/compilable/imports/test24390a.d | 2 ++ compiler/test/compilable/imports/test24390b.d | 9 +++++++ compiler/test/compilable/test24390.d | 26 +++++++++++++++++++ 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 compiler/test/compilable/imports/test24390a.d create mode 100644 compiler/test/compilable/imports/test24390b.d create mode 100644 compiler/test/compilable/test24390.d diff --git a/compiler/src/dmd/backend/inliner.d b/compiler/src/dmd/backend/inliner.d index c1211080ce5e..8c06874991d7 100644 --- a/compiler/src/dmd/backend/inliner.d +++ b/compiler/src/dmd/backend/inliner.d @@ -617,8 +617,8 @@ private elem* initializeParamsWithArgs(elem* eargs, SYMIDX sistart, SYMIDX siend ty = TYshort; if (szs == 1) { - ex = el_una(OP16_8, TYchar, ex); - ty = TYchar; + ex = el_una(OP16_8, TYschar, ex); + ty = TYschar; } } evar.Ety = ty; diff --git a/compiler/test/compilable/imports/test24390a.d b/compiler/test/compilable/imports/test24390a.d new file mode 100644 index 000000000000..0792c67426f4 --- /dev/null +++ b/compiler/test/compilable/imports/test24390a.d @@ -0,0 +1,2 @@ +module imports.test24390a; +public import imports.test24390b; diff --git a/compiler/test/compilable/imports/test24390b.d b/compiler/test/compilable/imports/test24390b.d new file mode 100644 index 000000000000..914553efdb06 --- /dev/null +++ b/compiler/test/compilable/imports/test24390b.d @@ -0,0 +1,9 @@ +module imports.test24390b; +static if (__traits(compiles, __vector(int[4])) && __traits(compiles, __vector(byte[16]))) +{ + __vector(int[4]) _mm_set1_epi8 (byte a) + { + __vector(byte[16]) b = a; + return cast(__vector(int[4]))b; + } +} diff --git a/compiler/test/compilable/test24390.d b/compiler/test/compilable/test24390.d new file mode 100644 index 000000000000..f02054dac0ff --- /dev/null +++ b/compiler/test/compilable/test24390.d @@ -0,0 +1,26 @@ +// PERMUTE_ARGS: -O -inline +// EXTRA_SOURCES: imports/test24390a.d imports/test24390b.d +static if (__traits(compiles, __vector(int[4])) && __traits(compiles, __vector(byte[16]))) +{ + import imports.test24390a; + + void main() + { + __vector(int[4]) mmA ; + __vector(int[4]) mmB ; + auto mask = _mm_cmpestrm(mmA, mmB); + } + + __vector(int[4]) _mm_cmpestrm(__vector(int[4]) mmA, __vector(int[4]) mmB) + { + __vector(int[4]) R; + for (int pos ; pos < 16; ++pos) + { + byte charK = (cast(__vector(byte[16]))mmA).array[pos]; + __vector(int[4]) eqMask = _mm_set1_epi8(charK); + R = R & eqMask; + + } + return R; + } +}