1. 22 Nov, 2018 1 commit
    • Sylvain Henry's avatar
      Rename literal constructors · 13bb4bf4
      Sylvain Henry authored and Ben Gamari's avatar Ben Gamari committed
      In a previous patch we replaced some built-in literal constructors
      (MachInt, MachWord, etc.) with a single LitNumber constructor.
      
      In this patch we replace the `Mach` prefix of the remaining constructors
      with `Lit` for consistency (e.g., LitChar, LitLabel, etc.).
      
      Sadly the name `LitString` was already taken for a kind of FastString
      and it would become misleading to have both `LitStr` (literal
      constructor renamed after `MachStr`) and `LitString` (FastString
      variant). Hence this patch renames the FastString variant `PtrString`
      (which is more accurate) and the literal string constructor now uses the
      least surprising `LitString` name.
      
      Both `Literal` and `LitString/PtrString` have recently seen breaking
      changes so doing this kind of renaming now shouldn't harm much.
      
      Reviewers: hvr, goldfire, bgamari, simonmar, jrtc27, tdammers
      
      Subscribers: tdammers, rwbarton, thomie, carter
      
      Differential Revision: https://phabricator.haskell.org/D4881
      13bb4bf4
  2. 07 Nov, 2018 1 commit
  3. 05 Oct, 2018 1 commit
    • Kavon Farvardin's avatar
      Multiple fixes / improvements for LLVM backend · adcb5fb4
      Kavon Farvardin authored and Ben Gamari's avatar Ben Gamari committed
      - Fix for #13904 -- stop "trashing" callee-saved registers, since it is
        not actually doing anything useful.
      
      - Fix for #14251 -- fixes the calling convention for functions passing
        raw SSE-register values by adding padding as needed to get the values
        in the right registers. This problem cropped up when some args were
        unused an dropped from the live list.
      
      - Fixed a typo in 'readnone' attribute
      
      - Added 'lower-expect' pass to level 0 LLVM optimization passes to
        improve block layout in LLVM for stack checks, etc.
      
      Test Plan: `make test WAYS=optllvm` and `make test WAYS=llvm`
      
      Reviewers: bgamari, simonmar, angerman
      
      Reviewed By: angerman
      
      Subscribers: rwbarton, carter
      
      GHC Trac Issues: #13904, #14251
      
      Differential Revision: https://phabricator.haskell.org/D5190
      adcb5fb4
  4. 16 May, 2018 1 commit
    • Simon Marlow's avatar
      Allow CmmLabelDiffOff with different widths · fbd28e2c
      Simon Marlow authored
      Summary:
      This change makes it possible to generate a static 32-bit relative label
      offset on x86_64. Currently we can only generate word-sized label
      offsets.
      
      This will be used in D4634 to shrink info tables.  See D4632 for more
      details.
      
      Test Plan: See D4632
      
      Reviewers: bgamari, niteria, michalt, erikd, jrtc27, osa1
      
      Subscribers: thomie, carter
      
      Differential Revision: https://phabricator.haskell.org/D4633
      fbd28e2c
  5. 19 Sep, 2017 1 commit
    • Herbert Valerio Riedel's avatar
      compiler: introduce custom "GhcPrelude" Prelude · f63bc730
      Herbert Valerio Riedel authored and Ben Gamari's avatar Ben Gamari committed
      This switches the compiler/ component to get compiled with
      -XNoImplicitPrelude and a `import GhcPrelude` is inserted in all
      modules.
      
      This is motivated by the upcoming "Prelude" re-export of
      `Semigroup((<>))` which would cause lots of name clashes in every
      modulewhich imports also `Outputable`
      
      Reviewers: austin, goldfire, bgamari, alanz, simonmar
      
      Reviewed By: bgamari
      
      Subscribers: goldfire, rwbarton, thomie, mpickering, bgamari
      
      Differential Revision: https://phabricator.haskell.org/D3989
      f63bc730
  6. 29 Apr, 2017 1 commit
  7. 06 Jul, 2016 1 commit
  8. 27 Jan, 2016 1 commit
    • rwbarton's avatar
      Test for undef bugs in the LLVM backend when validating · d50609e8
      rwbarton authored and Ben Gamari's avatar Ben Gamari committed
      In an attempt to catch bugs involving using undef values, replace
      undef literals by values likely to cause crashes or test failures.
      We do this only when validating since it is a deoptimization.
      
      This depends on D1857 to catch such bugs in the RTS (such as #11487).
      
      Test Plan:
      Did a build with
      ```
      BuildFlavour = quick-llvm
      SRC_HC_OPTS_STAGE1 = -fllvm-fill-undef-with-garbage
      ```
      The build crashed when running ghc-stage2, as expected.
      
      Reviewers: austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D1858
      d50609e8
  9. 13 Oct, 2015 1 commit
    • Erik de Castro Lopo's avatar
      Switch to LLVM version 3.7 · 29310b62
      Erik de Castro Lopo authored
      Before this commit, GHC only supported LLVM 3.6. Now it only supports
      LLVM 3.7 which was released in August 2015. LLVM version 3.6 and earlier
      do not work on AArch64/Arm64, but 3.7 does.
      
      Also:
      * Add CC_Ghc constructor to LlvmCallConvention.
      * Replace `maxSupportLlvmVersion`/`minSupportLlvmVersion` with
        a single `supportedLlvmVersion` variable.
      * Get `supportedLlvmVersion` from version specified in configure.ac.
      * Drop llvmVersion field from DynFlags (no longer needed because only
        one version is supported).
      
      Test Plan: Validate on x86_64 and arm
      
      Reviewers: bgamari, austin
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D1320
      
      GHC Trac Issues: #10953
      29310b62
  10. 09 Oct, 2015 2 commits
  11. 02 Oct, 2015 1 commit
  12. 04 Jul, 2015 1 commit
    • Michal Terepeta's avatar
      Support MO_{Add,Sub}IntC and MO_Add2 in the LLVM backend · b1d1c652
      Michal Terepeta authored and Ben Gamari's avatar Ben Gamari committed
      This includes:
      
      - Adding new LlvmType called LMStructP that represents an unpacked
        struct (this is necessary since LLVM's instructions the
        llvm.sadd.with.overflow.* return an unpacked struct).
      
      - Modifications to LlvmCodeGen.CodeGen to generate the LLVM
        instructions for the primops.
      
      - Modifications to StgCmmPrim to actually use those three instructions
        if we use the LLVM backend (so far they were only used for NCG).
      
      Test Plan: validate
      
      Reviewers: austin, rwbarton, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie, bgamari
      
      Differential Revision: https://phabricator.haskell.org/D991
      
      GHC Trac Issues: #9430
      b1d1c652
  13. 21 Nov, 2014 1 commit
    • Ben Gamari's avatar
      llvmGen: Compatibility with LLVM 3.5 (re #9142) · e16a342d
      Ben Gamari authored and Herbert Valerio Riedel's avatar Herbert Valerio Riedel committed
      Due to changes in LLVM 3.5 aliases now may only refer to definitions.
      Previously to handle symbols defined outside of the current commpilation
      unit GHC would emit both an `external` declaration, as well as an alias
      pointing to it, e.g.,
      
          @stg_BCO_info = external global i8
          @stg_BCO_info$alias = alias private i8* @stg_BCO_info
      
      Where references to `stg_BCO_info` will use the alias
      `stg_BCO_info$alias`. This is not permitted under the new alias
      behavior, resulting in errors resembling,
      
          Alias must point to a definition
          i8* @"stg_BCO_info$alias"
      
      To fix this, we invert the naming relationship between aliases and
      definitions. That is, now the symbol definition takes the name
      `@stg_BCO_info$def` and references use the actual name, `@stg_BCO_info`.
      This means the external symbols can be handled by simply emitting an
      `external` declaration,
      
          @stg_BCO_info = external global i8
      
      Whereas in the case of a forward declaration we emit,
      
          @stg_BCO_info = alias private i8* @stg_BCO_info$def
      
      Reviewed By: austin
      
      Differential Revision: https://phabricator.haskell.org/D155
      e16a342d
  14. 15 May, 2014 1 commit
    • Herbert Valerio Riedel's avatar
      Add LANGUAGE pragmas to compiler/ source files · 23892440
      Herbert Valerio Riedel authored
      In some cases, the layout of the LANGUAGE/OPTIONS_GHC lines has been
      reorganized, while following the convention, to
      
      - place `{-# LANGUAGE #-}` pragmas at the top of the source file, before
        any `{-# OPTIONS_GHC #-}`-lines.
      
      - Moreover, if the list of language extensions fit into a single
        `{-# LANGUAGE ... -#}`-line (shorter than 80 characters), keep it on one
        line. Otherwise split into `{-# LANGUAGE ... -#}`-lines for each
        individual language extension. In both cases, try to keep the
        enumeration alphabetically ordered.
        (The latter layout is preferable as it's more diff-friendly)
      
      While at it, this also replaces obsolete `{-# OPTIONS ... #-}` pragma
      occurences by `{-# OPTIONS_GHC ... #-}` pragmas.
      23892440
  15. 27 Jun, 2013 7 commits
    • Peter Wortmann's avatar
      Major Llvm refactoring · a948fe83
      Peter Wortmann authored and dterei's avatar dterei committed
      This combined patch reworks the LLVM backend in a number of ways:
      
      1. Most prominently, we introduce a LlvmM monad carrying the contents of
         the old LlvmEnv around. This patch completely removes LlvmEnv and
         refactors towards standard library monad combinators wherever possible.
      
      2. Support for streaming - we can now generate chunks of Llvm for Cmm as
         it comes in. This might improve our speed.
      
      3. To allow streaming, we need a more flexible way to handle forward
         references. The solution (getGlobalPtr) unifies LlvmCodeGen.Data
         and getHsFunc as well.
      
      4. Skip alloca-allocation for registers that are actually never written.
         LLVM will automatically eliminate these, but output is smaller and
         friendlier to human eyes this way.
      
      5. We use LlvmM to collect references for llvm.used. This allows places
         other than cmmProcLlvmGens to generate entries.
      a948fe83
    • Peter Wortmann's avatar
      Use full contents size for arrays · fa6cbdfb
      Peter Wortmann authored and dterei's avatar dterei committed
      I am not quite sure at what point it makes sense to look at arrays as
      pointers, but I ran into at least one use case that strongly suggested
      doing it this way (calculating the actual size of structures, to be exact).
      fa6cbdfb
    • Peter Wortmann's avatar
      Extend globals to aliases · 720a87c7
      Peter Wortmann authored and dterei's avatar dterei committed
      Also give them a proper constructor - getGlobalVar and getGlobalValue
      map directly to the accessors.
      720a87c7
    • Peter Wortmann's avatar
      Use SDoc for all LLVM pretty-printing · 99d39221
      Peter Wortmann authored and dterei's avatar dterei committed
      This patch reworks some parts of the LLVM pretty-printing code that were
      still using Show and String. Now we should be using SDoc and Outputable
      throughout. Note that many get*Name functions become pp*Name
      here as a side-effect.
      99d39221
    • Peter Wortmann's avatar
      Iteration on dterei's metadata design · 12148d91
      Peter Wortmann authored and dterei's avatar dterei committed
      - MetaArgs is not needed, as variables are already meta data
      
      - Same goes for MetaVal - its only reason for existing seems to be to
        support LLVM's strange pretty-printing for meta-data annotations, and
        I feel that is better to keep the data structure clean and handle it in
        the pretty-printing instead.
      
      - Rename "MetaData" to "MetaAnnot". Meta-data is still meta-data when it
        is not associated with an expression or statement - for example compile
        unit data for debugging. I feel the old name was a bit misleading.
      
      - Make the renamed MetaAnnot a proper data type instead of a type alias
        for a pair.
      
      - Rename "MetaExpr" constructor to "MetaStruct". As the data is much more
        like a LLVM structure (not array, as it can contain values).
      
      - Fix a warning
      12148d91
    • dterei's avatar
      3b1d920e
    • dterei's avatar
      280a7ec6
  16. 01 Feb, 2013 1 commit
  17. 17 Jan, 2013 1 commit
  18. 16 Sep, 2012 2 commits
  19. 18 Jan, 2012 1 commit
  20. 12 Jan, 2012 1 commit
  21. 06 Jul, 2011 1 commit
  22. 20 Jul, 2010 1 commit
  23. 13 Jul, 2010 1 commit
  24. 07 Jul, 2010 3 commits
  25. 05 Jul, 2010 2 commits
  26. 28 Jun, 2010 1 commit
  27. 25 Jun, 2010 1 commit
  28. 24 Jun, 2010 1 commit
  29. 22 Jun, 2010 1 commit