blob: 435f3637d75e29ae78470eb1353a166c803d067d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE UnboxedTuples #-}
module Main (main) where
import GHC.Base
unW# :: Word -> Word#
unW# (W# w) = w
type WordOpC = Word# -> Word# -> (# Word#, Int# #)
check :: WordOpC -> Word# -> Word# -> IO ()
check op a b = do
let (# w, c #) = op a b
print (W# w, I# c)
checkSubInlNoInl :: WordOpC -> Word# -> Word# -> IO ()
checkSubInlNoInl op a b = do
inline check op a b -- constant folding
noinline check op a b -- lowering of PrimOp
{-# INLINE checkSubInlNoInl #-}
main :: IO ()
main = do
-- Overflow.
checkSubInlNoInl subWordC# 1## 3##
checkSubInlNoInl addWordC# (unW# (inline maxBound)) 3##
-- No overflow.
checkSubInlNoInl subWordC# 5## 2##
checkSubInlNoInl addWordC# (unW# (inline maxBound-1)) 1##
|