The curious case of #367: Infinite loops can hang Concurrent Haskell
Simon Peyton Jones
simonpj at microsoft.com
Mon Aug 17 12:14:37 UTC 2020
| and the question then becomes, do we want to investigate if we can
| a) detect this is dead code
| b) remove it in Cmm or higher, or flat out prevent it from being
| generated.
| c) we don't care about producing this code, and hope the linker will
| eliminate it.
I'm still puzzled. Why do you thing _cCO is dead? What alternative code are you thinking we might generate?
S
| -----Original Message-----
| From: Moritz Angermann <moritz.angermann at gmail.com>
| Sent: 17 August 2020 10:30
| To: Simon Peyton Jones <simonpj at microsoft.com>
| Cc: ghc-devs <ghc-devs at haskell.org>
| Subject: Re: The curious case of #367: Infinite loops can hang
| Concurrent Haskell
|
| Hi Simon,
|
| sure, I could have been a bit clearer:
|
| Code we currently generate is:
| ```
| _cCO:
| bl _cCO
| ```
|
| or
|
| ```
| _czf:
| mov x17, x18
| bl _czf
| ```
|
| and the question then becomes, do we want to investigate if we can
| a) detect this is dead code
| b) remove it in Cmm or higher, or flat out prevent it from being
| generated.
| c) we don't care about producing this code, and hope the linker will
| eliminate it.|
| Cheers,
| Moritz
|
| On Mon, Aug 17, 2020 at 5:18 PM Simon Peyton Jones
| <simonpj at microsoft.com> wrote:
| >
| > Moritz
| >
| > I'm not getting this.
| >
| > | So, my question then is this: are we fine with ghc generating
| this
| > | code? Or, if we are not, do we want to figure out if we can
| eliminate
| > | it?
| >
| > What exactly is "this code" and "it"?
| >
| > You could be asking
| >
| > * Should we switch off -fomit-yields by default?
| > * Should we implement -fno-omit-yields in a cleverer way that
| generates less code?
| >
| > Or you could be asking something else again.
| >
| > Your deadlock-detection patch (which is presumably not in GHC) is
| very special-case: it detects some infinite loops, but only some.
| I'm not sure what role it plays in your thinking.
| >
| > Simon
| >
| >
| > | -----Original Message-----
| > | From: ghc-devs <ghc-devs-bounces at haskell.org> On Behalf Of Moritz
| > | Angermann
| > | Sent: 17 August 2020 09:40
| > | To: ghc-devs <ghc-devs at haskell.org>
| > | Subject: The curious case of #367: Infinite loops can hang
| Concurrent
| > | Haskell
| > |
| > | Hi there!
| > |
| > | While working on a NCG, I eventually came across #367[0], which
| make GHC
| > | produce
| > | code that looks similar to this:
| > |
| > | ```
| > | label:
| > | [non-branch-instructions]*
| > | brach-instruction label
| > | ```
| > |
| > | so essentially an uninterruptible loop. The solution for GHC to
| > | produce code that
| > | can be interrupted is to pass -fno-omit-yields.
| > |
| > | So far so good. Out of curiosity, I did add a small piece of code
| to
| > | detect this to my NCG
| > | to complain if code like the above was generated[1].
| > |
| > | Three weeks ago, I kind of maneuvered myself into a memory blow
| up
| > | corner, and then
| > | life happened, but this weekend I managed to find some time to
| revert
| > | some memory
| > | blow up and continue working on the NCG. Turns out I can build a
| > | stage2 "quick" flavour
| > | of the NCG without dynamic support just fine. I never saw the
| dead
| > | lock detection code fire.
| > |
| > | Now I did leave the test suite running yesterday night, and when
| > | looking through the
| > | test suite results, there were quite a few failure. Curiously a
| lot of
| > | them were due to
| > | ghc missing dynamic support (doh!). But also quite a few that
| failed
| > | due to the deadlock
| > | detection.
| > |
| > | T12485, hs_try_putmvar003, ds-wildcard, ds001, read029, T2817,
| tc011,
| > | tc021, T4524
| > |
| > | So, my question then is this: are we fine with ghc generating
| this
| > | code? Or, if we are not, do we want to figure out if we can
| eliminate
| > | it? The issue 367 goes into quite a bit of detail why this is
| tricky
| > | to handle generally.
| > |
| > | Or should we add -fno-omit-yields to the test-cases? The ultimate
| > | option is to just turn of the
| > | detection, and I'm fine with doing so. However I'd rather ask if
| > | anyone sees value in detecting
| > | this or not.
| > |
| > | Cheers,
| > | Moritz
| > |
| > | --
| > | [0]:
| > |
| https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitl
| ab.h
| > | askell.org%2Fghc%2Fghc%2F-
| > |
| %2Fissues%2F367&data=02%7C01%7Csimonpj%40microsoft.com%7C06a6ead06
| 2e64
| > |
| 1e6c16608d842893959%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C63733
| 2504
| > |
| 423501799&sdata=KKZYaNgl%2FliDXwfcEqWIosjRjDYt%2FDc9i1sBEfS22mQ%3D
| &
| > | ;reserved=0
| > | [1]:
| > |
| https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitl
| ab.h
| > | askell.org%2Fghc%2Fghc%2F-
| > |
| %2Fblob%2F46fba2c91e1c4d23d46fa2d9b18dcd000c80363d%2Fcompiler%2FGHC%2F
| CmmT
| > | oAsm%2FAArch64%2FPpr.hs%23L134-
| > |
| 159&data=02%7C01%7Csimonpj%40microsoft.com%7C06a6ead062e641e6c1660
| 8d84
| > |
| 2893959%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C63733250442350179
| 9&am
| > |
| p;sdata=RMXio8BI9tSjWnKK4HSXA3s%2BXNNM7ntk2ftQjmRJxzE%3D&reserved=
| 0
| > | _______________________________________________
| > | ghc-devs mailing list
| > | ghc-devs at haskell.org
| > |
| https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.
| hask
| > | ell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-
| > |
| devs&data=02%7C01%7Csimonpj%40microsoft.com%7C06a6ead062e641e6c166
| 08d8
| > |
| 42893959%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C6373325044235017
| 99&a
| > |
| mp;sdata=8W595qb3lWsqdAeGeFp0T26DsCXzA6ngrCQLKihCXkA%3D&reserved=0
More information about the ghc-devs
mailing list