platform/upstream/llvm.git
9 years ago[ASan] Skip ptrace test on non-x86 targets
Jay Foad [Wed, 12 Nov 2014 09:42:01 +0000 (09:42 +0000)]
[ASan] Skip ptrace test on non-x86 targets

Summary:
Address sanitization of ptrace(2) is only implemented for x86, so skip
the test on other targets.

Reviewers: kcc, eugenis, earthdok, samsonov

Reviewed By: samsonov

Subscribers: llvm-commits

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

llvm-svn: 221777

9 years ago[x86] Clean up a bunch of vector shuffle tests with my script. Notably,
Chandler Carruth [Wed, 12 Nov 2014 09:17:15 +0000 (09:17 +0000)]
[x86] Clean up a bunch of vector shuffle tests with my script. Notably,
removes windows line endings and other noise. This is in prelude to
making substantive changes to these tests.

llvm-svn: 221776

9 years agoMCDisassembler::getInstruction():: Prune also "\param Region", since it was removed...
NAKAMURA Takumi [Wed, 12 Nov 2014 07:42:26 +0000 (07:42 +0000)]
MCDisassembler::getInstruction():: Prune also "\param Region", since it was removed in r221751. [-Wdocumentation]

llvm-svn: 221775

9 years agoAVX-512: Intrinsics for ERI
Elena Demikhovsky [Wed, 12 Nov 2014 07:31:03 +0000 (07:31 +0000)]
AVX-512: Intrinsics for ERI
3 instructions: vrcp28, vrsqrt28, vexp2, only vector forms.
Intrinsics include SAE (Suppres All Exceptions) parameter.

http://reviews.llvm.org/D6214

llvm-svn: 221774

9 years agoReverts r221772 which fails tests
Jingyue Wu [Wed, 12 Nov 2014 07:19:25 +0000 (07:19 +0000)]
Reverts r221772 which fails tests

llvm-svn: 221773

9 years agoDisable indvar widening if arithmetics on the wider type are more expensive
Jingyue Wu [Wed, 12 Nov 2014 06:58:45 +0000 (06:58 +0000)]
Disable indvar widening if arithmetics on the wider type are more expensive

Summary:
IndVarSimplify should not widen an indvar if arithmetics on the wider
indvar are more expensive than those on the narrower indvar. For
instance, although NVPTX64 treats i64 as a legal type, an ADD on i64 is
twice as expensive as that on i32, because the hardware needs to
simulate a 64-bit integer using two 32-bit integers.

Split from D6188, and based on D6195 which adds NVPTXTargetTransformInfo.

Fixes PR21148.

Test Plan:
Added @indvar_32_bit that verifies we do not widen an indvar if the arithmetics
on the wider type are more expensive.

Reviewers: jholewinski, eliben, meheff, atrick

Reviewed By: atrick

Subscribers: jholewinski, llvm-commits

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

llvm-svn: 221772

9 years agoMark TypeDecls used in explicit destructor calls as referenced.
Nico Weber [Wed, 12 Nov 2014 04:33:52 +0000 (04:33 +0000)]
Mark TypeDecls used in explicit destructor calls as referenced.

Fixes PR21221. Patch by Axel Naumann, test by me.

llvm-svn: 221771

9 years agoDelete dead code. NFC.
Rafael Espindola [Wed, 12 Nov 2014 04:31:19 +0000 (04:31 +0000)]
Delete dead code. NFC.

llvm-svn: 221770

9 years agodelete => delete[] for arrays.
Richard Trieu [Wed, 12 Nov 2014 04:19:57 +0000 (04:19 +0000)]
delete => delete[] for arrays.

llvm-svn: 221769

9 years ago[PowerPC] Add vec_vsx_ld and vec_vsx_st intrinsics
Bill Schmidt [Wed, 12 Nov 2014 04:19:56 +0000 (04:19 +0000)]
[PowerPC] Add vec_vsx_ld and vec_vsx_st intrinsics

This patch enables the vec_vsx_ld and vec_vsx_st intrinsics for
PowerPC, which provide programmer access to the lxvd2x, lxvw4x,
stxvd2x, and stxvw4x instructions.

New code in altivec.h defines these in terms of new builtins, which
are themselves defined in BuiltinsPPC.def.  The builtins are converted
to LLVM intrinsics in CGBuiltin.cpp.  Additional code is added to
builtins-ppc-vsx.c to verify the correct generation of the intrinsics.

Note that I moved the other VSX builtins so all VSX builtins will be
alphabetical in their own section in BuiltinsPPC.def.

There is a companion patch for LLVM.

llvm-svn: 221768

9 years ago[PowerPC] Add vec_vsx_ld and vec_vsx_st intrinsics
Bill Schmidt [Wed, 12 Nov 2014 04:19:40 +0000 (04:19 +0000)]
[PowerPC] Add vec_vsx_ld and vec_vsx_st intrinsics

This patch enables the vec_vsx_ld and vec_vsx_st intrinsics for
PowerPC, which provide programmer access to the lxvd2x, lxvw4x,
stxvd2x, and stxvw4x instructions.

New LLVM intrinsics are provided to represent these four instructions
in IntrinsicsPowerPC.td.  These are patterned after the similar
intrinsics for lvx and stvx (Altivec).  In PPCInstrVSX.td, these
intrinsics are tied to the code gen patterns, with additional patterns
to allow plain vanilla loads and stores to still generate these
instructions.

At -O1 and higher the intrinsics are immediately converted to loads
and stores in InstCombineCalls.cpp.  This will open up more
optimization opportunities while still allowing the correct
instructions to be generated.  (Similar code exists for aligned
Altivec loads and stores.)

The new intrinsics are added to the code that checks for consecutive
loads and stores in PPCISelLowering.cpp, as well as to
PPCTargetLowering::getTgtMemIntrinsic().

There's a new test to verify the correct instructions are generated.
The loads and stores tend to be reordered, so the test just counts
their number.  It runs at -O2, as it's not very effective to test this
at -O0, when many unnecessary loads and stores are generated.

I ended up having to modify vsx-fma-m.ll.  It turns out this test case
is slightly unreliable, but I don't know a good way to prevent
problems with it.  The xvmaddmdp instructions read and write the same
register, which is one of the multiplicands.  Commutativity allows
either to be chosen.  If the FMAs are reordered differently than
expected by the test, the register assignment can be different as a
result.  Hopefully this doesn't change often.

