RFC: omit write barrier instructions unless '-threaded'
Simon Marlow
marlowsd at gmail.com
Mon Feb 25 12:25:11 CET 2013
On 24/02/13 20:40, Gabor Greif wrote:
> Hi all,
>
> from what I gathered so far no emission of write barriers is needed when
> - running on a uniprocessor (-threaded or not)
> - running on a multiprocessor sans having linked with -threaded.
>
> Below patch suppresses the emission of 'lwsync' when no '-threaded' is
> specified on PPC only. So it does not cover both criteria above.
>
> It helps me a lot since I have a uniprocessor target that does not
> understand the 'lwsync' instruction (instruction is newer than core).
>
> Still, I have some doubts:
> o do we want to extend this approach to other archs?
> o possibly suppress the emission of MO_WriteBarrier in
> compiler/codeGen/StgCmmBind.hs
> (more care is needed to also cover compiler/cmm/CmmParse.y).
>
> Anyway this should be a safe first step, and I'd like to push it. When
> we find a general solution be can back this commit out.
>
> What do you think?
I don't think this is the right way to do it. The -threaded flag is not
supposed to affect code generation, it only changes the RTS that gets
linked in. That is, you can compile all your code without -threaded and
then just add -threaded at the link step, and it will work.
Instead, use conditional compilation in the RTS so that the
write_barrer() calls are only present when THREADED_RTS is on.
Cheers,
Simon
> Cheers,
>
> Gabor
>
> $ git show c0d682fb98f32e4ce5d27ff3a30f43b6cd70733e
> commit c0d682fb98f32e4ce5d27ff3a30f43b6cd70733e
> Author: Gabor Greif <ggreif at gmail.com>
> Date: Fri Feb 22 18:47:00 2013 +0100
>
> Do not emit barriers on PPC unless we go the threaded way
>
> diff --git a/compiler/nativeGen/PPC/CodeGen.hs
> b/compiler/nativeGen/PPC/CodeGen.hs
> index 92eff36..6c33cca 100644
> --- a/compiler/nativeGen/PPC/CodeGen.hs
> +++ b/compiler/nativeGen/PPC/CodeGen.hs
> @@ -1,9 +1,8 @@
> -
> -----------------------------------------------------------------------------
> --
> -- Generating machine code (instruction selection)
> --
> --- (c) The University of Glasgow 1996-2004
> +-- (c) The University of Glasgow 1996-2013
> --
> -----------------------------------------------------------------------------
>
> @@ -906,8 +905,10 @@ genCCall'
> -}
>
>
> -genCCall' _ _ (PrimTarget MO_WriteBarrier) _ _
> - = return $ unitOL LWSYNC
> +genCCall' dflags _ (PrimTarget MO_WriteBarrier) _ _
> + = return (if WayThreaded `elem` ways dflags
> + then unitOL LWSYNC
> + else nilOL)
>
> genCCall' _ _ (PrimTarget MO_Touch) _ _
> = return $ nilOL
>
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://www.haskell.org/mailman/listinfo/ghc-devs
>
More information about the ghc-devs
mailing list