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
Owen Anderson
8e971c22fd
Use MergeBlockIntoPredecessor to simplify some code.
...
llvm-svn: 53735
2008-07-17 20:00:46 +00:00
Evan Cheng
d26080487b
Subreg live interval valno may not have a corresponding def machineinstr since it's less precise.
...
llvm-svn: 53734
2008-07-17 19:48:53 +00:00
Owen Anderson
cb787a2004
Make MergeBlockIntoPredecessor more aggressive when the same successor appears
...
more than once.
llvm-svn: 53731
2008-07-17 19:42:29 +00:00
Owen Anderson
5524271234
Enable PRE. My last batch of changes fixed the miscompile.
...
llvm-svn: 53730
2008-07-17 19:41:00 +00:00
Duncan Sands
08ea7c0351
Use a legal type for elements of the vector_shuffle
...
mask. These are just indices into the shuffled vector
so their type is unrelated to the type of the
shuffled elements (which is what was being used before).
This fixes vec_shuffle-11.ll when using LegalizeTypes.
What seems to have happened is that Dan's recent change
r53687, which corrected the result type of the shuffle,
somehow caused LegalizeTypes to notice that the mask
operand was a BUILD_VECTOR with a legal type but elements
of an illegal type (i64). LegalizeTypes legalized this
by introducing a new BUILD_VECTOR of i32 and bitcasting
it to the old type. But the mask operand is not supposed
to be a bitcast but a straight BUILD_VECTOR of constants,
causing a crash.
llvm-svn: 53729
2008-07-17 19:28:41 +00:00
Dan Gohman
8981962672
Add a new function, ReplaceAllUsesOfValuesWith, which handles bulk
...
replacement of multiple values. This is slightly more efficient
than doing multiple ReplaceAllUsesOfValueWith calls, and theoretically
could be optimized even further. However, an important property of this
new function is that it handles the case where the source value set and
destination value set overlap. This makes it feasible for isel to use
SelectNodeTo in many very common cases, which is advantageous because
SelectNodeTo avoids a temporary node and it doesn't require CSEMap
updates for users of values that don't change position.
Revamp MorphNodeTo, which is what does all the work of SelectNodeTo, to
handle operand lists more efficiently, and to correctly handle a number
of corner cases to which its new wider use exposes it.
This commit also includes a change to the encoding of post-isel opcodes
in SDNodes; now instead of being sandwiched between the target-independent
pre-isel opcodes and the target-dependent pre-isel opcodes, post-isel
opcodes are now represented as negative values. This makes it possible
to test if an opcode is pre-isel or post-isel without having to know
the size of the current target's post-isel instruction set.
These changes speed up llc overall by 3% and reduce memory usage by 10%
on the InstructionCombining.cpp testcase with -fast and -regalloc=local.
llvm-svn: 53728
2008-07-17 19:10:17 +00:00
Duncan Sands
c3331602f9
LegalizeTypes support for what seems to be the
...
only missing ppc long double operations: FNEG
and FP_EXTEND.
llvm-svn: 53723
2008-07-17 17:35:14 +00:00
Nate Begeman
64f8f7f6bb
Remove unnecessary readme entry
...
llvm-svn: 53722
2008-07-17 17:21:14 +00:00
Duncan Sands
778e45e748
Turn LegalizeTypes back off again for the moment:
...
it is breaking Darwin bootstrap due to missing
functionality.
llvm-svn: 53721
2008-07-17 17:06:03 +00:00
Nate Begeman
61f6c21028
Fix a typo in last commit
...
llvm-svn: 53720
2008-07-17 17:04:58 +00:00
Nate Begeman
af01bfff99
SSE codegen for vsetcc nodes
...
llvm-svn: 53719
2008-07-17 16:51:19 +00:00
Matthijs Kooijman
5ec5e264e4
Make GlobalOpt preserve address spaces when scalar replacing aggregate globals.
...
llvm-svn: 53716
2008-07-17 11:59:53 +00:00
Chris Lattner
eccd57d118
Fix PR2553
...
llvm-svn: 53715
2008-07-17 06:07:20 +00:00
Mon P Wang
57cd9d6e5a
When lowering certain atomics, we need to copy the memoperand from the old
...
atomic operation to the new one.
llvm-svn: 53714
2008-07-17 04:54:06 +00:00
Duncan Sands
41aeb22c1d
Factorize some code for determining which libcall to use.
...
llvm-svn: 53713
2008-07-17 02:36:29 +00:00
Evan Cheng
a7598b31ee
Inliner tweak. Function calls should cost more than one instruction!
...
llvm-svn: 53712
2008-07-17 01:31:49 +00:00
Owen Anderson
7fb36c8bba
Factor MergeBlockIntoPredecessor out into BasicBlockUtils.
...
llvm-svn: 53705
2008-07-17 00:01:40 +00:00
Devang Patel
a6c5ff690a
Mark function used by asm block as used, otherwise optimizer may not see the use and may delete the function.
...
llvm-svn: 53692
2008-07-16 17:54:34 +00:00
Owen Anderson
f91aa3b22f
There's no need to iterate block merging and PRE. In fact, iterating the latter
...
could cause problems for memdep when it breaks critical edges.
llvm-svn: 53691
2008-07-16 17:52:31 +00:00
Scott Michel
ba160e6396
Somehow, custom lowering of i64 multiplications got dropped along the way.
...
llvm-svn: 53689
2008-07-16 17:17:29 +00:00
Dan Gohman
4c8c8e3aad
Fix the result type of X86's truncate to i8.
...
llvm-svn: 53688
2008-07-16 16:20:48 +00:00
Dan Gohman
0025513482
Fix the result type of a VECTOR_SHUFFLE+BIT_CONVERT dagcombine. This
...
was turned up by some new SelectionDAG assertion checks that I'm
working on.
llvm-svn: 53687
2008-07-16 16:13:58 +00:00
Duncan Sands
3448d4087f
Add support for promoting and expanding AssertZext
...
and AssertSext. Needed when passing huge integer
parameters with the zeroext or signext attributes.
llvm-svn: 53684
2008-07-16 16:03:07 +00:00
Dan Gohman
2638ec5b4c
Fix a comment to say nonnegative instead of positive.
...
llvm-svn: 53681
2008-07-16 15:57:10 +00:00
Dan Gohman
bc29205ccc
Add an assert to check for empty flags for MachineMemOperand.
...
llvm-svn: 53680
2008-07-16 15:56:42 +00:00
Matthijs Kooijman
ceee0ddd1b
Redo InstCombiner::visitExtractValueInst. Instead of using the (complicate)
...
FindInsertedValue, it now performs a number of simple transformations that
should result in the same effect when applied iteratively.
llvm-svn: 53673
2008-07-16 12:55:45 +00:00
Duncan Sands
b753d27377
Reorder methods alphabetically. No functionality change.
...
While this is not a wonderful organizing principle, it
does make it easy to find routines, and clear where to
insert new ones.
llvm-svn: 53672
2008-07-16 11:41:33 +00:00
Duncan Sands
b2e1ddbd0b
Turn on LegalizeTypes by default.
...
llvm-svn: 53671
2008-07-16 11:36:51 +00:00
Matthijs Kooijman
96d9bcbdf6
Don't use ++idx_begin when I actually mean idx_begin + 1, especially since we
...
also use *idx_begin in the same expression, giving unpredictable results.
This fixes this bug: http://lists.cs.uiuc.edu/pipermail/llvmdev/2008-July/015877.html
llvm-svn: 53670
2008-07-16 10:47:35 +00:00
Evan Cheng
7218339189
Fix PR2296. Do not transform x86_sse2_storel_dq into a full-width store.
...
llvm-svn: 53666
2008-07-16 07:28:14 +00:00
Evan Cheng
face16f9d8
x86-64 PIC JIT fixes: do not generate the extra load for external GV's.
...
llvm-svn: 53661
2008-07-16 01:34:02 +00:00
Evan Cheng
cabfd3f78c
X86-64 PIC jump table values are different from x86-32 cases, they are dest - table base.
...
llvm-svn: 53660
2008-07-16 01:33:08 +00:00
Dan Gohman
8cf62e122f
TargetAsmInfo::SectionForGlobal showed up in a profile. Simplify it a little.
...
llvm-svn: 53639
2008-07-15 18:37:51 +00:00
Dan Gohman
c4400b8618
SelectionDAG::AssignNodeIds is unused.
...
llvm-svn: 53636
2008-07-15 18:29:32 +00:00
Dan Gohman
c9b72806d7
Don't sort SDNodes by their addresses in SelectionDAG::dump. Instead,
...
just use the AllNodes order, which is at least relatively stable
across runs.
llvm-svn: 53632
2008-07-15 18:18:54 +00:00
Owen Anderson
e12f7904ff
Revert this, as it seems to still be broken.
...
llvm-svn: 53627
2008-07-15 17:59:02 +00:00
Owen Anderson
73bdb28e89
Enable local PRE by default.
...
llvm-svn: 53616
2008-07-15 16:28:23 +00:00
Owen Anderson
f1b3898e7f
Have GVN do a pre-pass over the CFG that folds away unconditional branches where possible. This allows local PRE to be more aggressive.
...
llvm-svn: 53615
2008-07-15 16:28:06 +00:00
Duncan Sands
7ca2df2319
LegalizeTypes support for fabs on ppc long double.
...
llvm-svn: 53613
2008-07-15 15:02:44 +00:00
Matthijs Kooijman
f9532fe71b
Allow deadargelim to change return types even though now values were dead. This
...
again canonicalizes {i32} into i32 and {} into void.
llvm-svn: 53610
2008-07-15 14:42:31 +00:00
Matthijs Kooijman
18c6979fed
Revert r53606. It turns out that explicitely tracking the liveness of the
...
return value as a whole in deadargelim is really not needed now that we simply
rebuild the old return value and actually prevents some canonicalization from
taking place.
This revert stops deadargelim from changing {i32} into i32 for now, but I'll
fix that next.
llvm-svn: 53609
2008-07-15 14:39:36 +00:00
Matthijs Kooijman
f940585c1c
Make deadargelim a bit less smart, so it doesn't choke on nested structs as
...
return values that are still (partially) live. Instead of updating all uses of
a call instruction after removing some elements, it now just rebuilds the
original struct (With undef gaps where the unused values were) and leaves it to
instcombine to clean this up.
The added testcase still fails currently, but this is due to instcombine which
isn't good enough yet. I will fix that part next.
llvm-svn: 53608
2008-07-15 14:03:10 +00:00
Matthijs Kooijman
50a2233b45
Don't use isa when we can reuse a previous dyn_cast.
...
llvm-svn: 53607
2008-07-15 13:39:08 +00:00
Matthijs Kooijman
4b75601340
Make DeadArgElim keep liveness of the return value as a whole in addition to
...
only the liveness of partial return values (for functions returning a struct).
This is more explicit to prevent unwanted changes in the return value.
In particular, deadargelim now canonicalizes a function returning {i32} to
returning i32 and {} to void, if the struct returned is not used in its
entirety, but only the single element is used.
llvm-svn: 53606
2008-07-15 13:36:06 +00:00
Duncan Sands
58eb5e35da
LegalizeTypes support for promotion of bswap.
...
In LegalizeDAG the value is zero-extended to
the new type before byte swapping. It doesn't
matter how the extension is done since the new
bits are shifted off anyway after the swap, so
extend by any old rubbish bits. This results
in the final assembler for the testcase being
one line shorter.
llvm-svn: 53604
2008-07-15 10:18:22 +00:00
Duncan Sands
710be60c23
LegalizeTypes support for promotion of SIGN_EXTEND_INREG.
...
llvm-svn: 53603
2008-07-15 10:14:24 +00:00
Duncan Sands
d2097e5b92
Reorder the integer promotion methods alphabetically.
...
No change in functionality.
llvm-svn: 53602
2008-07-15 10:12:34 +00:00
Matthijs Kooijman
86a46174fe
Let DAE keep a list of live functions, instead of simply marking all arguments
...
and return values live for those functions. This doesn't change anything yet,
but prepares for the coming commits.
llvm-svn: 53601
2008-07-15 09:11:16 +00:00
Matthijs Kooijman
caa3ed0c99
Split DAE::MarkLive into MarkLive and PropagateLiveness.
...
llvm-svn: 53600
2008-07-15 09:00:17 +00:00
Matthijs Kooijman
31b7208f7d
Pass around const RetOrArg references instead of copying values. Also, mark
...
RetOrArg::getDescription() as const.
llvm-svn: 53599
2008-07-15 08:56:49 +00:00
Matthijs Kooijman
937016427b
Simplify debug code by using RetOrArg::getDescription().
...
llvm-svn: 53598
2008-07-15 08:53:36 +00:00
Matthijs Kooijman
c9c8644910
Fix indentation (intentionally left out of the previous commit).
...
llvm-svn: 53592
2008-07-15 08:47:32 +00:00
Matthijs Kooijman
52acc10fdc
Move the deadargelim code for intrinsically alive functions into its own
...
method, to slightly simplify control flow.
llvm-svn: 53591
2008-07-15 08:45:12 +00:00
Mon P Wang
834c054b1d
Fixed potential bug if the source and target of a bit convert have different alignment
...
llvm-svn: 53590
2008-07-15 05:28:34 +00:00
Nick Lewycky
0d582485f9
Correct this inversion!
...
I swear that didn't show up in svn diff...
llvm-svn: 53587
2008-07-15 03:47:44 +00:00
Nick Lewycky
ac8e34e574
Fix up comments.
...
llvm-svn: 53586
2008-07-15 03:40:27 +00:00
Bruno Cardoso Lopes
0c154df07f
Fixed call stack alignment. Improved AsmPrinter alignment issues.
...
llvm-svn: 53585
2008-07-15 02:03:36 +00:00
Dan Gohman
e76fd33ee5
Reapply 53476 and 53480, with a fix so that it properly updates
...
the BB member to the current basic block after emitting
instructions.
llvm-svn: 53567
2008-07-14 18:19:29 +00:00
Dan Gohman
8280b2e66e
Fix uninitialized use of the Changed variable.
...
llvm-svn: 53564
2008-07-14 17:55:01 +00:00
Dan Gohman
7b61b66334
Improve debug output for MemOperandSDNode. PseudoSourceValue nodes
...
don't have value names, so use print instead of getName() to get a
useful string.
llvm-svn: 53563
2008-07-14 17:51:24 +00:00
Dan Gohman
bf764c6a4c
Fix edito in the PseudoSourceValue name list.
...
llvm-svn: 53562
2008-07-14 17:45:47 +00:00
Duncan Sands
ef690bbffe
I don't think BUILD_PAIR can have a vector result.
...
Remove support for this.
llvm-svn: 53559
2008-07-14 17:34:19 +00:00
Duncan Sands
bb3251e1f4
Tighten up some checks. Fix FPOWI splitting for
...
non-power-of-two vectors.
llvm-svn: 53558
2008-07-14 17:33:37 +00:00
Chris Lattner
8a9725bffe
Reapply r53540, now with the matching header!
...
llvm-svn: 53557
2008-07-14 17:32:59 +00:00
Duncan Sands
134155a263
An INSERT_VECTOR_ELT can insert a larger value
...
than the vector element type. Don't forget to
handle this when the insertion index is not a
constant.
llvm-svn: 53556
2008-07-14 17:32:02 +00:00
Duncan Sands
5a4bab9849
According to the docs, it is possible to have an
...
extending load of a vector. Handle this case when
splitting vector loads. I'm not completely sure
what is supposed to happen, but I think it means
hi should be set to undef. LegalizeDAG does not
consider this case.
llvm-svn: 53555
2008-07-14 17:27:46 +00:00
Duncan Sands
fd63c72205
There should be no extending loads or truncating
...
stores of one-element vectors. Also, neaten the
handling of INSERT_VECTOR_ELT when the inserted
type is larger than the vector element type.
llvm-svn: 53554
2008-07-14 17:22:31 +00:00
Duncan Sands
a9d2c2042e
Ignore TargetConstant with an illegal type. These
...
are used for passing huge immediates in inline ASM
from the front-end straight down to the ASM writer.
Of course this is a hack, but it is simple, limited
in scope, works in practice, and is what LegalizeDAG
does.
llvm-svn: 53553
2008-07-14 17:15:45 +00:00
Bruno Cardoso Lopes
f5a55301e0
Added Subtarget support into RegisterInfo
...
Added HasABICall and HasAbsoluteCall (equivalent to gcc -mabicall and
-mno-shared). HasAbsoluteCall is not implemented but HasABICall is the
default for o32 ABI. Now, both should help into a more accurate
relocation types implementation.
Added IsLinux is needed to choose between asm directives.
Instruction name strings cleanup.
AsmPrinter improved.
llvm-svn: 53551
2008-07-14 14:42:54 +00:00
Duncan Sands
63940a7330
Revert r53540 - it does not compile.
...
llvm-svn: 53549
2008-07-14 07:59:28 +00:00
Chris Lattner
ef7178406b
Reimplement LinkFunctionProtos in terms of GetLinkageResult. This fixes
...
the second half of link-global-to-func.ll and causes some minor changes in
messages.
There are two TODOs here. First, this causes a regression in
2008-07-06-AliasWeakDest.ll, which is now failing (so I xfailed it). Anton,
I would really appreciate it if you could take a look at this. It should be
a matter of adding proper alias support to GetLinkageResult, and was probably
already a latent bug that would manifest with globals.
The second todo is to reimplement LinkAlias in the same pattern as
function and global linking. This should be pretty straight-forward for
someone who knows aliases, but isn't a requirement for correctness.
llvm-svn: 53548
2008-07-14 07:23:24 +00:00
Chris Lattner
0b95d5f57d
don't do any linkage, not even type resolution, of symbols that have
...
internal linkage.
llvm-svn: 53547
2008-07-14 06:52:19 +00:00
Chris Lattner
d31cacb5d6
implement linking of globals to functions, in one direction
...
(replacing a function with a global). This is needed when building
llvm itself with LTO on darwin, because of the EXPLICIT_SYMBOL hack
in lib/system/DynamicLibrary.cpp.
Implementation of linking the other way will need to wait for a
cleanup of LinkFunctionProtos.
llvm-svn: 53546
2008-07-14 06:49:45 +00:00
Chris Lattner
c68c953e71
wrap long lines, remove some code from a non-assert build.
...
llvm-svn: 53545
2008-07-14 05:52:33 +00:00
Chris Lattner
b786d147c9
Fix a bunch of bugs handling vector compare constant expressions, fixing
...
PR2317.
llvm-svn: 53544
2008-07-14 05:17:31 +00:00
Chris Lattner
accde0a86b
Document and fix Constant::getVectorElements to return an empty vector
...
when presented with a constant expr.
If ConstantExpr::getV[IF]Cmp to work when ConstantFoldCompareInstruction
returns an undef or constant expr.
llvm-svn: 53541
2008-07-14 05:10:41 +00:00
Chris Lattner
6841e1dc33
If a function calls setjmp, never inline it into other functions. This is
...
a hack around the fact that we don't represent the CFG correctly for sj/lj.
It fixes PR2486.
llvm-svn: 53540
2008-07-14 00:46:56 +00:00
Chris Lattner
f8e9922213
simplify some code, shuffle and insertelt always return a vector.
...
llvm-svn: 53538
2008-07-14 00:32:20 +00:00
Chris Lattner
15ae951af5
Add a note.
...
llvm-svn: 53535
2008-07-14 00:19:59 +00:00
Chris Lattner
14faada3a3
Fix PR2506 by being a bit more careful about reverse fact propagation when
...
disproving a condition. This actually compiles the existing testcase
(udiv_select_to_select_shift) to:
define i64 @test(i64 %X, i1 %Cond) {
entry:
%divisor1.t = lshr i64 %X, 3 ; <i64> [#uses=1]
%quotient2 = lshr i64 %X, 3 ; <i64> [#uses=1]
%sum = add i64 %divisor1.t, %quotient2 ; <i64> [#uses=1]
ret i64 %sum
}
instead of:
define i64 @test(i64 %X, i1 %Cond) {
entry:
%quotient1.v = select i1 %Cond, i64 3, i64 4 ; <i64> [#uses=1]
%quotient1 = lshr i64 %X, %quotient1.v ; <i64> [#uses=1]
%quotient2 = lshr i64 %X, 3 ; <i64> [#uses=1]
%sum = add i64 %quotient1, %quotient2 ; <i64> [#uses=1]
ret i64 %sum
}
llvm-svn: 53534
2008-07-14 00:15:52 +00:00
Chris Lattner
3444f4d4c4
Fix mishandling of the infinite loop case when merging two blocks. This
...
fixes PR2540.
llvm-svn: 53533
2008-07-13 22:23:11 +00:00
Chris Lattner
7cb257551f
more refactoring. Use early exits instead of really complex logic.
...
No functionality change.
llvm-svn: 53532
2008-07-13 22:04:41 +00:00
Chris Lattner
a4a80e0092
improve comments.
...
llvm-svn: 53531
2008-07-13 21:55:46 +00:00
Chris Lattner
824fbca1ee
factor another large hunk of code out into its own function.
...
No functionality change.
llvm-svn: 53530
2008-07-13 21:53:26 +00:00
Chris Lattner
67bf4acd15
Final bit of simplification for FoldBranchToCommonDest.
...
llvm-svn: 53528
2008-07-13 21:20:19 +00:00
Chris Lattner
3346d311c7
simplify logic a bit
...
llvm-svn: 53527
2008-07-13 21:15:11 +00:00
Chris Lattner
2ac1854097
Refactor some code out into its own helper function, getting rid of crazy multiline
...
conditionals and commenting the code better.
No functionality change.
llvm-svn: 53526
2008-07-13 21:12:01 +00:00
Nick Lewycky
df9e9f0b0e
Stop creating extraneous smax/umax in SCEV. This removes a regression where we
...
started complicating many loops ('for' loops, in fact).
llvm-svn: 53508
2008-07-12 07:41:32 +00:00
Nick Lewycky
3fb5816774
Enhance analysis of srem.
...
Remove dead code analyzing urem. 'urem' of power-of-2 is canonicalized to an
'and' instruction.
llvm-svn: 53506
2008-07-12 05:04:38 +00:00
Evan Cheng
c69b53dff9
Implement llvm.atomic.cmp.swap.i32 on PPC. Patch by Gary Benson!
...
llvm-svn: 53505
2008-07-12 02:23:19 +00:00
Evan Cheng
7457283357
Typos.
...
llvm-svn: 53504
2008-07-12 02:22:07 +00:00
Evan Cheng
05e5317cab
Fix PR2536: a nasty spiller bug. If a two-address instruction uses a register but the use portion of its live range is not part of its liveinterval, it must be defined by an implicit_def. In that case, do not spill the use. e.g.
...
8 %reg1024<def> = IMPLICIT_DEF
12 %reg1024<def> = INSERT_SUBREG %reg1024<kill>, %reg1025, 2
The live range [12, 14) are not part of the r1024 live interval since it's defined by an implicit def. It will not conflicts with live interval of r1025. Now suppose both registers are spilled, you can easily see a situation where both registers are reloaded before the INSERT_SUBREG and both target registers that would overlap.
llvm-svn: 53503
2008-07-12 01:56:02 +00:00
Evan Cheng
ebf7ff4531
Back out 53476 and 53480 for now. Somehow they cause llc to miscompile 179.art.
...
llvm-svn: 53502
2008-07-12 01:38:51 +00:00
Dan Gohman
bf47a27643
Add a utility function to MachineInstr for testing whether an instruction
...
has exactly one MachineMemOperand, and change some X86 lowering code to
make use of it.
llvm-svn: 53498
2008-07-12 00:10:52 +00:00
Dan Gohman
fee8b04935
Fix spelling of "hierarchy" in comments.
...
llvm-svn: 53489
2008-07-11 22:51:32 +00:00
Dan Gohman
4c18394001
Include a frame index in the "fixed stack" pseudo source value
...
instead of using the frame index for the SVOffset, which was
inconsistent.
llvm-svn: 53486
2008-07-11 22:44:52 +00:00
Dan Gohman
b21183f645
Fix an obsolete top-level comment.
...
llvm-svn: 53481
2008-07-11 22:39:58 +00:00
Dan Gohman
3b91ef27b5
Factor out debugging code into the common base class.
...
llvm-svn: 53480
2008-07-11 22:36:22 +00:00
Dan Gohman
6ee2195ab1
Add support for putting NamedRegionTimers in TimerGroups, and
...
use a timer group for the timers in SelectionDAGISel. Also,
Split scheduling out from emitting, to give each their own
timer.
llvm-svn: 53476
2008-07-11 21:54:34 +00:00
Dan Gohman
d1342570f2
Use find instead of lower_bound.
...
llvm-svn: 53474
2008-07-11 20:58:19 +00:00
Chris Lattner
4f20448c91
add support for returning i128, PR2532.
...
llvm-svn: 53472
2008-07-11 20:53:00 +00:00
Dan Gohman
d7a32ecde2
Trim unnecessary #includes.
...
llvm-svn: 53471
2008-07-11 20:38:31 +00:00
Owen Anderson
cc861329ee
Don't call lookupNumber more than we have to.
...
llvm-svn: 53470
2008-07-11 20:05:13 +00:00
Duncan Sands
eb04d356e3
Remove an apparently useless routine: there should
...
be no need to split the result of a vector RET node,
since they are always already legal.
llvm-svn: 53462
2008-07-11 17:02:09 +00:00
Duncan Sands
1e3fe05638
It is pointless to turn a UINT_TO_FP into an
...
SINT_TO_FP libcall plus additional operations:
it might as well be a direct UINT_TO_FP libcall.
So only turn it into an SINT_TO_FP if the target
has special handling for SINT_TO_FP.
llvm-svn: 53461
2008-07-11 17:00:14 +00:00
Duncan Sands
58130a26f4
Add two missing SINT_TO_FP libcalls.
...
llvm-svn: 53460
2008-07-11 16:57:02 +00:00
Duncan Sands
52f1dbf139
Port a shift-by-1 optimization from LegalizeDAG: it
...
was presumably added after the rest of the code was
copied to LegalizeTypes.
llvm-svn: 53459
2008-07-11 16:54:57 +00:00
Duncan Sands
669d4d6909
Add support for 128 bit shifts and 32 bit shifts
...
on 16 bit machines.
llvm-svn: 53458
2008-07-11 16:52:29 +00:00
Nick Lewycky
cafc3d583d
Document 'mask' in this calculation.
...
llvm-svn: 53454
2008-07-11 08:16:26 +00:00
Duncan Sands
94f659d6cb
Align comments, colons and cases. Remove trailing
...
whitespace.
llvm-svn: 53453
2008-07-11 07:37:30 +00:00
Nick Lewycky
12c88a28f5
Remove misleading constant from comment.
...
llvm-svn: 53452
2008-07-11 07:36:19 +00:00
Nick Lewycky
8cd0f2058e
Add another optimization from PR2330. Also catch some missing cases that are
...
similar.
llvm-svn: 53451
2008-07-11 07:20:53 +00:00
Bill Wendling
9f17caa9a9
The frame address on an x86-64 box needs to be offset by -8, not -4.
...
llvm-svn: 53450
2008-07-11 07:18:52 +00:00
Chris Lattner
07bfade2d4
a missed optimization that Eli spotted
...
llvm-svn: 53449
2008-07-11 06:40:29 +00:00
Chris Lattner
34b0895d4d
another bug in the same line.
...
llvm-svn: 53448
2008-07-11 06:38:16 +00:00
Chris Lattner
3cdb6789b9
fix a bug spotted by Eli's eagle eyes
...
llvm-svn: 53447
2008-07-11 06:36:01 +00:00
Chris Lattner
3d40848bfd
simplify and merge a bunch of code. Instead of comparing against
...
the min/max values for an integer type, compare against the min/max
values we can prove contain the input. This might be a tighter bound,
so this is general goodness.
llvm-svn: 53446
2008-07-11 05:40:05 +00:00
Chris Lattner
d1198896ae
fold away (x <= cst) earlier, allowing us to not have to
...
handle them in some code.
llvm-svn: 53445
2008-07-11 05:08:55 +00:00
Chris Lattner
16b8ae98c1
Fix folding of icmp's of i1 where the comparison is signed. The code
...
was using the algorithm for folding unsigned comparisons which is
completely wrong. This has been broken since the signless types change.
llvm-svn: 53444
2008-07-11 04:20:58 +00:00
Chris Lattner
f3f6b6d7af
Fix a bogus optimization: folding (slt (zext i1 A to i32), 1) -> (slt i1 A, true)
...
This cause a regression in InstCombine/JavaCompare, which was doing the right
thing on accident. To handle the missed case, generalize the comparisons based
on masked bits a little bit to handle comparisons against the max value. For
example, we can now xform (slt i32 (and X, 4), 4) -> (setne i32 (and X, 4), 4)
llvm-svn: 53443
2008-07-11 04:09:09 +00:00
Chris Lattner
20b1bde882
regenerate
...
llvm-svn: 53440
2008-07-11 00:30:39 +00:00
Chris Lattner
9dff6fbe58
Implement PR2538
...
llvm-svn: 53438
2008-07-11 00:30:06 +00:00
Chris Lattner
78d60a220b
Fix a bug in the soft-float handling of FCOPYSIGN that Duncan noticed
...
when working on legalizetypes. Both legalizetypes and legalizeops now
produce hte same code for CodeGen/ARM/fcopysign.ll.
llvm-svn: 53435
2008-07-10 23:46:13 +00:00
Chris Lattner
5e784a8ebd
make legalize types be a command line option: -enable-legalize-types.
...
llvm-svn: 53434
2008-07-10 23:37:50 +00:00
Dan Gohman
1f42b96c7e
Make stack slot coloring's debug output more consistent with
...
other passes.
llvm-svn: 53415
2008-07-10 19:49:32 +00:00
Evan Cheng
d7023b66ea
Change StackSlotForVirtReg (which maps vregs to frame indices) from std::map to IndexedMap.
...
llvm-svn: 53414
2008-07-10 18:23:23 +00:00
Chris Lattner
b5d45a49ea
Remove extraneous vertical whitespace before Eric gets the wrong idea ;-)
...
llvm-svn: 53411
2008-07-10 16:49:53 +00:00
Chris Lattner
5f3c587276
Fix an altivec constant miscompilation that Duncan found through
...
his work on legalizetypes.
llvm-svn: 53410
2008-07-10 16:33:38 +00:00
Duncan Sands
a6c09579f0
Add support for 128 bit multiplicative operations.
...
Lack of these caused a bootstrap failure with Fortran
on x86-64 with LegalizeTypes turned on. While there,
be nice to 16 bit machines and support expansion of
i32 too.
llvm-svn: 53408
2008-07-10 15:35:05 +00:00
Duncan Sands
90a916539d
Add a mysteriously missing libcall, FPTOSINT_F80_I32.
...
Be nice to 16 bit machines by supporting FP_TO_XINT
expansion for these.
llvm-svn: 53407
2008-07-10 15:33:02 +00:00
Duncan Sands
91912e046a
Fix a FIXME: use an apint in CTTZ legalization.
...
llvm-svn: 53406
2008-07-10 15:30:54 +00:00
Duncan Sands
f2734eabf2
Remove PromoteIntRes_FP_ROUND - not sure what it
...
was doing there: FP_ROUND returns a float, not an
integer.
llvm-svn: 53405
2008-07-10 15:29:55 +00:00
Duncan Sands
16f5ab06b0
Make sure the alignment of the temporary created
...
in CreateStackStoreLoad is good enough for both
the source and destination types.
llvm-svn: 53404
2008-07-10 15:26:17 +00:00
Duncan Sands
a219bb03e1
Make the LegalizeType method naming scheme more regular.
...
llvm-svn: 53403
2008-07-10 15:25:04 +00:00
Duncan Sands
8afe39dc56
Don't barf when dumping a constant that contains
...
a ginormous value (eg: i128 -1).
llvm-svn: 53402
2008-07-10 11:23:14 +00:00
Matthijs Kooijman
ca5124a630
Restructure dead argument elimination, try #3 :-)
...
Rewrite the DeadArgumentElimination pass, to use a more explicit tracking of
dependencies between return values and/or arguments. Also make the handling of
arguments and return values the same.
The pass now looks properly inside returned structs, but only at the first
level (ie, not inside nested structs).
This version fixed a few more bugs and was cleaned up a bit. It now passes all
of LLVM's testing, and should still pass SPEC2006. There is still a minor bug
with regard to returning nested structs. Since there is currently nothing that
emits such IR, I will fix that in a seperate commit (partly because it requires
a non-trivial fix).
llvm-svn: 53400
2008-07-10 10:24:08 +00:00
Evan Cheng
3ec3113431
- Change the horrible N^2 isRegReDefinedByTwoAddr. Now callers must supply the operand index of def machineoperand and at most one full scan of non-implicit operands is needed.
...
- Change local register allocator to use the new isRegReDefinedByTwoAddr instead of reinventing the wheel.
llvm-svn: 53394
2008-07-10 07:35:43 +00:00
Nick Lewycky
26ccb8e9a8
Fix overzealous optimization. Thanks to Duncan Sands for pointing out my error!
...
llvm-svn: 53393
2008-07-10 05:51:40 +00:00
Owen Anderson
65e43ae1e8
Use DenseMap instead of std::map in local register allocation. This improves the time on instcombine from .31s to .22s
...
llvm-svn: 53390
2008-07-10 01:56:35 +00:00
Owen Anderson
189609bb36
Fix 403.gcc. Finally got the check for two-address-ness correct.
...
llvm-svn: 53389
2008-07-10 01:53:01 +00:00
Owen Anderson
bb9849b7b6
Fix the build by adding a #include.
...
llvm-svn: 53388
2008-07-10 01:44:27 +00:00
Chris Lattner
6d7c5fa8dc
The source and dest of an alias are *not* required to have the same type,
...
though that would be nice and make sense :). Patch by Nathan Keynes!
llvm-svn: 53387
2008-07-10 01:09:33 +00:00
Evan Cheng
02a618dc56
Fix for PR2472. Use movss to set lower 32-bits of a zero XMM vector.
...
llvm-svn: 53386
2008-07-10 01:08:23 +00:00
Chris Lattner
5e57a12a80
open plugins with RTLD_GLOBAL, pointed out by Bram Adams.
...
llvm-svn: 53385
2008-07-10 00:52:20 +00:00
Chris Lattner
7797bfa0fd
SImplify ConstantVector::get a bit and make it turn a vector
...
of all undefs into a single undef value.
llvm-svn: 53384
2008-07-10 00:44:03 +00:00
Chris Lattner
563d2c9fac
Fix a case where vector comparison constant folding would cause an
...
infinite recursion. part of PR2529
llvm-svn: 53383
2008-07-10 00:29:28 +00:00
Chris Lattner
6c12d086d9
add a helper method for code that wants to handle vector
...
constants by element without caring how they are formed.
llvm-svn: 53381
2008-07-10 00:28:11 +00:00
Chris Lattner
4fbada0bef
elementwise comparison of vector constants was completely wrong. Fix
...
it for PR2529
llvm-svn: 53380
2008-07-10 00:08:17 +00:00
Evan Cheng
80f6966c7f
- Replace use of std::map<std::string, ..> with StringMap. Replace use of std::map with DenseMap, std::set with SmallPtrSet. This results in minor speed up.
...
- Some code clean up.
llvm-svn: 53379
2008-07-10 00:04:23 +00:00
Owen Anderson
35080ed650
Revert r53367, which was breaking things.
...
llvm-svn: 53378
2008-07-09 23:09:10 +00:00
Dan Gohman
e10fc737ca
Simplify hasNUsesOfValue and hasAnyUsesOfValue even more. This
...
makes their special-case checks of use_size() less beneficial,
so remove them. This eliminates all but one use of use_size(),
which is in AssignTopologicalOrder, which uses it only once for
each node, and so can reasonably afford to recompute it, as
this allows the UsesSize field of SDNode to be removed
altogether.
llvm-svn: 53377
2008-07-09 23:03:14 +00:00
Dan Gohman
6ba50d7fc1
hasAnyUseOfValue can check SDUse nodes of its users directly instead
...
of examining every operand of every user.
llvm-svn: 53374
2008-07-09 22:39:01 +00:00
Dan Gohman
679872b05f
Move MemoryVT out of LSBaseNode into MemSDNode, allowing the
...
getMemOperand function to be moved into the base class as well
and made non-virtual.
llvm-svn: 53372
2008-07-09 22:08:04 +00:00
Anton Korobeynikov
9eae9520a9
Remove a FIXME: we really need to use const_data section on darwin for
...
constant pool, if relocation model is not static. This directly maps to
the way how GCC works.
llvm-svn: 53370
2008-07-09 21:54:26 +00:00
Evan Cheng
082f7f802e
Avoid creating expensive comment string if it's not going to be printed.
...
llvm-svn: 53369
2008-07-09 21:53:02 +00:00