{"action":"closed","issue":{"url":"https://api.github.com/repos/cretonne/cretonne/issues/106","repository_url":"https://api.github.com/repos/cretonne/cretonne","labels_url":"https://api.github.com/repos/cretonne/cretonne/issues/106/labels{/name}","comments_url":"https://api.github.com/repos/cretonne/cretonne/issues/106/comments","events_url":"https://api.github.com/repos/cretonne/cretonne/issues/106/events","html_url":"https://github.com/cretonne/cretonne/issues/106","id":238971591,"node_id":"MDU6SXNzdWUyMzg5NzE1OTE=","number":106,"title":"Loop basic blocks splitting","user":{"login":"denismerigoux","id":1766128,"node_id":"MDQ6VXNlcjE3NjYxMjg=","avatar_url":"https://avatars1.githubusercontent.com/u/1766128?v=4","gravatar_id":"","url":"https://api.github.com/users/denismerigoux","html_url":"https://github.com/denismerigoux","followers_url":"https://api.github.com/users/denismerigoux/followers","following_url":"https://api.github.com/users/denismerigoux/following{/other_user}","gists_url":"https://api.github.com/users/denismerigoux/gists{/gist_id}","starred_url":"https://api.github.com/users/denismerigoux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/denismerigoux/subscriptions","organizations_url":"https://api.github.com/users/denismerigoux/orgs","repos_url":"https://api.github.com/users/denismerigoux/repos","events_url":"https://api.github.com/users/denismerigoux/events{/privacy}","received_events_url":"https://api.github.com/users/denismerigoux/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":3,"created_at":"2017-06-27T20:25:05Z","updated_at":"2018-07-08T03:10:45Z","closed_at":"2018-07-08T03:10:45Z","author_association":"CONTRIBUTOR","body":"Right now, the loop analysis describes the loop by a header `Ebb` and a list of `Ebb`s pertaining to the loop. However, because `Ebb` are _extended_ basic blocks, this description include instructions that are not part of the loop (they are after the back edge branch instruction in the `Ebb`),\r\n\r\nThis is a problem because the LICM pass will move upstream instructions that are not in the loop. It does't break the code because moving SSA definitions upwards (in the dominator tree) is always allowed but it will break code locality.\r\n\r\nThe way to solve this problem is to represent loops in the loop analysis as a list of couples `(Ebb,Inst)` where `Inst` is the last back edge to appear in `Ebb`, `Ebb` being part of the loop. Then the LICM pass would stop moving instructions around when it reaches `Inst`.\r\n\r\nI will implement that later, the issue is just a reminder."}}
{"actor":{"display_login":"sunfishcode"}}