platform/upstream/llvm.git
10 years agoRevert r213437
Warren Hunt [Fri, 25 Jul 2014 20:52:51 +0000 (20:52 +0000)]
Revert r213437
We no longer plan to use __except_hander3 and rather use custom
personality functions per __try block.

llvm-svn: 213971

10 years ago[stack protector] Add test cases for thumb and thumb2.
Akira Hatanaka [Fri, 25 Jul 2014 19:47:46 +0000 (19:47 +0000)]
[stack protector] Add test cases for thumb and thumb2.

<rdar://problem/12475629>

llvm-svn: 213970

10 years agoFix unsafe memory access
Rui Ueyama [Fri, 25 Jul 2014 19:46:31 +0000 (19:46 +0000)]
Fix unsafe memory access

The following expression

  m[i] = m[j]

where m is a DenseMap and i != j is not safe. m[j] returns a
reference, which would be invalidated when a rehashing occurs.
If rehashing occurs to make room for m[i], m[j] becomes
invalid, and that invalid reference would be used as the RHS
value of the expression.

llvm-svn: 213969

10 years agoObjective-C. Warn if protocol used in an @protocol
Fariborz Jahanian [Fri, 25 Jul 2014 19:45:01 +0000 (19:45 +0000)]
Objective-C. Warn if protocol used in an @protocol
expression is a forward declaration as this results
in undefined behavior. rdar://17768630

llvm-svn: 213968

10 years ago[stack protector] Fix a potential security bug in stack protector where the
Akira Hatanaka [Fri, 25 Jul 2014 19:31:34 +0000 (19:31 +0000)]
[stack protector] Fix a potential security bug in stack protector where the
address of the stack guard was being spilled to the stack.

Previously the address of the stack guard would get spilled to the stack if it
was impossible to keep it in a register. This patch introduces a new target
independent node and pseudo instruction which gets expanded post-RA to a
sequence of instructions that load the stack guard value. Register allocator
can now just remat the value when it can't keep it in a register.

<rdar://problem/12475629>

llvm-svn: 213967

10 years agoFix arc4random detection.
Brad Smith [Fri, 25 Jul 2014 19:28:44 +0000 (19:28 +0000)]
Fix arc4random detection.

Patch by Pascal Stumpf.

llvm-svn: 213966

10 years agoMinor fixups to documentation for Process::Launch()/DoLaunch().
Todd Fiala [Fri, 25 Jul 2014 19:24:52 +0000 (19:24 +0000)]
Minor fixups to documentation for Process::Launch()/DoLaunch().

The code had moved forward with changes for using ProcessLaunchInfo,
but the documentation still referred to arguments that no longer
get passed to these methods.

llvm-svn: 213965

10 years agoReturn a StringRef in getDefaultUniversalArchName.
Rafael Espindola [Fri, 25 Jul 2014 19:22:51 +0000 (19:22 +0000)]
Return a StringRef in getDefaultUniversalArchName.

Patch by Stephen Drake.

llvm-svn: 213964

10 years agoRemove dead code.
Rafael Espindola [Fri, 25 Jul 2014 19:06:39 +0000 (19:06 +0000)]
Remove dead code.

llvm-svn: 213963

10 years ago[Fix] Added RuntimeDebugBuilder to the build
Johannes Doerfert [Fri, 25 Jul 2014 17:49:55 +0000 (17:49 +0000)]
[Fix] Added RuntimeDebugBuilder to the build

llvm-svn: 213962

10 years ago[PowerPC] Support TLS on PPC32/ELF
Hal Finkel [Fri, 25 Jul 2014 17:47:22 +0000 (17:47 +0000)]
[PowerPC] Support TLS on PPC32/ELF

Patch by Justin Hibbits!

llvm-svn: 213960

10 years ago[FastISel][AArch64] Add support for frameaddress intrinsic.
Juergen Ributzka [Fri, 25 Jul 2014 17:47:14 +0000 (17:47 +0000)]
[FastISel][AArch64] Add support for frameaddress intrinsic.

This commit implements the frameaddress intrinsic for the AArch64 architecture
in FastISel.

There were two test cases that pretty much tested the same, so I combined them
to a single test case.

Fixes <rdar://problem/17811834>

llvm-svn: 213959

10 years agoclang-cl: Add support for /Zp
David Majnemer [Fri, 25 Jul 2014 17:30:10 +0000 (17:30 +0000)]
clang-cl: Add support for /Zp

CL's /Zp flag is analogous to GCC's -fpack-struct, it controls the
default maximum alignment of records.

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

llvm-svn: 213958

10 years agoMove -verify-use-list-order into llvm-uselistorder
Duncan P. N. Exon Smith [Fri, 25 Jul 2014 17:13:03 +0000 (17:13 +0000)]
Move -verify-use-list-order into llvm-uselistorder

Ugh.  Turns out not even transformation passes link in how to read IR.
I sincerely believe the buildbots will finally agree with my system
after this though.  (I don't really understand why all of this has been
working on my system, but not on all the buildbots.)

Create a new tool called llvm-uselistorder to use for verifying use-list
order.  For now, just dump everything from the (now defunct)
-verify-use-list-order pass into the tool.

This might be a better way to test use-list order anyway.

Part of PR5680.

llvm-svn: 213957

10 years agoReapply "DebugInfo: Don't put fission type units in comdat sections."
David Blaikie [Fri, 25 Jul 2014 17:11:58 +0000 (17:11 +0000)]
Reapply "DebugInfo: Don't put fission type units in comdat sections."

