Add a pair of RTL tests, for RV64 and RV32 respectively, corresponding 
to the existing pr105314.c test.  They have been produced from RTL code 
as at the entry of the "ce1" pass for pr105314.c compiled at -O3.

        gcc/testsuite/
        * gcc.target/riscv/pr105314-rtl.c: New file.
        * gcc.target/riscv/pr105314-rtl32.c: New file.
---
 gcc/testsuite/gcc.target/riscv/pr105314-rtl.c   |   78 ++++++++++++++++++++++++
 gcc/testsuite/gcc.target/riscv/pr105314-rtl32.c |   78 ++++++++++++++++++++++++
 2 files changed, 156 insertions(+)

gcc-test-riscv-pr105314-rtl.diff
Index: gcc/gcc/testsuite/gcc.target/riscv/pr105314-rtl.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.target/riscv/pr105314-rtl.c
@@ -0,0 +1,78 @@
+/* PR rtl-optimization/105314 */
+/* { dg-do compile } */
+/* { dg-require-effective-target rv64 } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" "-flto" } } */
+/* { dg-options "-fdump-rtl-ce1" } */
+
+long __RTL (startwith ("ce1"))
+foo (long a, long b, long c)
+{
+(function "foo"
+  (param "a"
+    (DECL_RTL (reg/v:DI <1> [ a ]))
+    (DECL_RTL_INCOMING (reg:DI a0 [ a ])))
+  (param "b"
+    (DECL_RTL (reg/v:DI <2> [ b ]))
+    (DECL_RTL_INCOMING (reg:DI a1 [ b ])))
+  (param "c"
+    (DECL_RTL (reg/v:DI <3> [ c ]))
+    (DECL_RTL_INCOMING (reg:DI a2 [ c ])))
+  (insn-chain
+    (block 2
+      (edge-from entry (flags "FALLTHRU"))
+      (cnote 8 [bb 2] NOTE_INSN_BASIC_BLOCK)
+      (cinsn 2 (set (reg/v:DI <1> [ a ])
+                    (reg:DI a0 [ a ])) "pr105314.c":8:1
+               (expr_list:REG_DEAD (reg:DI a0 [ a ])))
+      (cinsn 4 (set (reg/v:DI <3> [ c ])
+                    (reg:DI a2 [ c ])) "pr105314.c":8:1
+               (expr_list:REG_DEAD (reg:DI a2 [ c ])))
+      (cnote 5 NOTE_INSN_FUNCTION_BEG)
+      (cjump_insn 10 (set (pc)
+                          (if_then_else (ne (reg/v:DI <3> [ c ])
+                                            (const_int 0))
+                                        (label_ref:DI 23)
+                                        (pc))) "pr105314.c":9:6
+                     (expr_list:REG_DEAD (reg/v:DI <3> [ c ])
+                                         (int_list:REG_BR_PROB 536870916)))
+      (edge-to 4)
+      (edge-to 3 (flags "FALLTHRU"))
+    ) ;; block 2
+    (block 3
+      (edge-from 2 (flags "FALLTHRU"))
+      (cnote 11 [bb 3] NOTE_INSN_BASIC_BLOCK)
+      (cinsn 6 (set (reg/v:DI <0> [ <retval> ])
+                    (reg/v:DI <1> [ a ])) "pr105314.c":9:6
+               (expr_list:REG_DEAD (reg/v:DI <1> [ a ])))
+      (edge-to 5 (flags "FALLTHRU"))
+    ) ;; block 3
+    (block 4
+      (edge-from 2)
+      (clabel 23 3)
+      (cnote 22 [bb 4] NOTE_INSN_BASIC_BLOCK)
+      (cinsn 7 (set (reg/v:DI <0> [ <retval> ])
+                    (const_int 0)) "pr105314.c":10:7)
+      (edge-to 5 (flags "FALLTHRU"))
+    ) ;; block 4
+    (block 5
+      (edge-from 4 (flags "FALLTHRU"))
+      (edge-from 3 (flags "FALLTHRU"))
+      (clabel 16 1)
+      (cnote 19 [bb 5] NOTE_INSN_BASIC_BLOCK)
+      (cinsn 17 (set (reg/i:DI a0)
+                     (reg/v:DI <0> [ <retval> ])) "pr105314.c":12:1
+                (expr_list:REG_DEAD (reg/v:DI <0> [ <retval> ])))
+      (cinsn 18 (use (reg/i:DI a0)) "pr105314.c":12:1)
+      (edge-to exit (flags "FALLTHRU"))
+    ) ;; block 5
+  ) ;; insn-chain
+  (crtl
+    (return_rtx
+      (reg/i:DI a0)
+    ) ;; return_rtx
+  ) ;; crtl
+) ;; function "foo"
+}
+
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through 
noce_try_store_flag_mask" 1 "ce1" } } */
+/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */
Index: gcc/gcc/testsuite/gcc.target/riscv/pr105314-rtl32.c
===================================================================
--- /dev/null
+++ gcc/gcc/testsuite/gcc.target/riscv/pr105314-rtl32.c
@@ -0,0 +1,78 @@
+/* PR rtl-optimization/105314 */
+/* { dg-do compile } */
+/* { dg-require-effective-target rv32 } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" "-flto" } } */
+/* { dg-options "-fdump-rtl-ce1" } */
+
+long __RTL (startwith ("ce1"))
+foo (long a, long b, long c)
+{
+(function "foo"
+  (param "a"
+    (DECL_RTL (reg/v:SI <1> [ a ]))
+    (DECL_RTL_INCOMING (reg:SI a0 [ a ])))
+  (param "b"
+    (DECL_RTL (reg/v:SI <2> [ b ]))
+    (DECL_RTL_INCOMING (reg:SI a1 [ b ])))
+  (param "c"
+    (DECL_RTL (reg/v:SI <3> [ c ]))
+    (DECL_RTL_INCOMING (reg:SI a2 [ c ])))
+  (insn-chain
+    (block 2
+      (edge-from entry (flags "FALLTHRU"))
+      (cnote 8 [bb 2] NOTE_INSN_BASIC_BLOCK)
+      (cinsn 2 (set (reg/v:SI <1> [ a ])
+                    (reg:SI a0 [ a ])) "pr105314.c":8:1
+               (expr_list:REG_DEAD (reg:SI a0 [ a ])))
+      (cinsn 4 (set (reg/v:SI <3> [ c ])
+                    (reg:SI a2 [ c ])) "pr105314.c":8:1
+               (expr_list:REG_DEAD (reg:SI a2 [ c ])))
+      (cnote 5 NOTE_INSN_FUNCTION_BEG)
+      (cjump_insn 10 (set (pc)
+                          (if_then_else (ne (reg/v:SI <3> [ c ])
+                                            (const_int 0))
+                                        (label_ref:SI 23)
+                                        (pc))) "pr105314.c":9:6
+                     (expr_list:REG_DEAD (reg/v:SI <3> [ c ])
+                                         (int_list:REG_BR_PROB 536870916)))
+      (edge-to 4)
+      (edge-to 3 (flags "FALLTHRU"))
+    ) ;; block 2
+    (block 3
+      (edge-from 2 (flags "FALLTHRU"))
+      (cnote 11 [bb 3] NOTE_INSN_BASIC_BLOCK)
+      (cinsn 6 (set (reg/v:SI <0> [ <retval> ])
+                    (reg/v:SI <1> [ a ])) "pr105314.c":9:6
+               (expr_list:REG_DEAD (reg/v:SI <1> [ a ])))
+      (edge-to 5 (flags "FALLTHRU"))
+    ) ;; block 3
+    (block 4
+      (edge-from 2)
+      (clabel 23 3)
+      (cnote 22 [bb 4] NOTE_INSN_BASIC_BLOCK)
+      (cinsn 7 (set (reg/v:SI <0> [ <retval> ])
+                    (const_int 0)) "pr105314.c":10:7)
+      (edge-to 5 (flags "FALLTHRU"))
+    ) ;; block 4
+    (block 5
+      (edge-from 4 (flags "FALLTHRU"))
+      (edge-from 3 (flags "FALLTHRU"))
+      (clabel 16 1)
+      (cnote 19 [bb 5] NOTE_INSN_BASIC_BLOCK)
+      (cinsn 17 (set (reg/i:SI a0)
+                     (reg/v:SI <0> [ <retval> ])) "pr105314.c":12:1
+                (expr_list:REG_DEAD (reg/v:SI <0> [ <retval> ])))
+      (cinsn 18 (use (reg/i:SI a0)) "pr105314.c":12:1)
+      (edge-to exit (flags "FALLTHRU"))
+    ) ;; block 5
+  ) ;; insn-chain
+  (crtl
+    (return_rtx
+      (reg/i:SI a0)
+    ) ;; return_rtx
+  ) ;; crtl
+) ;; function "foo"
+}
+
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through 
noce_try_store_flag_mask" 1 "ce1" } } */
+/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */

Reply via email to