[Bug target/106770] powerpc64le: Unnecessary xxpermdi before mfvsrd

2023-03-02 Thread jskumari at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106770 --- Comment #12 from Surya Kumari Jangala --- (In reply to Jens Seifert from comment #6) > The left part of VSX registers overlaps with floating point registers, that > is why no register xxpermdi is required and mfvsrd can access all (left) >

[Bug target/106770] powerpc64le: Unnecessary xxpermdi before mfvsrd

2023-03-02 Thread segher at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106770 --- Comment #11 from Segher Boessenkool --- (In reply to Jens Seifert from comment #6) > The left part of VSX registers overlaps with floating point registers, that > is why no register xxpermdi is required and mfvsrd can access all (left) >

[Bug target/106770] powerpc64le: Unnecessary xxpermdi before mfvsrd

2023-03-02 Thread jskumari at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106770 --- Comment #10 from Surya Kumari Jangala --- The swap pass analyzes vector computations and removes unnecessary doubleword swaps (xxswapdi instructions). The swap pass first constructs webs and removes swap instructions if possible. If the web

[Bug target/106770] powerpc64le: Unnecessary xxpermdi before mfvsrd

2023-03-01 Thread jskumari at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106770 --- Comment #9 from Surya Kumari Jangala --- RTL after dfinit pass for the vec_sub() and the vec_extract(): (insn 13 12 14 2 (set (reg:V2DI 132 [ vrD.3952 ]) (minus:V2DI (subreg:V2DI (reg:V2DF 117 [ _1 ]) 0) (subreg:V2DI

[Bug target/106770] powerpc64le: Unnecessary xxpermdi before mfvsrd

2023-03-01 Thread jskumari at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106770 --- Comment #8 from Surya Kumari Jangala --- While the first two xxpermdi's are fine, the 3rd one is a bug. It is incorrect. Here is the C code inlined into assembly: _Z4cmp2dd: .LFB1: .cfi_startproc // vector double va =