"Hidden" LLVM flags
jan.stolarek at p.lodz.pl
Wed Nov 5 14:35:37 UTC 2014
I found this note in CmmCallConv:
-- On X86_64, we always pass 128-bit-wide vectors in registers. On 32-bit X86
-- and for all larger vector sizes on X86_64, LLVM's GHC calling convention
-- does not currently pass vectors in registers. The patch to update the GHC
-- calling convention to support passing SIMD vectors in registers is small and
-- well-contained, so it may make it into LLVM 3.4. The hidden
-- -fllvm-pass-vectors-in-regs flag will generate LLVM code that attempts to
-- pass vectors in registers, but it must only be used with a version of LLVM
-- that has an updated GHC calling convention.
What's the status? Is this patch present in LLVM 3.4?
As a side note I'm puzzled by the implementation:
passVectorInReg :: Width -> DynFlags -> Bool
passVectorInReg W128 dflags = case platformArch (targetPlatform dflags) of
ArchX86_64 -> True
_ -> gopt Opt_LlvmPassVectorsInRegisters dflags
passVectorInReg _ dflags = gopt Opt_LlvmPassVectorsInRegisters dflags
It seems that by enabling -fllvm-pass-vectors-in-regs I can change the calling convention for
vectors of any length other than 128 bits.
Dnia środa, 5 listopada 2014, Jan Stolarek napisał:
> DynFlags list some LLVM flags as "hidden":
> ( "llvm-tbaa", Opt_LlvmTBAA, nop), -- hidden flag
> ( "llvm-pass-vectors-in-regs", Opt_LlvmPassVectorsInRegisters,
> nop), -- hidden flag
> Do I undertsand correctly that "hidden" means "not documented in the User's
> Guide"? Is there a good reason for this? I'd like to document them as part
> of #9358, especially that -fllvm-tbaa is enabled by default for all
> optimisation levels.
> ghc-devs mailing list
> ghc-devs at haskell.org
More information about the ghc-devs