2016-03-14 38 views
3

我需要使用GHC -O1优化编译一些Haskell源代码,但禁用常量折叠优化。但是我找不到在GHC手册中用于切换常量折叠的优化标志。这可能会关闭它,同时保持其他优化?有没有办法在GHC中禁用常量折叠优化?

+0

我很好奇:你的实际目的是什么?为什么你需要禁用它? – chi

+1

@chi我正在用Haskell开发一个编译器,目前它的功能非常有限。我首先使用GHC将Haskell中的源程序解析为Core,然后在Core上执行转换。我想测试一下生成的代码的性能,这些代码的参数应该在运行时给出。然而,现在参数需要硬编码,GHC折叠了所有的常量,所以不要让目标代码计算结果,我只能得到一个常数值,这并不是很有用。 – hooray9

+1

我想知道如果将这些常量放在一个单独的模块中,并将它们与非内联编译导出(例如, 'module A where { - #NOINLINE# - } foo :: Int; foo = 42'。也许值得一试,但我只是猜测在这里... – chi

回答

1

如果使用-fno-enable-rewrite-rules进行编译,将禁用常量折叠。 另外,如果您将常量传递给一个NOINLINE函数并在函数内使用它们,您很有可能不会折叠它。

相关问题