https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81924
--- Comment #8 from Bill Schmidt <wschmidt at gcc dot gnu.org> ---
Matthias, the following appears to fix this problem for gcc-5-branch.
Obviously the branch is closed to further development, but if you want to
consider carrying this patch, let me know and I will give it a full regstrap
test.
With the patch, we subreg the V1TImode as a V2DImode so that the RTL is
legitimate:
(insn 19 18 4 2 (set (subreg:V2DI (reg:V1TI 161 [ D.2389 ]) 0)
(vec_select:V2DI (reg:V2DI 174 [ D.2389 ])
(parallel [
(const_int 1 [0x1])
(const_int 0 [0])
]))) 956 {*vsx_xxpermdi2_le_v2di}
(nil))
Here's the simple patch:
(insn 19 18 4 2 (set (subreg:V2DI (reg:V1TI 161 [ D.2389 ]) 0)
(vec_select:V2DI (reg:V2DI 174 [ D.2389 ])
(parallel [
(const_int 1 [0x1])
(const_int 0 [0])
]))) 956 {*vsx_xxpermdi2_le_v2di}
(nil))
Again, this needs full testing before I would recommend using it.
Suggest we close this bug as there will be no upstream resolution for GCC 5.