• Cherry Zhang's avatar
    cmd/compile: fix MIPS SGTconst-with-shift rules · 6a64efc2
    Cherry Zhang authored
    (SGTconst [c] (SRLconst _ [d])) && 0 <= int32(c) && uint32(d) <= 31 && 1<<(32-uint32(d)) <= int32(c) -> (MOVWconst [1])
    
    This rule is problematic. 1<<(32-uint32(d)) <= int32(c) meant to
    say that it is true if c is greater than the largest possible
    value of the right shift. But when d==1, 1<<(32-1) is negative
    and results in the wrong comparison.
    
    Rewrite the rules in a more direct way.
    
    Fixes #29402.
    
    Change-Id: I5940fc9538d9bc3a4bcae8aa34672867540dc60e
    Reviewed-on: https://go-review.googlesource.com/c/155798
    Run-TryBot: Cherry Zhang <cherryyz@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    6a64efc2
rewriteMIPS64.go 234 KB