[PATCH] D103834: [SCEV] Properly guard reasoning about infinite loops being UB on mustprogress

Bjorn Pettersson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 10 09:31:33 PDT 2021


bjope added subscribers: uabelho, bjope.
bjope added a comment.

Hi @reames,

We've seen some regressions after this patch, with SCEV not being able to calculate the backedge taken counts for a loop.

Although I guess the idea here is to make the code more restrictive in some way (so maybe that should be expected).

Anyway, I tried to make a small reproducer here, to visualize the problem:
https://godbolt.org/#z:OYLghAFBqd5TKALEBjA9gEwKYFFMCWALugE4A0BIEAZugHZEDKqAhgDbYgCMALOXUYBVAM7YACgA8QAcgAMM8gCse5dq3qgA%2BjtTkxnVEQINq2epgDC6dgFcAtvRAAmAOzlzmADIF62AHIOAEbYpCAAbOQADugixCb01naOLu4xccYMPn6B9iFhkQbYRglMRKykREkOTm762IaZ9GUVRNkBwaER%2BuWV1Sl1Ir1tvh15XeEAlProtqSoXDIA9EsA1AC0qwAqSAQiqwDuvpjoB6tIrPtESNirlusis/O3GDir2JKs9lGcAHQApHIAIIrDarf7OZzWb4ETikcHOADM3AhzlWe1WRFIGhEdFI9l8wEx6FWXi8ADUALLogBKgJBa02O1YRFWAEkaedLqsQuZVvYNLYOOwAJ6rDBRAjYTDEhHOR5zBYIxHOVH00FMm70Q63WxiVaEGg0ULmVkAN1CcQY%2B3QNFW6CirJIqzEtwIdqYllw5PFGlWUVI0oIRkxNx5rFQAGtpcBsOtytHtRhbIwRADgaDVqsAOrEJD2x2rbjOX5yUs61ax1nsdAO8WzVOrPE89DXVY1h0icg82yso5th2shiY0gpyMVhiiyvYVnEdVrLPNhi3W2h24dqJp%2Bn0muaJu1iC7olA/4AVgAQmeACLdo%2BreiTcGuS/ArN3yTgxFX1Zyf6Il9AouZCrIeDBEkon7fr%2B/6rBBf6WPef7ngil7OOeSiTPSWZAfCoF7gQkGwUh6Kfgh9DEQREKXl%2B95LM4mGvthWYflRf7fieF4ENeSFYasgZEHM2qSDxwL/K4V4yNM7CyKeihOPIijoLICEKs8yrcIoRCyAokzTDcrA4GEEDTJGLgABy/K4zi8IiiLhHIcjhGZ4SIgAnDZaiyLwij2CAKq/LwvBIq5LncLZ4S8I55DyQo5BKTIigiCAcjkFpCnTHAsCIBAKAYDCcKUNQeWSnCaCoOomhaFiY4CLCRCWtQQSyBp5BBL4FQis1ih5fYpoAPL0KKXXkDgAqaJw2mKIQgYlBaSUyC1HzFL2iwtb49XSQpagEEE2KkCK1g4MNWIEL5C2SQIDDMGwE3FpdwhiFIk3KKoFXaLo21BElkDTIOCTzesfXcBs2AEkQ6zsOwZr2BswCxUUJSmBAnj9E43AeBY7S5PkqjpPEDCo7jsT4/QWOdGE6MI00LR9DYNSqFTpTDGT4wUz0rSE5TzOjNjXTcNMqkLKoBwaEQfWOmy9B0F1UkyXJz3xZIznrBF4pvSB1X0JGj4QPgxDARCyLdtCJWhOpj6WJpk26eQ%2BmGdQJkgKeKWbd55C%2BeEri/Kep6uPZdnOS5p7udFCuyIlyWpdb5CZcgaBYHghAkBQVC0FdLAcFwd2CEQogSNIW0qM4agaKAkPQ/UjQJGYFiE4iKWeCzOOnsXeNNHXKVtwkTddC3lfFNTwwd/3iPNNzOTk07xdDBzdMpPX7OVD3YQtwLTxCzIxGUlgticGy35sasYDLKwURREsHxfD82C/Kgx/0oL2BaDQsLmF8tyH6iSyn%2Bfl/fH8qA1TAl6FWA0LIOCsBFLMVkn9IRxl8nGKIbg5B%2BWcKg9YSDXDcFQegzBaCIoRF4OsAgBCIrrBoGZFBxYzLrHoGZHg4QcFkKYNQoBQIQEzhHAQa%2BhFURK3CFoMhY56CnHoBDXwthJDrGAPQWwbDtwwQAGIplHqsdhWIkr3ltIGW4IiZpzH1CIkQIp6CoC0SmI4Fg%2BLYAMpOMUtgDjlCCJwekOAX5%2BANI8LQNYbrolVgAAToOgCAJDeAACotFsEdHMW4gZbGDTFBCZ23ZQkIlPPzds6AbpaBTPQd%2BmAtAGUwPCQ2cgnwASzEkxEhERCEDNH43gaT0arFVIxJJjTD7Bm%2BC6YAs5VZJOab%2BRiu10TA3abeVgIR2BpNPBMqZaSzLbmBKeEATE1nrI2ZsrZWziIBmlPsWBfcmlDMAmk8IhEoi7AaeCC8TTmkDLKdebsZ5kIpTSWibibTnC%2BwuVc1JLymlmWed87gjzTw3hua84FLcblXl4iM9Q8yBmIiWUCeh2yMWYqxZUmCezMAHJog86FrTTlJNcr8gi/zblvKSR88FzzbkDKBcc2FvF%2BLXLJai0FqzsW8r5Z%2BZCeKCUHxBSir56Sxk0SKfeBx94RBnH%2Bd8yIRZeIDI%2BTRLpUR3gAEcOUgvuSC%2BF8ICBjJBcXdskyGgLLmVapJsyj5gHLvYX4G4HVipPMCMKPL%2BU%2Bu2bswM%2BLeHfPtci1VIKOk0UuZS/pjKQWuWhWFWFDLkJJOVXa1l4ruCngpRy2N6TmXIqTZCtJ7gZkZtJSC85h8qwNFBqaR0xr6BBAbIG0JKSIoRKSW8xV6TeBhvSa4QiNYDINPbeEppyqOAEBkasZlYAwBECCKwVgDrwj9u4GZQi0r6Dyr1QOhNp513ksPtu3dPa%2BDQvdZU75zhHkatQN0kQ7A%2BkdLjQmo1oz3lvMRba0VNrplEodU6l1tYtXztBducSqKWQnSCCtA5SI70H2fFomgOitH6NIIY2IJizEiIsccax8SpwOKcZwOUaH34YPQOtUIaovyohEX4VEcoCRiM4MADg6wLRGDIOsI4mBrj0bhZCX8kI5QiPjNiM%2BhJ1gCiE5CNiqJqrYBY6iGeUYMGkFbAPPjcGjShAeAQAAXqpxTDHISLPE8pioVZ1ioCiHI8zInnD8JVn26zkIOHg2NCyGJIhhNqjQqgJW5AqI0EkCICgVF7D2EkGFtCIgxAJfPEl7AxcqJK1cGprzKY4wOac6qCzzhYx%2BFIMGNTUHRLAnncB%2BwO8/g0HUMAYVDqxLnnnW88DYk4U1cdVDZ1BAcCMEIvO9r87VRVY9UCTro2wDtYICqIs3YxuQgOKgC4pAtBxFM6iFJS2%2B1TfA3NhbS3S2recKRyZLjIT7bRCiI7YB1XfjG8%2BC75VS6rAtFhhIRZESlnLDlIgRBNwgBWMAPMtggi33QPYJYTr4cDa0%2BgJQA9fgQ9ZEEEI4QaDpKCFZHHrlMBBXCKeTANBApyFcK4Oy1PnCYEwE5CMhOzKYUU496ph9CBDF8CGV7HWwCIhW2AfgDrD2PYjS9%2Bbb35uQmAxuX49g9Qg%2B08AQMSW1SPezYffnF35egd%2BCmbTkNfjc%2Bu2ZybvWZtgCrTRXXYBzsO7HT%2BHr9J52Dp19LgXqIjx7Ydcy1Jv5Hubs9%2BN2XzhYf0G4TpkbG2Kh%2B/nfG65QereJ5OzL1ETBTo8MsEsSwrE0LbHPECE87PU9gFBYRbnxhTGsnt6C4Xov53i4krLGQslQ5bXimSKk7JOSP2VM4K26U9I2PtsZcgplkmu3ll38O%2BhI5pR0m3of7sIhex9n7OQAdwhBxDjFRS8%2Bl%2BSUdqecIAVnBmV9r7EKp4zJuDP55GQiJZ%2BxXisPnSMdsrZVyrD02Kcio/9X4whBxNZIxapn0GoIAmoto2o8l9phoep%2BoElnpRpS4JotppoB4CA5pnolpUAVphpaNNpYp2Ado9oDoE5noTozoNJpgc4M5bpi4c484npC4XAS5NAQAnVPpvoJ8/prRZB1g35nE4w/ADgMF7A2Iyl1gNAOARRTMNgRAboKhhCzQ6YmhEpa1R4a4rA540YMZvAeZJ50Yu4CZ9CiYMhu5jDWYGZtDB5Z5kgDDGYGAaYRgJ5bCuZHD6YvCl4bCcZ%2BYZhFQuB6In8O8D84pZBBwNZRwtYdY9Zk5B9jYgC4RB9Hwe9qQOQP8T9J9UFfhQVXI7JeBTxIos1EQad%2BAZ819kkIj38F8Upj8Mof9458pQhCoIBipgCQBBxiwHIID6osNGpno4COpEDYdepGABohpMDQZ0DFhYosDZpsB5pYp8DCDzpKBGAGhnoyDdoOpDp5jNJytaCLoGCbos5mCrpWCC5YoVAhc3puCBteD4BfpHR/ohCRDOBaFsAJCogpCvwZC5DRRFCHgVDSA1CNCEgtCq4kYUYLD0ZG5/C%2BZohiZ254SUSrCsgkS2YXCx5vCUhKZ7CmZWhl4GYh50SZ4/CPCAi15giXA29wiw4ZBojiwAcyldYk4DYkRzUTZgDlRER0iKRMiaRsibY7YugJ8qjfIaimSI4GjrZHYbJvYsEgogpt9eBuACdIhNoX9O838j8FSn9V9aiDSR9yBvsrQnBeAgA

One thing that might cause problems here is that it seems like getting the MustProgress attribute on a Function is quite hard. It is basically inferred by having WillReturn on the Function, and afaict the WillReturn attribute is never inferred if the Functions contain loops.

In the godbolt example above the Function has no MustProgress attribute, however the loop has a MustProgress attribute. So maybe `loopIsFiniteByAssumption` should check if the loop has MustProgress as well?

That wouldn't however help for the regressions we see downstream, because we do not get any MustProgress attributes on the loops either in that case. No idea why really, but I figure those depend on the C-standard in some way. But aren't the loops in my example finite? So why is MustProgress attributes important here?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D103834/new/

https://reviews.llvm.org/D103834



More information about the llvm-commits mailing list