This recommits r208930, r208933, and r208975 (by reverting r209338) and
reverts r209529 (the FIXME to readd this functionality once the tools
were fixed) now that DWP has been fixed to cope with a single section
for all fission type units.

Original commit message:

"Since type units in the dwo file are handled by a debug aware tool,
they don't need to leverage the ELF comdat grouping to implement
deduplication. Avoid creating all the .group sections for these as a
space optimization."

llvm-svn: 213956

10 years agoClaim AA generally as code owner
Hal Finkel [Fri, 25 Jul 2014 16:45:10 +0000 (16:45 +0000)]
Claim AA generally as code owner

As per nominations from Chandler and Arnold.

llvm-svn: 213955

10 years agoFix MSVC2012 build error in UseListOrder.cpp
Hans Wennborg [Fri, 25 Jul 2014 16:22:13 +0000 (16:22 +0000)]
Fix MSVC2012 build error in UseListOrder.cpp

I think the compiler got confused by the nested DEBUG macros.
It was failing with:

  UseListOrder.cpp(80) : error C2059: syntax error : '}'

llvm-svn: 213954

10 years agoBitcode: Don't optimize constants when preserving use-list order
Duncan P. N. Exon Smith [Fri, 25 Jul 2014 16:13:16 +0000 (16:13 +0000)]
Bitcode: Don't optimize constants when preserving use-list order

`ValueEnumerator::OptimizeConstants()` creates forward references within
the constant pools, which makes predicting constants' use-list order
difficult.  For now, just disable the optimization.

This can be re-enabled in the future in one of two ways:

  - Enable a limited version of this optimization that doesn't create
    forward references.  One idea is to categorize constants by their
    "height" and make that the top-level sort.

  - Enable it entirely.  This requires predicting how may times each
    constant will be recreated as its operands' and operands' operands'
    (etc.) forward references get resolved.

This is part of PR5680.

llvm-svn: 213953

10 years agoRecommit r212203: Don't try to construct debug LexicalScopes hierarchy for functions...
David Blaikie [Fri, 25 Jul 2014 16:10:16 +0000 (16:10 +0000)]
Recommit r212203: Don't try to construct debug LexicalScopes hierarchy for functions that do not have top level debug information.

Reverted by Eric Christopher (Thanks!) in r212203 after Bob Wilson
reported LTO issues. Duncan Exon Smith and Aditya Nandakumar helped
provide a reduced reproduction, though the failure wasn't too hard to
guess, and even easier with the example to confirm.

The assertion that the subprogram metadata associated with an
llvm::Function matches the scope data referenced by the DbgLocs on the
instructions in that function is not valid under LTO. In LTO, a C++
inline function might exist in multiple CUs and the subprogram metadata
nodes will refer to the same llvm::Function. In this case, depending on
the order of the CUs, the first intance of the subprogram metadata may
not be the one referenced by the instructions in that function and the
assertion will fail.

A test case (test/DebugInfo/cross-cu-linkonce-distinct.ll) is added, the
assertion removed and a comment added to explain this situation.

This was then reverted again in r213581 as it caused PR20367. The root
cause of this was the early exit in LiveDebugVariables meant that
spurious DBG_VALUE intrinsics that referenced dead variables were not
removed, causing an assertion/crash later on. The fix is to have
LiveDebugVariables strip all DBG_VALUE intrinsics in functions without
debug info as they're not needed anyway. Test case added to cover this
situation (that occurs when a debug-having function is inlined into a
nodebug function) in test/DebugInfo/X86/nodebug_with_debug_loc.ll

Original commit message:

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).

llvm-svn: 213952

10 years agoDebugInfo: Fix up some test cases to have more correct debug info metadata.
David Blaikie [Fri, 25 Jul 2014 16:05:18 +0000 (16:05 +0000)]
DebugInfo: Fix up some test cases to have more correct debug info metadata.

* Add CUs to the named CU node
* Add missing DW_TAG_subprogram nodes
* Add llvm::Functions to the DW_TAG_subprogram nodes

This cleans up the tests so that they don't break under a
soon-to-be-made change that is more strict about such things.

llvm-svn: 213951

10 years agoAdd code owner of scoped-noalias metadata
Hal Finkel [Fri, 25 Jul 2014 15:54:55 +0000 (15:54 +0000)]
Add code owner of scoped-noalias metadata

Add myself as the code owner for the scoped-noalias metadata I've developed.

llvm-svn: 213950

10 years agoConvert noalias parameter attributes into noalias metadata during inlining
Hal Finkel [Fri, 25 Jul 2014 15:50:08 +0000 (15:50 +0000)]
Convert noalias parameter attributes into noalias metadata during inlining

This functionality is currently turned off by default.

Part of the motivation for introducing scoped-noalias metadata is to enable the
preservation of noalias parameter attribute information after inlining.
Sometimes this can be inferred from the code in the caller after inlining, but
often we simply lose valuable information.

The overall process if fairly simple:
 1. Create a new unqiue scope domain.
 2. For each (used) noalias parameter, create a new alias scope.
 3. For each pointer, collect the underlying objects. Add a noalias scope for
    each noalias parameter from which we're not derived (and has not been
    captured prior to that point).
 4. Add an alias.scope for each noalias parameter from which we might be
    derived (or has been captured before that point).

Note that the capture checks apply only if one of the underlying objects is not
an identified function-local object.

llvm-svn: 213949

10 years agoSimplify and improve scoped-noalias metadata semantics
Hal Finkel [Fri, 25 Jul 2014 15:50:02 +0000 (15:50 +0000)]
Simplify and improve scoped-noalias metadata semantics

