On Sun, May 11, 2014 at 8:10 PM, Andreas Schwab <sch...@linux-m68k.org> wrote: > Prathamesh Kulkarni <bilbotheelffri...@gmail.com> writes: > >> a) I am not able to follow why 3 slashes are required here >> in x_.\\\(D\\\) ? Why does x_.\(D\) not work ? > > Two of the three backslashes are eaten by the tcl parser. But actually > only two backslashes are needed, since the parens are not special to tcl > (but are special to the regexp engine, so you want a single backslash > surviving the tcl parser). > >> b) The expression after folding would be of the form: >> t2_<digit> = x_<digit>(D) - y_<digit>(D) >> I have used the operator "." in the pattern to match digit. >> While that works in the above case, I think a better >> idea would be to match using [0-9]. >> I tried the following but it does not work: >> t_[0-9] = x_[0-9]\\\(D\\\) - y_[0-9]\\\(D\\\) >> Neither does \\\[ and \\\] work. > > Brackets are special in tcl (including inside double quotes), so they > need to be quoted. But you want the brackets to appear unquoted to the > regexp engine, so a single backslash will do the Right Thing. > > See tcl(n) for the tcl parsing rules. > Thanks. Now I get it, the double backslash \\ is an escape sequence for \, and special characters like (, [ retain their meaning in quotes, so to match input text: (D), the pattern has to be written as: "\\(D\\)". I believe "\(D\)" would only match D in the input ? I have modified the test-case. Is this version correct ?
Thanks and Regards, Prathamesh > Andreas. > > -- > Andreas Schwab, sch...@linux-m68k.org > GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 > "And now for something completely different."
Index: gcc/testsuite/gcc.dg/tree-ssa/match-2.c =================================================================== --- gcc/testsuite/gcc.dg/tree-ssa/match-2.c (revision 0) +++ gcc/testsuite/gcc.dg/tree-ssa/match-2.c (working copy) @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-forwprop" } */ + +int foo(int x, int y) +{ + int t1, t2; + t1 = -y; + t2 = x + t1; + return t2; +} + +/* { dg-final { scan-tree-dump-times "t2_\[0-9\] = x_\[0-9\]\\(D\\) - y_\[0-9\]\\(D\\)" 1 "forwprop1" } } */ +/* { dg-final { cleanup-tree-dump "forwprop2" } } */