| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 30676
|
|
|
|
|
|
| |
ConstantBool::getTrue() and ConstantBool::getFalse().
llvm-svn: 30665
|
|
|
|
|
|
|
|
|
| |
DLL* linkages got full (I hope) codegeneration support in C & both x86
assembler backends.
External weak linkage added for future use, we don't provide any
codegeneration, etc. support for it.
llvm-svn: 30374
|
|
|
|
| |
llvm-svn: 29925
|
|
|
|
| |
llvm-svn: 29071
|
|
|
|
| |
llvm-svn: 25514
|
|
|
|
|
|
|
|
|
| |
Add support for specifying alignment and size of setjmp jmpbufs.
No targets currently do anything with this information, nor is it presrved
in the bytecode representation. That's coming up next.
llvm-svn: 24196
|
|
|
|
| |
llvm-svn: 23973
|
|
|
|
|
|
| |
and PR632.
llvm-svn: 23484
|
|
|
|
|
|
|
|
| |
implements
ctor-list-opt.ll:CTOR8
llvm-svn: 23465
|
|
|
|
|
|
| |
potentially replaced at link-time.
llvm-svn: 23463
|
|
|
|
|
|
|
|
| |
because gccas runs globalopt before inlining.
This implements ctor-list-opt.ll:CTOR7
llvm-svn: 23462
|
|
|
|
| |
llvm-svn: 23460
|
|
|
|
| |
llvm-svn: 23453
|
|
|
|
| |
llvm-svn: 23452
|
|
|
|
| |
llvm-svn: 23450
|
|
|
|
|
|
| |
ctor-list-opt.ll:CTOR5.
llvm-svn: 23449
|
|
|
|
| |
llvm-svn: 23447
|
|
|
|
| |
llvm-svn: 23442
|
|
|
|
| |
llvm-svn: 23441
|
|
|
|
| |
llvm-svn: 23439
|
|
|
|
|
|
| |
global ctors that are simple enough. This implements ctor-list-opt.ll:CTOR2.
llvm-svn: 23437
|
|
|
|
|
|
| |
functionality change.
llvm-svn: 23435
|
|
|
|
|
|
| |
accepting the null even with a non-65535 init prio
llvm-svn: 23434
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Implement the start of global ctor optimization. It is currently smart
enough to remove the global ctor for cases like this:
struct foo {
foo() {}
} x;
... saving a bit of startup time for the program.
llvm-svn: 23433
|
|
|
|
|
|
| |
or other uses hanging off of them.
llvm-svn: 22219
|
|
|
|
| |
llvm-svn: 21791
|
|
|
|
| |
llvm-svn: 21427
|
|
|
|
|
|
|
|
| |
using Function::arg_{iterator|begin|end}. Likewise Module::g* -> Module::global_*.
This patch is contributed by Gabor Greif, thanks!
llvm-svn: 20597
|
|
|
|
| |
llvm-svn: 20352
|
|
|
|
| |
llvm-svn: 20289
|
|
|
|
|
|
|
| |
global with an alloca, which eventually gets promoted into a
register. This enables a lot of other optimizations later on.
llvm-svn: 20109
|
|
|
|
| |
llvm-svn: 19958
|
|
|
|
| |
llvm-svn: 19382
|
|
|
|
|
|
| |
failures from last night.
llvm-svn: 18832
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
in SPEC, the subsequent optimziations that we are after don't play with
with FP values, so disable this xform for them. Really we just don't want
stuff like:
double G; (always 0 or 412312.312)
= G;
turning into:
bool G_b;
= G_b ? 412312.312 : 0;
We'd rather just do the load.
-Chris
llvm-svn: 18819
|
|
|
|
|
|
|
|
|
|
| |
down to actually BE a bool. This allows simple value range propagation
stuff work harder, deleting comparisons in bzip2 in some hot loops.
This implements GlobalOpt/integer-bool.ll, which is the essence of the
loop condition distilled into a testcase.
llvm-svn: 18817
|
|
|
|
|
|
|
|
|
| |
in scary and unknown ways before we promote it. This fixes the miscompilation
of 188.ammp that has been plauging us since a globalopt patch went in.
Thanks a ton to Tanya for helping me diagnose the problem!
llvm-svn: 18418
|
|
|
|
|
|
| |
This doesn't fix anything that I'm aware of, just noticed it by inspection
llvm-svn: 18417
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
value. This allows us to turn more globals into constants and eliminate them.
This patch implements GlobalOpt/load-store-global.llx.
Note that this patch speeds up 255.vortex from:
Output/255.vortex.out-cbe.time:program 7.640000
Output/255.vortex.out-llc.time:program 9.810000
to:
Output/255.vortex.out-cbe.time:program 7.250000
Output/255.vortex.out-llc.time:program 9.490000
Which isn't bad at all!
llvm-svn: 17746
|
|
|
|
| |
llvm-svn: 17161
|
|
|
|
|
|
|
| |
that are initialized with undef. When promoting malloc to a global, start out
initialized to undef
llvm-svn: 17042
|
|
|
|
|
|
| |
weak functions. Thanks for finding this John!
llvm-svn: 16997
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
llvm-svn: 16916
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
still optimize away all of the indirect calls and loads, etc from it.
This turns code like this:
if (G != 0)
G();
into
if (G != 0)
ActualCallee();
This triggers a couple of times in gcc and libstdc++.
llvm-svn: 16901
|
|
|
|
| |
llvm-svn: 16878
|
|
|
|
|
|
|
| |
stored to, but are stored at variable indexes. This occurs at least in
176.gcc, but probably others, and we should handle it for completeness.
llvm-svn: 16876
|
|
|
|
|
|
|
|
|
| |
has a large number of users. Instead, just keep track of whether we're
making changes as we do so.
This patch has no functionlity changes.
llvm-svn: 16874
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
we know that all uses of the global will trap if the pointer contained is
null. In this case, we forward substitute the stored value to any uses.
This has the effect of devirtualizing trivial globals in trivial cases. For
example, 164.gzip contains this:
gzip.h:extern int (*read_buf) OF((char *buf, unsigned size));
bits.c: read_buf = file_read;
deflate.c: lookahead = read_buf((char*)window,
deflate.c: n = read_buf((char*)window+strstart+lookahead, more);
Since read_buf has to point to file_read at every use, we just replace
the calls through read_buf with a direct call to file_read.
This occurs in several benchmarks, including 176.gcc and 164.gzip. Direct
calls are good and stuff.
llvm-svn: 16871
|
|
|
|
| |
llvm-svn: 16864
|