mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-23 02:32:11 +00:00
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:
parent
48814681d7
commit
9cfb3adf44
@ -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.
|
||||||
|
|
||||||
|
//===---------------------------------------------------------------------===//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user