diff options
author | liuhongt <hongtao.liu@intel.com> | 2022-12-01 11:41:49 +0800 |
---|---|---|
committer | liuhongt <hongtao.liu@intel.com> | 2022-12-02 09:29:10 +0800 |
commit | e055e6db974d8b8950b30859a853e0aee74e20c2 (patch) | |
tree | 7321783063a99ce623b4e2b4277dffbc2422ef4b | |
parent | a4e577b044d69977f93b2cb7769dc991eadf2cf0 (diff) | |
download | gcc-e055e6db974d8b8950b30859a853e0aee74e20c2.zip gcc-e055e6db974d8b8950b30859a853e0aee74e20c2.tar.gz gcc-e055e6db974d8b8950b30859a853e0aee74e20c2.tar.bz2 |
Fix ICE due to incorrect insn type.
;; if reg/mem op
(define_insn_reservation "slm_sseishft_3" 2
(and (eq_attr "cpu" "slm")
(and (eq_attr "type" "sseishft")
(not (match_operand 2 "immediate_operand"))))
"slm-complex, slm-all-eu")
in slm.md it will check operands[2] for type sseishft, but for
extendbfsf2_1 there's no second operand which caused ICE.
The patch set type from sseishft to sseishft1 to fix the issue.
gcc/ChangeLog:
PR target/107934
* config/i386/i386.md (extendbfsf2_1): Change type from
sseishft to sseishft1.
gcc/testsuite/ChangeLog:
* gcc.target/i386/pr107934.c: New test.
-rw-r--r-- | gcc/config/i386/i386.md | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr107934.c | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index e9ca7f3..2975b5e 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -4981,7 +4981,7 @@ pslld\t{$16, %0|%0, 16} vpslld\t{$16, %1, %0|%0, %1, 16}" [(set_attr "isa" "noavx,avx") - (set_attr "type" "sseishft") + (set_attr "type" "sseishft1") (set_attr "length_immediate" "1") (set_attr "prefix_data16" "1,*") (set_attr "prefix" "orig,vex") diff --git a/gcc/testsuite/gcc.target/i386/pr107934.c b/gcc/testsuite/gcc.target/i386/pr107934.c new file mode 100644 index 0000000..59106b29 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr107934.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mtune=knl -ffinite-math-only -msse2" } */ + +int +foo (__bf16 bf) +{ + return bf; +} |