From 44e20b64ef7fd27d8ff0950e92b6a9ce4b881482 Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Tue, 9 Jan 2018 14:45:30 -0500 Subject: [PATCH] cmd/compile: more String methods for prove types These aid in debugging. Change-Id: Ieb38c996765f780f6103f8c3292639d408c25123 Reviewed-on: https://go-review.googlesource.com/87476 Run-TryBot: Austin Clements TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick Reviewed-by: Keith Randall --- src/cmd/compile/fmt_test.go | 1 + src/cmd/compile/internal/ssa/prove.go | 36 +++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/cmd/compile/fmt_test.go b/src/cmd/compile/fmt_test.go index 03e6e2ee4c..578a0bfb20 100644 --- a/src/cmd/compile/fmt_test.go +++ b/src/cmd/compile/fmt_test.go @@ -707,6 +707,7 @@ var knownFormats = map[string]string{ "uint %04x": "", "uint %5d": "", "uint %d": "", + "uint %x": "", "uint16 %d": "", "uint16 %v": "", "uint16 %x": "", diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index ecf0412377..448a92ae57 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -45,6 +45,18 @@ const ( gt ) +var relationStrings = [...]string{ + 0: "none", lt: "<", eq: "==", lt | eq: "<=", + gt: ">", gt | lt: "!=", gt | eq: ">=", gt | eq | lt: "any", +} + +func (r relation) String() string { + if r < relation(len(relationStrings)) { + return relationStrings[r] + } + return fmt.Sprintf("relation(%d)", uint(r)) +} + // domain represents the domain of a variable pair in which a set // of relations is known. For example, relations learned for unsigned // pairs cannot be transferred to signed pairs because the same bit @@ -58,6 +70,30 @@ const ( boolean ) +var domainStrings = [...]string{ + "signed", "unsigned", "pointer", "boolean", +} + +func (d domain) String() string { + s := "" + for i, ds := range domainStrings { + if d&(1<