In the process of fixing the noalias parameter -> metadata conversion process
that will take place during inlining (which will be committed soon, but not
turned on by default), I have come to realize that the semantics provided by
yesterday's commit are not really what we want. Here's why:

void foo(noalias a, noalias b, noalias c, bool x) {
  *q = x ? a : b;
  *c = *q;
}

Generically, we know that *c does not alias with *a and with *b (so there is an
'and' in what we know we're not), and we know that *q might be derived from *a
or from *b (so there is an 'or' in what we know that we are). So we do not want
the semantics currently, where any noalias scope matching any alias.scope
causes a NoAlias return. What we want to know is that the noalias scopes form a
superset of the alias.scope list (meaning that all the things we know we're not
is a superset of all of things the other instruction might be).

Making that change, however, introduces a composibility problem. If we inline
once, adding the noalias metadata, and then inline again adding more, and we
append new scopes onto the noalias and alias.scope lists each time. But, this
means that we could change what was a NoAlias result previously into a MayAlias
result because we appended an additional scope onto one of the alias.scope
lists. So, instead of giving scopes the ability to have parents (which I had
borrowed from the TBAA implementation, but seems increasingly unlikely to be
useful in practice), I've given them domains. The subset/superset condition now
applies within each domain independently, and we only need it to hold in one
domain. Each time we inline, we add the new scopes in a new scope domain, and
everything now composes nicely. In addition, this simplifies the
implementation.

llvm-svn: 213948

10 years agoTry to fix a layering violation introduced by r213945
Duncan P. N. Exon Smith [Fri, 25 Jul 2014 15:41:49 +0000 (15:41 +0000)]
Try to fix a layering violation introduced by r213945

The dragonegg buildbot (and others?) started failing after
r213945/r213946 because `llvm-as` wasn't linking in the bitcode reader.
I think moving the verify functions to the same file as the verify pass
should fix the build.  Adding a command-line option for maintaining
use-list order in assembly as a drive-by to prevent warnings about
unused static functions.

llvm-svn: 213947

10 years agoFix -Werror build after r213945
Duncan P. N. Exon Smith [Fri, 25 Jul 2014 15:00:02 +0000 (15:00 +0000)]
Fix -Werror build after r213945

llvm-svn: 213946

10 years agoIPO: Add use-list-order verifier
Duncan P. N. Exon Smith [Fri, 25 Jul 2014 14:49:26 +0000 (14:49 +0000)]
IPO: Add use-list-order verifier

Add a -verify-use-list-order pass, which shuffles use-list order, writes
to bitcode, reads back, and verifies that the (shuffled) order matches.

  - The utility functions live in lib/IR/UseListOrder.cpp.

  - Moved (and renamed) the command-line option to enable writing
    use-lists, so that this pass can return early if the use-list orders
    aren't being serialized.

It's not clear that this pass is the right direction long-term (perhaps
a separate tool instead?), but short-term it's a great way to test the
use-list order prototype.  I've added an XFAIL-ed testcase that I'm
hoping to get working pretty quickly.

This is part of PR5680.

llvm-svn: 213945

10 years ago[ARM] Emit ABI_PCS_R9_use build attribute.
Amara Emerson [Fri, 25 Jul 2014 14:03:14 +0000 (14:03 +0000)]
[ARM] Emit ABI_PCS_R9_use build attribute.

Patch by Ben Foster!

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

llvm-svn: 213944

10 years agotsan: query RSS every 100ms
Dmitry Vyukov [Fri, 25 Jul 2014 13:48:25 +0000 (13:48 +0000)]
tsan: query RSS every 100ms
Now that it become faster, it's OK to query it every 100ms again.

llvm-svn: 213943

10 years agotsan: fix and make faster GetRSS
Dmitry Vyukov [Fri, 25 Jul 2014 13:47:57 +0000 (13:47 +0000)]
tsan: fix and make faster GetRSS
It is currently broken because it reads a wrong value from profile (heap instead of total).
Also make it faster by reading /proc/self/statm. Reading of /proc/self/smaps
can consume more than 50% of time on beefy apps if done every 100ms.

llvm-svn: 213942

10 years agoAllow initialization of Asan interceptors before the general Asan initialization...
Viktor Kutuzov [Fri, 25 Jul 2014 12:45:36 +0000 (12:45 +0000)]
Allow initialization of Asan interceptors before the general Asan initialization takes place on FreeBSD
Differential Revision: http://reviews.llvm.org/D4496

llvm-svn: 213941

10 years agoSupport traversing ELF objects for sanitizers needs on FreeBSD in 32-bit mode
Viktor Kutuzov [Fri, 25 Jul 2014 12:29:04 +0000 (12:29 +0000)]
Support traversing ELF objects for sanitizers needs on FreeBSD in 32-bit mode
Differential Revision: http://reviews.llvm.org/D4656

llvm-svn: 213940

10 years agoRun sort_includes.py on the AArch64 backend.
Benjamin Kramer [Fri, 25 Jul 2014 11:42:14 +0000 (11:42 +0000)]
Run sort_includes.py on the AArch64 backend.

No functionality change.

llvm-svn: 213938

10 years ago[Driver][Mips] Remove "fp64" directories from the mips-mti-linux-gnu toolchain
Simon Atanasyan [Fri, 25 Jul 2014 11:20:21 +0000 (11:20 +0000)]
[Driver][Mips] Remove "fp64" directories from the mips-mti-linux-gnu toolchain
directories description. Released version of this toolchain has not separate
libraries for -mfp64 command line option.