There is a companion patch for Clang.

llvm-svn: 221767

9 years agoMerge StreamableMemoryObject into MemoryObject.
Rafael Espindola [Wed, 12 Nov 2014 03:55:46 +0000 (03:55 +0000)]
Merge StreamableMemoryObject into MemoryObject.

Every MemoryObject is a StreamableMemoryObject since the removal of
StringRefMemoryObject, so just merge the two.

I will clean up the MemoryObject interface in the upcoming commits.

llvm-svn: 221766

9 years agoMark TypeDecls used in member initializers as referenced.
Nico Weber [Wed, 12 Nov 2014 03:52:25 +0000 (03:52 +0000)]
Mark TypeDecls used in member initializers as referenced.

Without this, -Wunused-local-typedef would incorrectly warn on the two typedefs
in this program:

void foo() {
  struct A {};
  struct B : public A {
    typedef A INHERITED;
    B() : INHERITED() {}

    typedef B SELF;
    B(int) : SELF() {}
  };
}

llvm-svn: 221765

9 years agoclang-format a few lines, fixes one 80col violation. nfc.
Nico Weber [Wed, 12 Nov 2014 03:44:43 +0000 (03:44 +0000)]
clang-format a few lines, fixes one 80col violation. nfc.

llvm-svn: 221764

9 years agoFix non-variadic function_ref cases to match r221753
David Blaikie [Wed, 12 Nov 2014 03:28:57 +0000 (03:28 +0000)]
Fix non-variadic function_ref cases to match r221753

llvm-svn: 221763

9 years agoDon't duplicate name in comments. NFC.
Rafael Espindola [Wed, 12 Nov 2014 03:25:45 +0000 (03:25 +0000)]
Don't duplicate name in comments. NFC.

llvm-svn: 221762

9 years agoRevert "Use a function_ref now that it works (r221753)."
Rafael Espindola [Wed, 12 Nov 2014 03:17:33 +0000 (03:17 +0000)]
Revert "Use a function_ref now that it works (r221753)."

This reverts commit r221756.

David Blaikie pointed out it was unsafe.

llvm-svn: 221761

9 years agoEnable armv7 core file writing for Mach-O binaries.
Jason Molenda [Wed, 12 Nov 2014 02:39:14 +0000 (02:39 +0000)]
Enable armv7 core file writing for Mach-O binaries.
The problems with the dyld all image infos struct
seems to be specific to arm64.

llvm-svn: 221760

9 years agoRemove unused method. NFC.
Rafael Espindola [Wed, 12 Nov 2014 02:35:31 +0000 (02:35 +0000)]
Remove unused method. NFC.

llvm-svn: 221759

9 years agoMake readBytes pure virtual. Every real implementation has it.
Rafael Espindola [Wed, 12 Nov 2014 02:30:38 +0000 (02:30 +0000)]
Make readBytes pure virtual. Every real implementation has it.

llvm-svn: 221758

9 years agoRemove unused method. NFC.
Rafael Espindola [Wed, 12 Nov 2014 02:27:40 +0000 (02:27 +0000)]
Remove unused method. NFC.

llvm-svn: 221757

9 years agoUse a function_ref now that it works (r221753).
Rafael Espindola [Wed, 12 Nov 2014 02:23:37 +0000 (02:23 +0000)]
Use a function_ref now that it works (r221753).

llvm-svn: 221756

9 years agoRemove the now unused StringRefMemoryObject.h.
Rafael Espindola [Wed, 12 Nov 2014 02:13:27 +0000 (02:13 +0000)]
Remove the now unused StringRefMemoryObject.h.

llvm-svn: 221755

9 years agoTry a different workaround for GCC 4.7.2 lambda capture bug. The previous
Richard Smith [Wed, 12 Nov 2014 02:09:03 +0000 (02:09 +0000)]
Try a different workaround for GCC 4.7.2 lambda capture bug. The previous
workaround took us from wrong-code to ICE.

llvm-svn: 221754

9 years agoEnsure function_refs are copyable even from non-const references
David Blaikie [Wed, 12 Nov 2014 02:06:08 +0000 (02:06 +0000)]
Ensure function_refs are copyable even from non-const references

A subtle bug was found where attempting to copy a non-const function_ref
lvalue would actually invoke the generic forwarding constructor (as it
was a closer match - being T& rather than the const T& of the implicit
copy constructor). In the particular case this lead to a dangling
function_ref member (since it had referenced the function_ref passed by
value to its ctor, rather than the outer function_ref that was still
alive)

SFINAE the converting constructor to not be considered if the copy
constructor is available and demonstrate that this causes the copy to
refer to the original functor, not to the function_ref it was copied
from. (without the code change, the test would fail as Y would be
referencing X and Y() would see the result of the mutation to X, ie: 2)

llvm-svn: 221753

9 years agoUpdate for llvm API change.
Rafael Espindola [Wed, 12 Nov 2014 02:04:31 +0000 (02:04 +0000)]
Update for llvm API change.

llvm-svn: 221752

9 years agoPass an ArrayRef to MCDisassembler::getInstruction.
Rafael Espindola [Wed, 12 Nov 2014 02:04:27 +0000 (02:04 +0000)]
Pass an ArrayRef to MCDisassembler::getInstruction.

With this patch MCDisassembler::getInstruction takes an ArrayRef<uint8_t>
instead of a MemoryObject.

Even on X86 there is a maximum size an instruction can have. Given
that, it seems way simpler and more efficient to just pass an ArrayRef
to the disassembler instead of a MemoryObject and have it do a virtual
call every time it wants some extra bytes.

llvm-svn: 221751

