summaryrefslogtreecommitdiff
path: root/compiler/specialise/SpecConstr.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/specialise/SpecConstr.hs')
-rw-r--r--compiler/specialise/SpecConstr.hs28
1 files changed, 14 insertions, 14 deletions
diff --git a/compiler/specialise/SpecConstr.hs b/compiler/specialise/SpecConstr.hs
index b07e480ff5..8ced5a87c0 100644
--- a/compiler/specialise/SpecConstr.hs
+++ b/compiler/specialise/SpecConstr.hs
@@ -506,13 +506,13 @@ sc_force to True when calling specLoop. This flag does four things:
* Ignore specConstrCount, to make arbitrary numbers of specialisations
(see specialise)
* Specialise even for arguments that are not scrutinised in the loop
- (see argToPat; Trac #4448)
+ (see argToPat; #4448)
* Only specialise on recursive types a finite number of times
- (see is_too_recursive; Trac #5550; Note [Limit recursive specialisation])
+ (see is_too_recursive; #5550; Note [Limit recursive specialisation])
The flag holds only for specialising a single binding group, and NOT
for nested bindings. (So really it should be passed around explicitly
-and not stored in ScEnv.) Trac #14379 turned out to be caused by
+and not stored in ScEnv.) #14379 turned out to be caused by
f SPEC x = let g1 x = ...
in ...
We force-specialise f (because of the SPEC), but that generates a specialised
@@ -599,7 +599,7 @@ more than N times (controlled by -fspec-constr-recursive=N) we check
specialisations. If sc_count is "no limit" then we arbitrarily
choose 10 as the limit (ugh).
-See Trac #5550. Also Trac #13623, where this test had become over-aggressive,
+See #5550. Also #13623, where this test had become over-aggressive,
and we lost a wonderful specialisation that we really wanted!
Note [NoSpecConstr]
@@ -746,7 +746,7 @@ because the x-binding still exists and we've now duplicated (expensive v).
This seldom happens because let-bound constructor applications are
ANF-ised, but it can happen as a result of on-the-fly transformations in
-SpecConstr itself. Here is Trac #7865:
+SpecConstr itself. Here is #7865:
let {
a'_shr =
@@ -946,7 +946,7 @@ extendBndr env bndr = (env { sc_subst = subst' }, bndr')
extendValEnv :: ScEnv -> Id -> Maybe Value -> ScEnv
extendValEnv env _ Nothing = env
extendValEnv env id (Just cv)
- | valueIsWorkFree cv -- Don't duplicate work!! Trac #7865
+ | valueIsWorkFree cv -- Don't duplicate work!! #7865
= env { sc_vals = extendVarEnv (sc_vals env) id cv }
extendValEnv env _ _ = env
@@ -1048,7 +1048,7 @@ So in extendCaseBndrs we must *also* add the binding
else we lose a useful specialisation for f. This is necessary even
though the simplifier has systematically replaced uses of 'x' with 'y'
and 'b' with 'c' in the code. The use of 'b' in the ValueEnv came
-from outside the case. See Trac #4908 for the live example.
+from outside the case. See #4908 for the live example.
Note [Avoiding exponential blowup]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1786,7 +1786,7 @@ the passed-in SpecInfo, unless there are no calls at all to the function.
The caller can, indeed must, assume this. He should not combine in rhs_usg
himself, or he'll get rhs_usg twice -- and that can lead to an exponential
blowup of duplicates in the CallEnv. This is what gave rise to the massive
-performance loss in Trac #8852.
+performance loss in #8852.
Note [Specialise original body]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1827,7 +1827,7 @@ Now we want f_spec to have strictness LLS, otherwise we'll use call-by-need
when calling f_spec instead of call-by-value. And that can result in
unbounded worsening in space (cf the classic foldl vs foldl')
-See Trac #3437 for a good example.
+See #3437 for a good example.
The function calcSpecStrictness performs the calculation.
@@ -1862,7 +1862,7 @@ via 'a' itself, or be in scope at f's defn. Hence we just take
BUT phantom type synonyms can mess this reasoning up,
eg x::T b with type T b = Int
So we apply expandTypeSynonyms to the bound Ids.
-See Trac # 5458. Yuk.
+See # 5458. Yuk.
Note [SpecConstr call patterns]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1875,7 +1875,7 @@ because both of these will be optimised by Simplify.simplRule. In the
former case such optimisation benign, because the rule will match more
terms; but in the latter we may lose a binding of 'g1' or 'g2', and
end up with a rule LHS that doesn't bind the template variables
-(Trac #10602).
+(#10602).
The simplifier eliminates such things, but SpecConstr itself constructs
new terms by substituting. So the 'mkCast' in the Cast case of scExpr
@@ -1902,7 +1902,7 @@ by trim_pats.
Note [SpecConstr and casts]
~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Consider (Trac #14270) a call like
+Consider (#14270) a call like
let f = e
in ... f (K @(a |> co)) ...
@@ -1925,7 +1925,7 @@ call patterns that
I think this is very rare.
-It is important (e.g. Trac #14936) that this /only/ applies to
+It is important (e.g. #14936) that this /only/ applies to
coercions mentioned in casts. We don't want to be discombobulated
by casts in terms! For example, consider
f ((e1,e2) |> sym co)
@@ -2049,7 +2049,7 @@ trim_pats env fn (SI { si_n_specs = done_spec_count }) pats
emit_trace result
| debugIsOn || hasPprDebug (sc_dflags env)
- -- Suppress this scary message for ordinary users! Trac #5125
+ -- Suppress this scary message for ordinary users! #5125
= pprTrace "SpecConstr" msg result
| otherwise
= result