aboutsummaryrefslogtreecommitdiff
path: root/test/codegen/switch.go
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2022-04-14 13:14:18 -0700
committerKeith Randall <khr@google.com>2022-04-14 21:16:29 +0000
commitc4b2288755d07b9505ef498819bb540b7b0fa215 (patch)
tree11568a92e99de190fc85f9a53d5bef0cf329de6e /test/codegen/switch.go
parent3d8cb26504f9e3f5b45b4ea97b55714a25e016c1 (diff)
downloadgo-c4b2288755d07b9505ef498819bb540b7b0fa215.tar.xz
cmd/compile: add jump table codegen test
Change-Id: Ic67f676f5ebe146166a0d3c1d78a802881320e49 Reviewed-on: https://go-review.googlesource.com/c/go/+/400375 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Keith Randall <khr@google.com>
Diffstat (limited to 'test/codegen/switch.go')
-rw-r--r--test/codegen/switch.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/test/codegen/switch.go b/test/codegen/switch.go
index 2ac817d14c..a6566834a8 100644
--- a/test/codegen/switch.go
+++ b/test/codegen/switch.go
@@ -20,3 +20,53 @@ func f(x string) int {
return -3
}
}
+
+// use jump tables for 8+ int cases
+func square(x int) int {
+ // amd64:`JMP\s\(.*\)\(.*\)$`
+ switch x {
+ case 1:
+ return 1
+ case 2:
+ return 4
+ case 3:
+ return 9
+ case 4:
+ return 16
+ case 5:
+ return 25
+ case 6:
+ return 36
+ case 7:
+ return 49
+ case 8:
+ return 64
+ default:
+ return x * x
+ }
+}
+
+// use jump tables for 8+ string lengths
+func length(x string) int {
+ // amd64:`JMP\s\(.*\)\(.*\)$`
+ switch x {
+ case "a":
+ return 1
+ case "bb":
+ return 2
+ case "ccc":
+ return 3
+ case "dddd":
+ return 4
+ case "eeeee":
+ return 5
+ case "ffffff":
+ return 6
+ case "ggggggg":
+ return 7
+ case "hhhhhhhh":
+ return 8
+ default:
+ return len(x)
+ }
+}