9 years agoInstantiate exception specifications when instantiating function types (other
Richard Smith [Wed, 12 Nov 2014 02:00:47 +0000 (02:00 +0000)]
Instantiate exception specifications when instantiating function types (other
than the type of a function declaration). We previously didn't instantiate
these at all! This also covers the pathological case where the only mention of
a parameter pack is within the exception specification; this gives us a second
way (other than alias templates) to reach the horrible state where a type
contains an unexpanded pack, but its canonical type does not.

This is a re-commit of r219977:

r219977 was reverted in r220038 because it hit a wrong-code bug in GCC 4.7.2.
(That's gcc.gnu.org/PR56135, and affects any implicit lambda-capture of
'this' within a template.)

r219977 was a re-commit of r217995, r218011, and r218053:

r217995 was reverted in r218058 because it hit a rejects-valid bug in MSVC.
(Incorrect overload resolution in the presence of using-declarations.)
It was re-committed in r219977 with a workaround for the MSVC rejects-valid.

r218011 was a workaround for an MSVC parser bug. (Incorrect desugaring of
unbraced range-based for loop).

llvm-svn: 221750

9 years agoRevert "Update for LLVM API change in r221024"
Duncan P. N. Exon Smith [Wed, 12 Nov 2014 01:59:53 +0000 (01:59 +0000)]
Revert "Update for LLVM API change in r221024"

This reverts commit r221073 to match upstream revert in r221711.

llvm-svn: 221749

9 years agoPR21536: Fix a corner case where we'd get confused by a pack expanding into the
Richard Smith [Wed, 12 Nov 2014 01:43:45 +0000 (01:43 +0000)]
PR21536: Fix a corner case where we'd get confused by a pack expanding into the
penultimate parameter of a template parameter list, where the last parameter is
itself a pack, and build a bogus empty final pack argument.

llvm-svn: 221748

9 years agoObject, support both mach-o archive t.o.c file names
Nick Kledzik [Wed, 12 Nov 2014 01:37:45 +0000 (01:37 +0000)]
Object, support both mach-o archive t.o.c file names

For historical reasons archives on mach-o have two possible names for the
file containing the table of contents for the archive: "__.SYMDEF SORTED"
and "__.SYMDEF".  But the libObject archive reader only supported the former.

This patch fixes llvm::object::Archive to support both names.

llvm-svn: 221747

9 years agoRemove a bit of dead code.
Rafael Espindola [Wed, 12 Nov 2014 01:27:22 +0000 (01:27 +0000)]
Remove a bit of dead code.

Every "real" object file implements this an ptx doesn't use it.

llvm-svn: 221746

9 years agoFix this code to follow the coding style regarding anonymous namespaces and
Richard Smith [Wed, 12 Nov 2014 01:24:00 +0000 (01:24 +0000)]
Fix this code to follow the coding style regarding anonymous namespaces and
static functions. Make a bunch of file-local functions static. Remove one
unused static function revealed by this.

llvm-svn: 221745

9 years agoMake Sema::CollectMultipleMethodsInGlobalPool() public.
Douglas Gregor [Wed, 12 Nov 2014 01:12:47 +0000 (01:12 +0000)]
Make Sema::CollectMultipleMethodsInGlobalPool() public.

It's useful for out-of-tree clients to be able to query the global
Objective-C method pool, and only Sema can do that right now.

llvm-svn: 221744

9 years agoSketch out the armv7 and arm64 core file writing support in
Jason Molenda [Wed, 12 Nov 2014 01:11:36 +0000 (01:11 +0000)]
Sketch out the armv7 and arm64 core file writing support in
ObjectFileMachO.  It's close but we seem to be missing some
of the memory region segments - not exactly sure how that's
happening.  The register context writing into the LC_THREAD
load commands is working correctly though.

Slightly reordered the arm64 definitions in ArchSpec.cpp so
when we look for an arm64 core file definiton we're getting
a cpu subtype of CPU_ANY which we can't put in the mach
header of a core file.  Make the first definition we find by
linear search have the currently correct '1' cpu subtype.

llvm-svn: 221743

9 years agoExtend intrinsic name mangling to support arrays, named structs, and function types.
Philip Reames [Wed, 12 Nov 2014 00:21:51 +0000 (00:21 +0000)]
Extend intrinsic name mangling to support arrays, named structs, and function types.

Currently, we have a type parameter mechanism for intrinsics. Rather than having to specify a separate intrinsic for each combination of argument and return types, we can specify a single intrinsic with one or more type parameters. These type parameters are passed explicitly to Intrinsic::getDeclaration or can be specified implicitly in the naming of the intrinsic function in an LL file.

Today, the types are limited to integer, floating point, and pointer types. With a goal of supporting symbolic targets for patchpoints and statepoints, this change adds support for function types.  The change also includes support for first class aggregate types (named structures and arrays) since these appear in function types we've encountered.

Reviewed by: atrick, ributzka
Differential Revision: http://reviews.llvm.org/D4608

llvm-svn: 221742

9 years agoclang/test/CodeGenCXX/debug-info-cxx1y.cpp: Add %itanium_abi_triple for incompatible...
NAKAMURA Takumi [Tue, 11 Nov 2014 23:51:53 +0000 (23:51 +0000)]
clang/test/CodeGenCXX/debug-info-cxx1y.cpp: Add %itanium_abi_triple for incompatible MS targets.

llvm-svn: 221741

9 years agoMake TreePattern::error use Twine
Matt Arsenault [Tue, 11 Nov 2014 23:48:11 +0000 (23:48 +0000)]
Make TreePattern::error use Twine

The underlying error function already uses a Twine,
and most of the uses build up strings.

llvm-svn: 221740

9 years ago[clang/asan] Do not emit memcpy for trivial operator= when -fsanitize-address-field...
Kostya Serebryany [Tue, 11 Nov 2014 23:38:13 +0000 (23:38 +0000)]
[clang/asan] Do not emit memcpy for trivial operator= when -fsanitize-address-field-padding >= 1

Summary: If we've added poisoned paddings to a type do not emit memcpy for operator=.

Test Plan: regression tests.

Reviewers: majnemer, rsmith

Reviewed By: rsmith

Subscribers: cfe-commits

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

llvm-svn: 221739

9 years ago[Reassociate] Canonicalize negative constants out of expressions.
Chad Rosier [Tue, 11 Nov 2014 23:36:42 +0000 (23:36 +0000)]
[Reassociate] Canonicalize negative constants out of expressions.

Add support for FDiv, which was regressed by the previous commit.

llvm-svn: 221738

9 years agoCanonicalize an assume(load != null) into !nonnull metadata
Philip Reames [Tue, 11 Nov 2014 23:33:19 +0000 (23:33 +0000)]
Canonicalize an assume(load != null) into !nonnull metadata

We currently have two ways of informing the optimizer that the result of a load is never null: metadata and assume. This change converts the second in to the former. This avoids a need to implement optimizations using both forms.

We should probably extend this basic idea to metadata of other forms; in particular, range metadata. We view is that assumes should be considered a "last resort" for when there isn't a more canonical way to represent something.

Reviewed by: Hal
Differential Revision: http://reviews.llvm.org/D5951

llvm-svn: 221737

9 years agoHave LookupMemberExprInRecord only call CorrectTypoDelayed, dropping the
Kaelyn Takata [Tue, 11 Nov 2014 23:26:58 +0000 (23:26 +0000)]
Have LookupMemberExprInRecord only call CorrectTypoDelayed, dropping the
code for calling CorrectTypo.

Includes a needed fix for non-C++ code to not choke on TypoExprs (which
also resolves a TODO from r220698).

llvm-svn: 221736

9 years agoCreate two helpers for running the typo-correction tree transform.
Kaelyn Takata [Tue, 11 Nov 2014 23:26:56 +0000 (23:26 +0000)]
Create two helpers for running the typo-correction tree transform.

One takes an Expr* and the other is a simple wrapper that takes an
ExprResult instead, and handles checking whether the ExprResult is
invalid.

Additionally, allow an optional callback that is run on the full result
of the tree transform, for filtering potential corrections based on the
characteristics of the resulting expression once all of the typos have
been replaced.

llvm-svn: 221735

9 years agoReplace MemberTypoDiags and MemberExprTypoRecovery with lambdas.
Kaelyn Takata [Tue, 11 Nov 2014 23:26:54 +0000 (23:26 +0000)]
Replace MemberTypoDiags and MemberExprTypoRecovery with lambdas.

llvm-svn: 221734

9 years agolibLTO: Allow linker to choose context of modules and codegen
Duncan P. N. Exon Smith [Tue, 11 Nov 2014 23:19:23 +0000 (23:19 +0000)]
libLTO: Allow linker to choose context of modules and codegen

Add API for specifying which `LLVMContext` each `lto_module_t` and
`lto_code_gen_t` is in.

In particular, this enables the following flow:

    for (auto &File : Files) {
      lto_module_t M = lto_module_create_in_local_context(File...);
      querySymbols(M);
      lto_module_dispose(M);
    }

    lto_code_gen_t CG = lto_codegen_create_in_local_context();
    for (auto &File : FilesToLink) {
      lto_module_t M = lto_module_create_in_codegen_context(File..., CG);
      lto_codegen_add_module(CG, M);
      lto_module_dispose(M);
    }
    lto_codegen_compile(CG);
    lto_codegen_write_merged_modules(CG, ...);
    lto_codegen_dispose(CG);

This flow has a few benefits.

  - Only one module (two if you count the combined module in the code
    generator) is in memory at a time.

  - Metadata (and constants) from files that are parsed to query symbols
    but not linked into the code generator don't pollute the global
    context.

  - The first for loop can be parallelized, since each module is in its
    own context.

  - When the code generator is disposed, the memory from LTO gets freed.

rdar://problem/18767512

llvm-svn: 221733

9 years agoRemove unnecessary semicolon.
Kaelyn Takata [Tue, 11 Nov 2014 23:17:30 +0000 (23:17 +0000)]
Remove unnecessary semicolon.

llvm-svn: 221732

9 years agoInitialize new subtarget feature variable for generating reciprocal estimate instruct...
Sanjay Patel [Tue, 11 Nov 2014 23:13:15 +0000 (23:13 +0000)]
Initialize new subtarget feature variable for generating reciprocal estimate instructions.

This was missed in r221706.

llvm-svn: 221731

9 years agolibLTO: Assert if LTOCodeGenerator and LTOModule are from different contexts
Duncan P. N. Exon Smith [Tue, 11 Nov 2014 23:13:10 +0000 (23:13 +0000)]
libLTO: Assert if LTOCodeGenerator and LTOModule are from different contexts

llvm-svn: 221730

9 years ago[FastISel][AArch64] Add support for fabs intrinsic.
Juergen Ributzka [Tue, 11 Nov 2014 23:10:44 +0000 (23:10 +0000)]
[FastISel][AArch64] Add support for fabs intrinsic.

Lower the llvm.fabs intrinsic to the 'fabs' MI instruction.

This fixes rdar://problem/18946552.

llvm-svn: 221729

9 years agolibLTO: Allow LTOModule to own a context
Duncan P. N. Exon Smith [Tue, 11 Nov 2014 23:08:05 +0000 (23:08 +0000)]
libLTO: Allow LTOModule to own a context

llvm-svn: 221728

9 years agoclang-format: Improve handling of comments in binary expressions.
Daniel Jasper [Tue, 11 Nov 2014 23:04:51 +0000 (23:04 +0000)]
clang-format: Improve handling of comments in binary expressions.

Before:
  b = a &&
      // Comment
      b.c &&
      d;

After:
  b = a &&
      // Comment
      b.c && d;

This fixes llvm.org/PR21535.

llvm-svn: 221727

9 years agolibLTO: Allow LTOCodeGenerator to own a context
Duncan P. N. Exon Smith [Tue, 11 Nov 2014 23:03:29 +0000 (23:03 +0000)]
libLTO: Allow LTOCodeGenerator to own a context

llvm-svn: 221726

9 years ago[asan] adding ShadowOffset64 for mips64, patch by Kumar Sukhani
Kostya Serebryany [Tue, 11 Nov 2014 23:02:57 +0000 (23:02 +0000)]
[asan] adding ShadowOffset64 for mips64, patch by Kumar Sukhani

llvm-svn: 221725

9 years agoMake LookupResult be copyable to avoid decomposing an existing one and
Kaelyn Takata [Tue, 11 Nov 2014 23:00:42 +0000 (23:00 +0000)]
Make LookupResult be copyable to avoid decomposing an existing one and
initializing a new one every time a copy is needed.

llvm-svn: 221724

9 years agoExplicitly exclude keywords from the member validator.
Kaelyn Takata [Tue, 11 Nov 2014 23:00:40 +0000 (23:00 +0000)]
Explicitly exclude keywords from the member validator.

Also simply and remove dead code from MemberExprTypoRecovery.

llvm-svn: 221723

9 years agoFix some formatting prior to refactoring the code.
Kaelyn Takata [Tue, 11 Nov 2014 23:00:38 +0000 (23:00 +0000)]
Fix some formatting prior to refactoring the code.

llvm-svn: 221722

9 years ago[Reassociate] Canonicalize negative constants out of expressions.
Chad Rosier [Tue, 11 Nov 2014 22:58:35 +0000 (22:58 +0000)]
[Reassociate] Canonicalize negative constants out of expressions.

This is a reapplication of r221171, but we only perform the transformation
on expressions which include a multiplication.  We do not transform rem/div
operations as this doesn't appear to be safe in all cases.

llvm-svn: 221721

9 years ago[asan] fix coverage tests to use the new flag syntax (-fsanitize-coverage=N)
Kostya Serebryany [Tue, 11 Nov 2014 22:15:44 +0000 (22:15 +0000)]
[asan] fix coverage tests to use the new flag syntax (-fsanitize-coverage=N)

llvm-svn: 221720

9 years agoIntroduce -fsanitize-coverage=N flag
Kostya Serebryany [Tue, 11 Nov 2014 22:15:07 +0000 (22:15 +0000)]
Introduce -fsanitize-coverage=N flag

Summary:
This change makes the asan-coverge (formerly -mllvm -asan-coverge)
accessible via a clang flag.
Companion patch to LLVM is http://reviews.llvm.org/D6152

Test Plan: regression tests, chromium

Reviewers: samsonov

Reviewed By: samsonov

Subscribers: cfe-commits

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

llvm-svn: 221719

9 years agoMove asan-coverage into a separate phase.
Kostya Serebryany [Tue, 11 Nov 2014 22:14:37 +0000 (22:14 +0000)]
Move asan-coverage into a separate phase.

Summary:
This change moves asan-coverage instrumentation
into a separate Module pass.
The other part of the change in clang introduces a new flag
-fsanitize-coverage=N.
Another small patch will update tests in compiler-rt.

With this patch no functionality change is expected except for the flag name.
The following changes will make the coverage instrumentation work with tsan/msan

Test Plan: Run regression tests, chromium.

Reviewers: nlewycky, samsonov

Reviewed By: nlewycky, samsonov

Subscribers: llvm-commits

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

llvm-svn: 221718

9 years agoReplaced checking in string_view::remove_suffix/remove_prefix by _LIBCPP_ASSERT,...
Marshall Clow [Tue, 11 Nov 2014 22:07:10 +0000 (22:07 +0000)]
Replaced checking in string_view::remove_suffix/remove_prefix by _LIBCPP_ASSERT, since this is technically undefined behavior. Fixes PR#21496

llvm-svn: 221717

9 years agoBundle conditions checked by UBSan with sanitizer kinds they implement.
Alexey Samsonov [Tue, 11 Nov 2014 22:03:54 +0000 (22:03 +0000)]
Bundle conditions checked by UBSan with sanitizer kinds they implement.

Summary:
This change makes CodeGenFunction::EmitCheck() take several
conditions that needs to be checked (all of them need to be true),
together with sanitizer kinds these checks are for. This would allow
to split one call into UBSan runtime into several calls in case
different sanitizer kinds would have different recoverability
settings.

Tests should be fixed accordingly, I'm working on it.

Test Plan: regression test suite.

Reviewers: rsmith

Reviewed By: rsmith

Subscribers: cfe-commits

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

llvm-svn: 221716

9 years agoRemove this test too.
Fariborz Jahanian [Tue, 11 Nov 2014 21:54:53 +0000 (21:54 +0000)]
Remove this test too.

llvm-svn: 221715

9 years agoRevert r221702 until I address Richard Trieu's
Fariborz Jahanian [Tue, 11 Nov 2014 21:54:19 +0000 (21:54 +0000)]
Revert r221702 until I address Richard Trieu's
comments.

llvm-svn: 221714

9 years agoSimplify the test by using multiple --check-prefix arguments
Alexey Samsonov [Tue, 11 Nov 2014 21:50:44 +0000 (21:50 +0000)]
Simplify the test by using multiple --check-prefix arguments

llvm-svn: 221713

9 years agoRevert "IR: MDNode => Value: Update for LLVM API change in r221375"
Duncan P. N. Exon Smith [Tue, 11 Nov 2014 21:31:03 +0000 (21:31 +0000)]
Revert "IR: MDNode => Value: Update for LLVM API change in r221375"

This reverts commit r221376.

The API change was reverted in r221711.

llvm-svn: 221712

9 years agoRevert "IR: MDNode => Value"
Duncan P. N. Exon Smith [Tue, 11 Nov 2014 21:30:22 +0000 (21:30 +0000)]
Revert "IR: MDNode => Value"

Instead, we're going to separate metadata from the Value hierarchy.  See
PR21532.

This reverts commit r221375.
This reverts commit r221373.
This reverts commit r221359.
This reverts commit r221167.
This reverts commit r221027.
This reverts commit r221024.
This reverts commit r221023.
This reverts commit r220995.
This reverts commit r220994.

llvm-svn: 221711

9 years agoFix build break: remove unused variable in FCFI.
Tom Roeder [Tue, 11 Nov 2014 21:26:33 +0000 (21:26 +0000)]
Fix build break: remove unused variable in FCFI.

llvm-svn: 221710

9 years agoTotally forget deallocated SDNodes in SDDbgInfo.
Frederic Riss [Tue, 11 Nov 2014 21:21:08 +0000 (21:21 +0000)]
Totally forget deallocated SDNodes in SDDbgInfo.

What would happen before that commit is that the SDDbgValues associated with
a deallocated SDNode would be marked Invalidated, but SDDbgInfo would keep
a map entry keyed by the SDNode pointer pointing to this list of invalidated
SDDbgNodes. As the memory gets reused, the list might get wrongly associated
with another new SDNode. As the SDDbgValues are cloned when they are transfered,
this can lead to an exponential number of SDDbgValues being produced during
DAGCombine like in http://llvm.org/bugs/show_bug.cgi?id=20893

Note that the previous behavior wasn't really buggy as the invalidation made
sure that the SDDbgValues won't be used. This commit can be considered a
memory optimization and as such is really hard to validate in a unit-test.

llvm-svn: 221709

9 years agoAdd Forward Control-Flow Integrity.
Tom Roeder [Tue, 11 Nov 2014 21:08:02 +0000 (21:08 +0000)]
Add Forward Control-Flow Integrity.

This commit adds a new pass that can inject checks before indirect calls to
make sure that these calls target known locations. It supports three types of
checks and, at compile time, it can take the name of a custom function to call
when an indirect call check fails. The default failure function ignores the
error and continues.

This pass incidentally moves the function JumpInstrTables::transformType from
private to public and makes it static (with a new argument that specifies the
table type to use); this is so that the CFI code can transform function types
at call sites to determine which jump-instruction table to use for the check at
that site.

Also, this removes support for jumptables in ARM, pending further performance
analysis and discussion.

Review: http://reviews.llvm.org/D4167
llvm-svn: 221708

9 years ago[llvm-mc] Fixing case where if a file ended with non-newline whitespace or a comma...
Colin LeMahieu [Tue, 11 Nov 2014 21:03:09 +0000 (21:03 +0000)]
[llvm-mc] Fixing case where if a file ended with non-newline whitespace or a comma it would access invalid memory.
Cleaned up parse loop.

llvm-svn: 221707

9 years agoUse rcpss/rcpps (X86) to speed up reciprocal calcs (PR21385).
Sanjay Patel [Tue, 11 Nov 2014 20:51:00 +0000 (20:51 +0000)]
Use rcpss/rcpps (X86) to speed up reciprocal calcs (PR21385).

This is a first step for generating SSE rcp instructions for reciprocal
calcs when fast-math allows it. This is very similar to the rsqrt optimization
enabled in D5658 ( http://reviews.llvm.org/rL220570 ).

For now, be conservative and only enable this for AMD btver2 where performance
improves significantly both in terms of latency and throughput.

We may never enable this codegen for Intel Core* chips because the divider circuits
are just too fast. On SandyBridge, divss can be as fast as 10 cycles versus the 21
cycle critical path for the rcp + mul + sub + mul + add estimate.

Follow-on patches may allow configuration of the number of Newton-Raphson refinement
steps, add AVX512 support, and enable the optimization for more chips.

More background here: http://llvm.org/bugs/show_bug.cgi?id=21385

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

llvm-svn: 221706

9 years agoSimplify testcase. NFC.
Rafael Espindola [Tue, 11 Nov 2014 20:49:16 +0000 (20:49 +0000)]
Simplify testcase. NFC.

Thanks to Filipe Cabecinhas for the tip.

llvm-svn: 221705

9 years agoPR16091 continued: Debug Info for member functions with undeduced return types.
David Blaikie [Tue, 11 Nov 2014 20:44:45 +0000 (20:44 +0000)]
PR16091 continued: Debug Info for member functions with undeduced return types.

So DWARF5 specs out auto deduced return types as DW_TAG_unspecified_type
with DW_AT_name "auto", and GCC implements this somewhat, but it
presents a few problems to do this with Clang.

GCC's implementation only applies to member functions where the auto
return type isn't deduced immediately (ie: member functions of templates
or member functions defined out of line). In the common case of an
inline deduced return type function, GCC emits the DW_AT_type as the
deduced return type.

Currently GDB doesn't seem to behave too well with this debug info - it
treats the return type as 'void', even though the definition of the
function has the correctly deduced return type (I guess it sees the
return type the declaration has, doesn't understand it, and assumes
void). This means the function's ABI might be broken (non-trivial return
types, etc), etc.

