From 6753db5cdc04330ec9d1a5116b890c19481d69b3 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Wed, 20 Mar 2024 15:07:42 +0100 Subject: 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. --- prog/clone.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'prog/clone.go') 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), -- cgit mrf-deployment