Commit Graph

14429 Commits

Author SHA1 Message Date
Chris Lattner
f953091075 Fix two bugs: one where a condition was mistakenly swapped, and another
where we folded (X & 254) -> X < 1 instead of X < 2.  These problems were
latent problems exposed by the latest patch.

llvm-svn: 16528
2004-09-27 19:29:18 +00:00
Chris Lattner
fe5261ee15 New testcase
llvm-svn: 16527
2004-09-27 19:25:20 +00:00
Misha Brukman
88a1e0aba4 SparcV8 int regs are not only 32-bits in width, but they are 32-bit aligned!
llvm-svn: 16526
2004-09-27 18:22:18 +00:00
Chris Lattner
047daf6261 The system ranlib on darwin occasionally adds two extra newlines to the
end of files, breaking the CFE build.  As a gross hack around this,
ignore any trailing garbage on bytecode files.  Thanks to Brian for digging
in and identifying the problem.

llvm-svn: 16525
2004-09-27 16:59:06 +00:00
Chris Lattner
ca55a0ff6e Hrm, if there is an error loading a file, try printing a message so the
user knows that...

llvm-svn: 16524
2004-09-27 16:41:01 +00:00
Chris Lattner
25a0e82d62 Testcases for rev 250 of InstructionCombining.cpp
llvm-svn: 16522
2004-09-27 16:21:26 +00:00
Chris Lattner
a715ffded3 Fold: (setcc (shr X, ShAmt), CI), where 'cc' is eq or ne. This xform
triggers often, for example:

6x in povray, 1x in gzip, 279x in gcc, 1x in crafty, 8x in eon, 11x in perlbmk,
362x in gap, 4x in vortex, 14 in m88ksim, 211x in 126.gcc, 1x in compress,
11x in ijpeg, and 4x in 147.vortex.

llvm-svn: 16521
2004-09-27 16:18:50 +00:00
Alkis Evlogimenos
404855c98b Improve warning
llvm-svn: 16520
2004-09-27 07:35:19 +00:00
Nate Begeman
921a44443d Correct some BuildMI arguments for the upcoming simple scheduler
llvm-svn: 16519
2004-09-27 05:08:17 +00:00
Misha Brukman
84e238e5ed Fix the copy-pasto that Brian noticed: V8 int regs are 32-bits wide, not 64.
llvm-svn: 16518
2004-09-26 21:07:43 +00:00
Reid Spencer
c3f7948472 Add some missing #includes
llvm-svn: 16517
2004-09-25 16:00:07 +00:00
Reid Spencer
26de3ccc82 Qualify Path with sys:: namespace so this file compiles.
llvm-svn: 16516
2004-09-25 15:59:41 +00:00
Reid Spencer
4c3cda9e95 Updated to reflect changes in the interface of TimeValue::now().
llvm-svn: 16515
2004-09-25 08:32:37 +00:00
Reid Spencer
0dbad34203 Clean up the interface of TimeValue:
- get rid of unneeded constructors
- get rid of duplicate methods/constructors/operators
- normalize to LLVM coding standards
- wrap to 80 columns.

Many thanks to Alkis Evlogimenos for his suggestions.

llvm-svn: 16514
2004-09-25 08:29:54 +00:00
Reid Spencer
78e20a7f60 Added stub implementations of TimeValue concept for remaining platforms.
llvm-svn: 16513
2004-09-25 05:03:54 +00:00
Reid Spencer
07d5fa1312 Wrap to 80 cols.
llvm-svn: 16512
2004-09-25 05:03:22 +00:00
Reid Spencer
894f394594 Initial implementation of the TimeValue abstraction.
llvm-svn: 16511
2004-09-24 23:25:19 +00:00
John Criswell
8e633294c2 Updated the last two header files so that they are configured with
AC_CONFIG_HEADERS.  This should prevent LLVM from needlessly re-compiling
on a re-configure.

llvm-svn: 16510
2004-09-24 21:19:06 +00:00
John Criswell
bd7cfd3d74 Modified hash_map and hash_set configuration so that they are not
regenerated on every run of configure.

llvm-svn: 16509
2004-09-24 18:28:00 +00:00
Chris Lattner
9d4748d32d Implement shift-and combinations, implementing InstCombine/and.ll:test19-21
These combinations trigger 4 times in povray, 7x in gcc, 4x in gap, and 2x in bzip2.

