cmd/compile: lay out exit blocks last
cmd/compile: lay out exit blocks last

In Go 1.8.x, panics are generally scheduled at the very end of functions.
That property was lost in Go 1.9; this CL restores it.

This helps with the Fannkuch benchmark:

name          old time/op  new time/op  delta
Fannkuch11-8   2.74s ± 2%   2.55s ± 2%  -7.03%  (p=0.000 n=20+20)

This increases the fannkuch function size from 801 bytes to 831 bytes,
but that is still smaller than Go 1.8.1 at 844 bytes.

It generally increases binary size a tiny amount.
Negligible compiler performance impact.

For the code in #14758:

name   old time/op    new time/op    delta
Foo-8     326ns ± 3%     312ns ± 3%  -4.32%  (p=0.000 n=28+30)
Bar-8     560ns ± 2%     565ns ± 2%  +0.96%  (p=0.002 n=30+27)

Updates #18977

name        old alloc/op      new alloc/op      delta
Template         38.8MB ± 0%       38.8MB ± 0%    ~     (p=0.690 n=5+5)
Unicode          28.7MB ± 0%       28.7MB ± 0%    ~     (p=0.841 n=5+5)
GoTypes           109MB ± 0%        109MB ± 0%    ~     (p=0.690 n=5+5)
Compiler          457MB ± 0%        457MB ± 0%    ~     (p=0.841 n=5+5)
SSA              1.10GB ± 0%       1.10GB ± 0%  +0.03%  (p=0.032 n=5+5)
Flate            24.4MB ± 0%       24.5MB ± 0%    ~     (p=0.690 n=5+5)
GoParser         30.9MB ± 0%       30.9MB ± 0%    ~     (p=0.421 n=5+5)
Reflect          73.3MB ± 0%       73.3MB ± 0%    ~     (p=1.000 n=5+5)
Tar              25.5MB ± 0%       25.5MB ± 0%    ~     (p=0.095 n=5+5)
XML              40.8MB ± 0%       40.9MB ± 0%    ~     (p=0.056 n=5+5)
[Geo mean]       71.6MB            71.6MB       +0.01%

name        old allocs/op     new allocs/op     delta
Template           395k ± 0%         394k ± 1%    ~     (p=1.000 n=5+5)
Unicode            344k ± 0%         344k ± 0%    ~     (p=0.690 n=5+5)
GoTypes           1.16M ± 0%        1.16M ± 0%    ~     (p=0.421 n=5+5)
Compiler          4.41M ± 0%        4.41M ± 0%    ~     (p=0.841 n=5+5)
SSA               9.79M ± 0%        9.79M ± 0%    ~     (p=0.310 n=5+5)
Flate              237k ± 0%         237k ± 0%    ~     (p=0.841 n=5+5)
GoParser           321k ± 0%         321k ± 1%    ~     (p=0.421 n=5+5)
Reflect            956k ± 0%         956k ± 0%    ~     (p=1.000 n=5+5)
Tar                251k ± 1%         252k ± 0%    ~     (p=0.095 n=5+5)
XML                399k ± 0%         400k ± 0%    ~     (p=0.222 n=5+5)
[Geo mean]         741k              741k       +0.03%

name        old object-bytes  new object-bytes  delta
Template           386k ± 0%         386k ± 0%  +0.05%  (p=0.008 n=5+5)
Unicode            202k ± 0%         202k ± 0%  +0.02%  (p=0.008 n=5+5)
GoTypes           1.16M ± 0%        1.16M ± 0%  +0.07%  (p=0.008 n=5+5)
Compiler          3.91M ± 0%        3.91M ± 0%  +0.05%  (p=0.008 n=5+5)
SSA               7.86M ± 0%        7.87M ± 0%  +0.07%  (p=0.008 n=5+5)
Flate              227k ± 0%         227k ± 0%  +0.10%  (p=0.008 n=5+5)
GoParser           283k ± 0%         283k ± 0%  +0.04%  (p=0.008 n=5+5)
Reflect            950k ± 0%         951k ± 0%  +0.04%  (p=0.008 n=5+5)
Tar                187k ± 0%         187k ± 0%  -0.03%  (p=0.008 n=5+5)
XML                406k ± 0%         406k ± 0%  +0.04%  (p=0.008 n=5+5)
[Geo mean]         647k              647k       +0.04%

Change-Id: I2015aa26338b90cf41e47f89564e336dc02608df
Reviewed-on: https://go-review.googlesource.com/43293
Reviewed-by: Keith Randall <8c99c3a9284e493be632950b84cd789d08ed3e9d@golang.org>

josharian/go,akutz/go,ImJasonH/go,vsekhar/elastic-go,polyverse-security/go,vsekhar/elastic-go,CAFxX/go,codestation/go,ImJasonH/go,golang/go,derekmarcotte/go,CAFxX/go,CAFxX/go,nawawi/go,cloudflare/go,polyverse-security/go,CAFxX/go,josharian/go,akutz/go,cloudflare/go,Cofyc/go,CAFxX/go,golang/go,CAFxX/go,vsekhar/elastic-go,Cofyc/go,golang/go,ImJasonH/go,codestation/go,golang/go,codestation/go,akutz/go,polyverse-security/go,derekmarcotte/go,cloudflare/go,ImJasonH/go,josharian/go,codestation/go,josharian/go,nawawi/go,codestation/go,derekmarcotte/go,nawawi/go,Cofyc/go,CAFxX/go,cloudflare/go,vsekhar/elastic-go,akutz/go,polyverse-security/go,derekmarcotte/go,vsekhar/elastic-go,ImJasonH/go,golang/go,ImJasonH/go,nawawi/go,nawawi/go,akutz/go,josharian/go,nawawi/go,Cofyc/go,cloudflare/go,derekmarcotte/go,cloudflare/go,cloudflare/go,nawawi/go,polyverse-security/go,polyverse-security/go,Cofyc/go,vsekhar/elastic-go,golang/go,polyverse-security/go,akutz/go,polyverse-security/go,josharian/go,derekmarcotte/go,Cofyc/go,codestation/go,golang/go,josharian/go,golang/go,codestation/go,CAFxX/go,vsekhar/elastic-go,nawawi/go,Cofyc/go,cloudflare/go,derekmarcotte/go,codestation/go,akutz/go,ImJasonH/go,vsekhar/elastic-go,akutz/go,ImJasonH/go,christopher-henderson/Go,Cofyc/go,derekmarcotte/go,josharian/go