[commit: ghc] wip/simd: Enable -msse to be specified by itself. (1ed36c5)

Johan Tibell johan.tibell at gmail.com
Mon Sep 23 04:35:01 UTC 2013


On Mon, Sep 23, 2013 at 12:12 AM,  <git at git.haskell.org> wrote:
> Repository : ssh://git@git.haskell.org/ghc
>
> On branch  : wip/simd
> Link       : http://ghc.haskell.org/trac/ghc/changeset/1ed36c54d50e0e97aee95d15d674f95cabab0b77/ghc
>
>>---------------------------------------------------------------
>
> commit 1ed36c54d50e0e97aee95d15d674f95cabab0b77
> Author: Geoffrey Mainland <gmainlan at microsoft.com>
> Date:   Mon Sep 16 12:27:37 2013 -0400
>
>     Enable -msse to be specified by itself.
>
>     This sets the SSE "version" to 1.0.
>
>
>>---------------------------------------------------------------
>
> 1ed36c54d50e0e97aee95d15d674f95cabab0b77
>  compiler/main/CmdLineParser.hs  |    2 +-
>  compiler/main/DriverPipeline.hs |   11 +++++------
>  compiler/main/DynFlags.hs       |    7 +++++++
>  3 files changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/compiler/main/CmdLineParser.hs b/compiler/main/CmdLineParser.hs
> index 6681186..fef2701 100644
> --- a/compiler/main/CmdLineParser.hs
> +++ b/compiler/main/CmdLineParser.hs
> @@ -220,7 +220,7 @@ processOneArg opt_kind rest arg args
>                            Just min <- parseInt min_s -> Right (f maj min, args)
>                          | [maj_s] <- split '.' rest_no_eq,
>                            Just maj <- parseInt maj_s -> Right (f maj 0, args)
> -                        | otherwise -> Left ("malformed version argument in " ++ dash_arg)
> +                        | otherwise -> Right (f 1 0, args)

This looks wrong. Shouldn't we match on [] here? There's still a
possibility that the value after -msse is garbage.

>
>
>  findArg :: [Flag m] -> String -> Maybe (String, OptKind m)
> diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs
> index 63f203a..44a6fa5 100644
> --- a/compiler/main/DriverPipeline.hs
> +++ b/compiler/main/DriverPipeline.hs
> @@ -1414,6 +1414,7 @@ runPhase (RealPhase LlvmLlc) input_fn dflags
>
>          sseOpts | isSse4_2Enabled dflags = ["-mattr=+sse42"]
>                  | isSse2Enabled dflags   = ["-mattr=+sse2"]
> +                | isSseEnabled dflags    = ["-mattr=+sse"]
>                  | otherwise              = []
>
>          avxOpts | isAvx512fEnabled dflags = ["-mattr=+avx512f"]
> @@ -2033,12 +2034,10 @@ doCpp dflags raw input_fn output_fn = do
>          -- remember, in code we *compile*, the HOST is the same our TARGET,
>          -- and BUILD is the same as our HOST.
>
> -    let sse2 = isSse2Enabled dflags
> -        sse4_2 = isSse4_2Enabled dflags
> -        sse_defs =
> -          [ "-D__SSE__=1" | sse2 || sse4_2 ] ++
> -          [ "-D__SSE2__=1" | sse2 || sse4_2 ] ++
> -          [ "-D__SSE4_2__=1" | sse4_2 ]
> +    let sse_defs =
> +          [ "-D__SSE__=1"    | isSseEnabled    dflags ] ++
> +          [ "-D__SSE2__=1"   | isSse2Enabled   dflags ] ++
> +          [ "-D__SSE4_2__=1" | isSse4_2Enabled dflags ]
>
>      let avx_defs =
>            [ "-D__AVX__=1"  | isAvxEnabled  dflags ] ++
> diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
> index 37f35e6..d6b386a 100644
> --- a/compiler/main/DynFlags.hs
> +++ b/compiler/main/DynFlags.hs
> @@ -129,6 +129,7 @@ module DynFlags (
>          unsafeGlobalDynFlags, setUnsafeGlobalDynFlags,
>
>          -- * SSE and AVX
> +        isSseEnabled,
>          isSse2Enabled,
>          isSse4_2Enabled,
>          isAvxEnabled,
> @@ -3617,6 +3618,12 @@ setUnsafeGlobalDynFlags = writeIORef v_unsafeGlobalDynFlags
>  -- check if SSE is enabled, we might have x86-64 imply the -msse2
>  -- flag.
>
> +isSseEnabled :: DynFlags -> Bool
> +isSseEnabled dflags = case platformArch (targetPlatform dflags) of
> +    ArchX86_64 -> True
> +    ArchX86    -> sseVersion dflags >= Just (1,0)
> +    _          -> False
> +
>  isSse2Enabled :: DynFlags -> Bool
>  isSse2Enabled dflags = case platformArch (targetPlatform dflags) of
>      ArchX86_64 -> -- SSE2 is fixed on for x86_64.  It would be
>
> _______________________________________________
> ghc-commits mailing list
> ghc-commits at haskell.org
> http://www.haskell.org/mailman/listinfo/ghc-commits



More information about the ghc-devs mailing list