llvm-svn: 16508
2004-09-24 15:21:34 +00:00
Chris Lattner
243761aade Add some tests for shr-and folding
llvm-svn: 16507
2004-09-24 15:18:43 +00:00
John Criswell
52263072bc Configure Datatypes.h.in with AC_CONFIG_HEADERS. This should prevent it
from being re-generated if the new version is identical to the old version.
Hence, it should save us some recompiling after re-configures.

llvm-svn: 16506
2004-09-24 13:28:51 +00:00
Chris Lattner
7e603bfc67 Move LHSI->hasOneUse() into the arms of the conditional, reindenting code.
No functionality changes here.

llvm-svn: 16505
2004-09-23 21:52:49 +00:00
Chris Lattner
00ea30c3c5 Implement Transforms/InstCombine/and.ll:test18, a case that occurs 20 times
in perlbmk

llvm-svn: 16504
2004-09-23 21:46:38 +00:00
Chris Lattner
e317436053 New testcase for a pattern that occurs 20 times in perlbmk
llvm-svn: 16503
2004-09-23 21:42:49 +00:00
Reid Spencer
0ab7446879 Add a blurb about the use of class vs. struct keyword in class decls.
llvm-svn: 16500
2004-09-23 16:03:48 +00:00
Chris Lattner
6409a166e8 Implement select.ll:test16: fold load (select C, X, null) -> load X
llvm-svn: 16499
2004-09-23 15:46:00 +00:00
Chris Lattner
e9a2c15dac load null is undefined behavior, this should fold
llvm-svn: 16498
2004-09-23 15:45:20 +00:00
Reid Spencer
67f6472f19 Change Value from a "struct" to a "class" so that VC 7.1 doesn't generate
missing symbols when its referenced as a class.

llvm-svn: 16496
2004-09-23 14:49:45 +00:00
Reid Spencer
6210b04509 Patch for MINGW. Patch provided by Henrik Bach.
llvm-svn: 16495
2004-09-23 14:47:10 +00:00
Reid Spencer
0e05a38c6a Missed one $*.a -> $@ conversion for the Release build.
llvm-svn: 16494
2004-09-23 06:07:24 +00:00
Nate Begeman
75f0d35dc6 Fix the last of the major PPC GEP folding deficiencies. This will allow
the ISel to use indexed and non-zero immediate offsets for GEPs that have
more than one use.  This is common for instruction sequences such as a load
followed by a modify and store to the same address.

llvm-svn: 16493
2004-09-23 05:31:33 +00:00
Alkis Evlogimenos
4830449e7d Update email address
llvm-svn: 16492
2004-09-23 04:39:30 +00:00
Chris Lattner
29e72ea4be Grrr... I shouldn't have to do this one :)
llvm-svn: 16491
2004-09-23 04:36:01 +00:00
Chris Lattner
5c43684ca2 Update credits
llvm-svn: 16490
2004-09-23 04:30:05 +00:00
Reid Spencer
4961a0c269 Correct the rules for making shared libraries per libtool 1.5.10
llvm-svn: 16489
2004-09-23 00:58:06 +00:00
Misha Brukman
a59d95f2ed Use the V8/V9 shared register file description
llvm-svn: 16485
2004-09-22 21:48:50 +00:00
Misha Brukman
72c0988b77 Combine the F2 and F3 instruction classes into one file for simplicity
llvm-svn: 16484
2004-09-22 21:38:42 +00:00
Misha Brukman
5290581b39 Fix file header path
llvm-svn: 16483
2004-09-22 21:29:12 +00:00
Misha Brukman
3f8390a72f Prettify formatting of the file, adjust paths to making V8 a subdir of Sparc
llvm-svn: 16482
2004-09-22 20:09:29 +00:00
Misha Brukman
f8a2aee058 V8 is now a subdirectory of Sparc; adjust paths accordingly
llvm-svn: 16481
2004-09-22 20:08:52 +00:00
Reid Spencer
8304ac75a2 Update to add the HAVE_UINT64_T test and the STACK_DIRECTION indicator.
llvm-svn: 16480
2004-09-22 15:32:08 +00:00
Reid Spencer
182e31bdc5 The alloca function, strangely enough, is found in the malloc.h header file
on MINGW platform. Provide an #elseif case to #include malloc.h for this
platform if malloc.h is found.

Patch provided by Henrik Bach. Thanks Henrik!

