In C--: should CmmCall and CmmProc agree on their live registers?

Simon Peyton Jones simonpj at microsoft.com
Thu Oct 5 09:59:34 UTC 2017


Did you ever get a reply to this?

In the output of the codegen, CmmProcs should have no live registers apart from those used to pass args, and the standard ones.

Simon

|  -----Original Message-----
|  From: ghc-devs [mailto:ghc-devs-bounces at haskell.org] On Behalf Of Moritz
|  Angermann
|  Sent: 22 September 2017 07:33
|  To: GHC developers <ghc-devs at haskell.org>
|  Subject: In C--: should CmmCall and CmmProc agree on their live registers?
|  
|  Hi,
|  
|  apologies for writing so many emails recently. This is a minor spinoff from
|  the "The Curious Case of T6084" email.
|  
|  While digging into it, I keep asking myself if CmmProc’s live registers
|  should match those of the CmmCall that is calling it?
|  
|  Is there any invariant we try to enforce or would want to enforce?
|  
|  - Can the CmmProcs live registers be a strict superset of
|    the corresponding CmmCalls?
|  
|    From the source comments in `compiler/cmm/Cmm.hs`:
|    > Registers live on entry. Note that the set of live
|    > registers will be correct in generated C-- code, but
|    > not in hand-written C-- code. However,
|    > splitAtProcPoints calculates correct liveness
|    > information for CmmProcs.
|  
|    I would assume that this is an invalid case?
|  
|  - Can the CmmProcs live registers be a strict subset of
|    the corresponding CmmCalls?
|  
|    This case however seems to be valid case.  However, this
|    makes me wonder if we can, and should(?) propagate the
|    live register info from the CmmProc to the CmmCall so
|    that they match up, and the registers are not kept live
|    at the origin of the CmmCall if they aren’t needed?  And
|    as such potentially compute anything to put into the
|    registers the CmmCall considers live, but the CmmProc
|    would ignore anyway?
|  
|  Cheers,
|   Moritz
|  _______________________________________________
|  ghc-devs mailing list
|  ghc-devs at haskell.org
|  https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.haskell
|  .org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-
|  devs&data=02%7C01%7Csimonpj%40microsoft.com%7C6009bb0f47a447a4217708d50183ce
|  fa%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636416587981602708&sdata=vII
|  rlKVJa6E%2FBvVz5Sod1c544nw6gsGp54Mlhr7bQ8g%3D&reserved=0


More information about the ghc-devs mailing list