aboutsummaryrefslogtreecommitdiffstats
path: root/prog/clone.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-03-20 15:07:42 +0100
committerAleksandr Nogikh <nogikh@google.com>2024-03-20 14:50:51 +0000
commit6753db5cdc04330ec9d1a5116b890c19481d69b3 (patch)
tree040473e4831ebe962743fe9f88fc0b3b2c218f4d /prog/clone.go
parent5b7d42ae0076f983317dceae96a942ea9d07c29c (diff)
prog: optimize resourceCentric()
In practice, we need to try out many different corpus programs before we may find a matching resource. It's very inefficient to Clone() each of them. This change gives a +76% speed improvement in the BenchmarkMutate() test.
Diffstat (limited to 'prog/clone.go')
-rw-r--r--prog/clone.go5
1 files changed, 4 insertions, 1 deletions
diff --git a/prog/clone.go b/prog/clone.go
index 4523be0eb..6ec28e39e 100644
--- a/prog/clone.go
+++ b/prog/clone.go
@@ -8,7 +8,10 @@ import (
)
func (p *Prog) Clone() *Prog {
- newargs := make(map[*ResultArg]*ResultArg)
+ return p.cloneWithMap(make(map[*ResultArg]*ResultArg))
+}
+
+func (p *Prog) cloneWithMap(newargs map[*ResultArg]*ResultArg) *Prog {
p1 := &Prog{
Target: p.Target,
Calls: cloneCalls(p.Calls, newargs),