Displaying 1 result from an estimated 1 matches for "neg101_cmp_sub".
2017 Jul 01
8
[IR canonicalization] 6 ways to choose {-1,0,1}
...x, int y) {
int r = (x - y) >> 31;
r += (unsigned)(y - x) >> 31;
return r;
}
define i32 @neg101_sub_shifty(i32, i32) {
%3 = sub nsw i32 %0, %1
%4 = ashr i32 %3, 31
%5 = sub nsw i32 %1, %0
%6 = lshr i32 %5, 31
%7 = add nsw i32 %4, %6
ret i32 %7
}
6. Zexts and sub
int neg101_cmp_sub(int x, int y) {
return (x>y) - (x<y);
}
define i32 @neg101_cmp_sub(i32, i32) {
%3 = icmp sgt i32 %0, %1
%4 = zext i1 %3 to i32
%5 = icmp slt i32 %0, %1
%6 = zext i1 %5 to i32
%7 = sub nsw i32 %4, %6
ret i32 %7
}
https://godbolt.org/g/UnM9H7
Show these are logically equivalen...