Expression, p14

Time bar (total: 5.1s)

analyze454.0ms (9%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%0%100%0%0%0%0
0%0%0%100%0%0%0%1
0%0%0%100%0%0%0%2
0%0%0%100%0%0%0%3
0%0%0%100%0%0%0%4
25%0%0%100%0%0%0%5
25%0%0%100%0%0%0%6
25%0%0%100%0%0%0%7
37.5%0%0%100%0%0%0%8
56.3%0%0%100%0%0%0%9
56.3%0%0%100%0%0%0%10
56.3%0%0%100%0%0%0%11
65.6%0%0%100%0%0%0%12
Compiler

Compiled 42 to 27 computations (35.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 222.0ms
ival-<=: 125.0ms (56.2% of total)
...c/correct-round.rkt:119:19: 37.0ms (16.6% of total)
ival-add: 24.0ms (10.8% of total)
ival-and: 16.0ms (7.2% of total)
ival-mult: 13.0ms (5.8% of total)
const: 7.0ms (3.1% of total)
backward-pass: 1.0ms (0.4% of total)

sample3.2s (62.6%)

Results
2.1s8256×0valid
Precisions
Click to see histograms. Total time spent on operations: 1.4s
ival-<=: 611.0ms (42.5% of total)
...c/correct-round.rkt:119:19: 362.0ms (25.2% of total)
ival-add: 307.0ms (21.3% of total)
ival-and: 74.0ms (5.1% of total)
ival-mult: 62.0ms (4.3% of total)
const: 19.0ms (1.3% of total)
backward-pass: 3.0ms (0.2% of total)
Bogosity

preprocess106.0ms (2.1%)

Algorithm
egg-herbie
Rules
3456×sum4-define
2016×fnmadd-define
1430×sum3-define
962×unsub-neg
750×distribute-lft-in
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
041100
1179100
262997
3199397
4608297
5693797
6737897
7740097
8740097
076
1196
2466
3966
41186
51196
01196
Stop Event
iter limit
saturated
node limit
Calls
Call 1
Inputs
(* a (+ (+ b c) d))
Outputs
(* a (+ (+ b c) d))
(*.f64 a (+.f64 b (+.f64 c d)))
Call 2
Inputs
(* a (+ (+ b c) d))
(* (neg a) (+ (+ b c) d))
(* a (+ (+ (neg b) c) d))
(* a (+ (+ b (neg c)) d))
(* a (+ (+ b c) (neg d)))
(neg (* (neg a) (+ (+ b c) d)))
(neg (* a (+ (+ (neg b) c) d)))
(neg (* a (+ (+ b (neg c)) d)))
(neg (* a (+ (+ b c) (neg d))))
(* b (+ (+ a c) d))
(* c (+ (+ b a) d))
(* d (+ (+ b c) a))
(* a (+ (+ c b) d))
(* a (+ (+ d c) b))
(* a (+ (+ b d) c))
Outputs
(* a (+ (+ b c) d))
(* a (sum3 b c d))
(* (neg a) (+ (+ b c) d))
(* (sum3 b c d) (neg a))
(* a (+ (+ (neg b) c) d))
(* a (+ d (- c b)))
(* a (+ (+ b (neg c)) d))
(* a (+ b (- d c)))
(* a (+ (+ b c) (neg d)))
(* a (+ b (- c d)))
(neg (* (neg a) (+ (+ b c) d)))
(* a (sum3 b c d))
(neg (* a (+ (+ (neg b) c) d)))
(* a (- (- b c) d))
(neg (* a (+ (+ b (neg c)) d)))
(* a (- c (+ b d)))
(neg (* a (+ (+ b c) (neg d))))
(* a (- d (+ b c)))
(* b (+ (+ a c) d))
(* b (sum3 a c d))
(* c (+ (+ b a) d))
(* c (sum3 a b d))
(* d (+ (+ b c) a))
(* d (sum3 a b c))
(* a (+ (+ c b) d))
(* a (sum3 b c d))
(* a (+ (+ d c) b))
(* a (sum3 b c d))
(* a (+ (+ b d) c))
(* a (sum3 b c d))
Symmetry

(negabs a)

(sort b c d)

explain122.0ms (2.4%)

FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
00-0-b
00-0-(+.f64 (+.f64 b c) d)
00-0-d
00-0-a
00-0-(*.f64 a (+.f64 (+.f64 b c) d))
00-0-(+.f64 b c)
00-0-c
Results
87.0ms508×0valid
1.0ms1valid
Compiler

Compiled 59 to 23 computations (61% saved)

Precisions
Click to see histograms. Total time spent on operations: 10.0ms
ival-add: 6.0ms (58.6% of total)
ival-mult: 4.0ms (39% of total)
const: 1.0ms (9.8% of total)
backward-pass: 0.0ms (0% of total)

eval0.0ms (0%)

Compiler

Compiled 11 to 7 computations (36.4% saved)

prune1.0ms (0%)

Alt Table
Click to see full alt table
StatusAccuracyProgram
99.9%
(*.f64 a (+.f64 (+.f64 b c) d))
Compiler

Compiled 11 to 7 computations (36.4% saved)

simplify21.0ms (0.4%)

Algorithm
egg-herbie
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
cost-diff0
(+.f64 b c)
cost-diff0
(+.f64 (+.f64 b c) d)
cost-diff0
(*.f64 a (+.f64 (+.f64 b c) d))
Rules
56×fma-define
48×fma-lowering-fma.f32
48×+-lowering-+.f64
48×+-lowering-+.f32
48×fma-lowering-fma.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0717
11917
24617
39617
411817
511917
011917
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* a (+ (+ b c) d))
a
(+ (+ b c) d)
(+ b c)
b
c
d
Outputs
(* a (+ (+ b c) d))
(*.f64 a (+.f64 b (+.f64 c d)))
a
(+ (+ b c) d)
(+.f64 b (+.f64 c d))
(+ b c)
(+.f64 b c)
b
c
d

localize31.0ms (0.6%)

Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(+.f64 b c)
accuracy100.0%
(+.f64 (+.f64 b c) d)
accuracy99.9%
(*.f64 a (+.f64 (+.f64 b c) d))
Results
23.0ms254×0valid
0.0ms1valid
Compiler

Compiled 24 to 8 computations (66.7% saved)

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

series8.0ms (0.1%)

Counts
3 → 108
Calls
Call 1
Inputs
#<alt (* a (+ (+ b c) d))>
#<alt (+ (+ b c) d)>
#<alt (+ b c)>
Outputs
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ c d))>
#<alt (+ (* a b) (* a (+ c d)))>
#<alt (+ (* a b) (* a (+ c d)))>
#<alt (+ (* a b) (* a (+ c d)))>
#<alt (* a b)>
#<alt (* b (+ a (/ (* a (+ c d)) b)))>
#<alt (* b (+ a (/ (* a (+ c d)) b)))>
#<alt (* b (+ a (/ (* a (+ c d)) b)))>
#<alt (* a b)>
#<alt (* -1 (* b (+ (* -1 a) (* -1 (/ (* a (+ c d)) b)))))>
#<alt (* -1 (* b (+ (* -1 a) (* -1 (/ (* a (+ c d)) b)))))>
#<alt (* -1 (* b (+ (* -1 a) (* -1 (/ (* a (+ c d)) b)))))>
#<alt (* a (+ b d))>
#<alt (+ (* a c) (* a (+ b d)))>
#<alt (+ (* a c) (* a (+ b d)))>
#<alt (+ (* a c) (* a (+ b d)))>
#<alt (* a c)>
#<alt (* c (+ a (/ (* a (+ b d)) c)))>
#<alt (* c (+ a (/ (* a (+ b d)) c)))>
#<alt (* c (+ a (/ (* a (+ b d)) c)))>
#<alt (* a c)>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))>
#<alt (* a (+ b c))>
#<alt (+ (* a d) (* a (+ b c)))>
#<alt (+ (* a d) (* a (+ b c)))>
#<alt (+ (* a d) (* a (+ b c)))>
#<alt (* a d)>
#<alt (* d (+ a (/ (* a (+ b c)) d)))>
#<alt (* d (+ a (/ (* a (+ b c)) d)))>
#<alt (* d (+ a (/ (* a (+ b c)) d)))>
#<alt (* a d)>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a (+ b c)) d)))))>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a (+ b c)) d)))))>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a (+ b c)) d)))))>
#<alt (+ c d)>
#<alt (+ b (+ c d))>
#<alt (+ b (+ c d))>
#<alt (+ b (+ c d))>
#<alt b>
#<alt (* b (+ 1 (+ (/ c b) (/ d b))))>
#<alt (* b (+ 1 (+ (/ c b) (/ d b))))>
#<alt (* b (+ 1 (+ (/ c b) (/ d b))))>
#<alt b>
#<alt (* -1 (* b (- (* -1 (/ (+ c d) b)) 1)))>
#<alt (* -1 (* b (- (* -1 (/ (+ c d) b)) 1)))>
#<alt (* -1 (* b (- (* -1 (/ (+ c d) b)) 1)))>
#<alt (+ b d)>
#<alt (+ b (+ c d))>
#<alt (+ b (+ c d))>
#<alt (+ b (+ c d))>
#<alt c>
#<alt (* c (+ 1 (+ (/ b c) (/ d c))))>
#<alt (* c (+ 1 (+ (/ b c) (/ d c))))>
#<alt (* c (+ 1 (+ (/ b c) (/ d c))))>
#<alt c>
#<alt (* -1 (* c (- (* -1 (/ (+ b d) c)) 1)))>
#<alt (* -1 (* c (- (* -1 (/ (+ b d) c)) 1)))>
#<alt (* -1 (* c (- (* -1 (/ (+ b d) c)) 1)))>
#<alt (+ b c)>
#<alt (+ b (+ c d))>
#<alt (+ b (+ c d))>
#<alt (+ b (+ c d))>
#<alt d>
#<alt (* d (+ 1 (+ (/ b d) (/ c d))))>
#<alt (* d (+ 1 (+ (/ b d) (/ c d))))>
#<alt (* d (+ 1 (+ (/ b d) (/ c d))))>
#<alt d>
#<alt (* -1 (* d (- (* -1 (/ (+ b c) d)) 1)))>
#<alt (* -1 (* d (- (* -1 (/ (+ b c) d)) 1)))>
#<alt (* -1 (* d (- (* -1 (/ (+ b c) d)) 1)))>
#<alt c>
#<alt (+ b c)>
#<alt (+ b c)>
#<alt (+ b c)>
#<alt b>
#<alt (* b (+ 1 (/ c b)))>
#<alt (* b (+ 1 (/ c b)))>
#<alt (* b (+ 1 (/ c b)))>
#<alt b>
#<alt (* -1 (* b (- (* -1 (/ c b)) 1)))>
#<alt (* -1 (* b (- (* -1 (/ c b)) 1)))>
#<alt (* -1 (* b (- (* -1 (/ c b)) 1)))>
#<alt b>
#<alt (+ b c)>
#<alt (+ b c)>
#<alt (+ b c)>
#<alt c>
#<alt (* c (+ 1 (/ b c)))>
#<alt (* c (+ 1 (/ b c)))>
#<alt (* c (+ 1 (/ b c)))>
#<alt c>
#<alt (* -1 (* c (- (* -1 (/ b c)) 1)))>
#<alt (* -1 (* c (- (* -1 (/ b c)) 1)))>
#<alt (* -1 (* c (- (* -1 (/ b c)) 1)))>
Calls

