SMS dit: Analyzing data dependencies, detecting AND-parallelism and optimizing backtracking in prolog programs /