https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87064

--- Comment #14 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
And, if I disable that define_insn_and_split altogether (add 0 && to the
condition), the assembly change is:
--- reduction-3.s2      2019-01-18 18:19:42.184057246 +0100
+++ reduction-3.s4      2019-01-18 18:26:23.079506011 +0100
@@ -9,26 +9,16 @@ MAIN__._omp_fn.0:
        .cfi_startproc
        ld 10,0(3)
        lxvdsx 0,0,10
-       addi 9,1,-16
-       xxpermdi 0,0,0,2
-       stxvd2x 0,0,9
        ld 9,8(3)
        li 8,5
        mtctr 8
 .L2:
-       lxvd2x 0,0,9
-       addi 8,1,-16
-       lxvd2x 12,0,8
-       xxpermdi 12,12,12,2
-       xvmaxdp 0,12,0
-       xxpermdi 0,0,0,2
-       stxvd2x 0,0,8
-       xxpermdi 0,0,0,2
+       lxvd2x 12,0,9
+       xvmaxdp 0,0,12
        addi 9,9,16
        bdnz .L2
-        # vec_extract to same register
-       lfd 12,-16(1)
-       xsmaxdp 0,12,0
+       xxsldwi 12,0,0,2
+       xvmaxdp 0,12,0
        stfd 0,0(10)
        blr
        .long 0

which looks much better.  So, what is the reason for this
define_insn_and_split?  Is it useful for BYTES_BIG_ENDIAN only perhaps?

Reply via email to