27 calls:

TimeVariablePointExpression
2.0ms
a
@-inf
(* a (+ (+ b c) d))
1.0ms
a
@0
(* a (+ (+ b c) d))
0.0ms
b
@-inf
(* a (+ (+ b c) d))
0.0ms
d
@0
(+ (+ b c) d)
0.0ms
b
@inf
(* a (+ (+ b c) d))

rewrite34.0ms (0.7%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
0713
11913
24613
39613
411813
511913
011913
Stop Event
iter limit
saturated
Counts
3 → 28
Calls
Call 1
Inputs
(* a (+ (+ b c) d))
(+ (+ b c) d)
(+ b c)
Outputs
(+.f64 (*.f64 a (+.f64 b c)) (*.f64 a d))
(+.f64 (*.f64 a d) (*.f64 a (+.f64 b c)))
(+.f64 (*.f64 a (+.f64 c d)) (*.f64 a b))
(+.f64 (*.f64 a b) (*.f64 a (+.f64 c d)))
(+.f64 (*.f64 a c) (*.f64 a (+.f64 b d)))
(+.f64 (*.f64 a (+.f64 b d)) (*.f64 a c))
(fma.f64 a b (*.f64 a (+.f64 c d)))
(fma.f64 a c (*.f64 a (+.f64 b d)))
(fma.f64 a (+.f64 b c) (*.f64 a d))
(fma.f64 a d (*.f64 a (+.f64 b c)))
(fma.f64 a (+.f64 c d) (*.f64 a b))
(fma.f64 a (+.f64 b d) (*.f64 a c))
(fma.f64 b a (*.f64 a (+.f64 c d)))
(fma.f64 c a (*.f64 a (+.f64 b d)))
(fma.f64 (+.f64 b c) a (*.f64 a d))
(fma.f64 d a (*.f64 a (+.f64 b c)))
(fma.f64 (+.f64 c d) a (*.f64 a b))
(fma.f64 (+.f64 b d) a (*.f64 a c))
(*.f64 a (+.f64 b (+.f64 c d)))
(*.f64 (+.f64 b (+.f64 c d)) a)
(+.f64 b (+.f64 c d))
(+.f64 c (+.f64 b d))
(+.f64 (+.f64 b c) d)
(+.f64 d (+.f64 b c))
(+.f64 (+.f64 c d) b)
(+.f64 (+.f64 b d) c)
(+.f64 b c)
(+.f64 c b)

simplify149.0ms (2.9%)

Algorithm
egg-herbie
Rules
2422×*-lowering-*.f32
2422×*-lowering-*.f64
1844×fnmadd-define
1184×/-lowering-/.f32
1184×/-lowering-/.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
084516
1292450
2886450
32781450
08007450
Stop Event
iter limit
node limit
Counts
108 → 108
Calls
Call 1
Inputs
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ c d))
(+ (* a b) (* a (+ c d)))
(+ (* a b) (* a (+ c d)))
(+ (* a b) (* a (+ c d)))
(* a b)
(* b (+ a (/ (* a (+ c d)) b)))
(* b (+ a (/ (* a (+ c d)) b)))
(* b (+ a (/ (* a (+ c d)) b)))
(* a b)
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a (+ c d)) b)))))
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a (+ c d)) b)))))
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a (+ c d)) b)))))
(* a (+ b d))
(+ (* a c) (* a (+ b d)))
(+ (* a c) (* a (+ b d)))
(+ (* a c) (* a (+ b d)))
(* a c)
(* c (+ a (/ (* a (+ b d)) c)))
(* c (+ a (/ (* a (+ b d)) c)))
(* c (+ a (/ (* a (+ b d)) c)))
(* a c)
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(* a (+ b c))
(+ (* a d) (* a (+ b c)))
(+ (* a d) (* a (+ b c)))
(+ (* a d) (* a (+ b c)))
(* a d)
(* d (+ a (/ (* a (+ b c)) d)))
(* d (+ a (/ (* a (+ b c)) d)))
(* d (+ a (/ (* a (+ b c)) d)))
(* a d)
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a (+ b c)) d)))))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a (+ b c)) d)))))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a (+ b c)) d)))))
(+ c d)
(+ b (+ c d))
(+ b (+ c d))
(+ b (+ c d))
b
(* b (+ 1 (+ (/ c b) (/ d b))))
(* b (+ 1 (+ (/ c b) (/ d b))))
(* b (+ 1 (+ (/ c b) (/ d b))))
b
(* -1 (* b (- (* -1 (/ (+ c d) b)) 1)))
(* -1 (* b (- (* -1 (/ (+ c d) b)) 1)))
(* -1 (* b (- (* -1 (/ (+ c d) b)) 1)))
(+ b d)
(+ b (+ c d))
(+ b (+ c d))
(+ b (+ c d))
c
(* c (+ 1 (+ (/ b c) (/ d c))))
(* c (+ 1 (+ (/ b c) (/ d c))))
(* c (+ 1 (+ (/ b c) (/ d c))))
c
(* -1 (* c (- (* -1 (/ (+ b d) c)) 1)))
(* -1 (* c (- (* -1 (/ (+ b d) c)) 1)))
(* -1 (* c (- (* -1 (/ (+ b d) c)) 1)))
(+ b c)
(+ b (+ c d))
(+ b (+ c d))
(+ b (+ c d))
d
(* d (+ 1 (+ (/ b d) (/ c d))))
(* d (+ 1 (+ (/ b d) (/ c d))))
(* d (+ 1 (+ (/ b d) (/ c d))))
d
(* -1 (* d (- (* -1 (/ (+ b c) d)) 1)))
(* -1 (* d (- (* -1 (/ (+ b c) d)) 1)))
(* -1 (* d (- (* -1 (/ (+ b c) d)) 1)))
c
(+ b c)
(+ b c)
(+ b c)
b
(* b (+ 1 (/ c b)))
(* b (+ 1 (/ c b)))
(* b (+ 1 (/ c b)))
b
(* -1 (* b (- (* -1 (/ c b)) 1)))
(* -1 (* b (- (* -1 (/ c b)) 1)))
(* -1 (* b (- (* -1 (/ c b)) 1)))
b
(+ b c)
(+ b c)
(+ b c)
c
(* c (+ 1 (/ b c)))
(* c (+ 1 (/ b c)))
(* c (+ 1 (/ b c)))
c
(* -1 (* c (- (* -1 (/ b c)) 1)))
(* -1 (* c (- (* -1 (/ b c)) 1)))
(* -1 (* c (- (* -1 (/ b c)) 1)))
Outputs
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ c d))
(*.f64 a (+.f64 c d))
(+ (* a b) (* a (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(+ (* a b) (* a (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(+ (* a b) (* a (+ c d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a b)
(*.f64 a b)
(* b (+ a (/ (* a (+ c d)) b)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* b (+ a (/ (* a (+ c d)) b)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* b (+ a (/ (* a (+ c d)) b)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a b)
(*.f64 a b)
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a (+ c d)) b)))))
(*.f64 a (+.f64 d (+.f64 b c)))
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a (+ c d)) b)))))
(*.f64 a (+.f64 d (+.f64 b c)))
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a (+ c d)) b)))))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b d))
(*.f64 a (+.f64 b d))
(+ (* a c) (* a (+ b d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(+ (* a c) (* a (+ b d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(+ (* a c) (* a (+ b d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a c)
(*.f64 a c)
(* c (+ a (/ (* a (+ b d)) c)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* c (+ a (/ (* a (+ b d)) c)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* c (+ a (/ (* a (+ b d)) c)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a c)
(*.f64 a c)
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(*.f64 a (+.f64 d (+.f64 b c)))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(*.f64 a (+.f64 d (+.f64 b c)))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a (+ b c))
(*.f64 a (+.f64 b c))
(+ (* a d) (* a (+ b c)))
(*.f64 a (+.f64 d (+.f64 b c)))
(+ (* a d) (* a (+ b c)))
(*.f64 a (+.f64 d (+.f64 b c)))
(+ (* a d) (* a (+ b c)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a d)
(*.f64 a d)
(* d (+ a (/ (* a (+ b c)) d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* d (+ a (/ (* a (+ b c)) d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* d (+ a (/ (* a (+ b c)) d)))
(*.f64 a (+.f64 d (+.f64 b c)))
(* a d)
(*.f64 a d)
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a (+ b c)) d)))))
(*.f64 a (+.f64 d (+.f64 b c)))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a (+ b c)) d)))))
(*.f64 a (+.f64 d (+.f64 b c)))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a (+ b c)) d)))))
(*.f64 a (+.f64 d (+.f64 b c)))
(+ c d)
(+.f64 c d)
(+ b (+ c d))
(+.f64 d (+.f64 b c))
(+ b (+ c d))
(+.f64 d (+.f64 b c))
(+ b (+ c d))
(+.f64 d (+.f64 b c))
b
(* b (+ 1 (+ (/ c b) (/ d b))))
(+.f64 d (+.f64 b c))
(* b (+ 1 (+ (/ c b) (/ d b))))
(+.f64 d (+.f64 b c))
(* b (+ 1 (+ (/ c b) (/ d b))))
(+.f64 d (+.f64 b c))
b
(* -1 (* b (- (* -1 (/ (+ c d) b)) 1)))
(+.f64 d (+.f64 b c))
(* -1 (* b (- (* -1 (/ (+ c d) b)) 1)))
(+.f64 d (+.f64 b c))
(* -1 (* b (- (* -1 (/ (+ c d) b)) 1)))
(+.f64 d (+.f64 b c))
(+ b d)
(+.f64 b d)
(+ b (+ c d))
(+.f64 d (+.f64 b c))
(+ b (+ c d))
(+.f64 d (+.f64 b c))
(+ b (+ c d))
(+.f64 d (+.f64 b c))
c
(* c (+ 1 (+ (/ b c) (/ d c))))
(+.f64 d (+.f64 b c))
(* c (+ 1 (+ (/ b c) (/ d c))))
(+.f64 d (+.f64 b c))
(* c (+ 1 (+ (/ b c) (/ d c))))
(+.f64 d (+.f64 b c))
c
(* -1 (* c (- (* -1 (/ (+ b d) c)) 1)))
(+.f64 d (+.f64 b c))
(* -1 (* c (- (* -1 (/ (+ b d) c)) 1)))
(+.f64 d (+.f64 b c))
(* -1 (* c (- (* -1 (/ (+ b d) c)) 1)))
(+.f64 d (+.f64 b c))
(+ b c)
(+.f64 b c)
(+ b (+ c d))
(+.f64 d (+.f64 b c))
(+ b (+ c d))
(+.f64 d (+.f64 b c))
(+ b (+ c d))
(+.f64 d (+.f64 b c))
d
(* d (+ 1 (+ (/ b d) (/ c d))))
(+.f64 d (+.f64 b c))
(* d (+ 1 (+ (/ b d) (/ c d))))
(+.f64 d (+.f64 b c))
(* d (+ 1 (+ (/ b d) (/ c d))))
(+.f64 d (+.f64 b c))
d
(* -1 (* d (- (* -1 (/ (+ b c) d)) 1)))
(+.f64 d (+.f64 b c))
(* -1 (* d (- (* -1 (/ (+ b c) d)) 1)))
(+.f64 d (+.f64 b c))
(* -1 (* d (- (* -1 (/ (+ b c) d)) 1)))
(+.f64 d (+.f64 b c))
c
(+ b c)
(+.f64 b c)
(+ b c)
(+.f64 b c)
(+ b c)
(+.f64 b c)
b
(* b (+ 1 (/ c b)))
(+.f64 b c)
(* b (+ 1 (/ c b)))
(+.f64 b c)
(* b (+ 1 (/ c b)))
(+.f64 b c)
b
(* -1 (* b (- (* -1 (/ c b)) 1)))
(+.f64 b c)
(* -1 (* b (- (* -1 (/ c b)) 1)))
(+.f64 b c)
(* -1 (* b (- (* -1 (/ c b)) 1)))
(+.f64 b c)
b
(+ b c)
(+.f64 b c)
(+ b c)
(+.f64 b c)
(+ b c)
(+.f64 b c)
c
(* c (+ 1 (/ b c)))
(+.f64 b c)
(* c (+ 1 (/ b c)))
(+.f64 b c)
(* c (+ 1 (/ b c)))
(+.f64 b c)
c
(* -1 (* c (- (* -1 (/ b c)) 1)))
(+.f64 b c)
(* -1 (* c (- (* -1 (/ b c)) 1)))
(+.f64 b c)
(* -1 (* c (- (* -1 (/ b c)) 1)))
(+.f64 b c)

