1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-31 07:52:55 +01:00
Commit Graph

17840 Commits

Author SHA1 Message Date
Chris Lattner
ea2e61b83a Allow the live interval analysis pass to be a bit more aggressive about
numbering values in live ranges for physical registers.

The alpha backend currently generates code that looks like this:

  vreg = preg
...
  preg = vreg
  use preg
...
  preg = vreg
  use preg

etc.  Because vreg contains the value of preg coming in, each of the
copies back into preg contain that initial value as well.

In the case of the Alpha, this allows this testcase:

void "foo"(int %blah) {
        store int 5, int *%MyVar
        store int 12, int* %MyVar2
        ret void
}

to compile to:

foo:
        ldgp $29, 0($27)
        ldiq $0,5
        stl $0,MyVar
        ldiq $0,12
        stl $0,MyVar2
        ret $31,($26),1

instead of:

foo:
        ldgp $29, 0($27)
        bis $29,$29,$0
        ldiq $1,5
        bis $0,$0,$29
        stl $1,MyVar
        ldiq $1,12
        bis $0,$0,$29
        stl $1,MyVar2
        ret $31,($26),1

This does not seem to have any noticable effect on X86 code.

This fixes PR535.

llvm-svn: 20536
2005-03-09 23:05:19 +00:00
Andrew Lenharth
65ef5bced7 minor correction for Register that isn't used
llvm-svn: 20535
2005-03-09 20:48:23 +00:00
Chris Lattner
e0d0c64c8a constant fold FP_ROUND_INREG, ZERO_EXTEND_INREG, and SIGN_EXTEND_INREG
This allows the alpha backend to compile:

bool %test(uint %P) {
        %c = seteq uint %P, 0
        ret bool %c
}

into:

test:
        ldgp $29, 0($27)
        ZAP $16,240,$0
        CMPEQ $0,0,$0
        AND $0,1,$0
        ret $31,($26),1

instead of:

test:
        ldgp $29, 0($27)
        ZAP $16,240,$0
        ldiq $1,0
        ZAP $1,240,$1
        CMPEQ $0,$1,$0
        AND $0,1,$0
        ret $31,($26),1

... and fixes PR534.

llvm-svn: 20534
2005-03-09 18:37:12 +00:00
Chris Lattner
3cf502890c correct the computation of the isAbstract bit for types.
llvm-svn: 20533
2005-03-09 17:34:27 +00:00
Chris Lattner
30ac52c4b4 Fix Regression/Analysis/BasicAA/2005-03-09-BrokenBasicAA.ll, a miscompilation
that Alkis found with Java, thanks Alkis!

llvm-svn: 20531
2005-03-09 16:29:52 +00:00
Chris Lattner
0d91a3c867 new testcase for a -basicaa bug that Alkis found with Java.
llvm-svn: 20530
2005-03-09 16:29:22 +00:00
Reid Spencer
220e2f8519 Fix a typo in an assertion comment.
Patch contributed by Vladimir Merzliakov.

llvm-svn: 20529
2005-03-09 15:19:41 +00:00
Chris Lattner
5c9c611068 Use static_cast and #include Instructions.h
llvm-svn: 20528
2005-03-09 05:35:16 +00:00
Chris Lattner
4d755dc735 Export two methods for getting -X and A-B.
llvm-svn: 20527
2005-03-09 05:34:41 +00:00
Chris Lattner
43d8ea234d export two methods
llvm-svn: 20526
2005-03-09 05:34:23 +00:00
Chris Lattner
9f3c0326f4 get bugpoint working on ia64, by building .so's with -fpic. :)
llvm-svn: 20525
2005-03-09 03:31:02 +00:00
Chris Lattner
496d623600 Fix a crash handling 'undef bool', fixing an llc crash on 186.crafty
llvm-svn: 20523
2005-03-08 22:53:09 +00:00
Reid Spencer
b0ca4aa8cd Patch to make assembly output compatible with mingw compilation (identical
to cygwin)

llvm-svn: 20520
2005-03-08 17:02:05 +00:00
Chris Lattner
667186f10f Make sure to remove all dead type names from the symbol table, not just
struct types.  This fixes Regression/CodeGen/CBackend/2005-03-08-RecursiveTypeCrash.ll,
a crash on Java output that Alkis reported.

llvm-svn: 20519
2005-03-08 16:19:59 +00:00
Chris Lattner
3883289586 new testcase that crashes the CBE.
llvm-svn: 20518
2005-03-08 16:19:02 +00:00
Jeff Cohen
ffe6edba34 Clarify inability to generate assembly, and note that VC++ Express works.
llvm-svn: 20516
2005-03-08 03:56:50 +00:00
Misha Brukman
e29de97ab7 Single characters should be printed out as chars, not strings.
llvm-svn: 20515
2005-03-08 00:26:08 +00:00
Chris Lattner
9d2e3380d6 Various cleanups and clarifications, thanks to Gabor Greif for contributing this patch!
llvm-svn: 20514
2005-03-07 22:13:59 +00:00
Chris Lattner
1b4201e69f Fix problems compiling with G++ 4.x.x with -pedantic. Thanks to
Vladimir Merzliakov for the patch!

llvm-svn: 20513
2005-03-07 20:35:45 +00:00
Chris Lattner
084980cdcd fix another typo
llvm-svn: 20512
2005-03-07 20:31:38 +00:00
Chris Lattner
5f2c1454d4 fix typeo that Gabor Greif noticed!
llvm-svn: 20511
2005-03-07 20:30:51 +00:00
Chris Lattner
72c87c7c54 move the reassociation pass after the LICM pass. This speeds up mgrid
from 10.27s to 9.57s with the CBE.

