[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