• Daniel Martí's avatar
    cmd/compile: reduce rulegen's for loop verbosity · 0fbf6818
    Daniel Martí authored
    A lot of the naked for loops begin like:
    
    	for {
    		v := b.Control
    		if v.Op != OpConstBool {
    			break
    		}
    		...
    		return true
    	}
    
    Instead, write them out in a more compact and readable way:
    
    	for v.Op == OpConstBool {
    		...
    		return true
    	}
    
    This requires the addition of two bytes.Buffer writers, as this helps us
    make a decision based on future pieces of generated code. This probably
    makes rulegen slightly slower, but that's not noticeable; the code
    generation still takes ~3.5s on my laptop, excluding build time.
    
    The "v := b.Control" declaration can be moved to the top of each
    function. Even though the rules can modify b.Control when firing, they
    also make the function return, so v can't be used again.
    
    While at it, remove three unnecessary lines from the top of each
    rewriteBlock func.
    
    In total, this results in ~4k lines removed from the generated code, and
    a slight improvement in readability.
    
    Change-Id: I317e4c6a4842c64df506f4513375475fad2aeec5
    Reviewed-on: https://go-review.googlesource.com/c/go/+/167399
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarKeith Randall <khr@golang.org>
    0fbf6818
rewriteARM64.go 862 KB