• Michael Munday's avatar
    cmd/compile: generate constants for NeqPtr, EqPtr and IsNonNil ops · 58cdecb9
    Michael Munday authored
    If both inputs are constant offsets from the same pointer then we
    can evaluate NeqPtr and EqPtr at compile time. Triggers a few times
    during all.bash. Removes a conditional branch in the following
    code:
    
    copy(x[1:], x[:])
    
    This branch was recently added as an optimization in CL 94596. We
    now skip the memmove if the pointers are equal. However, in the
    above code we know at compile time that they are never equal.
    
    Also, when the offset is variable, check if the offset is zero
    rather than if the pointers are equal. For example:
    
    copy(x[a:], x[:])
    
    This would now skip the copy if a == 0, rather than if x + a == x.
    
    Finally I've also added a rule to make IsNonNil true for pointers
    to values on the stack. The nil check elimination pass will catch
    these anyway, but eliminating them here might eliminate branches
    earlier.
    
    Change-Id: If72f436fef0a96ad0f4e296d3a1f8b6c3e712085
    Reviewed-on: https://go-review.googlesource.com/106635
    Run-TryBot: Michael Munday <mike.munday@ibm.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    58cdecb9
Name
Last commit
Last update
..
README Loading commit data...
arithmetic.go Loading commit data...
bitfield.go Loading commit data...
bits.go Loading commit data...
comparisons.go Loading commit data...
condmove.go Loading commit data...
copy.go Loading commit data...
floats.go Loading commit data...
issue22703.go Loading commit data...
mapaccess.go Loading commit data...
maps.go Loading commit data...
math.go Loading commit data...
mathbits.go Loading commit data...
memcombine.go Loading commit data...
rotate.go Loading commit data...
stack.go Loading commit data...
structs.go Loading commit data...