aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen/CodeGenCactus.m
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/CodeGen/CodeGenCactus.m')
-rw-r--r--Tools/CodeGen/CodeGenCactus.m24
1 files changed, 20 insertions, 4 deletions
diff --git a/Tools/CodeGen/CodeGenCactus.m b/Tools/CodeGen/CodeGenCactus.m
index a90633e..d4547cc 100644
--- a/Tools/CodeGen/CodeGenCactus.m
+++ b/Tools/CodeGen/CodeGenCactus.m
@@ -606,15 +606,21 @@ DefFn[
(* Optimise *)
expr = expr //. {
- kneg[ToReal[a_]] -> ToReal[-a],
- kmul[ToReal[-1],x_] -> kneg[x],
- kmul[x_,ToReal[-1]] -> kneg[x],
- kneg[kneg[x_]] -> x,
+ kneg[ToReal[a_]] -> ToReal[-a],
+ kmul[ToReal[-1],x_] -> kneg[x],
+ kmul[ToReal[-1.0],x_] -> kneg[x],
+ kmul[x_,ToReal[-1]] -> kneg[x],
+ kmul[x_,ToReal[-1.0]] -> kneg[x],
+ kneg[kneg[x_]] -> x,
kadd[ToReal[0],x_] -> x,
+ kadd[ToReal[0.0],x_] -> x,
kadd[x_,ToReal[0]] -> x,
+ kadd[x_,ToReal[0.0]] -> x,
ksub[ToReal[0],x_] -> kneg[x],
+ ksub[ToReal[0.0],x_] -> kneg[x],
ksub[x_,ToReal[0]] -> x,
+ ksub[x_,ToReal[0.0]] -> x,
kadd[kneg[x_],y_] -> ksub[y,x],
ksub[kneg[x_],y_] -> kneg[kadd[x,y]],
kadd[x_,kneg[y_]] -> ksub[x,y],
@@ -632,11 +638,21 @@ DefFn[
kadd[ToReal[a_],y_]] -> kadd[ToReal[a],kadd[x,y]],
kmul[ToReal[0],x_] -> ToReal[0],
+ kmul[ToReal[0.0],x_] -> ToReal[0],
kmul[x_,ToReal[0]] -> ToReal[0],
+ kmul[x_,ToReal[0.0]] -> ToReal[0],
kmul[ToReal[+1],x_] -> x,
+ kmul[ToReal[+1.0],x_] -> x,
kmul[x_,ToReal[+1]] -> x,
+ kmul[x_,ToReal[+1.0]] -> x,
+ kmul[ToReal[-1],x_] -> kneg[x],
+ kmul[ToReal[-1.0],x_] -> kneg[x],
+ kmul[x_,ToReal[-1]] -> kneg[x],
+ kmul[x_,ToReal[-1.0]] -> kneg[x],
kdiv[ToReal[0],x_] -> ToReal[0],
+ kdiv[ToReal[0.0],x_] -> ToReal[0],
(* kdiv[x_,ToReal[0]] -> ToReal[nan], *)
+ (* kdiv[x_,ToReal[0.0]] -> ToReal[nan], *)
kdiv[x_,ToReal[y_]] -> kmul[x,ToReal[1/y]],
kdiv[x_,kdiv[y_,z_]] -> kdiv[kmul[x,z],y],
kdiv[kdiv[x_,y_],z_] -> kdiv[x,kmul[y,z]],