Clang, on the other hand doesn't track this particular case of a
deducable return type that is deduced immediately versus one that is
deduced 'later'. So if we implement the DWARF5 representation, all
deducible return type functions would get adverse GDB behavior
(including deduced return type lambda functions, inline deduced return
type functions, etc).

Also, we can't just do this for auto types that are not deduced -
because Clang marks even the declaration's return type as deduced (&
provides the underlying type) once a definition is seen that allows the
deduction. So we have to ignore even deduced types - but we can't do
that for auto variables (because this representation only applies to
function declarations - variables and function definitions need the real
type so the function can be called, etc) so we'd need to add an extra
flag to the type unwrapping/creation code to indicate when we want to
see through deduced types and when we don't. It's also not as simple as
just checking at the top level when building a function type (for one
thing, we reuse the function type building for building function pointer
types which might also have 'auto' in them - but be the type of a
variable instead) because the auto might be arbitrarily deeply nested
("auto &", "auto (*)()", etc...)

So, with all that said, let's do the simple thing that works in existing
debuggers for now and treat these functions the same way we do function
templates and implicit special members: omit them from the member list,
since they can't be correctly called anyway (without knowing the return
type the ABI isn't know and a function call could put the arguments in
the wrong place) so they're not much use to the user.

At some point in the future, when GDB understands the DWARF5
representation better it might be worth plumbing through the extra type
builder handling to avoid looking through AutoType for some callers,
etc...

llvm-svn: 221704

9 years ago[PowerPC] Replace foul hackery with real calls to __tls_get_addr
Bill Schmidt [Tue, 11 Nov 2014 20:44:09 +0000 (20:44 +0000)]
[PowerPC] Replace foul hackery with real calls to __tls_get_addr

My original support for the general dynamic and local dynamic TLS
models contained some fairly obtuse hacks to generate calls to
__tls_get_addr when lowering a TargetGlobalAddress.  Rather than
generating real calls, special GET_TLS_ADDR nodes were used to wrap
the calls and only reveal them at assembly time.  I attempted to
provide correct parameter and return values by chaining CopyToReg and
CopyFromReg nodes onto the GET_TLS_ADDR nodes, but this was also not
fully correct.  Problems were seen with two back-to-back stores to TLS
variables, where the call sequences ended up overlapping with unhappy
results.  Additionally, since these weren't real calls, the proper
register side effects of a call were not recorded, so clobbered values
were kept live across the calls.

The proper thing to do is to lower these into calls in the first
place.  This is relatively straightforward; see the changes to
PPCTargetLowering::LowerGlobalTLSAddress() in PPCISelLowering.cpp.
The changes here are standard call lowering, except that we need to
track the fact that these calls will require a relocation.  This is
done by adding a machine operand flag of MO_TLSLD or MO_TLSGD to the
TargetGlobalAddress operand that appears earlier in the sequence.

