Add some potentially interesting transformations to README.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93797 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eli Friedman 2010-01-18 22:36:59 +00:00
parent 48814681d7
commit 9cfb3adf44

View File

@ -1665,3 +1665,54 @@ int foo() {
//===---------------------------------------------------------------------===//
Missed instcombine transformation:
define i1 @a(i32 %x) nounwind readnone {
entry:
%cmp = icmp eq i32 %x, 30
%sub = add i32 %x, -30
%cmp2 = icmp ugt i32 %sub, 9
%or = or i1 %cmp, %cmp2
ret i1 %or
}
This should be optimized to a single compare. Testcase derived from gcc.
//===---------------------------------------------------------------------===//
Missed instcombine transformation:
void b();
void a(int x) { if (((1<<x)&8)==0) b(); }
The shift should be optimized out. Testcase derived from gcc.
//===---------------------------------------------------------------------===//
Missed instcombine or reassociate transformation:
int a(int a, int b) { return (a==12)&(b>47)&(b<58); }
The sgt and slt should be combined into a single comparison. Testcase derived
from gcc.
//===---------------------------------------------------------------------===//
Missed instcombine transformation:
define i32 @a(i32 %x) nounwind readnone {
entry:
%shr = lshr i32 %x, 5 ; <i32> [#uses=1]
%xor = xor i32 %shr, 67108864 ; <i32> [#uses=1]
%sub = add i32 %xor, -67108864 ; <i32> [#uses=1]
ret i32 %sub
}
This function is equivalent to "ashr i32 %x, 5". Testcase derived from gcc.
//===---------------------------------------------------------------------===//
isSafeToLoadUnconditionally should allow a GEP of a global/alloca with constant
indicies within the bounds of the allocated object. Reduced example:
const int a[] = {3,6};
int b(int y) { int* x = y ? &a[0] : &a[1]; return *x; }
All the loads should be eliminated. Testcase derived from gcc.
//===---------------------------------------------------------------------===//