For anyone ending up here later, I fixed it by refactoring such that the function that was part of my generic type, was broken out as a freestanding new generic function with the usual inline annotations, adding a new protocol that defined that signature, and adding another constraint on this new protocol to the original generic types T. Then adding trampoline implementations for my concrete types that just called the new inlinable generic function. This made it specialised and things are back fundamentally to where they were...