From: simonmar Date: Tue, 1 Feb 2005 15:33:14 +0000 (+0000) Subject: [project @ 2005-02-01 15:33:14 by simonmar] X-Git-Tag: Initial_conversion_from_CVS_complete~1135 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=1dae2e1f9b0dd71f0f17f644d7983a3db52edbdf;p=ghc-hetmet.git [project @ 2005-02-01 15:33:14 by simonmar] hack upon the hack: confine the hack to -fasm, because gcc is too stupid to optimise away the extra temporary. --- diff --git a/ghc/compiler/codeGen/CgInfoTbls.hs b/ghc/compiler/codeGen/CgInfoTbls.hs index 981b4b0..0111a2a 100644 --- a/ghc/compiler/codeGen/CgInfoTbls.hs +++ b/ghc/compiler/codeGen/CgInfoTbls.hs @@ -57,7 +57,7 @@ import StgSyn ( SRT(..) ) import Name ( Name ) import DataCon ( DataCon, dataConTag, fIRST_TAG ) import Unique ( Uniquable(..) ) -import CmdLineOpts ( opt_SccProfilingOn ) +import CmdLineOpts ( opt_SccProfilingOn, DynFlags(..), HscTarget(..) ) import ListSetOps ( assocDefault ) import Maybes ( isJust ) import Constants ( wORD_SIZE, sIZEOF_StgFunInfoExtraRev ) @@ -351,9 +351,17 @@ emitVectoredReturnInstr zero_indexed_tag = do { info_amode <- getSequelAmode -- HACK! assign info_amode to a temp, because retVec -- uses it twice and the NCG doesn't have any CSE yet. - ; x <- newTemp wordRep - ; stmtC (CmmAssign x info_amode) - ; let target = retVec (CmmReg x) zero_indexed_tag + -- Only do this for the NCG, because gcc is too stupid + -- to optimise away the extra tmp (grrr). + ; dflags <- getDynFlags + ; x <- if hscTarget dflags == HscAsm + then do z <- newTemp wordRep + stmtC (CmmAssign z info_amode) + return (CmmReg z) + else + + return info_amode + ; let target = retVec x zero_indexed_tag ; stmtC (CmmJump target []) }