4994 Commits

Author SHA1 Message Date
Dan Gohman
14a05df97b Don't call size() on each iteration of the loop.
llvm-svn: 50361
2008-04-28 17:42:03 +00:00
Dan Gohman
da44054867 Fix the SVOffset values for loads and stores produced by
memcpy/memset expansion. It was a bug for the SVOffset value
to be used in the actual address calculations.

llvm-svn: 50359
2008-04-28 17:15:20 +00:00
Dan Gohman
72ec3f4562 Teach InstCombine's ComputeMaskedBits what SelectionDAG's
ComputeMaskedBits knows about cttz, ctlz, and ctpop. Teach
SelectionDAG's ComputeMaskedBits what InstCombine's knows
about SRem. And teach them both some things about high bits
in Mul, UDiv, URem, and Sub. This allows instcombine and
dagcombine to eliminate sign-extension operations in
several new cases.

llvm-svn: 50358
2008-04-28 17:02:21 +00:00
Dan Gohman
3eb10f758e Teach DAGCombine to convert (sext x) to (zext x) when the
sign-bit of x is known to be zero.

llvm-svn: 50357
2008-04-28 16:58:24 +00:00
Chris Lattner
c9e280c78a Another collection of random cleanups. No functionality change.
llvm-svn: 50341
2008-04-28 07:16:35 +00:00
Chris Lattner
52504e78fb Remove the SmallVector ctor that converts from a SmallVectorImpl. This
conversion open the door for many nasty implicit conversion issues, and
can be easily solved by initializing with (V.begin(), V.end()) when 
needed.

This patch includes many small cleanups for sdisel also.

llvm-svn: 50340
2008-04-28 06:44:42 +00:00
Chris Lattner
8c7f5ad968 switch RegsForValue::Regs to be a SmallVector to avoid
heap thrash on tiny (usually single-element) vectors.

llvm-svn: 50335
2008-04-28 06:02:19 +00:00
Chris Lattner
d04b818a91 move static function out of anon namespace, no functionality change.
llvm-svn: 50330
2008-04-27 23:48:12 +00:00
Chris Lattner
122721843b Another step to getting multiple result inline asm to work.
llvm-svn: 50329
2008-04-27 23:44:28 +00:00
Chris Lattner
58b9ece38d typo
llvm-svn: 50316
2008-04-27 01:49:46 +00:00
Chris Lattner
2237973438 Implement a signficant optimization for inline asm:
When choosing between constraints with multiple options,
like "ir", test to see if we can use the 'i' constraint and
go with that if possible.  This produces more optimal ASM in
all cases (sparing a register and an instruction to load it),
and fixes inline asm like this:

void test () {
  asm volatile (" %c0 %1 " : : "imr" (42), "imr"(14));
}

Previously we would dump "42" into a memory location (which
is ok for the 'm' constraint) which would cause a problem
because the 'c' modifier is not valid on memory operands.

Isn't it great how inline asm turns 'missed optimization'
into 'compile failed'??

Incidentally, this was the todo in 
PowerPC/2007-04-24-InlineAsm-I-Modifier.ll

Please do NOT pull this into Tak.

llvm-svn: 50315
2008-04-27 00:37:18 +00:00
Chris Lattner
a937baeb9b isa+cast -> dyn_cast
llvm-svn: 50314
2008-04-27 00:16:18 +00:00
Chris Lattner
4793515a9c Move a bunch of inline asm code out of line.
llvm-svn: 50313
2008-04-27 00:09:47 +00:00
Chris Lattner
724539c001 A few inline asm cleanups:
- Make targetlowering.h fit in 80 cols.
  - Make LowerAsmOperandForConstraint const.
  - Make lowerXConstraint -> LowerXConstraint
  - Make LowerXConstraint return a const char* instead of taking a string byref.

llvm-svn: 50312
2008-04-26 23:02:14 +00:00
Dan Gohman
ca95a5f49f Remove the code from CodeGenPrepare that moved getresult instructions
to the block that defines their operands. This doesn't work in the
case that the operand is an invoke, because invoke is a terminator
and must be the last instruction in a block.

