Computational verification of Collatz conjecture
Given that (from your comments) there is one and only one input which would cause overflow, I propose the following check at the beginning of the function:

int check_convergence(uint128_t n)
{
        const uint128_t n0 = n;
        int e;

        if (n == UINT128_MAX)
                return  1;

        do {
                ...
        } while (true);
}




I also added const to n0, given that it's constant through all the function.



if (n &lt; UINT128_C(1) &lt;&lt; 64 &amp;&amp; e &lt; LUT_SIZE64)
        return  0;


That can be rewritten as:

if (n &lt;= UINT64_MAX &amp;&amp; e &lt; LUT_SIZE64)
        return  0;




Although maybe unneeded, I prefer to always parenthesize macros that evaluate to a value, just in case:

#define LUT_SIZE128  (81)