为什么ghc在自己的构建中传递矛盾的优化标志?

时间:2017-04-05 15:59:50

标签: optimization compilation ghc

我正在从源代码构建GHC(7.8在ARM上,因为没有二进制版本),并注意到它在某些时候这样做了:

"inplace/bin/ghc-stage1" -static -optc-DTHREADED_RTS -optc-DDEBUG  -H32m   \
   -O -Iincludes -Iincludes/dist -Iincludes/dist-derivedconstants/header \ 
   -Iincludes/dist-ghcconstants/header -Irts -Irts/dist/build -DCOMPILING_RTS \
   -package-name rts -dcmm-lint   -i -irts -irts/dist/build        \
   -irts/dist/build/autogen -Irts/dist/build -Irts/dist/build/autogen    \
   -O2 -O0    -c rts/StgMiscClosures.cmm -o rts/dist/build/StgMiscClosures.thr_debug_o

嗯,这是一个命令中的-O-O2-O0

这是什么原因,在这种情况下哪个标志优先?

1 个答案:

答案 0 :(得分:0)

processArgs从左到右处理命令行参数(参见process in CmdLineParser.processArgs。此外,-O标志的语义是这样的,它们每个都打开/关闭某个个别优化的子集(参见updOptLevel)。因此,在您的示例-O0中,“获胜”,因为它会覆盖-O-O2的效果。