diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2023-05-11 20:54:24 +0200 |
---|---|---|
committer | Uros Bizjak <ubizjak@gmail.com> | 2023-05-11 20:55:17 +0200 |
commit | 10a0d98356680a387b69f8659099450f7af86d9f (patch) | |
tree | 2a342586d8d791c3c7bd4c9e7208a332461dd0e7 /gcc | |
parent | 3e8f8ab5237002098e70b8cc06e51af2039078a7 (diff) | |
download | gcc-10a0d98356680a387b69f8659099450f7af86d9f.zip gcc-10a0d98356680a387b69f8659099450f7af86d9f.tar.gz gcc-10a0d98356680a387b69f8659099450f7af86d9f.tar.bz2 |
i386: Handle V4HI and V2SImode in ix86_widen_mult_cost [PR109807]
Do not crash when asking ix86_widen_mult_cost for the cost of
a widening mul operation to V4HI or V2SImode.
gcc/ChangeLog:
PR target/109807
* config/i386/i386.cc (ix86_widen_mult_cost):
Handle V4HImode and V2SImode.
gcc/testsuite/ChangeLog:
PR target/109807
* gcc.target/i386/pr109807.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/i386/i386.cc | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr109807.c | 4 |
2 files changed, 6 insertions, 0 deletions
diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index b1d08ec..62fe06f 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -20417,12 +20417,14 @@ ix86_widen_mult_cost (const struct processor_costs *cost, int basic_cost = 0; switch (mode) { + case V4HImode: case V8HImode: case V16HImode: if (!uns_p || mode == V16HImode) extra_cost = cost->sse_op * 2; basic_cost = cost->mulss * 2 + cost->sse_op * 4; break; + case V2SImode: case V4SImode: case V8SImode: /* pmulhw/pmullw can be used. */ diff --git a/gcc/testsuite/gcc.target/i386/pr109807.c b/gcc/testsuite/gcc.target/i386/pr109807.c new file mode 100644 index 0000000..6380eb3 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr109807.c @@ -0,0 +1,4 @@ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2 -msse4" } */ + +#include "sse2-mmx-pmaddwd.c" |