[PATCH][PR 97506] Simplify trivial vcond_expr in expander.

Hongtao Liu crazylht@gmail.com
Wed Oct 21 06:29:07 GMT 2020


Hi:
  Bootstrap is ok, so is i386/x86-64 regression test.

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.
---
 gcc/config/i386/i386-expand.c           |  7 +++++++
 gcc/testsuite/gcc.target/i386/pr97506.c | 19 +++++++++++++++++++
 2 files changed, 26 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr97506.c

diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c
index e6f8b314f18..d036a3b5b4e 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 vcond_expr to avoid ICE error 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);

diff --git a/gcc/testsuite/gcc.target/i386/pr97506.c
b/gcc/testsuite/gcc.target/i386/pr97506.c
new file mode 100644
index 00000000000..74714cfab2c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr97506.c
@@ -0,0 +1,19 @@
+/* PR target/97506  */
+/* { dg-do compile } */
+/* { dg-options "-Og -finline-functions-called-once -fno-tree-ccp
-mavx512vbmi -mavx512vl" } */
+
+typedef unsigned char __attribute__ ((__vector_size__ (16))) U;
+typedef int __attribute__ ((__vector_size__ (4))) V;
+U u;
+
+void
+bar (int i, V v)
+{
+  u += (char) i & (char) i > (U){};
+}
+
+void
+foo (void)
+{
+  bar (0, (V){});
+}
-- 
2.18.1


-- 
BR,
Hongtao
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Simplify-trivial-vcond_expr-in-expander.patch
Type: text/x-patch
Size: 1960 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20201021/4fe6c67a/attachment.bin>


More information about the Gcc-patches mailing list