eval13.0ms (0.3%)

Compiler

Compiled 908 to 47 computations (94.8% saved)

prune7.0ms (0.1%)

Pruning

4 alts after pruning (3 fresh and 1 done)

PrunedKeptTotal
New1333136
Fresh000
Picked011
Done000
Total1334137
Accuracy
100.0%
Counts
137 → 4
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(+.f64 (*.f64 a (+.f64 b d)) (*.f64 a c))
99.9%
(*.f64 a (+.f64 (+.f64 b c) d))
99.9%
(*.f64 a (+.f64 c d))
93.3%
(*.f64 a d)
Compiler

Compiled 40 to 26 computations (35% saved)

simplify7.0ms (0.1%)

Algorithm
egg-herbie
Localize:

Found 7 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 a c)
cost-diff0
(+.f64 b d)
cost-diff0
(*.f64 a (+.f64 b d))
cost-diff128
(+.f64 (*.f64 a (+.f64 b d)) (*.f64 a c))
cost-diff0
(+.f64 c d)
cost-diff0
(*.f64 a (+.f64 c d))
cost-diff0
(*.f64 a d)
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
01138
12837
25437
37837
49537
59637
09637
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* a d)
a
d
(* a (+ c d))
a
(+ c d)
c
d
(+ (* a (+ b d)) (* a c))
(* a (+ b d))
a
(+ b d)
b
d
(* a c)
c
Outputs
(* a d)
(*.f64 a d)
a
d
(* a (+ c d))
(*.f64 a (+.f64 d c))
a
(+ c d)
(+.f64 d c)
c
d
(+ (* a (+ b d)) (* a c))
(*.f64 a (+.f64 d (+.f64 c b)))
(* a (+ b d))
(*.f64 a (+.f64 d b))
a
(+ b d)
(+.f64 d b)
b
d
(* a c)
(*.f64 a c)
c

