GHC不优化主模块以外的模块

时间:2011-09-09 20:26:57

标签: optimization haskell inline ghc

我目前正在Haskell中编写一个多模块程序。我发现了一个奇怪的问题,我的文件没有得到正确的优化,即使我正在传递-O2等等。有问题的文件是共享的3D矢量数学模块。当单独编译为.o时,这些模块已正确优化。当使用--make编译为较大程序的一部分时,它们未正确优化。核心是完全不同的。

我在vector.hs文件中添加了一些简单的精简测试代码:

data TestVector = TestVector !Double !Double !Double !Double

addVec :: TestVector -> TestVector -> TestVector

addVec (TestVector x1 y1 z1 w1) (TestVector x2 y2 z2 w2) =
  TestVector (x1 + x2) (y1 + y2) (z1 + z2) (w1 + w2)

从主要进口...

import Vector

此代码以不同的方式编译为独立的.hs文件,而不是使用--make构建main.h时

我的命令行是:

ghc -tmpdir tmp -hidir hi -odir obj -fext-core -fexcess-precision -funbox-strict-fields -threaded -rtsopts -fwarn-missing-signatures -Wall -O2 Main.hs -o main

干杯

1 个答案:

答案 0 :(得分:1)

添加

{-# INLINE addVec #-}

在主模块中。

如果invokator / invokated不在同一模块中,GHC需要在进行优化之前指示这种可能性。