gcc/testsuite/ChangeLog:
* gcc.dg/rtl/aarch64/asr_div1.c: New test case.
* gcc.dg/rtl/aarch64/pr71779.c: New test case.
---
gcc/testsuite/gcc.dg/rtl/aarch64/asr_div1.c | 41 +++++++++++++++++++++++
gcc/testsuite/gcc.dg/rtl/aarch64/pr71779.c | 50 +++++++++++++++++++++++++++++
2 files changed, 91 insertions(+)
create mode 100644 gcc/testsuite/gcc.dg/rtl/aarch64/asr_div1.c
create mode 100644 gcc/testsuite/gcc.dg/rtl/aarch64/pr71779.c
diff --git a/gcc/testsuite/gcc.dg/rtl/aarch64/asr_div1.c
b/gcc/testsuite/gcc.dg/rtl/aarch64/asr_div1.c
new file mode 100644
index 0000000..a95c8c7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/rtl/aarch64/asr_div1.c
@@ -0,0 +1,41 @@
+/* { dg-do compile { target aarch64-*-* } } */
+/* { dg-options "-mtune=cortex-a53 -fdump-rtl-combine -O2" } */
+
+/* Taken from
+ gcc/testsuite/gcc.dg/asr_div1.c -O2 -fdump-rtl-all -mtune=cortex-a53
+ for aarch64, hand editing to the new format. */
+
+int __RTL (startwith ("combine")) f1 (int n)
+{
+(function "f1"
+ (param "n"
+ (DECL_RTL (reg/v:SI <1> [ n ]))
+ (DECL_RTL_INCOMING (reg:SI x0 [ n ]))
+ ) ;; param "n"
+ (insn-chain
+ (block 2
+ (edge-from entry (flags "FALLTHRU"))
+ (cnote 6 [bb 2] NOTE_INSN_BASIC_BLOCK)
+ (cinsn 8 (set (reg:DI <2>)
+ (lshiftrt:DI (reg:DI <0>)
+ (const_int 32)))
+ "../../src/gcc/testsuite/gcc.dg/asr_div1.c":14
+ (expr_list:REG_DEAD (reg:DI <0>)))
+ (cinsn 9 (set (reg:SI <1>)
+ (ashiftrt:SI (subreg:SI (reg:DI <2>) 0)
+ (const_int 3)))
+ "../../src/gcc/testsuite/gcc.dg/asr_div1.c":14
+ (expr_list:REG_DEAD (reg:DI <2>)))
+
+ ;; Extra insn, to avoid all of the above from being deleted by DCE
+ (insn 10 (use (reg/i:SI <1>)))
+
+ (edge-to exit (flags "FALLTHRU"))
+ ) ;; block 2
+ ) ;; insn-chain
+) ;; function
+}
+
+/* Verify that insns 8 and 9 get combined into a shift of 35 (0x23) */
+/* { dg-final { scan-rtl-dump "allowing combination of insns 8 and 9"
"combine" } } */
+/* { dg-final { scan-rtl-dump "modifying insn i3 9:
r\[0-9\]+:SI#0=r\[0-9\]+:DI>>0x23" "combine" } } */
diff --git a/gcc/testsuite/gcc.dg/rtl/aarch64/pr71779.c
b/gcc/testsuite/gcc.dg/rtl/aarch64/pr71779.c
new file mode 100644
index 0000000..9174abb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/rtl/aarch64/pr71779.c
@@ -0,0 +1,50 @@
+/* { dg-do compile { target aarch64-*-* } } */
+/* { dg-options "-fdump-rtl-cse1" } */
+
+/* Dump taken from comment 2 of PR 71779, of
+ "...the relevant memory access coming out of expand"
+ hand-edited to the compact dump format. */
+
+int __RTL (startwith ("cse1")) test (int n)
+{
+(function "fragment"
+ (param "n"
+ (DECL_RTL (reg/v:SI <1> [ n ]))
+ (DECL_RTL_INCOMING (reg:SI x0 [ n ]))
+ ) ;; param "n"
+ (insn-chain
+ (block 2
+ (edge-from entry (flags "FALLTHRU"))
+ (cnote 6 [bb 2] NOTE_INSN_BASIC_BLOCK)
+
+;; MEM[(struct isl_obj *)&obj1] = &isl_obj_map_vtable;
+(insn 1045 (set (reg:SI <480>)
+ (high:SI (symbol_ref:SI ("isl_obj_map_vtable")
+ [flags 0xc0]
+ <var_decl 0x7fa0363ea240 isl_obj_map_vtable>)))
+ "y.c":12702)
+(insn 1046 (set (reg/f:SI <479>)
+ (lo_sum:SI (reg:SI <480>)
+ (symbol_ref:SI ("isl_obj_map_vtable")
+ [flags 0xc0]
+ <var_decl 0x7fa0363ea240 isl_obj_map_vtable>)))
+ "y.c":12702
+ (expr_list:REG_EQUAL (symbol_ref:SI ("isl_obj_map_vtable")
+ [flags 0xc0]
+ <var_decl 0x7fa0363ea240 isl_obj_map_vtable>)))
+(insn 1047 (set (reg:DI <481>)
+ (subreg:DI (reg/f:SI <479>) 0)) "y.c":12702)
+(insn 1048 (set (zero_extract:DI (reg/v:DI <191> [ obj1D.17368 ])
+ (const_int 32)
+ (const_int 0))
+ (reg:DI <481>)) "y.c":12702)
+;; Extra insn, to avoid all of the above from being deleted by DCE
+(insn 1049 (set (mem:DI (reg:DI <191>) [1 i+0 S4 A32])
+ (const_int 1)))
+ (edge-to exit (flags "FALLTHRU"))
+ ) ;; block 2
+ ) ;; insn-chain
+) ;; function
+}
+
+/* TODO: scan the dump. */
--
1.8.5.3