tools/go/analysis
Russ Cox d81a07b7e5 go/analysis/passes/bools: eliminate quadratic runtime, output
If you have x == 1 || x == 2 || x == 3 || x == 4, the pass considered the set

	{x==1, x==2, x==3, x==4}

and then also

	{x==2, x==3, x==4}
	{x==3, x==4}

Since the comparison is itself linear in the size of the set, this was overall
taking time quadratic in the length of the || or && sequence.
Worse, if it found duplicates, they'd be reported a quadratic number of times.

This CL cuts the time and output to linear by avoiding already-checked
subexpressions. This cuts the time spent analyzing cmd/compile/internal/ssa
(with all passes enabled, not just this one) by 20%.

Fixes golang/go#28086.

Change-Id: I812f64bd5a44fea995c9ab0c4fa2fbefb44037ce
Reviewed-on: https://go-review.googlesource.com/c/tools/+/176457
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
2019-05-13 18:47:35 +00:00
..
analysistest go/analysis/analysistest: fix word usage 2019-05-09 01:47:25 +00:00
cmd/vet go/analysis/passes: fix bugs discovered in std 2019-05-09 15:32:22 +00:00
internal cmd/vet: print help to stdout only 2019-05-10 14:40:52 +00:00
multichecker go/analysis/unitchecker: a main function for vet-lite tools 2018-11-15 16:00:22 +00:00
passes go/analysis/passes/bools: eliminate quadratic runtime, output 2019-05-13 18:47:35 +00:00
singlechecker go/analysis/singlechecker: use Stderr in flag.Usage 2019-02-14 16:35:53 +00:00
unitchecker go/analysis/unitchecker: allow dash in file paths 2019-03-30 18:03:04 +00:00
analysis.go go/analysis: proposed fact enumeration API 2019-05-03 03:01:57 +00:00
doc.go go/analysis: fix typos and update documentation 2019-01-11 18:03:38 +00:00
validate.go go/analysis: validate: report duplicates among analyzers (roots) 2018-10-11 19:55:00 +00:00