Re: [commit: ghc] master: llvmGen: Pass vector arguments in vector registers by default (15f788f)

IIRC there are no more static flags around. So adding ":type: dynamic"
each time seems redundant. Could this be automated somehow? Or should
we remove ":type:" altogether?
Cheers,
Gabor
On 11/3/17, git@git.haskell.org
Repository : ssh://git@git.haskell.org/ghc
On branch : master Link : http://ghc.haskell.org/trac/ghc/changeset/15f788f5e5096641245a4f060600a6db9c...
---------------------------------------------------------------
commit 15f788f5e5096641245a4f060600a6db9cbc2c4e Author: Ben Gamari
Date: Thu Nov 2 17:28:40 2017 -0400 llvmGen: Pass vector arguments in vector registers by default
Earlier this year Edward Kmett requested [1] that we enable passing of vector values in vector registers by default. The GHC calling convention changes have been in LLVM for a number of years now so let's just flip the switch.
[1] https://mail.haskell.org/pipermail/ghc-devs/2017-March/013905.html
Reviewers: austin
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D4142
---------------------------------------------------------------
15f788f5e5096641245a4f060600a6db9cbc2c4e compiler/main/DynFlags.hs | 5 +++-- docs/users_guide/using-optimisation.rst | 12 ++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index a421284..825497e 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -3757,7 +3757,7 @@ fFlagsDeps = [ flagSpec "kill-one-shot" Opt_KillOneShot, flagSpec "late-dmd-anal" Opt_LateDmdAnal, flagSpec "liberate-case" Opt_LiberateCase, - flagHiddenSpec "llvm-pass-vectors-in-regs" Opt_LlvmPassVectorsInRegisters, + flagSpec "llvm-pass-vectors-in-regs" Opt_LlvmPassVectorsInRegisters, flagHiddenSpec "llvm-tbaa" Opt_LlvmTBAA, flagHiddenSpec "llvm-fill-undef-with-garbage" Opt_LlvmFillUndefWithGarbage, flagSpec "loopification" Opt_Loopification, @@ -4051,7 +4051,8 @@ defaultFlags settings Opt_RPath, Opt_SharedImplib, Opt_SimplPreInlining, - Opt_VersionMacros + Opt_VersionMacros, + Opt_LlvmPassVectorsInRegisters ]
++ [f | (ns,f) <- optLevelFlags, 0 `elem` ns] diff --git a/docs/users_guide/using-optimisation.rst b/docs/users_guide/using-optimisation.rst index 4714de7..fc958e0 100644 --- a/docs/users_guide/using-optimisation.rst +++ b/docs/users_guide/using-optimisation.rst @@ -493,6 +493,18 @@ by saying ``-fno-wombat``. self-recursive saturated tail calls into local jumps rather than function calls.
+.. ghc-flag:: -fllvm-pass-vectors-in-regs + :shortdesc: Pass vector value in vector registers for function calls + :type: dynamic + :reverse: -fno-llvm-pass-vectors-in-regs + :category: + + :default: on + + Instructs GHC to use the platform's native vector registers to pass vector + arguments during function calls. As with all vector support, this requires + :ghc-flag:`-fllvm`. + .. ghc-flag:: -fmax-inline-alloc-size=⟨n⟩ :shortdesc: *default: 128.* Set the maximum size of inline array allocations to ⟨n⟩ bytes (default: 128).
_______________________________________________ ghc-commits mailing list ghc-commits@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-commits

Gabor Greif
IIRC there are no more static flags around. So adding ":type: dynamic" each time seems redundant. Could this be automated somehow? Or should we remove ":type:" altogether?
Well, we can't quite remove :type: yet since it still distinguishes "mode" flags (e.g. --make) from "normal" flags. In addition, some flags are marked as `dynamic / :set`, indicating that they can be changed within GHCi with `:set`. That being said, I agree that the :type:'s are needlessly verbose. I see two ways to proceed: * Make :type: default to `dynamic` (or perhaps another, friendlier name) * Represent mode flags with a different directive entirely In either case we might want to add a new boolean option to :ghc-flag: asserting it can be set from within ghci, separating this information from :type:. Cheers, - Ben
participants (2)
-
Ben Gamari
-
Gabor Greif