llvm-svn: 16479
2004-09-22 15:28:32 +00:00
Nate Begeman
61d1797c03 add optimized code sequences for setcc x, 0
llvm-svn: 16478
2004-09-22 04:40:25 +00:00
Chris Lattner
537636bb55 Do not fold (X + C1 != C2) if there are other users of the add. Doing
this transformation used to take a loop like this:

int Array[1000];
void test(int X) {
  int i;
  for (i = 0; i < 1000; ++i)
    Array[i] += X;
}

Compiled to LLVM is:

no_exit:                ; preds = %entry, %no_exit
        %indvar = phi uint [ 0, %entry ], [ %indvar.next, %no_exit ]            ; <uint> [#uses=2]
        %tmp.4 = getelementptr [1000 x int]* %Array, int 0, uint %indvar                ; <int*> [#uses=2]
        %tmp.7 = load int* %tmp.4               ; <int> [#uses=1]
        %tmp.9 = add int %tmp.7, %X             ; <int> [#uses=1]
        store int %tmp.9, int* %tmp.4
***     %indvar.next = add uint %indvar, 1              ; <uint> [#uses=2]
***     %exitcond = seteq uint %indvar.next, 1000               ; <bool> [#uses=1]
        br bool %exitcond, label %return, label %no_exit

and turn it into a loop like this:

no_exit:                ; preds = %entry, %no_exit
        %indvar = phi uint [ 0, %entry ], [ %indvar.next, %no_exit ]            ; <uint> [#uses=3]
        %tmp.4 = getelementptr [1000 x int]* %Array, int 0, uint %indvar                ; <int*> [#uses=2]
        %tmp.7 = load int* %tmp.4               ; <int> [#uses=1]
        %tmp.9 = add int %tmp.7, %X             ; <int> [#uses=1]
        store int %tmp.9, int* %tmp.4
***     %indvar.next = add uint %indvar, 1              ; <uint> [#uses=1]
***     %exitcond = seteq uint %indvar, 999             ; <bool> [#uses=1]
        br bool %exitcond, label %return, label %no_exit

Note that indvar.next and indvar can no longer be coallesced.  In machine
code terms, this patch changes this code:

.LBBtest_1:     # no_exit
        mov %EDX, OFFSET Array
        mov %ESI, %EAX
        add %ESI, DWORD PTR [%EDX + 4*%ECX]
        mov %EDX, OFFSET Array
        mov DWORD PTR [%EDX + 4*%ECX], %ESI
        mov %EDX, %ECX
        inc %EDX
        cmp %ECX, 999
        mov %ECX, %EDX
        jne .LBBtest_1  # no_exit

into this:

.LBBtest_1:     # no_exit
        mov %EDX, OFFSET Array
        mov %ESI, %EAX
        add %ESI, DWORD PTR [%EDX + 4*%ECX]
        mov %EDX, OFFSET Array
        mov DWORD PTR [%EDX + 4*%ECX], %ESI
        inc %ECX
        cmp %ECX, 1000
        jne .LBBtest_1  # no_exit

We need better instruction selection to get this:

.LBBtest_1:     # no_exit
        add DWORD PTR [Array + 4*%ECX], EAX
        inc %ECX
        cmp %ECX, 1000
        jne .LBBtest_1  # no_exit

... but at least there is less register juggling

llvm-svn: 16473
2004-09-21 21:35:23 +00:00
Alkis Evlogimenos
3f8f30bcb8 The real x87 floating point registers should not be allocatable. They
are only used by the stackifier when transforming FPn register
allocations to the real stack file x87 registers.

llvm-svn: 16472
2004-09-21 21:22:11 +00:00
Misha Brukman
bd9f406b0b s/ISel/PPC64ISel/ to have unique class names for debugging via gdb because the
C++ front-end in gcc does not mangle classes in anonymous namespaces correctly.

llvm-svn: 16471
2004-09-21 18:22:33 +00:00
Misha Brukman
6ad6dd2ab9 s/ISel/PPC32ISel/ to have unique class names for debugging via gdb because the
C++ front-end in gcc does not mangle classes in anonymous namespaces correctly.

llvm-svn: 16470
2004-09-21 18:22:19 +00:00
Misha Brukman
e877aacbaa s/ISel/X86ISel/ to have unique class names for debugging via gdb because the C++
front-end in gcc does not mangle classes in anonymous namespaces correctly.

llvm-svn: 16469
2004-09-21 18:21:21 +00:00
Chris Lattner
55d0f3ae97 Make sure to set the operand list
llvm-svn: 16466
2004-09-21 17:30:54 +00:00