Replace it with support in SelectionDAGISel for copying struct values
into sequences of virtual registers.

llvm-svn: 50279
2008-04-25 18:27:55 +00:00
Nate Begeman
6f94f61317 Pull the code to perform an INSERT_VECTOR_ELT in memory out into its own
function, and then use it to fix a bug in SplitVectorOp that expected inserts
to always have constant insertion indices.

llvm-svn: 50273
2008-04-25 18:07:40 +00:00
Evan Cheng
3980a7911a - Check if a register is livein before removing it. It may have already been removed.
- Do not iterate over SmallPtrSet, the order of iteration is not deterministic.

llvm-svn: 50209
2008-04-24 09:06:33 +00:00
Dan Gohman
e9e3891c09 Use isa instead of dyn_cast.
llvm-svn: 50181
2008-04-23 20:25:16 +00:00
Dan Gohman
b418aafabf Add support to codegen for getresult instructions with undef operands.
llvm-svn: 50180
2008-04-23 20:21:29 +00:00
Anton Korobeynikov
0516b6f2b0 Unbreak JIT
llvm-svn: 50173
2008-04-23 18:26:03 +00:00
Anton Korobeynikov
7e859dd7f0 Add facility for pre-RA passes
llvm-svn: 50165
2008-04-23 18:22:28 +00:00
Anton Korobeynikov
41334635cc Use precomputed value, if any
llvm-svn: 50164
2008-04-23 18:21:50 +00:00
Anton Korobeynikov
f49bc9f8ed Cleanup
llvm-svn: 50160
2008-04-23 18:19:47 +00:00
Dan Gohman
dc90919d2b Fix an out-of-bounds access in -view-sunit-dags in the case of an
empty ScheduleDAG.

llvm-svn: 50054
2008-04-21 20:07:30 +00:00
Dale Johannesen
aac27592f0 Check we aren't trying to convert PPC long double.
This fixes the testsuite failure on ppcf128-4.ll.

llvm-svn: 49994
2008-04-20 18:23:46 +00:00
Chris Lattner
3b18762f40 Switch to using Simplified ConstantFP::get API.
llvm-svn: 49977
2008-04-20 00:41:09 +00:00
Duncan Sands
1ec193e90b Implement a bit more softfloat support in
LegalizeTypes.  Correct the load logic so
that it actually works, and also teach it
to handle floating point extending loads.

llvm-svn: 49923
2008-04-18 20:56:03 +00:00
Duncan Sands
a8a61562af Add some more FIXME's for indexed loads and stores.
llvm-svn: 49916
2008-04-18 20:27:12 +00:00
Duncan Sands
b4e0b24e0a Provide an explicit list of operands to MakeLibcall,
rather than having it suck them out of a node.  Add
a bunch of new libcalls, and remove dead softfloat
code (dead, because FloatToInt is used not Expand
in this case).  Note that indexed stores probably
aren't handled properly, likewise for loads.

llvm-svn: 49915
2008-04-18 20:25:14 +00:00
Evan Cheng
d556115e7e Correct comment.
llvm-svn: 49913
2008-04-18 19:25:26 +00:00
Evan Cheng
495a516390 Not safe to "kill" a register if its live range extends pass the end of block branch.
llvm-svn: 49911
2008-04-18 19:22:23 +00:00
Dan Gohman
75c895dbc4 Remove the implicit conversion from SDOperandPtr to SDOperand*; this
may fix a build error on Visual Studio.

