diff options
| author | Chris Lattner <sabre@nondot.org> | 2007-01-30 22:32:46 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2007-01-30 22:32:46 +0000 |
| commit | 4284f6463aa2531c56a6adb1990ea508d9cbd7a8 (patch) | |
| tree | 1bf9dcc5fa238763053513d1f41ea6e057433dd2 /llvm/lib/Analysis/ScalarEvolution.cpp | |
| parent | 83f35170faac1b38ee650e39cf09805f71248af8 (diff) | |
| download | bcm5719-llvm-4284f6463aa2531c56a6adb1990ea508d9cbd7a8.tar.gz bcm5719-llvm-4284f6463aa2531c56a6adb1990ea508d9cbd7a8.zip | |
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.
llvm-svn: 33665
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
0 files changed, 0 insertions, 0 deletions

