| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
| |
Also change some pointer arguments to references at some places where
0-pointers are not allowed.
llvm-svn: 192396
|
| |
|
|
| |
llvm-svn: 192395
|
| |
|
|
|
|
|
| |
This makes the API a bit more natural to use and makes it easier to make
LiveRanges implementation details private.
llvm-svn: 192394
|
| |
|
|
|
|
|
|
|
|
| |
LiveRange just manages a list of segments and a list of value numbers
now as LiveInterval did previously, but without having details like spill
weight or a fixed register number.
LiveInterval is now a subclass of LiveRange and simply adds the spill weight
and the register number.
llvm-svn: 192393
|
| |
|
|
|
|
|
|
| |
The Segment struct contains a single interval; multiple instances of this struct
are used to construct a live range, but the struct is not a live range by
itself.
llvm-svn: 192392
|
| |
|
|
| |
llvm-svn: 192391
|
| |
|
|
| |
llvm-svn: 192386
|
| |
|
|
|
|
|
|
| |
DIScopeRef.
A paired commit at clang is required due to changes to DIBuilder.
llvm-svn: 192378
|
| |
|
|
|
|
|
|
| |
template_value are updated to use DIRef.
A paired commit at clang is required due to changes to DIBuilder.
llvm-svn: 192320
|
| |
|
|
|
|
|
| |
This fixes repeated -Wmicrosoft warnings when self-hosting clang on
Windows, and gets us real unsigned enum types with MSVC.
llvm-svn: 192227
|
| |
|
|
| |
llvm-svn: 192218
|
| |
|
|
| |
llvm-svn: 192216
|
| |
|
|
| |
llvm-svn: 192215
|
| |
|
|
| |
llvm-svn: 192199
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This patch fixes an old FIXME by creating a MCTargetStreamer interface
and moving the target specific functions for ARM, Mips and PPC to it.
The ARM streamer is still declared in a common place because it is
used from lib/CodeGen/ARMException.cpp, but the Mips and PPC are
completely hidden in the corresponding Target directories.
I will send an email to llvmdev with instructions on how to use this.
llvm-svn: 192181
|
| |
|
|
| |
llvm-svn: 192118
|
| |
|
|
|
|
| |
assert got copy and pasted to many places.
llvm-svn: 192078
|
| |
|
|
|
|
| |
This will be used to extend constructor aliases in clang.
llvm-svn: 192066
|
| |
|
|
|
|
|
|
|
| |
The most likely case where this error happens is when the user specifies
too many register operands. Don't make it look like an internal LLVM bug
when we can see that the error is coming from an inline asm instruction.
For other instructions we keep the "ran out of registers" error.
llvm-svn: 192041
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When MC was first added, targets could use hasRawTextSupport to keep features
working before they were added to the MC interface.
The design goal of MC is to provide an uniform api for printing assembly and
object files. Short of relaxations and other corner cases, a object file is
just another representation of the assembly.
It was never the intention that targets would keep doing things like
if (hasRawTextSupport())
Set flags in one way.
else
Set flags in another way.
When they do that they create two code paths and the object file is no longer
just another representation of the assembly. This also then requires testing
with llc -filetype=obj, which is extremelly brittle.
This patch removes some of these hacks by replacing them with smaller ones.
The ARM flag setting is trivial, so I just moved it to the constructor. For
Mips, the patch adds two temporary hack directives that allow the assembly
to represent the same things as the object file was already able to.
The hope is that the mips developers will replace the hack directives with
the same ones that gas uses and drop the -print-hack-directives flag.
I will also try to implement a target streamer interface, so that we can
move this out of the common code.
In summary, for any new work, two rules of the thumb are
* Don't use "llc -filetype=obj" in tests.
* Don't add calls to hasRawTextSupport.
llvm-svn: 192035
|
| |
|
|
|
|
| |
of MoveChild, CheckSame, MoveParent. Saves 846 bytes from the X86 DAG isel matcher, ~300 from ARM, ~840 from Hexagon.
llvm-svn: 192026
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
is updated to use DITypeRef.
Move isUnsignedDIType and getOriginalTypeSize from DebugInfo.h to be static
helper functions in DwarfCompileUnit. We already have a static helper function
"isTypeSigned" in DwarfCompileUnit, and a pointer to DwarfDebug is added to
resolve the derived-from field. All three functions need to go across link
for derived-from fields, so we need to get hold of a type identifier map.
A pointer to DwarfDebug is also added to DbgVariable in order to resolve the
derived-from field.
Debug info verifier is updated to check a derived-from field is a TypeRef.
Verifier will not go across link for derived-from fields, in debug info finder,
we go across the link to add derived-from fields to types.
Function getDICompositeType is only used by dragonegg and since dragonegg does
not generate identifier for types, we use an empty map to resolve the
derived-from field.
When printing a derived-from field, we use DITypeRef::getName to either return
the type identifier or getName of the DIType.
A paired commit at clang is required due to changes to DIBuilder.
llvm-svn: 192018
|
| |
|
|
| |
llvm-svn: 192017
|
| |
|
|
| |
llvm-svn: 192016
|
| |
|
|
| |
llvm-svn: 192014
|
| |
|
|
|
|
|
|
| |
pointed to by a dbg_value belonging to a function argument is eliminated
during instruction selection.
rdar://problem/15094721.
llvm-svn: 192011
|
| |
|
|
| |
llvm-svn: 192009
|
| |
|
|
| |
llvm-svn: 192005
|
| |
|
|
| |
llvm-svn: 192004
|
| |
|
|
| |
llvm-svn: 192003
|
| |
|
|
|
|
| |
scope, pass a scope.
llvm-svn: 192002
|
| |
|
|
| |
llvm-svn: 192000
|
| |
|
|
|
|
| |
* two actually due to some weird template thing... investigating that.
llvm-svn: 191998
|
| |
|
|
| |
llvm-svn: 191994
|
| |
|
|
|
|
| |
This has the side effect of using DW_FORM_flag_present on dwarf4 and above.
llvm-svn: 191991
|
| |
|
|
|
|
| |
a flag. No functional change.
llvm-svn: 191990
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
DAGCombiner::visitFP_EXTEND will apply the following transformation:
fold (fpext (load x)) -> (fpext (fptrunc (extload x)))
but the implementation does not handle indexed loads (pre/post inc.), but did
not specifically ignore them either (unlike for extending loads, which it
already ignored), causing an assert when the transformation was applied to an
indexed load. This is the minimal fix for correctness (causing the
transformation to be skipped for indexed loads).
Unfortunately, I don't have an in-tree test case.
llvm-svn: 191989
|
| |
|
|
|
|
| |
way for all platforms.
llvm-svn: 191975
|
| |
|
|
|
|
|
| |
on platforms with relocations in debug info and also temporarily
revert r191800 due to conflicts with the revert of r191792.
llvm-svn: 191967
|
| |
|
|
| |
llvm-svn: 191966
|
| |
|
|
| |
llvm-svn: 191965
|
| |
|
|
| |
llvm-svn: 191964
|
| |
|
|
| |
llvm-svn: 191941
|
| |
|
|
|
|
| |
of MoveChild, CheckSame, MoveParent. Saves 846 bytes from the X86 DAG isel matcher, ~300 from ARM, ~840 from Hexagon.
llvm-svn: 191940
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In the case (shown in the attached test) where a member function
definition was emitted into debug info the following could occur:
1) build the debug info for the member function definition
2) in (1), build the debug info for the member function declaration
3) construct and add the member function declaration DIE
4) add it to its context
5) build its context (the type it is a member of)
6) construct the members and add them to the type
7) except don't add member functions because "getOrCreateSubprogram"
adds the function to its parent anyway
8) except we're only partway through building this subprogram
declaration so it hasn't been added yet - but we returned the partially
constructed DIE (since it's already in the MDNode->DIE mapping to avoid
infinitely recursing trying to create the member function DIE)
9) once the type is constructed, add the member function to it
10) now the members are out of order (the member function being defined
is listed as the last member, even though it was declared as the first)
To avoid this, construct the context of the subprogram DIE before we
query to see if it exists. That way we never end up creating it before
creating its context and ending up in this situation.
Alternatively, the type construction that visits/builds all the members
could call something like getOrCreateSubprogram, but that doesn't ever
do the "add to context" step. Then the type building code would always
be responsible for adding members (and the subprogram "addToContextDIE"
would no-op because the context building would have added the subprogram
declaration to the type/context DIE already).
(the test cases updated were overly-sensitive to offsets or abbreviation
numbers. We don't have a nice way to make these tests more robust as yet
- multiline FileCheck matches would be required)
llvm-svn: 191939
|
| |
|
|
|
|
|
|
|
|
| |
Changed the dwarf aranges code to not use getLabelEndName, as it turns out it's not reliable to call that given user-defined section names. Section names can have characters in that aren't representable as symbol names.
The dwarf-aranges test case has been updated to include a special character, to check this.
This fixes pr17416.
llvm-svn: 191932
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
DIE::addChild had a shortcircuit that silently no-op'd when a child was
readded to the same parent. This hid some quirky/redundant code in
DwarfDebug/CompileUnit. By removing that functionality and replacing it
with an assert I was able to find and cleanup those cases, mostly
centering around adding members to types in various circumstances.
1) The original oddity I noticed while working on type units (which
actually was helping me in the short term, by accident) was the
addToContextOwner call in constructTypeDIE. This call was completely
bogus (why was it only done for non-virtual types? what relevance does
that have at all) and redundant with the more uniform addToContextOwner
made in getOrCreateTypeDIE.
2) If a member function definition was visited (createSubprogramDIE), it
would attempt to build the member function declaration. The declaration
DIE would then be added to its context, but in building the context (the
type for which this function is a member) the members of the type would
be added to the type automatically, so by the time the context was
constructed, the member function was already associated with it.
3) The same as (2) but without the member function being constructed
first. Whenever a type was constructed, the members would be created and
member functions would be created by getOrCreateSubprogramDIE - this
would lead to the subprogram being added to the (incomplete) type
already, then the general member-construction code would add it again.
llvm-svn: 191928
|
| |
|
|
| |
llvm-svn: 191927
|
| |
|
|
|
|
|
| |
going to be empty. This is particularly important for the gnu
pubnames case since we're emitting a relocation to the section.
llvm-svn: 191915
|
| |
|
|
| |
llvm-svn: 191914
|