localize56.0ms (1.1%)

Localize:

Found 7 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(+.f64 b d)
accuracy100.0%
(*.f64 a c)
accuracy100.0%
(*.f64 a (+.f64 b d))
accuracy100.0%
(+.f64 (*.f64 a (+.f64 b d)) (*.f64 a c))
accuracy100.0%
(+.f64 c d)
accuracy99.9%
(*.f64 a (+.f64 c d))
accuracy100.0%
(*.f64 a d)
Results
45.0ms256×0valid
Compiler

Compiled 45 to 12 computations (73.3% saved)

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

series13.0ms (0.2%)

Counts
7 → 216
Calls
Call 1
Inputs
#<alt (* a d)>
#<alt (* a (+ c d))>
#<alt (+ c d)>
#<alt (+ (* a (+ b d)) (* a c))>
#<alt (* a (+ b d))>
#<alt (+ b d)>
#<alt (* a c)>
Outputs
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a d)>
#<alt (+ (* a c) (* a d))>
#<alt (+ (* a c) (* a d))>
#<alt (+ (* a c) (* a d))>
#<alt (* a c)>
#<alt (* c (+ a (/ (* a d) c)))>
#<alt (* c (+ a (/ (* a d) c)))>
#<alt (* c (+ a (/ (* a d) c)))>
#<alt (* a c)>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))>
#<alt (* a c)>
#<alt (+ (* a c) (* a d))>
#<alt (+ (* a c) (* a d))>
#<alt (+ (* a c) (* a d))>
#<alt (* a d)>
#<alt (* d (+ a (/ (* a c) d)))>
#<alt (* d (+ a (/ (* a c) d)))>
#<alt (* d (+ a (/ (* a c) d)))>
#<alt (* a d)>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))>
#<alt d>
#<alt (+ c d)>
#<alt (+ c d)>
#<alt (+ c d)>
#<alt c>
#<alt (* c (+ 1 (/ d c)))>
#<alt (* c (+ 1 (/ d c)))>
#<alt (* c (+ 1 (/ d c)))>
#<alt c>
#<alt (* -1 (* c (- (* -1 (/ d c)) 1)))>
#<alt (* -1 (* c (- (* -1 (/ d c)) 1)))>
#<alt (* -1 (* c (- (* -1 (/ d c)) 1)))>
#<alt c>
#<alt (+ c d)>
#<alt (+ c d)>
#<alt (+ c d)>
#<alt d>
#<alt (* d (+ 1 (/ c d)))>
#<alt (* d (+ 1 (/ c d)))>
#<alt (* d (+ 1 (/ c d)))>
#<alt d>
#<alt (* -1 (* d (- (* -1 (/ c d)) 1)))>
#<alt (* -1 (* d (- (* -1 (/ c d)) 1)))>
#<alt (* -1 (* d (- (* -1 (/ c d)) 1)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* a (+ b (+ c d)))>
#<alt (* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))>
#<alt (* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))>
#<alt (* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))>
#<alt (* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))>
#<alt (+ (* a c) (* a d))>
#<alt (+ (* a b) (+ (* a c) (* a d)))>
#<alt (+ (* a b) (+ (* a c) (* a d)))>
#<alt (+ (* a b) (+ (* a c) (* a d)))>
#<alt (* a b)>
#<alt (* b (+ a (+ (/ (* a c) b) (/ (* a d) b))))>
#<alt (* b (+ a (+ (/ (* a c) b) (/ (* a d) b))))>
#<alt (* b (+ a (+ (/ (* a c) b) (/ (* a d) b))))>
#<alt (* a b)>
#<alt (* -1 (* b (+ (* -1 a) (* -1 (/ (+ (* a c) (* a d)) b)))))>
#<alt (* -1 (* b (+ (* -1 a) (* -1 (/ (+ (* a c) (* a d)) b)))))>
#<alt (* -1 (* b (+ (* -1 a) (* -1 (/ (+ (* a c) (* a d)) b)))))>
#<alt (+ (* a b) (* a c))>
#<alt (+ (* a b) (+ (* a c) (* a d)))>
#<alt (+ (* a b) (+ (* a c) (* a d)))>
#<alt (+ (* a b) (+ (* a c) (* a d)))>
#<alt (* a d)>
#<alt (* d (+ a (+ (/ (* a b) d) (/ (* a c) d))))>
#<alt (* d (+ a (+ (/ (* a b) d) (/ (* a c) d))))>
#<alt (* d (+ a (+ (/ (* a b) d) (/ (* a c) d))))>
#<alt (* a d)>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (+ (* a b) (* a c)) d)))))>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (+ (* a b) (* a c)) d)))))>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (+ (* a b) (* a c)) d)))))>
#<alt (* a (+ b d))>
#<alt (+ (* a c) (* a (+ b d)))>
#<alt (+ (* a c) (* a (+ b d)))>
#<alt (+ (* a c) (* a (+ b d)))>
#<alt (* a c)>
#<alt (* c (+ a (/ (* a (+ b d)) c)))>
#<alt (* c (+ a (/ (* a (+ b d)) c)))>
#<alt (* c (+ a (/ (* a (+ b d)) c)))>
#<alt (* a c)>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))>
#<alt (* a (+ b d))>
#<alt (* a (+ b d))>
#<alt (* a (+ b d))>
#<alt (* a (+ b d))>
#<alt (* a (+ b d))>
#<alt (* a (+ b d))>
#<alt (* a (+ b d))>
#<alt (* a (+ b d))>
#<alt (* a (+ b d))>
#<alt (* a (+ b d))>
#<alt (* a (+ b d))>
#<alt (* a (+ b d))>
#<alt (* a d)>
#<alt (+ (* a b) (* a d))>
#<alt (+ (* a b) (* a d))>
#<alt (+ (* a b) (* a d))>
#<alt (* a b)>
#<alt (* b (+ a (/ (* a d) b)))>
#<alt (* b (+ a (/ (* a d) b)))>
#<alt (* b (+ a (/ (* a d) b)))>
#<alt (* a b)>
#<alt (* -1 (* b (+ (* -1 a) (* -1 (/ (* a d) b)))))>
#<alt (* -1 (* b (+ (* -1 a) (* -1 (/ (* a d) b)))))>
#<alt (* -1 (* b (+ (* -1 a) (* -1 (/ (* a d) b)))))>
#<alt (* a b)>
#<alt (+ (* a b) (* a d))>
#<alt (+ (* a b) (* a d))>
#<alt (+ (* a b) (* a d))>
#<alt (* a d)>
#<alt (* d (+ a (/ (* a b) d)))>
#<alt (* d (+ a (/ (* a b) d)))>
#<alt (* d (+ a (/ (* a b) d)))>
#<alt (* a d)>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a b) d)))))>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a b) d)))))>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a b) d)))))>
#<alt d>
#<alt (+ b d)>
#<alt (+ b d)>
#<alt (+ b d)>
#<alt b>
#<alt (* b (+ 1 (/ d b)))>
#<alt (* b (+ 1 (/ d b)))>
#<alt (* b (+ 1 (/ d b)))>
#<alt b>
#<alt (* -1 (* b (- (* -1 (/ d b)) 1)))>
#<alt (* -1 (* b (- (* -1 (/ d b)) 1)))>
#<alt (* -1 (* b (- (* -1 (/ d b)) 1)))>
#<alt b>
#<alt (+ b d)>
#<alt (+ b d)>
#<alt (+ b d)>
#<alt d>
#<alt (* d (+ 1 (/ b d)))>
#<alt (* d (+ 1 (/ b d)))>
#<alt (* d (+ 1 (/ b d)))>
#<alt d>
#<alt (* -1 (* d (- (* -1 (/ b d)) 1)))>
#<alt (* -1 (* d (- (* -1 (/ b d)) 1)))>
#<alt (* -1 (* d (- (* -1 (/ b d)) 1)))>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
Calls

