]> gcc.gnu.org Git - gcc.git/commitdiff
This patch replaces shift and ior insns with one rotate and mask insn for the split...
authorHaochen Gui <guihaoc@gcc.gnu.org>
Thu, 9 Jun 2022 05:24:15 +0000 (13:24 +0800)
committerHaochen Gui <guihaoc@gcc.gnu.org>
Thu, 9 Jun 2022 05:31:09 +0000 (13:31 +0800)
gcc/
* config/rs6000/rs6000.md (define_split for bswapdi load): Merge shift
and ior insns to one rotate and mask insn.
(define_split for bswapdi register): Likewise.

gcc/testsuite/
* gcc.target/powerpc/pr93453-1.c: New.

gcc/config/rs6000/rs6000.md
gcc/testsuite/gcc.target/powerpc/pr93453-1.c [new file with mode: 0644]

index 3eca448a262208e47039e8d4dcd7469b0c7fe61c..1c125f07e8955d6d6c9dc281bb6f2b0b2aee10ef 100644 (file)
       emit_insn (gen_bswapsi2 (dest_32, word2));
     }
 
-  emit_insn (gen_ashldi3 (op3, op3, GEN_INT (32)));
-  emit_insn (gen_iordi3 (dest, dest, op3));
+  emit_insn (gen_rotldi3_insert_3 (dest, op3, GEN_INT (32), dest,
+                                  GEN_INT (0xffffffff)));
   DONE;
 })
 
   rtx op3_si  = simplify_gen_subreg (SImode, op3, DImode, lo_off);
 
   emit_insn (gen_lshrdi3 (op2, src, GEN_INT (32)));
-  emit_insn (gen_bswapsi2 (dest_si, src_si));
-  emit_insn (gen_bswapsi2 (op3_si, op2_si));
-  emit_insn (gen_ashldi3 (dest, dest, GEN_INT (32)));
-  emit_insn (gen_iordi3 (dest, dest, op3));
+  emit_insn (gen_bswapsi2 (op3_si, src_si));
+  emit_insn (gen_bswapsi2 (dest_si, op2_si));
+  emit_insn (gen_rotldi3_insert_3 (dest, op3, GEN_INT (32), dest,
+                                  GEN_INT (0xffffffff)));
   DONE;
 })
 
diff --git a/gcc/testsuite/gcc.target/powerpc/pr93453-1.c b/gcc/testsuite/gcc.target/powerpc/pr93453-1.c
new file mode 100644 (file)
index 0000000..b396458
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do compile { target has_arch_ppc64 } } */
+/* { dg-options "-mdejagnu-cpu=power6 -O2" } */
+
+unsigned long load_byte_reverse (unsigned long *in)
+{
+   return __builtin_bswap64 (*in);
+}
+
+unsigned long byte_reverse (unsigned long in)
+{
+   return __builtin_bswap64 (in);
+}
+
+/* { dg-final { scan-assembler-times {\mrldimi\M} 2 } } */
This page took 0.079973 seconds and 5 git commands to generate.