FastMath test3

Time bar (total: 3.5s)

analyze0.0ms (0%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%99.9%0.1%0%0%0%0
100%99.9%0%0.1%0%0%0%1
Compiler

Compiled 15 to 10 computations (33.3% saved)

Precisions
Click to see histograms. Total time spent on operations: 0.0ms
ival-add: 0.0ms (0% of total)
ival-mult: 0.0ms (0% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

sample865.0ms (24.5%)

Results
566.0ms7769×0valid
54.0ms381×1valid
22.0ms106×2valid
Precisions
Click to see histograms. Total time spent on operations: 344.0ms
ival-mult: 236.0ms (68.5% of total)
ival-add: 85.0ms (24.7% of total)
backward-pass: 12.0ms (3.5% of total)
const: 11.0ms (3.2% of total)
Bogosity

preprocess75.0ms (2.1%)

Algorithm
egg-herbie
Rules
2740×sum3-define
1368×fnmadd-define
1236×sum4-define
1078×fma-define
1046×sum5-define
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
03798
113674
244966
3164865
4638065
5787565
099
1207
2476
3796
4946
5966
0966
Stop Event
iter limit
saturated
node limit
Calls
Call 1
Inputs
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
Outputs
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
Call 2
Inputs
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(+ (+ (* (neg d1) 3) (* (neg d1) d2)) (* (neg d1) d3))
(+ (+ (* d1 3) (* d1 (neg d2))) (* d1 d3))
(+ (+ (* d1 3) (* d1 d2)) (* d1 (neg d3)))
(neg (+ (+ (* (neg d1) 3) (* (neg d1) d2)) (* (neg d1) d3)))
(neg (+ (+ (* d1 3) (* d1 (neg d2))) (* d1 d3)))
(neg (+ (+ (* d1 3) (* d1 d2)) (* d1 (neg d3))))
(+ (+ (* d2 3) (* d2 d1)) (* d2 d3))
(+ (+ (* d3 3) (* d3 d2)) (* d3 d1))
(+ (+ (* d1 3) (* d1 d3)) (* d1 d2))
Outputs
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(* d1 (sum3 3 d2 d3))
(+ (+ (* (neg d1) 3) (* (neg d1) d2)) (* (neg d1) d3))
(* d1 (- -3 (+ d2 d3)))
(+ (+ (* d1 3) (* d1 (neg d2))) (* d1 d3))
(* d1 (+ 3 (- d3 d2)))
(+ (+ (* d1 3) (* d1 d2)) (* d1 (neg d3)))
(* d1 (+ d2 (- 3 d3)))
(neg (+ (+ (* (neg d1) 3) (* (neg d1) d2)) (* (neg d1) d3)))
(* d1 (sum3 3 d2 d3))
(neg (+ (+ (* d1 3) (* d1 (neg d2))) (* d1 d3)))
(* d1 (+ d2 (- -3 d3)))
(neg (+ (+ (* d1 3) (* d1 d2)) (* d1 (neg d3))))
(* d1 (+ d3 (- -3 d2)))
(+ (+ (* d2 3) (* d2 d1)) (* d2 d3))
(* d2 (sum3 d1 3 d3))
(+ (+ (* d3 3) (* d3 d2)) (* d3 d1))
(* d3 (sum3 d1 3 d2))
(+ (+ (* d1 3) (* d1 d3)) (* d1 d2))
(* d1 (sum3 3 d2 d3))
Symmetry

(negabs d1)

(sort d2 d3)

explain103.0ms (2.9%)

FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
20-0-(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
00-0-d3
00-0-d1
00-0-d2
00-0-(*.f64 d1 d3)
00-0-(*.f64 d1 d2)
00-0-#s(literal 3 binary64)
00-0-(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
00-0-(*.f64 d1 #s(literal 3 binary64))
Results
57.0ms464×0valid
7.0ms24×1valid
7.0ms20×2valid
2.0ms3valid
Compiler

Compiled 84 to 29 computations (65.5% saved)

Precisions
Click to see histograms. Total time spent on operations: 20.0ms
ival-mult: 11.0ms (55.8% of total)
ival-add: 6.0ms (30.4% of total)
backward-pass: 2.0ms (10.1% of total)
const: 1.0ms (5.1% of total)

eval0.0ms (0%)

Compiler

Compiled 10 to 7 computations (30% saved)

prune1.0ms (0%)

Alt Table
Click to see full alt table
StatusAccuracyProgram
99.1%
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
Compiler

Compiled 24 to 16 computations (33.3% saved)

simplify9.0ms (0.3%)

Algorithm
egg-herbie
Localize:

Found 7 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 d1 d2)
cost-diff0
(*.f64 d1 #s(literal 3 binary64))
cost-diff128
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
cost-diff128
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
cost-diff0
(+.f64 #s(literal 3 binary64) d3)
cost-diff0
(+.f64 d2 (+.f64 #s(literal 3 binary64) d3))
cost-diff0
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
Rules
52×fma-define
48×fma-lowering-fma.f32
48×+-lowering-+.f64
48×+-lowering-+.f32
48×fma-lowering-fma.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01244
13341
27341
39841
410041
010041
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* d1 (+ d2 (+ 3 d3)))
d1
(+ d2 (+ 3 d3))
d2
(+ 3 d3)
3
d3
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(+ (* d1 3) (* d1 d2))
(* d1 3)
d1
3
(* d1 d2)
d2
(* d1 d3)
d3
Outputs
(* d1 (+ d2 (+ 3 d3)))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
d1
(+ d2 (+ 3 d3))
(+.f64 d2 (+.f64 #s(literal 3 binary64) d3))
d2
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
3
#s(literal 3 binary64)
d3
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(+ (* d1 3) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 3)
(*.f64 d1 #s(literal 3 binary64))
d1
3
#s(literal 3 binary64)
(* d1 d2)
(*.f64 d1 d2)
d2
(* d1 d3)
(*.f64 d1 d3)
d3

localize62.0ms (1.8%)

Localize:

Found 7 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 d1 d2)
accuracy100.0%
(*.f64 d1 #s(literal 3 binary64))
accuracy99.8%
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
accuracy99.2%
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
accuracy100.0%
(+.f64 d2 (+.f64 #s(literal 3 binary64) d3))
accuracy100.0%
(+.f64 #s(literal 3 binary64) d3)
accuracy99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
Results
39.0ms232×0valid
5.0ms10×2valid
4.0ms12×1valid
1.0ms3valid
Compiler

Compiled 54 to 13 computations (75.9% saved)

Precisions
Click to see histograms. Total time spent on operations: 17.0ms
ival-mult: 9.0ms (53.6% of total)
ival-add: 6.0ms (35.7% of total)
backward-pass: 1.0ms (6% of total)
const: 0.0ms (0% of total)

series12.0ms (0.3%)

Counts
7 → 168
Calls
Call 1
Inputs
#<alt (* d1 (+ d2 (+ 3 d3)))>
#<alt (+ d2 (+ 3 d3))>
#<alt (+ 3 d3)>
#<alt (+ (+ (* d1 3) (* d1 d2)) (* d1 d3))>
#<alt (+ (* d1 3) (* d1 d2))>
#<alt (* d1 3)>
#<alt (* d1 d2)>
Outputs
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 d3))>
#<alt (+ (* d1 d2) (* d1 (+ 3 d3)))>
#<alt (+ (* d1 d2) (* d1 (+ 3 d3)))>
#<alt (+ (* d1 d2) (* d1 (+ 3 d3)))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))>
#<alt (* d1 (+ 3 d2))>
#<alt (+ (* d1 d3) (* d1 (+ 3 d2)))>
#<alt (+ (* d1 d3) (* d1 (+ 3 d2)))>
#<alt (+ (* d1 d3) (* d1 (+ 3 d2)))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))>
#<alt (+ 3 d3)>
#<alt (+ 3 (+ d2 d3))>
#<alt (+ 3 (+ d2 d3))>
#<alt (+ 3 (+ d2 d3))>
#<alt d2>
#<alt (* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))>
#<alt (* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))>
#<alt (* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))>
#<alt d2>
#<alt (* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))>
#<alt (+ 3 d2)>
#<alt (+ 3 (+ d2 d3))>
#<alt (+ 3 (+ d2 d3))>
#<alt (+ 3 (+ d2 d3))>
#<alt d3>
#<alt (* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))>
#<alt (* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))>
#<alt (* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))>
#<alt d3>
#<alt (* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))>
#<alt 3>
#<alt (+ 3 d3)>
#<alt (+ 3 d3)>
#<alt (+ 3 d3)>
#<alt d3>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt d3>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))>
#<alt (* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))>
#<alt (* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))>
#<alt (* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
Calls

42 calls:

TimeVariablePointExpression
2.0ms
d1
@inf
(* d1 (+ d2 (+ 3 d3)))
1.0ms
d1
@0
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
1.0ms
d1
@inf
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
0.0ms
d1
@0
(* d1 (+ d2 (+ 3 d3)))
0.0ms
d1
@-inf
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))

rewrite37.0ms (1%)

Algorithm
batch-egg-rewrite
Rules
52×fma-define
48×fma-lowering-fma.f32
48×+-lowering-+.f64
48×+-lowering-+.f32
48×fma-lowering-fma.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01233
13330
27330
39830
410030
010030
Stop Event
iter limit
saturated
Counts
7 → 60
Calls
Call 1
Inputs
(* d1 (+ d2 (+ 3 d3)))
(+ d2 (+ 3 d3))
(+ 3 d3)
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(+ (* d1 3) (* d1 d2))
(* d1 3)
(* d1 d2)
Outputs
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 (+.f64 d2 d3)))
(+.f64 (*.f64 d1 d2) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(+.f64 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 d3))
(+.f64 (*.f64 d1 d3) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(+.f64 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 d2 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d1 d3 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d3) (*.f64 d1 d2))
(fma.f64 d1 (+.f64 d2 #s(literal 3 binary64)) (*.f64 d1 d3))
(fma.f64 d1 (+.f64 d2 d3) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d2 d1 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d3 d1 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
(fma.f64 (+.f64 d2 #s(literal 3 binary64)) d1 (*.f64 d1 d3))
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(*.f64 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)) d1)
(+.f64 d2 (+.f64 #s(literal 3 binary64) d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+.f64 d3 (+.f64 d2 #s(literal 3 binary64)))
(+.f64 (+.f64 #s(literal 3 binary64) d3) d2)
(+.f64 (+.f64 d2 #s(literal 3 binary64)) d3)
(+.f64 (+.f64 d2 d3) #s(literal 3 binary64))
(+.f64 #s(literal 3 binary64) d3)
(+.f64 d3 #s(literal 3 binary64))
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 (+.f64 d2 d3)))
(+.f64 (*.f64 d1 d2) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(+.f64 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 d3))
(+.f64 (*.f64 d1 d3) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(+.f64 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 d2 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d1 d3 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d3) (*.f64 d1 d2))
(fma.f64 d1 (+.f64 d2 #s(literal 3 binary64)) (*.f64 d1 d3))
(fma.f64 d1 (+.f64 d2 d3) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d2 d1 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d3 d1 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
(fma.f64 (+.f64 d2 #s(literal 3 binary64)) d1 (*.f64 d1 d3))
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(*.f64 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)) d1)
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(*.f64 (+.f64 d2 #s(literal 3 binary64)) d1)
(*.f64 d1 #s(literal 3 binary64))
(*.f64 #s(literal 3 binary64) d1)
(*.f64 d1 d2)
(*.f64 d2 d1)

simplify164.0ms (4.6%)

Algorithm
egg-herbie
Rules
2330×*-lowering-*.f32
2330×*-lowering-*.f64
1732×fnmadd-define
1378×sum5-define
1040×+-lowering-+.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
099816
1349738
2936738
32944738
47981738
08670738
Stop Event
iter limit
node limit
Counts
168 → 168
Calls
Call 1
Inputs
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 d3))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(* d1 d2)
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(* d1 (+ 3 d2))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(* d1 d3)
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(+ 3 d3)
(+ 3 (+ d2 d3))
(+ 3 (+ d2 d3))
(+ 3 (+ d2 d3))
d2
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
d2
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(+ 3 d2)
(+ 3 (+ d2 d3))
(+ 3 (+ d2 d3))
(+ 3 (+ d2 d3))
d3
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
d3
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
3
(+ 3 d3)
(+ 3 d3)
(+ 3 d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* 3 d1)
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(* d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
Outputs
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
d2
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
d2
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+ 3 d2)
(+.f64 #s(literal 3 binary64) d2)
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
d3
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
d3
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
3
#s(literal 3 binary64)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)

eval22.0ms (0.6%)

Compiler

Compiled 1807 to 72 computations (96% saved)

prune11.0ms (0.3%)

Pruning

10 alts after pruning (9 fresh and 1 done)

PrunedKeptTotal
New2199228
Fresh000
Picked112
Done000
Total22010230
Accuracy
100.0%
Counts
230 → 10
Alt Table
Click to see full alt table
StatusAccuracyProgram
99.9%
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
100.0%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
99.9%
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
66.5%
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d3))
99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
69.8%
(*.f64 d1 (+.f64 d2 d3))
66.1%
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
66.5%
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
38.2%
(*.f64 d1 d3)
36.0%
(*.f64 d1 d2)
Compiler

Compiled 170 to 115 computations (32.4% saved)

simplify10.0ms (0.3%)

Algorithm
egg-herbie
Localize:

Found 12 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 d1 #s(literal 3 binary64))
cost-diff0
(+.f64 d2 d3)
cost-diff0
(*.f64 d1 (+.f64 d2 d3))
cost-diff128
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
cost-diff0
(+.f64 d2 d3)
cost-diff0
(*.f64 d1 (+.f64 d2 d3))
cost-diff0
(+.f64 #s(literal 3 binary64) d3)
cost-diff0
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
cost-diff0
(*.f64 d1 d2)
cost-diff0
(+.f64 d2 d3)
cost-diff0
(*.f64 d1 (+.f64 d2 d3))
cost-diff6400
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
Rules
60×fma-define
48×fma-lowering-fma.f32
48×+-lowering-+.f64
48×+-lowering-+.f32
48×fma-lowering-fma.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01268
13266
26166
39066
410466
010466
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(+ (* d1 3) (* d1 (+ d2 d3)))
d1
3
(* d1 (+ d2 d3))
(+ d2 d3)
d2
d3
(* d1 d2)
d1
d2
(* d1 (+ 3 d3))
d1
(+ 3 d3)
3
d3
(* d1 (+ d2 d3))
d1
(+ d2 d3)
d2
d3
(+ (* d1 (+ d2 d3)) (* d1 3))
(* d1 (+ d2 d3))
d1
(+ d2 d3)
d2
d3
(* d1 3)
3
Outputs
(+ (* d1 3) (* d1 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
d1
3
#s(literal 3 binary64)
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ d2 d3)
(+.f64 d2 d3)
d2
d3
(* d1 d2)
(*.f64 d1 d2)
d1
d2
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
d1
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
3
#s(literal 3 binary64)
d3
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
d1
(+ d2 d3)
(+.f64 d2 d3)
d2
d3
(+ (* d1 (+ d2 d3)) (* d1 3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
d1
(+ d2 d3)
(+.f64 d2 d3)
d2
d3
(* d1 3)
(*.f64 d1 #s(literal 3 binary64))
3
#s(literal 3 binary64)

localize89.0ms (2.5%)

Localize:

Found 12 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(+.f64 d2 d3)
accuracy100.0%
(*.f64 d1 #s(literal 3 binary64))
accuracy100.0%
(*.f64 d1 (+.f64 d2 d3))
accuracy99.9%
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
accuracy100.0%
(+.f64 d2 d3)
accuracy100.0%
(*.f64 d1 (+.f64 d2 d3))
accuracy100.0%
(+.f64 #s(literal 3 binary64) d3)
accuracy99.9%
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
accuracy100.0%
(*.f64 d1 d2)
accuracy100.0%
(+.f64 d2 d3)
accuracy100.0%
(*.f64 d1 (+.f64 d2 d3))
accuracy100.0%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
Results
55.0ms235×0valid
7.0ms10×2valid
4.0ms10×1valid
1.0ms5exit
Compiler

Compiled 75 to 13 computations (82.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 20.0ms
ival-mult: 9.0ms (44% of total)
ival-add: 6.0ms (29.3% of total)
compiled-spec: 4.0ms (19.5% of total)
backward-pass: 2.0ms (9.8% of total)
const: 0.0ms (0% of total)

series7.0ms (0.2%)

Counts
8 → 204
Calls
Call 1
Inputs
#<alt (+ (* d1 3) (* d1 (+ d2 d3)))>
#<alt (* d1 (+ d2 d3))>
#<alt (+ d2 d3)>
#<alt (* d1 d2)>
#<alt (* d1 (+ 3 d3))>
#<alt (+ 3 d3)>
#<alt (+ (* d1 (+ d2 d3)) (* d1 3))>
#<alt (* d1 3)>
Outputs
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 d3)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* d1 d2)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt d3>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt d2>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt d2>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt d2>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt d3>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt d3>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt 3>
#<alt (+ 3 d3)>
#<alt (+ 3 d3)>
#<alt (+ 3 d3)>
#<alt d3>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt d3>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
Calls

51 calls:

TimeVariablePointExpression
2.0ms
d1
@0
(+ (* d1 3) (* d1 (+ d2 d3)))
1.0ms
d1
@-inf
(+ (* d1 3) (* d1 (+ d2 d3)))
0.0ms
d1
@0
(* d1 (+ 3 d3))
0.0ms
d1
@inf
(* d1 (+ 3 d3))
0.0ms
d1
@-inf
(* d1 (+ 3 d3))

rewrite20.0ms (0.6%)

Algorithm
batch-egg-rewrite
Rules
60×fma-define
48×fma-lowering-fma.f32
48×+-lowering-+.f64
48×+-lowering-+.f32
48×fma-lowering-fma.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01236
13234
26134
39034
410434
010434
Stop Event
iter limit
saturated
Counts
8 → 64
Calls
Call 1
Inputs
(+ (* d1 3) (* d1 (+ d2 d3)))
(* d1 (+ d2 d3))
(+ d2 d3)
(* d1 d2)
(* d1 (+ 3 d3))
(+ 3 d3)
(+ (* d1 (+ d2 d3)) (* d1 3))
(* d1 3)
Outputs
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 (+.f64 d2 d3)))
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
(+.f64 (*.f64 d1 d2) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(+.f64 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d3) (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(+.f64 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)) (*.f64 d1 d3))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d1 d2 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 d1 d3 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(fma.f64 d1 (+.f64 d2 d3) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d3) (*.f64 d1 d2))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d2) (*.f64 d1 d3))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d2 d1 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 d3 d1 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
(fma.f64 (+.f64 #s(literal 3 binary64) d2) d1 (*.f64 d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(*.f64 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)) d1)
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
(+.f64 (*.f64 d1 d3) (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d1 d3))
(fma.f64 d1 d3 (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 d3))
(fma.f64 d3 d1 (*.f64 d1 d2))
(*.f64 d1 (+.f64 d2 d3))
(*.f64 (+.f64 d2 d3) d1)
(+.f64 d2 d3)
(+.f64 d3 d2)
(*.f64 d1 d2)
(*.f64 d2 d1)
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d3))
(+.f64 (*.f64 d1 d3) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d3))
(fma.f64 d1 d3 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d3))
(fma.f64 d3 d1 (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(*.f64 (+.f64 #s(literal 3 binary64) d3) d1)
(+.f64 #s(literal 3 binary64) d3)
(+.f64 d3 #s(literal 3 binary64))
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 (+.f64 d2 d3)))
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
(+.f64 (*.f64 d1 d2) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(+.f64 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d3) (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(+.f64 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)) (*.f64 d1 d3))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d1 d2 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 d1 d3 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(fma.f64 d1 (+.f64 d2 d3) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d3) (*.f64 d1 d2))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d2) (*.f64 d1 d3))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d2 d1 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 d3 d1 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
(fma.f64 (+.f64 #s(literal 3 binary64) d2) d1 (*.f64 d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(*.f64 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)) d1)
(*.f64 d1 #s(literal 3 binary64))
(*.f64 #s(literal 3 binary64) d1)

simplify181.0ms (5.1%)

Algorithm
egg-herbie
Rules
2122×*-lowering-*.f32
2122×*-lowering-*.f64
1574×sum3-define
1424×--lowering--.f32
1424×--lowering--.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
083946
1302884
2938884
32966884
46724884
08129884
Stop Event
iter limit
node limit
Counts
204 → 204
Calls
Call 1
Inputs
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 d3)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* d1 d2)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
d3
(+ d2 d3)
(+ d2 d3)
(+ d2 d3)
d2
(* d2 (+ 1 (/ d3 d2)))
(* d2 (+ 1 (/ d3 d2)))
(* d2 (+ 1 (/ d3 d2)))
d2
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
d2
(+ d2 d3)
(+ d2 d3)
(+ d2 d3)
d3
(* d3 (+ 1 (/ d2 d3)))
(* d3 (+ 1 (/ d2 d3)))
(* d3 (+ 1 (/ d2 d3)))
d3
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* 3 d1)
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d1 d3)
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
3
(+ 3 d3)
(+ 3 d3)
(+ 3 d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
Outputs
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
d3
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
d2
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d2 d3)
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d2 d3)
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d2 d3)
d2
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d2 d3)
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d2 d3)
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d2 d3)
d2
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
d3
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d2 d3)
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d2 d3)
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d2 d3)
d3
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d2 d3)
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d2 d3)
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d2 d3)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
3
#s(literal 3 binary64)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))

eval43.0ms (1.2%)

Compiler

Compiled 2717 to 73 computations (97.3% saved)

prune16.0ms (0.4%)

Pruning

12 alts after pruning (7 fresh and 5 done)

PrunedKeptTotal
New4044408
Fresh134
Picked145
Done011
Total40612418
Accuracy
100.0%
Counts
418 → 12
Alt Table
Click to see full alt table
StatusAccuracyProgram
99.9%
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
66.5%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d3))
66.1%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d2))
99.9%
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
66.5%
(+.f64 (*.f64 d1 d3) (*.f64 d1 #s(literal 3 binary64)))
99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
69.8%
(*.f64 d1 (+.f64 d2 d3))
66.1%
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
66.5%
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
38.2%
(*.f64 d1 d3)
36.0%
(*.f64 d1 d2)
31.6%
(*.f64 d1 #s(literal 3 binary64))
Compiler

Compiled 162 to 112 computations (30.9% saved)

simplify8.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 10 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 d1 #s(literal 3 binary64))
cost-diff0
(*.f64 d1 d3)
cost-diff128
(+.f64 (*.f64 d1 d3) (*.f64 d1 #s(literal 3 binary64)))
cost-diff0
(+.f64 d2 #s(literal 3 binary64))
cost-diff0
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
cost-diff0
(*.f64 d1 d3)
cost-diff0
(*.f64 d1 #s(literal 3 binary64))
cost-diff0
(*.f64 d1 #s(literal 3 binary64))
cost-diff0
(+.f64 d2 d3)
cost-diff6400
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
Rules
48×fma-lowering-fma.f32
48×fma-define
48×+-lowering-+.f64
48×+-lowering-+.f32
48×fma-lowering-fma.f64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
01253
12952
25051
36951
48551
08551
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(+ (* (+ d2 d3) d1) (* d1 3))
(+ d2 d3)
d2
d3
d1
(* d1 3)
3
(* d1 3)
d1
3
(* d1 d3)
d1
d3
(* d1 (+ d2 3))
d1
(+ d2 3)
d2
3
(+ (* d1 d3) (* d1 3))
(* d1 d3)
d1
d3
(* d1 3)
3
Outputs
(+ (* (+ d2 d3) d1) (* d1 3))
(*.f64 d1 (+.f64 d2 (+.f64 d3 #s(literal 3 binary64))))
(+ d2 d3)
(+.f64 d2 d3)
d2
d3
d1
(* d1 3)
(*.f64 d1 #s(literal 3 binary64))
3
#s(literal 3 binary64)
(* d1 3)
(*.f64 d1 #s(literal 3 binary64))
d1
3
#s(literal 3 binary64)
(* d1 d3)
(*.f64 d3 d1)
d1
d3
(* d1 (+ d2 3))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
d1
(+ d2 3)
(+.f64 d2 #s(literal 3 binary64))
d2
3
#s(literal 3 binary64)
(+ (* d1 d3) (* d1 3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d1 d3)
(*.f64 d3 d1)
d1
d3
(* d1 3)
(*.f64 d1 #s(literal 3 binary64))
3
#s(literal 3 binary64)

localize90.0ms (2.6%)

Localize:

Found 10 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 d1 d3)
accuracy100.0%
(*.f64 d1 #s(literal 3 binary64))
accuracy99.9%
(+.f64 (*.f64 d1 d3) (*.f64 d1 #s(literal 3 binary64)))
accuracy100.0%
(+.f64 d2 #s(literal 3 binary64))
accuracy99.9%
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
accuracy100.0%
(*.f64 d1 d3)
accuracy100.0%
(*.f64 d1 #s(literal 3 binary64))
accuracy100.0%
(+.f64 d2 d3)
accuracy100.0%
(*.f64 d1 #s(literal 3 binary64))
accuracy100.0%
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
Results
49.0ms221×0valid
13.0ms19×2valid
5.0ms13×1valid
4.0ms5exit
Compiler

Compiled 59 to 12 computations (79.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 23.0ms
ival-mult: 8.0ms (35.1% of total)
ival-add: 7.0ms (30.7% of total)
compiled-spec: 5.0ms (21.9% of total)
backward-pass: 3.0ms (13.2% of total)
const: 0.0ms (0% of total)

series4.0ms (0.1%)

Counts
7 → 156
Calls
Call 1
Inputs
#<alt (+ (* (+ d2 d3) d1) (* d1 3))>
#<alt (+ d2 d3)>
#<alt (* d1 3)>
#<alt (* d1 d3)>
#<alt (* d1 (+ d2 3))>
#<alt (+ d2 3)>
#<alt (+ (* d1 d3) (* d1 3))>
Outputs
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt (* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))>
#<alt d3>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt d2>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt d2>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt d2>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt d3>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt d3>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt 3>
#<alt (+ 3 d2)>
#<alt (+ 3 d2)>
#<alt (+ 3 d2)>
#<alt d2>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt d2>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
Calls

39 calls:

TimeVariablePointExpression
0.0ms
d1
@0
(* d1 (+ d2 3))
0.0ms
d1
@inf
(* d1 (+ d2 3))
0.0ms
d1
@-inf
(* d1 (+ d2 3))
0.0ms
d2
@-inf
(* d1 (+ d2 3))
0.0ms
d3
@0
(* d1 d3)

rewrite17.0ms (0.5%)

Algorithm
batch-egg-rewrite
Rules
48×fma-lowering-fma.f32
48×fma-define
48×+-lowering-+.f64
48×+-lowering-+.f32
48×fma-lowering-fma.f64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
01230
12929
25028
36928
48528
08528
Stop Event
iter limit
saturated
Counts
7 → 44
Calls
Call 1
Inputs
(+ (* (+ d2 d3) d1) (* d1 3))
(+ d2 d3)
(* d1 3)
(* d1 d3)
(* d1 (+ d2 3))
(+ d2 3)
(+ (* d1 d3) (* d1 3))
Outputs
(+.f64 (*.f64 (+.f64 d2 d3) d1) (*.f64 d1 #s(literal 3 binary64)))
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 (+.f64 d2 d3) d1))
(+.f64 (*.f64 d3 d1) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(+.f64 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d3 d1))
(+.f64 (*.f64 d1 (+.f64 d3 #s(literal 3 binary64))) (*.f64 d2 d1))
(+.f64 (*.f64 d2 d1) (*.f64 d1 (+.f64 d3 #s(literal 3 binary64))))
(fma.f64 d2 d1 (*.f64 d1 (+.f64 d3 #s(literal 3 binary64))))
(fma.f64 d3 d1 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 d2 (*.f64 d1 (+.f64 d3 #s(literal 3 binary64))))
(fma.f64 d1 d3 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(fma.f64 d1 (+.f64 d2 d3) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 (+.f64 d2 d3) d1))
(fma.f64 d1 (+.f64 d2 #s(literal 3 binary64)) (*.f64 d3 d1))
(fma.f64 d1 (+.f64 d3 #s(literal 3 binary64)) (*.f64 d2 d1))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 (+.f64 d2 d3) d1))
(fma.f64 (+.f64 d2 #s(literal 3 binary64)) d1 (*.f64 d3 d1))
(fma.f64 (+.f64 d3 #s(literal 3 binary64)) d1 (*.f64 d2 d1))
(*.f64 d1 (+.f64 d2 (+.f64 d3 #s(literal 3 binary64))))
(*.f64 (+.f64 d2 (+.f64 d3 #s(literal 3 binary64))) d1)
(+.f64 d2 d3)
(+.f64 d3 d2)
(*.f64 d1 #s(literal 3 binary64))
(*.f64 #s(literal 3 binary64) d1)
(*.f64 d3 d1)
(*.f64 d1 d3)
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d2 d1))
(+.f64 (*.f64 d2 d1) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d2 d1))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d2 d1))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(*.f64 (+.f64 d2 #s(literal 3 binary64)) d1)
(+.f64 d2 #s(literal 3 binary64))
(+.f64 #s(literal 3 binary64) d2)
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d3 d1))
(+.f64 (*.f64 d3 d1) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d3 d1 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 d3 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d3 d1))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(*.f64 (+.f64 d3 #s(literal 3 binary64)) d1)

simplify169.0ms (4.8%)

Algorithm
egg-herbie
Rules
2310×*-lowering-*.f32
2310×*-lowering-*.f64
1700×sum4-define
1240×sum5-define
1060×sum3-define
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
082658
1286628
2859628
32789628
46533628
08454628
Stop Event
iter limit
node limit
Counts
156 → 156
Calls
Call 1
Inputs
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
d3
(+ d2 d3)
(+ d2 d3)
(+ d2 d3)
d2
(* d2 (+ 1 (/ d3 d2)))
(* d2 (+ 1 (/ d3 d2)))
(* d2 (+ 1 (/ d3 d2)))
d2
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
d2
(+ d2 d3)
(+ d2 d3)
(+ d2 d3)
d3
(* d3 (+ 1 (/ d2 d3)))
(* d3 (+ 1 (/ d2 d3)))
(* d3 (+ 1 (/ d2 d3)))
d3
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* 3 d1)
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(* d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
3
(+ 3 d2)
(+ 3 d2)
(+ 3 d2)
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* -1 (* d1 (- (* -1 d3) 3)))
(* -1 (* d1 (- (* -1 d3) 3)))
(* -1 (* d1 (- (* -1 d3) 3)))
(* -1 (* d1 (- (* -1 d3) 3)))
(* 3 d1)
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d1 d3)
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
Outputs
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
(* -1 (* d1 (- (* -1 (+ d2 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d3 d2)))
d3
(+ d2 d3)
(+.f64 d3 d2)
(+ d2 d3)
(+.f64 d3 d2)
(+ d2 d3)
(+.f64 d3 d2)
d2
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d3 d2)
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d3 d2)
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d3 d2)
d2
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d3 d2)
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d3 d2)
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d3 d2)
d2
(+ d2 d3)
(+.f64 d3 d2)
(+ d2 d3)
(+.f64 d3 d2)
(+ d2 d3)
(+.f64 d3 d2)
d3
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d3 d2)
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d3 d2)
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d3 d2)
d3
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d3 d2)
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d3 d2)
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d3 d2)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
3
#s(literal 3 binary64)
(+ 3 d2)
(+.f64 #s(literal 3 binary64) d2)
(+ 3 d2)
(+.f64 #s(literal 3 binary64) d2)
(+ 3 d2)
(+.f64 #s(literal 3 binary64) d2)
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))

eval25.0ms (0.7%)

Compiler

Compiled 1495 to 62 computations (95.9% saved)

prune12.0ms (0.3%)

Pruning

12 alts after pruning (3 fresh and 9 done)

PrunedKeptTotal
New2513254
Fresh202
Picked145
Done055
Total25412266
Accuracy
100.0%
Counts
266 → 12
Alt Table
Click to see full alt table
StatusAccuracyProgram
66.1%
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
66.5%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
66.1%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d2 d1))
99.9%
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
66.5%
(+.f64 (*.f64 d1 d3) (*.f64 d1 #s(literal 3 binary64)))
99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
69.8%
(*.f64 d1 (+.f64 d2 d3))
66.1%
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
66.5%
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
38.2%
(*.f64 d1 d3)
36.0%
(*.f64 d1 d2)
31.6%
(*.f64 d1 #s(literal 3 binary64))
Compiler

Compiled 101 to 70 computations (30.7% saved)

simplify6.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 6 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 d1 #s(literal 3 binary64))
cost-diff6400
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
cost-diff0
(*.f64 d3 d1)
cost-diff6400
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
cost-diff0
(*.f64 d2 d1)
cost-diff6400
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d2 d1))
Rules
20×*-lowering-*.f32
20×*-lowering-*.f64
16×fma-lowering-fma.f32
16×fma-define
16×+-lowering-+.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01036
11733
23033
33233
03233
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(+ (* d1 3) (* d2 d1))
d1
3
(* d2 d1)
d2
(+ (* d1 3) (* d3 d1))
d1
3
(* d3 d1)
d3
(+ (* d2 d1) (* d1 3))
d2
d1
(* d1 3)
3
Outputs
(+ (* d1 3) (* d2 d1))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
d1
3
#s(literal 3 binary64)
(* d2 d1)
(*.f64 d1 d2)
d2
(+ (* d1 3) (* d3 d1))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
d1
3
#s(literal 3 binary64)
(* d3 d1)
(*.f64 d1 d3)
d3
(+ (* d2 d1) (* d1 3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
d2
d1
(* d1 3)
(*.f64 d1 #s(literal 3 binary64))
3
#s(literal 3 binary64)

localize76.0ms (2.2%)

Localize:

Found 6 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 d1 #s(literal 3 binary64))
accuracy95.4%
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
accuracy100.0%
(*.f64 d3 d1)
accuracy96.1%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
accuracy100.0%
(*.f64 d2 d1)
accuracy99.9%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d2 d1))
Results
38.0ms221×0valid
17.0ms31×2valid
4.0ms5exit
Compiler

Compiled 40 to 11 computations (72.5% saved)

Precisions
Click to see histograms. Total time spent on operations: 38.0ms
compiled-spec: 15.0ms (39.7% of total)
ival-mult: 14.0ms (37.1% of total)
ival-add: 5.0ms (13.2% of total)
backward-pass: 3.0ms (7.9% of total)
const: 0.0ms (0% of total)

series4.0ms (0.1%)

Counts
6 → 132
Calls
Call 1
Inputs
#<alt (+ (* d1 3) (* d2 d1))>
#<alt (* d2 d1)>
#<alt (+ (* d1 3) (* d3 d1))>
#<alt (* d3 d1)>
#<alt (+ (* d2 d1) (* d1 3))>
#<alt (* d1 3)>
Outputs
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
Calls

33 calls:

TimeVariablePointExpression
0.0ms
d1
@-inf
(* d3 d1)
0.0ms
d1
@inf
(+ (* d1 3) (* d2 d1))
0.0ms
d1
@0
(+ (* d1 3) (* d2 d1))
0.0ms
d1
@-inf
(+ (* d1 3) (* d2 d1))
0.0ms
d1
@inf
(+ (* d1 3) (* d3 d1))

rewrite14.0ms (0.4%)

Algorithm
batch-egg-rewrite
Rules
20×*-lowering-*.f32
20×*-lowering-*.f64
16×fma-lowering-fma.f32
16×fma-define
16×+-lowering-+.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01027
11724
23024
33224
03224
Stop Event
iter limit
saturated
Counts
6 → 30
Calls
Call 1
Inputs
(+ (* d1 3) (* d2 d1))
(* d2 d1)
(+ (* d1 3) (* d3 d1))
(* d3 d1)
(+ (* d2 d1) (* d1 3))
(* d1 3)
Outputs
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(*.f64 (+.f64 #s(literal 3 binary64) d2) d1)
(*.f64 d1 d2)
(*.f64 d2 d1)
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d3))
(+.f64 (*.f64 d1 d3) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d3))
(fma.f64 d1 d3 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d3))
(fma.f64 d3 d1 (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(*.f64 (+.f64 #s(literal 3 binary64) d3) d1)
(*.f64 d1 d3)
(*.f64 d3 d1)
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(*.f64 (+.f64 #s(literal 3 binary64) d2) d1)
(*.f64 d1 #s(literal 3 binary64))
(*.f64 #s(literal 3 binary64) d1)

simplify147.0ms (4.2%)

Algorithm
egg-herbie
Rules
2054×fmsub-define
1858×fmm-def
1692×fma-lowering-fma.f32
1692×fma-lowering-fma.f64
1616×fnmsub-define
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
040522
1123522
2338522
3773522
41861522
55409522
08042522
Stop Event
iter limit
node limit
Counts
132 → 132
Calls
Call 1
Inputs
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* 3 d1)
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(* d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* -1 (* d1 (- (* -1 d3) 3)))
(* -1 (* d1 (- (* -1 d3) 3)))
(* -1 (* d1 (- (* -1 d3) 3)))
(* -1 (* d1 (- (* -1 d3) 3)))
(* 3 d1)
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d1 d3)
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* 3 d1)
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(* d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
Outputs
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))

eval17.0ms (0.5%)

Compiler

Compiled 885 to 31 computations (96.5% saved)

prune8.0ms (0.2%)

Pruning

12 alts after pruning (0 fresh and 12 done)

PrunedKeptTotal
New1620162
Fresh000
Picked033
Done099
Total16212174
Accuracy
100.0%
Counts
174 → 12
Alt Table
Click to see full alt table
StatusAccuracyProgram
66.1%
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
66.5%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
66.1%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d2 d1))
99.9%
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
66.5%
(+.f64 (*.f64 d1 d3) (*.f64 d1 #s(literal 3 binary64)))
99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
69.8%
(*.f64 d1 (+.f64 d2 d3))
66.1%
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
66.5%
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
38.2%
(*.f64 d1 d3)
36.0%
(*.f64 d1 d2)
31.6%
(*.f64 d1 #s(literal 3 binary64))
Compiler

Compiled 215 to 99 computations (54% saved)

regimes24.0ms (0.7%)

Counts
18 → 1
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 3 binary64))
(*.f64 d1 d2)
(*.f64 d1 d3)
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 d2 d3))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d3))
(+.f64 (*.f64 d1 d3) (*.f64 d1 #s(literal 3 binary64)))
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d2))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d3))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d2 d1))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
Outputs
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
Calls

4 calls:

6.0ms
d2
6.0ms
d1
5.0ms
d3
5.0ms
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
Results
AccuracySegmentsBranch
100.0%1d1
100.0%1d2
100.0%1d3
100.0%1(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
Compiler

Compiled 26 to 18 computations (30.8% saved)

regimes35.0ms (1%)

Counts
16 → 1
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 3 binary64))
(*.f64 d1 d2)
(*.f64 d1 d3)
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 d2 d3))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d3))
(+.f64 (*.f64 d1 d3) (*.f64 d1 #s(literal 3 binary64)))
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d2))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d3))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d2 d1))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
Outputs
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
Calls

4 calls:

19.0ms
d2
5.0ms
d1
5.0ms
d3
5.0ms
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
Results
AccuracySegmentsBranch
99.9%1d1
99.9%1d2
99.9%1d3
99.9%1(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
Compiler

Compiled 26 to 18 computations (30.8% saved)

regimes9.0ms (0.2%)

Counts
6 → 2
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 3 binary64))
(*.f64 d1 d2)
(*.f64 d1 d3)
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 d2 d3))
Outputs
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 d2 d3))
Calls

3 calls:

3.0ms
d1
3.0ms
d3
3.0ms
d2
Results
AccuracySegmentsBranch
75.6%3d1
98.4%2d2
98.7%2d3
Compiler

Compiled 12 to 9 computations (25% saved)

regimes6.0ms (0.2%)

Counts
5 → 2
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 3 binary64))
(*.f64 d1 d2)
(*.f64 d1 d3)
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
Outputs
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
Calls

2 calls:

3.0ms
d2
2.0ms
d3
Results
AccuracySegmentsBranch
96.1%2d2
91.5%2d3
Compiler

Compiled 8 to 6 computations (25% saved)

regimes2.0ms (0.1%)

Counts
4 → 2
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 3 binary64))
(*.f64 d1 d2)
(*.f64 d1 d3)
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
Outputs
(*.f64 d1 d2)
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
Calls

1 calls:

2.0ms
d2
Results
AccuracySegmentsBranch
95.0%2d2
Compiler

Compiled 4 to 3 computations (25% saved)

regimes4.0ms (0.1%)

Counts
3 → 3
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 3 binary64))
(*.f64 d1 d2)
(*.f64 d1 d3)
Outputs
(*.f64 d1 d2)
(*.f64 d1 #s(literal 3 binary64))
(*.f64 d1 d3)
Calls

2 calls:

2.0ms
d2
2.0ms
d3
Results
AccuracySegmentsBranch
70.6%3d3
79.2%3d2
Compiler

Compiled 8 to 6 computations (25% saved)

regimes5.0ms (0.1%)

Counts
2 → 2
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 3 binary64))
(*.f64 d1 d2)
Outputs
(*.f64 d1 d2)
(*.f64 d1 #s(literal 3 binary64))
Calls

3 calls:

2.0ms
d3
2.0ms
d1
2.0ms
d2
Results
AccuracySegmentsBranch
46.1%3d3
41.2%3d1
63.3%2d2
Compiler

Compiled 12 to 9 computations (25% saved)

regimes4.0ms (0.1%)

Accuracy

Total -0.0b remaining (-0%)

Threshold costs -0b (-0%)

Counts
1 → 1
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 3 binary64))
Outputs
(*.f64 d1 #s(literal 3 binary64))
Calls

3 calls:

1.0ms
d1
1.0ms
d3
1.0ms
d2
Results
AccuracySegmentsBranch
31.6%1d1
31.6%1d3
31.6%1d2
Compiler

Compiled 12 to 9 computations (25% saved)

bsearch17.0ms (0.5%)

Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
15.0ms
3.6228138796305686e-5
16879.604702026434
Results
11.0ms144×0valid
Compiler

Compiled 182 to 131 computations (28% saved)

Precisions
Click to see histograms. Total time spent on operations: 6.0ms
ival-add: 3.0ms (53.7% of total)
ival-mult: 3.0ms (53.7% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

bsearch14.0ms (0.4%)

Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
12.0ms
-2.084996200278021e-6
-4.0844611384844013e-10
Results
8.0ms128×0valid
Compiler

Compiled 164 to 126 computations (23.2% saved)

Precisions
Click to see histograms. Total time spent on operations: 4.0ms
ival-mult: 2.0ms (52.4% of total)
ival-add: 1.0ms (26.2% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

bsearch17.0ms (0.5%)

Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
15.0ms
-20314.057710023535
-0.1434677267924405
Results
11.0ms144×0valid
Compiler

Compiled 164 to 122 computations (25.6% saved)

Precisions
Click to see histograms. Total time spent on operations: 6.0ms
ival-add: 3.0ms (52.2% of total)
ival-mult: 3.0ms (52.2% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

bsearch46.0ms (1.3%)

Algorithm
binary-search
Stop Event
narrow-enough
narrow-enough
Steps
TimeLeftRight
17.0ms
-1.2384201101487537e-234
-1.5645568605547747e-241
17.0ms
-20314.057710023535
-0.1434677267924405
Results
20.0ms265×0valid
3.0ms14×2valid
1.0ms1valid
Compiler

Compiled 272 to 212 computations (22.1% saved)

Precisions
Click to see histograms. Total time spent on operations: 13.0ms
ival-mult: 9.0ms (70.7% of total)
ival-add: 3.0ms (23.6% of total)
backward-pass: 1.0ms (7.9% of total)
const: 0.0ms (0% of total)

bsearch15.0ms (0.4%)

Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
14.0ms
-20314.057710023535
-0.1434677267924405
Results
9.0ms144×0valid
Compiler

Compiled 146 to 113 computations (22.6% saved)

Precisions
Click to see histograms. Total time spent on operations: 4.0ms
ival-mult: 3.0ms (68.7% of total)
ival-add: 1.0ms (22.9% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

simplify8.0ms (0.2%)

Algorithm
egg-herbie
Rules
14×*-commutative_binary64
+-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
03185
14285
Stop Event
saturated
Calls
Call 1
Inputs
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d3 #s(literal 3 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 (+.f64 d2 d3)))
(if (<=.f64 d2 #s(literal -6800207735332289/9444732965739290427392 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d2 #s(literal -20000 binary64)) (*.f64 d1 d2) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d2 #s(literal -3 binary64)) (*.f64 d1 d2) (if (<=.f64 d2 #s(literal -4948802597112473/1832889850782397517082802171755189663406191307018921761884252780947908096342585866198098193012776216027479008590015982084761399088452696108828481666660133095712823955710669574545075280734654641679682560526831695838459555430831205351382962374814354898944 binary64)) (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d3)))
(if (<=.f64 d2 #s(literal -3 binary64)) (*.f64 d1 d2) (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 #s(literal 3 binary64))
Outputs
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d3 #s(literal 3 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 (+.f64 d2 d3)))
(if (<=.f64 d3 #s(literal 3 binary64)) (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)) (*.f64 d1 (+.f64 d2 d3)))
(if (<=.f64 d2 #s(literal -6800207735332289/9444732965739290427392 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d2 #s(literal -6800207735332289/9444732965739290427392 binary64)) (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d2 #s(literal -20000 binary64)) (*.f64 d1 d2) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d2 #s(literal -3 binary64)) (*.f64 d1 d2) (if (<=.f64 d2 #s(literal -4948802597112473/1832889850782397517082802171755189663406191307018921761884252780947908096342585866198098193012776216027479008590015982084761399088452696108828481666660133095712823955710669574545075280734654641679682560526831695838459555430831205351382962374814354898944 binary64)) (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d3)))
(if (<=.f64 d2 #s(literal -3 binary64)) (*.f64 d1 d2) (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 #s(literal 3 binary64))

soundness929.0ms (26.3%)

Rules
2330×*-lowering-*.f32
2330×*-lowering-*.f64
2122×*-lowering-*.f32
2122×*-lowering-*.f64
1732×fnmadd-define
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
099
1207
2476
3796
4946
5966
0966
099816
1349738
2936738
32944738
47981738
08670738
083946
1302884
2938884
32966884
46724884
08129884
01233
13330
27330
39830
410030
010030
Stop Event
done
iter limit
saturated
iter limit
node limit
iter limit
node limit
iter limit
saturated
Compiler

Compiled 345 to 214 computations (38% saved)

preprocess79.0ms (2.2%)

Remove

(sort d2 d3)

(negabs d1)

Compiler

Compiled 312 to 150 computations (51.9% saved)

end0.0ms (0%)

Profiling

Loading profile data...