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