- Jul 25, 2004
-
-
Reid Spencer authored
Add target triple and dependent libraries support to this test. llvm-svn: 15213
-
Reid Spencer authored
Ensure the list of libraries is cleared. llvm-svn: 15212
-
Reid Spencer authored
Add ability to write target triple and dependent libraries information. llvm-svn: 15211
-
Reid Spencer authored
- encode/decode target triple and dependent libraries bug 401: - fix encoding/decoding of FP values to be little-endian only bug 402: - initial (compatible) cut at 24-bit types instead of 32-bit - reduce size of block headers by 50% Other: - cleanup Writer by consolidating to one compilation unit, rem. other files - use a std::vector instead of std::deque so the buffer can be allocated in multiples of 64KByte chunks rather than in multiples of some smaller (default) number. llvm-svn: 15210
-
Reid Spencer authored
Provide parsing for the target triple and dependent libraries. llvm-svn: 15209
-
Reid Spencer authored
Provide new tokens for target triples and dependent libraries. llvm-svn: 15208
-
Reid Spencer authored
The necessary changes to module in order to support both target triples and a list of dependent libraries. llvm-svn: 15207
-
Reid Spencer authored
A new set of block identifiers has been added for version 1.3 so that the range of values can fit within 5 bits. This aids in halving the size of block headers. llvm-svn: 15206
-
Chris Lattner authored
code generator. Comments welcome. llvm-svn: 15205
-
Chris Lattner authored
a bug in DSE). * Delete dead operand uses iteratively instead of recursively, using a SetVector. * Defer deletion of dead operand uses until the end of processing, which means we don't have to bother with updating the AliasSetTracker. This speeds up DSE substantially. llvm-svn: 15204
-
Chris Lattner authored
Move clear to the end of the class Add assertions llvm-svn: 15203
-
Alkis Evlogimenos authored
llvm-svn: 15200
-
Chris Lattner authored
llvm-svn: 15199
-
Chris Lattner authored
llvm-svn: 15198
-
Chris Lattner authored
llvm-svn: 15197
-
Chris Lattner authored
llvm-svn: 15196
-
Chris Lattner authored
llvm-svn: 15195
-
Chris Lattner authored
aggressively coallesce live ranges even if they overlap. Consider this LLVM code for example: int %test(int %X) { %Y = mul int %X, 1 ;; Codegens to Y = X %Z = add int %X, %Y ret int %Z } The mul is just there to get a copy into the code stream. This produces this machine code: (0x869e5a8, LLVM BB @0x869b9a0): %reg1024 = mov <fi#-2>, 1, %NOREG, 0 ;; "X" %reg1025 = mov %reg1024 ;; "Y" (subsumed by X) %reg1026 = add %reg1024, %reg1025 %EAX = mov %reg1026 ret Note that the life times of reg1024 and reg1025 overlap, even though they contain the same value. This results in this machine code: test: mov %EAX, DWORD PTR [%ESP + 4] mov %ECX, %EAX add %EAX, %ECX ret Another, worse case involves loops and PHI nodes. Consider this trivial loop: testcase: int %test2(int %X) { entry: br label %Loop Loop: %Y = phi int [%X, %entry], [%Z, %Loop] %Z = add int %Y, 1 %cond = seteq int %Z, 100 br bool %cond, label %Out, label %Loop Out: ret int %Z } Because of interactions between the PHI elimination pass and the register allocator, this got compiled to this code: test2: mov %ECX, DWORD PTR [%ESP + 4] .LBBtest2_1: *** mov %EAX, %ECX inc %EAX cmp %EAX, 100 *** mov %ECX, %EAX jne .LBBtest2_1 ret Or on powerpc, this code: _test2: mflr r0 stw r0, 8(r1) stwu r1, -60(r1) .LBB_test2_1: addi r2, r3, 1 cmpwi cr0, r2, 100 *** or r3, r2, r2 bne cr0, .LBB_test2_1 *** or r3, r2, r2 lwz r0, 68(r1) mtlr r0 addi r1, r1, 60 blr 0 With this improvement in place, we now generate this code for these two testcases, which is what we want: test: mov %EAX, DWORD PTR [%ESP + 4] add %EAX, %EAX ret test2: mov %EAX, DWORD PTR [%ESP + 4] .LBBtest2_1: inc %EAX cmp %EAX, 100 jne .LBBtest2_1 # Loop ret Or on PPC: _test2: mflr r0 stw r0, 8(r1) stwu r1, -60(r1) .LBB_test2_1: addi r3, r3, 1 cmpwi cr0, r3, 100 bne cr0, .LBB_test2_1 lwz r0, 68(r1) mtlr r0 addi r1, r1, 60 blr 0 Static numbers for spill code loads/stores/reg-reg copies (smaller is better): em3d: before: 47/25/26 after: 44/22/24 164.gzip: before: 433/245/310 after: 403/231/278 175.vpr: before: 3721/2189/1581 after: 4144/2081/1423 176.gcc: before: 26195/8866/9235 after: 25942/8082/8275 186.crafty: before: 4295/2587/3079 after: 4119/2519/2916 252.eon: before: 12754/7585/5803 after: 12508/7425/5643 256.bzip2: before: 463/226/315 after: 482:241/309 Runtime perf number samples on X86: gzip: before: 41.09 after: 39.86 bzip2: runtime: before: 56.71s after: 57.07s gcc: before: 6.16 after: 6.12 eon: before: 2.03s after: 2.00s llvm-svn: 15194
-
Chris Lattner authored
llvm-svn: 15193
-
Chris Lattner authored
llvm-svn: 15192
-
Alkis Evlogimenos authored
string. llvm-svn: 15191
-
Alkis Evlogimenos authored
llvm-svn: 15190
-
Chris Lattner authored
same as the PHI use. This is not correct as the PHI use value is different depending on which branch is taken. This fixes espresso with aggressive coallescing, and perhaps others. llvm-svn: 15189
-
Chris Lattner authored
llvm-svn: 15188
-
Chris Lattner authored
llvm-svn: 15187
-
- Jul 24, 2004
-
-
Alkis Evlogimenos authored
not used accidentally. llvm-svn: 15172
-
Alkis Evlogimenos authored
LiveInterval>. This saves some space and removes the pointer indirection caused by following the pointer. llvm-svn: 15167
-
Chris Lattner authored
llvm-svn: 15163
-
Chris Lattner authored
llvm-svn: 15162
-
Chris Lattner authored
llvm-svn: 15161
-
Chris Lattner authored
llvm-svn: 15160
-
Chris Lattner authored
llvm-svn: 15159
-
Chris Lattner authored
llvm-svn: 15158
-
Chris Lattner authored
llvm-svn: 15157
-
Chris Lattner authored
us back to taking about 10.5s on gcc, instead of taking 15.6s! The net result is that my big patches have hand no significant effect on compile time or code quality. heh. llvm-svn: 15156
-
Chris Lattner authored
ownership of the intervals. llvm-svn: 15155
-
Chris Lattner authored
Interval. This generalizes the isDefinedOnce mechanism that we used before to help us coallesce ranges that overlap. As part of this, every logical range with a different value is assigned a different number in the interval. For example, for code that looks like this: 0 X = ... 4 X += ... ... N = X We now generate a live interval that contains two ranges: [2,6:0),[6,?:1) reflecting the fact that there are two different values in the range at different positions in the code. Currently we are not using this information at all, so this just slows down liveintervals. In the future, this will change. Note that this change also substantially refactors the joinIntervalsInMachineBB method to merge the cases for virt-virt and phys-virt joining into a single case, adds comments, and makes the code a bit easier to follow. llvm-svn: 15154
-
Chris Lattner authored
make overlapsAliases take pointers instead of references fix indentation llvm-svn: 15153
-
Chris Lattner authored
* Fix comment typeo * add dump() methods * add a few new methods like getLiveRangeContaining, removeRange & joinable (which is currently the same as overlaps) * Remove the unused operator== Bigger change: * In LiveInterval, instead of using a boolean isDefinedOnce to keep track of if there are > 1 definitions in a particular interval, keep a counter, NumValues to keep track of exactly how many there are. * In LiveRange, add a new ValId element to indicate which of the numbered values each LiveRange belongs to. We now no longer merge LiveRanges if they are of differing value ID's even if they are neighbors. llvm-svn: 15152
-
Misha Brukman authored
have a nightly tester set up for PowerPC. llvm-svn: 15147
-