llvm-svn: 20508
2005-03-07 03:19:50 +00:00
Chris Lattner
9cc39e2f8b Fix an apparent ambiguity compiling on PPC
llvm-svn: 20507
2005-03-07 02:59:36 +00:00
Chris Lattner
6d6f980ca7 fix a bug where we thought arguments were constants :(
llvm-svn: 20506
2005-03-06 22:52:29 +00:00
Chris Lattner
2174b70c68 Fix Regression/Transforms/LoopStrengthReduce/dont_insert_redundant_ops.ll,
hopefully not breaking too many other things.

llvm-svn: 20505
2005-03-06 22:36:12 +00:00
Chris Lattner
9471eb53aa cleanup the test
llvm-svn: 20504
2005-03-06 22:24:45 +00:00
Chris Lattner
ad1fa9275b check that we only insert one phi node per loop
llvm-svn: 20503
2005-03-06 22:23:31 +00:00
Chris Lattner
0f34140f90 Add testcase for this:
(3) Do not reduce element sizes of small power of two:

  char s[10];
  for (i)
    ...s[i] ...

when the indvar is not eliminable.

llvm-svn: 20502
2005-03-06 22:15:24 +00:00
Chris Lattner
a29e319d54 implement Transforms/LoopStrengthReduce/invariant_value_first_arg.ll
llvm-svn: 20501
2005-03-06 22:06:22 +00:00
Chris Lattner
983422f2c8 testcase for A[invariant][indvar] where invariant is an instruction.
llvm-svn: 20500
2005-03-06 22:06:09 +00:00
Chris Lattner
482fc889e1 add test for this:
(1) Allow loop invariant expressions to come before the induction variable (instead of just
constants):

   int x;
   for (i)
    ...a[x][i]

llvm-svn: 20499
2005-03-06 22:04:27 +00:00
Chris Lattner
85a611063e Add test for this:
Allow operands after the induction variable (no restrictions):

  int x;
  for (i)
   j = .....
   a[i][x][j]

llvm-svn: 20498
2005-03-06 22:01:42 +00:00
Chris Lattner
18fdd1e9f6 minor simplifications of the code.
llvm-svn: 20497
2005-03-06 21:58:22 +00:00
Chris Lattner
84be025747 a regtest
llvm-svn: 20496
2005-03-06 21:47:40 +00:00
Chris Lattner
de7a8d1e1c new directory
llvm-svn: 20495
2005-03-06 21:42:59 +00:00
Chris Lattner
53c34a2147 trivial simplification
llvm-svn: 20494
2005-03-06 21:35:38 +00:00
Chris Lattner
b4e635cfc4 Fix a bug where we could corrupt a parent loop's header info if we unrolled
a nested loop.  This fixes Transforms/LoopUnroll/2005-03-06-BadLoopInfoUpdate.ll
and PR532

llvm-svn: 20493
2005-03-06 20:57:32 +00:00
Chris Lattner
7ca2ddfbb8 New testcase for PR532
llvm-svn: 20492
2005-03-06 20:56:55 +00:00
Chris Lattner
ef140e77e6 new helper method
llvm-svn: 20491
2005-03-06 20:55:34 +00:00
Chris Lattner
cfd1a43bb0 new testcase reduced from the MultiSource/Applications/d failure last night.
llvm-svn: 20490
2005-03-06 19:40:19 +00:00
Chris Lattner
3183eeac8f move some method declarations around to make it clear that users should
not call insert(Value *Val), remove(Value* Val), or
changeName(Value *V, const std::string &Name)

llvm-svn: 20488
2005-03-06 06:03:44 +00:00
Chris Lattner
eddc6b4dc2 this method is never called.
llvm-svn: 20487
2005-03-06 06:00:24 +00:00
Chris Lattner
5d6a3ae953 cleanup some html
remove a statement that is no longer true
remove comment about a dead method.

llvm-svn: 20486
2005-03-06 06:00:13 +00:00
Chris Lattner
0371aef9a2 the only caller of insertEntry is insert, inline it and remove insertEntry
llvm-svn: 20485
2005-03-06 05:56:02 +00:00
Chris Lattner
46653269f4 rename insertEntry to insert
llvm-svn: 20484
2005-03-06 05:55:40 +00:00
Chris Lattner
b1ac7bc7f3 Merge SymbolTable::removeEntry into SymbolTable::remove, its only caller
llvm-svn: 20483
2005-03-06 05:51:09 +00:00
Chris Lattner
e0a963283c remove this method.
llvm-svn: 20482
2005-03-06 05:50:49 +00:00
Chris Lattner
57a7a2d1cf Delete the really inefficient method: void remove(const Type* Typ);
Speed up the symbol stripping code by avoiding a linear search of the
type table.

Get rid of removeEntry(type_iterator), since 'remove' is exactly the same
operation.

llvm-svn: 20481
2005-03-06 05:46:41 +00:00
Chris Lattner
6871e22bce Delete the really inefficient method: void remove(const Type* Typ);
Get rid of removeEntry(type_iterator), since 'remove' is exactly the same
operation.

llvm-svn: 20480
2005-03-06 05:46:00 +00:00
Chris Lattner
0ed850a944 Make this MUCH faster by avoiding a linear search in the symbol table code.
llvm-svn: 20479
2005-03-06 05:42:36 +00:00