The OPAQUE pragma was added in GHC 9.4. It is like a stronger version of NOINLINE.
The syntax is the same as NOINLINE, except that you can only apply it to top-level binders.
{-# OPAQUE yourFunctionName #-}
On GHC versions that support it clash will now warn you to put OPAQUE pragmas on your primitives. Previously clash did that same but with NOINLINE.
The reason for recommending OPAQUE/NOINLINE annotations on primitives is that clash recognizes primitives by their name, but if GHC decides to inline a call to a primitive then its name disappears and clash can't recognize it anymore.
And OPAQUE makes sure that a call to that name stays there with that exact name.
NOINLINE also kind of did that, but with without the guarantee of keeping the exact name.
Although it's unlikely that to help with your endless compilation problem.
Because the fact that you're seeing that warning means that the problem the warning is intended to address did not occur this time.
But in general it is good practice mark your primitives with OPAQUE.
For more info on OPAQUE see: