Devang Patel
dd5c1fcba9
Fix comment.
...
llvm-svn: 98830
2010-03-18 16:41:16 +00:00
Jakob Stoklund Olesen
d35fc676e4
Revert "Change coalescer complexity from N^2 to N logN by changing one letter."
...
This reverts commit 98776. It broke the llvm-gcc boot strap.
llvm-svn: 98784
2010-03-18 00:23:47 +00:00
Devang Patel
9ad039e65f
Debug info intrinsic does not intefer during tail call optimization.
...
llvm-svn: 98778
2010-03-17 23:52:37 +00:00
Jakob Stoklund Olesen
e05919807e
Change coalescer complexity from N^2 to N logN by changing one letter.
...
Remove ugly hack that aborted the coalescer before using N^2 time.
This affects functions with very complicated live intervals for physical
registers, i.e. functions with thousands of function calls.
llvm-svn: 98776
2010-03-17 23:21:58 +00:00
Devang Patel
4df8850a32
Fix EmitSectionOffset incorrect argument. DwarfDebug is emitting debug info so isEH is always false. This was hiding until now from compilers because of default arguments. This was hiding from dwarf debug info users because for most of the platform isAbsoluteEHSectionOffsets() is same as isAbsoluteDebugSectionOffsets(). But Chris found it while updating dwarf printer to use MC*.
...
llvm-svn: 98743
2010-03-17 17:29:55 +00:00
Chris Lattner
962d3d700b
fix GetOrCreateTemporarySymbol to require a name, clients
...
should use CreateTempSymbol() if they don't care about the
name.
llvm-svn: 98712
2010-03-17 05:41:18 +00:00
Bob Wilson
7a9bf0aa55
Remove a check that can no longer be true, after r84803.
...
llvm-svn: 98694
2010-03-16 23:40:32 +00:00
Evan Cheng
fb978ca2c5
Fix liveintervals handling of dbg_value instructions.
...
llvm-svn: 98686
2010-03-16 21:51:27 +00:00
Chris Lattner
cf7f134913
reapply r98656 unmodified, which exposed the asmprinter not
...
handling constant unions.
llvm-svn: 98680
2010-03-16 21:25:55 +00:00
Devang Patel
16c77b14f2
Ignore debug value instructions while analyzing BB for tail duplication.
...
llvm-svn: 98675
2010-03-16 21:02:07 +00:00
Daniel Dunbar
faade5305c
Revert r98656, its breaking all over the place.
...
llvm-svn: 98662
2010-03-16 19:35:34 +00:00
Chris Lattner
7a96045d0a
improve support for uniontype and ConstantUnion, patch by Tim Northover!
...
llvm-svn: 98656
2010-03-16 19:15:03 +00:00
Bill Wendling
44b1fe3ee1
Use getFirstTerminator().
...
llvm-svn: 98604
2010-03-16 02:01:51 +00:00
Bill Wendling
5f6361464d
When checking if something's killed, don't rely simply on whether it's marked as
...
"used outside of the block". If the block ends in a return, then it won't be
used outside of it.
llvm-svn: 98599
2010-03-16 01:05:35 +00:00
Chris Lattner
adff4d133f
Fix the third (and last known) case of code update problems due
...
to LLVM IR changes with addr label weirdness. In the testcase, we
generate references to the two bb's when codegen'ing the first
function:
_test1: ## @test1
leaq Ltmp0(%rip), %rax
..
leaq Ltmp1(%rip), %rax
Then continue to codegen the second function where the blocks
get merged. We're now smart enough to emit both labels, producing
this code:
_test_fun: ## @test_fun
## BB#0: ## %entry
Ltmp1: ## Block address taken
Ltmp0:
## BB#1: ## %ret
movl $-1, %eax
ret
Rejoice.
llvm-svn: 98595
2010-03-16 00:29:39 +00:00
Bill Wendling
5493cf6715
Now that the default for Darwin platforms is to place the LSDA into the TEXT
...
section, remove the target-specific code that performs this.
llvm-svn: 98580
2010-03-15 21:09:38 +00:00
Chris Lattner
45a0ae21b8
Implement support for the case when a reference to a addr-of-bb
...
label is generated, but then the block is deleted. Since the
value is undefined, we just emit the label right after the entry
label of the function. It might matter that the label is in the
same section as the function was afterall.
llvm-svn: 98579
2010-03-15 20:39:00 +00:00
Chris Lattner
0ae3e35f22
use Mang->getSymbol() more.
...
llvm-svn: 98577
2010-03-15 20:37:38 +00:00
Devang Patel
db8c479e0d
Create SDDbgValue for dbg_value intrinsics and remember its connections with DAG nodes.
...
This is a work in progress. Patch by Dale Johannesen!
llvm-svn: 98568
2010-03-15 19:15:44 +00:00
Chris Lattner
802ebf9561
Fix the case when a reference to an address taken BB is emitted in one
...
function, then the BB is RAUW'd before the definition is emitted. There
are still two cases not being handled, but this should improve us back to
the situation before I touched anything.
llvm-svn: 98566
2010-03-15 19:09:43 +00:00
Chris Lattner
9f4f6954f7
revert r98550, it isn't necessary or sufficient.
...
llvm-svn: 98558
2010-03-15 18:42:01 +00:00
Devang Patel
3244526a3b
Emit dwarf variable info communicated by code generator through DBG_VALUE machine instructions.
...
This is a work in progress.
llvm-svn: 98556
2010-03-15 18:33:46 +00:00
Chris Lattner
a8214d0775
don't eliminate address-taken blocks here.
...
llvm-svn: 98550
2010-03-15 16:37:42 +00:00
Chris Lattner
a8e4282df3
SIGN_EXTEND from the same type as the dest is valid.
...
llvm-svn: 98548
2010-03-15 16:15:56 +00:00
Chris Lattner
89c2d22d3d
sink the call to VT.getSizeInBits() down into its uses,
...
not all unary nodes necessarily have a simple result type.
llvm-svn: 98547
2010-03-15 16:05:15 +00:00
Chris Lattner
b24982ba65
fix MCSectionELF to not leak memory, just like I did for MCSymbol.
...
MCSectionMachO is already fine (yay for fixed size arrays?),
MCSectionCOFF still leaks.
llvm-svn: 98537
2010-03-15 06:23:52 +00:00
Chris Lattner
37c5893297
remove dead method.
...
llvm-svn: 98526
2010-03-15 00:00:42 +00:00
Benjamin Kramer
be3d9aadbd
Remove pointless forward declaration, MSVC got confused by this.
...
llvm-svn: 98519
2010-03-14 22:00:28 +00:00
Duncan Sands
217cec1786
Turn calls to copysignl into an FCOPYSIGN node. Handle FCOPYSIGN nodes
...
with ppc_f128 type by having the type legalizer turn these back into a
call to copysignl.
llvm-svn: 98514
2010-03-14 21:08:40 +00:00
Evan Cheng
f91618ae9f
Rename SDDbgValue.h to SDNodeDbgValue.h for consistency.
...
llvm-svn: 98513
2010-03-14 19:56:39 +00:00
Chris Lattner
70eca8f78e
fix ShrinkDemandedOps to not leave dead nodes around,
...
fixing PR6607
llvm-svn: 98512
2010-03-14 19:46:02 +00:00
Chris Lattner
5393443ed6
rewrite ShrinkDemandedOps to be faster and indent less,
...
no functionality change.
llvm-svn: 98511
2010-03-14 19:43:04 +00:00
Chris Lattner
f656ba2910
make -view-isel-dags print after the 'ShrinkDemandedOps' pass.
...
llvm-svn: 98509
2010-03-14 19:27:55 +00:00
Anton Korobeynikov
2cb4451ae6
Make default expansion for FP16 <-> FP32 nodes into libcalls
...
llvm-svn: 98501
2010-03-14 18:42:24 +00:00
Anton Korobeynikov
95f830f289
Add DAG nodes to represent FP16 <-> FP32 intrinsics
...
llvm-svn: 98500
2010-03-14 18:42:15 +00:00
Chris Lattner
2bdb0765f8
fix AsmPrinter::GetBlockAddressSymbol to always return a unique
...
label instead of trying to form one based on the BB name (which
causes collisions if the name is empty). This fixes PR6608
llvm-svn: 98495
2010-03-14 17:53:23 +00:00
Chris Lattner
9331acc6d7
get MMI out of the label uniquing business, just go to MCContext
...
to get unique assembler temporary labels.
llvm-svn: 98489
2010-03-14 08:36:50 +00:00
Chris Lattner
5af59dfd1b
don't use getDWLabel("label" anymore, always go through MMI.
...
llvm-svn: 98485
2010-03-14 08:18:13 +00:00
Chris Lattner
49130c09d0
remove now-dead code, all labels use MCSymbols.
...
llvm-svn: 98484
2010-03-14 08:17:53 +00:00
Chris Lattner
5ee7841af2
change SrcLineInfo to contain a label instead of a label ID.
...
llvm-svn: 98483
2010-03-14 08:15:55 +00:00
Chris Lattner
23ec7363b8
Now that DBG_LABEL is updated, we can finally make MachineMove
...
contain an MCSymbol instead of a label index.
llvm-svn: 98482
2010-03-14 08:12:40 +00:00
Chris Lattner
ba3b320aa3
change the DBG_LABEL MachineInstr to always be created
...
with an MCSymbol instead of an immediate.
llvm-svn: 98481
2010-03-14 07:56:48 +00:00
Chris Lattner
45aceed227
unbreak the build, grr symlinks.
...
llvm-svn: 98477
2010-03-14 07:36:49 +00:00
Chris Lattner
35d8b4e3e5
Change this code to allocate temporary labels from mccontext,
...
not from MMI.
llvm-svn: 98475
2010-03-14 07:29:45 +00:00
Chris Lattner
853b4f38df
switch GC_LABEL to use an MCSymbol operand instead of a label ID operand.
...
llvm-svn: 98474
2010-03-14 07:27:07 +00:00
Chris Lattner
ee71bdd77f
Fix some EH failures on NNT I introduced in r98461
...
llvm-svn: 98471
2010-03-14 07:02:50 +00:00
Chris Lattner
961e202df4
fix a bug I introduced in r98459, causing some NNT failures.
...
llvm-svn: 98470
2010-03-14 06:50:56 +00:00
Chris Lattner
5fef80c5aa
change the LabelSDNode to be EHLabelSDNode and make it hold
...
an MCSymbol. Make the EH_LABEL MachineInstr hold its label
with an MCSymbol instead of ID. Fix a bug in MMI.cpp which
would return labels named "Label4" instead of "label4".
llvm-svn: 98463
2010-03-14 02:33:54 +00:00
Chris Lattner
de49dbc188
eliminate InvalidateLabel and LabelIDList from MMI and replace
...
them with a counter.
llvm-svn: 98462
2010-03-14 02:24:55 +00:00
Chris Lattner
f856c407af
use Label->isDefined() instead of isLabelDeleted() now that we
...
consistently use MCSymbol and only call this predicate after
they should have been emitted.
llvm-svn: 98461
2010-03-14 02:20:58 +00:00
Chris Lattner
149cf816bb
change EH related stuff (other than EH_LABEL) to use MCSymbol
...
instead of label ID's. This cleans up and regularizes a bunch
of code and makes way for future progress.
Unfortunately, this pointed out to me that JITDwarfEmitter.cpp
is largely copy and paste from DwarfException/MachineModuleInfo
and other places. This is very sad and disturbing. :(
One major change here is that TidyLandingPads moved from being
called in DwarfException::BeginFunction to being called in
DwarfException::EndFunction. There should not be any
functionality change from doing this, but I'm not an EH expert.
llvm-svn: 98459
2010-03-14 01:41:15 +00:00
Chris Lattner
ceaa2343e7
eliminate the now-unneeded context argument of MBB::getSymbol()
...
llvm-svn: 98451
2010-03-13 21:04:28 +00:00
Chris Lattner
e7538fa303
rearrange MCContext ownership. Before LLVMTargetMachine created it
...
and passing off ownership to AsmPrinter. Now MachineModuleInfo
creates it and owns it by value. This allows us to use MCSymbols
more consistently throughout the rest of the code generator, and
simplifies a bit of code. This also allows MachineFunction to
keep an MCContext reference handy, and cleans up the TargetRegistry
interfaces for AsmPrinters.
llvm-svn: 98450
2010-03-13 20:55:24 +00:00
Chris Lattner
533e5c8ffd
add support for MCSymbols as operands to MachineInstrs.
...
llvm-svn: 98433
2010-03-13 08:14:18 +00:00
Chris Lattner
f26e0336c2
simplify EmitFrameMoves to take BaseLabel in as a symbol
...
instead of as a stem+idx pair, simplify the "is a new
location" check to use symbol comparison.
llvm-svn: 98432
2010-03-13 08:05:25 +00:00
Chris Lattner
ade5faaac4
factor some labels, simplify some code.
...
llvm-svn: 98429
2010-03-13 07:40:56 +00:00
Chris Lattner
836e8b5d1b
various cleanups.
...
llvm-svn: 98426
2010-03-13 07:26:18 +00:00
Chris Lattner
bfdbd2f3a2
reimplement the string pool used for inlined function
...
entries to not thrash std::strings and MCSymbols.
llvm-svn: 98415
2010-03-13 02:17:42 +00:00
Chris Lattner
14ab9784f4
remove gone method, grr symlinks.
...
llvm-svn: 98392
2010-03-12 21:30:49 +00:00
Chris Lattner
7a2e6110bc
inline the now-trivial implementation of GetGlobalValueSymbol into
...
some of its callers.
llvm-svn: 98388
2010-03-12 21:09:07 +00:00
Chris Lattner
c101ad818c
give Mangler access to TargetData.
...
llvm-svn: 98378
2010-03-12 20:47:28 +00:00
Chris Lattner
01e70df9b2
finally give Mangler a getSymbol method, which returns an MCSymbol
...
for a global instead of messing around with string buffers.
llvm-svn: 98366
2010-03-12 18:55:20 +00:00
Chris Lattner
04cd48f865
remove dead code.
...
llvm-svn: 98365
2010-03-12 18:49:32 +00:00
Chris Lattner
956582f876
make the mangler take an MCContext instead of an MAI.
...
No functionality change.
llvm-svn: 98363
2010-03-12 18:44:54 +00:00
Chris Lattner
f4dce6a6d8
remove MAI argument from createAsmStreamer since it
...
can get it from the context now.
llvm-svn: 98361
2010-03-12 18:28:53 +00:00
Chris Lattner
4cc9a9004f
fix a bug emitting .secrel32 that I introduced, PR6587, patch
...
by A.Mazur!
llvm-svn: 98360
2010-03-12 18:10:35 +00:00
Jeffrey Yasskin
824bd1b30d
Free DbgScopes in DwarfDebug::endFunction(). Also increased the const-ness of
...
several fields to make it easier to figure out where bugs might be creeping in.
llvm-svn: 98358
2010-03-12 17:45:06 +00:00
Duncan Sands
086a80eee3
Revert turning copysignl into a COPYSIGN node for the moment:
...
ppc calls copysignl with a 128 bit ppc long double, resulting
in a node that the type legalizer doesn't know how to expand.
llvm-svn: 98357
2010-03-12 17:41:34 +00:00
Duncan Sands
aeed41b97a
Now that it's supported, turn copysignl into a COPYSIGN node.
...
llvm-svn: 98348
2010-03-12 12:13:59 +00:00
Duncan Sands
5dcc3b328d
Fix PR6522: implement copysign expansion for x86 long double
...
(it seems that FreeBSD doesn't have copysignl). Done by
removing a bunch of assumptions from the code. This may also
help with sparc 128 bit floats.
llvm-svn: 98346
2010-03-12 11:45:06 +00:00
Chris Lattner
80ab250a1c
fix PR6577, a bug in sdbuilder lowering select instructions
...
whose true value was not Val#0.
llvm-svn: 98336
2010-03-12 07:15:36 +00:00
Devang Patel
93aa350213
There is no need to create specification DIE for definitions at DIFile level.
...
llvm-svn: 98302
2010-03-11 23:44:52 +00:00
Jakob Stoklund Olesen
1c8c4e2bb2
Extract methods from LocalRewriter::RewriteMBB bringing it down to 666 lines.
...
llvm-svn: 98295
2010-03-11 23:04:34 +00:00
Chris Lattner
debc026df2
change MCContext to always have an MCAsmInfo.
...
llvm-svn: 98293
2010-03-11 22:53:35 +00:00
Chris Lattner
5aefaeb42e
fix a fixme in TargetLoweringObjectFile::getExprForDwarfReference
...
where we used ot create an MCSymbol for ".". Now emit an assembler
temporary label and reference it instead of "." textually.
rdar://7739457
llvm-svn: 98292
2010-03-11 21:55:20 +00:00
Dan Gohman
6b1b9e37d7
Remove getWidenVectorType, which is no longer used.
...
llvm-svn: 98289
2010-03-11 21:39:57 +00:00
Chris Lattner
1ce9dfd498
rename getSymbolForDwarf* to getExprForDwarf* since it returns
...
an MCExpr and not an MCSymbol. Change it to take an MCStreamer,
which is currently unused.
No functionality change.
llvm-svn: 98278
2010-03-11 19:41:58 +00:00
Evan Cheng
e1c0438e7b
In case of tail call size of Ins and InVals may not match.
...
llvm-svn: 98277
2010-03-11 19:38:18 +00:00
Jeffrey Yasskin
239beb0e85
Avoid leaking CompileUnits in DwarfDebug.cpp.
...
llvm-svn: 98268
2010-03-11 18:29:55 +00:00
Richard Osborne
9c71a0a5ba
Add a new jump table encoding to indicate jump tables entries
...
are inside the function by the target at the point of use.
llvm-svn: 98255
2010-03-11 14:58:16 +00:00
Evan Cheng
4ef6d8fa15
The check for coalescing a virtual register to a physical register, e.g.
...
cl = EXTRACT_SUBREG reg1024, 1, is overly conservative. It should check
for overlaps of vr's live interval with the super registers of the
physical register (ECX in this case) and let JoinIntervals() handle checking
the coalescing feasibility against the physical register (cl in this case).
llvm-svn: 98251
2010-03-11 08:20:21 +00:00
Daniel Dunbar
b24134670c
Remove dead include.
...
llvm-svn: 98225
2010-03-11 02:28:48 +00:00
Dale Johannesen
15ff882aa1
Fix debug_value handling.
...
llvm-svn: 98224
2010-03-11 02:10:24 +00:00
Daniel Dunbar
687d99cfa8
MC: Provide MCAssembler with a TargetAsmBackend.
...
llvm-svn: 98222
2010-03-11 01:34:27 +00:00
Jakob Stoklund Olesen
87f8d0c4f2
VirtRegRewriter spring cleaning. No functional change.
...
Move methods out of line and M-x whitespace-cleanup.
Promote common method arguments to member variables.
llvm-svn: 98207
2010-03-11 00:11:33 +00:00
Chris Lattner
7cd70b8066
fix PR6533 by updating the br(xor) code to remember the case
...
when it looked past a trunc.
llvm-svn: 98203
2010-03-10 23:46:44 +00:00
Dale Johannesen
29afbd39e4
Cosmetic: lengthen names and improve comments.
...
llvm-svn: 98202
2010-03-10 23:37:24 +00:00
Bill Wendling
df325dee9d
Add a bit along with the MCSymbols stored in the MachineModuleInfo maps that
...
indicates that an MCSymbol is external or not. (It's true if it's external.)
This will be used to specify the correct information to add to non-lazy
pointers. That will be explained further when this bit is used.
llvm-svn: 98199
2010-03-10 22:34:10 +00:00
Dale Johannesen
987770c05d
Progress towards shepherding debug info through SelectionDAG.
...
No functional effect yet. This is still evolving and should
not be viewed as final.
llvm-svn: 98195
2010-03-10 22:13:47 +00:00
Dan Gohman
4c22c7a665
Fix another bitwidth calculation to handle vector types; based on a
...
patch by Micah Villmow for PR6572.
llvm-svn: 98188
2010-03-10 21:04:53 +00:00
Dale Johannesen
5edf11aad3
Fix another place where DEBUG_VALUE affected codegen.
...
llvm-svn: 98181
2010-03-10 19:57:56 +00:00
Dale Johannesen
b68b96c0f6
Fix a bug in DEBUG_VALUE handling Devang ran into.
...
I'll get this loop right yet.
llvm-svn: 98155
2010-03-10 15:06:26 +00:00
Chris Lattner
e34dde1e83
move three lowering hooks from MAI to TLOF and make one of them
...
semantic instead of syntactic. This completes MCization of
darwin/x86[-64]!
llvm-svn: 98145
2010-03-10 07:20:42 +00:00
Dale Johannesen
c9611b6d0a
This survived a bootstrap, so let's try 98104 again.
...
llvm-svn: 98137
2010-03-10 05:45:47 +00:00
Evan Cheng
668ceddeec
Enable machine cse pass.
...
llvm-svn: 98132
2010-03-10 03:07:41 +00:00
Chris Lattner
270a61db96
mcize the rest of EH emission, only one more directive missing
...
for darwin/x86 to be completely mcized.
llvm-svn: 98130
2010-03-10 02:48:06 +00:00
Chris Lattner
60b9c3a333
add missing filename!
...
llvm-svn: 98125
2010-03-10 02:29:31 +00:00
Chris Lattner
ed0b8d36e4
set the temporary bit on MCSymbols correctly.
...
llvm-svn: 98124
2010-03-10 02:25:11 +00:00
Evan Cheng
f75338cfcb
Add a couple more heuristics to neuter machine cse some more.
...
1. Be careful with cse "cheap" expressions. e.g. constant materialization. Only cse them when the common expression is local or in a direct predecessor. We don't want cse of cheap instruction causing other expressions to be spilled.
2. Watch out for the case where the expression doesn't itself uses a virtual register. e.g. lea of frame object. If the common expression itself is used by copies (common for passing addresses to function calls), don't perform the cse. Since these expressions do not use a register, it creates a live range but doesn't close any, we want to be very careful with increasing register pressure.
Note these are heuristics so machine cse doesn't make register allocator unhappy. Once we have proper live range splitting and re-materialization support in place, these should be evaluated again.
Now machine cse is almost always a win on llvm nightly tests on x86 and x86_64.
llvm-svn: 98121
2010-03-10 02:12:03 +00:00
Chris Lattner
e284f80948
inline away a form of IsPCRelative, eliminating the
...
dead IsPCRel argument.
llvm-svn: 98117
2010-03-10 01:17:49 +00:00
Chris Lattner
cff79125fb
add some fixme's for MCizing. EH still has a few things that
...
need to be MCized, but the last debug info thing are LEB and
cygwin specific (which the MC api doesn't support yet) and
one specific form of EmitReference which I'll tackle next.
llvm-svn: 98116
2010-03-10 01:04:13 +00:00
Jim Grosbach
aa8617389c
Clear up the last (famous last words) frame index value reuse issues for Thumb1.
...
llvm-svn: 98109
2010-03-10 00:13:42 +00:00
Dale Johannesen
3800f76c1a
Speculatively revert 98104; could be what's causing crashes
...
llvm-svn: 98108
2010-03-10 00:11:34 +00:00
Chris Lattner
915a362856
mcize uses of PrintRelDirective and eliminate it.
...
llvm-svn: 98107
2010-03-10 00:09:21 +00:00
Chris Lattner
84561d5f46
inline the bool form of PrintRelDirective away, leaving just the unsigned form.
...
llvm-svn: 98106
2010-03-09 23:54:52 +00:00
Chris Lattner
d5d96f76d0
eliminate EOL, adding all comments with the OutStreamer.AddComment
...
method. With this, comments should end up on the same lines as the .byte
directives (for example) and we now get no output with:
$ llc CodeGen/X86/2009-02-12-DebugInfoVLA.ll -o - -filetype=null -asm-verbose
woot.
llvm-svn: 98105
2010-03-09 23:52:58 +00:00
Dale Johannesen
02f3bfbecc
Ever more complicated DEBUG_VALUE fixes for branch folding.
...
llvm-svn: 98104
2010-03-09 23:52:37 +00:00
Chris Lattner
58829fcfe9
eliminate a bunch of \n's that are being printed to O. Next up is to kill
...
off "EOL".
llvm-svn: 98102
2010-03-09 23:38:23 +00:00
Chris Lattner
2ede66313d
convert the non-"ispcrel" case of EmitReference to MC,
...
significant debug info testcases are now all going through
MCStreamer, though they print a lot of extraneous newlines to "O".
llvm-svn: 98101
2010-03-09 23:19:15 +00:00
Jim Grosbach
f328c5334f
Change the Value argument to eliminateFrameIndex to a type-tagged value. This
...
is preparatory to having PEI's scavenged frame index value reuse logic
properly distinguish types of frame values (e.g., whether the value is
stack-pointer relative or frame-pointer relative).
No functionality change.
llvm-svn: 98086
2010-03-09 21:45:49 +00:00
Evan Cheng
625a7248d6
Allow more cross-rc coalescing.
...
llvm-svn: 98048
2010-03-09 06:38:17 +00:00
Chris Lattner
d51f1bdc58
reapply r98035:
...
Now that setStartLabel takes an MCSymbol, we can de-ID'ize
beginScope and RecordSourceLine.
llvm-svn: 98047
2010-03-09 04:54:43 +00:00
Chris Lattner
43b812b6a8
add some extra checks. I'm not sure why, but this does unbreak a
...
failure remaining on mainline.
llvm-svn: 98046
2010-03-09 04:48:35 +00:00
Evan Cheng
1b43094229
Revert accidental commit.
...
llvm-svn: 98045
2010-03-09 04:04:38 +00:00
Jakob Stoklund Olesen
cc6b4fdf11
Don't do illegal cross-class coalescing.
...
llvm-svn: 98044
2010-03-09 03:56:06 +00:00
Evan Cheng
8277a90f75
- Make the machine cse dumb coalescer (as opposed to the more awesome simple
...
coalescer) handle sub-register classes.
- Add heuristics to avoid non-profitable cse. Given the current lack of live
range splitting, avoid cse when an expression has PHI use and the would be
new use is in a BB where the expression wasn't already being used.
llvm-svn: 98043
2010-03-09 03:21:12 +00:00
Eric Christopher
8875eba06a
Speculatively revert r98035. It appears to have caused a set of buildbot
...
failures.
llvm-svn: 98039
2010-03-09 02:36:31 +00:00
Dan Gohman
0d69c61fec
Attempt to make this debug output meaningful, both in the case of
...
multibyte opcodes and in the case of multiple scopes.
llvm-svn: 98036
2010-03-09 02:15:05 +00:00
Chris Lattner
c4a74bf48b
Now that setStartLabel takes an MCSymbol, we can de-ID'ize
...
beginScope and RecordSourceLine.
llvm-svn: 98035
2010-03-09 02:08:02 +00:00
Chris Lattner
f7ad2622cc
change DbgScope to keep track of the start/end label as MCSymbol*
...
now that the dependence on ID is removed from MMI.
llvm-svn: 98034
2010-03-09 01:58:53 +00:00
Chris Lattner
a72a32a06b
remove a useless optimization: now that label replacement never
...
happens, the start/end of a scope can never be the same.
llvm-svn: 98032
2010-03-09 01:52:43 +00:00
Chris Lattner
d4ce7a73e8
strength reduce MMI::MappedLabel to MMI::isLabelDeleted,
...
and add a FIXME about how we are eventually going to zap this
lookup table once mc world domination is complete.
llvm-svn: 98031
2010-03-09 01:51:43 +00:00
Chris Lattner
4494a28b3c
mcstreamerize AsmPrinter::printLabel.
...
llvm-svn: 98025
2010-03-09 01:02:30 +00:00
Jakob Stoklund Olesen
3d0157ae7e
Disable physical register coalescing when the number of live ranges for the
...
physreg becomes ridiculously high.
std::upper_bound may be log(N), but for sufficiently large live intervals, it
becomes log(N)*cachemiss = a long long time.
This patch improves coalescer time by 4500x for a function with 20000
function calls. The generated code is different, but not significantly worse -
the allocator hints are almost as good as physreg coalescing anyway.
llvm-svn: 98023
2010-03-09 00:59:48 +00:00
Chris Lattner
8147c144d9
add a EmitSymbolValue convenience method to MCStreamer.
...
llvm-svn: 98017
2010-03-09 00:39:24 +00:00
Chris Lattner
db93b91db1
make InlineInfoLabels hold MCSymbol*'s, avoiding
...
recomputation of the labels.
llvm-svn: 98016
2010-03-09 00:31:02 +00:00
Chris Lattner
a583d01e79
mc'ize the last use of PrintLabelName and eliminate PrintLabelName.
...
llvm-svn: 98015
2010-03-09 00:26:09 +00:00
Chris Lattner
644850459d
eliminate an argument from PrintRelDirective, sinking
...
the one special case into EmitSectionOffset. MCize
the non-special case in EmitSectionOffset.
llvm-svn: 98014
2010-03-09 00:17:58 +00:00
Dan Gohman
cc7ed51fa3
Print the correct index in the "match failed at index" message.
...
llvm-svn: 98013
2010-03-09 00:07:36 +00:00
Chris Lattner
06f5a077de
remove the suffix form of PrintLabelName, which was only
...
used for 'flavor'.
llvm-svn: 98012
2010-03-09 00:00:57 +00:00
Chris Lattner
183e87502e
now that the debug and eh emitters use a common .set counter,
...
we can eliminate "flavor".
llvm-svn: 98011
2010-03-09 00:00:15 +00:00
Chris Lattner
99ca33d324
move .set generation out of DwarfPrinter into AsmPrinter and
...
MCize it.
llvm-svn: 98010
2010-03-08 23:58:37 +00:00
Evan Cheng
8afdea401a
Don't waste time trying to CSE labels, phis, inline asm. Definitely avoid cse implicit-def for obvious performance reason.
...
llvm-svn: 98009
2010-03-08 23:49:12 +00:00
Evan Cheng
ca86fb517c
Restrict machine cse to really trivial coalescing. Leave the heavy lifting to a real coalescer.
...
llvm-svn: 98007
2010-03-08 23:28:08 +00:00
Chris Lattner
10d571f349
simplify EmitSectionOffset to always use .set if it is
...
available, the only thing this affects is that we produce
.set in one case we didn't before, which shouldn't harm
anything. Make EmitSectionOffset call EmitDifference
instead of duplicating it.
llvm-svn: 98005
2010-03-08 23:23:25 +00:00
Chris Lattner
9dfcbeaca1
Remove a version of EmitDifference.
...
llvm-svn: 98002
2010-03-08 23:02:59 +00:00
Chris Lattner
81bf3f933d
eliminate a form of PrintLabelName.
...
llvm-svn: 97999
2010-03-08 22:52:49 +00:00
Chris Lattner
bbd8af41d3
remove another form of EmitReference.
...
llvm-svn: 97998
2010-03-08 22:50:36 +00:00
Chris Lattner
4ccfa3d315
eliminate the non-MCSymbol versions of EmitReference.
...
llvm-svn: 97997
2010-03-08 22:47:57 +00:00
Chris Lattner
2bbaab13d8
mc'ize EmitLabel.
...
llvm-svn: 97996
2010-03-08 22:44:40 +00:00
Chris Lattner
bfd38653e6
merge DIEObjectLabel and DIEDwarfLabel into DIELabel.
...
Yes, DIE you fiendish labels, die all of you.
llvm-svn: 97995
2010-03-08 22:31:46 +00:00
Chris Lattner
cbce2df237
elimiante the DWLabel class, using MCSymbol instead. Start
...
switching some stuff over to passing around MCSymbol* instead
of stem+ID.
llvm-svn: 97993
2010-03-08 22:23:36 +00:00
Devang Patel
ea239f6e0a
Derive DIType from DIScope. This simplifies getContext() where for members the context is a type. This also eliminates need of CompileUnitMaps maintained by dwarf writer.
...
llvm-svn: 97990
2010-03-08 22:02:50 +00:00
Devang Patel
176dc29a62
Avoid using DIDescriptor.isNull().
...
This is a first step towards eliminating checks in Descriptor constructors.
llvm-svn: 97975
2010-03-08 20:52:55 +00:00
Devang Patel
a716e313d6
Revert r97947.
...
llvm-svn: 97963
2010-03-08 19:20:38 +00:00
Devang Patel
1527b2657b
Avoid using DIDescriptor.isNull().
...
This is a first step towards eliminating unncessary constructor checks in light weight DIDescriptor wrappers.
llvm-svn: 97947
2010-03-08 18:25:48 +00:00
Dale Johannesen
b87c6c82e6
Add Order to SDDbgValue
...
llvm-svn: 97939
2010-03-08 05:39:50 +00:00
Dale Johannesen
d610f0a82a
Fix dbg value handling in tail merging.
...
llvm-svn: 97938
2010-03-08 05:38:13 +00:00
Douglas Gregor
c52fc8f922
Revert r97917, which was causing Clang Debug self-host failures.
...
llvm-svn: 97932
2010-03-08 02:58:37 +00:00
Jeffrey Yasskin
2c23c1d1a1
Roll r97906 forward again, without double-deleting CompileUnit::IndexTyDie.
...
llvm-svn: 97917
2010-03-07 17:10:13 +00:00
Chris Lattner
f3ee582f23
Use Other as a sentinel instead of iAny.
...
llvm-svn: 97914
2010-03-07 07:45:08 +00:00
Jeffrey Yasskin
c68dc05867
_2_ gcc crashes, ah, ah, ah...
...
(Rolling back r97906.)
llvm-svn: 97909
2010-03-07 07:16:49 +00:00
Jeffrey Yasskin
c0123f0033
Avoid leaking CompileUnits and DbgScopes from DwarfDebug. Leaks found by Valgrind!
...
llvm-svn: 97906
2010-03-07 06:55:35 +00:00
Chris Lattner
6dbe3336f9
tidy up
...
llvm-svn: 97895
2010-03-07 04:28:09 +00:00
Evan Cheng
d8e0138666
Don't update physical register def.
...
llvm-svn: 97861
2010-03-06 01:14:19 +00:00
Dale Johannesen
f0c8e76a85
Add some new bits of debug info handling. No
...
functional change yet.
llvm-svn: 97855
2010-03-06 00:03:23 +00:00
Dan Gohman
00a652eea0
Reapply r97778 and r97779, enabled only for unsigned i64 to f64
...
conversions.
llvm-svn: 97854
2010-03-06 00:00:55 +00:00
Charles Davis
faa2f44081
Don't emit global symbols into the (__TEXT,__ustring) section on Darwin. This
...
is a workaround for <rdar://problem/7672401/> (which I filed).
This let's us build Wine on Darwin, and it gets the Qt build there a little bit
further (so Doug says).
llvm-svn: 97845
2010-03-05 22:28:45 +00:00
Jakob Stoklund Olesen
4e033d2070
Better handling of dead super registers in LiveVariables. We used to do this:
...
CALL ... %RAX<imp-def>
... [not using %RAX]
%EAX = ..., %RAX<imp-use, kill>
RET %EAX<imp-use,kill>
Now we do this:
CALL ... %RAX<imp-def, dead>
... [not using %RAX]
%EAX = ...
RET %EAX<imp-use,kill>
By not artificially keeping %RAX alive, we lower register pressure a bit.
The correct number of instructions for 2008-08-05-SpillerBug.ll is obviously
55, anybody can see that. Sheesh.
llvm-svn: 97838
2010-03-05 21:49:17 +00:00
Jakob Stoklund Olesen
1fce28720a
We don't really care about correct register liveness information after the
...
post-ra scheduler has run. Disable the verifier checks that late in the game.
llvm-svn: 97837
2010-03-05 21:49:13 +00:00
Jakob Stoklund Olesen
67476519d7
Avoid creating bad PHI instructions when BR is being const-folded.
...
llvm-svn: 97836
2010-03-05 21:49:10 +00:00
Chris Lattner
80aaccb987
Fix PR6497, a bug where we'd fold a load into an addc
...
node which has a flag. That flag in turn was used by an
already-selected adde which turned into an ADC32ri8 which
used a selected load which was chained to the load we
folded. This flag use caused us to form a cycle. Fix
this by not ignoring chains in IsLegalToFold even in
cases where the isel thinks it can.
llvm-svn: 97791
2010-03-05 06:19:13 +00:00
Chris Lattner
d7353d219f
inline a small function with one call site.
...
llvm-svn: 97789
2010-03-05 05:49:45 +00:00
Dan Gohman
ebdb1743d3
Revert r97778 and r97779. They're somehow breaking llvm-gcc builds.
...
llvm-svn: 97781
2010-03-05 02:40:23 +00:00
Dan Gohman
0a01ba144d
Fix these constants to be more portable.
...
llvm-svn: 97779
2010-03-05 02:13:10 +00:00
Dan Gohman
e5b9ea020f
Rewrite i64-to-f64 conversion using an algorithm which handles
...
rounding correctly. This implementation is a generalization of
the x86_64 code in compiler-rt.
This fixes rdar://7683708.
llvm-svn: 97778
2010-03-05 02:00:46 +00:00
Dale Johannesen
b1fd546dd0
Fix some more places where dbg_value affected codegen.
...
llvm-svn: 97765
2010-03-05 00:02:59 +00:00
Jeffrey Yasskin
e4e796c00b
Fix memcheck-found leaks: one false positive from using new[], and one true
...
positive where pointers would be leaked on llvm_shutdown.
llvm-svn: 97759
2010-03-04 22:15:01 +00:00
Jim Grosbach
330c1b777e
For SJLJ exception handling, make sure that all calls that are not marked
...
as nounwind are marked with a -1 call-site value. This is necessary to, for
example, correctly process exceptions thrown from within an "unexpected"
execption handler (see SingleSource/Regression/C++/EH/expection_spec_test.cpp).
llvm-svn: 97757
2010-03-04 22:07:46 +00:00
Evan Cheng
9b35d553df
Run machine licm before machine cse to avoid messing up licm opportunities.
...
llvm-svn: 97752
2010-03-04 21:28:09 +00:00
Evan Cheng
a9828532ff
Avoid cse load instructions unless they are known to be invariant loads.
...
llvm-svn: 97747
2010-03-04 21:18:08 +00:00
Chris Lattner
860cbbb031
add a statistic for # times fastisel fails.
...
llvm-svn: 97738
2010-03-04 19:46:56 +00:00
Dan Gohman
632e2a2b8c
Fix a typo Duncan noticed.
...
llvm-svn: 97735
2010-03-04 19:11:28 +00:00
Evan Cheng
df8f4b6142
Rename -machine-cse to -enable-machine-cse.
...
llvm-svn: 97713
2010-03-04 02:08:04 +00:00
Evan Cheng
9120412740
Look ahead a bit to determine if a physical register def that is not marked dead is really alive. This is necessary to catch a lot of common cse opportunities for targets like x86.
...
llvm-svn: 97706
2010-03-04 01:33:55 +00:00
Chris Lattner
2bbca2de9e
change the new isel matcher to emit ComplexPattern matches
...
as the very last thing before node emission. This should
dramatically reduce the number of times we do 'MatchAddress'
on X86, speeding up compile time. This also improves comments
in the tables and shrinks the table a bit, now down to
80506 bytes for x86.
llvm-svn: 97703
2010-03-04 01:23:08 +00:00
Dan Gohman
9f6d374ab7
Fix more code to work properly with vector operands. Based on
...
a patch my Micah Villmow for PR6465.
llvm-svn: 97692
2010-03-04 00:23:16 +00:00
Chris Lattner
19007009c8
inline CannotYetSelectIntrinsic into CannotYetSelect and simplify.
...
llvm-svn: 97690
2010-03-04 00:21:16 +00:00
Evan Cheng
9729f2a2b4
Fix a logic error. An instruction that has a live physical register def cannot be CSE'ed, but it *can* be used to replace a common subexpression.
...
llvm-svn: 97688
2010-03-03 23:59:08 +00:00
Evan Cheng
7310728cf9
Remove PHINodeTraits and use MachineInstrExpressionTrait instead.
...
llvm-svn: 97687
2010-03-03 23:55:49 +00:00
Evan Cheng
8c608dffd5
Move MachineInstrExpressionTrait::getHashValue() out of line so it can skip over only virtual register defs. This matches what isEqual() is doing.
...
llvm-svn: 97680
2010-03-03 23:37:30 +00:00
Evan Cheng
36a7a94029
Re-apply r97667 but with a little bit of thought put into the patch. This implements a special DenseMapInfo trait for DenseMap<MachineInstr*> that compare the value of the MachineInstr rather than the pointer value. Since the hashing and equality test functions ignore defs it's useful for doing CSE kind optimization.
...
llvm-svn: 97678
2010-03-03 23:27:36 +00:00
Dan Gohman
fe6b41169a
Revert 97667. It broke a bunch of tests.
...
llvm-svn: 97673
2010-03-03 22:40:03 +00:00
Evan Cheng
57064125c4
Fix funky indentation and add comments.
...
llvm-svn: 97670
2010-03-03 21:54:14 +00:00
Evan Cheng
338c7aed4c
Move DenseMapInfo for MachineInstr* to MachineInstr.h
...
llvm-svn: 97667
2010-03-03 21:47:16 +00:00
Dan Gohman
cdc603ecae
Fix a bug in SelectionDAG's ReplaceAllUsesWith in the case where
...
CSE and recursive RAUW calls delete a node from the use list,
invalidating the use list iterator. There's currently no known
way to reproduce this in an unmodified LLVM, however there's no
fundamental reason why a SelectionDAG couldn't be formed which
would trigger this case.
llvm-svn: 97665
2010-03-03 21:33:37 +00:00
Evan Cheng
918ac5d21f
Machine CSE work in progress. It's doing some CSE now. But implicit def of physical registers are getting in the way.
...
llvm-svn: 97664
2010-03-03 21:20:05 +00:00
Evan Cheng
810a26689e
Add MachineRegisterInfo::hasOneUse and hasOneNonDBGUse.
...
llvm-svn: 97663
2010-03-03 21:18:38 +00:00
Bill Wendling
f0bd51c4e3
Revert...
...
--- Reverse-merging r97592 into '.':
U lib/CodeGen/TargetLoweringObjectFileImpl.cpp
llvm-svn: 97657
2010-03-03 19:31:05 +00:00
Chris Lattner
9e7f00c3aa
add some of the more obscure predicate types to the
...
Scope accelerator.
llvm-svn: 97652
2010-03-03 07:46:25 +00:00
Chris Lattner
9889ed8c45
speed up scope node processing: if the first element of a scope
...
entry we're about to process is obviously going to fail, don't
bother pushing a scope only to have it immediately be popped.
This avoids a lot of scope stack traffic in common cases.
Unfortunately, this requires duplicating some of the predicate
dispatch. To avoid duplicating the actual logic I pulled each
predicate out to its own static function which gets used in
both places.
llvm-svn: 97651
2010-03-03 07:31:15 +00:00
Chris Lattner
92a814205f
introduce a new SwitchTypeMatcher node (which is analogous to
...
SwitchOpcodeMatcher) and have DAGISelMatcherOpt form it. This
speeds up selection, particularly for X86 which has lots of
variants of instructions with only type differences.
llvm-svn: 97645
2010-03-03 06:28:15 +00:00
Evan Cheng
13f096bf0a
Work in progress. Finding some cse now.
...
llvm-svn: 97635
2010-03-03 02:48:20 +00:00
Bill Wendling
65baaf9499
Use APInt instead of zext value.
...
llvm-svn: 97631
2010-03-03 01:58:01 +00:00
Evan Cheng
70b7ecdef9
- Change MachineInstr::isIdenticalTo to take a new option that determines whether it should skip checking defs or at least virtual register defs. This subsumes part of the TargetInstrInfo::isIdentical functionality.
...
- Eliminate TargetInstrInfo::isIdentical and replace it with produceSameValue. In the default case, produceSameValue just checks whether two machine instructions are identical (except for virtual register defs). But targets may override it to check for unusual cases (e.g. ARM pic loads from constant pools).
llvm-svn: 97628
2010-03-03 01:44:33 +00:00
Evan Cheng
ae376081d2
Add an option to enable machine cse (it's not doing anything yet.
...
llvm-svn: 97627
2010-03-03 01:38:35 +00:00
Bill Wendling
d1f658563d
This test case:
...
long test(long x) { return (x & 123124) | 3; }
Currently compiles to:
_test:
orl $3, %edi
movq %rdi, %rax
andq $123127, %rax
ret
This is because instruction and DAG combiners canonicalize
(or (and x, C), D) -> (and (or, D), (C | D))
However, this is only profitable if (C & D) != 0. It gets in the way of the
3-addressification because the input bits are known to be zero.
llvm-svn: 97616
2010-03-03 00:35:56 +00:00
Chris Lattner
9c9c1158cb
Fix some issues in WalkChainUsers dealing with
...
CopyToReg/CopyFromReg/INLINEASM. These are annoying because
they have the same opcode before an after isel. Fix this by
setting their NodeID to -1 to indicate that they are selected,
just like what automatically happens when selecting things that
end up being machine nodes.
With that done, give IsLegalToFold a new flag that causes it to
ignore chains. This lets the HandleMergeInputChains routine be
the one place that validates chains after a match is successful,
enabling the new hotness in chain processing. This smarter
chain processing eliminates the need for "PreprocessRMW" in the
X86 and MSP430 backends and enables MSP to start matching it's
multiple mem operand instructions more aggressively.
I currently #if out the dead code in the X86 backend and MSP
backend, I'll remove it for real in a follow-on patch.
The testcase changes are:
test/CodeGen/X86/sse3.ll: we generate better code
test/CodeGen/X86/store_op_load_fold2.ll: PreprocessRMW was
miscompiling this before, we now generate correct code
Convert it to filecheck while I'm at it.
test/CodeGen/MSP430/Inst16mm.ll: Add a testcase for mem/mem
folding to make anton happy. :)
llvm-svn: 97596
2010-03-02 22:20:06 +00:00
Bill Wendling
1ad5825d64
Okay. One last attempt:
...
Place the LSDA into the TEXT section on Mach-O. This saves space.
llvm-svn: 97592
2010-03-02 21:50:35 +00:00
Chris Lattner
0c14477270
run HandleMergeInputChains even if we only have one input chain.
...
llvm-svn: 97581
2010-03-02 19:34:59 +00:00