Skip to content
  • Andreas Klebinger's avatar
    Tag inference work. · 0e93023e
    Andreas Klebinger authored and Matthew Pickering's avatar Matthew Pickering committed
    This does three major things:
    * Enforce the invariant that all strict fields must contain tagged
    pointers.
    * Try to predict the tag on bindings in order to omit tag checks.
    * Allows functions to pass arguments unlifted (call-by-value).
    
    The former is "simply" achieved by wrapping any constructor allocations with
    a case which will evaluate the respective strict bindings.
    
    The prediction is done by a new data flow analysis based on the STG
    representation of a program. This also helps us to avoid generating
    redudant cases for the above invariant.
    
    StrictWorkers are created by W/W directly and SpecConstr indirectly.
    See the Note [Strict Worker Ids]
    
    Other minor changes:
    
    * Add StgUtil module containing a few functions needed by, but
      not specific to the tag analysis.
    
    -------------------------
    Metric Decrease:
    	T12545
    	T18698b
    	T18140
    	T18923
            LargeRecord
    Metric Increase:
            LargeRecord
    	ManyAlternatives
    	ManyConstructors
    	T10421
    	T12425
    	T12707
    	T13035
    	T13056
    	T13253
    	T13253-spj
    	T13379
    	T15164
    	T18282
    	T18304
    	T18698a
    	T1969
    	T20049
    	T3294
    	T4801
    	T5321FD
    	T5321Fun
    	T783
    	T9233
    	T9675
    	T9961
    	T19695
    	WWRec
    -------------------------
    0e93023e