aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/i386-expand.c
diff options
context:
space:
mode:
authorliuhongt <hongtao.liu@intel.com>2020-10-21 13:05:16 +0800
committerliuhongt <hongtao.liu@intel.com>2020-10-21 17:33:53 +0800
commit9b5d50b7c6e34267b40bdeb4c145e9132d83762d (patch)
treeb71f269d5598aaf5ab5029604b1fc52bef151871 /gcc/config/i386/i386-expand.c
parent5244b4af5e47bc98a2a9cf36f048981583a1b163 (diff)
Simplify trivial VEC_COND_EXPR in expander.
gcc/ChangeLog: PR target/97506 * config/i386/i386-expand.c (ix86_expand_sse_movcc): Move op_true to dest directly when op_true equals op_false. gcc/testsuite/ChangeLog: PR target/97506 * gcc.target/i386/pr97506.c: New test.
Diffstat (limited to 'gcc/config/i386/i386-expand.c')
-rw-r--r--gcc/config/i386/i386-expand.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c
index 02d5ca5783d..d0d7a969637 100644
--- a/gcc/config/i386/i386-expand.c
+++ b/gcc/config/i386/i386-expand.c
@@ -3525,6 +3525,13 @@ ix86_expand_sse_movcc (rtx dest, rtx cmp, rtx op_true, rtx op_false)
machine_mode mode = GET_MODE (dest);
machine_mode cmpmode = GET_MODE (cmp);
+ /* Simplify trivial VEC_COND_EXPR to avoid ICE in pr97506. */
+ if (rtx_equal_p (op_true, op_false))
+ {
+ emit_move_insn (dest, op_true);
+ return;
+ }
+
/* In AVX512F the result of comparison is an integer mask. */
bool maskcmp = mode != cmpmode && ix86_valid_mask_cmp_mode (mode);