1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-30 15:32:52 +01:00
Commit Graph

14777 Commits

Author SHA1 Message Date
Chris Lattner
2c12a719c0 Fix PowerPC/2006-08-15-SelectionCrash.ll and simplify selection code.
llvm-svn: 29715
2006-08-15 23:48:22 +00:00
Chris Lattner
cb3adb8225 Start using SDVTList more consistently
llvm-svn: 29711
2006-08-15 19:11:05 +00:00
Chris Lattner
ff1826e850 add a new SDVTList type and new SelectionDAG::getVTList methods to streamline
the creation of canonical VTLists.

llvm-svn: 29709
2006-08-15 17:46:01 +00:00
Chris Lattner
44d58ded54 eliminate use of getNode that takes vector of valuetypes.
llvm-svn: 29687
2006-08-14 23:53:35 +00:00
Chris Lattner
8e8d9a3358 Add a new getNode() method that takes a pointer to an already-intern'd list
of value-type nodes.  This avoids having to do mallocs for std::vectors of
valuetypes when a node returns more than one type.

llvm-svn: 29685
2006-08-14 23:31:51 +00:00
Chris Lattner
9ff7eb17e0 remove SelectionDAG::InsertISelMapEntry, it is dead
llvm-svn: 29677
2006-08-14 22:24:39 +00:00
Chris Lattner
fe1fd00ce8 Add code to resize the CSEMap hash table. This doesn't speedup codegen of
kimwitu, but seems like a good idea from a "avoid performance cliffs" standpoint :)

llvm-svn: 29675
2006-08-14 22:19:25 +00:00
Chris Lattner
d9ce68d3ec Handle single-entry PHI nodes correctly. This fixes PR877 and
Transforms/CondProp/2006-08-14-SingleEntryPhiCrash.ll

llvm-svn: 29673
2006-08-14 21:38:05 +00:00
Chris Lattner
e02af2c427 Add the actual constant to the hash for ConstantPool nodes. Thanks to
Rafael Espindola for pointing this out.

