In clusterNeighboringLoads, loads are scheduled base on the order of increasing addresses.
However, this will break the dependence for the case that the load of a lower address depends on
that of a higher address.
This patch resolves this issue by not to cluster these two loads if such dependence did exist.
I see two flaws in this logic:
The problem is if you use a loop over the whole chain and also use isPredecessorOf instead of isOperandOf that will make this loop extremely expensive. It needs to be somehow simplified. Maybe do such check only if getIROrder() of successor is less or equal getIROrder() of a predecessor in the assumption if it was located higher in the IR and given all of that happens in the same basic block, there can be no dependency?