gpt4 book ai didi

haskell - 帮助 GHC 在常量上将 Int 拆箱

转载 作者:行者123 更新时间:2023-12-03 15:46:14 25 4
gpt4 key购买 nike

这是一个测试程序:

main = do
n <- fmap read $ getLine :: IO Int
if (999999 == n) then putStrLn "equal" else return ()

这是使用 ghc --make -O2 -ddump-to-file -ddump-simpl -dsuppress-module-prefixes -dsuppress-uniques -ddump-core-stats -ddump-inlinings 编译时的核心相关位:
case readEither6 @ Int (run @ Int main3 ipv1) of _ [Occ=Dead] {
[] -> case error @ Int readEither4 of wild1 { };
: x ds1 ->
case ds1 of _ [Occ=Dead] {
[] ->
case x of _ [Occ=Dead] { I# ipv2 ->
case ipv2 of _ [Occ=Dead] {
__DEFAULT -> (# ipv, () #);
999999 -> hPutStr2 stdout main2 True ipv
}
};
: ipv2 ipv3 -> case error @ Int readEither2 of wild2 { }
}

我想知道文字 999999 上的大小写匹配是否真的是这里最有效的事情,如果不是,我怎么能鼓励 GHC 把它变成对 ==# 的调用或者其他的东西?

(我的实际应用比较多)

最佳答案

在我的 Ubuntu 盒子上,相关核心代码编译成这个

406168: 48 81 7b 07 3f 42 0f    cmpq   $0xf423f,0x7(%rbx)
40616f: 00
406170: 75 28 jne 40619a <c4fz_info+0x32>
406172: bf 52 e3 6d 00 mov $0x6de352,%edi
406177: be 90 65 6d 00 mov $0x6d6590,%esi
40617c: 41 be 18 6a 6d 00 mov $0x6d6a18,%r14d
406182: 48 83 c5 08 add $0x8,%rbp
406186: e9 65 3c 00 00 jmpq 409df0 <base_GHCziIOziHandleziText_hPutStr2_info>

第一行到第三行基本相当于c代码
if (variable == 999999) { ....

这是您可以获得的最佳选择。

关于haskell - 帮助 GHC 在常量上将 Int 拆箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com