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

--- Comment #9 from Surya Kumari Jangala <jskumari at gcc dot gnu.org> ---
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 (reg:V2DF 118 [ _2 ]) 0))) "cpm2.c":9:29 1689
{subv2di3}
     (nil))
(insn 14 13 15 2 (set (reg:DI 133)
        (vec_select:DI (reg:V2DI 132 [ vrD.3952 ])
            (parallel [
                    (const_int 1 [0x1])
                ]))) "cpm2.c":11:12 1371 {*vsx_extract_v2di_0}
     (nil))
(insn 15 14 16 2 (set (reg:DI 119 [ _3 ])
        (reg:DI 133)) "cpm2.c":11:12 679 {*movdi_internal64}
     (nil))
(insn 16 15 17 2 (set (reg:SI 134)
        (subreg:SI (reg:DI 119 [ _3 ]) 0)) "cpm2.c":11:12 discrim 1 555
{*movsi_internal1}
     (nil))
(insn 17 16 18 2 (set (reg:DI 135)
        (sign_extend:DI (reg:SI 134))) "cpm2.c":11:12 discrim 1 31
{extendsidi2}
     (nil))
(insn 18 17 22 2 (set (reg:DI 127 [ <retval> ])
        (reg:DI 135)) "cpm2.c":11:12 discrim 1 679 {*movdi_internal64}
     (nil))
(insn 22 18 23 2 (set (reg/i:DI 3 3)
        (reg:DI 127 [ <retval> ])) "cpm2.c":12:1 679 {*movdi_internal64}
     (nil))
(insn 23 22 0 2 (use (reg/i:DI 3 3)) "cpm2.c":12:1 -1
     (nil))

----------

RTL after swaps pass:

(insn 13 12 14 2 (set (reg:V2DI 132 [ vrD.3952 ])
        (minus:V2DI (subreg:V2DI (reg:V2DF 117 [ _1 ]) 0)
            (subreg:V2DI (reg:V2DF 118 [ _2 ]) 0))) "cpm2.c":9:29 1689
{subv2di3}
     (nil))
(insn 14 13 15 2 (set (reg:DI 133)
        (vec_select:DI (reg:V2DI 132 [ vrD.3952 ])
            (parallel [
                    (const_int 0 [0])
                ]))) "cpm2.c":11:12 -1
     (nil))

----------

'swaps' pass occurs after 'dfinit' pass.
After dfinit pass, we are extracting the correct element (1st element). See the
vec_select in insn 14. But after 'swaps' pass, the element being extracted
changes to 0.

Reply via email to