The calls to LowerCallTo() eventually find their way to
LowerCall_64SVR4() or LowerCall_32SVR4(), which call FinishCall(),
which calls PrepareCall().  In PrepareCall(), we detect the calls to
__tls_get_addr and immediately snag the TargetGlobalTLSAddress with
the annotated relocation information.  This becomes an extra operand
on the call following the callee, which is expected for nodes of type
tlscall.  We change the call opcode to CALL_TLS for this case.  Back
in FinishCall(), we change it again to CALL_NOP_TLS for 64-bit only,
since we require a TOC-restore nop following the call for the 64-bit
ABIs.

During selection, patterns in PPCInstrInfo.td and PPCInstr64Bit.td
convert the CALL_TLS nodes into BL_TLS nodes, and convert the
CALL_NOP_TLS nodes into BL8_NOP_TLS nodes.  This replaces the code
removed from PPCAsmPrinter.cpp, as the BL_TLS or BL8_NOP_TLS
nodes can now be emitted normally using their patterns and the
associated printTLSCall print method.

Finally, as a result of these changes, all references to get-tls-addr
in its various guises are no longer used, so they have been removed.

There are existing TLS tests to verify the changes haven't messed
anything up).  I've added one new test that verifies that the problem
with the original code has been fixed.

llvm-svn: 221703

