On Thu, Jun 20, 2013 at 2:40 PM, Richard Smith <[email protected]> wrote: > On Thu, Jun 20, 2013 at 1:24 PM, Chandler Carruth <[email protected]> > wrote: >> On Thu, Jun 20, 2013 at 12:13 PM, Argyrios Kyrtzidis <[email protected]> >> wrote: >>> >>> On Jun 20, 2013, at 12:40 AM, Chandler Carruth <[email protected]> >>> wrote: >>> >>> >>> On Sat, Feb 25, 2012 at 1:38 PM, Argyrios Kyrtzidis <[email protected]> >>> wrote: >>>> >>>> Author: akirtzidis >>>> Date: Sat Feb 25 15:38:16 2012 >>>> New Revision: 151460 >>>> >>>> URL: http://llvm.org/viewvc/llvm-project?rev=151460&view=rev >>>> Log: >>>> When evaluating integer expressions handle logical operators outside >>>> VisitBinaryOperator() to reduce stack pressure for source with huge >>>> number >>>> of logical operators. >>>> >>>> Fixes rdar://10913206. >>>> >>>> Added: >>>> cfe/trunk/test/Sema/many-logical-ops.c >>> >>> >>> Argiris, this is the 4th slowest test at almost 20 seconds. It makes me >>> wonder if the slow part is parsing these logical op expressions or if there >>> is some other issue. >>> >>> >>> If you do >>> >>> $ clang -cc1 test/Sema/many-logical-ops.c >>> >>> all the time is spent in SequenceChecker. If I uncomment >>> "CheckUnsequencedOperations(E)" from Sema::CheckCompletedExpr() there is no >>> slow down (also why does this run all the time without checking if the >>> warning is enabled or not ?). >>> >>> CC'ing Richard. >> >> >> Thanks for the analysis! > > Looks like the problem is that we try to evaluate the LHS of an && to > determine if we want to inspect the RHS, and each evaluation recurses > all the way down the chain of &&s on *its* LHS before hitting a leaf > and finding that it's non-constant, making the complete process > quadratic.
Fixed in r184489. _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
