We already have reassociation code for Adds and Ors separately in DAG combiner, this adds it for the combination of the two where Ors act like Adds. It reassociates (add (or (x, c), y) -> (add (add (x, y), c)) where we know that the Ors operands have no common bits set, and the Or has one use.
Details
Details
Diff Detail
Diff Detail
Event Timeline
Comment Actions
LGTM.
I'm not sure if we have x86 tests that mimic the ARM diffs here, but I tried those locally, and I see no difference (probably because we have all of those patterns covered in pre-ISEL or ISEL logic that forms LEA).