有没有一种方法可以在GHC中禁用常量折叠优化?

3

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


我很好奇:你的实际目的是什么?为什么你需要禁用它? - chi
1
我正在使用Haskell开发编译器,但其功能目前非常有限。我首先使用GHC将源程序(Haskell代码)解析为Core,然后对Core进行转换。我想测试生成的代码在某些需要运行时传递参数的示例中的性能。然而,现在这些参数需要硬编码,并且GHC折叠了所有常量,所以我只能得到一个常量值,这对我的工作不是很有帮助。 - hooray9
1
我想知道如果把这些常量放在单独的模块中并使用 no-inline pragma 导出这些常量,例如 module A where {-# NOINLINE #-} foo :: Int ; foo = 42,会发生什么。也许值得一试,但我只是在猜测... - chi
1个回答

1
如果您使用-fno-enable-rewrite-rules进行编译,它将禁用常量折叠。 此外,我认为如果您将常量传递给一个NOINLINE函数并在函数内部使用它们,则有很大可能性它不会被折叠。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接