Numeric.Log:$cexpm1 from log-domain-0.10.2.1, B

Time bar (total: 3.7s)

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 10 to 6 computations (40% 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)

sample1.0s (28.4%)

Results
848.0ms8254×0valid
0.0ms1valid
Precisions
Click to see histograms. Total time spent on operations: 346.0ms
ival-mult: 250.0ms (72.2% of total)
ival-add: 86.0ms (24.8% of total)
const: 7.0ms (2% of total)
backward-pass: 3.0ms (0.9% of total)
Bogosity

preprocess119.0ms (3.2%)

Algorithm
egg-herbie
Rules
1960×sum5-define
1780×fnmadd-define
1536×sum4-define
1368×fmsub-define
1344×fnmsub-define
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01844
16937
221836
384136
4327936
5634336
6694836
7696436
056
1126
2266
3396
4506
5676
6936
71156
81226
91236
01236
Stop Event
iter limit
saturated
saturated
Calls
Call 1
Inputs
(+ (+ (* x y) x) y)
Outputs
(+ (+ (* x y) x) y)
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
Call 2
Inputs
(+ (+ (* x y) x) y)
(+ (+ (* (neg x) y) (neg x)) y)
(+ (+ (* x (neg y)) x) (neg y))
(neg (+ (+ (* (neg x) y) (neg x)) y))
(neg (+ (+ (* x (neg y)) x) (neg y)))
(+ (+ (* y x) y) x)
Outputs
(+ (+ (* x y) x) y)
(+ x (fma x y y))
(+ (+ (* (neg x) y) (neg x)) y)
(+ y (fnmsub x y x))
(+ (+ (* x (neg y)) x) (neg y))
(+ x (fnmsub x y y))
(neg (+ (+ (* (neg x) y) (neg x)) y))
(+ x (fmsub x y y))
(neg (+ (+ (* x (neg y)) x) (neg y)))
(+ y (fmsub x y x))
(+ (+ (* y x) y) x)
(+ x (fma x y y))
Symmetry

(sort x y)

explain165.0ms (4.5%)

FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
00-0-(*.f64 x y)
00-0-x
00-0-(+.f64 (+.f64 (*.f64 x y) x) y)
00-0-(+.f64 (*.f64 x y) x)
00-0-y
Results
140.0ms512×0valid
Compiler

Compiled 49 to 17 computations (65.3% saved)

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

eval0.0ms (0%)

Compiler

Compiled 9 to 6 computations (33.3% saved)

prune1.0ms (0%)

Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
Compiler

Compiled 9 to 6 computations (33.3% saved)

simplify22.0ms (0.6%)

