Skip to content
Snippets Groups Projects
  1. Feb 06, 2023
  2. Nov 29, 2022
  3. Nov 11, 2022
    • Simon Peyton Jones's avatar
      Type vs Constraint: finally nailed · 778c6adc
      Simon Peyton Jones authored and Simon Peyton Jones's avatar Simon Peyton Jones committed
      This big patch addresses the rats-nest of issues that have plagued
      us for years, about the relationship between Type and Constraint.
      See #11715/#21623.
      
      The main payload of the patch is:
      * To introduce CONSTRAINT :: RuntimeRep -> Type
      * To make TYPE and CONSTRAINT distinct throughout the compiler
      
      Two overview Notes in GHC.Builtin.Types.Prim
      
      * Note [TYPE and CONSTRAINT]
      
      * Note [Type and Constraint are not apart]
        This is the main complication.
      
      The specifics
      
      * New primitive types (GHC.Builtin.Types.Prim)
        - CONSTRAINT
        - ctArrowTyCon (=>)
        - tcArrowTyCon (-=>)
        - ccArrowTyCon (==>)
        - funTyCon     FUN     -- Not new
        See Note [Function type constructors and FunTy]
        and Note [TYPE and CONSTRAINT]
      
      * GHC.Builtin.Types:
        - New type Constraint = CONSTRAINT LiftedRep
        - I also stopped nonEmptyTyCon being built-in; it only needs to be wired-in
      
      * Exploit the fact that Type and Constraint are distinct throughout GHC
        - Get rid of tcView in favour of coreView.
        - Many tcXX functions become XX functions.
          e.g. tcGetCastedTyVar --> getCastedTyVar
      
      * Kill off Note [ForAllTy and typechecker equality], in (old)
        GHC.Tc.Solver.Canonical.  It said that typechecker-equality should ignore
        the specified/inferred distinction when comparein two ForAllTys.  But
        that wsa only weakly supported and (worse) implies that we need a separate
        typechecker equality, different from core equality. No no no.
      
      * GHC.Core.TyCon: kill off FunTyCon in data TyCon.  There was no need for it,
        and anyway now we have four of them!
      
      * GHC.Core.TyCo.Rep: add two FunTyFlags to FunCo
        See Note [FunCo] in that module.
      
      * GHC.Core.Type.  Lots and lots of changes driven by adding CONSTRAINT.
        The key new function is sORTKind_maybe; most other changes are built
        on top of that.
      
        See also `funTyConAppTy_maybe` and `tyConAppFun_maybe`.
      
      * Fix a longstanding bug in GHC.Core.Type.typeKind, and Core Lint, in
        kinding ForAllTys.  See new tules (FORALL1) and (FORALL2) in GHC.Core.Type.
        (The bug was that before (forall (cv::t1 ~# t2). blah), where
        blah::TYPE IntRep, would get kind (TYPE IntRep), but it should be
        (TYPE LiftedRep).  See Note [Kinding rules for types] in GHC.Core.Type.
      
      * GHC.Core.TyCo.Compare is a new module in which we do eqType and cmpType.
        Of course, no tcEqType any more.
      
      * GHC.Core.TyCo.FVs. I moved some free-var-like function into this module:
        tyConsOfType, visVarsOfType, and occCheckExpand.  Refactoring only.
      
      * GHC.Builtin.Types.  Compiletely re-engineer boxingDataCon_maybe to
        have one for each /RuntimeRep/, rather than one for each /Type/.
        This dramatically widens the range of types we can auto-box.
        See Note [Boxing constructors] in GHC.Builtin.Types
        The boxing types themselves are declared in library ghc-prim:GHC.Types.
      
        GHC.Core.Make.  Re-engineer the treatment of "big" tuples (mkBigCoreVarTup
        etc) GHC.Core.Make, so that it auto-boxes unboxed values and (crucially)
        types of kind Constraint. That allows the desugaring for arrows to work;
        it gathers up free variables (including dictionaries) into tuples.
        See  Note [Big tuples] in GHC.Core.Make.
      
        There is still work to do here: #22336. But things are better than
        before.
      
      * GHC.Core.Make.  We need two absent-error Ids, aBSENT_ERROR_ID for types of
        kind Type, and aBSENT_CONSTRAINT_ERROR_ID for vaues of kind Constraint.
        Ditto noInlineId vs noInlieConstraintId in GHC.Types.Id.Make;
        see Note [inlineId magic].
      
      * GHC.Core.TyCo.Rep. Completely refactor the NthCo coercion.  It is now called
        SelCo, and its fields are much more descriptive than the single Int we used to
        have.  A great improvement.  See Note [SelCo] in GHC.Core.TyCo.Rep.
      
      * GHC.Core.RoughMap.roughMatchTyConName.  Collapse TYPE and CONSTRAINT to
        a single TyCon, so that the rough-map does not distinguish them.
      
      * GHC.Core.DataCon
        - Mainly just improve documentation
      
      * Some significant renamings:
        GHC.Core.Multiplicity: Many -->  ManyTy (easier to grep for)
                               One  -->  OneTy
        GHC.Core.TyCo.Rep TyCoBinder      -->   GHC.Core.Var.PiTyBinder
        GHC.Core.Var      TyCoVarBinder   -->   ForAllTyBinder
                          AnonArgFlag     -->   FunTyFlag
                          ArgFlag         -->   ForAllTyFlag
        GHC.Core.TyCon    TyConTyCoBinder --> TyConPiTyBinder
        Many functions are renamed in consequence
        e.g. isinvisibleArgFlag becomes isInvisibleForAllTyFlag, etc
      
      * I refactored FunTyFlag (was AnonArgFlag) into a simple, flat data type
          data FunTyFlag
            = FTF_T_T           -- (->)  Type -> Type
            | FTF_T_C           -- (-=>) Type -> Constraint
            | FTF_C_T           -- (=>)  Constraint -> Type
            | FTF_C_C           -- (==>) Constraint -> Constraint
      
      * GHC.Tc.Errors.Ppr.  Some significant refactoring in the TypeEqMisMatch case
        of pprMismatchMsg.
      
      * I made the tyConUnique field of TyCon strict, because I
        saw code with lots of silly eval's.  That revealed that
        GHC.Settings.Constants.mAX_SUM_SIZE can only be 63, because
        we pack the sum tag into a 6-bit field.  (Lurking bug squashed.)
      
      Fixes
      * #21530
      
      Updates haddock submodule slightly.
      
      Performance changes
      ~~~~~~~~~~~~~~~~~~~
      I was worried that compile times would get worse, but after
      some careful profiling we are down to a geometric mean 0.1%
      increase in allocation (in perf/compiler).  That seems fine.
      
      There is a big runtime improvement in T10359
      
      Metric Decrease:
          LargeRecord
          MultiLayerModulesTH_OneShot
          T13386
          T13719
      Metric Increase:
          T8095
      778c6adc
  4. Jun 07, 2022
  5. Aug 26, 2021
    • Sebastian Graf's avatar
      CallArity: Consider shadowing introduced by case and field binders · b3653351
      Sebastian Graf authored and Marge Bot's avatar Marge Bot committed
      In #20283, we saw a regression in `simple` due to CallArity for a very subtle
      reason: It simply didn't handle shadowing of case binders and constructor field
      binders!
      
      The test case T20283 has a very interesting binding `n_X1` that we want to
      eta-expand and that has a Unique (on GHC HEAD) that is reused by the Simplifier
      for a case binder:
      ```
        let { n_X1 = ... } in
          ...
            let {
              lvl_s1Ul
                = ... case x_a1Rg of wild_X1 {
                        __DEFAULT -> f_s1Tx rho_value_awA (GHC.Types.I# wild_X1);
                        0# -> lvl_s1TN
                      } ...
                } in
            letrec {
              go3_X3
                = \ (x_X4 :: GHC.Prim.Int#) (v_a1P9 [OS=OneShot] :: Double) ->
                    let {
                      karg_s1Wu = ...
                                          case lvl_s1Ul of { GHC.Types.D# y_a1Qf ->
                                  ...
                          } } in
                    case GHC.Prim.==# x_X4 y_a1R7 of {
                      __DEFAULT -> go3_X3 (GHC.Prim.+# x_X4 1#) karg_s1Wu;
                      1# -> n_X1 karg_s1Wu -- Here we will assume that karg calls n_X1!
                    }; } in
            go3_X3 0#;
      ```
      
      Since the Case case of CallArity doesn't delete `X1` from the set of variables
      it is interested in knowing the usages of, we leak a very boring usage (of the
      case binder!) into the co-call graph that we mistakenly take for a usage of
      `n_X1`. We conclude that `lvl_s1Ul` and transitively `karg_s1Wu` call `n_X1`
      when really they don't. That culminates in the conclusion that `n_X1 karg_s1Wu`
      calls `n_X1` more than once. Wrong!
      
      Fortunately, this bug (which has been there right from CallArity's inception,
      I suppose) will never lead to a CallArity that is too optimistic. So by fixing
      this bug, we get strictly more opportunities for CallArity and all of them
      should be sound to exploit.
      
      Fixes #20283.
      b3653351
  6. Jun 07, 2021
    • Sylvain Henry's avatar
      Make Logger independent of DynFlags · 4dc681c7
      Sylvain Henry authored
      Introduce LogFlags as a independent subset of DynFlags used for logging.
      As a consequence in many places we don't have to pass both Logger and
      DynFlags anymore.
      
      The main reason for this refactoring is that I want to refactor the
      systools interfaces: for now many systools functions use DynFlags both
      to use the Logger and to fetch their parameters (e.g. ldInputs for the
      linker). I'm interested in refactoring the way they fetch their
      parameters (i.e. use dedicated XxxOpts data types instead of DynFlags)
      for #19877. But if I did this refactoring before refactoring the Logger,
      we would have duplicate parameters (e.g. ldInputs from DynFlags and
      linkerInputs from LinkerOpts). Hence this patch first.
      
      Some flags don't really belong to LogFlags because they are subsystem
      specific (e.g. most DumpFlags). For example -ddump-asm should better be
      passed in NCGConfig somehow. This patch doesn't fix this tight coupling:
      the dump flags are part of the UI but they are passed all the way down
      for example to infer the file name for the dumps.
      
      Because LogFlags are a subset of the DynFlags, we must update the former
      when the latter changes (not so often). As a consequence we now use
      accessors to read/write DynFlags in HscEnv instead of using `hsc_dflags`
      directly.
      
      In the process I've also made some subsystems less dependent on DynFlags:
      
      - CmmToAsm: by passing some missing flags via NCGConfig (see new fields
        in GHC.CmmToAsm.Config)
      - Core.Opt.*:
          - by passing -dinline-check value into UnfoldingOpts
          - by fixing some Core passes interfaces (e.g. CallArity, FloatIn)
            that took DynFlags argument for no good reason.
          - as a side-effect GHC.Core.Opt.Pipeline.doCorePass is much less
            convoluted.
      4dc681c7
  7. Feb 14, 2021
    • Sylvain Henry's avatar
      Refactor Logger · 8e2f85f6
      Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
      Before this patch, the only way to override GHC's default logging
      behavior was to set `log_action`, `dump_action` and `trace_action`
      fields in DynFlags. This patch introduces a new Logger abstraction and
      stores it in HscEnv instead.
      
      This is part of #17957 (avoid storing state in DynFlags). DynFlags are
      duplicated and updated per-module (because of OPTIONS_GHC pragma), so
      we shouldn't store global state in them.
      
      This patch also fixes a race in parallel "--make" mode which updated
      the `generatedDumps` IORef concurrently.
      
      Bump haddock submodule
      
      The increase in MultilayerModules is tracked in #19293.
      
      Metric Increase:
          MultiLayerModules
      8e2f85f6
  8. Jan 22, 2021
  9. Nov 03, 2020
    • Ryan Scott's avatar
      Display results of GHC.Core.Lint.lint* functions consistently · bfb1e272
      Ryan Scott authored and Marge Bot's avatar Marge Bot committed
      Previously, the functions in `GHC.Core.Lint` used a patchwork of
      different ways to display Core Lint errors:
      
      * `lintPassResult` (which is the source of most Core Lint errors) renders
        Core Lint errors with a distinctive banner (e.g.,
        `*** Core Lint errors : in result of ... ***`) that sets them apart
        from ordinary GHC error messages.
      * `lintAxioms`, in contrast, uses a completely different code path that
        displays Core Lint errors in a rather confusing manner. For example,
        the program in #18770 would give these results:
      
        ```
        Bug.hs:1:1: error:
            Bug.hs:12:1: warning:
                Non-*-like kind when *-like expected: RuntimeRep
                when checking the body of forall: 'TupleRep '[r]
                In the coercion axiom Bug.N:T :: []. Bug.T ~_R Any
                Substitution: [TCvSubst
                                 In scope: InScope {r}
                                 Type env: [axl :-> r]
                                 Co env: []]
          |
        1 | {-# LANGUAGE DataKinds #-}
          | ^
        ```
      * Further digging reveals that `GHC.IfaceToCore` displays Core Lint
        errors for iface unfoldings as though they were a GHC panic. See, for
        example, this excerpt from #17723:
      
        ```
        ghc: panic! (the 'impossible' happened)
          (GHC version 8.8.2 for x86_64-unknown-linux):
                Iface Lint failure
          In interface for Lib
          ...
        ```
      
      This patch makes all of these code paths display Core Lint errors and
      warnings consistently. I decided to adopt the conventions that
      `lintPassResult` currently uses, as they appear to have been around the
      longest (and look the best, in my subjective opinion). We now use the
      `displayLintResult` function for all three scenarios mentioned above.
      For example, here is what the Core Lint error for the program in #18770 looks
      like after this patch:
      
      ```
      [1 of 1] Compiling Bug              ( Bug.hs, Bug.o )
      *** Core Lint errors : in result of TcGblEnv axioms ***
      Bug.hs:12:1: warning:
          Non-*-like kind when *-like expected: RuntimeRep
          when checking the body of forall: 'TupleRep '[r_axn]
          In the coercion axiom N:T :: []. T ~_R Any
          Substitution: [TCvSubst
                           In scope: InScope {r_axn}
                           Type env: [axn :-> r_axn]
                           Co env: []]
      *** Offending Program ***
      axiom N:T :: T = Any -- Defined at Bug.hs:12:1
      *** End of Offense ***
      
      <no location info>: error:
      Compilation had errors
      ```
      
      Fixes #18770.
      bfb1e272
  10. Aug 22, 2020
  11. Jun 17, 2020
    • Sylvain Henry's avatar
      Update testsuite · f817d816
      Sylvain Henry authored
      * support detection of slow ghc-bignum backend (to replace the detection
        of integer-simple use). There are still some test cases that the
        native backend doesn't handle efficiently enough.
      
      * remove tests for GMP only functions that have been removed from
        ghc-bignum
      
      * fix test results showing dependent packages (e.g. integer-gmp) or
        showing suggested instances
      
      * fix test using Integer/Natural API or showing internal names
      f817d816
    • Krzysztof Gogolewski's avatar
      Linear types (#15981) · 40fa237e
      Krzysztof Gogolewski authored and Ben Gamari's avatar Ben Gamari committed
      This is the first step towards implementation of the linear types proposal
      (https://github.com/ghc-proposals/ghc-proposals/pull/111).
      
      It features
      
      * A language extension -XLinearTypes
      * Syntax for linear functions in the surface language
      * Linearity checking in Core Lint, enabled with -dlinear-core-lint
      * Core-to-core passes are mostly compatible with linearity
      * Fields in a data type can be linear or unrestricted; linear fields
        have multiplicity-polymorphic constructors.
        If -XLinearTypes is disabled, the GADT syntax defaults to linear fields
      
      The following items are not yet supported:
      
      * a # m -> b syntax (only prefix FUN is supported for now)
      * Full multiplicity inference (multiplicities are really only checked)
      * Decent linearity error messages
      * Linear let, where, and case expressions in the surface language
        (each of these currently introduce the unrestricted variant)
      * Multiplicity-parametric fields
      * Syntax for annotating lambda-bound or let-bound with a multiplicity
      * Syntax for non-linear/multiple-field-multiplicity records
      * Linear projections for records with a single linear field
      * Linear pattern synonyms
      * Multiplicity coercions (test LinearPolyType)
      
      A high-level description can be found at
      https://ghc.haskell.org/trac/ghc/wiki/LinearTypes/Implementation
      Following the link above you will find a description of the changes made to Core.
      This commit has been authored by
      
      * Richard Eisenberg
      * Krzysztof Gogolewski
      * Matthew Pickering
      * Arnaud Spiwack
      
      With contributions from:
      
      * Mark Barbone
      * Alexander Vershilov
      
      Updates haddock submodule.
      40fa237e
  12. Apr 26, 2020
  13. Apr 18, 2020
  14. Mar 29, 2020
  15. Mar 18, 2020
  16. Mar 17, 2020
  17. Feb 26, 2020
  18. Feb 22, 2020
  19. Jan 04, 2020
  20. Feb 24, 2019
    • Simon Peyton Jones's avatar
      Add AnonArgFlag to FunTy · 6cce36f8
      Simon Peyton Jones authored and Marge Bot's avatar Marge Bot committed
      The big payload of this patch is:
      
        Add an AnonArgFlag to the FunTy constructor
        of Type, so that
          (FunTy VisArg   t1 t2) means (t1 -> t2)
          (FunTy InvisArg t1 t2) means (t1 => t2)
      
      The big payoff is that we have a simple, local test to make
      when decomposing a type, leading to many fewer calls to
      isPredTy. To me the code seems a lot tidier, and probably
      more efficient (isPredTy has to take the kind of the type).
      
      See Note [Function types] in TyCoRep.
      
      There are lots of consequences
      
      * I made FunTy into a record, so that it'll be easier
        when we add a linearity field, something that is coming
        down the road.
      
      * Lots of code gets touched in a routine way, simply because it
        pattern matches on FunTy.
      
      * I wanted to make a pattern synonym for (FunTy2 arg res), which
        picks out just the argument and result type from the record. But
        alas the pattern-match overlap checker has a heart attack, and
        either reports false positives, or takes too long.  In the end
        I gave up on pattern synonyms.
      
        There's some commented-out code in TyCoRep that shows what I
        wanted to do.
      
      * Much more clarity about predicate types, constraint types
        and (in particular) equality constraints in kinds.  See TyCoRep
        Note [Types for coercions, predicates, and evidence]
        and Note [Constraints in kinds].
      
        This made me realise that we need an AnonArgFlag on
        AnonTCB in a TyConBinder, something that was really plain
        wrong before. See TyCon Note [AnonTCB InivsArg]
      
      * When building function types we must know whether we
        need VisArg (mkVisFunTy) or InvisArg (mkInvisFunTy).
        This turned out to be pretty easy in practice.
      
      * Pretty-printing of types, esp in IfaceType, gets
        tidier, because we were already recording the (->)
        vs (=>) distinction in an ad-hoc way.  Death to
        IfaceFunTy.
      
      * mkLamType needs to keep track of whether it is building
        (t1 -> t2) or (t1 => t2).  See Type
        Note [mkLamType: dictionary arguments]
      
      Other minor stuff
      
      * Some tidy-up in validity checking involving constraints;
        Trac #16263
      6cce36f8
  21. Nov 07, 2018
    • davide's avatar
      testsuite: Save performance metrics in git notes. · 932cd41d
      davide authored
      This patch makes the following improvement:
        - Automatically records test metrics (per test environment) so that
          the programmer need not supply nor update expected values in *.T
          files.
          - On expected metric changes, the programmer need only indicate the
            direction of change in the git commit message.
        - Provides a simple python tool "perf_notes.py" to compare metrics
          over time.
      
      Issues:
        - Using just the previous commit allows performance to drift with each
          commit.
          - Currently we allow drift as we have a preference for minimizing
            false positives.
          - Some possible alternatives include:
            - Use metrics from a fixed commit per test: the last commit that
              allowed a change in performance (else the oldest metric)
            - Or use some sort of aggregate since the last commit that allowed
              a change in performance (else all available metrics)
            - These alternatives may result in a performance issue (with the
              test driver) having to heavily search git commits/notes.
        - Run locally, performance tests will trivially pass unless the tests
          were run locally on the previous commit. This is often not the case
          e.g.  after pulling recent changes.
      
      Previously, *.T files contain statements such as:
      ```
      stats_num_field('peak_megabytes_allocated', (2, 1))
      compiler_stats_num_field('bytes allocated',
                               [(wordsize(64), 165890392, 10)])
      ```
      This required the programmer to give the expected values and a tolerance
      deviation (percentage). With this patch, the above statements are
      replaced with:
      ```
      collect_stats('peak_megabytes_allocated', 5)
      collect_compiler_stats('bytes allocated', 10)
      ```
      So that programmer must only enter which metrics to test and a tolerance
      deviation. No expected value is required. CircleCI will then run the
      tests per test environment and record the metrics to a git note for that
      commit and push them to the git.haskell.org ghc repo. Metrics will be
      compared to the previous commit. If they are different by the tolerance
      deviation from the *.T file, then the corresponding test will fail. By
      adding to the git commit message e.g.
      ```
       # Metric (In|De)crease <metric(s)> <options>: <tests>
      Metric Increase ['bytes allocated', 'peak_megabytes_allocated'] \
               (test_env='linux_x86', way='default'):
          Test012, Test345
      Metric Decrease 'bytes allocated':
          Test678
      Metric Increase:
          Test711
      ```
      This will allow the noted changes (letting the test pass). Note that by
      omitting metrics or options, the change will apply to all possible
      metrics/options (i.e. in the above, an increase for all metrics in all
      test environments is allowed for Test711)
      
      phabricator will use the message in the description
      
      Reviewers: bgamari, hvr
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, carter
      
      GHC Trac Issues: #12758
      
      Differential Revision: https://phabricator.haskell.org/D5059
      932cd41d
  22. Sep 21, 2017
  23. Mar 14, 2017
  24. Mar 01, 2017
    • David Feuer's avatar
      Upgrade UniqSet to a newtype · cbe569a5
      David Feuer authored
      The fundamental problem with `type UniqSet = UniqFM` is that `UniqSet`
      has a key invariant `UniqFM` does not. For example, `fmap` over
      `UniqSet` will generally produce nonsense.
      
      * Upgrade `UniqSet` from a type synonym to a newtype.
      
      * Remove unused and shady `extendVarSet_C` and `addOneToUniqSet_C`.
      
      * Use cached unique in `tyConsOfType` by replacing
        `unitNameEnv (tyConName tc) tc` with `unitUniqSet tc`.
      
      Reviewers: austin, hvr, goldfire, simonmar, niteria, bgamari
      
      Reviewed By: niteria
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D3146
      cbe569a5
  25. Feb 20, 2017
    • Simon Peyton Jones's avatar
      Kill off the remaining Rec [] · 8a9b57f6
      Simon Peyton Jones authored
      The desugarer was producing an empty Rec group, which is never
      supposed to happen.  This small patch stops that happening.
      
      Next up: Lint should check.
      8a9b57f6
  26. Dec 26, 2016
    • Joachim Breitner's avatar
      CallArity: Use exprIsCheap to detect thunks · 815099cc
      Joachim Breitner authored
      Originally, everything that is not in WHNF (`exprIsWHNF`) is considered
      a thunk, not eta-expanded, to avoid losing any sharing. This is also how
      the published papers on Call Arity describe it.
      
      In practice, there are thunks that do a just little work, such as
      pattern-matching on a variable, and the benefits of eta-expansion likely
      oughtweigh the cost of doing that repeatedly. Therefore, this
      implementation of Call Arity considers everything that is not cheap
      (`exprIsCheap`) as a thunk.
      
      Nofib reports -2.58% allocations for scs and -40.93% allocation for
      wheel-sieve1; the latter has - 2.92% runtime.
      815099cc
  27. Jun 07, 2016
    • niteria's avatar
      Kill varSetElems · 7008515b
      niteria authored
      This eradicates varSetElems from the codebase. This function
      used to introduce nondeterminism.
      I've also documented benign nondeterminism in three places.
      
      GHC Trac: #4012
      7008515b
  28. Apr 15, 2015
    • Joachim Breitner's avatar
      Improve Call Arity performance · a9ca67f6
      Joachim Breitner authored
      This improves how the Call Arity deals with "boring" variables. Boring
      variables are those where it does not bother to include in the analysis
      result, so whenever something is looked up in the analysis result, we
      have to make a conservative assumption about them.
      
      Previously, we extended the result with such conservative information
      about them, to keep the code uniform, but that could blow up the amount
      of data passed around, even if only temporarily, and slowed things down.
      
      We now pass around an explicit list (well, set) of variable that are
      boring and take that into account whenever we use the result. Not as
      pretty, but noticably faster.
      a9ca67f6
  29. Apr 03, 2015
  30. Mar 07, 2015
  31. Sep 01, 2014
  32. Jul 17, 2014
    • Joachim Breitner's avatar
      Adjust a few performance numbers · 13cb4c27
      Joachim Breitner authored
      These did not yet trigger a failure, but are more than 1% away from the
      expected value. Since I now start collecting logs to investigate
      deviations from the expected value, it makes sense to reset them. This
      way we know that every significat deviation was caused since this
      commit.
      
      I only updated bytes_allocated numbers, as these are (mostly)
      deterministic. Other depend, AFAIK, on sampling timing, so I did not
      bother.
      13cb4c27
  33. Jun 28, 2014
    • Herbert Valerio Riedel's avatar
      Simplify .gitignore files · 767b9ddf
      Herbert Valerio Riedel authored
      
      It's a bit confusing to have .gitignore files spread all over the
      filesystem. This commit tries to consolidate those into one .gitignore
      file per component. Moreover, we try to describe files to be ignored which
      happen to have a common identifying pattern by glob patterns.
      
      Signed-off-by: Herbert Valerio Riedel's avatarHerbert Valerio Riedel <hvr@gnu.org>
      767b9ddf
  34. May 30, 2014
  35. Apr 07, 2014
  36. Mar 14, 2014
Loading