llvm-svn: 213937

10 years ago[cmake] Use the external project machinery for libcxxabi so that it can
Chandler Carruth [Fri, 25 Jul 2014 10:27:40 +0000 (10:27 +0000)]
[cmake] Use the external project machinery for libcxxabi so that it can
be disabled in CMake or relocated if desired.

llvm-svn: 213936

10 years agoRevert part of r206963
James Molloy [Fri, 25 Jul 2014 10:19:47 +0000 (10:19 +0000)]
Revert part of r206963

Specifically the part where we removed a warning to be compatible with GCC, which has been widely regarded as a bad idea.

I'm not quite happy with how obtuse this warning is, especially in the fairly common case of a 32-bit integer literal, so I've got another patch awaiting review that adds a fixit to reduce confusion.

llvm-svn: 213935

10 years agollvm/test/CodeGen/ARM/inlineasm-global.ll: Add explicit triple to appease targeting...
NAKAMURA Takumi [Fri, 25 Jul 2014 09:55:01 +0000 (09:55 +0000)]
llvm/test/CodeGen/ARM/inlineasm-global.ll: Add explicit triple to appease targeting *-win32.

llvm-svn: 213933

10 years agollvm/test/CodeGen/ARM/inlineasm-global.ll: Avoid specifing source file on llc.
NAKAMURA Takumi [Fri, 25 Jul 2014 09:54:49 +0000 (09:54 +0000)]
llvm/test/CodeGen/ARM/inlineasm-global.ll: Avoid specifing source file on llc.

It sometimes confuses FileCheck. Consider the case that path contains 'stmib'. :)

llvm-svn: 213932

10 years ago[SDAG] Enable the new assert for out-of-range result numbers in
Chandler Carruth [Fri, 25 Jul 2014 09:19:23 +0000 (09:19 +0000)]
[SDAG] Enable the new assert for out-of-range result numbers in
SDValues, fixing the two bugs left in the regression suite.

The key for both of these was the use a single value type rather than
a VTList which caused an unintentionally single-result merge-value node.
Fix this by getting the appropriate VTList in place.

Doing this exposed that the comments in x86's code abouth how MUL_LOHI
operands are handle is wrong. The bug with the use of out-of-range
result numbers was hiding the bug about the order of operands here (as
best i can tell). There are more places where the code appears to get
this backwards still...

llvm-svn: 213931

10 years ago[SDAG] Don't insert the VRBase into a mapping from SDValues when the def
Chandler Carruth [Fri, 25 Jul 2014 09:19:18 +0000 (09:19 +0000)]
[SDAG] Don't insert the VRBase into a mapping from SDValues when the def
doesn't actually correspond to an SDValue at all. Fixes most of the
remaining asserts on out-of-range SDValue result numbers.

llvm-svn: 213930

