Code generation: Always ask for result of newSpark
authorPeter Wortmann <scpmw@leeds.ac.uk>
Mon, 5 Dec 2011 21:32:19 +0000 (13:32 -0800)
committerDavid Terei <davidterei@gmail.com>
Tue, 6 Dec 2011 07:09:08 +0000 (23:09 -0800)
Otherwise the LLVM backend gets confused over whether its type should be
"void (i8*, i8*)" or "i64 (i8*, i8*)".

Signed-off-by: David Terei <davidterei@gmail.com>
compiler/codeGen/CgPrimOp.hs
compiler/codeGen/StgCmmPrim.hs

index 43a570d..e912a08 100644 (file)
@@ -145,7 +145,9 @@ emitPrimOp [res] SparkOp [arg] live = do
     stmtC (CmmAssign (CmmLocal tmp) arg)
 
     vols <- getVolatileRegs live
-    emitForeignCall' PlayRisky []
+    res' <- newTemp bWord
+    emitForeignCall' PlayRisky
+        [CmmHinted res' NoHint]
        (CmmCallee newspark CCallConv) 
        [   (CmmHinted (CmmReg (CmmGlobal BaseReg)) AddrHint)
           , (CmmHinted arg AddrHint)  ] 
index a2337ae..1795b55 100644 (file)
@@ -223,8 +223,9 @@ emitPrimOp [res] SparkOp [arg]
         -- refer to arg twice (once to pass to newSpark(), and once to
         -- assign to res), so put it in a temporary.
         tmp <- assignTemp arg
+        tmp2 <- newTemp bWord
         emitCCall
-            []
+            [(tmp2,NoHint)]
             (CmmLit (CmmLabel (mkCmmCodeLabel rtsPackageId (fsLit "newSpark"))))
             [(CmmReg (CmmGlobal BaseReg), AddrHint), ((CmmReg (CmmLocal tmp)), AddrHint)]
         emit (mkAssign (CmmLocal res) (CmmReg (CmmLocal tmp)))