Algorithm
egg-herbie
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
cost-diff0
(+.f64 x #s(literal 1 binary64))
cost-diff0
(*.f64 y (+.f64 x #s(literal 1 binary64)))
cost-diff0
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
Rules
92×fma-define
76×fma-lowering-fma.f32
76×fma-lowering-fma.f64
48×*-lowering-*.f32
48×*-lowering-*.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0618
11716
23716
36616
49516
511016
611716
711816
011816
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(+ x (* y (+ x 1)))
x
(* y (+ x 1))
y
(+ x 1)
1
Outputs
(+ x (* y (+ x 1)))
(+.f64 y (*.f64 x (+.f64 y #s(literal 1 binary64))))
x
(* y (+ x 1))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
y
(+ x 1)
(+.f64 x #s(literal 1 binary64))
1
#s(literal 1 binary64)

localize41.0ms (1.1%)

Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(+.f64 x #s(literal 1 binary64))
accuracy100.0%
(*.f64 y (+.f64 x #s(literal 1 binary64)))
accuracy100.0%
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
Results
33.0ms256×0valid
Compiler

Compiled 21 to 7 computations (66.7% saved)

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

series3.0ms (0.1%)

Counts
3 → 60
Calls
Call 1
Inputs
#<alt (+ x (* y (+ x 1)))>
#<alt (* y (+ x 1))>
#<alt (+ x 1)>
Outputs
#<alt y>
#<alt (+ y (* x (+ 1 y)))>
#<alt (+ y (* x (+ 1 y)))>
#<alt (+ y (* x (+ 1 y)))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 (+ y (/ y x))))>
#<alt (* x (+ 1 (+ y (/ y x))))>
#<alt (* x (+ 1 (+ y (/ y x))))>
#<alt (* -1 (* x (- (* -1 y) 1)))>
#<alt (* -1 (* x (- (+ (* -1 y) (* -1 (/ y x))) 1)))>
#<alt (* -1 (* x (- (+ (* -1 y) (* -1 (/ y x))) 1)))>
#<alt (* -1 (* x (- (+ (* -1 y) (* -1 (/ y x))) 1)))>
#<alt x>
#<alt (+ x (* y (+ 1 x)))>
#<alt (+ x (* y (+ 1 x)))>
#<alt (+ x (* y (+ 1 x)))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 (+ x (/ x y))))>
#<alt (* y (+ 1 (+ x (/ x y))))>
#<alt (* y (+ 1 (+ x (/ x y))))>
#<alt (* y (+ 1 x))>
#<alt (* -1 (* y (+ (* -1 (+ 1 x)) (* -1 (/ x y)))))>
#<alt (* -1 (* y (+ (* -1 (+ 1 x)) (* -1 (/ x y)))))>
#<alt (* -1 (* y (+ (* -1 (+ 1 x)) (* -1 (/ x y)))))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt y>
#<alt (+ y (* x y))>
#<alt (+ y (* x y))>
#<alt (+ y (* x y))>
#<alt (* x y)>
#<alt (* x (+ y (/ y x)))>
#<alt (* x (+ y (/ y x)))>
#<alt (* x (+ y (/ y x)))>
#<alt (* x y)>
#<alt (* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))>
#<alt (* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))>
#<alt (* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))>
#<alt 1>
#<alt (+ 1 x)>
#<alt (+ 1 x)>
#<alt (+ 1 x)>
#<alt x>
#<alt (* x (+ 1 (/ 1 x)))>
#<alt (* x (+ 1 (/ 1 x)))>
#<alt (* x (+ 1 (/ 1 x)))>
#<alt x>
#<alt (* x (+ 1 (/ 1 x)))>
#<alt (* x (+ 1 (/ 1 x)))>
#<alt (* x (+ 1 (/ 1 x)))>
Calls

15 calls:

TimeVariablePointExpression
1.0ms
y
@-inf
(+ x (* y (+ x 1)))
0.0ms
x
@-inf
(+ x (* y (+ x 1)))
0.0ms
x
@inf
(+ x (* y (+ x 1)))
0.0ms
y
@inf
(+ x (* y (+ x 1)))
0.0ms
x
@0
(+ x (* y (+ x 1)))

rewrite36.0ms (1%)

Algorithm
batch-egg-rewrite
Rules
92×fma-define
76×fma-lowering-fma.f32
76×fma-lowering-fma.f64
48×*-lowering-*.f32
48×*-lowering-*.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0615
11713
23713
36613
49513
511013
611713
711813
011813
Stop Event
iter limit
saturated
Counts
3 → 44
Calls
Call 1
Inputs
(+ x (* y (+ x 1)))
(* y (+ x 1))
(+ x 1)
Outputs
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(+.f64 y (*.f64 x (+.f64 y #s(literal 1 binary64))))
(+.f64 (*.f64 y (+.f64 x #s(literal 1 binary64))) x)
(+.f64 (*.f64 x y) (+.f64 x y))
(+.f64 (*.f64 x (+.f64 y #s(literal 1 binary64))) y)
(+.f64 (+.f64 x y) (*.f64 x y))
(fma.f64 x y (+.f64 x y))
(fma.f64 x #s(literal 1 binary64) (*.f64 y (+.f64 x #s(literal 1 binary64))))
(fma.f64 x (+.f64 y #s(literal 1 binary64)) y)
(fma.f64 y x (+.f64 x y))
(fma.f64 y #s(literal 1 binary64) (*.f64 x (+.f64 y #s(literal 1 binary64))))
(fma.f64 y (+.f64 x #s(literal 1 binary64)) x)
(fma.f64 #s(literal 1 binary64) x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(fma.f64 #s(literal 1 binary64) y (*.f64 x (+.f64 y #s(literal 1 binary64))))
(fma.f64 #s(literal 1 binary64) (*.f64 y (+.f64 x #s(literal 1 binary64))) x)
(fma.f64 #s(literal 1 binary64) (*.f64 x y) (+.f64 x y))
(fma.f64 #s(literal 1 binary64) (*.f64 x (+.f64 y #s(literal 1 binary64))) y)
(fma.f64 #s(literal 1 binary64) (+.f64 x y) (*.f64 x y))
(fma.f64 (+.f64 x #s(literal 1 binary64)) y x)
(fma.f64 (*.f64 y (+.f64 x #s(literal 1 binary64))) #s(literal 1 binary64) x)
(fma.f64 (*.f64 x y) #s(literal 1 binary64) (+.f64 x y))
(fma.f64 (*.f64 x (+.f64 y #s(literal 1 binary64))) #s(literal 1 binary64) y)
(fma.f64 (+.f64 x y) #s(literal 1 binary64) (*.f64 x y))
(fma.f64 (+.f64 y #s(literal 1 binary64)) x y)
(*.f64 #s(literal 1 binary64) (+.f64 y (*.f64 x (+.f64 y #s(literal 1 binary64)))))
(*.f64 (+.f64 y (*.f64 x (+.f64 y #s(literal 1 binary64)))) #s(literal 1 binary64))
(+.f64 y (*.f64 x y))
(+.f64 (*.f64 x y) y)
(fma.f64 x y y)
(fma.f64 y x y)
(fma.f64 y #s(literal 1 binary64) (*.f64 x y))
(fma.f64 #s(literal 1 binary64) y (*.f64 x y))
(fma.f64 #s(literal 1 binary64) (*.f64 x y) y)
(fma.f64 (*.f64 x y) #s(literal 1 binary64) y)
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(*.f64 #s(literal 1 binary64) (*.f64 y (+.f64 x #s(literal 1 binary64))))
(*.f64 (+.f64 x #s(literal 1 binary64)) y)
(*.f64 (*.f64 y (+.f64 x #s(literal 1 binary64))) #s(literal 1 binary64))
(+.f64 x #s(literal 1 binary64))
(+.f64 #s(literal 1 binary64) x)
(fma.f64 x #s(literal 1 binary64) #s(literal 1 binary64))
(fma.f64 #s(literal 1 binary64) x #s(literal 1 binary64))
(*.f64 #s(literal 1 binary64) (+.f64 x #s(literal 1 binary64)))
(*.f64 (+.f64 x #s(literal 1 binary64)) #s(literal 1 binary64))

simplify280.0ms (7.6%)

Algorithm
egg-herbie
Rules
2004×fmsub-define
1956×fnmsub-define
1788×fmm-def
1602×sum4-define
1562×fma-lowering-fma.f32
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
040290
1147249
2447247
31430247
44275247
08035247
Stop Event
iter limit
node limit
Counts
60 → 60
Calls
Call 1
Inputs
y
(+ y (* x (+ 1 y)))
(+ y (* x (+ 1 y)))
(+ y (* x (+ 1 y)))
(* x (+ 1 y))
(* x (+ 1 (+ y (/ y x))))
(* x (+ 1 (+ y (/ y x))))
(* x (+ 1 (+ y (/ y x))))
(* -1 (* x (- (* -1 y) 1)))
(* -1 (* x (- (+ (* -1 y) (* -1 (/ y x))) 1)))
(* -1 (* x (- (+ (* -1 y) (* -1 (/ y x))) 1)))
(* -1 (* x (- (+ (* -1 y) (* -1 (/ y x))) 1)))
x
(+ x (* y (+ 1 x)))
(+ x (* y (+ 1 x)))
(+ x (* y (+ 1 x)))
(* y (+ 1 x))
(* y (+ 1 (+ x (/ x y))))
(* y (+ 1 (+ x (/ x y))))
(* y (+ 1 (+ x (/ x y))))
(* y (+ 1 x))
(* -1 (* y (+ (* -1 (+ 1 x)) (* -1 (/ x y)))))
(* -1 (* y (+ (* -1 (+ 1 x)) (* -1 (/ x y)))))
(* -1 (* y (+ (* -1 (+ 1 x)) (* -1 (/ x y)))))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
y
(+ y (* x y))
(+ y (* x y))
(+ y (* x y))
(* x y)
(* x (+ y (/ y x)))
(* x (+ y (/ y x)))
(* x (+ y (/ y x)))
(* x y)
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
1
(+ 1 x)
(+ 1 x)
(+ 1 x)
x
(* x (+ 1 (/ 1 x)))
(* x (+ 1 (/ 1 x)))
(* x (+ 1 (/ 1 x)))
x
(* x (+ 1 (/ 1 x)))
(* x (+ 1 (/ 1 x)))
(* x (+ 1 (/ 1 x)))
Outputs
y
(+ y (* x (+ 1 y)))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(+ y (* x (+ 1 y)))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(+ y (* x (+ 1 y)))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 (+ y (/ y x))))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* x (+ 1 (+ y (/ y x))))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* x (+ 1 (+ y (/ y x))))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* -1 (* x (- (* -1 y) 1)))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* -1 (* x (- (+ (* -1 y) (* -1 (/ y x))) 1)))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* -1 (* x (- (+ (* -1 y) (* -1 (/ y x))) 1)))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* -1 (* x (- (+ (* -1 y) (* -1 (/ y x))) 1)))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
x
(+ x (* y (+ 1 x)))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(+ x (* y (+ 1 x)))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(+ x (* y (+ 1 x)))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 (+ x (/ x y))))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* y (+ 1 (+ x (/ x y))))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* y (+ 1 (+ x (/ x y))))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* -1 (* y (+ (* -1 (+ 1 x)) (* -1 (/ x y)))))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* -1 (* y (+ (* -1 (+ 1 x)) (* -1 (/ x y)))))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* -1 (* y (+ (* -1 (+ 1 x)) (* -1 (/ x y)))))
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
y
(+ y (* x y))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(+ y (* x y))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(+ y (* x y))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* x y)
(*.f64 y x)
(* x (+ y (/ y x)))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* x (+ y (/ y x)))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* x (+ y (/ y x)))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* x y)
(*.f64 y x)
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
1
#s(literal 1 binary64)
(+ 1 x)
(+.f64 x #s(literal 1 binary64))
(+ 1 x)
(+.f64 x #s(literal 1 binary64))
(+ 1 x)
(+.f64 x #s(literal 1 binary64))
x
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))
x
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))

eval10.0ms (0.3%)

Compiler

Compiled 718 to 76 computations (89.4% saved)

prune73.0ms (2%)

Pruning

6 alts after pruning (6 fresh and 0 done)

PrunedKeptTotal
New986104
Fresh000
Picked101
Done000
Total996105
Accuracy
100.0%
Counts
105 → 6
Alt Table
Click to see full alt table
StatusAccuracyProgram
65.6%
(+.f64 x (*.f64 y x))
72.5%
(+.f64 x y)
61.9%
(*.f64 y (+.f64 x #s(literal 1 binary64)))
65.6%
(*.f64 x (+.f64 y #s(literal 1 binary64)))
35.5%
y
38.9%
x
Compiler

Compiled 64 to 42 computations (34.4% saved)

simplify7.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 5 expressions of interest:

NewMetricScoreProgram
cost-diff0
(+.f64 x #s(literal 1 binary64))
cost-diff0
(*.f64 y (+.f64 x #s(literal 1 binary64)))
cost-diff0
(+.f64 y #s(literal 1 binary64))
cost-diff0
(*.f64 x (+.f64 y #s(literal 1 binary64)))
cost-diff0
(+.f64 x y)
Rules
44×*-lowering-*.f32
44×*-lowering-*.f64
40×fma-lowering-fma.f32
40×fma-define
40×fma-lowering-fma.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0829
12527
24127
36727
47227
07227
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(+ x y)
x
y
x
y
(* x (+ y 1))
x
(+ y 1)
y
1
(* y (+ x 1))
y
(+ x 1)
x
1
Outputs
(+ x y)
(+.f64 x y)
x
y
x
y
(* x (+ y 1))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
x
(+ y 1)
(+.f64 y #s(literal 1 binary64))
y
1
#s(literal 1 binary64)
(* y (+ x 1))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
y
(+ x 1)
(+.f64 x #s(literal 1 binary64))
x
1
#s(literal 1 binary64)

localize222.0ms (6%)

Localize:

Found 5 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(+.f64 x #s(literal 1 binary64))
accuracy100.0%
(*.f64 y (+.f64 x #s(literal 1 binary64)))
accuracy100.0%
(+.f64 y #s(literal 1 binary64))
accuracy100.0%
(*.f64 x (+.f64 y #s(literal 1 binary64)))
accuracy100.0%
(+.f64 x y)
Results
211.0ms256×0valid
Compiler

Compiled 32 to 9 computations (71.9% saved)

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

series3.0ms (0.1%)

Counts
5 → 96
Calls
Call 1
Inputs
#<alt (+ x y)>
#<alt (* x (+ y 1))>
#<alt (+ y 1)>
#<alt (* y (+ x 1))>
#<alt (+ x 1)>
Outputs
#<alt y>
#<alt (+ x y)>
#<alt (+ x y)>
#<alt (+ x y)>
#<alt x>
#<alt (* x (+ 1 (/ y x)))>
#<alt (* x (+ 1 (/ y x)))>
#<alt (* x (+ 1 (/ y x)))>
#<alt x>
#<alt (* -1 (* x (- (* -1 (/ y x)) 1)))>
#<alt (* -1 (* x (- (* -1 (/ y x)) 1)))>
#<alt (* -1 (* x (- (* -1 (/ y x)) 1)))>
#<alt x>
#<alt (+ x y)>
#<alt (+ x y)>
#<alt (+ x y)>
#<alt y>
#<alt (* y (+ 1 (/ x y)))>
#<alt (* y (+ 1 (/ x y)))>
#<alt (* y (+ 1 (/ x y)))>
#<alt y>
#<alt (* -1 (* y (- (* -1 (/ x y)) 1)))>
#<alt (* -1 (* y (- (* -1 (/ x y)) 1)))>
#<alt (* -1 (* y (- (* -1 (/ x y)) 1)))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt x>
#<alt (+ x (* x y))>
#<alt (+ x (* x y))>
#<alt (+ x (* x y))>
#<alt (* x y)>
#<alt (* y (+ x (/ x y)))>
#<alt (* y (+ x (/ x y)))>
#<alt (* y (+ x (/ x y)))>
#<alt (* x y)>
#<alt (* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))>
#<alt (* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))>
#<alt (* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))>
#<alt 1>
#<alt (+ 1 y)>
#<alt (+ 1 y)>
#<alt (+ 1 y)>
#<alt y>
#<alt (* y (+ 1 (/ 1 y)))>
#<alt (* y (+ 1 (/ 1 y)))>
#<alt (* y (+ 1 (/ 1 y)))>
#<alt y>
#<alt (* y (+ 1 (/ 1 y)))>
#<alt (* y (+ 1 (/ 1 y)))>
#<alt (* y (+ 1 (/ 1 y)))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt (* y (+ 1 x))>
#<alt y>
#<alt (+ y (* x y))>
#<alt (+ y (* x y))>
#<alt (+ y (* x y))>
#<alt (* x y)>
#<alt (* x (+ y (/ y x)))>
#<alt (* x (+ y (/ y x)))>
#<alt (* x (+ y (/ y x)))>
#<alt (* x y)>
#<alt (* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))>
#<alt (* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))>
#<alt (* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))>
#<alt 1>
#<alt (+ 1 x)>
#<alt (+ 1 x)>
#<alt (+ 1 x)>
#<alt x>
#<alt (* x (+ 1 (/ 1 x)))>
#<alt (* x (+ 1 (/ 1 x)))>
#<alt (* x (+ 1 (/ 1 x)))>
#<alt x>
#<alt (* x (+ 1 (/ 1 x)))>
#<alt (* x (+ 1 (/ 1 x)))>
#<alt (* x (+ 1 (/ 1 x)))>
Calls

24 calls:

TimeVariablePointExpression
0.0ms
x
@0
(* x (+ y 1))
0.0ms
x
@inf
(* x (+ y 1))
0.0ms
x
@-inf
(* x (+ y 1))
0.0ms
y
@-inf
(* x (+ y 1))
0.0ms
y
@0
(* x (+ y 1))

rewrite32.0ms (0.9%)

Algorithm
batch-egg-rewrite
Rules
44×*-lowering-*.f32
44×*-lowering-*.f64
40×fma-lowering-fma.f32
40×fma-define
40×fma-lowering-fma.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0819
12517
24117
36717
47217
07217
Stop Event
iter limit
saturated
Counts
5 → 44
Calls
Call 1
Inputs
(+ x y)
(* x (+ y 1))
(+ y 1)
(* y (+ x 1))
(+ x 1)
Outputs
(+.f64 x y)
(+.f64 y x)
(fma.f64 x #s(literal 1 binary64) y)
(fma.f64 y #s(literal 1 binary64) x)
(fma.f64 #s(literal 1 binary64) x y)
(fma.f64 #s(literal 1 binary64) y x)
(*.f64 (+.f64 x y) #s(literal 1 binary64))
(*.f64 #s(literal 1 binary64) (+.f64 x y))
(+.f64 x (*.f64 x y))
(+.f64 (*.f64 x y) x)
(fma.f64 x y x)
(fma.f64 x #s(literal 1 binary64) (*.f64 x y))
(fma.f64 y x x)
(fma.f64 #s(literal 1 binary64) x (*.f64 x y))
(fma.f64 #s(literal 1 binary64) (*.f64 x y) x)
(fma.f64 (*.f64 x y) #s(literal 1 binary64) x)
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(*.f64 #s(literal 1 binary64) (*.f64 x (+.f64 y #s(literal 1 binary64))))
(*.f64 (+.f64 y #s(literal 1 binary64)) x)
(*.f64 (*.f64 x (+.f64 y #s(literal 1 binary64))) #s(literal 1 binary64))
(+.f64 y #s(literal 1 binary64))
(+.f64 #s(literal 1 binary64) y)
(fma.f64 y #s(literal 1 binary64) #s(literal 1 binary64))
(fma.f64 #s(literal 1 binary64) y #s(literal 1 binary64))
(*.f64 #s(literal 1 binary64) (+.f64 y #s(literal 1 binary64)))
(*.f64 (+.f64 y #s(literal 1 binary64)) #s(literal 1 binary64))
(+.f64 y (*.f64 x y))
(+.f64 (*.f64 x y) y)
(fma.f64 x y y)
(fma.f64 y x y)
(fma.f64 y #s(literal 1 binary64) (*.f64 x y))
(fma.f64 #s(literal 1 binary64) y (*.f64 x y))
(fma.f64 #s(literal 1 binary64) (*.f64 x y) y)
(fma.f64 (*.f64 x y) #s(literal 1 binary64) y)
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(*.f64 #s(literal 1 binary64) (*.f64 y (+.f64 x #s(literal 1 binary64))))
(*.f64 (+.f64 x #s(literal 1 binary64)) y)
(*.f64 (*.f64 y (+.f64 x #s(literal 1 binary64))) #s(literal 1 binary64))
(+.f64 x #s(literal 1 binary64))
(+.f64 #s(literal 1 binary64) x)
(fma.f64 x #s(literal 1 binary64) #s(literal 1 binary64))
(fma.f64 #s(literal 1 binary64) x #s(literal 1 binary64))
(*.f64 #s(literal 1 binary64) (+.f64 x #s(literal 1 binary64)))
(*.f64 (+.f64 x #s(literal 1 binary64)) #s(literal 1 binary64))

simplify144.0ms (3.9%)

Algorithm
egg-herbie
Rules
2422×fnmadd-define
2028×fnmsub-define
1776×fma-lowering-fma.f32
1776×fma-lowering-fma.f64
1654×fmm-def
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
044344
1152302
2367302
3971302
43609302
56907302
08307302
Stop Event
iter limit
node limit
Counts
96 → 96
Calls
Call 1
Inputs
y
(+ x y)
(+ x y)
(+ x y)
x
(* x (+ 1 (/ y x)))
(* x (+ 1 (/ y x)))
(* x (+ 1 (/ y x)))
x
(* -1 (* x (- (* -1 (/ y x)) 1)))
(* -1 (* x (- (* -1 (/ y x)) 1)))
(* -1 (* x (- (* -1 (/ y x)) 1)))
x
(+ x y)
(+ x y)
(+ x y)
y
(* y (+ 1 (/ x y)))
(* y (+ 1 (/ x y)))
(* y (+ 1 (/ x y)))
y
(* -1 (* y (- (* -1 (/ x y)) 1)))
(* -1 (* y (- (* -1 (/ x y)) 1)))
(* -1 (* y (- (* -1 (/ x y)) 1)))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
x
(+ x (* x y))
(+ x (* x y))
(+ x (* x y))
(* x y)
(* y (+ x (/ x y)))
(* y (+ x (/ x y)))
(* y (+ x (/ x y)))
(* x y)
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
1
(+ 1 y)
(+ 1 y)
(+ 1 y)
y
(* y (+ 1 (/ 1 y)))
(* y (+ 1 (/ 1 y)))
(* y (+ 1 (/ 1 y)))
y
(* y (+ 1 (/ 1 y)))
(* y (+ 1 (/ 1 y)))
(* y (+ 1 (/ 1 y)))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
(* y (+ 1 x))
y
(+ y (* x y))
(+ y (* x y))
(+ y (* x y))
(* x y)
(* x (+ y (/ y x)))
(* x (+ y (/ y x)))
(* x (+ y (/ y x)))
(* x y)
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
1
(+ 1 x)
(+ 1 x)
(+ 1 x)
x
(* x (+ 1 (/ 1 x)))
(* x (+ 1 (/ 1 x)))
(* x (+ 1 (/ 1 x)))
x
(* x (+ 1 (/ 1 x)))
(* x (+ 1 (/ 1 x)))
(* x (+ 1 (/ 1 x)))
Outputs
y
(+ x y)
(+.f64 y x)
(+ x y)
(+.f64 y x)
(+ x y)
(+.f64 y x)
x
(* x (+ 1 (/ y x)))
(+.f64 y x)
(* x (+ 1 (/ y x)))
(+.f64 y x)
(* x (+ 1 (/ y x)))
(+.f64 y x)
x
(* -1 (* x (- (* -1 (/ y x)) 1)))
(+.f64 y x)
(* -1 (* x (- (* -1 (/ y x)) 1)))
(+.f64 y x)
(* -1 (* x (- (* -1 (/ y x)) 1)))
(+.f64 y x)
x
(+ x y)
(+.f64 y x)
(+ x y)
(+.f64 y x)
(+ x y)
(+.f64 y x)
y
(* y (+ 1 (/ x y)))
(+.f64 y x)
(* y (+ 1 (/ x y)))
(+.f64 y x)
(* y (+ 1 (/ x y)))
(+.f64 y x)
y
(* -1 (* y (- (* -1 (/ x y)) 1)))
(+.f64 y x)
(* -1 (* y (- (* -1 (/ x y)) 1)))
(+.f64 y x)
(* -1 (* y (- (* -1 (/ x y)) 1)))
(+.f64 y x)
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
x
(+ x (* x y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(+ x (* x y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(+ x (* x y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x y)
(*.f64 y x)
(* y (+ x (/ x y)))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* y (+ x (/ x y)))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* y (+ x (/ x y)))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x y)
(*.f64 y x)
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
1
#s(literal 1 binary64)
(+ 1 y)
(+.f64 y #s(literal 1 binary64))
(+ 1 y)
(+.f64 y #s(literal 1 binary64))
(+ 1 y)
(+.f64 y #s(literal 1 binary64))
y
(* y (+ 1 (/ 1 y)))
(+.f64 y #s(literal 1 binary64))
(* y (+ 1 (/ 1 y)))
(+.f64 y #s(literal 1 binary64))
(* y (+ 1 (/ 1 y)))
(+.f64 y #s(literal 1 binary64))
y
(* y (+ 1 (/ 1 y)))
(+.f64 y #s(literal 1 binary64))
(* y (+ 1 (/ 1 y)))
(+.f64 y #s(literal 1 binary64))
(* y (+ 1 (/ 1 y)))
(+.f64 y #s(literal 1 binary64))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* y (+ 1 x))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
y
(+ y (* x y))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(+ y (* x y))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(+ y (* x y))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* x y)
(*.f64 y x)
(* x (+ y (/ y x)))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* x (+ y (/ y x)))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* x (+ y (/ y x)))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* x y)
(*.f64 y x)
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(* -1 (* x (+ (* -1 y) (* -1 (/ y x)))))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
1
#s(literal 1 binary64)
(+ 1 x)
(+.f64 x #s(literal 1 binary64))
(+ 1 x)
(+.f64 x #s(literal 1 binary64))
(+ 1 x)
(+.f64 x #s(literal 1 binary64))
x
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))
x
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))
(* x (+ 1 (/ 1 x)))
(+.f64 x #s(literal 1 binary64))

eval14.0ms (0.4%)

Compiler

Compiled 630 to 61 computations (90.3% saved)

prune7.0ms (0.2%)

Pruning

7 alts after pruning (2 fresh and 5 done)

PrunedKeptTotal
New1382140
Fresh101
Picked055
Done000
Total1397146
Accuracy
100.0%
Counts
146 → 7
Alt Table
Click to see full alt table
StatusAccuracyProgram
65.6%
(+.f64 (*.f64 x y) x)
72.5%
(+.f64 x y)
61.9%
(*.f64 y (+.f64 x #s(literal 1 binary64)))
28.6%
(*.f64 y x)
65.6%
(*.f64 x (+.f64 y #s(literal 1 binary64)))
35.5%
y
38.9%
x
Compiler

Compiled 37 to 24 computations (35.1% saved)

simplify6.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 x y)
cost-diff0
(+.f64 (*.f64 x y) x)
cost-diff0
(*.f64 y x)
Rules
28×fma-define
28×*-lowering-*.f32
28×*-lowering-*.f64
16×fma-lowering-fma.f32
16×fma-lowering-fma.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0514
1714
21114
31514
42114
52714
64014
74414
84614
04614
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* y x)
y
x
(+ (* x y) x)
(* x y)
x
y
Outputs
(* y x)
(*.f64 y x)
y
x
(+ (* x y) x)
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x y)
(*.f64 y x)
x
y

localize229.0ms (6.2%)

Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 x y)
accuracy100.0%
(+.f64 (*.f64 x y) x)
accuracy100.0%
(*.f64 y x)
Results
222.0ms256×0valid
Compiler

Compiled 18 to 6 computations (66.7% saved)

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

series3.0ms (0.1%)

Counts
3 → 72
Calls
Call 1
Inputs
#<alt (* y x)>
#<alt (+ (* x y) x)>
#<alt (* x y)>
Outputs
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* x (+ 1 y))>
#<alt (* -1 (* x (- (* -1 y) 1)))>
#<alt (* -1 (* x (- (* -1 y) 1)))>
#<alt (* -1 (* x (- (* -1 y) 1)))>
#<alt (* -1 (* x (- (* -1 y) 1)))>
#<alt x>
#<alt (+ x (* x y))>
#<alt (+ x (* x y))>
#<alt (+ x (* x y))>
#<alt (* x y)>
#<alt (* y (+ x (/ x y)))>
#<alt (* y (+ x (/ x y)))>
#<alt (* y (+ x (/ x y)))>
#<alt (* x y)>
#<alt (* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))>
#<alt (* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))>
#<alt (* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
#<alt (* x y)>
Calls

18 calls:

TimeVariablePointExpression
1.0ms
y
@0
(* y x)
0.0ms
x
@inf
(* y x)
0.0ms
x
@0
(* y x)
0.0ms
y
@-inf
(* y x)
0.0ms
x
@-inf
(* y x)

rewrite15.0ms (0.4%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
0510
1710
21110
31510
42110
52710
64010
74410
84610
04610
Stop Event
iter limit
saturated
Counts
3 → 20
Calls
Call 1
Inputs
(* y x)
(+ (* x y) x)
(* x y)
Outputs
(*.f64 y x)
(*.f64 x y)
(*.f64 (*.f64 y x) #s(literal 1 binary64))
(*.f64 #s(literal 1 binary64) (*.f64 y x))
(+.f64 x (*.f64 y x))
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(fma.f64 x y x)
(fma.f64 x #s(literal 1 binary64) (*.f64 y x))
(fma.f64 (*.f64 y x) #s(literal 1 binary64) x)
(fma.f64 #s(literal 1 binary64) x (*.f64 y x))
(fma.f64 #s(literal 1 binary64) (*.f64 y x) x)
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(*.f64 (*.f64 x (+.f64 y #s(literal 1 binary64))) #s(literal 1 binary64))
(*.f64 #s(literal 1 binary64) (*.f64 x (+.f64 y #s(literal 1 binary64))))
(*.f64 (+.f64 y #s(literal 1 binary64)) x)
(*.f64 y x)
(*.f64 x y)
(*.f64 (*.f64 y x) #s(literal 1 binary64))
(*.f64 #s(literal 1 binary64) (*.f64 y x))

simplify130.0ms (3.5%)

Algorithm
egg-herbie
Rules
1788×fmsub-define
1778×fnmsub-define
1594×fmm-def
1442×fnmadd-define
1334×sum3-define
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
020256
166235
2169235
3410235
41278235
53400235
65862235
08106235
Stop Event
iter limit
node limit
Counts
72 → 72
Calls
Call 1
Inputs
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* x (+ 1 y))
(* -1 (* x (- (* -1 y) 1)))
(* -1 (* x (- (* -1 y) 1)))
(* -1 (* x (- (* -1 y) 1)))
(* -1 (* x (- (* -1 y) 1)))
x
(+ x (* x y))
(+ x (* x y))
(+ x (* x y))
(* x y)
(* y (+ x (/ x y)))
(* y (+ x (/ x y)))
(* y (+ x (/ x y)))
(* x y)
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
(* x y)
Outputs
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x (+ 1 y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* -1 (* x (- (* -1 y) 1)))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* -1 (* x (- (* -1 y) 1)))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* -1 (* x (- (* -1 y) 1)))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* -1 (* x (- (* -1 y) 1)))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
x
(+ x (* x y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(+ x (* x y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(+ x (* x y))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x y)
(*.f64 x y)
(* y (+ x (/ x y)))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* y (+ x (/ x y)))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* y (+ x (/ x y)))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x y)
(*.f64 x y)
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* -1 (* y (+ (* -1 x) (* -1 (/ x y)))))
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)
(* x y)
(*.f64 x y)

eval9.0ms (0.2%)

Compiler

Compiled 412 to 23 computations (94.4% saved)

prune5.0ms (0.1%)

Pruning

7 alts after pruning (0 fresh and 7 done)

PrunedKeptTotal
New92092
Fresh000
Picked022
Done055
Total92799
Accuracy
100.0%
Counts
99 → 7
Alt Table
Click to see full alt table
StatusAccuracyProgram
65.6%
(+.f64 (*.f64 x y) x)
72.5%
(+.f64 x y)
61.9%
(*.f64 y (+.f64 x #s(literal 1 binary64)))
28.6%
(*.f64 y x)
65.6%
(*.f64 x (+.f64 y #s(literal 1 binary64)))
35.5%
y
38.9%
x
Compiler

Compiled 81 to 38 computations (53.1% saved)

regimes12.0ms (0.3%)

Counts
10 → 1
Calls
Call 1
Inputs
x
y
(*.f64 y x)
(+.f64 x y)
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(+.f64 x (*.f64 y x))
(+.f64 (*.f64 x y) x)
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(+.f64 (+.f64 (*.f64 x y) x) y)
Outputs
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
Calls

3 calls:

4.0ms
(+.f64 (+.f64 (*.f64 x y) x) y)
4.0ms
y
4.0ms
x
Results
AccuracySegmentsBranch
100.0%1x
100.0%1y
100.0%1(+.f64 (+.f64 (*.f64 x y) x) y)
Compiler

Compiled 15 to 9 computations (40% saved)

regimes8.0ms (0.2%)

Counts
8 → 3
Calls
Call 1
Inputs
x
y
(*.f64 y x)
(+.f64 x y)
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(*.f64 y (+.f64 x #s(literal 1 binary64)))
(+.f64 x (*.f64 y x))
(+.f64 (*.f64 x y) x)
Outputs
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(+.f64 x y)
(*.f64 y (+.f64 x #s(literal 1 binary64)))
Calls

2 calls:

4.0ms
x
3.0ms
y
Results
AccuracySegmentsBranch
99.6%3x
99.0%3y
Compiler

Compiled 6 to 4 computations (33.3% saved)

regimes3.0ms (0.1%)

Counts
5 → 3
Calls
Call 1
Inputs
x
y
(*.f64 y x)
(+.f64 x y)
(*.f64 x (+.f64 y #s(literal 1 binary64)))
Outputs
(*.f64 x (+.f64 y #s(literal 1 binary64)))
(+.f64 x y)
(*.f64 y x)
Calls

1 calls:

2.0ms
x
Results
AccuracySegmentsBranch
99.3%3x
Compiler

Compiled 3 to 2 computations (33.3% saved)

regimes5.0ms (0.1%)

Counts
4 → 3
Calls
Call 1
Inputs
x
y
(*.f64 y x)
(+.f64 x y)
Outputs
(*.f64 y x)
(+.f64 x y)
(*.f64 y x)
Calls

2 calls:

2.0ms
y
2.0ms
x
Results
AccuracySegmentsBranch
82.3%4y
81.3%3x
Compiler

Compiled 6 to 4 computations (33.3% saved)

regimes5.0ms (0.1%)

Counts
3 → 5
Calls
Call 1
Inputs
x
y
(*.f64 y x)
Outputs
(*.f64 y x)
x
y
(*.f64 y x)
y
Calls

2 calls:

3.0ms
y
2.0ms
x
Results
AccuracySegmentsBranch
75.0%5y
72.7%4x
Compiler

Compiled 6 to 4 computations (33.3% saved)

regimes3.0ms (0.1%)

Counts
2 → 2
Calls
Call 1
Inputs
x
y
Outputs
x
y
Calls

2 calls:

2.0ms
y
2.0ms
x
Results
AccuracySegmentsBranch
64.0%2x
64.8%2y
Compiler

Compiled 6 to 4 computations (33.3% saved)

regimes3.0ms (0.1%)

Accuracy

Total 0.0b remaining (0%)

Threshold costs 0b (0%)

Counts
1 → 1
Calls
Call 1
Inputs
x
Outputs
x
Calls

2 calls:

1.0ms
y
1.0ms
x
Results
AccuracySegmentsBranch
38.9%1x
38.9%1y
Compiler

Compiled 6 to 4 computations (33.3% saved)

bsearch25.0ms (0.7%)

Algorithm
binary-search
Stop Event
narrow-enough
narrow-enough
Steps
TimeLeftRight
12.0ms
1.4976860732623858e-74
3.303271745319572e-67
11.0ms
-136674013.16548237
-260177.3312863542
Results
15.0ms272×0valid
Compiler

Compiled 252 to 179 computations (29% saved)

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

bsearch39.0ms (1%)

Algorithm
binary-search
Stop Event
narrow-enough
narrow-enough
Steps
TimeLeftRight
25.0ms
2.655207242750937e-16
3977.4113980081424
11.0ms
-136674013.16548237
-260177.3312863542
Results
28.0ms288×0valid
Compiler

Compiled 246 to 169 computations (31.3% saved)

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

bsearch34.0ms (0.9%)

Algorithm
binary-search
Stop Event
narrow-enough
narrow-enough
Steps
TimeLeftRight
20.0ms
2.655207242750937e-16
3977.4113980081424
12.0ms
-1.3557099223303704e+206
-9.028702133206576e+200
Results
15.0ms304×0valid
Compiler

Compiled 242 to 161 computations (33.5% saved)

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

bsearch67.0ms (1.8%)

Algorithm
binary-search
Stop Event
narrow-enough
narrow-enough
narrow-enough
narrow-enough
Steps
TimeLeftRight
15.0ms
5.625327507826649e+227
9.274559443366086e+232
10.0ms
3.643181032116375e+32
4.4646628529833375e+35
29.0ms
1.3365605469362515e-99
7.190370406161616e-93
10.0ms
-570.8132688321399
-0.011953375990276507
Results
47.0ms544×0valid
Compiler

Compiled 336 to 238 computations (29.2% saved)

Precisions
Click to see histograms. Total time spent on operations: 28.0ms
ival-add: 22.0ms (79.8% of total)
ival-mult: 5.0ms (18.1% 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
13.0ms
1.3365605469362515e-99
7.190370406161616e-93
Results
7.0ms144×0valid
Compiler

Compiled 86 to 63 computations (26.7% saved)

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

simplify8.0ms (0.2%)

Algorithm
egg-herbie
Rules
+-commutative_binary64
*-commutative_binary64
if-if-or-not_binary32
1-exp_binary64
1-exp_binary32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
03894
15494
Stop Event
saturated
Calls
Call 1
Inputs
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(if (<=.f64 x #s(literal -265000 binary64)) (*.f64 x (+.f64 y #s(literal 1 binary64))) (if (<=.f64 x #s(literal 4856672230564323/15177100720513508366558296147058741458143803430094840009779784451085189728165691392 binary64)) (+.f64 x y) (*.f64 y (+.f64 x #s(literal 1 binary64)))))
(if (<=.f64 x #s(literal -265000 binary64)) (*.f64 x (+.f64 y #s(literal 1 binary64))) (if (<=.f64 x #s(literal 3900 binary64)) (+.f64 x y) (*.f64 y x)))
(if (<=.f64 x #s(literal -1999999999999999977538215750126588953018689196590998459950069697680585223647237336888853938920013796903718410691112844909629852261514762472830507743890852478294863899324781023557461759604328517292041175040 binary64)) (*.f64 y x) (if (<=.f64 x #s(literal 3900 binary64)) (+.f64 x y) (*.f64 y x)))
(if (<=.f64 y #s(literal -1 binary64)) (*.f64 y x) (if (<=.f64 y #s(literal 32108980623861/4586997231980143023221641790604173881593129978336562247475177678773845752176969616140037106220251373109248 binary64)) x (if (<=.f64 y #s(literal 370000000000000000038961795825664 binary64)) y (if (<=.f64 y #s(literal 11400000000000000230145765901288544724528525197288330800977959689988778361935186731742188725303657296319856984776270440366985162998324120952749011322222465516652174348136314386732986100853046332376784062632071668395611620230362562560 binary64)) (*.f64 y x) y))))
(if (<=.f64 y #s(literal 2084331542211777/293567822846729153486185074598667128421960318613539983838411371441526128139326055432962374798096087878991872 binary64)) x y)
x
Outputs
(+.f64 x (*.f64 y (+.f64 x #s(literal 1 binary64))))
(if (<=.f64 x #s(literal -265000 binary64)) (*.f64 x (+.f64 y #s(literal 1 binary64))) (if (<=.f64 x #s(literal 4856672230564323/15177100720513508366558296147058741458143803430094840009779784451085189728165691392 binary64)) (+.f64 x y) (*.f64 y (+.f64 x #s(literal 1 binary64)))))
(if (<=.f64 x #s(literal -265000 binary64)) (*.f64 x (+.f64 y #s(literal 1 binary64))) (if (<=.f64 x #s(literal 3900 binary64)) (+.f64 x y) (*.f64 y x)))
(if (<=.f64 x #s(literal -265000 binary64)) (*.f64 x (+.f64 y #s(literal 1 binary64))) (if (<=.f64 x #s(literal 3900 binary64)) (+.f64 x y) (*.f64 x y)))
(if (<=.f64 x #s(literal -1999999999999999977538215750126588953018689196590998459950069697680585223647237336888853938920013796903718410691112844909629852261514762472830507743890852478294863899324781023557461759604328517292041175040 binary64)) (*.f64 y x) (if (<=.f64 x #s(literal 3900 binary64)) (+.f64 x y) (*.f64 y x)))
(if (<=.f64 x #s(literal -1999999999999999977538215750126588953018689196590998459950069697680585223647237336888853938920013796903718410691112844909629852261514762472830507743890852478294863899324781023557461759604328517292041175040 binary64)) (*.f64 x y) (if (<=.f64 x #s(literal 3900 binary64)) (+.f64 x y) (*.f64 x y)))
(if (<=.f64 y #s(literal -1 binary64)) (*.f64 y x) (if (<=.f64 y #s(literal 32108980623861/4586997231980143023221641790604173881593129978336562247475177678773845752176969616140037106220251373109248 binary64)) x (if (<=.f64 y #s(literal 370000000000000000038961795825664 binary64)) y (if (<=.f64 y #s(literal 11400000000000000230145765901288544724528525197288330800977959689988778361935186731742188725303657296319856984776270440366985162998324120952749011322222465516652174348136314386732986100853046332376784062632071668395611620230362562560 binary64)) (*.f64 y x) y))))
(if (<=.f64 y #s(literal -1 binary64)) (*.f64 x y) (if (<=.f64 y #s(literal 32108980623861/4586997231980143023221641790604173881593129978336562247475177678773845752176969616140037106220251373109248 binary64)) x (if (<=.f64 y #s(literal 370000000000000000038961795825664 binary64)) y (if (<=.f64 y #s(literal 11400000000000000230145765901288544724528525197288330800977959689988778361935186731742188725303657296319856984776270440366985162998324120952749011322222465516652174348136314386732986100853046332376784062632071668395611620230362562560 binary64)) (*.f64 x y) y))))
(if (<=.f64 y #s(literal 2084331542211777/293567822846729153486185074598667128421960318613539983838411371441526128139326055432962374798096087878991872 binary64)) x y)
x

soundness768.0ms (20.8%)

Rules
2422×fnmadd-define
2028×fnmsub-define
2004×fmsub-define
1956×fnmsub-define
1788×fmm-def
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
040290
1147249
2447247
31430247
44275247
08035247
056
1126
2266
3396
4506
5676
6936
71156
81226
91236
01236
044344
1152302
2367302
3971302
43609302
56907302
08307302
Stop Event
done
iter limit
node limit
iter limit
saturated
iter limit
node limit
Compiler

Compiled 320 to 186 computations (41.9% saved)

preprocess73.0ms (2%)

Remove

(sort x y)

Compiler

Compiled 250 to 110 computations (56% saved)

end0.0ms (0%)

Profiling

Loading profile data...