On 06/08/2016 12:21 PM, Andreas Schwab wrote:
> Jan Hubicka <[email protected]> writes:
>
>> Bootstrapped/regtested x86_64-linux, will commit it later today.
>
> FAIL: gcc.dg/tree-ssa/slsr-8.c scan-tree-dump-times optimized " w?\\\\* " 7
>
> Andreas.
>
Hi.
It's caused by a different probabilities for BB 2:
@@ -11,11 +11,11 @@
;; 3 succs { 4 }
;; 4 succs { 1 }
Predictions for bb 2
- DS theory heuristics: 78.4%
- first match heuristics (ignored): 85.0%
- combined heuristics: 78.4%
- pointer (on trees) heuristics: 85.0%
- early return (on trees) heuristics: 39.0%
+ DS theory heuristics: 66.5%
+ first match heuristics (ignored): 70.0%
+ combined heuristics: 66.5%
+ pointer (on trees) heuristics: 70.0%
+ early return (on trees) heuristics: 46.0%
Which leads to a different decision made by tree-ssa-sink:
+++ /tmp/sl-new/slsr-8.c.127t.sink 2016-06-08 14:07:59.747958332 +0200
@@ -21,6 +21,16 @@
from bb 2 to bb 3
Sinking a3_17 = s_11(D) * 6;
from bb 2 to bb 3
+Sinking x2_16 = c_13(D) + _6;
+ from bb 2 to bb 5
+Sinking _6 = -_5;
+ from bb 2 to bb 5
+Sinking _5 = _4 * 4;
+ from bb 2 to bb 5
+Sinking _4 = (long unsigned int) a2_15;
+ from bb 2 to bb 5
+Sinking a2_15 = s_11(D) * 4;
+ from bb 2 to bb 5
f (int s, int * c)
{
int * x3;
@@ -46,17 +56,17 @@
_2 = _1 * 4;
_3 = -_2;
x1_14 = c_13(D) + _3;
- a2_15 = s_11(D) * 4;
- _4 = (long unsigned int) a2_15;
- _5 = _4 * 4;
- _6 = -_5;
- x2_16 = c_13(D) + _6;
if (x1_14 != 0B)
goto <bb 5>;
else
goto <bb 3>;
<bb 5>:
+ a2_15 = s_11(D) * 4;
+ _4 = (long unsigned int) a2_15;
+ _5 = _4 * 4;
+ _6 = -_5;
+ x2_16 = c_13(D) + _6;
goto <bb 4>;
<bb 3>:
That eventually leads to 9 occurrences of the scanned pattern. However, I'm not
sure if the test-case makes
sense any longer?
Thanks,
Martin
;; Function f (f, funcdef_no=0, decl_uid=1747, cgraph_uid=0, symbol_order=0)
;; 1 loops found
;;
;; Loop 0
;; header 0, latch 1
;; depth 0, outer -1
;; nodes: 0 1 2 5 3 4
;; 2 succs { 5 3 }
;; 5 succs { 4 }
;; 3 succs { 4 }
;; 4 succs { 1 }
Sinking x3_18 = c_13(D) + _9;
from bb 2 to bb 3
Sinking _9 = -_8;
from bb 2 to bb 3
Sinking _8 = _7 * 4;
from bb 2 to bb 3
Sinking _7 = (long unsigned int) a3_17;
from bb 2 to bb 3
Sinking a3_17 = s_11(D) * 6;
from bb 2 to bb 3
Sinking x2_16 = c_13(D) + _6;
from bb 2 to bb 5
Sinking _6 = -_5;
from bb 2 to bb 5
Sinking _5 = _4 * 4;
from bb 2 to bb 5
Sinking _4 = (long unsigned int) a2_15;
from bb 2 to bb 5
Sinking a2_15 = s_11(D) * 4;
from bb 2 to bb 5
f (int s, int * c)
{
int * x3;
int * x2;
int * x1;
int a3;
int a2;
int a1;
long unsigned int _1;
long unsigned int _2;
sizetype _3;
long unsigned int _4;
long unsigned int _5;
sizetype _6;
long unsigned int _7;
long unsigned int _8;
sizetype _9;
int * iftmp.0_10;
<bb 2>:
a1_12 = s_11(D) * 2;
_1 = (long unsigned int) a1_12;
_2 = _1 * 4;
_3 = -_2;
x1_14 = c_13(D) + _3;
if (x1_14 != 0B)
goto <bb 5>;
else
goto <bb 3>;
<bb 5>:
a2_15 = s_11(D) * 4;
_4 = (long unsigned int) a2_15;
_5 = _4 * 4;
_6 = -_5;
x2_16 = c_13(D) + _6;
goto <bb 4>;
<bb 3>:
a3_17 = s_11(D) * 6;
_7 = (long unsigned int) a3_17;
_8 = _7 * 4;
_9 = -_8;
x3_18 = c_13(D) + _9;
<bb 4>:
# iftmp.0_10 = PHI <x2_16(5), x3_18(3)>
return iftmp.0_10;
}