
#7297: LLVM incorrectly hoisting loads ---------------------------------+------------------------------------------ Reporter: dterei | Owner: dterei Type: bug | Status: new Priority: normal | Milestone: 7.8.1 Component: Compiler (LLVM) | Version: 7.7 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Incorrect result at runtime Difficulty: Unknown | Testcase: 367_letnoescape Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Comment(by dterei): Copying some info from an email (Memory model of Cmm?) with Simon Marlow so I can archive it finally: {{{ The best reference for this is the code I wrote to identify conflicts in the Cmm sinking pass, see the function 'conflicts': http://www.haskell.org/ghc/dist/current/docs/html/libraries/ghc-7.7.20120902... But that won't tell you anything about whether reading a memory location can be cached or not. How does LLVM handle this? I'm thinking that maybe we should have an explicit "volatile load" operation, that would behave like a CmmLoad but could not be hoisted. It should be a CallishMachOp, because you presumably want to specify ordering for a volatile load with respect to other side-effecting operations. }}} -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7297#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler