Yeah, I just realised that it might not even be a function in the user's code that has more than 62 arguments.
It could very well be a function that Clash creates through a process called specialisation, that is, in certain cases given an applied function `f`:
f a b (g c d e)
Clash will transform that to:
f_spec a b c d e
where the definition of f_spec is going to be:
f_spec = \a b c d e -> orignal_body_of_f a b (g c d e)
Thus increasing the number of arguments, and through it also increase the tuple-size created by this DEC transformation.
Note that this `g` doesn't have to be a function, it could also be a data-constructor (e.g. a tuple constructor).
And of course this doesn't only apply to the last argument, e.g. if we had a different f:
f a b (g c d e) (h p q r)
Clash will under certain circumstances transform that to:
f_spec a b c d e p q r
And you can see how one might exceed 62 arguments.
Regardless, I know how to fix the bug in the Clash compiler: generate nested tuples in the DEC transformation in order not to exceed the maximum tuple size.
In the meantime, if I understand correctly you did find a work-around though the use of (NO)INLINE annotations, is that correct?
-- Christiaan