From LangRef:
contract: Allow floating-point contraction (e.g. fusing a multiply followed by an addition into a fused multiply-and-add). This does not enable reassociating to form arbitrary contractions. For example, `(a*b) + (c*d) + e can not be transformed into (a*b) + ((c*d) + e)` to create two fma operations.
reassoc: Allow reassociation transformations for floating-point instructions. This may dramatically change results in floating-point.
So contract should only help in fusing several operations into one (FMA), not rearrange nodes like (fma (fmul x, c1), c2, y) into (fma x, c1*c2, y).
This comment line seems to be misplaced now - it can be moved above the FlagInserter declaration or deleted.