9 years agoPatch to warn when logical evaluation of operand evalutes to a true value;
Fariborz Jahanian [Tue, 11 Nov 2014 19:59:16 +0000 (19:59 +0000)]
Patch to warn when logical evaluation of operand evalutes to a true value;
That this is a c-only patch. c++ already has this warning.
This addresses rdar://18716393

llvm-svn: 221702

9 years agoMove a bunch of summary formatters to oneliner mode. This makes more cases eligible...
Enrico Granata [Tue, 11 Nov 2014 19:52:12 +0000 (19:52 +0000)]
Move a bunch of summary formatters to oneliner mode. This makes more cases eligible for oneline printing, and fixes rdar://18120906

llvm-svn: 221701

9 years agoUse a 8 bit immediate when possible.
Rafael Espindola [Tue, 11 Nov 2014 19:46:36 +0000 (19:46 +0000)]
Use a 8 bit immediate when possible.

This fixes pr21529.

llvm-svn: 221700

9 years agoclang-format: Preserve trailing-comma logic even with comments.
Daniel Jasper [Tue, 11 Nov 2014 19:34:57 +0000 (19:34 +0000)]
clang-format: Preserve trailing-comma logic even with comments.

Before:
  vector<int> SomeVector = {// aaa
                            1, 2,
  };

After:
  vector<int> SomeVector = {
      // aaa
      1, 2,
  };

llvm-svn: 221699

9 years agoFirst half of CWG1962: decltype(__func__) should not be a reference type,
Richard Smith [Tue, 11 Nov 2014 19:30:41 +0000 (19:30 +0000)]
First half of CWG1962: decltype(__func__) should not be a reference type,
because __func__ is supposed to act like a local static variable.

llvm-svn: 221698

9 years agoFix typo in allocator_traits::construct. This fixes PR14175, which shows up if an...
Marshall Clow [Tue, 11 Nov 2014 19:22:33 +0000 (19:22 +0000)]
Fix typo in allocator_traits::construct. This fixes PR14175, which shows up if an allocator has a no-args construct method

llvm-svn: 221697

9 years agoFix a warning about ‘r_type’ may be used uninitialized.
Kevin Enderby [Tue, 11 Nov 2014 19:16:45 +0000 (19:16 +0000)]
Fix a warning about ‘r_type’ may be used uninitialized.

Thanks to Aaron Ballman for noticing this!

llvm-svn: 221696

9 years ago[X86][ELF] Fix PR20243 - leaf frame pointer bug with TLS access
Dario Domizioli [Tue, 11 Nov 2014 18:44:49 +0000 (18:44 +0000)]
[X86][ELF] Fix PR20243 - leaf frame pointer bug with TLS access

The ISel lowering for global TLS access in PIC mode was creating a pseudo
instruction that is later expanded to a call, but the code was not
setting the hasCalls flag in the MachineFrameInfo alongside the adjustsStack
flag. This caused some functions to be mistakenly recognized as leaf functions,
and this in turn affected the decision to eliminate the frame pointer.

With the fix, hasCalls is properly set and the leaf frame pointer is correctly
preserved.

llvm-svn: 221695

9 years agoAdd -std=c99 for building the test case of TestValueVarUpdate - for Siva Chandra...
Shawn Best [Tue, 11 Nov 2014 17:45:00 +0000 (17:45 +0000)]
Add -std=c99 for building the test case of TestValueVarUpdate - for Siva Chandra : reviews.llvm.org/D6201

llvm-svn: 221694

9 years agoLLVM incorrectly folds xor into select
Oliver Stannard [Tue, 11 Nov 2014 17:36:01 +0000 (17:36 +0000)]
LLVM incorrectly folds xor into select

LLVM replaces the SelectionDAG pattern (xor (set_cc cc x y) 1) with
(set_cc !cc x y), which is only correct when the xor has type i1.
Instead, we should check that the constant operand to the xor is all
ones.

llvm-svn: 221693

9 years agoSubstitute cc with c++ when compiling c++ test files for Siva Chandra : http://review...
Shawn Best [Tue, 11 Nov 2014 17:34:58 +0000 (17:34 +0000)]
Substitute cc with c++ when compiling c++ test files for Siva Chandra : reviews.llvm.org/D6199

llvm-svn: 221692

9 years agoThis patch fixes a crash after rebuilding call AST of
Fariborz Jahanian [Tue, 11 Nov 2014 16:56:21 +0000 (16:56 +0000)]
This patch fixes a crash after rebuilding call AST of
an __unknown_anytype(...). In this case, we rebuild the
vararg function type specially to convert the call expression
to  something that IRGen can handle. However, FunctionDecl
as rebuilt in RebuildUnknownAnyExpr::resolveDecl is bogus and
results in crash when accessing its params later on. This
patch fixes the crash by rebuilding the FunctionDecl to match
its new resolved type. rdar://15297105.
(patch reapplied after lldb issue was fixed in r221660).

