diff options
author | Erik Schnetter <schnetter@gmail.com> | 2013-07-28 09:38:11 -0700 |
---|---|---|
committer | Erik Schnetter <schnetter@gmail.com> | 2013-07-28 09:38:11 -0700 |
commit | 4b7aa4698219e22a57793a459e8e9e699a201e78 (patch) | |
tree | d758f1e8c60a554e31814dc296cffc5cb03e9d81 /Tools/CodeGen/CodeGenCactus.m | |
parent | cf32efef5748454df594bed2b1053f13b1df7efb (diff) |
Improve vectorization optimizations
Diffstat (limited to 'Tools/CodeGen/CodeGenCactus.m')
-rw-r--r-- | Tools/CodeGen/CodeGenCactus.m | 24 |
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]], |