diff options
author | Chris Lattner <sabre@nondot.org> | 2004-10-11 05:54:41 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-10-11 05:54:41 +0000 |
commit | 30ba5690cf7a6f4db8913463d03f239f82d17440 (patch) | |
tree | 0a82e8b945db161b307ea8f3439355fae354665a /lib/Analysis/DataStructure/EquivClassGraphs.cpp | |
parent | c58cf5b921b8fc57fde7322d6545e8fc85798a48 (diff) |
This patch implements two things (sorry).
First, it allows SRA of globals that have embedded arrays, implementing
GlobalOpt/globalsra-partial.llx. This comes up infrequently, but does allow,
for example, deleting several stores to dead parts of globals in dhrystone.
Second, this implements GlobalOpt/malloc-promote-*.llx, which is the
following nifty transformation:
Basically if a global pointer is initialized with malloc, and we can tell
that the program won't notice, we transform this:
struct foo *FooPtr;
...
FooPtr = malloc(sizeof(struct foo));
...
FooPtr->A FooPtr->B
Into:
struct foo FooPtrBody;
...
FooPtrBody.A FooPtrBody.B
This comes up occasionally, for example, the 'disp' global in 183.equake (where
the xform speeds the CBE version of the program up from 56.16s to 52.40s (7%)
on apoc), and the 'desired_accept', 'fixLRBT', 'macroArray', & 'key_queue'
globals in 300.twolf (speeding it up from 22.29s to 21.55s (3.4%)).
The nice thing about this xform is that it exposes the resulting global to
global variable optimization and makes alias analysis easier in addition to
eliminating a few loads.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16916 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/DataStructure/EquivClassGraphs.cpp')
0 files changed, 0 insertions, 0 deletions