On sh (and other targets with no variable shift):

    typedef unsigned long long ull;
    ull foo (ull x, int y) { return x << y; }

is implemented using several calls to the SImode shift
routines, rather than one call to the DImode routine.
A similar problem affects constant shifts if the target
does not have a direct implementation.

3.4 did not have this problem; it's a 4.x regression
introduced by my 2004-09-04 patch.


-- 
           Summary: [4.0/4.1/4.2 Regression] Doubleword shifts implemented
                    using word_mode libcalls
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: normal
          Priority: P3
         Component: middle-end
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: rsandifo at gcc dot gnu dot org
GCC target triplet: sh-elf


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

Reply via email to