54 calls:

TimeVariablePointExpression
2.0ms
d
@-inf
(+ (* a (+ b d)) (* a c))
1.0ms
d
@inf
(* a (+ c d))
1.0ms
a
@-inf
(+ (* a (+ b d)) (* a c))
1.0ms
a
@0
(+ (* a (+ b d)) (* a c))
1.0ms
a
@inf
(+ (* a (+ b d)) (* a c))

rewrite18.0ms (0.4%)

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
01129
12828
25428
37828
49528
59628
09628
Stop Event
iter limit
saturated
Counts
7 → 44
Calls
Call 1
Inputs
(* a d)
(* a (+ c d))
(+ c d)
(+ (* a (+ b d)) (* a c))
(* a (+ b d))
(+ b d)
(* a c)
Outputs
(*.f64 a d)
(*.f64 d a)
(+.f64 (*.f64 a d) (*.f64 a c))
(+.f64 (*.f64 a c) (*.f64 a d))
(fma.f64 a d (*.f64 a c))
(fma.f64 a c (*.f64 a d))
(fma.f64 d a (*.f64 a c))
(fma.f64 c a (*.f64 a d))
(*.f64 a (+.f64 d c))
(*.f64 (+.f64 d c) a)
(+.f64 d c)
(+.f64 c d)
(+.f64 (*.f64 a d) (*.f64 a (+.f64 c b)))
(+.f64 (*.f64 a (+.f64 d c)) (*.f64 a b))
(+.f64 (*.f64 a (+.f64 d b)) (*.f64 a c))
(+.f64 (*.f64 a c) (*.f64 a (+.f64 d b)))
(+.f64 (*.f64 a b) (*.f64 a (+.f64 d c)))
(+.f64 (*.f64 a (+.f64 c b)) (*.f64 a d))
(fma.f64 a d (*.f64 a (+.f64 c b)))
(fma.f64 a c (*.f64 a (+.f64 d b)))
(fma.f64 a (+.f64 d c) (*.f64 a b))
(fma.f64 a b (*.f64 a (+.f64 d c)))
(fma.f64 a (+.f64 d b) (*.f64 a c))
(fma.f64 a (+.f64 c b) (*.f64 a d))
(fma.f64 d a (*.f64 a (+.f64 c b)))
(fma.f64 c a (*.f64 a (+.f64 d b)))
(fma.f64 (+.f64 d c) a (*.f64 a b))
(fma.f64 b a (*.f64 a (+.f64 d c)))
(fma.f64 (+.f64 d b) a (*.f64 a c))
(fma.f64 (+.f64 c b) a (*.f64 a d))
(*.f64 a (+.f64 d (+.f64 c b)))
(*.f64 (+.f64 d (+.f64 c b)) a)
(+.f64 (*.f64 a d) (*.f64 a b))
(+.f64 (*.f64 a b) (*.f64 a d))
(fma.f64 a d (*.f64 a b))
(fma.f64 a b (*.f64 a d))
(fma.f64 d a (*.f64 a b))
(fma.f64 b a (*.f64 a d))
(*.f64 a (+.f64 d b))
(*.f64 (+.f64 d b) a)
(+.f64 d b)
(+.f64 b d)
(*.f64 a c)
(*.f64 c a)

simplify165.0ms (3.3%)

