Rev 252 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
252 | holmgren | 1 | From: Henrik Grubbström <grubba@grubba.org> |
2 | Date: Thu, 29 Sep 2016 17:25:06 +0200 |
||
3 | Subject: [PATCH] Compiler [optimizer]: Disabled some broken peep rules. |
||
4 | Bug-Debian: https://bugs.debian.org/836673 |
||
5 | Forwarded: yes |
||
6 | Origin: http://pike-librarian.lysator.liu.se/index.xml?checkins=e0fcf06129c03fb51d6da6b13200232a15df7e0d |
||
7 | |||
8 | These peep hole optimizer rules weren't protected against |
||
9 | negation overflow. |
||
10 | |||
11 | Disabled since INT32_NEG_OVERFLOW() doesn't exist in Pike 7.8. |
||
12 | |||
13 | Cf Pike 7.9.5 and later commit c63deca838788875b37d48a4faa044b5d6cafa0b. |
||
14 | |||
15 | Thanks to Magnus Holmgren for the report. |
||
16 | |||
17 | Potential fix for [LysLysKOM 21868180] (infinite optimizer loop). |
||
18 | --- |
||
19 | src/peep.in | 8 ++++---- |
||
20 | 1 file changed, 4 insertions(+), 4 deletions(-) |
||
21 | |||
22 | diff --git a/src/peep.in b/src/peep.in |
||
23 | index f32f7cd..9279d77 100644 |
||
24 | --- a/src/peep.in |
||
25 | +++ b/src/peep.in |
||
26 | @@ -36,8 +36,8 @@ CONST1 NEGATE : CONST_1 |
||
27 | CONST_1 NEGATE : CONST1 |
||
28 | NUMBER NEGATE : NEG_NUMBER($1a) |
||
29 | NEG_NUMBER NEGATE : NUMBER ($1a) |
||
30 | -NUMBER [(-$1a) > 0] : NEG_NUMBER (-$1a) |
||
31 | -NEG_NUMBER [(-$1a) >= 0] : NUMBER (-$1a) |
||
32 | +// NUMBER [(-$1a) > 0] : NEG_NUMBER (-$1a) |
||
33 | +// NEG_NUMBER [(-$1a) >= 0] : NUMBER (-$1a) |
||
34 | NEGATE NEGATE : |
||
35 | COMPL COMPL : |
||
36 | NEGATE CONST_1 ADD_INTS : COMPL |
||
37 | @@ -238,8 +238,8 @@ CONST_1 INDEX: NEG_INT_INDEX (1) |
||
38 | CONST1 INDEX: POS_INT_INDEX (1) |
||
39 | NUMBER INDEX: POS_INT_INDEX ($1a) |
||
40 | NEG_NUMBER INDEX: NEG_INT_INDEX ($1a) |
||
41 | -POS_INT_INDEX [$1a < 0]: NEG_INT_INDEX (-$1a) |
||
42 | -NEG_INT_INDEX [-$1a >= 0]: POS_INT_INDEX (-$1a) |
||
43 | +// POS_INT_INDEX [$1a < 0]: NEG_INT_INDEX (-$1a) |
||
44 | +// NEG_INT_INDEX [-$1a >= 0]: POS_INT_INDEX (-$1a) |
||
45 | |||
46 | BRANCH_WHEN_ZERO BRANCH LABEL ($1a): BRANCH_WHEN_NON_ZERO($2a) LABEL($1a) |
||
47 | BRANCH_WHEN_NON_ZERO BRANCH LABEL ($1a): BRANCH_WHEN_ZERO($2a) LABEL($1a) |
||
255 | holmgren | 48 | --- a/src/peep_engine.c 2014-05-01 08:28:45.000000000 +0200 |
49 | +++ b/src/peep_engine.c 2016-09-29 23:43:05.238716680 +0200 |
||
50 | @@ -4586,15 +4586,6 @@ |
||
51 | } |
||
52 | break; |
||
53 | |||
54 | - case F_NEG_INT_INDEX: |
||
55 | - /* NEG_INT_INDEX [-$1a >= 0]: POS_INT_INDEX (-$1a) */ |
||
56 | - if(-argument(0) >= 0) |
||
57 | - { |
||
58 | - do_optimization(1, 1, 2, F_POS_INT_INDEX, -argument(0), 0); |
||
59 | - return 1; |
||
60 | - } |
||
61 | - break; |
||
62 | - |
||
63 | case F_NEG_NUMBER: |
||
64 | /* NEG_NUMBER(1) : CONST_1 */ |
||
65 | if((1)==argument(0)) |
||
66 | @@ -4602,12 +4593,6 @@ |
||
67 | do_optimization(1, 1, 1, F_CONST_1, 0); |
||
68 | return 1; |
||
69 | } |
||
70 | - /* NEG_NUMBER [(-$1a) >= 0] : NUMBER (-$1a) */ |
||
71 | - if((-argument(0)) >= 0) |
||
72 | - { |
||
73 | - do_optimization(1, 1, 2, F_NUMBER, -argument(0), 0); |
||
74 | - return 1; |
||
75 | - } |
||
76 | break; |
||
77 | |||
78 | case F_NOP: |
||
79 | @@ -4652,12 +4637,6 @@ |
||
80 | do_optimization(1, 1, 1, F_BIGNUM, 0); |
||
81 | return 1; |
||
82 | } |
||
83 | - /* NUMBER [(-$1a) > 0] : NEG_NUMBER (-$1a) */ |
||
84 | - if((-argument(0)) > 0) |
||
85 | - { |
||
86 | - do_optimization(1, 1, 2, F_NEG_NUMBER, -argument(0), 0); |
||
87 | - return 1; |
||
88 | - } |
||
89 | break; |
||
90 | |||
91 | case F_POP_N_ELEMS: |
||
92 | @@ -4665,15 +4644,6 @@ |
||
93 | return 1; |
||
94 | break; |
||
95 | |||
96 | - case F_POS_INT_INDEX: |
||
97 | - /* POS_INT_INDEX [$1a < 0]: NEG_INT_INDEX (-$1a) */ |
||
98 | - if(argument(0) < 0) |
||
99 | - { |
||
100 | - do_optimization(1, 1, 2, F_NEG_INT_INDEX, -argument(0), 0); |
||
101 | - return 1; |
||
102 | - } |
||
103 | - break; |
||
104 | - |
||
105 | } |
||
106 | return 0; |
||
107 | } |