[GHC] #15188: Catch cases where both branches of an if jump to the same block.
#15188: Catch cases where both branches of an if jump to the same block. -------------------------------------+------------------------------------- Reporter: AndreasK | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.2.2 (CodeGen) | Keywords: CodeGen | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- For one reason or the other sometimes we end up with if statements in Cmm where both branch targets are the same: Actual example from NoFib: {{{ u9oL: if (_c9oA::P64 != 5) goto u9p2; else goto u9p2; }}} Which eventually results in this code: {{{ _u9oL: cmpq $5,%rbx jne _u9p2 <- utterly pointless _u9p2: addq $16,%rbp jmp _c9iq }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15188> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15188: Catch cases where both branches of an if jump to the same block. -------------------------------------+------------------------------------- Reporter: AndreasK | Owner: AndreasK Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.2.2 (CodeGen) | Resolution: | Keywords: CodeGen Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by AndreasK): * cc: jmct (added) * owner: (none) => AndreasK -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15188#comment:1> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15188: Catch cases where both branches of an if jump to the same block. -------------------------------------+------------------------------------- Reporter: AndreasK | Owner: AndreasK Type: bug | Status: patch Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.2.2 (CodeGen) | Resolution: | Keywords: CodeGen Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by AndreasK): * status: new => patch -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15188#comment:2> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15188: Catch cases where both branches of an if jump to the same block. -------------------------------------+------------------------------------- Reporter: AndreasK | Owner: AndreasK Type: bug | Status: patch Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.2.2 (CodeGen) | Resolution: | Keywords: CodeGen Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D4740 Wiki Page: | -------------------------------------+------------------------------------- Changes (by AndreasK): * differential: => Phab:D4740 -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15188#comment:3> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15188: Catch cases where both branches of an if jump to the same block. -------------------------------------+------------------------------------- Reporter: AndreasK | Owner: AndreasK Type: bug | Status: patch Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.2.2 (CodeGen) | Resolution: | Keywords: CodeGen Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D4740 Wiki Page: | -------------------------------------+------------------------------------- Comment (by Ben Gamari <ben@…>): In [changeset:"efea32cf2c41d35f2ba5a79bf70cc7768b7b0fd5/ghc" efea32cf/ghc]: {{{ #!CommitTicketReference repository="ghc" revision="efea32cf2c41d35f2ba5a79bf70cc7768b7b0fd5" Check if both branches of an Cmm if have the same target. This for some reason or the other and makes it into the final binary. I've added the check to ContFlowOpt as that seems like a logical place for this. In a regular nofib run there were 30 occurences of this pattern. Test Plan: ci Reviewers: bgamari, simonmar, dfeuer, jrtc27, tdammers Reviewed By: bgamari, simonmar Subscribers: tdammers, dfeuer, rwbarton, thomie, carter GHC Trac Issues: #15188 Differential Revision: https://phabricator.haskell.org/D4740 }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15188#comment:4> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#15188: Catch cases where both branches of an if jump to the same block. -------------------------------------+------------------------------------- Reporter: AndreasK | Owner: AndreasK Type: bug | Status: closed Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.2.2 (CodeGen) | Resolution: fixed | Keywords: CodeGen Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D4740 Wiki Page: | -------------------------------------+------------------------------------- Changes (by bgamari): * status: patch => closed * resolution: => fixed -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15188#comment:5> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
participants (1)
-
GHC