During the SeparateConstOffsetFromGEP pass, a - b and b - a will be
considered equivalent in some instances.
An example- the IR contains:
BB1:
%add = add %a, 511
br label %BB2
BB2:
%sub2 = sub %b, %a
br label %BB3
BB3:
%sub1 = sub %add, %b
%gep = getelementptr float, ptr %p, %sub1Step 1 in the SeparateConstOffsetFromGEP pass, after split constant index:
BB1:
%add = add %a, 511
br label %BB2
BB2:
%sub2 = sub %b, %a
br label %BB3
BB3:
%sub.t = sub %a, %b
%gep.base = getelementptr float, ptr %p, %sub.t
%gep = getelementptr float, ptr %gep.base, 511Step 2, after reuniteExts:
BB1:
br label %BB2
BB2:
%sub2 = sub %b, %a
br label %BB3
BB3:
%gep.base = getelementptr float, ptr %p, %sub2
%gep = getelementptr float, ptr %gep.base, 511Obviously, reuniteExts treated a - b and b - a as equivalent.
This patch fixes that.
Please include a comment on what this is testing, it's not particularly obvious.