10 years ago[lsan] Follow-up for r213518: replace MAP_ANONYMOUS with MAP_ANON
Alexander Potapenko [Fri, 25 Jul 2014 08:57:51 +0000 (08:57 +0000)]
[lsan] Follow-up for r213518: replace MAP_ANONYMOUS with MAP_ANON
(despite it's deprecated on Linux) to remove the ifdefs.

llvm-svn: 213929

10 years agoStore nodes only have 1 result.
Matt Arsenault [Fri, 25 Jul 2014 07:56:42 +0000 (07:56 +0000)]
Store nodes only have 1 result.

llvm-svn: 213928

10 years ago[OPENMP] Improved codegen for outlined functions for 'parallel' directives.
Alexey Bataev [Fri, 25 Jul 2014 07:55:17 +0000 (07:55 +0000)]
[OPENMP] Improved codegen for outlined functions for 'parallel' directives.

llvm-svn: 213927

10 years ago[SDAG] Start plumbing an assert into SDValues that we don't form one
Chandler Carruth [Fri, 25 Jul 2014 07:23:23 +0000 (07:23 +0000)]
[SDAG] Start plumbing an assert into SDValues that we don't form one
with a result number outside the range of results for the node.

I don't know how we managed to not really check this very basic
invariant for so long, but the code is *very* broken at this point.
I have over 270 test failures with the assert enabled. I'm committing it
disabled so that others can join in the cleanup effort and reproduce the
issues. I've also included one of the obvious fixes that I already
found. More fixes to come.

llvm-svn: 213926

10 years ago[OPENMP] Improved DSA processing of the loop control variables for loop directives.
Alexey Bataev [Fri, 25 Jul 2014 06:27:47 +0000 (06:27 +0000)]
[OPENMP] Improved DSA processing of the loop control variables for loop directives.

llvm-svn: 213925

10 years ago[ARM] In thumb mode, emit directive ".code 16" before file level inline
Akira Hatanaka [Fri, 25 Jul 2014 05:12:49 +0000 (05:12 +0000)]
[ARM] In thumb mode, emit directive ".code 16" before file level inline
assembly instructions.

This is necessary to ensure ARM assembler switches to Thumb mode before it
starts assembling the file level inline assembly instructions at the beginning
of a .s file.

<rdar://problem/17757232>

llvm-svn: 213924

10 years ago[X86] Add comments to clarify some non-obvious lines in the stackmap-nops.ll
Lang Hames [Fri, 25 Jul 2014 04:50:08 +0000 (04:50 +0000)]
[X86] Add comments to clarify some non-obvious lines in the stackmap-nops.ll
testcases.

Based on code review from Philip Reames. Thanks Philip!

llvm-svn: 213923

10 years ago[modules] Substantially improve handling of #undef:
Richard Smith [Fri, 25 Jul 2014 04:40:03 +0000 (04:40 +0000)]
[modules] Substantially improve handling of #undef:

 * Track override set across module load and save
 * Track originating module to allow proper re-export of #undef
 * Make override set properly transitive when it picks up a #undef

This fixes nearly all of the remaining macro issues with self-host.

llvm-svn: 213922

10 years agollvm-vtabledump: use a std::map instead of a StringMap for VBTables
David Majnemer [Fri, 25 Jul 2014 04:30:11 +0000 (04:30 +0000)]
llvm-vtabledump: use a std::map instead of a StringMap for VBTables

StringMap doesn't guarantee any particular iteration order,
this is suboptimal when comparing llvm-vtabledump's output for two
object files.

llvm-svn: 213921

10 years agoFix a warning in CoverageMappingReader.cpp
Ehsan Akhgari [Fri, 25 Jul 2014 02:51:57 +0000 (02:51 +0000)]
Fix a warning in CoverageMappingReader.cpp

llvm-svn: 213920

10 years agoFix test/CodeGen/ms-inline-asm.c from r213916.
Ehsan Akhgari [Fri, 25 Jul 2014 02:39:33 +0000 (02:39 +0000)]
Fix test/CodeGen/ms-inline-asm.c from r213916.

llvm-svn: 213919

10 years agoFix test/CodeGen/ms-inline-asm.cpp from r213916.
Ehsan Akhgari [Fri, 25 Jul 2014 02:35:50 +0000 (02:35 +0000)]
Fix test/CodeGen/ms-inline-asm.cpp from r213916.

llvm-svn: 213918

10 years ago[X86] Clarify some stackmap shadow optimization code as based on review
Lang Hames [Fri, 25 Jul 2014 02:29:19 +0000 (02:29 +0000)]
[X86] Clarify some stackmap shadow optimization code as based on review
feedback from Eric Christopher.

No functional change.

llvm-svn: 213917

10 years agoclang-cl: Merge adjacent single-line __asm blocks
Ehsan Akhgari [Fri, 25 Jul 2014 02:27:14 +0000 (02:27 +0000)]
clang-cl: Merge adjacent single-line __asm blocks

Summary:
This patch extends the __asm parser to make it keep parsing input tokens
as inline assembly if a single-line __asm line is followed by another line
starting with __asm too.  It also makes sure that we correctly keep
matching braces in such situations by separating the notions of how many
braces we are matching and whether we are in single-line asm block mode.

Reviewers: rnk

Subscribers: cfe-commits

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

llvm-svn: 213916

10 years ago[PATCH][PPC64LE] Correct little-endian usage of vmrgh* and vmrgl*.
Bill Schmidt [Fri, 25 Jul 2014 01:55:55 +0000 (01:55 +0000)]
[PATCH][PPC64LE] Correct little-endian usage of vmrgh* and vmrgl*.

Because the PowerPC vmrgh* and vmrgl* instructions have a built-in
big-endian bias, it is necessary to swap their inputs in little-endian
mode when using them to implement a vector shuffle.  This was
previously missed in the vector LE implementation.

There was already logic to distinguish between unary and "normal"
vmrg* vector shuffles, so this patch extends that logic to use a third
option:  "swapped" vmrg* vector shuffles that are used for little
endian in place of the "normal" ones.

I've updated the vec-shuffle-le.ll test to check for the expected
register ordering on the generated instructions.

This bug was discovered when testing the LE and ELFv2 patches for
safety if they were backported to 3.4.  A different vectorization
decision was made in 3.4 than on mainline trunk, and that exposed the
problem.  I've verified this fix takes care of that issue.

llvm-svn: 213915

10 years agoFix an x86 assembler stack unwind calculation for non-volatile registers.
Todd Fiala [Fri, 25 Jul 2014 01:15:34 +0000 (01:15 +0000)]
Fix an x86 assembler stack unwind calculation for non-volatile registers.

This change has the practical effect of fixing some backtrace
scenarios that would fail with inferiors running on the Android Art
host-side JVM under Linux x86_64 on Ubuntu 14.04.

See this lldb-commits thread for more details:
http://lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20140721/011988.html

Change by Tong Shen.
Reviewed by Jason Molenda.

Tested:
Ubuntu 14.04 x86_64, clang-3.5-built lldb.
MacOSX 10.10 Preview 4, Xcode 6 Beta 4-built lldb.

llvm-svn: 213914

10 years agoPR20445: Properly transform the initializer in a CXXNewExpr rather than running
Richard Smith [Fri, 25 Jul 2014 01:12:44 +0000 (01:12 +0000)]
PR20445: Properly transform the initializer in a CXXNewExpr rather than running
it through the normal TreeTransform logic for Exprs (which will strip off
implicit parts of the initialization and never re-create them).

llvm-svn: 213913

10 years agoPass the PrintingPolicy when converting types to strings in template type
Richard Trieu [Fri, 25 Jul 2014 00:24:02 +0000 (00:24 +0000)]
Pass the PrintingPolicy when converting types to strings in template type
diffing.  This removes extra "struct"/"class" in the type names and gives
"bool" instead of "_Bool" for booleans.

llvm-svn: 213912

10 years agoAdd code coverage mapping data, reader, and writer.
Alex Lorenz [Thu, 24 Jul 2014 23:57:54 +0000 (23:57 +0000)]
Add code coverage mapping data, reader, and writer.

This patch implements the data structures, the reader and
the writers for the new code coverage mapping system.
The new code coverage mapping system uses the instrumentation
based profiling to provide code coverage analysis.

llvm-svn: 213910

10 years agoAdd code coverage mapping data, reader, and writer.
Alex Lorenz [Thu, 24 Jul 2014 23:55:56 +0000 (23:55 +0000)]
Add code coverage mapping data, reader, and writer.

This patch implements the data structures, the reader and
the writers for the new code coverage mapping system.
The new code coverage mapping system uses the instrumentation
based profiling to provide code coverage analysis.

llvm-svn: 213909

10 years ago[Refactor] Expose the runtime debug builder
Johannes Doerfert [Thu, 24 Jul 2014 23:55:19 +0000 (23:55 +0000)]
[Refactor] Expose the runtime debug builder

llvm-svn: 213908

10 years agoMake getIslCompatibleName globaly available
Johannes Doerfert [Thu, 24 Jul 2014 23:48:02 +0000 (23:48 +0000)]
Make getIslCompatibleName globaly available

llvm-svn: 213907

10 years agoAdd an implementation for llvm-nm’s -print-file-name option (aka -o and -A).
Kevin Enderby [Thu, 24 Jul 2014 23:31:52 +0000 (23:31 +0000)]
Add an implementation for llvm-nm’s -print-file-name option (aka -o and -A).

The -print-file-name option in llvm-nm is to precede each symbol
with the object file it came from.  While code for the parsing of this
option and its aliases existed there was no code to implement it.

llvm-svn: 213906

10 years agoOpportunistically fix the builders
David Majnemer [Thu, 24 Jul 2014 23:26:54 +0000 (23:26 +0000)]
Opportunistically fix the builders

A builder complained that it couldn't find llvm-vtabledump, this is
probably because it wasn't a dependency of the 'test' target.

llvm-svn: 213905

10 years agoFix configure/make builds on MacOSX.
Todd Fiala [Thu, 24 Jul 2014 23:22:58 +0000 (23:22 +0000)]
Fix configure/make builds on MacOSX.

Change by Keno Fischer.

llvm-svn: 213904

10 years agollvm-vtabledump: A vtable dumper
David Majnemer [Thu, 24 Jul 2014 23:14:40 +0000 (23:14 +0000)]
llvm-vtabledump: A vtable dumper

This tool's job is to dump the vtables inside object files.  It is
currently limited to MS ABI vf- and vb-tables but it will eventually
support Itanium-style v-tables as well.

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

llvm-svn: 213903

10 years agoPrint "(default)" for default template template arguments to match the
Richard Trieu [Thu, 24 Jul 2014 23:14:16 +0000 (23:14 +0000)]
Print "(default)" for default template template arguments to match the
printing of other types.

llvm-svn: 213902

10 years ago[mach-o] Add support for LC_DATA_IN_CODE
Nick Kledzik [Thu, 24 Jul 2014 23:06:56 +0000 (23:06 +0000)]
[mach-o] Add support for LC_DATA_IN_CODE

Sometimes compilers emit data into code sections (e.g. constant pools or
jump tables). These runs of data can throw off disassemblers.  The solution
in mach-o is that ranges of data-in-code are encoded into a table pointed to
by the LC_DATA_IN_CODE load command.

The way the data-in-code information is encoded into lld's Atom model is that
that start and end of each data run is marked with a Reference whose offset
is the start/end of the data run.  For arm, the switch back to code also marks
whether it is thumb or arm code.

llvm-svn: 213901

10 years agoAfter unrolling a loop with llvm.loop.unroll.count metadata (unroll factor
Mark Heffernan [Thu, 24 Jul 2014 22:36:40 +0000 (22:36 +0000)]
After unrolling a loop with llvm.loop.unroll.count metadata (unroll factor
hint) the loop unroller replaces the llvm.loop.unroll.count metadata with
llvm.loop.unroll.disable metadata to prevent any subsequent unrolling
passes from unrolling more than the hint indicates.  This patch fixes
an issue where loop unrolling could be disabled for other loops as well which
share the same llvm.loop metadata.

llvm-svn: 213900

10 years agoDon't use 128bit functions on PPC32.
Joerg Sonnenberger [Thu, 24 Jul 2014 22:20:10 +0000 (22:20 +0000)]
Don't use 128bit functions on PPC32.

llvm-svn: 213899

10 years ago[SDAG] Introduce a combined set to the DAG combiner which tracks nodes
Chandler Carruth [Thu, 24 Jul 2014 22:15:28 +0000 (22:15 +0000)]
[SDAG] Introduce a combined set to the DAG combiner which tracks nodes
which have successfully round-tripped through the combine phase, and use
this to ensure all operands to DAG nodes are visited by the combiner,
even if they are only added during the combine phase.

This is critical to have the combiner reach nodes that are *introduced*
during combining. Previously these would sometimes be visited and
sometimes not be visited based on whether they happened to end up on the
worklist or not. Now we always run them through the combiner.

This fixes quite a few bad codegen test cases lurking in the suite while
also being more principled. Among these, the TLS codegeneration is
particularly exciting for programs that have this in the critical path
like TSan-instrumented binaries (although I think they engineer to use
a different TLS that is faster anyways).

I've tried to check for compile-time regressions here by running llc
over a merged (but not LTO-ed) clang bitcode file and observed at most
a 3% slowdown in llc. Given that this is essentially a worst case (none
of opt or clang are running at this phase) I think this is tolerable.
The actual LTO case should be even less costly, and the cost in normal
compilation should be negligible.

With this combining logic, it is possible to re-legalize as we combine
which is necessary to implement PSHUFB formation on x86 as
a post-legalize DAG combine (my ultimate goal).

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

llvm-svn: 213898

10 years ago[x86] Make vector legalization of extloads work more like the "normal"
Chandler Carruth [Thu, 24 Jul 2014 22:09:56 +0000 (22:09 +0000)]
[x86] Make vector legalization of extloads work more like the "normal"
vector operation legalization with support for custom target lowering
and fallback to expand when it fails, and use this to implement sext and
anyext load lowering for x86 in a more principled way.

Previously, the x86 backend relied on a target DAG combine to "combine
away" sextload and extload nodes prior to legalization, or would expand
them during legalization with terrible code. This is particularly
problematic because the DAG combine relies on running over non-canonical
DAG nodes at just the right time to match several common and important
patterns. It used a combine rather than lowering because we didn't have
good lowering support, and to expose some tricks being employed to more
combine phases.

With this change it becomes a proper lowering operation, the backend
marks that it can lower these nodes, and I've added support for handling
the canonical forms that don't have direct legal representations such as
sextload of a v4i8 -> v4i64 on AVX1. With this change, our test cases
for this behavior continue to pass even after the DAG combiner beigns
running more systematically over every node.

There is some noise caused by this in the test suite where we actually
use vector extends instead of subregister extraction. This doesn't
really seem like the right thing to do, but is unlikely to be a critical
regression. We do regress in one case where by lowering to the
target-specific patterns early we were able to combine away extraneous
legal math nodes. However, this regression is completely addressed by
switching to a widening based legalization which is what I'm working
toward anyways, so I've just switched the test to that mode.

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

llvm-svn: 213897

10 years agoTarget: invert condition for Windows
Saleem Abdulrasool [Thu, 24 Jul 2014 22:09:06 +0000 (22:09 +0000)]
Target: invert condition for Windows

The Microsoft ABI and MSVCRT are considered the canonical C runtime and ABI.
The long double routines are not part of this environment.  However, cygwin and
MinGW both provide supplementary implementations.  Change the condition to
reflect this reality.

llvm-svn: 213896

10 years agoFeedback from Hans on r213815. No functionaility change.
Manman Ren [Thu, 24 Jul 2014 21:13:20 +0000 (21:13 +0000)]
Feedback from Hans on r213815. No functionaility change.

llvm-svn: 213895

10 years agoWindows: Don't wildcard expand /? or -?
Hans Wennborg [Thu, 24 Jul 2014 21:09:45 +0000 (21:09 +0000)]
Windows: Don't wildcard expand /? or -?

Even if there's a file called c:\a, we want /? to be preserved as
an option, not expanded to a filename.

llvm-svn: 213894

10 years agoUse ELF in the clang-interpreter on windows.
Rafael Espindola [Thu, 24 Jul 2014 20:47:42 +0000 (20:47 +0000)]
Use ELF in the clang-interpreter on windows.

We don't support loading COFF files yet.

llvm-svn: 213893

10 years ago[X86] Optimize stackmap shadows on X86.
Lang Hames [Thu, 24 Jul 2014 20:40:55 +0000 (20:40 +0000)]
[X86] Optimize stackmap shadows on X86.

This patch minimizes the number of nops that must be emitted on X86 to satisfy
stackmap shadow constraints.

To minimize the number of nops inserted, the X86AsmPrinter now records the
size of the most recent stackmap's shadow in the StackMapShadowTracker class,
and tracks the number of instruction bytes emitted since the that stackmap
instruction was encountered. Padding is emitted (if it is required at all)
immediately before the next stackmap/patchpoint instruction, or at the end of
the basic block.

This optimization should reduce code-size and improve performance for people
using the llvm stackmap intrinsic on X86.

<rdar://problem/14959522>

llvm-svn: 213892

10 years agoReplace an assertion with a fatal error
Reid Kleckner [Thu, 24 Jul 2014 19:53:33 +0000 (19:53 +0000)]
Replace an assertion with a fatal error

Frontends are responsible for putting inalloca on parameters that would
be passed in memory and not registers.

llvm-svn: 213891

10 years agoUse the same .eh_frame encoding for 32bit PPC as on i386.
Joerg Sonnenberger [Thu, 24 Jul 2014 19:25:16 +0000 (19:25 +0000)]
Use the same .eh_frame encoding for 32bit PPC as on i386.

llvm-svn: 213890

10 years ago[libcxx] expose experimental::erased_type for all standard versions.
Eric Fiselier [Thu, 24 Jul 2014 19:17:38 +0000 (19:17 +0000)]
[libcxx] expose experimental::erased_type for all standard versions.

Summary: The polymorphic allocator implementation would greatly benefit by defining virtual functions in the dynlib instead of inline. In order to do that some types are going to have to be available outside of c++1y. This is the first step.

Reviewers: mclow.lists, EricWF

Reviewed By: EricWF

Subscribers: cfe-commits

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

llvm-svn: 213889

10 years agoD4451: Fix copy/move issues casude by __tuple_leafs's converting constructor
Eric Fiselier [Thu, 24 Jul 2014 18:48:34 +0000 (18:48 +0000)]
D4451: Fix copy/move issues casude by __tuple_leafs's converting constructor

llvm-svn: 213888

10 years agotest commit
Eric Fiselier [Thu, 24 Jul 2014 18:41:56 +0000 (18:41 +0000)]
test commit

llvm-svn: 213887

10 years agoPreserve libclang ABI compatibility with the 3.5 release
Reid Kleckner [Thu, 24 Jul 2014 18:22:15 +0000 (18:22 +0000)]
Preserve libclang ABI compatibility with  the 3.5 release

llvm-svn: 213886

10 years agoAdd support for #pragma nounroll.
Mark Heffernan [Thu, 24 Jul 2014 18:09:38 +0000 (18:09 +0000)]
Add support for #pragma nounroll.

llvm-svn: 213885

10 years agoTry to fix the bots again by moving test to X86 directory.
Manman Ren [Thu, 24 Jul 2014 17:57:09 +0000 (17:57 +0000)]
Try to fix the bots again by moving test to X86 directory.

llvm-svn: 213884

10 years agoX86: correct library call setup for Windows itanium
Saleem Abdulrasool [Thu, 24 Jul 2014 17:46:36 +0000 (17:46 +0000)]
X86: correct library call setup for Windows itanium

This target is identical to the Windows MSVC (and follows Microsoft ABI for C).
Correct the library call setup for this target.  The same set of library calls
are missing on this environment.

llvm-svn: 213883

10 years agoR600: Add FMA instructions for Evergreen
Matt Arsenault [Thu, 24 Jul 2014 17:41:01 +0000 (17:41 +0000)]
R600: Add FMA instructions for Evergreen

llvm-svn: 213882

10 years agoAttempt at fixing the windows shared build.
Rafael Espindola [Thu, 24 Jul 2014 17:38:18 +0000 (17:38 +0000)]
Attempt at fixing the windows shared build.

llvm-svn: 213881

10 years agoTry to fix the bots. If this does not work, I am going to move it to X86 directory.
Manman Ren [Thu, 24 Jul 2014 17:18:33 +0000 (17:18 +0000)]
Try to fix the bots. If this does not work, I am going to move it to X86 directory.

llvm-svn: 213880

10 years agoUse MCJIT.
Rafael Espindola [Thu, 24 Jul 2014 17:13:09 +0000 (17:13 +0000)]
Use MCJIT.

llvm-svn: 213879

10 years agoX86: silence sign comparison warning
Saleem Abdulrasool [Thu, 24 Jul 2014 17:12:06 +0000 (17:12 +0000)]
X86: silence sign comparison warning

GCC 4.8 detected a signed compare [-Wsign-compare].  Add a cast for the
destination index.  Add an assert to catch a potential overflow however unlikely
it may be.

llvm-svn: 213878

10 years agoR600: Add new functions for splitting vector loads and stores.
Matt Arsenault [Thu, 24 Jul 2014 17:10:35 +0000 (17:10 +0000)]
R600: Add new functions for splitting vector loads and stores.

These will be used in future patches and shouldn't change anything yet.

llvm-svn: 213877

10 years agoLet the integrated assembler understand .exitm, PR20426.
Nico Weber [Thu, 24 Jul 2014 17:08:39 +0000 (17:08 +0000)]
Let the integrated assembler understand .exitm, PR20426.

llvm-svn: 213876

10 years agoWe were turning off all these tests on OSX and FreeBSD because of a known (and fairly...
Jim Ingham [Thu, 24 Jul 2014 16:56:19 +0000 (16:56 +0000)]
We were turning off all these tests on OSX and FreeBSD because of a known (and fairly unimportant) bug.
Keep a test for that bug, but let the useful parts of the test run anyway.

llvm-svn: 213875

10 years agoRemove unused field MacroInstantiation::TheMacro. No behavior change.
Nico Weber [Thu, 24 Jul 2014 16:29:04 +0000 (16:29 +0000)]
Remove unused field MacroInstantiation::TheMacro. No behavior change.

llvm-svn: 213874

10 years agoLet the integrated assembler understand .warning, PR20428.
Nico Weber [Thu, 24 Jul 2014 16:26:06 +0000 (16:26 +0000)]
Let the integrated assembler understand .warning, PR20428.

llvm-svn: 213873

10 years agoInclude relative path for header outside the current directory.
Joerg Sonnenberger [Thu, 24 Jul 2014 16:04:46 +0000 (16:04 +0000)]
Include relative path for header outside the current directory.

llvm-svn: 213872

10 years agoRemove dead code.
Rafael Espindola [Thu, 24 Jul 2014 16:02:28 +0000 (16:02 +0000)]
Remove dead code.

Every user has been switched to using EngineBuilder.

llvm-svn: 213871

10 years ago[Refactor] Remove containsLoop to find innermost loops
Johannes Doerfert [Thu, 24 Jul 2014 15:59:06 +0000 (15:59 +0000)]
[Refactor] Remove containsLoop to find innermost loops

  Use the fact that if we visit a for node first in pre and next in post order
  we know we did not visit any children, thus we found an innermost loop.

  + Test case for an innermost loop with a conditional inside

llvm-svn: 213870

10 years agoRemove the last use of llvm::ExecutionEngine::create.
Rafael Espindola [Thu, 24 Jul 2014 15:54:23 +0000 (15:54 +0000)]
Remove the last use of llvm::ExecutionEngine::create.

llvm-svn: 213869

10 years ago[Mips] Replace assembler code by YAML to make the 'exe-dynsym.test' test
Simon Atanasyan [Thu, 24 Jul 2014 15:42:11 +0000 (15:42 +0000)]
[Mips] Replace assembler code by YAML to make the 'exe-dynsym.test' test
target independent.

llvm-svn: 213868