llvm/lib
Chris Lattner c5eff4488b Symbolically evaluate constant expressions like &A[123] - &A[4].f.
This occurs in C++ code like:

#include <iostream>
#include <iterator>
int a[] = { 1, 2, 3, 4, 5 };
int main() {
  using namespace std;
  copy(a, a + sizeof(a)/sizeof(a[0]), ostream_iterator<int>(cout, "\n"));
  return 0;
}

Before we would decide the loop trip count is:
sdiv (i32 sub (i32 ptrtoint (i32* getelementptr ([5 x i32]* @a, i32 0, i32 5) to i32), i32 ptrtoint ([5 x i32]* @a to i32)), i32 4)

Now we decide it is "5".  Amazing.

This code will need to be refactored, but I'm doing that as a separate
commit.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33665 91177308-0d34-0410-b5e6-96231b3b80d8
2007-01-30 22:32:46 +00:00
..
Analysis For PR1136: Rename GlobalVariable::isExternal as isDeclaration to avoid 2007-01-30 20:08:39 +00:00
Archive For PR1050: 2006-12-15 19:44:51 +00:00
AsmParser For PR1136: Rename GlobalVariable::isExternal as isDeclaration to avoid 2007-01-30 20:08:39 +00:00
Bytecode For PR1136: Rename GlobalVariable::isExternal as isDeclaration to avoid 2007-01-30 20:08:39 +00:00
CodeGen For PR1136: Rename GlobalVariable::isExternal as isDeclaration to avoid 2007-01-30 20:08:39 +00:00
Debugger Don't use <sstream> in Streams.h but <iosfwd> instead. 2006-12-07 23:41:45 +00:00
ExecutionEngine For PR1136: Rename GlobalVariable::isExternal as isDeclaration to avoid 2007-01-30 20:08:39 +00:00
Linker For PR1136: Rename GlobalVariable::isExternal as isDeclaration to avoid 2007-01-30 20:08:39 +00:00
Support implement SmallPtrSet::erase 2007-01-27 07:59:10 +00:00
System Moved disassembler to libSystem 2007-01-23 10:26:08 +00:00
Target - Fix codegen for pc relative constant (e.g. JT) in thumb mode: 2007-01-30 20:37:08 +00:00
Transforms Symbolically evaluate constant expressions like &A[123] - &A[4].f. 2007-01-30 22:32:46 +00:00
VMCore For PR1136: Rename GlobalVariable::isExternal as isDeclaration to avoid 2007-01-30 20:08:39 +00:00
Makefile