I'm working on a compiler frontend which is based on OpenXLA
Internally we have an optimization to fold compare_GT(maximum(a,b), a)
into compare_GT(b,a)
The optimization is added to algebraic_simplifier.cc::HandleCompare()
.
Full list of similar optimizations:
GT(min(a,b), _) -> FALSE
GT(max(a,b), a) -> GT(b,a)
GT(max(a,b), b) -> GT(a,b)
GT(a, min(a,b)) -> GT(a,b)
GT(b, min(a,b)) -> GT(b,a)
GT(_, max(a,b)) -> FALSE
GE(min(a,b), a) -> GE(b,a)
GE(min(a,b), b) -> GE(a,b)
GE(max(a,b), _) -> TRUE
GE(_, min(a,b)) -> TRUE
GE(a, max(a,b)) -> GE(a,b)
GE(b, max(a,b)) -> GE(b,a)
LT(min(a,b), a) -> LT(b,a)
LT(min(a,b), b) -> LT(a,b)
LT(max(a,b), _) -> FALSE
LT(_, min(a,b)) -> FALSE
LT(a, max(a,b)) -> LT(a,b)
LT(b, max(a,b)) -> LT(b,a)
LE(a, min(a,b)) -> LE(a,b)
LE(b, min(a,b)) -> LE(b,a)
LE(_, max(a,b)) -> TRUE
LE(min(a,b), _) -> TRUE
LE(max(a,b), a) -> LE(b,a)
LE(max(a,b), b) -> LE(a,b)
How useful would it be to contribute these optimizations to OpenXLA main?
We tested GT(max(a,b), a) optimization on Resnet50 model internally
Overall, we observed the following benefits of adding this optimization: