1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 19:52:54 +01:00
Commit Graph

24304 Commits

Author SHA1 Message Date
Anton Korobeynikov
61a8f92b2c Use EmitAlignment consistently
llvm-svn: 54456
2008-08-07 09:53:38 +00:00
Anton Korobeynikov
a7b288b4d8 Cleanup
llvm-svn: 54455
2008-08-07 09:53:13 +00:00
Anton Korobeynikov
bb99d4b900 Cleanup
llvm-svn: 54454
2008-08-07 09:52:54 +00:00
Anton Korobeynikov
2755fabf07 Switch IA64 to new section-handling stuff
llvm-svn: 54453
2008-08-07 09:52:35 +00:00
Anton Korobeynikov
9d8232ec1d Cleanup
llvm-svn: 54452
2008-08-07 09:52:13 +00:00
Anton Korobeynikov
d3009663dd Provide convenient helpers
llvm-svn: 54451
2008-08-07 09:51:54 +00:00
Anton Korobeynikov
912a2a8114 Switch Sparc to new section handling stuff. Refactor printing of module-level GVs significantly.
llvm-svn: 54450
2008-08-07 09:51:25 +00:00
Anton Korobeynikov
ebd773939c Add hook for constant pool section selection for darwin.
llvm-svn: 54449
2008-08-07 09:51:02 +00:00
Anton Korobeynikov
d37daa2aeb Select section for constant pool entries
llvm-svn: 54448
2008-08-07 09:50:34 +00:00
Chris Lattner
863d710738 Don't verify passes when assertions are disabled.
llvm-svn: 54446
2008-08-07 07:34:50 +00:00
Dan Gohman
74fa421281 Re-enable elimination of unnecessary SUBREG_TO_REG instructions in
LowerSubregs, and fix an x86-64 isel bug that this exposed.

SUBREG_TO_REG for x86-64 implicit zero extension is only safe for
isel to generate when the source is known to always have zeros in
the high 32 bits. The EXTRACT_SUBREG instruction does not clear
the high 32 bits.

llvm-svn: 54444
2008-08-07 02:54:50 +00:00
Dale Johannesen
a4de0fa539 Rewrite JIT handling of GlobalVariables so they
are allocated in the same buffer as the code,
jump tables, etc.

The default JIT memory manager does not handle buffer
overflow well.  I didn't introduce this and I'm not
attempting to fix it here, but it is more likely to
be hit now since we're putting more stuff in the
buffer.  This affects one test that I know of so far,
MultiSource/Benchmarks/NPB-serial/is.

llvm-svn: 54442
2008-08-07 01:30:15 +00:00
Evan Cheng
f8a801a9b8 Factor code that finalize PHI nodes, jump tables, etc. out of SelectBasicBlock. No functionality changes.
llvm-svn: 54438
2008-08-07 00:43:25 +00:00
Owen Anderson
2975ced4df SDISel's constant branch folding can fold away self-loops, which doesn't result in any dead blocks, but
rather an incorrect phi input.  Add code to UnreachableMachineBlockElim to get rid of these entries.

llvm-svn: 54432
2008-08-06 23:16:52 +00:00
Owen Anderson
655eb1a3bc Correct handle cases where two phis are coalesced together, and correct break up the case where two different
phis want to coalesce with the same vreg.

llvm-svn: 54426
2008-08-06 22:08:58 +00:00
Owen Anderson
33cf898dff Oops, didn't mean to commit this.
llvm-svn: 54425
2008-08-06 20:58:38 +00:00
Owen Anderson
5929d57f67 We don't need to try to coalesce input vregs that are the same as the output vreg.
llvm-svn: 54422
2008-08-06 20:29:20 +00:00
Owen Anderson
482d679301 Only trim a live interval if the register is not used after the PHI node.
llvm-svn: 54421
2008-08-06 18:36:17 +00:00
Owen Anderson
e95b75bed2 Only remap each VNInfo once when doing renumbering.
llvm-svn: 54420
2008-08-06 18:35:45 +00:00
Dan Gohman
cc784f1662 Re-introduce the 8-bit subreg zext-inreg patterns for x86-32,
this time using MOV32to32_ and MOV16to16_. Thanks to Evan for
suggesting this.

llvm-svn: 54418
2008-08-06 18:27:21 +00:00
Dan Gohman
4ad77e1ca2 Fix a shufflevector instcombine that was emitting invalid masks indices
when it meant to be emitting undef indices.

llvm-svn: 54417
2008-08-06 18:17:32 +00:00
Evan Cheng
c5cc2cb4aa Fix PR2355: bug in ChangeCompareStride. When the loop termination compare is the only use of its iv stride, the stride can be eliminated by moving it to another stride. If the scale is negative, swap the predicate instead of using a inverse predicate.
llvm-svn: 54415
2008-08-06 18:04:43 +00:00
Dan Gohman
99d70043f9 xchg does not modify FLAGS.
llvm-svn: 54411
2008-08-06 15:52:50 +00:00
Chris Lattner
55b99a6739 optimize a common idiom generated by clang for bitfield access, PR2638.
llvm-svn: 54408
2008-08-06 07:35:52 +00:00
Bruno Cardoso Lopes
fa0a8e3e2b Added support for fp callee saved registers.
Added fp register clobbering during calls.
Added AsmPrinter support for "fmask", a bitmask that indicates where on the 
stack the fp callee saved registers are.

Fixed the stack frame layout for Mips, now the callee saved regs 
are in the right stack location (a little documentation about how this
stack frame must look like is present in MipsRegisterInfo.cpp).
This was done using the method MipsRegisterInfo::adjustMipsStackFrame
To be more clear, these are examples of what is solves :  

1) FP and RA are also callee saved, and despite they aren't in CSI they 
   must be saved before the fp callee saved registers. 
2) The ABI requires that local varibles are allocated before the callee 
   saved register area, the opposite behavior from the default allocation.
3) CPU and FPU saved register area must be aligned independent of each
   other.

llvm-svn: 54403
2008-08-06 06:14:43 +00:00
Chris Lattner
cae04940bd Zap sitofp/fptoui pairs. In all cases when the sign difference
matters, the result is undefined anyway.

llvm-svn: 54396
2008-08-06 05:13:06 +00:00
Nick Lewycky
0bf3c812d2 Reinstate this optimization, but without the miscompile. Thanks to Bill for
tracking down that this was breaking llvm-gcc bootstrap on Linux.

llvm-svn: 54394
2008-08-06 04:54:03 +00:00
Dan Gohman
3e389ed424 Use strcpy instead of sprintf here. This avoids a GCC 4.3 format-string
warning. There wasn't actually a problem here, because the contents of
the string are known.

llvm-svn: 54385
2008-08-05 23:36:35 +00:00
Dan Gohman
8377e7019f Pass the computed iteration count value to RewriteLoopExitValues
instead of having it call getIterationCount again.

llvm-svn: 54380
2008-08-05 22:34:21 +00:00
Owen Anderson
e9c3ae9fe4 Fix breakage on ARM/2008-04-10-ScavengerAssert.ll.
llvm-svn: 54378
2008-08-05 22:24:40 +00:00
Evan Cheng
f4d1119fbd Fix PR2620: Fix X86cmppd selection code so it expects operands to be v2f64.
llvm-svn: 54376
2008-08-05 22:19:15 +00:00
Evan Cheng
a07795a0c3 Fix PR2596: out of bound reference.
llvm-svn: 54375
2008-08-05 21:51:46 +00:00
Owen Anderson
acd5487eb9 Correctly handle replacement and removal of PHIs with one incoming register.
llvm-svn: 54374
2008-08-05 21:40:45 +00:00
Bill Wendling
3882f060ef Revert r53282. This was causing a miscompile on Linux. Also, the transformation
looks bogus. Please see PR2629 for details on why this is breaking things.

llvm-svn: 54372
2008-08-05 21:23:45 +00:00
Owen Anderson
11731063b9 Oops, we were already checking for dead phis. Handle this the proper way, then.
llvm-svn: 54371
2008-08-05 21:18:51 +00:00
Owen Anderson
dacdf44612 We don't need to update live intervals for dead PHIs.
llvm-svn: 54369
2008-08-05 20:51:26 +00:00
Owen Anderson
667d9c95c2 Remove the -disable-correct-folding option, which was ugly and is no longer needed.
llvm-svn: 54361
2008-08-05 18:27:54 +00:00
Dan Gohman
51a5eb52c5 Fix the AsmWriter to not print extra spaces after parameter attributes.
llvm-svn: 54351
2008-08-05 15:51:44 +00:00
Dan Gohman
1238bf634b Trim #includes.
llvm-svn: 54350
2008-08-05 15:32:23 +00:00
Dan Gohman
de163bb39d Fix several const-correctness issues, resolving some -Wcast-qual warnings.
llvm-svn: 54349
2008-08-05 14:45:15 +00:00
Evan Cheng
1b731b8504 Remove #if 0.
llvm-svn: 54347
2008-08-05 07:20:57 +00:00
Evan Cheng
754148a2ec Fix PR2568: Fix bug that cause redudant kill marker after its live interval has been extended due to coalescing.
llvm-svn: 54346
2008-08-05 07:10:38 +00:00
Owen Anderson
7b5fe60440 Remove unneeded iteration. Thanks to Dan for the feedback.
llvm-svn: 54337
2008-08-05 00:30:10 +00:00
Owen Anderson
32ae9380f1 This option doesn't need to be a target option. It can be in SDISel instead.
llvm-svn: 54336
2008-08-05 00:27:28 +00:00
Owen Anderson
84fbc312d4 - Fix SelectionDAG to generate correct CFGs.
- Add a basic machine-level dead block eliminator.

These two have to go together, since many other parts of the code generator are unable to handle the unreachable blocks otherwise created.

llvm-svn: 54333
2008-08-04 23:54:43 +00:00
Eli Friedman
ef366a16a2 PR2621: Improvements to the SCEV AddRec binomial expansion. This
version uses a new algorithm for evaluating the binomial coefficients 
which is significantly more efficient for AddRecs of more than 2 terms 
(see the comments in the code for details on how the algorithm works).  
It also fixes some bugs: it removes the arbitrary length restriction for 
AddRecs, it fixes the silent generation of incorrect code for AddRecs 
which require a wide calculation width, and it fixes an issue where we 
were incorrectly truncating the iteration count too far when evaluating 
an AddRec expression narrower than the induction variable.

There are still a few related issues I know of: I think there's 
still an issue with the SCEVExpander expansion of AddRec in terms of
the width of the induction variable used.  The hack to avoid generating 
too-wide integers shouldn't be necessary; instead, the callers should be 
considering the cost of the expansion before expanding it (in addition 
to not expanding too-wide integers, we might not want to expand 
expressions that are really expensive, especially when optimizing for 
size; calculating an length-17 32-bit AddRec currently generates about 250 
instructions of straight-line code on X86).  Also, for long 32-bit 
AddRecs on X86, CodeGen really sucks at scheduling the code.  I'm planning on 
filing follow-up PRs for these issues.

llvm-svn: 54332
2008-08-04 23:49:06 +00:00
Dan Gohman
60ea311ec8 Fix SDISel lowering of PHI nodes to use ComputeValueVTs.
This allows it to work correctly on aggregate values.
This fixes PR2623.

llvm-svn: 54331
2008-08-04 23:42:46 +00:00
Dan Gohman
af429b3e52 Fix SDISel lowering of zeroinitializer and undef to use ComputeValueVTs.
This allows it to work correctly on nested aggregate values.
This fixes PR2625.

llvm-svn: 54330
2008-08-04 23:30:41 +00:00
Dan Gohman
5d0df78ae0 Add an assert to catch invalid VECTOR_SHUFFLE mask indices.
llvm-svn: 54329
2008-08-04 23:09:15 +00:00
Bruno Cardoso Lopes
34f2582096 Mips ISelLowering cleanup : Removed old LowerCALL and FORMAL_ARGS helpers, they
aren't used anyway, they also used to broke compiling when fastcc was specified for a
function, but not anymore.

llvm-svn: 54316
2008-08-04 07:12:52 +00:00
Bruno Cardoso Lopes
463f306553 Handle i32->f32 bitconvert results.
llvm-svn: 54315
2008-08-04 06:44:31 +00:00
Andrew Lenharth
377c046675 Add atomic sub for other sizes
llvm-svn: 54314
2008-08-03 20:17:34 +00:00
Chris Lattner
9aaf1f7650 Emit saveri with the correct operand order, patch by Richard Pennington!
llvm-svn: 54313
2008-08-03 18:16:14 +00:00
Bruno Cardoso Lopes
e9f5a77b11 Fix PR2615
llvm-svn: 54312
2008-08-03 15:37:43 +00:00
Bruno Cardoso Lopes
b13d663126 Improved asm inline for hi,lo results
Added hi,lo registers to be used,def implicitly. This provides better handle of
instructions which use hi/lo.
Fixes a small BranchAnalysis bug

llvm-svn: 54274
2008-08-02 19:42:36 +00:00
Bruno Cardoso Lopes
402c28e400 Apply the same pattern used in 'and' lowering for 'or'
llvm-svn: 54273
2008-08-02 19:37:33 +00:00
Duncan Sands
573c01d5da Fix comment typos.
llvm-svn: 54266
2008-08-01 12:23:49 +00:00
Bruno Cardoso Lopes
9cb1f636b4 Expand fcopysign
llvm-svn: 54250
2008-07-31 18:50:54 +00:00
Bruno Cardoso Lopes
01c39058e8 Handle more SELECT corner cases considering legalize types, probabily wont work with
the default legalizer.

llvm-svn: 54249
2008-07-31 18:31:28 +00:00
Dale Johannesen
f669e7c14f Add a flag to disable jump table generation (all
switches use the binary search algorithm) for
environments that don't support it.  PPC64 JIT
is such an environment; turn the flag on for that.

llvm-svn: 54248
2008-07-31 18:13:12 +00:00
Dan Gohman
f691fc703d Improve dagcombining for sext-loads and sext-in-reg nodes.
llvm-svn: 54239
2008-07-31 00:50:31 +00:00
Bruno Cardoso Lopes
9181910033 Added pattern for floating point zero immediate (avoiding a constant pool
access).
Added pattern to match bitconvert node.
Fixed MTC1 asm string bug.

llvm-svn: 54229
2008-07-30 19:00:31 +00:00
Dan Gohman
926a91d664 Move SelectionDAG::viewGraph() out of line; as an inline function
it isn't always visible to gdb.

llvm-svn: 54228
2008-07-30 18:48:53 +00:00
Dan Gohman
4ca56a8993 Don't look for leaf values to store when lowering stores of
empty structs. This fixes PR2612.

llvm-svn: 54226
2008-07-30 18:36:51 +00:00
Owen Anderson
4e5db8d80f Use existing LiveInterval methods to simplify live interval merging. Thanks to Evan for pointing these out.
llvm-svn: 54225
2008-07-30 18:27:35 +00:00
Dan Gohman
efb5d2ce6e Reapply r54147 with a constraint to only use the 8-bit
subreg form on x86-64, to avoid the problem with x86-32
having GPRs that don't have 8-bit subregs.

Also, change several 16-bit instructions to use 
equivalent 32-bit instructions. These have a smaller
encoding and avoid partial-register updates.

llvm-svn: 54223
2008-07-30 18:09:17 +00:00
Owen Anderson
e6dca3efcb Value numbers whose def index is a special sentinel value should not be remapped.
llvm-svn: 54218
2008-07-30 17:42:47 +00:00
Bruno Cardoso Lopes
df5916fff6 Fixed bug in global address lowering for functions and in Brcond lowering
llvm-svn: 54215
2008-07-30 17:06:13 +00:00
Bruno Cardoso Lopes
e130052d1d Removed small section flag for mips, the assembler doesnt support this flag
llvm-svn: 54214
2008-07-30 17:04:04 +00:00
Bruno Cardoso Lopes
f2a6400d3e Added new features to represent specific instructions groups
llvm-svn: 54213
2008-07-30 17:01:06 +00:00
Bruno Cardoso Lopes
53fdaf7763 Instruction definition cleanup
llvm-svn: 54212
2008-07-30 16:58:59 +00:00
Mon P Wang
fb483982f5 Added support for overloading intrinsics (atomics) based on pointers
to different address spaces.  This alters the naming scheme for those
intrinsics, e.g., atomic.load.add.i32 => atomic.load.add.i32.p0i32

llvm-svn: 54195
2008-07-30 04:36:53 +00:00
Eli Friedman
a750724150 Another SCEV issue from PR2607; essentially the same issue, but this
time applying to the implicit comparison in smin expressions. The 
correct way to transform an inequality into the opposite 
inequality, either signed or unsigned, is with a not expression.

I looked through the SCEV code, and I don't think there are any more 
occurrences of this issue.

llvm-svn: 54194
2008-07-30 04:36:32 +00:00
Owen Anderson
377ad6cb31 More fixes for corner cases when remapping live range indices.
llvm-svn: 54186
2008-07-30 00:22:56 +00:00
Owen Anderson
6147af0f8c When merging live intervals, we also need to merge in any live ranges that are inputs to two-address instructions
that themselves define a range we already care about.

llvm-svn: 54185
2008-07-30 00:21:16 +00:00
Eli Friedman
81169f2e1b Fix for PR2607: SCEV miscomputing the loop count for loops with an
SGT exit condition.  Essentially, the correct way to flip an inequality 
in 2's complement is the not operator, not the negation operator.  
That said, the difference only affects cases involving INT_MIN.

Also, enhance the pre-test search logic to be a bit smarter about 
inequalities flipped with a not operator, so it can eliminate the smax 
from the iteration count for simple loops.

llvm-svn: 54184
2008-07-30 00:04:08 +00:00
Owen Anderson
ab575176fc When merging a PHI operand's live interval into the PHI's live interval, we need to merge over all liveranges in
the operand's interval that share the relevant value number, not just the range that immediately precedes the PHI.

llvm-svn: 54174
2008-07-29 21:17:08 +00:00
Owen Anderson
bebb8e5d20 Don't decrement the BB remap when we don't need to.
llvm-svn: 54173
2008-07-29 21:15:44 +00:00
Duncan Sands
c3d73fbfc0 Fix PR2609. If a label is deleted, then it needs
to be marked invalid regardless of whether it is
a debug, an exception handling or (hopefully) a
GC label.

llvm-svn: 54172
2008-07-29 20:56:02 +00:00
Bruno Cardoso Lopes
2188281cd4 Changed some methods order.
llvm-svn: 54169
2008-07-29 19:29:50 +00:00
Nate Begeman
f76a814673 Fix broken CellSPU lowering, re-instate braces in Legalize
llvm-svn: 54168
2008-07-29 19:07:27 +00:00
Bruno Cardoso Lopes
9d91fab260 Added floating point lowering for select.
llvm-svn: 54167
2008-07-29 19:05:28 +00:00
Nate Begeman
20b060cd54 Disable a fix in the previous patch, since it breaks CellSPU.
The CellSPU codegen is broken, but needs to be fixed before we can
put this back in.

llvm-svn: 54164
2008-07-29 18:28:31 +00:00
Nate Begeman
9a71580e21 Add vector shifts to the IR, patch by Eli Friedman.
CodeGen & Clang work coming next.

llvm-svn: 54161
2008-07-29 15:49:41 +00:00
Matthijs Kooijman
7199907f50 Add -unroll-allow-partial command line option that enabled the loop unroller to
partially unroll a loop when fully unrolling would not fit under the threshold.

Patch by Mikael Lepistö.

llvm-svn: 54160
2008-07-29 13:21:23 +00:00
Matthijs Kooijman
77948dbbc2 Restructure ArgumentPromotion a bit. Instead of just having a single boolean
that says "unconditional loads from this argument are safe", we now keep track
of the safety per set of indices from which loads happen. This prevents
ArgPromotion from promoting loads that aren't really valid. As an added effect,
this will now disregard the the type of the indices passed to a GEP, so
"load GEP %A, i32 1" and "load GEP %A, i64 1" will result in a single argument,
not two.

This fixes PR2598, for which a testcase has been added as well.

llvm-svn: 54159
2008-07-29 10:00:13 +00:00
Matthijs Kooijman
6ef5a25c7f Add a GetElementPtrInst::getIndexedType that accepts uint64_t's instead of just Value*'s.
llvm-svn: 54157
2008-07-29 08:46:11 +00:00
Evan Cheng
10d4254f45 Fix for PR2578. Do not split off a block whose size is less than FreeRangeHeader::getMinBlockSize(). Patch by Damien.
llvm-svn: 54152
2008-07-29 07:38:32 +00:00
Dan Gohman
ebe629a4b2 Revert 54147.
llvm-svn: 54148
2008-07-29 01:02:18 +00:00
Dan Gohman
1816900fd1 Add x86 isel patterns to match what would be a ZERO_EXTEND_INREG operation,
which is represented in codegen as an 'and' operation. This matches them
with movz instructions, instead of leaving them to be matched by and
instructions with an immediate field.

llvm-svn: 54147
2008-07-28 22:18:25 +00:00
Dan Gohman
9653b21dc2 Fold the useful features of alist and alist_node into ilist, and
a new ilist_node class, and remove them. Unlike alist_node,
ilist_node doesn't attempt to manage storage itself, so it avoids
the associated problems, including being opaque in gdb.

Adjust the Recycler class so that it doesn't depend on alist_node.
Also, change it to use explicit Size and Align parameters, allowing
it to work when the largest-sized node doesn't have the greatest
alignment requirement.

Change MachineInstr's MachineMemOperand list from a pool-backed
alist to a std::list for now.

llvm-svn: 54146
2008-07-28 21:51:04 +00:00
Owen Anderson
d2cc2655af Don't remove volatile loads. Thanks to Duncan for noticing this one.
llvm-svn: 54144
2008-07-28 20:52:42 +00:00
Bruno Cardoso Lopes
4223351620 Disable gp_rel relocation for constant pools access for now.
llvm-svn: 54142
2008-07-28 19:26:25 +00:00
Duncan Sands
3df25c8758 Since build_vector is a variadic node, the number
of operands should be -1 not 0.

llvm-svn: 54141
2008-07-28 19:17:21 +00:00
Bruno Cardoso Lopes
67af9a72f4 Added floating point lowering for setcc and brcond.
Fixed COMM asm directive usage.
ConstantPool using custom FourByteConstantSection.

llvm-svn: 54139
2008-07-28 19:11:24 +00:00
Dan Gohman
f6391108c6 Fix a typo in a comment.
llvm-svn: 54136
2008-07-28 18:43:51 +00:00
Owen Anderson
4d84a90fa9 Add support for eliminating stores that store the same value that was just loaded.
This fixes PR2599.

llvm-svn: 54133
2008-07-28 16:14:26 +00:00
Owen Anderson
23a7866a06 Fix a subtle bug when removing instructions from memdep. In very specific
circumstances we could end up remapping a dependee to the same instruction 
that we're trying to remove.  Handle this properly by just falling back to
a conservative solution.

llvm-svn: 54132
2008-07-28 16:00:58 +00:00
Bill Wendling
86c1243f5e Remove <iostream> include.
llvm-svn: 54131
2008-07-27 23:18:30 +00:00
Dan Gohman
6bfdeb2ed1 Make the ScheduleDAG's GraphRoot edge be blue and dashed too, like
the SelectionDAG's.

llvm-svn: 54129
2008-07-27 22:46:49 +00:00
Dan Gohman
9742f7772d Rename SDOperand to SDValue.
llvm-svn: 54128
2008-07-27 21:46:04 +00:00
Dan Gohman
47c5cdbc34 Tidy SDNode::use_iterator, and complete the transition to have it
parallel its analogue, Value::value_use_iterator. The operator* method
now returns the user, rather than the use.

llvm-svn: 54127
2008-07-27 20:43:25 +00:00
Dan Gohman
2a0bc8f6e1 Rename isOnlyUseOf to isOnlyUserOf.
llvm-svn: 54124
2008-07-27 18:06:42 +00:00
Duncan Sands
545c21768f Some binary operations were being treated as
unary operations!  Add support for softening
some additional unary operations like fp_to_sint.

llvm-svn: 54122
2008-07-27 12:28:43 +00:00
Owen Anderson
25a3bf3f0e Fix the issues originally addressed in r54070. After thinking about it some more, I realized that the right thing to do
is to have StrongPHIElimination use its knowledge of the PHIs before they're erased to update the intervals appropriate.  This is
both simpler and more accurate than the alternative, which was having LIA figure it out when it renumbered things, plus it's just
the right thing to do!

llvm-svn: 54077
2008-07-25 23:38:08 +00:00
Owen Anderson
8f9ab550a2 Revert my previous patch. In retrospect, this is completely the wrong way to fix this problem.
llvm-svn: 54072
2008-07-25 23:06:59 +00:00
Owen Anderson
9408721750 Special cases are needed in renumbering when dealing with renumbering after a PHI has been removed. The interval previously defined
by the PHI needs to be extended to the beginning of its basic block, and the intervals that were inputs need to be trimmed to the end 
of their basic blocks.

llvm-svn: 54070
2008-07-25 22:32:01 +00:00
Owen Anderson
9e3ea5a60c In order to avoid reprocessing a register more than once, we need to add it
to the handled set so it will get filtered out in future iterations.

llvm-svn: 54065
2008-07-25 21:35:43 +00:00
Owen Anderson
987bd1dc5b Remove live interval entries for an interval if we're eliminating its only VN.
llvm-svn: 54062
2008-07-25 21:08:41 +00:00
Owen Anderson
fe97082ddd Properly remap live ranges whose end indices are the end of the function.
llvm-svn: 54061
2008-07-25 21:07:13 +00:00
Owen Anderson
cefa4df4c1 Make the remapping of interval indices (particularly ending indices) more robust.
This is tricky business, and will probably take a few more iterations to get
the last kinks out of it.

llvm-svn: 54043
2008-07-25 19:50:48 +00:00
Nate Begeman
5523d40e4b Disable mov{L, LP, HP, HLP, *DUP} shuffles for mmx
mmx needs its own fancy shuffle logic based on unpack; for now we get correct but awful code.

Also commit Mon Ping's VSETCC patch

llvm-svn: 54039
2008-07-25 19:05:58 +00:00
Nate Begeman
a6cdff50b0 Remove unnecessary implicit argument
llvm-svn: 54031
2008-07-25 17:56:27 +00:00
Nate Begeman
ce064348d9 Fix minor issues with VICmp/VFCmp constant expressions
llvm-svn: 54030
2008-07-25 17:35:37 +00:00
Nate Begeman
730880eec2 Fit in 80 cols
llvm-svn: 54029
2008-07-25 17:34:41 +00:00
Nate Begeman
8c76bda987 Allow verifier to be run on partially materialized modules.
llvm-svn: 54028
2008-07-25 17:28:23 +00:00
Nate Begeman
73efed7a4c Remove dead PatLeaf; there are a number of issues around MMX movl that need to be fixed.
llvm-svn: 54026
2008-07-25 17:25:04 +00:00
Nate Begeman
d340dc3fab Tab removal
llvm-svn: 54025
2008-07-25 17:24:13 +00:00
Dan Gohman
25c825ede1 Disable the new aggressive remat logic introduced in 54000; it causes some
regressions, such as PR2595. Also, there is a significant code-quality
issue in SPEC 464.h264ref and a few others.

llvm-svn: 54014
2008-07-25 15:08:37 +00:00
Mon P Wang
0fba42aefd When splitting a vector shuffle, fixed which type we used for the hi part
llvm-svn: 54007
2008-07-25 01:30:26 +00:00
Evan Cheng
d4eb684258 Teach ARM isLegalAddressingMode to handle unknown type without crashing. This fixes pr2589.
llvm-svn: 54004
2008-07-25 00:55:17 +00:00
Dan Gohman
68487f0859 Use AliasAnalysis::pointsToConstantMemory in SDISel to avoid unnecessary
dependencies with constant load nodes. This allows them to be scheduled
freely.

llvm-svn: 54001
2008-07-25 00:04:14 +00:00
Dan Gohman
680e1bd958 Enable rematerialization of constants using AliasAnalysis::pointsToConstantMemory,
and knowledge of PseudoSourceValues. This unfortunately isn't sufficient to allow
constants to be rematerialized in PIC mode -- the extra indirection is a
complication.

llvm-svn: 54000
2008-07-25 00:02:30 +00:00
Dan Gohman
1ecbcecdf3 Put the LICM of constant GlobalVariables, introduced in r53945, under a
command-line option, and disable it by default. It introduced performance
regressions because CodeGen is currently not able to remat such loads.

llvm-svn: 53997
2008-07-24 23:57:25 +00:00
Dan Gohman
41eaf577d6 Avoid emitting casts in static initializer contexts. This fixes
large numbers of CBE regressions caused by r53958.

llvm-svn: 53990
2008-07-24 17:57:48 +00:00
Owen Anderson
cb7fb7aa4a Store the predecessor MBB in the PHIUnion, rather than an index, since the indices will change after renumbering.
llvm-svn: 53985
2008-07-24 17:12:16 +00:00
Evan Cheng
9c8cac5fd7 Fix a catastrophic PPC64 ABI bug: i32 operands which are passed in memory (all of the parameter registers are used) are loaded from sp offsets that were off by 4.
llvm-svn: 53979
2008-07-24 08:17:07 +00:00
Devang Patel
fb1364b2b5 Create temp. file in current path.
llvm-svn: 53973
2008-07-24 00:35:38 +00:00
Evan Cheng
e91c8c4508 Rename instance variables, parameter argument names to eliminate a bunch of compilation warnings with -Wshadow.
llvm-svn: 53970
2008-07-24 00:08:56 +00:00
Owen Anderson
08961cbffe Enable the insertion of empty indices into LiveInterals, thereby making renumbering possible.
llvm-svn: 53961
2008-07-23 21:37:49 +00:00
Owen Anderson
58d9213c3a Fix a compile-time regression introduced by my heuristic-changing patch. I forgot
to multiply the instruction count by a constant factor in a few places, which
caused the register allocator to require many more iterations.

llvm-svn: 53959
2008-07-23 19:47:27 +00:00
Dan Gohman
8d04607133 Use C99 aggregate literal syntax for first-class struct and array values.
This fixes several recent CBE regressions.

llvm-svn: 53958
2008-07-23 18:41:03 +00:00
Bruno Cardoso Lopes
3b775c0d28 Minor fixes.
Added ConstantPool support.

llvm-svn: 53951
2008-07-23 16:01:50 +00:00
Chris Lattner
8eb899ecbc "Allow LICM to sink or lift loads from constant memory. Also add a test
case for this.

This allows instructions like loads from global variables declared to
be constant to be moved out of loops."

Patch by Stefanus Du Toit!

llvm-svn: 53945
2008-07-23 05:06:28 +00:00
Dan Gohman
7f0f329344 Update the generated .cvs files.
llvm-svn: 53943
2008-07-23 00:54:54 +00:00
Dan Gohman
6564581be0 Enable first-class aggregates support.
Remove the GetResultInst instruction. It is still accepted in LLVM assembly
and bitcode, where it is now auto-upgraded to ExtractValueInst. Also, remove
support for return instructions with multiple values. These are auto-upgraded
to use InsertValueInst instructions.

The IRBuilder still accepts multiple-value returns, and auto-upgrades them
to InsertValueInst instructions.

llvm-svn: 53941
2008-07-23 00:34:11 +00:00
Evan Cheng
20c9cdbe69 Fix PR2485: do all 4-element SSE shuffles in max. of 2 shuffle instructions.
Based on patch by Nicolas Capens.

llvm-svn: 53939
2008-07-23 00:22:17 +00:00
Duncan Sands
550e0de239 LegalizeTypes support for VSETCC. Fixes PR2575.
llvm-svn: 53938
2008-07-22 23:54:03 +00:00
Owen Anderson
7b8947cc31 Change the heuristics used in the coalescer, register allocator, and within
live intervals itself to use an instruction count approximation that is 
not affected by inserting empty indices.

llvm-svn: 53937
2008-07-22 22:46:49 +00:00
Evan Cheng
ff0bd19937 Factor out SSE 4 wide shuffle lowering code into its own function. No functionality changes.
llvm-svn: 53933
2008-07-22 21:13:36 +00:00
Evan Cheng
1aa928a8e6 Fix pr2566: incorrect assumption about bit_convert. It doesn't not have to output a vector value. Patch by Nicolas Capens!
llvm-svn: 53932
2008-07-22 20:42:56 +00:00
Devang Patel
4057e8691a While creating temp. file on disk, if the current filename points to a existing directory then create new temp. file inside the directory.
llvm-svn: 53929
2008-07-22 20:02:39 +00:00
Evan Cheng
901d469e05 Fix PR2574: implement v2f32 scalar_to_vector.
llvm-svn: 53927
2008-07-22 18:39:19 +00:00
Devang Patel
86c593ff1d Handle bitcode wrappers.
llvm-svn: 53924
2008-07-22 18:00:36 +00:00
Dan Gohman
727b49bc26 Make the GraphRoot edge look like a chain edge, which is more accurate,
and use the right result number, in the off chance that the graph root
has multiple result values.

llvm-svn: 53923
2008-07-22 17:52:59 +00:00
Anton Korobeynikov
af50b3159f Provide default implementation of different small-sections related stuff
llvm-svn: 53920
2008-07-22 17:09:59 +00:00
Anton Korobeynikov
090eca95ab Tie small stuff to non-small by default on ELF platforms
llvm-svn: 53919
2008-07-22 17:09:41 +00:00
Bruno Cardoso Lopes
a4a3546fec simplified small section logic
llvm-svn: 53912
2008-07-22 16:24:21 +00:00
Anton Korobeynikov
f13fbd6879 Fix encoding of atomic compare and swap for i64
llvm-svn: 53911
2008-07-22 16:22:48 +00:00
Bruno Cardoso Lopes
1253b2ac48 Added small section asm emition logic for mips.
Fixed small bug.

llvm-svn: 53908
2008-07-22 15:34:27 +00:00
Bruno Cardoso Lopes
96ab649026 Basic support for small sections
llvm-svn: 53907
2008-07-22 15:26:53 +00:00
Bill Wendling
5e6c729e8b Remove another tab.
llvm-svn: 53904
2008-07-22 08:54:38 +00:00
Bill Wendling
1b355889f6 More tab removals.
llvm-svn: 53903
2008-07-22 08:50:44 +00:00
Bill Wendling
87b1a0950c Another buildbot test commit.
llvm-svn: 53896
2008-07-22 00:53:37 +00:00
Dan Gohman
184839a58d Fix a typo in a comment.
llvm-svn: 53894
2008-07-22 00:52:04 +00:00
Dan Gohman
cb26a8abeb Fix multiple-return-value-to-first-class-aggregates autoupgrade to
correctly handle the case where multiple-return-value constructs
were used to return one or zero values.

llvm-svn: 53890
2008-07-22 00:36:48 +00:00
Bill Wendling
e0e8ecd5e9 Trivial check-in to test buildbot. No functionality change.
llvm-svn: 53889
2008-07-22 00:28:47 +00:00
Dan Gohman
183bd17a66 InsertValue and ExtractValue constant expressions are always
folded. Remove code that handled the case where they aren't
folded, and remove bitcode reader/writer support for them.

llvm-svn: 53887
2008-07-21 23:30:30 +00:00
Dan Gohman
e0ed9af577 Fix grammaros in comments.
llvm-svn: 53884
2008-07-21 22:38:59 +00:00
Dan Gohman
8f7b6c8113 Fix a bug in LSR's dead-PHI cleanup. If a PHI has a def-use chain that
leads into a cycle involving a different PHI, LSR got stuck running
around that cycle looking for the original PHI. To avoid this, keep
track of visited PHIs and stop searching if we see one more than once.
This fixes PR2570.

llvm-svn: 53879
2008-07-21 21:45:02 +00:00
Dan Gohman
b024b0eedd Enhance the GraphWriter support for edge destinations, and teach the
SelectionDAG graph writer to make use of them. Now, nodes with multiple
values are displayed as such, with incoming edges pointing to the
specific value they use.

llvm-svn: 53875
2008-07-21 21:06:55 +00:00
Dan Gohman
dd84251894 After early-lowering the FORMAL_ARGUMENTS node, delete it.
llvm-svn: 53874
2008-07-21 21:04:07 +00:00
Evan Cheng
a2bb31372d Eliminate a compilation warning.
llvm-svn: 53873
2008-07-21 20:02:45 +00:00
Dan Gohman
b91bef08a7 Add titles to the various SelectionDAG viewGraph calls
that include useful information like the name of the
block being viewed and the current phase of compilation.

llvm-svn: 53872
2008-07-21 20:00:07 +00:00
Dan Gohman
8a07776d39 Fix uses of underscore-capital names.
llvm-svn: 53870
2008-07-21 19:48:15 +00:00
Bruno Cardoso Lopes
e6a9345187 Added initial support for small sections on Mips.
Added gp_rel relocations to support addressing small section contents.
Added command line to specify small section threshold in bytes.

llvm-svn: 53869
2008-07-21 18:52:34 +00:00
Dan Gohman
8f718c75f0 Now that the MachineInstr leaks are fixed, enable leak checking
in the MachineInstr clone code.

llvm-svn: 53868
2008-07-21 18:47:29 +00:00
Anton Korobeynikov
78bab0e7f2 Use better variable names
llvm-svn: 53859
2008-07-21 18:29:23 +00:00
Anton Korobeynikov
3d4c55bb7a Don't use larger alignment.
llvm-svn: 53857
2008-07-21 18:25:17 +00:00
Duncan Sands
6e31474e71 Add VerifyNode, a place to put sanity checks on
generic SDNode's (nodes with their own constructors
should do sanity checking in the constructor).  Add
sanity checks for BUILD_VECTOR and fix all the places
that were producing bogus BUILD_VECTORs, as found by
"make check".  My favorite is the BUILD_VECTOR with
only two operands that was being used to build a
vector with four elements!

llvm-svn: 53850
2008-07-21 10:20:31 +00:00
Evan Cheng
ffd51ccf6b Use movaps instead of movups to spill 16-byte vector values when default alignment is >= 16. This fixes some massive performance regressions.
llvm-svn: 53844
2008-07-21 06:34:17 +00:00
Nick Lewycky
cc7b41c130 Revert r53812 -- premature. LegalizeTypes isn't actually on yet!
llvm-svn: 53816
2008-07-21 04:03:00 +00:00
Nick Lewycky
ea4a155439 Switch on the use of arbitrary precision integers in scalar evolution. This will
bail after 256-bits to avoid producing code that the backends can't handle.
Previously, we capped it at 64-bits, preferring to miscompile in those cases.

This change also reverts much of r52248 because the invariants the code was
expecting are now being met.

llvm-svn: 53812
2008-07-21 02:51:31 +00:00
Wojciech Matyjewicz
f9ef4917c9 This header isn't necessary now.
llvm-svn: 53811
2008-07-20 17:35:32 +00:00
Wojciech Matyjewicz
eea926ec20 Fix PR2088. Use modulo linear equation solver to compute loop iteration
count.

llvm-svn: 53810
2008-07-20 15:55:14 +00:00
Bill Wendling
98b6e63176 Fix for first part of PR2562. Generate the "pinsrw" instruction for inserts
into v4i16 vectors.

llvm-svn: 53807
2008-07-20 02:32:23 +00:00
Bill Wendling
73f5ecdbea Pull r53795 from Gaz into mainline:
If .loc and .file aren't used, always emit the "debug_line" section. This
requires at least one entry in the line matrix. So if there's nothing to emit
into the matrix, emit an end of matrix value anyway.

llvm-svn: 53803
2008-07-20 00:11:19 +00:00
Anton Korobeynikov
b49440f266 Unbreak build: 'DarwinTargetAsmInfo' was already taken as PPC TAI flavour.
llvm-svn: 53801
2008-07-19 21:44:57 +00:00
Duncan Sands
ad24fa3ff4 Make sure custom lowering for LegalizeTypes
returns a node with the right number of
return values.  This fixes codegen of
Generic/cast-fp.ll, Generic/fp_to_int.ll
and PowerPC/multiple-return-values.ll
when using -march=ppc32 -mattr=+64bit.

llvm-svn: 53794
2008-07-19 16:26:02 +00:00
Anton Korobeynikov
cab6b6d44d Use chars, where possible
llvm-svn: 53791
2008-07-19 13:16:32 +00:00
Anton Korobeynikov
099f340556 Switch MIPS to new ELFTargetAsmInfo. Add few FIXMEs.
llvm-svn: 53790
2008-07-19 13:16:11 +00:00
Anton Korobeynikov
449fb584e4 Fix a FIXME :)
llvm-svn: 53789
2008-07-19 13:15:46 +00:00
Anton Korobeynikov
5c0eb7e991 Use generic ELFTargetAsmInfo and DarwinTargetAsmInfo for X86 code
llvm-svn: 53788
2008-07-19 13:15:21 +00:00
Anton Korobeynikov
5298428cff Add TargetAsmInfo stuff for all darwin-based targets
llvm-svn: 53787
2008-07-19 13:14:46 +00:00
Anton Korobeynikov
3724600253 Add TargetAsmInfo for all ELF-based targets
llvm-svn: 53786
2008-07-19 13:14:11 +00:00
Anton Korobeynikov
6e00357dd6 Use aligned stack spills, where possible. This fixes PR2549.
llvm-svn: 53784
2008-07-19 06:30:51 +00:00
Evan Cheng
5ed6b9f0ae Fix a memory leak in LiveIntervalAnalysis.
llvm-svn: 53779
2008-07-19 00:37:25 +00:00
Duncan Sands
ef45c602b6 Softfloat support for FDIV. Patch by
Richard Pennington.

llvm-svn: 53773
2008-07-18 21:18:48 +00:00
Duncan Sands
39da9f4a43 Eliminate unused variable.
llvm-svn: 53772
2008-07-18 21:07:41 +00:00
Duncan Sands
b4646d7dbe Supress a gcc-4.3 warning.
llvm-svn: 53771
2008-07-18 21:06:02 +00:00
Duncan Sands
3d68e2ff9c Revert 53729, after waking up in the middle of
the night realising that it was wrong :)  I
think the reason the same type was being used
for the shufflevec of indices as for the actual
indices is so that if one of them needs splitting
then so does the other.  After my patch it might
be that the indices need splitting but not the
rest, yet there is no good way of handling that.
I think the right solution is to not have the
shufflevec be an operand at all: just have it
be the list of numbers it actually is, stored
as extra info in the node.

llvm-svn: 53768
2008-07-18 20:12:05 +00:00
Dan Gohman
b97c076af4 In the CBackend, use casts to force integer add, subtract, and
multiply to be done as unsigned, so that they have well defined
behavior on overflow. This fixes PR2408.

llvm-svn: 53767
2008-07-18 18:43:12 +00:00
Dan Gohman
e119f3db46 Fix a LocalSpiller leak. This fixes tramp3d-v4.
llvm-svn: 53766
2008-07-18 18:28:56 +00:00
Owen Anderson
8500aba55a Make PRE actually handle critical edges (by splitting them). Confirmed that bootstrap passes with this change.
llvm-svn: 53762
2008-07-18 18:03:38 +00:00
Owen Anderson
bba5ddaf0f Reapply r53735. My last patch fixed the failures Dan observed.
llvm-svn: 53761
2008-07-18 17:49:43 +00:00
Owen Anderson
736e4b3a3f Add some checks that got lost in the shuffle. This fixes 464.h264ref.
llvm-svn: 53760
2008-07-18 17:46:41 +00:00
Dan Gohman
4dc7526774 Revert r53735. It broke SPEC 464.h264ref.
llvm-svn: 53757
2008-07-18 16:44:49 +00:00
Chris Lattner
0429684d2d verify limits-fndefn.c from the GCC testsuite before the
heat death of the universe, fixing an O(N^2) problem in the
size of a basic block.

llvm-svn: 53749
2008-07-18 05:23:39 +00:00
Dan Gohman
f38f99ccc5 Re-introduce LeakDetector support for MachineInstrs and MachineBasicBlocks.
Fix a leak that this turned up in LowerSubregs.cpp.
And, comment a leak in LiveIntervalAnalysis.cpp.

llvm-svn: 53746
2008-07-17 23:49:46 +00:00
Dan Gohman
c666c01e65 When printing MemOperand nodes, only use print() for
PseudoSourceValue values, which never have names. Use getName()
for all other values, because we want to print just a short summary
of the value, not the entire instruction.

llvm-svn: 53738
2008-07-17 21:12:16 +00:00