http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60042
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- PR23855 fixed we'd get for the analysis of the remaining DRs in the outermost loop for example for matrix A: Creating dr for *_290 analyze_innermost: success. base_address: pretmp_1792 + (sizetype) ((long unsigned int) pretmp_1974 * 4) offset from base address: 0 constant offset from base address: 4 step: 4 aligned to: 128 base_object: *pretmp_1792 + (sizetype) ((long unsigned int) (((pretmp_1831 + 1) * pretmp_1794 + 1) * pretmp_1796) * 4) Access function 0: {{{4B, +, (sizetype) ((long unsigned int) (pretmp_1794 * pretmp_1796) * 4)}_2, +, (sizetype) ((long unsigned int) pretmp_1796 * 4)}_6, +, 4}_7 Creating dr for *_81 analyze_innermost: success. base_address: pretmp_1792 + (sizetype) ((long unsigned int) pretmp_1915 * 4) offset from base address: 0 constant offset from base address: 4 step: 4 aligned to: 128 base_object: *pretmp_1792 + (sizetype) ((long unsigned int) (((pretmp_1804 + 1) * pretmp_1794 + 1) * pretmp_1796) * 4) Access function 0: {{{4B, +, (sizetype) ((long unsigned int) (pretmp_1794 * pretmp_1796) * 4)}_2, +, (sizetype) ((long unsigned int) pretmp_1796 * 4)}_6, +, 4}_7 Creating dr for *_60 analyze_innermost: success. base_address: pretmp_1792 + (sizetype) ((long unsigned int) pretmp_1902 * 4) offset from base address: 0 constant offset from base address: 4 step: 4 aligned to: 128 base_object: *pretmp_1792 + (sizetype) ((long unsigned int) (((pretmp_1801 + 1) * pretmp_1794 + 1) * pretmp_1796) * 4) Access function 0: {{{4B, +, (sizetype) ((long unsigned int) (pretmp_1794 * pretmp_1796) * 4)}_2, +, (sizetype) ((long unsigned int) pretmp_1796 * 4)}_6, +, 4}_7 which still requires hard work to actually combine as the base objects still differ (but the access function is equal).