llvm-svn: 221691

9 years agoFixed a typo in a paper name: 4190 --> N4190
Marshall Clow [Tue, 11 Nov 2014 16:45:50 +0000 (16:45 +0000)]
Fixed a typo in a paper name: 4190 --> N4190

llvm-svn: 221690

9 years agoAdded vector<T>::insert tests suggested by code coverage results
Marshall Clow [Tue, 11 Nov 2014 16:44:05 +0000 (16:44 +0000)]
Added vector<T>::insert tests suggested by code coverage results

llvm-svn: 221689

9 years agoDiagnosticParseKinds is close to running into DiagnosticASTKinds.
Manuel Klimek [Tue, 11 Nov 2014 15:45:49 +0000 (15:45 +0000)]
DiagnosticParseKinds is close to running into DiagnosticASTKinds.

$ grep "def " include/clang/Basic/DiagnosticParseKinds.td |wc -l
396

llvm-svn: 221688

9 years ago[ASan] Fix use of -asan-instrument-assembly in tests
Jay Foad [Tue, 11 Nov 2014 13:44:08 +0000 (13:44 +0000)]
[ASan] Fix use of -asan-instrument-assembly in tests

Summary:
The option -asan-instrument-assembly is declared in the X86 backend.
If I test on PowerPC configured with LLVM_TARGETS_TO_BUILD=All then the
option is tolerated but ignored.
If I test on PowerPC configured with LLVM_TARGETS_TO_BUILD=PowerPC then
the testsuite fails with:
[ 93%] Generating ASAN_INST_TEST_OBJECTS.gtest-all.cc.powerpc64-inline.o
clang (LLVM option parsing): Unknown command line argument '-asan-instrument-assembly'.  Try: 'clang (LLVM option parsing) -help'

Fix this inconsistency by only adding the option if that toolchain was
built with the X86 backend included.

Reviewers: kcc, samsonov, eugenis

Reviewed By: eugenis

Subscribers: llvm-commits

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

llvm-svn: 221687

9 years ago[mips] Add preliminary support for the MIPS II target.
Vasileios Kalintiris [Tue, 11 Nov 2014 11:43:55 +0000 (11:43 +0000)]
[mips] Add preliminary support for the MIPS II target.

Summary:
This patch enables code generation for the MIPS II target. Pre-Mips32
targets don't have the MUL instruction, so we add the correspondent
pattern that uses the MULT/MFLO combination in order to retrieve the
product.

This is WIP as we don't support code generation for select nodes due to
the lack of conditional-move instructions.

Reviewers: dsanders

Subscribers: llvm-commits

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

llvm-svn: 221686

9 years ago[mips] Add hardware register name "hwr_ulr" ($29)
Vasileios Kalintiris [Tue, 11 Nov 2014 11:22:39 +0000 (11:22 +0000)]
[mips] Add hardware register name "hwr_ulr" ($29)

The canonical name when printing assembly is still $29. The reason is that
GAS does not accept "$hwr_ulr" at the moment.

This addresses the comments from r221307, which reverted the original
commit r221299.

llvm-svn: 221685

9 years ago[X86] Add missing check for 'isINSERTPSMask' in method 'isShuffleMaskLegal'.
Andrea Di Biagio [Tue, 11 Nov 2014 11:20:31 +0000 (11:20 +0000)]
[X86] Add missing check for 'isINSERTPSMask' in method 'isShuffleMaskLegal'.

This helps the DAGCombiner to identify more opportunities to fold shuffles.

llvm-svn: 221684

9 years agoAdd support for 32-bit core file dumping. Add support for i386 process core file...
Jason Molenda [Tue, 11 Nov 2014 10:59:15 +0000 (10:59 +0000)]
Add support for 32-bit core file dumping.  Add support for i386 process core file dumping.

llvm-svn: 221683

9 years agoPut the current pc arrow back into the default disassembly format.
Jason Molenda [Tue, 11 Nov 2014 10:32:04 +0000 (10:32 +0000)]
Put the current pc arrow back into the default disassembly format.
I went back and forth on removing this - and tried dropping it for
a few weeks.  But when you're working at an assembly language, it
really is helpful to have this displayed to show where the current
pc is.

llvm-svn: 221682

9 years agoRecommit "[mips] Add names and tests for the hardware registers"
Vasileios Kalintiris [Tue, 11 Nov 2014 10:31:31 +0000 (10:31 +0000)]
Recommit "[mips] Add names and tests for the hardware registers"

The original commit r221299 was reverted in r221307.  I removed the name
"hrw_ulr" ($29) from the original commit because two tests were failing.

llvm-svn: 221681

9 years agollvm-objdump: Skip empty sections when dumping contents
David Majnemer [Tue, 11 Nov 2014 09:58:25 +0000 (09:58 +0000)]
llvm-objdump: Skip empty sections when dumping contents

Empty sections are just noise when using objdump.
This is similar to what binutils does.

llvm-svn: 221680

9 years agoWas convinced in commit comments that requiring a specific python version is the...
Manuel Klimek [Tue, 11 Nov 2014 08:53:18 +0000 (08:53 +0000)]
Was convinced in commit comments that requiring a specific python version is the wrong approach; reverting.

llvm-svn: 221679

9 years agoMC, COFF: Use relocations for function references inside the section
David Majnemer [Tue, 11 Nov 2014 08:43:57 +0000 (08:43 +0000)]
MC, COFF: Use relocations for function references inside the section

Referencing one symbol from another in the same section does not
generally require a relocation.  However, the MS linker has a feature
called /INCREMENTAL which enables incremental links.  It achieves this
by creating thunks to the actual function and redirecting all
relocations to point to the thunk.

This breaks down with the old scheme if you have a function which
references, say, itself.  On x86_64, we would use %rip relative
addressing to reference the start of the function from out current
position.  This would lead to miscompiles because other references might
reference the thunk instead, breaking function pointer equality.

This fixes PR21520.

llvm-svn: 221678