[Bug target/27971] eliminate shift in array[(x>>2)&3]

pinskia at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Fri Jun 9 06:20:00 GMT 2006



------- Comment #1 from pinskia at gcc dot gnu dot org  2006-06-09 06:18 -------
This works correctly on powerpc.  The rtl we get on x86_64 is:
(insn 10 7 11 2 (parallel [
            (set (reg:DI 61)
                (lshiftrt:DI (reg/v:DI 59 [ x ])
                    (const_int 2 [0x2])))
            (clobber (reg:CC 17 flags))
        ]) 456 {*lshrdi3_1_rex64} (insn_list:REG_DEP_TRUE 6 (nil))
    (expr_list:REG_DEAD (reg/v:DI 59 [ x ])
        (expr_list:REG_UNUSED (reg:CC 17 flags)
            (nil))))

(insn 11 10 13 2 (parallel [
            (set (reg:DI 62)
                (and:DI (reg:DI 61)
                    (const_int 3 [0x3])))
            (clobber (reg:CC 17 flags))
        ]) 297 {*anddi_1_rex64} (insn_list:REG_DEP_TRUE 10 (nil))
    (expr_list:REG_DEAD (reg:DI 61)
        (expr_list:REG_UNUSED (reg:CC 17 flags)
            (nil))))

(insn 13 11 17 2 (set (reg:SI 64)
        (mem/s:SI (plus:DI (mult:DI (reg:DI 62)
                    (const_int 4 [0x4]))
                (symbol_ref:DI ("array") <var_decl 0x2aaaaaf4bbb0 array>)) [3
array S4 A32])) 40 {*movsi_1} (insn_list:REG_DEP_TRUE 11 (nil))
    (expr_list:REG_DEAD (reg:DI 62)
        (nil)))

so I wonder if the something is not being reduced correctly.


-- 

pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
          Component|pending                     |target
     Ever Confirmed|0                           |1
   GCC host triplet|x86_64-linux-gnu            |
   Last reconfirmed|0000-00-00 00:00:00         |2006-06-09 06:18:37
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27971



More information about the Gcc-bugs mailing list