Optimization defeated by merging module into main
I have a library,
TheModule, and an application that uses
TheModule lives in
Main lives in
Main.hs, optimization works as expected. When I copy all of
TheModule's definitions and all of
Main's definitions into
Both.hs, much less optimization occurs, as can be seen from -ddump-simpl, as well as the drastic difference in running times.
The program performs a lot of small matrix-vector multiplications. The single command line argument tells how many to do.
time ./Main 1000000 20.0 :. (59.0 :. (100.0 :. (137.0 :. ()))) real 0m0.389s user 0m0.152s sys 0m0.232s time ./Both 100000 20.0 :. (59.0 :. (100.0 :. (137.0 :. ()))) real 0m3.462s user 0m3.368s sys 0m0.068s
So that makes Both about 100 times slower. Compiled with -O2 and -fexcess-precision