| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This will be used to replace things like X86's MOV32to32_.
Enhance ScheduleDAGSDNodesEmit to be more flexible and robust
in the presense of subregister superclasses and subclasses. It
can now cope with the definition of a virtual register being in
a subclass of a use.
Re-introduce the code for recording register superreg classes and
subreg classes. This is needed because when subreg extracts and
inserts get coalesced away, the virtual registers are left in
the correct subclass.
llvm-svn: 68961
|
| |
|
|
|
|
| |
a live interval. This is needed for some upcoming subreg changes.
llvm-svn: 68956
|
| |
|
|
|
|
|
|
|
| |
the subreg field to 0, since the subreg field is only used
for virtual register subregs. This doesn't change
current functionality; it just eliminates bogus noise from
debug output.
llvm-svn: 68955
|
| |
|
|
| |
llvm-svn: 68953
|
| |
|
|
|
|
|
|
| |
to support C99 inline, GNU extern inline, etc. Related bugzilla's
include PR3517, PR3100, & PR2933. Nothing uses this yet, but it
appears to work.
llvm-svn: 68940
|
| |
|
|
|
|
| |
copying into the right register, avoiding a copy.
llvm-svn: 68889
|
| |
|
|
|
|
| |
and make it return the assigned register.
llvm-svn: 68888
|
| |
|
|
|
|
|
| |
from the assembler:
Error: unknown pseudo-op: `.debug_inlined'
llvm-svn: 68863
|
| |
|
|
|
|
|
|
| |
collected when nested llvm.dbg.func.start intrinsics are seen. (Right now, inliner removes nested llvm.dbg.func.start intrinisics during inlining.)
Create debug_inlined dwarf section using these information. This info is used by gdb, at least on Darwin, to enable better experience debugging inlined functions. See DwarfWriter.cpp for more information on structure of debug_inlined section.
llvm-svn: 68847
|
| |
|
|
|
|
| |
redundant labels is referenced by debug info somewhere else. This patch provies a way so that dwarf writer can mark labels as used.
llvm-svn: 68813
|
| |
|
|
|
|
| |
No functional changes.
llvm-svn: 68808
|
| |
|
|
|
|
|
|
|
|
|
| |
1. Sinking would crash when the first instruction of a block was
sunk due to iterator problems.
2. Instructions could be sunk to their current block, causing an
infinite loop.
This fixes PR3968
llvm-svn: 68787
|
| |
|
|
| |
llvm-svn: 68786
|
| |
|
|
| |
llvm-svn: 68747
|
| |
|
|
| |
llvm-svn: 68745
|
| |
|
|
|
|
| |
code that uses it by using SelectionDAG::getVTList instead.
llvm-svn: 68744
|
| |
|
|
|
|
|
|
| |
the key. This will cause it to create a new std::string, which isn't
wanted. Instead, pass back the "const char*". Modify the EmitString() method to
take a "const char*".
llvm-svn: 68741
|
| |
|
|
| |
llvm-svn: 68735
|
| |
|
|
|
|
| |
isRegTiedToDefOperand. Thanks to Bob for pointing this out!
llvm-svn: 68734
|
| |
|
|
|
|
| |
gives a micro speedup in the Dwarf writer.
llvm-svn: 68728
|
| |
|
|
| |
llvm-svn: 68727
|
| |
|
|
|
|
|
|
|
|
|
|
| |
register destinations that are tied to source operands. The
TargetInstrDescr::findTiedToSrcOperand method silently fails for inline
assembly. The existing MachineInstr::isRegReDefinedByTwoAddr was very
close to doing what is needed, so this revision makes a few changes to
that method and also renames it to isRegTiedToUseOperand (for consistency
with the very similar isRegTiedToDefOperand and because it handles both
two-address instructions and inline assembly with tied registers).
llvm-svn: 68714
|
| |
|
|
|
|
| |
attached testcase.
llvm-svn: 68712
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
in addition to ZERO_EXTEND and SIGN_EXTEND. Fix a bug in the
way it checked for live-out values, and simplify the way it
find users by using SDNode::use_iterator's (relatively) new
features. Also, make it slightly more permissive on targets
with free truncates.
In SelectionDAGBuild, avoid creating ANY_EXTEND nodes that are
larger than necessary. If the target's SwitchAmountTy has
enough bits, use it. This exposes the truncate to optimization
early, enabling more optimizations.
llvm-svn: 68670
|
| |
|
|
|
|
|
|
|
|
| |
eagerly. This helps avoid CopyToReg nodes in some cases where they
aren't needed, and also helps subsequent optimizer heuristics
in cases where the extra nodes would cause the node to appear
to have multiple results. This doesn't have a significant impact
currently; it'll help an upcoming change.
llvm-svn: 68667
|
| |
|
|
|
|
| |
directly as a return value type.
llvm-svn: 68647
|
| |
|
|
| |
llvm-svn: 68614
|
| |
|
|
| |
llvm-svn: 68607
|
| |
|
|
|
|
|
|
|
|
|
| |
avoiding sign extension for the top octet. For "negative" chars, we'd print
stuff like:
.asciz "\702...
now we print:
.asciz "\302...
llvm-svn: 68577
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
with SUBREG_TO_REG, teach SimpleRegisterCoalescing to coalesce
SUBREG_TO_REG instructions (which are similar to INSERT_SUBREG
instructions), and teach the DAGCombiner to take advantage of this on
targets which support it. This eliminates many redundant
zero-extension operations on x86-64.
This adds a new TargetLowering hook, isZExtFree. It's similar to
isTruncateFree, except it only applies to actual definitions, and not
no-op truncates which may not zero the high bits.
Also, this adds a new optimization to SimplifyDemandedBits: transform
operations like x+y into (zext (add (trunc x), (trunc y))) on targets
where all the casts are no-ops. In contexts where the high part of the
add is explicitly masked off, this allows the mask operation to be
eliminated. Fix the DAGCombiner to avoid undoing these transformations
to eliminate casts on targets where the casts are no-ops.
Also, this adds a new two-address lowering heuristic. Since
two-address lowering runs before coalescing, it helps to be able to
look through copies when deciding whether commuting and/or
three-address conversion are profitable.
Also, fix a bug in LiveInterval::MergeInClobberRanges. It didn't handle
the case that a clobber range extended both before and beyond an
existing live range. In that case, multiple live ranges need to be
added. This was exposed by the new subreg coalescing code.
Remove 2008-05-06-SpillerBug.ll. It was bugpoint-reduced, and the
spiller behavior it was looking for no longer occurrs with the new
instruction selection.
llvm-svn: 68576
|
| |
|
|
| |
llvm-svn: 68569
|
| |
|
|
|
|
| |
llvm.dbg.region_end in non-fast mode also.
llvm-svn: 68559
|
| |
|
|
|
|
| |
SelectionDAG do those. This fixes PR3955.
llvm-svn: 68546
|
| |
|
|
|
|
| |
loads when an input node has multiple uses.
llvm-svn: 68398
|
| |
|
|
|
|
|
| |
Note that these are distinct from TargetInstrInfo::INSERT_SUBREG
and TargetInstrInfo::EXTRACT_SUBREG, which are used.
llvm-svn: 68355
|
| |
|
|
|
|
| |
to have access to the line number field. So we convert that info as an operand by custom handling DBG_STOPPOINT in legalize.
llvm-svn: 68329
|
| |
|
|
| |
llvm-svn: 68134
|
| |
|
|
|
|
|
|
| |
entered via fall-through. Don't miss fallthroughs from blocks
terminated by conditional branches. Also, move
isOnlyReachableByFallthrough out of line.
llvm-svn: 68129
|
| |
|
|
| |
llvm-svn: 68113
|
| |
|
|
| |
llvm-svn: 68099
|
| |
|
|
|
|
|
|
| |
were subtlely wrong in obscure cases. Patch the testcase
to account for this change.
llvm-svn: 68093
|
| |
|
|
| |
llvm-svn: 68092
|
| |
|
|
|
|
| |
instructions. This fixes lua.
llvm-svn: 68083
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
if the two-address operand is killed.
e.g.
%reg1024<def> = MOV r1
%reg1025<def> = ADD %reg1024, %reg1026
r0 = MOV %reg1025
If it's not possible / profitable to commute ADD, then turning ADD into a LEA saves a copy.
llvm-svn: 68065
|
| |
|
|
| |
llvm-svn: 68059
|
| |
|
|
| |
llvm-svn: 68057
|
| |
|
|
| |
llvm-svn: 68054
|
| |
|
|
|
|
|
| |
when using -soft-float.
Based on a patch by Jakob Stoklund Olesen.
llvm-svn: 67996
|
| |
|
|
|
|
|
| |
a CALL and a RET node more generic. Add a test for tail calls with a void
return.
llvm-svn: 67943
|
| |
|
|
|
|
| |
and for functions that return types that need extending (e.g i1).
llvm-svn: 67934
|