Do not count void arguments when considering a function for loopification.
authorJonas Scholl <anselm.scholl@tu-harburg.de>
Fri, 22 Jan 2016 15:21:57 +0000 (16:21 +0100)
committerBen Gamari <ben@smart-cactus.org>
Fri, 22 Jan 2016 17:50:27 +0000 (18:50 +0100)
commit4d51bfc8975f9c6c3ab6d293c48f98da85210d5f
tree08bf0c69dc58ece3f09055a2f2dbbc54d3a72ab5
parent6e5f8285005895fe4f1915ddea99b72f8ee91834
Do not count void arguments when considering a function for loopification.

This fixes #11372 by omitting arguments with a void-type when checking
whether a self-recursive tail call can be optimized to a local jump.
Previously, a function taking a real argument and a State# token
would report an arity of 1 in the SelfLoopInfo in getCallMethod,
but a self-recursive call would apply it to 2 arguments, one of them
being the State# token, thus no local jump would be generated.
As the State# token is not represented by anything at runtime, we can
ignore it and thus trigger the loopification optimization.

Test Plan: ./validate

Reviewers: austin, bgamari, simonmar

Reviewed By: bgamari

Subscribers: simonmar, thomie

Differential Revision: https://phabricator.haskell.org/D1767

GHC Trac Issues: #11372
compiler/codeGen/StgCmmClosure.hs
compiler/codeGen/StgCmmExpr.hs