Detecting Determinate Computations by Bottom-up Abstract Interpretation