llvm-svn: 29669
2006-08-14 20:12:44 +00:00
Rafael Espindola
48bed9023d select code like
ldr rx, [ry, #offset]

llvm-svn: 29664
2006-08-14 19:01:24 +00:00
Nate Begeman
0e92042770 Emit .set directives for jump table entries when possible, which reduces
the number of relocations in object files, shrinkifying them.

llvm-svn: 29650
2006-08-12 21:29:52 +00:00
Chris Lattner
c482a5d057 Fix a bug in a recent refactoring that broke a bunch of stuff.
llvm-svn: 29649
2006-08-12 07:20:05 +00:00
Chris Lattner
d4ee71db50 Fix an obvious bug, noticed by inspection. No current targets trigger this.
llvm-svn: 29648
2006-08-12 05:41:39 +00:00
Chris Lattner
a75d3b6d0d Don't attempt to split subloops out of a loop with a huge number of backedges.
Not only will this take huge amounts of compile time, the resultant loop nests
won't be useful for optimization.  This reduces loopsimplify time on
Transforms/LoopSimplify/2006-08-11-LoopSimplifyLongTime.ll from ~32s to ~0.4s
with a debug build of llvm on a 2.7Ghz G5.

llvm-svn: 29647
2006-08-12 05:25:00 +00:00
Chris Lattner
9781d44b6e Make Loop::getExitBlocks significantly faster for large loops. Instead of
pounding on Loop::contains (which is O(n) in the size of the loop), use a
sorted vector, which is O(log(N)) for each query.  This speeds up Duraid's
horrible testcase from ~72s to ~31s in a debug build.

llvm-svn: 29645
2006-08-12 05:02:03 +00:00
Chris Lattner
0885025198 Reimplement the loopsimplify code which deletes edges from unreachable
blocks that target loop blocks.

Before, the code was run once per loop, and depended on the number of
predecessors each block in the loop had.  Unfortunately, scanning preds can
be really slow when huge numbers of phis exist or when phis with huge numbers
of inputs exist.

Now, the code is run once per function and scans successors instead of preds,
which is far faster.  In addition, the new code is simpler and is goto free,
woo.

This change speeds up a nasty testcase Duraid provided me from taking hours to
taking ~72s with a debug build.  The functionality this implements is already
tested in the testsuite as Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll.

llvm-svn: 29644
2006-08-12 04:51:20 +00:00
Chris Lattner
1d6e50c037 Switch to using SuperFastHash instead of adding all elements together. This
doesn't significantly improve performance but it helps a small amount.

llvm-svn: 29642
2006-08-12 01:07:10 +00:00
Chris Lattner
5510fa4ac5 Switch NodeID to track 32-bit chunks instead of 8-bit chunks, for a 2.5%
speedup in isel time.

llvm-svn: 29640
2006-08-11 23:55:53 +00:00
Chris Lattner
4966686ef8 remove IncludeFile turds in MathExtras.h, which bloats every .o file that
#includes it.

llvm-svn: 29639
2006-08-11 23:52:54 +00:00
Chris Lattner
a271f8f58c Remove 8 more std::map's.
llvm-svn: 29631
2006-08-11 21:55:30 +00:00
Chris Lattner
92774dab5c eliminate extraneous blank line
llvm-svn: 29627
2006-08-11 21:08:16 +00:00
Chris Lattner
76da77fcbb Move the BBNodes, GlobalValues, TargetGlobalValues, Constants, TargetConstants,
RegNodes, and ValueNodes maps into the CSEMap.

llvm-svn: 29626
2006-08-11 21:01:22 +00:00
Chris Lattner
3c504c013b eliminate the NullaryOps map, use CSEMap instead.
llvm-svn: 29621
2006-08-11 18:38:11 +00:00
Chris Lattner
0d57396628 change internal impl of dag combiner so that calls to CombineTo never have to
make a temporary vector.

llvm-svn: 29618
2006-08-11 17:56:38 +00:00
Chris Lattner
a47d3dd2cc Change one ReplaceAllUsesWith method to take an array of operands to replace
instead of a vector of operands.

llvm-svn: 29616
2006-08-11 17:46:28 +00:00
Chris Lattner
8ca6e82bce Eliminate use of getNode that takes a vector.
llvm-svn: 29614
2006-08-11 17:38:39 +00:00
Chris Lattner
be2765058e elimiante use of getNode that takes vector of operands.
llvm-svn: 29612
2006-08-11 17:22:35 +00:00
Chris Lattner
c3ce410ac3 eliminate use of getNode that takes vector of operands.
llvm-svn: 29611
2006-08-11 17:21:12 +00:00
Chris Lattner
4764bb3834 eliminate use of getNode that takes vector<SDOperand>. Wrap a really long line.
llvm-svn: 29610
2006-08-11 17:19:54 +00:00
Chris Lattner
2f9c4426fc Convert vectors to fixed sized arrays and smallvectors. Eliminate use of getNode that takes a vector.
llvm-svn: 29609
2006-08-11 17:18:05 +00:00
Chris Lattner
7e905fba17 Fix miscompilation of float vector returns. Compile code to this:
_func:
        vsldoi v2, v3, v2, 12
        vsldoi v2, v2, v2, 4
        blr

instead of:

_func:
        vsldoi v2, v3, v2, 12
        vsldoi v2, v2, v2, 4
***     vor f1, v2, v2
        blr

llvm-svn: 29607
2006-08-11 16:47:32 +00:00
Evan Cheng
6053206580 Match tablegen changes.
llvm-svn: 29604
2006-08-11 09:08:15 +00:00
Evan Cheng
34a49551f5 CALLSEQ_* produces chain even if that's not needed.
llvm-svn: 29603
2006-08-11 09:03:33 +00:00
Evan Cheng
131c832304 Convert more calls of getNode() that takes a vector to pass in the start of an array.
llvm-svn: 29601
2006-08-11 07:35:45 +00:00
Rafael Espindola
2ddcf46717 correctly set LocalAreaOffset of TargetFrameInfo
llvm-svn: 29589
2006-08-09 17:37:45 +00:00
Rafael Espindola
f0b265b48b fix the spill code
llvm-svn: 29583
2006-08-09 16:41:12 +00:00
Rafael Espindola
9e8af5c486 fix the loading of the link register in emitepilogue
llvm-svn: 29580
2006-08-09 13:15:47 +00:00
Rafael Espindola
ae2d1c53c7 change the addressing mode of the str instruction to reg+imm
llvm-svn: 29571
2006-08-08 20:35:03 +00:00
Rafael Espindola
7bfbb91f75 initial support for variable number of arguments
llvm-svn: 29567
2006-08-08 13:02:29 +00:00
Chris Lattner
7b1362fa52 Start eliminating temporary vectors used to create DAG nodes. Instead, pass
in the start of an array and a count of operands where applicable.  In many
cases, the number of operands is known, so this static array can be allocated
on the stack, avoiding the heap.  In many other cases, a SmallVector can be
used, which has the same benefit in the common cases.

I updated a lot of code calling getNode that takes a vector, but ran out of
time.  The rest of the code should be updated, and these methods should be
removed.

We should also do the same thing to eliminate the methods that take a
vector of MVT::ValueTypes.

It would be extra nice to convert the dagiselemitter to avoid creating vectors
for operands when calling getTargetNode.

llvm-svn: 29566
2006-08-08 02:23:42 +00:00
Chris Lattner
be2fc7b875 Eliminate some malloc traffic by allocating vectors on the stack. Change some
method that took std::vector<SDOperand> to take a pointer to a first operand
and #operands.

This speeds up isel on kc++ by about 3%.

llvm-svn: 29561
2006-08-08 01:09:31 +00:00
Evan Cheng
01cd84d113 Eliminate reachability matrix. It has to be calculated before any instruction
selection is done. That's rather expensive especially in situations where it
isn't really needed.
Move back to a searching the predecessors, but make use of topological order
to trim the search space.

llvm-svn: 29559
2006-08-08 00:31:00 +00:00
Reid Spencer
20aee8ad5d Remove the use of "IncludeFile" from this support facility. The mechanism
to build a loadable module is now correctly defined and documented so this
workaround isn't needed any longer.

llvm-svn: 29553
2006-08-07 23:20:15 +00:00
Reid Spencer
dc0927cccf Make this example pass use some things from lib/Support (EscapeString,
SlowOperatingInfo, Statistics). Besides providing an example of how to
use these facilities, it also serves to debug problems with runtime linking
when dlopening a loadable module. These three support facilities exercise
different combinations of Text/Weak Weak/Text and Text/Text linking
between the executable and the module.

llvm-svn: 29552
2006-08-07 23:17:24 +00:00
Reid Spencer
3f5e3c843a For PR780:
1. Change the usage of LOADABLE_MODULE so that it implies all the things
   necessary to make a loadable module. This reduces the user's burdern to
   get a loadable module correctly built.
2. Document the usage of LOADABLE_MODULE in the MakefileGuide
3. Adjust the makefile for lib/Transforms/Hello to use the new specification
   for building loadable modules
4. Adjust the sample project to not attempt to build a shared library for
   its little library. This was just wasteful and not instructive at all.

llvm-svn: 29551
2006-08-07 23:12:15 +00:00
Chris Lattner
1661ffa2eb Revamp the "CSEMap" datastructure used in the SelectionDAG class. This
eliminates a bunch of std::map's in the SelectionDAG, replacing them with a
home-grown hashtable.

This is still a work in progress: not all the maps have been moved over and the
hashtable never resizes.  That said, this still speeds up llc 20% on kimwitu++
with -fast -regalloc=local using a release build.

llvm-svn: 29550
2006-08-07 23:03:03 +00:00
Evan Cheng
d18be1d9c1 Match tablegen isel changes.
llvm-svn: 29549
2006-08-07 22:28:20 +00:00
Evan Cheng
d64d5529b0 Clear TopOrder before assigning topological order. Some clean ups.
llvm-svn: 29546
2006-08-07 22:13:29 +00:00
Evan Cheng
0853250689 Reverse the FlaggedNodes after scanning up for flagged preds or else the order would be reversed.
llvm-svn: 29545
2006-08-07 22:12:12 +00:00
Evan Cheng
5d8f227a4a Make XMM, FP register dwarf register numbers consistent with gcc.
llvm-svn: 29543
2006-08-07 21:02:39 +00:00