oota-llvm.git
9 years agoR600: Promote i64 loads to v2i32
Tom Stellard [Wed, 2 Jul 2014 20:53:54 +0000 (20:53 +0000)]
R600: Promote i64 loads to v2i32

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212216 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoR600/SI: Adjsut SGPR live ranges before register allocation
Tom Stellard [Wed, 2 Jul 2014 20:53:48 +0000 (20:53 +0000)]
R600/SI: Adjsut SGPR live ranges before register allocation

SGPRs are written by instructions that sometimes will ignore control flow,
which means if you have code like:

if (VGPR0) {
  SGPR0 = S_MOV_B32 0
} else {
  SGPR0 = S_MOV_B32 1
}

The value of SGPR0 will 1 no matter what the condition is.

In order to deal with this situation correctly, we need to view the
program as if it were a single basic block when we calculate the
live ranges for the SGPRs.  They way we actually update the live
range is by iterating over all of the segments in each LiveRange
object and setting the end of each segment equal to the start of
the next segment.  So a live range like:

[3888r,9312r:0)[10032B,10384B:0)  0@3888r

will become:

[3888r,10032B:0)[10032B,10384B:0)  0@3888r

This change will allow us to use SALU instructions within branches.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212215 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoR600/SI: Add verifier check for immediates in register operands.
Tom Stellard [Wed, 2 Jul 2014 20:53:44 +0000 (20:53 +0000)]
R600/SI: Add verifier check for immediates in register operands.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212214 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove non-static field initializer to appease MSVC
Alexey Samsonov [Wed, 2 Jul 2014 20:25:42 +0000 (20:25 +0000)]
Remove non-static field initializer to appease MSVC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212212 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFix configure+make build.
Rafael Espindola [Wed, 2 Jul 2014 20:05:48 +0000 (20:05 +0000)]
Fix configure+make build.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212210 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMove CFG building code to a new lib/MC/MCAnalysis library.
Rafael Espindola [Wed, 2 Jul 2014 19:49:34 +0000 (19:49 +0000)]
Move CFG building code to a new lib/MC/MCAnalysis library.

The new library is 150KB on a Release+Asserts build, so it is quiet a bit of
code that regular users of MC don't need to link with now.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212209 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDebugInfo: Ensure that all debug location scope chains from instructions within a...
David Blaikie [Wed, 2 Jul 2014 18:32:05 +0000 (18:32 +0000)]
DebugInfo: Ensure that all debug location scope chains from instructions within a function, lead to the function itself.

Originally committed in r211723, reverted in r211724 due to failure
cases found and fixed (ArgumentPromotion: r211872, Inlining: r212065),
committed again in r212085 and reverted again in r212089 after fixing
some other cases, such as debug info subprogram lists not keeping track
of the function they represent (r212128) and then short-circuiting
things like LiveDebugVariables that build LexicalScopes for functions
that might not have full debug info.

And again, I believe the invariant actually holds for some reasonable
amount of code (but I'll keep an eye on the buildbots and see what
happens... ).

Original commit message:

PR20038: DebugInfo: Inlined call sites where the caller has debug info
but the call itself has no debug location.

This situation does bad things when inlined, so I've fixed Clang not to
produce inlinable call sites without locations when the caller has debug
info (in the one case where I could find that this occurred). This
updates the PR20038 test case to be what clang now produces, and readds
the assertion that had to be removed due to this bug.

I've also beefed up the debug info verifier to help diagnose these
issues in the future, and I hope to add checks to the inliner to just
assert-fail if it encounters this situation. If, in the future, we
decide we have to cope with this situation, the right thing to do is
probably to just remove all the DebugLocs from the inlined instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212205 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[RegAllocGreedy] Provide a subtarget hook to disable the local reassignment
Quentin Colombet [Wed, 2 Jul 2014 18:32:04 +0000 (18:32 +0000)]
[RegAllocGreedy] Provide a subtarget hook to disable the local reassignment
heuristic.
By default, no functionality change.
This is a follow-up of r212099.

This hook provides a finer grain to control the optimization.

<rdar://problem/17444599>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212204 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDon't try to construct debug LexicalScopes hierarchy for functions that do not have...
David Blaikie [Wed, 2 Jul 2014 18:31:35 +0000 (18:31 +0000)]
Don't try to construct debug LexicalScopes hierarchy for functions that do not have top level debug information.

If a function isn't actually in a CU's subprogram list in the debug info
metadata, ignore all the DebugLocs and don't try to build scopes, track
variables, etc.

While this is possibly a minor optimization, it's also a correctness fix
for an incoming patch that will add assertions to LexicalScopes and the
debug info verifier to ensure that all scope chains lead to debug info
for the current function.

Fix up a few test cases that had broken/incomplete debug info that could
violate this constraint.

Add a test case where this occurs by design (inlining a
debug-info-having function in an attribute nodebug function - we want
this to work because /if/ the nodebug function is then inlined into a
debug-info-having function, it should be fine (and will work fine - we
just stitch the scopes up as usual), but should the inlining not happen
we need to not assert fail either).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212203 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoConstify the Function pointers in the result of makeSubprogramMap
David Blaikie [Wed, 2 Jul 2014 18:30:05 +0000 (18:30 +0000)]
Constify the Function pointers in the result of makeSubprogramMap

