2016-03-14 97 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函數並在函數內使用它們,您很有可能不會摺疊它。

相關問題