Algorithm
egg-herbie
Rules
2464×*-lowering-*.f32
2464×*-lowering-*.f64
1938×fmsub-define
1554×fnmsub-define
1404×fmm-def
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0106906
1407867
21318867
34240867
08485867
Stop Event
iter limit
node limit
Counts
216 → 216
Calls
Call 1
Inputs
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a d)
(+ (* a c) (* a d))
(+ (* a c) (* a d))
(+ (* a c) (* a d))
(* a c)
(* c (+ a (/ (* a d) c)))
(* c (+ a (/ (* a d) c)))
(* c (+ a (/ (* a d) c)))
(* a c)
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(* a c)
(+ (* a c) (* a d))
(+ (* a c) (* a d))
(+ (* a c) (* a d))
(* a d)
(* d (+ a (/ (* a c) d)))
(* d (+ a (/ (* a c) d)))
(* d (+ a (/ (* a c) d)))
(* a d)
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
d
(+ c d)
(+ c d)
(+ c d)
c
(* c (+ 1 (/ d c)))
(* c (+ 1 (/ d c)))
(* c (+ 1 (/ d c)))
c
(* -1 (* c (- (* -1 (/ d c)) 1)))
(* -1 (* c (- (* -1 (/ d c)) 1)))
(* -1 (* c (- (* -1 (/ d c)) 1)))
c
(+ c d)
(+ c d)
(+ c d)
d
(* d (+ 1 (/ c d)))
(* d (+ 1 (/ c d)))
(* d (+ 1 (/ c d)))
d
(* -1 (* d (- (* -1 (/ c d)) 1)))
(* -1 (* d (- (* -1 (/ c d)) 1)))
(* -1 (* d (- (* -1 (/ c d)) 1)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* a (+ b (+ c d)))
(* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))
(* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))
(* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))
(* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))
(+ (* a c) (* a d))
(+ (* a b) (+ (* a c) (* a d)))
(+ (* a b) (+ (* a c) (* a d)))
(+ (* a b) (+ (* a c) (* a d)))
(* a b)
(* b (+ a (+ (/ (* a c) b) (/ (* a d) b))))
(* b (+ a (+ (/ (* a c) b) (/ (* a d) b))))
(* b (+ a (+ (/ (* a c) b) (/ (* a d) b))))
(* a b)
(* -1 (* b (+ (* -1 a) (* -1 (/ (+ (* a c) (* a d)) b)))))
(* -1 (* b (+ (* -1 a) (* -1 (/ (+ (* a c) (* a d)) b)))))
(* -1 (* b (+ (* -1 a) (* -1 (/ (+ (* a c) (* a d)) b)))))
(+ (* a b) (* a c))
(+ (* a b) (+ (* a c) (* a d)))
(+ (* a b) (+ (* a c) (* a d)))
(+ (* a b) (+ (* a c) (* a d)))
(* a d)
(* d (+ a (+ (/ (* a b) d) (/ (* a c) d))))
(* d (+ a (+ (/ (* a b) d) (/ (* a c) d))))
(* d (+ a (+ (/ (* a b) d) (/ (* a c) d))))
(* a d)
(* -1 (* d (+ (* -1 a) (* -1 (/ (+ (* a b) (* a c)) d)))))
(* -1 (* d (+ (* -1 a) (* -1 (/ (+ (* a b) (* a c)) d)))))
(* -1 (* d (+ (* -1 a) (* -1 (/ (+ (* a b) (* a c)) d)))))
(* a (+ b d))
(+ (* a c) (* a (+ b d)))
(+ (* a c) (* a (+ b d)))
(+ (* a c) (* a (+ b d)))
(* a c)
(* c (+ a (/ (* a (+ b d)) c)))
(* c (+ a (/ (* a (+ b d)) c)))
(* c (+ a (/ (* a (+ b d)) c)))
(* a c)
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(* a (+ b d))
(* a (+ b d))
(* a (+ b d))
(* a (+ b d))
(* a (+ b d))
(* a (+ b d))
(* a (+ b d))
(* a (+ b d))
(* a (+ b d))
(* a (+ b d))
(* a (+ b d))
(* a (+ b d))
(* a d)
(+ (* a b) (* a d))
(+ (* a b) (* a d))
(+ (* a b) (* a d))
(* a b)
(* b (+ a (/ (* a d) b)))
(* b (+ a (/ (* a d) b)))
(* b (+ a (/ (* a d) b)))
(* a b)
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a d) b)))))
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a d) b)))))
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a d) b)))))
(* a b)
(+ (* a b) (* a d))
(+ (* a b) (* a d))
(+ (* a b) (* a d))
(* a d)
(* d (+ a (/ (* a b) d)))
(* d (+ a (/ (* a b) d)))
(* d (+ a (/ (* a b) d)))
(* a d)
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a b) d)))))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a b) d)))))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a b) d)))))
d
(+ b d)
(+ b d)
(+ b d)
b
(* b (+ 1 (/ d b)))
(* b (+ 1 (/ d b)))
(* b (+ 1 (/ d b)))
b
(* -1 (* b (- (* -1 (/ d b)) 1)))
(* -1 (* b (- (* -1 (/ d b)) 1)))
(* -1 (* b (- (* -1 (/ d b)) 1)))
b
(+ b d)
(+ b d)
(+ b d)
d
(* d (+ 1 (/ b d)))
(* d (+ 1 (/ b d)))
(* d (+ 1 (/ b d)))
d
(* -1 (* d (- (* -1 (/ b d)) 1)))
(* -1 (* d (- (* -1 (/ b d)) 1)))
(* -1 (* d (- (* -1 (/ b d)) 1)))
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
Outputs
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a (+ c d))
(*.f64 a (+.f64 d c))
(* a d)
(*.f64 a d)
(+ (* a c) (* a d))
(*.f64 a (+.f64 d c))
(+ (* a c) (* a d))
(*.f64 a (+.f64 d c))
(+ (* a c) (* a d))
(*.f64 a (+.f64 d c))
(* a c)
(*.f64 a c)
(* c (+ a (/ (* a d) c)))
(*.f64 a (+.f64 d c))
(* c (+ a (/ (* a d) c)))
(*.f64 a (+.f64 d c))
(* c (+ a (/ (* a d) c)))
(*.f64 a (+.f64 d c))
(* a c)
(*.f64 a c)
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(*.f64 a (+.f64 d c))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(*.f64 a (+.f64 d c))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(*.f64 a (+.f64 d c))
(* a c)
(*.f64 a c)
(+ (* a c) (* a d))
(*.f64 a (+.f64 d c))
(+ (* a c) (* a d))
(*.f64 a (+.f64 d c))
(+ (* a c) (* a d))
(*.f64 a (+.f64 d c))
(* a d)
(*.f64 a d)
(* d (+ a (/ (* a c) d)))
(*.f64 a (+.f64 d c))
(* d (+ a (/ (* a c) d)))
(*.f64 a (+.f64 d c))
(* d (+ a (/ (* a c) d)))
(*.f64 a (+.f64 d c))
(* a d)
(*.f64 a d)
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
(*.f64 a (+.f64 d c))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
(*.f64 a (+.f64 d c))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
(*.f64 a (+.f64 d c))
d
(+ c d)
(+.f64 d c)
(+ c d)
(+.f64 d c)
(+ c d)
(+.f64 d c)
c
(* c (+ 1 (/ d c)))
(+.f64 d c)
(* c (+ 1 (/ d c)))
(+.f64 d c)
(* c (+ 1 (/ d c)))
(+.f64 d c)
c
(* -1 (* c (- (* -1 (/ d c)) 1)))
(+.f64 d c)
(* -1 (* c (- (* -1 (/ d c)) 1)))
(+.f64 d c)
(* -1 (* c (- (* -1 (/ d c)) 1)))
(+.f64 d c)
c
(+ c d)
(+.f64 d c)
(+ c d)
(+.f64 d c)
(+ c d)
(+.f64 d c)
d
(* d (+ 1 (/ c d)))
(+.f64 d c)
(* d (+ 1 (/ c d)))
(+.f64 d c)
(* d (+ 1 (/ c d)))
(+.f64 d c)
d
(* -1 (* d (- (* -1 (/ c d)) 1)))
(+.f64 d c)
(* -1 (* d (- (* -1 (/ c d)) 1)))
(+.f64 d c)
(* -1 (* d (- (* -1 (/ c d)) 1)))
(+.f64 d c)
(* a (+ b (+ c d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a (+ b (+ c d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* -1 (* a (+ (* -1 c) (* -1 (+ b d)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(+ (* a c) (* a d))
(*.f64 a (+.f64 d c))
(+ (* a b) (+ (* a c) (* a d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(+ (* a b) (+ (* a c) (* a d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(+ (* a b) (+ (* a c) (* a d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a b)
(*.f64 a b)
(* b (+ a (+ (/ (* a c) b) (/ (* a d) b))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* b (+ a (+ (/ (* a c) b) (/ (* a d) b))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* b (+ a (+ (/ (* a c) b) (/ (* a d) b))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a b)
(*.f64 a b)
(* -1 (* b (+ (* -1 a) (* -1 (/ (+ (* a c) (* a d)) b)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* -1 (* b (+ (* -1 a) (* -1 (/ (+ (* a c) (* a d)) b)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* -1 (* b (+ (* -1 a) (* -1 (/ (+ (* a c) (* a d)) b)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(+ (* a b) (* a c))
(*.f64 a (+.f64 c b))
(+ (* a b) (+ (* a c) (* a d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(+ (* a b) (+ (* a c) (* a d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(+ (* a b) (+ (* a c) (* a d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a d)
(*.f64 a d)
(* d (+ a (+ (/ (* a b) d) (/ (* a c) d))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* d (+ a (+ (/ (* a b) d) (/ (* a c) d))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* d (+ a (+ (/ (* a b) d) (/ (* a c) d))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a d)
(*.f64 a d)
(* -1 (* d (+ (* -1 a) (* -1 (/ (+ (* a b) (* a c)) d)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* -1 (* d (+ (* -1 a) (* -1 (/ (+ (* a b) (* a c)) d)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* -1 (* d (+ (* -1 a) (* -1 (/ (+ (* a b) (* a c)) d)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(+ (* a c) (* a (+ b d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(+ (* a c) (* a (+ b d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(+ (* a c) (* a (+ b d)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a c)
(*.f64 a c)
(* c (+ a (/ (* a (+ b d)) c)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* c (+ a (/ (* a (+ b d)) c)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* c (+ a (/ (* a (+ b d)) c)))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a c)
(*.f64 a c)
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a (+ b d)) c)))))
(*.f64 a (+.f64 c (+.f64 d b)))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a (+ b d))
(*.f64 a (+.f64 d b))
(* a d)
(*.f64 a d)
(+ (* a b) (* a d))
(*.f64 a (+.f64 d b))
(+ (* a b) (* a d))
(*.f64 a (+.f64 d b))
(+ (* a b) (* a d))
(*.f64 a (+.f64 d b))
(* a b)
(*.f64 a b)
(* b (+ a (/ (* a d) b)))
(*.f64 a (+.f64 d b))
(* b (+ a (/ (* a d) b)))
(*.f64 a (+.f64 d b))
(* b (+ a (/ (* a d) b)))
(*.f64 a (+.f64 d b))
(* a b)
(*.f64 a b)
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a d) b)))))
(*.f64 a (+.f64 d b))
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a d) b)))))
(*.f64 a (+.f64 d b))
(* -1 (* b (+ (* -1 a) (* -1 (/ (* a d) b)))))
(*.f64 a (+.f64 d b))
(* a b)
(*.f64 a b)
(+ (* a b) (* a d))
(*.f64 a (+.f64 d b))
(+ (* a b) (* a d))
(*.f64 a (+.f64 d b))
(+ (* a b) (* a d))
(*.f64 a (+.f64 d b))
(* a d)
(*.f64 a d)
(* d (+ a (/ (* a b) d)))
(*.f64 a (+.f64 d b))
(* d (+ a (/ (* a b) d)))
(*.f64 a (+.f64 d b))
(* d (+ a (/ (* a b) d)))
(*.f64 a (+.f64 d b))
(* a d)
(*.f64 a d)
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a b) d)))))
(*.f64 a (+.f64 d b))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a b) d)))))
(*.f64 a (+.f64 d b))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a b) d)))))
(*.f64 a (+.f64 d b))
d
(+ b d)
(+.f64 d b)
(+ b d)
(+.f64 d b)
(+ b d)
(+.f64 d b)
b
(* b (+ 1 (/ d b)))
(+.f64 d b)
(* b (+ 1 (/ d b)))
(+.f64 d b)
(* b (+ 1 (/ d b)))
(+.f64 d b)
b
(* -1 (* b (- (* -1 (/ d b)) 1)))
(+.f64 d b)
(* -1 (* b (- (* -1 (/ d b)) 1)))
(+.f64 d b)
(* -1 (* b (- (* -1 (/ d b)) 1)))
(+.f64 d b)
b
(+ b d)
(+.f64 d b)
(+ b d)
(+.f64 d b)
(+ b d)
(+.f64 d b)
d
(* d (+ 1 (/ b d)))
(+.f64 d b)
(* d (+ 1 (/ b d)))
(+.f64 d b)
(* d (+ 1 (/ b d)))
(+.f64 d b)
d
(* -1 (* d (- (* -1 (/ b d)) 1)))
(+.f64 d b)
(* -1 (* d (- (* -1 (/ b d)) 1)))
(+.f64 d b)
(* -1 (* d (- (* -1 (/ b d)) 1)))
(+.f64 d b)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)

eval23.0ms (0.5%)

Compiler

Compiled 1734 to 66 computations (96.2% saved)

prune10.0ms (0.2%)

Pruning

4 alts after pruning (1 fresh and 3 done)

PrunedKeptTotal
New2591260
Fresh000
Picked123
Done011
Total2604264
Accuracy
100.0%
Counts
264 → 4
Alt Table
Click to see full alt table
StatusAccuracyProgram
99.9%
(+.f64 (*.f64 a d) (*.f64 a c))
99.9%
(*.f64 a (+.f64 (+.f64 b c) d))
99.9%
(*.f64 a (+.f64 c d))
93.3%
(*.f64 a d)
Compiler

Compiled 38 to 25 computations (34.2% saved)

simplify5.0ms (0.1%)

Algorithm
egg-herbie
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 a c)
cost-diff0
(*.f64 a d)
cost-diff128
(+.f64 (*.f64 a d) (*.f64 a c))
Rules
12×*-lowering-*.f32
12×*-lowering-*.f64
fma-lowering-fma.f32
fma-define
+-lowering-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0614
11214
21814
01814
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(+ (* a d) (* a c))
(* a d)
a
d
(* a c)
c
Outputs
(+ (* a d) (* a c))
(*.f64 a (+.f64 d c))
(* a d)
(*.f64 a d)
a
d
(* a c)
(*.f64 a c)
c

localize31.0ms (0.6%)

Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 a d)
accuracy100.0%
(*.f64 a c)
accuracy100.0%
(+.f64 (*.f64 a d) (*.f64 a c))
Results
22.0ms256×0valid
Compiler

Compiled 21 to 8 computations (61.9% saved)

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

series1.0ms (0%)

Counts
3 → 84
Calls
Call 1
Inputs
#<alt (+ (* a d) (* a c))>
#<alt (* a d)>
#<alt (* a c)>
Outputs
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* a (+ c d))>
#<alt (* -1 (* a (+ (* -1 c) (* -1 d))))>
#<alt (* -1 (* a (+ (* -1 c) (* -1 d))))>
#<alt (* -1 (* a (+ (* -1 c) (* -1 d))))>
#<alt (* -1 (* a (+ (* -1 c) (* -1 d))))>
#<alt (* a c)>
#<alt (+ (* a c) (* a d))>
#<alt (+ (* a c) (* a d))>
#<alt (+ (* a c) (* a d))>
#<alt (* a d)>
#<alt (* d (+ a (/ (* a c) d)))>
#<alt (* d (+ a (/ (* a c) d)))>
#<alt (* d (+ a (/ (* a c) d)))>
#<alt (* a d)>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))>
#<alt (* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))>
#<alt (* a d)>
#<alt (+ (* a c) (* a d))>
#<alt (+ (* a c) (* a d))>
#<alt (+ (* a c) (* a d))>
#<alt (* a c)>
#<alt (* c (+ a (/ (* a d) c)))>
#<alt (* c (+ a (/ (* a d) c)))>
#<alt (* c (+ a (/ (* a d) c)))>
#<alt (* a c)>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))>
#<alt (* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a d)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
#<alt (* a c)>
Calls

21 calls:

TimeVariablePointExpression
0.0ms
c
@0
(+ (* a d) (* a c))
0.0ms
a
@-inf
(+ (* a d) (* a c))
0.0ms
a
@0
(+ (* a d) (* a c))
0.0ms
d
@inf
(+ (* a d) (* a c))
0.0ms
d
@-inf
(+ (* a d) (* a c))

rewrite17.0ms (0.3%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
0611
11211
21811
01811
Stop Event
iter limit
saturated
Counts
3 → 12
Calls
Call 1
Inputs
(+ (* a d) (* a c))
(* a d)
(* a c)
Outputs
(+.f64 (*.f64 a d) (*.f64 a c))
(+.f64 (*.f64 a c) (*.f64 a d))
(fma.f64 a d (*.f64 a c))
(fma.f64 a c (*.f64 a d))
(fma.f64 d a (*.f64 a c))
(fma.f64 c a (*.f64 a d))
(*.f64 a (+.f64 d c))
(*.f64 (+.f64 d c) a)
(*.f64 a d)
(*.f64 d a)
(*.f64 a c)
(*.f64 c a)

simplify107.0ms (2.1%)

Algorithm
egg-herbie
Rules
1776×fnmadd-define
1712×fmsub-define
1664×fnmsub-define
1504×fmm-def
1410×*-lowering-*.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
029312
1107312
2334312
3929312
43254312
08366312
Stop Event
iter limit
node limit
Counts
84 → 84
Calls
Call 1
Inputs
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* a (+ c d))
(* -1 (* a (+ (* -1 c) (* -1 d))))
(* -1 (* a (+ (* -1 c) (* -1 d))))
(* -1 (* a (+ (* -1 c) (* -1 d))))
(* -1 (* a (+ (* -1 c) (* -1 d))))
(* a c)
(+ (* a c) (* a d))
(+ (* a c) (* a d))
(+ (* a c) (* a d))
(* a d)
(* d (+ a (/ (* a c) d)))
(* d (+ a (/ (* a c) d)))
(* d (+ a (/ (* a c) d)))
(* a d)
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
(* a d)
(+ (* a c) (* a d))
(+ (* a c) (* a d))
(+ (* a c) (* a d))
(* a c)
(* c (+ a (/ (* a d) c)))
(* c (+ a (/ (* a d) c)))
(* c (+ a (/ (* a d) c)))
(* a c)
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a d)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
(* a c)
Outputs
(* a (+ c d))
(*.f64 a (+.f64 c d))
(* a (+ c d))
(*.f64 a (+.f64 c d))
(* a (+ c d))
(*.f64 a (+.f64 c d))
(* a (+ c d))
(*.f64 a (+.f64 c d))
(* a (+ c d))
(*.f64 a (+.f64 c d))
(* a (+ c d))
(*.f64 a (+.f64 c d))
(* a (+ c d))
(*.f64 a (+.f64 c d))
(* a (+ c d))
(*.f64 a (+.f64 c d))
(* -1 (* a (+ (* -1 c) (* -1 d))))
(*.f64 a (+.f64 c d))
(* -1 (* a (+ (* -1 c) (* -1 d))))
(*.f64 a (+.f64 c d))
(* -1 (* a (+ (* -1 c) (* -1 d))))
(*.f64 a (+.f64 c d))
(* -1 (* a (+ (* -1 c) (* -1 d))))
(*.f64 a (+.f64 c d))
(* a c)
(*.f64 a c)
(+ (* a c) (* a d))
(*.f64 a (+.f64 c d))
(+ (* a c) (* a d))
(*.f64 a (+.f64 c d))
(+ (* a c) (* a d))
(*.f64 a (+.f64 c d))
(* a d)
(*.f64 a d)
(* d (+ a (/ (* a c) d)))
(*.f64 a (+.f64 c d))
(* d (+ a (/ (* a c) d)))
(*.f64 a (+.f64 c d))
(* d (+ a (/ (* a c) d)))
(*.f64 a (+.f64 c d))
(* a d)
(*.f64 a d)
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
(*.f64 a (+.f64 c d))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
(*.f64 a (+.f64 c d))
(* -1 (* d (+ (* -1 a) (* -1 (/ (* a c) d)))))
(*.f64 a (+.f64 c d))
(* a d)
(*.f64 a d)
(+ (* a c) (* a d))
(*.f64 a (+.f64 c d))
(+ (* a c) (* a d))
(*.f64 a (+.f64 c d))
(+ (* a c) (* a d))
(*.f64 a (+.f64 c d))
(* a c)
(*.f64 a c)
(* c (+ a (/ (* a d) c)))
(*.f64 a (+.f64 c d))
(* c (+ a (/ (* a d) c)))
(*.f64 a (+.f64 c d))
(* c (+ a (/ (* a d) c)))
(*.f64 a (+.f64 c d))
(* a c)
(*.f64 a c)
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(*.f64 a (+.f64 c d))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(*.f64 a (+.f64 c d))
(* -1 (* c (+ (* -1 a) (* -1 (/ (* a d) c)))))
(*.f64 a (+.f64 c d))
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a d)
(*.f64 a d)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)
(* a c)
(*.f64 a c)

eval19.0ms (0.4%)

Compiler

Compiled 584 to 21 computations (96.4% saved)

prune4.0ms (0.1%)

Pruning

4 alts after pruning (0 fresh and 4 done)

PrunedKeptTotal
New96096
Fresh000
Picked011
Done033
Total964100
Accuracy
100.0%
Counts
100 → 4
Alt Table
Click to see full alt table
StatusAccuracyProgram
99.9%
(+.f64 (*.f64 a d) (*.f64 a c))
99.9%
(*.f64 a (+.f64 (+.f64 b c) d))
99.9%
(*.f64 a (+.f64 c d))
93.3%
(*.f64 a d)
Compiler

Compiled 73 to 40 computations (45.2% saved)

regimes19.0ms (0.4%)

Counts
5 → 1
Calls
Call 1
Inputs
(*.f64 a d)
(*.f64 a (+.f64 c d))
(*.f64 a (+.f64 (+.f64 b c) d))
(+.f64 (*.f64 a d) (*.f64 a c))
(+.f64 (*.f64 a (+.f64 b d)) (*.f64 a c))
Outputs
(+.f64 (*.f64 a (+.f64 b d)) (*.f64 a c))
Calls

7 calls:

5.0ms
(*.f64 a (+.f64 (+.f64 b c) d))
2.0ms
(+.f64 b c)
2.0ms
(+.f64 (+.f64 b c) d)
2.0ms
d
2.0ms
c
Results
AccuracySegmentsBranch
100.0%1a
100.0%1b
100.0%1c
100.0%1d
100.0%1(*.f64 a (+.f64 (+.f64 b c) d))
100.0%1(+.f64 (+.f64 b c) d)
100.0%1(+.f64 b c)
Compiler

Compiled 47 to 34 computations (27.7% saved)

regimes18.0ms (0.3%)

Counts
4 → 1
Calls
Call 1
Inputs
(*.f64 a d)
(*.f64 a (+.f64 c d))
(*.f64 a (+.f64 (+.f64 b c) d))
(+.f64 (*.f64 a d) (*.f64 a c))
Outputs
(+.f64 (*.f64 a d) (*.f64 a c))
Calls

7 calls:

5.0ms
c
2.0ms
a
2.0ms
(+.f64 (+.f64 b c) d)
2.0ms
b
2.0ms
(*.f64 a (+.f64 (+.f64 b c) d))
Results
AccuracySegmentsBranch
99.9%1a
99.9%1b
99.9%1c
99.9%1d
99.9%1(*.f64 a (+.f64 (+.f64 b c) d))
99.9%1(+.f64 (+.f64 b c) d)
99.9%1(+.f64 b c)
Compiler

Compiled 47 to 34 computations (27.7% saved)

regimes13.0ms (0.3%)

Counts
3 → 1
Calls
Call 1
Inputs
(*.f64 a d)
(*.f64 a (+.f64 c d))
(*.f64 a (+.f64 (+.f64 b c) d))
Outputs
(*.f64 a (+.f64 (+.f64 b c) d))
Calls

7 calls:

2.0ms
(*.f64 a (+.f64 (+.f64 b c) d))
2.0ms
(+.f64 b c)
2.0ms
d
2.0ms
(+.f64 (+.f64 b c) d)
2.0ms
c
Results
AccuracySegmentsBranch
99.9%1a
99.9%1b
99.9%1c
99.9%1d
99.9%1(*.f64 a (+.f64 (+.f64 b c) d))
99.9%1(+.f64 (+.f64 b c) d)
99.9%1(+.f64 b c)
Compiler

Compiled 47 to 34 computations (27.7% saved)

regimes9.0ms (0.2%)

Counts
2 → 1
Calls
Call 1
Inputs
(*.f64 a d)
(*.f64 a (+.f64 c d))
Outputs
(*.f64 a (+.f64 c d))
Calls

4 calls:

4.0ms
c
2.0ms
b
2.0ms
a
1.0ms
d
Results
AccuracySegmentsBranch
99.9%1a
99.9%1b
99.9%1c
99.9%1d
Compiler

Compiled 20 to 16 computations (20% saved)

regimes5.0ms (0.1%)

Accuracy

Total -0.0b remaining (-0%)

Threshold costs -0b (-0%)

Counts
1 → 1
Calls
Call 1
Inputs
(*.f64 a d)
Outputs
(*.f64 a d)
Calls

4 calls:

1.0ms
d
1.0ms
c
1.0ms
a
1.0ms
b
Results
AccuracySegmentsBranch
93.3%1a
93.3%1b
93.3%1c
93.3%1d
Compiler

Compiled 20 to 16 computations (20% saved)

simplify7.0ms (0.1%)

Algorithm
egg-herbie
Rules
12×+-commutative_binary64
10×*-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01531
12631
Stop Event
saturated
Calls
Call 1
Inputs
(+.f64 (*.f64 a (+.f64 b d)) (*.f64 a c))
(+.f64 (*.f64 a d) (*.f64 a c))
(*.f64 a (+.f64 (+.f64 b c) d))
(*.f64 a (+.f64 c d))
(*.f64 a d)
Outputs
(+.f64 (*.f64 a (+.f64 b d)) (*.f64 a c))
(+.f64 (*.f64 a d) (*.f64 a c))
(+.f64 (*.f64 a c) (*.f64 a d))
(*.f64 a (+.f64 (+.f64 b c) d))
(*.f64 a (+.f64 d (+.f64 b c)))
(*.f64 a (+.f64 c d))
(*.f64 a (+.f64 d c))
(*.f64 a d)

soundness326.0ms (6.4%)

Rules
2422×*-lowering-*.f32
2422×*-lowering-*.f64
1844×fnmadd-define
1184×/-lowering-/.f32
1184×/-lowering-/.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01129
12828
25428
37828
49528
59628
09628
0713
11913
24613
39613
411813
511913
011913
084516
1292450
2886450
32781450
08007450
Stop Event
done
iter limit
node limit
iter limit
saturated
iter limit
saturated
Compiler

Compiled 84 to 47 computations (44% saved)

preprocess77.0ms (1.5%)

Remove

(negabs a)

Compiler

Compiled 430 to 252 computations (41.4% saved)

end0.0ms (0%)

Profiling

Loading profile data...