These don't need to be mutable and callers being added soon in CodeGen
won't have access to non-const Module&.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212202 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAArch64: Re-enable AArch64AddressTypePromotion
Duncan P. N. Exon Smith [Wed, 2 Jul 2014 18:17:40 +0000 (18:17 +0000)]
AArch64: Re-enable AArch64AddressTypePromotion

This reverts commits r212189 and r212190.

While this pass was accidentally disabled (until r212073), r205437
slipped in a use of `auto` that should have been `auto&`.

This fixes PR20188.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212201 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAArch64: Remove unnecessary parens
Duncan P. N. Exon Smith [Wed, 2 Jul 2014 18:14:03 +0000 (18:14 +0000)]
AArch64: Remove unnecessary parens

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212199 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoR600: Fix crashes when an illegal type load or store is not handled.
Matt Arsenault [Wed, 2 Jul 2014 17:44:53 +0000 (17:44 +0000)]
R600: Fix crashes when an illegal type load or store is not handled.

I don't think anything hits this now, but will be exposed in future
patches.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212197 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoJust adding a getHalfTy method to IRBuilder for completeness.
Puyan Lotfi [Wed, 2 Jul 2014 17:33:00 +0000 (17:33 +0000)]
Just adding a getHalfTy method to IRBuilder for completeness.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212195 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAArch64: Merge isa with dyn_cast
Duncan P. N. Exon Smith [Wed, 2 Jul 2014 17:26:39 +0000 (17:26 +0000)]
AArch64: Merge isa with dyn_cast

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212194 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoXFAIL the test to go with r202189
Duncan P. N. Exon Smith [Wed, 2 Jul 2014 17:07:03 +0000 (17:07 +0000)]
XFAIL the test to go with r202189

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212190 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAArch64: Temporarily disable AArch64AddressTypePromotion
Duncan P. N. Exon Smith [Wed, 2 Jul 2014 17:03:16 +0000 (17:03 +0000)]
AArch64: Temporarily disable AArch64AddressTypePromotion

Temporarily disable AArch64AddressTypePromotion, which was effectively
re-enabled in r212073 and r212075, while I look into PR20188.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212189 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[ASan] Print exact source location of global variables in error reports.
Alexey Samsonov [Wed, 2 Jul 2014 16:54:41 +0000 (16:54 +0000)]
[ASan] Print exact source location of global variables in error reports.

See https://code.google.com/p/address-sanitizer/issues/detail?id=299 for the
original feature request.

