Roman Lebedev
|
1bb7ab8c4a
|
[SCEV] Recognize @llvm.abs as smax(x, -x)
As per alive2 (ignoring undef):
----------------------------------------
define i32 @src(i32 %x, i1 %y) {
%0:
%r = abs i32 %x, 0
ret i32 %r
}
=>
define i32 @tgt(i32 %x, i1 %y) {
%0:
%neg_x = mul i32 %x, 4294967295
%r = smax i32 %x, %neg_x
ret i32 %r
}
Transformation seems to be correct!
----------------------------------------
define i32 @src(i32 %x, i1 %y) {
%0:
%r = abs i32 %x, 1
ret i32 %r
}
=>
define i32 @tgt(i32 %x, i1 %y) {
%0:
%neg_x = mul nsw i32 %x, 4294967295
%r = smax i32 %x, %neg_x
ret i32 %r
}
Transformation seems to be correct!
|
2020-09-21 20:25:53 +03:00 |