diff options
Diffstat (limited to 'compiler/cmm/CmmUtils.hs')
-rw-r--r-- | compiler/cmm/CmmUtils.hs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/compiler/cmm/CmmUtils.hs b/compiler/cmm/CmmUtils.hs index 8a3b857ed9..c6e647f75e 100644 --- a/compiler/cmm/CmmUtils.hs +++ b/compiler/cmm/CmmUtils.hs @@ -1,4 +1,5 @@ {-# LANGUAGE GADTs, RankNTypes #-} +{-# LANGUAGE BangPatterns #-} ----------------------------------------------------------------------------- -- @@ -35,6 +36,8 @@ module CmmUtils( cmmSubWord, cmmAddWord, cmmMulWord, cmmQuotWord, cmmToWord, + cmmMkAssign, + isTrivialCmmExpr, hasNoGlobalRegs, isLit, isComparisonExpr, baseExpr, spExpr, hpExpr, spLimExpr, hpLimExpr, @@ -76,6 +79,7 @@ import BlockId import CLabel import Outputable import DynFlags +import Unique import CodeGen.Platform import Data.ByteString (ByteString) @@ -372,6 +376,13 @@ cmmToWord dflags e w = cmmExprWidth dflags e word = wordWidth dflags +cmmMkAssign :: DynFlags -> CmmExpr -> Unique -> (CmmNode O O, CmmExpr) +cmmMkAssign dflags expr uq = + let !ty = cmmExprType dflags expr + reg = (CmmLocal (LocalReg uq ty)) + in (CmmAssign reg expr, CmmReg reg) + + --------------------------------------------------- -- -- CmmExpr predicates |