Introduce llvm.asan.globals metadata, which Clang (or any other frontend)
may use to report extra information about global variables to ASan
instrumentation pass in the backend. This metadata replaces
llvm.asan.dynamically_initialized_globals that was used to detect init-order
bugs. llvm.asan.globals contains the following data for each global:
  1) source location (file/line/column info);
  2) whether it is dynamically initialized;
  3) whether it is blacklisted (shouldn't be instrumented).

Source location data is then emitted in the binary and can be picked up
by ASan runtime in case it needs to print error report involving some global.
For example:

  0x... is located 4 bytes to the right of global variable 'C::array' defined in '/path/to/file:17:8' (0x...) of size 40

These source locations are printed even if the binary doesn't have any
debug info.

This is an ABI-breaking change. ASan initialization is renamed to
__asan_init_v4(). Pre-built libraries compiled with older Clang will not work
with the fresh runtime.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212188 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRevert "Revert "MachineScheduler: better book-keeping for asserts.""
Chad Rosier [Wed, 2 Jul 2014 16:46:08 +0000 (16:46 +0000)]
Revert "Revert "MachineScheduler: better book-keeping for asserts.""

This reverts commit r212109, which reverted r212088.

However, disable the assert as it's not necessary for correctness.  There are
several corner cases that the assert needed to handle better for in-order
scheduling, but none of them are incorrect scheduler behavior. The assert is
mainly there to collect good unit tests like this and ensure that the
target-independent scheduler is working as expected with the various machine
models.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212187 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAlso document the 'arc commit' commands in the 'Committing a change' section of the...
Sylvestre Ledru [Wed, 2 Jul 2014 15:25:25 +0000 (15:25 +0000)]
Also document the 'arc commit' commands in the 'Committing a change' section of the Phabricator doc

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212184 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoX86: When combining shuffles just remove shuffles that are completely redundant.
Benjamin Kramer [Wed, 2 Jul 2014 15:09:44 +0000 (15:09 +0000)]
X86: When combining shuffles just remove shuffles that are completely redundant.

CombineTo doesn't allow replacing a node with itself so this would crash if the
combined shuffle is the same as the input shuffle.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212181 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoUndefine R2, R4, R6 after use.
Axel Naumann [Wed, 2 Jul 2014 14:40:35 +0000 (14:40 +0000)]
Undefine R2, R4, R6 after use.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212179 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAVX-512: dec/inc instructions are slow on KNL
Elena Demikhovsky [Wed, 2 Jul 2014 14:11:05 +0000 (14:11 +0000)]
AVX-512: dec/inc instructions are slow on KNL
After Alexey Volkov, I'm adding the same property for KNL, that prefers ADD/SUB instead of INC/DEC.
Added a test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212178 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMove operator[] to DomTreeNodeBase
Matt Arsenault [Wed, 2 Jul 2014 06:50:48 +0000 (06:50 +0000)]
Move operator[] to DomTreeNodeBase

The comment in base even refers to it, but it was only defined
in the subclass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212169 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFix missing const
Matt Arsenault [Wed, 2 Jul 2014 06:45:26 +0000 (06:45 +0000)]
Fix missing const

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212168 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoInstCombine: Optimize x/INT_MIN to x==INT_MIN
David Majnemer [Wed, 2 Jul 2014 06:42:13 +0000 (06:42 +0000)]
InstCombine: Optimize x/INT_MIN to x==INT_MIN

The result of x/INT_MIN is either 0 or 1, we can just use an icmp
instead.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212167 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[cleanup] Hoist an if-else chain on ISD opcodes (really designed for
Chandler Carruth [Wed, 2 Jul 2014 06:23:34 +0000 (06:23 +0000)]
[cleanup] Hoist an if-else chain on ISD opcodes (really designed for
switches) into a switch, and sink them into a dispatch function that can
return the result rather than awkward variable setting with breaks.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212166 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoInstCombine: Add a vector variant test for PR20186
David Majnemer [Wed, 2 Jul 2014 06:14:13 +0000 (06:14 +0000)]
InstCombine: Add a vector variant test for PR20186

No functional change, just adding more test coverage that was meant to
go in with r212164.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212165 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoInstCombine: Don't turn -(x/INT_MIN) -> x/INT_MIN
David Majnemer [Wed, 2 Jul 2014 06:07:09 +0000 (06:07 +0000)]
InstCombine: Don't turn -(x/INT_MIN) -> x/INT_MIN

It is not safe to negate the smallest signed integer, doing so yields
the same number back.

This fixes PR20186.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212164 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAdd range for-loop iterator adapter for cases in SwitchInst.
Owen Anderson [Wed, 2 Jul 2014 05:32:13 +0000 (05:32 +0000)]
Add range for-loop iterator adapter for cases in SwitchInst.

Patch by Marcello Maggioni, reviewed by Reid Kleckner.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212163 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoaarch64: support target-specific .req assembler directive
Saleem Abdulrasool [Wed, 2 Jul 2014 04:50:23 +0000 (04:50 +0000)]
aarch64: support target-specific .req assembler directive

Based on the support for .req on ARM. The aarch64 variant has to keep track if
the alias register was a vector register (v0-31) or a general purpose or
VFP/Advanced SIMD ([bhsdq]0-31) register.

Patch by Janne Grunau!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212161 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[cleanup] Remove dead 'break;' statements that I meant to nuke in
Chandler Carruth [Wed, 2 Jul 2014 04:39:34 +0000 (04:39 +0000)]
[cleanup] Remove dead 'break;' statements that I meant to nuke in
r212158 but missed.

Thanks to Craig for spotting the goof!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212159 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[cleanup] Hoist the promotion dispatch logic into the promote function
Chandler Carruth [Wed, 2 Jul 2014 03:07:15 +0000 (03:07 +0000)]
[cleanup] Hoist the promotion dispatch logic into the promote function
so that we can use return to express it more cleanly and avoid so many
nested switch statements.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212158 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[cleanup] Nuke the 'VectorOp' bit of the promote method names.
Chandler Carruth [Wed, 2 Jul 2014 03:07:11 +0000 (03:07 +0000)]
[cleanup] Nuke the 'VectorOp' bit of the promote method names.

This doesn't add any information for methods in the VectorLegalizer
class that clearly take SDAG operations to legalize.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212157 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[x86] Clean up and modernize the doxygen and API comments for the vector
Chandler Carruth [Wed, 2 Jul 2014 02:16:57 +0000 (02:16 +0000)]
[x86] Clean up and modernize the doxygen and API comments for the vector
operation legalization code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212155 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoBreak out subtarget initialization that dependent variables need into
Eric Christopher [Wed, 2 Jul 2014 01:14:43 +0000 (01:14 +0000)]
Break out subtarget initialization that dependent variables need into
a separate function and clean up calling convention for helper function.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212153 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoUnify these two lines.
Eric Christopher [Wed, 2 Jul 2014 01:02:28 +0000 (01:02 +0000)]
Unify these two lines.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212152 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMove MipsJITInfo to the subtarget rather than the target machine.
Eric Christopher [Wed, 2 Jul 2014 00:54:12 +0000 (00:54 +0000)]
Move MipsJITInfo to the subtarget rather than the target machine.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212151 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove unnecessary include.
Eric Christopher [Wed, 2 Jul 2014 00:54:10 +0000 (00:54 +0000)]
Remove unnecessary include.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212150 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove the cached InstrItineraryData on the TargetMachine, it's unnecessary.
Eric Christopher [Wed, 2 Jul 2014 00:54:07 +0000 (00:54 +0000)]
Remove the cached InstrItineraryData on the TargetMachine, it's unnecessary.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212149 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove the recommendation against using std::function
Reid Kleckner [Wed, 2 Jul 2014 00:42:07 +0000 (00:42 +0000)]
Remove the recommendation against using std::function

Clang-cl supports MSVC-style RTTI now, and we can even compile
typeid(...) with /GR-.  Just don't instantiate std::function with a
polymorphic type, or bad things will happen.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212148 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMove the subtarget dependent features from XCoreTargetMachine
Eric Christopher [Wed, 2 Jul 2014 00:10:09 +0000 (00:10 +0000)]
Move the subtarget dependent features from XCoreTargetMachine
down to the subtarget.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212147 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMake XCoreSelectionDAGInfo take a DataLayout since it only needs
Eric Christopher [Wed, 2 Jul 2014 00:10:05 +0000 (00:10 +0000)]
Make XCoreSelectionDAGInfo take a DataLayout since it only needs
that information.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212146 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAlso run clang-format on llvm-nm.cpp to tidy things up. No functional changes.
Kevin Enderby [Tue, 1 Jul 2014 22:44:51 +0000 (22:44 +0000)]
Also run clang-format on llvm-nm.cpp to tidy things up. No functional changes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212143 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRun clang-format on llvm-size.cpp to tidy things up. No functional changes.
Kevin Enderby [Tue, 1 Jul 2014 22:26:31 +0000 (22:26 +0000)]
Run clang-format on llvm-size.cpp to tidy things up. No functional changes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212141 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[FastISel] Factor out stackmap intrinsic selection code into a dedicated helper metho...
Juergen Ributzka [Tue, 1 Jul 2014 22:25:49 +0000 (22:25 +0000)]
[FastISel] Factor out stackmap intrinsic selection code into a dedicated helper method. NFCI.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212140 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoX86: remove atomic instructions *after* we've iterated through them.
Tim Northover [Tue, 1 Jul 2014 22:10:30 +0000 (22:10 +0000)]
X86: remove atomic instructions *after* we've iterated through them.

Otherwise they get freed and the implicit "isa<XYZ>" tests following
turn out badly (at least under sanitizers).

Also corrects the ordering of unordered atomic stores.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212136 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[DAG] Pass the argument list to the CallLoweringInfo via move semantics. NFCI.
Juergen Ributzka [Tue, 1 Jul 2014 22:01:54 +0000 (22:01 +0000)]
[DAG] Pass the argument list to the CallLoweringInfo via move semantics. NFCI.

The argument list vector is never used after it has been passed to the
CallLoweringInfo and moving it to the CallLoweringInfo is cleaner and
pretty much as cheap as keeping a pointer to it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212135 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoX86: delegate expanding atomic libcalls to generic code.
Tim Northover [Tue, 1 Jul 2014 21:44:59 +0000 (21:44 +0000)]
X86: delegate expanding atomic libcalls to generic code.

On targets without cmpxchg16b or cmpxchg8b, the borderline atomic
operations were slipping through the gaps.

X86AtomicExpand.cpp was delegating to ISelLowering. Generic
ISelLowering was delegating to X86ISelLowering and X86ISelLowering was
asserting. The correct behaviour is to expand to a libcall, preferably
in generic ISelLowering.

This can be achieved by X86ISelLowering deciding it doesn't want the
faff after all.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212134 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoOptimize InstCombine stack memory consumption
Reid Kleckner [Tue, 1 Jul 2014 21:36:20 +0000 (21:36 +0000)]
Optimize InstCombine stack memory consumption

This patch reduces the stack memory consumption of the InstCombine
function "isOnlyCopiedFromConstantGlobal() ", that in certain conditions
could overflow the stack because of excessive recursiveness.

For example, in a case like this:

%0 = alloca [50025 x i32], align 4
%1 = getelementptr inbounds [50025 x i32]* %0, i64 0, i64 0
store i32 0,                         i32* %1
%2 = getelementptr inbounds          i32* %1, i64 1
store i32 1,                         i32* %2
%3 = getelementptr inbounds          i32* %2, i64 1
store i32 2,                         i32* %3
%4 = getelementptr inbounds          i32* %3, i64 1
store i32 3,                         i32* %4
%5 = getelementptr inbounds          i32* %4, i64 1
store i32 4,                         i32* %5
%6 = getelementptr inbounds          i32* %5, i64 1
store i32 5,                         i32* %6
...

This piece of code crashes llvm when trying to apply instcombine on
desktop. On embedded devices this could happen with a much lower limit
of recursiveness.  Some instructions (getelementptr and bitcasts) make
the function recursively call itself on their uses, which is what makes
the example above consume so much stack (it becomes a recursive
depth-first tree visit with a very big depth).

The patch changes the algorithm to be semantically equivalent, but
iterative instead of recursive and the visiting order to be from a
depth-first visit to a breadth-first visit (visit all the instructions
of the current level before the ones of the next one).

Now if a lot of memory is required a heap allocation is done instead of
the the stack allocation, avoiding the possible crash.

Reviewed By: rnk

Differential Revision: http://reviews.llvm.org/D4355

Patch by Marcello Maggioni!  We don't generally commit large stress test
that look for out of memory conditions, so I didn't request that one be
added to the patch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212133 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMove remaining LLVM_ENABLE_DUMP conditionals out of the headers
Alp Toker [Tue, 1 Jul 2014 21:19:13 +0000 (21:19 +0000)]
Move remaining LLVM_ENABLE_DUMP conditionals out of the headers

This macro is sometimes defined manually but isn't (and doesn't need to be) in
llvm-config.h so shouldn't appear in the headers, likewise NDEBUG.

Instead switch them over to LLVM_DUMP_METHOD on the definitions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212130 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDebugInfo: Keep track of subprograms who's arguments have been promoted.
David Blaikie [Tue, 1 Jul 2014 21:13:37 +0000 (21:13 +0000)]
DebugInfo: Keep track of subprograms who's arguments have been promoted.

Matching behavior with DeadArgumentElimination (and leveraging some
now-common infrastructure), keep track of the function from debug info
metadata if arguments are promoted.

This may produce interesting debug info - since the arguments may be
missing or of different types... but at least backtraces, inlining, etc,
will be correct.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212128 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMove the subtarget dependent features from SystemZTargetMachine
Eric Christopher [Tue, 1 Jul 2014 20:19:02 +0000 (20:19 +0000)]
Move the subtarget dependent features from SystemZTargetMachine
down to the subtarget. Add an initialization routine to assist.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212124 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove the use and initialization of the target machine and subtarget
Eric Christopher [Tue, 1 Jul 2014 20:18:59 +0000 (20:18 +0000)]
Remove the use and initialization of the target machine and subtarget
from SystemZFrameLowering.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212123 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDebugInfo: Provide a utility for building a mapping from llvm::Function*s to llvm...
David Blaikie [Tue, 1 Jul 2014 20:05:26 +0000 (20:05 +0000)]
DebugInfo: Provide a utility for building a mapping from llvm::Function*s to llvm::DISubprograms

Update DeadArgumentElimintation to use this, with the intent of reusing
the functionality for ArgumentPromotion as well.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212122 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAArch64: fix comment typo
Tim Northover [Tue, 1 Jul 2014 19:47:09 +0000 (19:47 +0000)]
AArch64: fix comment typo

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212120 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoX86: expand atomics in IR instead of as MachineInstrs.
Tim Northover [Tue, 1 Jul 2014 18:53:31 +0000 (18:53 +0000)]
X86: expand atomics in IR instead of as MachineInstrs.

The logic for expanding atomics that aren't natively supported in
terms of cmpxchg loops is much simpler to express at the IR level. It
also allows the normal optimisations and CodeGen improvements to help
out with atomics, instead of using a limited set of possible
instructions..

rdar://problem/13496295

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212119 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[docs] Fix a mangled sentence.
Sean Silva [Tue, 1 Jul 2014 18:22:32 +0000 (18:22 +0000)]
[docs] Fix a mangled sentence.

Fixes PR20169

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212116 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[docs] Remove stray HTML tag.
Sean Silva [Tue, 1 Jul 2014 18:15:00 +0000 (18:15 +0000)]
[docs] Remove stray HTML tag.

Fixes PR20167

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212115 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[X86] AVX512: Allow writemasks with vpcmp
Adam Nemet [Tue, 1 Jul 2014 18:03:45 +0000 (18:03 +0000)]
[X86] AVX512: Allow writemasks with vpcmp

For now I only updated the _alt variants.  The main variants are used by
codegen and that will need a bit more work to trigger.

<rdar://problem/17492620>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212114 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[X86] AVX512: Factor generating the AsmString into avx512_icmp_cc
Adam Nemet [Tue, 1 Jul 2014 18:03:43 +0000 (18:03 +0000)]
[X86] AVX512: Factor generating the AsmString into avx512_icmp_cc

Adding a writemask variant would require a third asm string to be passed to
the template.  Generate the AsmString in the template instead.

No change in X86.td.expanded.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212113 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRevert "MachineScheduler: better book-keeping for asserts."
Chad Rosier [Tue, 1 Jul 2014 17:23:11 +0000 (17:23 +0000)]
Revert "MachineScheduler: better book-keeping for asserts."

This reverts commit r212088, which is causing a number of spec
failures.  Will provide reduced test cases shortly.
PR20057

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212109 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAdd the -arch flag support to llvm-size like what was done to llvm-nm
Kevin Enderby [Tue, 1 Jul 2014 17:19:10 +0000 (17:19 +0000)]
Add the -arch flag support to llvm-size like what was done to llvm-nm
to select the slice out of a Mach-O universal file.  This also includes
support for -arch all, selecting the host architecture by default from
a universal file and checking if -arch is used with a standard Mach-O
it matches that architecture.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212108 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[PeepholeOptimzer] Fix a typo in a comment.
Quentin Colombet [Tue, 1 Jul 2014 16:23:44 +0000 (16:23 +0000)]
[PeepholeOptimzer] Fix a typo in a comment.
Spotted by Amara Emerson.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212106 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove unused typedef. GCC warns about this.
Benjamin Kramer [Tue, 1 Jul 2014 15:39:32 +0000 (15:39 +0000)]
Remove unused typedef. GCC warns about this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212105 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoGlobalOpt: Don't swap private for internal linkage
David Majnemer [Tue, 1 Jul 2014 15:26:50 +0000 (15:26 +0000)]
GlobalOpt: Don't swap private for internal linkage

There were transforms whose *intent* was to downgrade the linkage of
external objects to have internal linkage.

However, it fired on things with private linkage as well.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212104 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoGlobalOpt: FileCheck-ize test
David Majnemer [Tue, 1 Jul 2014 15:26:47 +0000 (15:26 +0000)]
GlobalOpt: FileCheck-ize test

No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212103 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRephrase loop so it doesn't leave unused bools around in Release mode.
Benjamin Kramer [Tue, 1 Jul 2014 14:46:44 +0000 (14:46 +0000)]
Rephrase loop so it doesn't leave unused bools around in Release mode.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212102 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAvoid revocations when possible.
Rafael Espindola [Tue, 1 Jul 2014 14:34:30 +0000 (14:34 +0000)]
Avoid revocations when possible.

This is a small targeted fix for pr20119. The code needs quiet a bit of
refactoring and I added some FIXMEs about it, but I want to get the testcase
passing first.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212101 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[PeepholeOptimizer] Advanced rewriting of copies to avoid cross register banks
Quentin Colombet [Tue, 1 Jul 2014 14:33:36 +0000 (14:33 +0000)]
[PeepholeOptimizer] Advanced rewriting of copies to avoid cross register banks
copies.

This patch extends the peephole optimization introduced in r190713 to produce
register-coalescer friendly copies when possible.

This extension taught the existing cross-bank copy optimization how to deal
with the instructions that generate cross-bank copies, i.e., insert_subreg,
extract_subreg, reg_sequence, and subreg_to_reg.
E.g.
b = insert_subreg e, A, sub0 <-- cross-bank copy
...
C = copy b.sub0 <-- cross-bank copy

Would produce the following code:
b = insert_subreg e, A, sub0 <-- cross-bank copy
...
C = copy A <-- same-bank copy

This patch also introduces a new helper class for that: ValueTracker.
This class implements the logic to look through the copy related instructions
and get the related source.

For now, the advanced rewriting is disabled by default as we are lacking the
semantic on target specific instructions to catch the motivating examples.

Related to <rdar://problem/12702965>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212100 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[RegAllocGreedy] Provide a flag to disable the local reassignment heuristic.
Quentin Colombet [Tue, 1 Jul 2014 14:08:37 +0000 (14:08 +0000)]
[RegAllocGreedy] Provide a flag to disable the local reassignment heuristic.
By default, no functionality change.

Before evicting a local variable, this heuristic tries to find another (set of)
local(s) that can be reassigned to a free color.

In some extreme cases (large basic blocks with tons of local variables), the
compilation time is dominated by the local interference checks that this
heuristic must perform, with no code gen gain.
E.g., the motivating example takes 4 minutes to compile with this heuristic, 12
seconds without.

Improving the situation will likely require to make drastic changes to the
register allocator and/or the interference check framework.

For now, provide this flag to better understand the impact of that heuristic.

<rdar://problem/17444599>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212099 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove obsolete function TargetRegistry::getClosestTargetForJIT()
Alp Toker [Tue, 1 Jul 2014 10:47:13 +0000 (10:47 +0000)]
Remove obsolete function TargetRegistry::getClosestTargetForJIT()

This was kept around "for compatibility through 2.6" in 2009 and is not used or
tested.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212095 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRevert "DebugInfo: Ensure that all debug location scope chains from instructions...
David Blaikie [Tue, 1 Jul 2014 04:11:45 +0000 (04:11 +0000)]
Revert "DebugInfo: Ensure that all debug location scope chains from instructions within a function, lead to the function itself."

This reverts commit r212085.

This breaks the sanitizer bot... & I thought I'd tried pretty hard not
to do that. Guess I need to try harder.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212089 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMachineScheduler: better book-keeping for asserts.
Andrew Trick [Tue, 1 Jul 2014 03:23:13 +0000 (03:23 +0000)]
MachineScheduler: better book-keeping for asserts.

Fixes another test case under PR20057.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212088 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoExecutionEngine::create(): fix interpreter fallback when JIT is unavailable
Alp Toker [Tue, 1 Jul 2014 03:18:49 +0000 (03:18 +0000)]
ExecutionEngine::create(): fix interpreter fallback when JIT is unavailable

ForceInterpreter=false shouldn't disable the interpreter completely because it
can still be necessary to interpret if the target doesn't support JIT.

No obvious way to test this in LLVM, but this matches what
LLVMCreateExecutionEngineForModule() does and fixes the clang-interpreter
example in the clang source tree which uses the ExecutionEngine.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212086 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDebugInfo: Ensure that all debug location scope chains from instructions within a...
David Blaikie [Tue, 1 Jul 2014 03:11:59 +0000 (03:11 +0000)]
DebugInfo: Ensure that all debug location scope chains from instructions within a function, lead to the function itself.

Originally committed in r211723, reverted in r211724 due to failure
cases found and fixed (ArgumentPromotion: r211872, Inlining: r212065),
and I now believe the invariant actually holds for some reasonable
amount of code (but I'll keep an eye on the buildbots and see what
happens... ).

Original commit message:

PR20038: DebugInfo: Inlined call sites where the caller has debug info
but the call itself has no debug location.

This situation does bad things when inlined, so I've fixed Clang not to
produce inlinable call sites without locations when the caller has debug
info (in the one case where I could find that this occurred). This
updates the PR20038 test case to be what clang now produces, and readds
the assertion that had to be removed due to this bug.

I've also beefed up the debug info verifier to help diagnose these
issues in the future, and I hope to add checks to the inliner to just
assert-fail if it encounters this situation. If, in the future, we
decide we have to cope with this situation, the right thing to do is
probably to just remove all the DebugLocs from the inlined instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212085 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFix .seh_stackalloc 0
Reid Kleckner [Tue, 1 Jul 2014 00:42:47 +0000 (00:42 +0000)]
Fix .seh_stackalloc 0

seh_stackalloc 0 is not representable in Win64 SEH info, so emitting it
is a bug.

Reviewers: rnk

Differential Revision: http://reviews.llvm.org/D4334

Patch by Vadim Chugunov!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212081 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoGlobalOpt: Handle non-zero offsets for aliases
David Majnemer [Tue, 1 Jul 2014 00:30:56 +0000 (00:30 +0000)]
GlobalOpt: Handle non-zero offsets for aliases

An alias with an aliasee of a non-zero GEP is not trivially replacable
with it's aliasee.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212079 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoIR: Add a helper to check for LinkOnceODRLinkage
David Majnemer [Tue, 1 Jul 2014 00:30:52 +0000 (00:30 +0000)]
IR: Add a helper to check for LinkOnceODRLinkage

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212078 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoSuppress inlining when the block address is taken
Gerolf Hoflehner [Tue, 1 Jul 2014 00:19:34 +0000 (00:19 +0000)]
Suppress inlining when the block address is taken

Inlining functions with block addresses can cause many problem and requires a
rich infrastructure to support including escape analysis.  At this point the
safest approach to address these problems is by blocking inlining from
happening.

Background:
There have been reports on Ruby segmentation faults triggered by inlining
functions with block addresses like

//Ruby code snippet
vm_exec_core() {
    finish_insn_seq_0 = &&INSN_LABEL_finish;
    INSN_LABEL_finish:
      ;
}

This kind of scenario can also happen when LLVM picks a subset of blocks for
inlining, which is the case with the actual code in the Ruby environment.

LLVM suppresses inlining for such functions when there is an indirect branch.
The attached patch does so even when there is no indirect branch.  Note that
user code like above would not make much sense: using the global for jumping
across function boundaries would be illegal.

Why was there a segfault:

In the snipped above the block with the label is recognized as dead So it is
eliminated. Instead of a block address the cloner stores a constant (sic!) into
the global resulting in the segfault (when the global is used in a goto).

Why had it worked in the past then:

By luck. In older versions vm_exec_core was also inlined but the label address
used was the block label address in vm_exec_core.  So the global jump ended up
in the original function rather than in the caller which accidentally happened
to work.

Test case ./tools/clang/test/CodeGen/indirect-goto.c will fail as a result
of this commit.

rdar://17245966

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212077 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAArch64: Follow-up to r212073
Duncan P. N. Exon Smith [Tue, 1 Jul 2014 00:05:37 +0000 (00:05 +0000)]
AArch64: Follow-up to r212073

In r212073 I missed a call of `use_begin()` that assumed the wrong
semantics.  It's not clear to me at all what this code does without the
fix, so I'm not sure how to write a testcase.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212075 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAArch64: Actually do address type promotion
Duncan P. N. Exon Smith [Mon, 30 Jun 2014 23:42:14 +0000 (23:42 +0000)]
AArch64: Actually do address type promotion

AArch64AddressTypePromotion was doing nothing because it was using the
old semantics of `Use` and `uses()`, when it really wanted to get at the
`users()`.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212073 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoConvert some byval argpromotion grep tests to FileCheck
Reid Kleckner [Mon, 30 Jun 2014 20:44:28 +0000 (20:44 +0000)]
Convert some byval argpromotion grep tests to FileCheck

Surprisingly, the i32* byval parameter is not transformed by
argpromotion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212067 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDebugInfo: Preserve debug location information when transforming a call into an invok...
David Blaikie [Mon, 30 Jun 2014 20:30:39 +0000 (20:30 +0000)]
DebugInfo: Preserve debug location information when transforming a call into an invoke during inlining.

This both improves basic debug info quality, but also fixes a larger
hole whenever we inline a call/invoke without a location (debug info for
the entire inlining is lost and other badness that the debug info
emission code is currently working around but shouldn't have to).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212065 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove unnecessary datalayout string from a test case.
David Blaikie [Mon, 30 Jun 2014 20:26:12 +0000 (20:26 +0000)]
Remove unnecessary datalayout string from a test case.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212063 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoSpeculatively fix some code handling Power64 MachO files
Reid Kleckner [Mon, 30 Jun 2014 20:12:59 +0000 (20:12 +0000)]
Speculatively fix some code handling Power64 MachO files

MSVC was warning on a switch containing only default labels.  In this
instance, it looks like it uncovered a real bug.  :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212062 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agomsan: Stop stripping the 'tail' modifier off of calls
Reid Kleckner [Mon, 30 Jun 2014 20:12:27 +0000 (20:12 +0000)]
msan: Stop stripping the 'tail' modifier off of calls

This probably isn't necessary since msan started to unpoison the return
value shadow memory before all calls.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212061 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoobjdump: Add test for ELF file with no section table
Ed Maste [Mon, 30 Jun 2014 20:03:02 +0000 (20:03 +0000)]
objdump: Add test for ELF file with no section table

This is a test for the fix in r211904.

Differential Revision: http://reviews.llvm.org/D4349

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212059 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRefactor the code in clang to find a file in a PATH like environment variable into...
Ehsan Akhgari [Mon, 30 Jun 2014 19:54:20 +0000 (19:54 +0000)]
Refactor the code in clang to find a file in a PATH like environment variable into a helper function

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212057 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFix 'platform-specific' hyphenations
Alp Toker [Mon, 30 Jun 2014 18:57:16 +0000 (18:57 +0000)]
Fix 'platform-specific' hyphenations

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212056 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoBuild fix for systems without futimes/futimens
Alp Toker [Mon, 30 Jun 2014 18:57:04 +0000 (18:57 +0000)]
Build fix for systems without futimes/futimens

Some versions of Android don't have futimes/futimens and this code wasn't
updated during the recent errc refactoring.

Patch by Luqman Aden!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212055 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAdd the -arch flag support to llvm-nm to select the slice out of a Mach-O
Kevin Enderby [Mon, 30 Jun 2014 18:45:23 +0000 (18:45 +0000)]
Add the -arch flag support to llvm-nm to select the slice out of a Mach-O
universal file.  This also includes support for -arch all, selecting the host
architecture by default from a universal file and checking if -arch is used
with a standard Mach-O it matches that architecture.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212054 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoR600: Move mul combine to separate function
Matt Arsenault [Mon, 30 Jun 2014 17:55:48 +0000 (17:55 +0000)]
R600: Move mul combine to separate function

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212052 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoR600: Remove unused declarations leftover from AMDIL
Matt Arsenault [Mon, 30 Jun 2014 17:37:17 +0000 (17:37 +0000)]
R600: Remove unused declarations leftover from AMDIL

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212051 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDebug info: split out complex DIVariable address expressions into a
Adrian Prantl [Mon, 30 Jun 2014 17:17:35 +0000 (17:17 +0000)]
Debug info: split out complex DIVariable address expressions into a
separate MDNode so they can be uniqued via folding set magic. To conserve
space, DIVariable nodes are still variable-length, with the last two
fields being optional.

No functional change.
http://reviews.llvm.org/D3526

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212050 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[X86] Add support for builtin to read performance monitoring counters.
Andrea Di Biagio [Mon, 30 Jun 2014 17:14:21 +0000 (17:14 +0000)]
[X86] Add support for builtin to read performance monitoring counters.

This patch adds support for a new builtin instruction called
__builtin_ia32_rdpmc.

Builtin '__builtin_ia32_rdpmc' is defined as a 'GCC builtin'; on X86, it can
be used to read performance monitoring counters. It takes as input the index
of the performance counter to read, and returns the value of the specified
performance counter as a 64-bit number.

Calls to this new builtin will map to instruction RDPMC.
The index in input to the builtin call is moved to register %ECX. The result
of the builtin call is the value of the specified performance counter (RDPMC
would return that quantity in registers RDX:RAX).

This patch:
 - Adds builtin int_x86_rdpmc as a GCCBuiltin;
 - Adds a new x86 DAG node called 'RDPMC_DAG';
 - Teaches how to lower this new builtin;
 - Adds an ISel pattern to select instruction RDPMC;
 - Fixes the definition of instruction RDPMC adding %RAX and %RDX as
   implicit definitions, and adding %ECX as implicit use;
 - Adds a LLVM test to verify that the new builtin is correctly selected.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212049 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[OCaml] Documentation improvements.
Peter Zotov [Mon, 30 Jun 2014 16:53:53 +0000 (16:53 +0000)]
[OCaml] Documentation improvements.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212048 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[AArch64] Unsized types don't specify an alignment.
Chad Rosier [Mon, 30 Jun 2014 15:03:00 +0000 (15:03 +0000)]
[AArch64] Unsized types don't specify an alignment.
PR20109

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212045 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[AArch64] Convert mul x, -(pow2 +/- 1) to shift + add/sub.
Chad Rosier [Mon, 30 Jun 2014 14:51:14 +0000 (14:51 +0000)]
[AArch64] Convert mul x, -(pow2 +/- 1) to shift + add/sub.

The combine for mul x, pow2 +/- 1 is unchanged. Test cases for
both combines as well as mul x, pow2 have been added as well.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212044 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agomacho-dump: add code to print LC_ID_DYLIB load commands.
Tim Northover [Mon, 30 Jun 2014 14:40:57 +0000 (14:40 +0000)]
macho-dump: add code to print LC_ID_DYLIB load commands.

I want to check them in lld.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212043 91177308-0d34-0410-b5e6-96231b3b80d8