Allow C argument regs to be used as global regs (R1, R2, etc.)
[ghc-hetmet.git] / ghc / compiler / cmm / CmmUtils.hs
index b2a107c..a04935b 100644 (file)
@@ -10,7 +10,7 @@ module CmmUtils(
        CmmStmts, noStmts, oneStmt, mkStmts, plusStmts, stmtList,
        isNopStmt,
 
-       isTrivialCmmExpr,
+       isTrivialCmmExpr, hasNoGlobalRegs,
 
        cmmRegOff, cmmLabelOff, cmmOffset, cmmOffsetLit, cmmIndex,
        cmmOffsetExpr, cmmIndexExpr, cmmLoadIndex,
@@ -90,6 +90,14 @@ isTrivialCmmExpr (CmmLit _)      = True
 isTrivialCmmExpr (CmmReg _)      = True
 isTrivialCmmExpr (CmmRegOff _ _) = True
 
+hasNoGlobalRegs :: CmmExpr -> Bool
+hasNoGlobalRegs (CmmLoad e _)             = hasNoGlobalRegs e
+hasNoGlobalRegs (CmmMachOp _ es)          = all hasNoGlobalRegs es
+hasNoGlobalRegs (CmmLit _)                = True
+hasNoGlobalRegs (CmmReg (CmmLocal _))      = True
+hasNoGlobalRegs (CmmRegOff (CmmLocal _) _) = True
+hasNoGlobalRegs _ = False
+
 ---------------------------------------------------
 --
 --     Expr Construction helpers