Undo the effects of LICM on loop dependencies. This is done by mapping the scalars such as those that are created by LICM and GVN-PRE back to the array elements they were promoted from.
Exec time results (with -polly-position=before-vectorizer)
3mm -71.63%
2mm -71.56%
gemm -71.03%
syrk -44.84%
doitgen -43.18%
syr2k -42.73%
mvt -28.57%
gemver -26.32%
gramschmidt -12.71%
bmm 2.03%
CrystalMk 3.14%
FloatMM 4.35%
cholesky 73.39%
trmm 226.78%
Do not try to apply this patch directly. It requires some other patches to make this patch smaller and that I am going to commit/upload independently. Get the latest from my Github branch.
Comments to explain what is going on here? (because the dirty code-disclaimer?)