DAGCombiner folds (xor (and x, y), y) -> (and (not x), y). Can I do the reverse for a target?

Hi,

DAGCombiner currently folds (xor (and x, y), y) → (and (not x), y)

I was trying to do the reverse of this transformation, i.e., (and (xor x, -1), y) → (xor (and x, y), y), and recognized that this causes an infinite loop. What’s the advantage of doing the above folding? if I want to do the reverse for a specific target where I can place that and make sure it doesn’t get reversed by the above folding?

Thanks,
Assem

The goal of the transform is to provide a simpler canonical form. E.g.
(not x) can be computed independently and it is also easier to reason
about. Why is it beneficial for your target to have the first form?

Joerg