llvm-svn: 49876
2008-04-17 23:02:12 +00:00
Evan Cheng
7e4a55bc58 Be more careful with insert_subreg and extract_subreg where either source or destination operand has already been coalesced with another register that's defined by a insert_subreg or extract_subreg.
llvm-svn: 49843
2008-04-17 07:58:04 +00:00
Bill Wendling
288ef83b8a Use correct name for method in comment.
llvm-svn: 49841
2008-04-17 05:20:39 +00:00
Dan Gohman
9752a8f3b4 Correct the SrcValue information in the Expand code for va_copy.
llvm-svn: 49839
2008-04-17 02:09:26 +00:00
Evan Cheng
c8c3a899c0 Fix a sub-register indice propagation bug.
llvm-svn: 49832
2008-04-17 00:06:42 +00:00
Nicolas Geoffray
a7557dfe71 Correlate stubs with functions in JIT: when emitting a stub, the JIT tells the memory manager which function
the stub will resolve.

llvm-svn: 49814
2008-04-16 20:46:05 +00:00
Evan Cheng
59aa126e48 After reading memory that's already freed.
llvm-svn: 49810
2008-04-16 20:24:25 +00:00
Nicolas Geoffray
ae84bbdbed Infrastructure for getting the machine code size of a function and an instruction. X86, PowerPC and ARM are implemented
llvm-svn: 49809
2008-04-16 20:10:13 +00:00
Evan Cheng
23f12757ed Fix PR2226. Avoid using uninitialized variables.
llvm-svn: 49807
2008-04-16 18:48:43 +00:00
Evan Cheng
8dc8a8d8af Empty basic block should have an empty range.
llvm-svn: 49800
2008-04-16 18:01:08 +00:00
Roman Levenstein
a3ee1a38a3 Ongoing work on improving the instruction selection infrastructure:
Rename SDOperandImpl back to SDOperand.
Introduce the SDUse class that represents a use of the SDNode referred by
an SDOperand. Now it is more similar to Use/Value classes.

Patch is approved by Dan Gohman.

llvm-svn: 49795
2008-04-16 16:15:27 +00:00
Evan Cheng
e45b8f89c5 Rewrite LiveVariable liveness computation. The new implementation is much simplified. It eliminated the nasty recursive routines and removed the partial def / use bookkeeping. There is also potential for performance improvement by replacing the conservative handling of partial physical register definitions. The code is currently disabled until live interval analysis is taught of the name scheme.
This patch also fixed a couple of nasty corner cases.

llvm-svn: 49784
2008-04-16 09:46:40 +00:00
Evan Cheng
6c17773ccc Code clean up.
llvm-svn: 49783
2008-04-16 09:41:59 +00:00
Evan Cheng
e29e9774a4 Avoid read after free.
llvm-svn: 49760
2008-04-16 01:22:28 +00:00
Dan Gohman
82b6673c44 Fix the new scheduler assertion checks to work when
the scheduler has inserted no-ops. This fixes
the 2006-07-03-schedulers.ll regression on ppc32.

llvm-svn: 49747
2008-04-15 22:40:14 +00:00
Nicolas Geoffray
7000c8f1aa Change Divided flag to Split, as suggested by Evan
llvm-svn: 49715
2008-04-15 08:08:50 +00:00
Dan Gohman
4370f26750 Treat EntryToken nodes as "passive" so that they aren't added to the
ScheduleDAG; they don't correspond to any actual instructions so they
don't need to be scheduled.

This fixes a bug where the EntryToken was being scheduled multiple
times in some cases, though it ended up not causing any trouble because 
EntryToken doesn't expand into anything. With this fixed the schedulers
reliably schedule the expected number of units, so we can check this
with an assertion.

This requires a tweak to test/CodeGen/X86/loop-hoist.ll because it
ends up getting scheduled differently in a trivial way, though it was
enough to fool the prcontext+grep that the test does.

llvm-svn: 49701
2008-04-15 01:22:18 +00:00
Dan Gohman
e5f21cea3e In -view-sunit-dags, display "special" chain dependencies as cyan
instead of blue to distinguish them from regular dependencies.

llvm-svn: 49696
2008-04-14 23:15:07 +00:00
Dan Gohman
5b61a288a7 Avoid creating MERGE_VALUES nodes for single values.
llvm-svn: 49676
2008-04-14 18:43:25 +00:00