oota-llvm.git
9 years agogroup getNode() variants by purpose and add comments; NFC
Sanjay Patel [Mon, 11 May 2015 19:34:10 +0000 (19:34 +0000)]
group getNode() variants by purpose and add comments; NFC

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

9 years ago[RewriteStatepointsForGC] Fix a bug on creating gc_relocate for pointer to vector...
Sanjoy Das [Mon, 11 May 2015 18:49:34 +0000 (18:49 +0000)]
[RewriteStatepointsForGC] Fix a bug on creating gc_relocate for pointer to vector of pointers

Summary:
In RewriteStatepointsForGC pass, we create a gc_relocate intrinsic for
each relocated pointer, and the gc_relocate has the same type with the
pointer. During the creation of gc_relocate intrinsic, llvm requires to
mangle its type. However, llvm does not support mangling of all possible
types. RewriteStatepointsForGC will hit an assertion failure when it
tries to create a gc_relocate for pointer to vector of pointers because
mangling for vector of pointers is not supported.

This patch changes the way RewriteStatepointsForGC pass creates
gc_relocate. For each relocated pointer, we erase the type of pointers
and create an unified gc_relocate of type i8 addrspace(1)*. Then a
bitcast is inserted to convert the gc_relocate to the correct type. In
this way, gc_relocate does not need to deal with different types of
pointers and the unsupported type mangling is no longer a problem. This
change would also ease further merge when LLVM erases types of pointers
and introduces an unified pointer type.

Some minor changes are also introduced to gc_relocate related part in
InstCombineCalls, CodeGenPrepare, and Verifier accordingly.

Patch by Chen Li!

Reviewers: reames, AndyAyers, sanjoy

Reviewed By: sanjoy

Subscribers: llvm-commits

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

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

9 years agoLiveRangeCalc: Improve error messages on malformed IR
Matthias Braun [Mon, 11 May 2015 18:47:47 +0000 (18:47 +0000)]
LiveRangeCalc: Improve error messages on malformed IR

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

9 years agoCodeGen: Make MachineInstr::untieRegOperand() a public function
Tom Stellard [Mon, 11 May 2015 17:40:54 +0000 (17:40 +0000)]
CodeGen: Make MachineInstr::untieRegOperand() a public function

This makes it easier to update in place instructions with tied operands.

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

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

9 years ago[X86] Updates to X86 backend for f16 promotion
Pirama Arumuga Nainar [Mon, 11 May 2015 17:14:39 +0000 (17:14 +0000)]
[X86] Updates to X86 backend for f16 promotion

Summary:
r235215 adds support for f16 to be considered as a load/store type and
promote f16 operations to f32.

This patch has miscellaneous fixes for the X86 backend so all f16
operations are handled:
1. Set loadextaction for f16 vectors to expand.
2. Handle FP_EXTEND in a switch statement when handling v2f32
3. Do not fold (FP_TO_SINT (load f16)) into FP_TO_INT*_IN_MEM or
(store (SINT_TO_FP )) to a FILD.

Tests included.

Reviewers: ab, srhines, delena

Subscribers: llvm-commits

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

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

9 years agoRip min/max pattern matching out of InstCombine and into
James Molloy [Mon, 11 May 2015 14:42:20 +0000 (14:42 +0000)]
Rip min/max pattern matching out of InstCombine and into
 ValueTracking.

This matching functionality is useful in more than just InstCombine, so
make it available in ValueTracking.

NFC.

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

9 years agoAmends r236990, because I failed at hitting "save" before commit.
Aaron Ballman [Mon, 11 May 2015 13:11:38 +0000 (13:11 +0000)]
Amends r236990, because I failed at hitting "save" before commit.

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

9 years agoReplacing a range-based for loop with an old-style for loop. This code was previously...
Aaron Ballman [Mon, 11 May 2015 13:10:17 +0000 (13:10 +0000)]
Replacing a range-based for loop with an old-style for loop. This code was previously causing a warning with MSVC about a compiler-generated local variable because TargetRegistry::begin() and end() are static member functions. NFC.

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

9 years agoSilencing an MSVC warning: '<<' : result of 32-bit shift implicitly converted to...
Aaron Ballman [Mon, 11 May 2015 12:45:53 +0000 (12:45 +0000)]
Silencing an MSVC warning: '<<' : result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?); NFC

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

9 years ago[Testsuite] Renumber metadata in ScopedNoAliasAA test to match CHECK lines
Adam Nemet [Mon, 11 May 2015 09:10:14 +0000 (09:10 +0000)]
[Testsuite] Renumber metadata in ScopedNoAliasAA test to match CHECK lines

Summary:
Now it's much easier to follow what's happening in this test.

Also removed some unused metadata entries.

Reviewers: hfinkel

Reviewed By: hfinkel

Subscribers: llvm-commits

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

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

9 years agoAVX-512: Changed CC parameter in "cmp" intrinsic
Elena Demikhovsky [Mon, 11 May 2015 09:03:14 +0000 (09:03 +0000)]
AVX-512: Changed CC parameter in "cmp" intrinsic
from i8 to i32 according to the Intel Spec

by Igor Breger (igor.breger@intel.com)

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

9 years ago[Docs] Fix scoped noalias example
Adam Nemet [Mon, 11 May 2015 08:30:28 +0000 (08:30 +0000)]
[Docs] Fix scoped noalias example

Summary:
As far as I understand the entire point of this example is to show that
if noalias is not a superset/equal to the alias.scope list on a scope
domain then load could reference locations that the store is not known
to not-alias i.e may alias.

Reviewers: hfinkel

Reviewed By: hfinkel

Subscribers: llvm-commits

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

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

9 years ago[InstCombine/PowerPC] Fix single-precision QPX load/store replacement
Hal Finkel [Mon, 11 May 2015 06:37:03 +0000 (06:37 +0000)]
[InstCombine/PowerPC] Fix single-precision QPX load/store replacement

The QPX single-precision load/store intrinsics have implied
truncation/extension from/to the declared value type of <4 x double> to the
memory type of <4 x float>. When we can prove the alignment of the pointer
argument, and thus replace the intrinsic with a regular load or store, we need
to load or store the correct data type (<4 x float>) instead of (<4 x double>).

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

9 years agoFixed compilation warning, NFC.
Elena Demikhovsky [Mon, 11 May 2015 06:23:41 +0000 (06:23 +0000)]
Fixed compilation warning, NFC.

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

9 years agoAVX-512: Added SKX instructions and intrinsics:
Elena Demikhovsky [Mon, 11 May 2015 06:05:05 +0000 (06:05 +0000)]
AVX-512: Added SKX instructions and intrinsics:
{add/sub/mul/div/} x {ps/pd} x {128/256} 2. max/min with sae

By Asaf Badouh (asaf.badouh@intel.com)

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

9 years agoMake buildbots happy
David Majnemer [Mon, 11 May 2015 05:33:27 +0000 (05:33 +0000)]
Make buildbots happy

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

9 years ago[InstCombine] Canonicalize single element array store
David Majnemer [Mon, 11 May 2015 05:04:27 +0000 (05:04 +0000)]
[InstCombine] Canonicalize single element array store

Use the element type instead of the aggregate type.

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

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

9 years ago[InstCombine] Canonicalize single element array load
David Majnemer [Mon, 11 May 2015 05:04:22 +0000 (05:04 +0000)]
[InstCombine] Canonicalize single element array load

Use the element type instead of the aggregate type.

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

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

9 years agoAVX-512: fixed UINT_TO_FP operation for 512-bit types.
Elena Demikhovsky [Sun, 10 May 2015 14:23:52 +0000 (14:23 +0000)]
AVX-512: fixed UINT_TO_FP operation for 512-bit types.

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

9 years ago[SelectionDAG] Fixed constant folding issue when legalised types are smaller then...
Simon Pilgrim [Sun, 10 May 2015 14:14:51 +0000 (14:14 +0000)]
[SelectionDAG] Fixed constant folding issue when legalised types are smaller then the folded type.

Found when testing with llvm-stress on i686 targets.

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

9 years agoSanitizerCoverage: Use `createSanitizerCtor` to create ctor and call init
Ismail Pazarbasi [Sun, 10 May 2015 13:45:05 +0000 (13:45 +0000)]
SanitizerCoverage: Use `createSanitizerCtor` to create ctor and call init

Second attempt; instead of using a named local variable, passing
arguments directly to `createSanitizerCtorAndInitFunctions` worked
on Windows.

Reviewers: kcc, samsonov

Subscribers: llvm-commits

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

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

9 years agoAVX-512: fixed a bug in i1 vectors lowering
Elena Demikhovsky [Sun, 10 May 2015 10:33:32 +0000 (10:33 +0000)]
AVX-512: fixed a bug in i1 vectors lowering

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

9 years agoSystemZ: silence a GCC warning
Saleem Abdulrasool [Sun, 10 May 2015 00:53:41 +0000 (00:53 +0000)]
SystemZ: silence a GCC warning

warning: enumeral and non-enumeral type in conditional expression

Cast the 0 to the appropriate type.  NFC.  Identified by GCC 4.9.2

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

9 years agoAdd polly support to sort_includes.py
Tobias Grosser [Sat, 9 May 2015 09:08:56 +0000 (09:08 +0000)]
Add polly support to sort_includes.py

Changes:
 -  Add "isl/" as a system library prefix. Even though isl is regularly
    imported into polly, it is still used like an external library.
 -  Add "json/" as a system library prefix. Polly uses json-cpp as external
    library.
 -  Distinguish between llvm and subproject libraries. Always sort subprojects
    before LLVM. This was already the case with clang, as 'clang' comes before
    'llvm', but we also want 'polly' to be sorted before 'llvm'.

The sorting of headers that are not part of Polly or isl remains unchanged.

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

9 years agollvm/test/CodeGen/AArch64/tailcall_misched_graph.ll: s/REQUIRE/REQUIRES/
NAKAMURA Takumi [Sat, 9 May 2015 05:59:00 +0000 (05:59 +0000)]
llvm/test/CodeGen/AArch64/tailcall_misched_graph.ll: s/REQUIRE/REQUIRES/

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

9 years agoFix MergeConsecutiveStore for non-byte-sized memory accesses.
James Y Knight [Sat, 9 May 2015 03:13:37 +0000 (03:13 +0000)]
Fix MergeConsecutiveStore for non-byte-sized memory accesses.

The bug showed up as a compile-time assertion failure:
  Assertion `NumBits >= MIN_INT_BITS && "bitwidth too small"' failed
when building msan tests on x86-64.

Prior to r236850, this bug was masked due to a bogus alignment check,
which also accidentally rejected non-byte-sized accesses. Afterwards,
an invalid ElementSizeBytes == 0 got further into the function, and
triggered the assertion failure.

It would probably be a good idea to allow it to handle merging stores
of unusual widths as well, but for now, to un-break it, I'm just
making the minimal fix.

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

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

9 years agoMachineCSE: Add a target query for the LookAheadLimit heurisitic
Tom Stellard [Sat, 9 May 2015 00:56:07 +0000 (00:56 +0000)]
MachineCSE: Add a target query for the LookAheadLimit heurisitic

This is used to determine whether or not to CSE physical register
defs.

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

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

9 years ago[Fast-ISel] Don't mark the first use of a remat constant as killed.
Pete Cooper [Sat, 9 May 2015 00:51:03 +0000 (00:51 +0000)]
[Fast-ISel] Don't mark the first use of a remat constant as killed.

When emitting something like 'add x, 1000' if we remat the 1000 then we should be able to
mark the vreg containing 1000 as killed.  Given that we go bottom up in fast-isel, a later
use of 1000 will be higher up in the BB and won't kill it, or be impacted by the lower kill.

However, rematerialised constant expressions aren't generated bottom up.  The local value save area
grows downwards.  This means that if you remat 2 constant expressions which both use 1000 then the
first will kill it, then the second, which is *lower* in the BB will read a killed register.

This is the case in the attached test where the 2 GEPs both need to generate 'add x, 6680' for the constant offset.

Note that this commit only makes kill flag generation conservative.  There's nothing else obviously wrong with
the local value save area growing downwards, and in fact it needs to for handling arbitrarily complex constant expressions.

However, it would be nice if there was a solution which would let us generate more accurate kill flags, or just kill flags completely.

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

9 years agoFix compile error
Arnold Schwaighofer [Sat, 9 May 2015 00:10:25 +0000 (00:10 +0000)]
Fix compile error

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

9 years agoRevert r236912.
Quentin Colombet [Sat, 9 May 2015 00:02:06 +0000 (00:02 +0000)]
Revert r236912.

Author: dblaikie
Date: Fri May  8 17:47:50 2015
New Revision: 236912

URL: http://llvm.org/viewvc/llvm-project?rev=236912&view=rev
Log:
[opaque pointer type] Cleanup a few references to pointee types using nearby non-pointee types of the same value

& cleanup a convoluted return expression while I'm here

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

9 years ago[Target/ARM] Remove unused 'private' from class.
Davide Italiano [Fri, 8 May 2015 23:58:28 +0000 (23:58 +0000)]
[Target/ARM] Remove unused 'private' from class.

Differential Revision: http://reviews.llvm.org/D9611
Reviewed by: rengolin

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

9 years agoScheduleDAGInstrs: In functions with tail calls PseudoSourceValues are not non-aliasi...
Arnold Schwaighofer [Fri, 8 May 2015 23:52:00 +0000 (23:52 +0000)]
ScheduleDAGInstrs: In functions with tail calls PseudoSourceValues are not non-aliasing distinct objects

The code that builds the dependence graph assumes that two PseudoSourceValues
don't alias. In a tail calling function two FixedStackObjects might refer to the
same location. Worse 'immutable' fixed stack objects like function arguments are
not immutable and will be clobbered.

Change this so that a load from a FixedStackObject is not invariant in a tail
calling function and don't return a PseudoSourceValue for an instruction in tail
calling functions when building the dependence graph so that we handle function
arguments conservatively.

Fix for PR23459.

rdar://20740035

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

9 years ago[opaque pointer type] Cleanup a few references to pointee types using nearby non...
David Blaikie [Fri, 8 May 2015 22:47:50 +0000 (22:47 +0000)]
[opaque pointer type] Cleanup a few references to pointee types using nearby non-pointee types of the same value

& cleanup a convoluted return expression while I'm here

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

9 years ago[lib/Fuzzer] build tests that work well with dfsan also w/o dfsan
Kostya Serebryany [Fri, 8 May 2015 21:45:19 +0000 (21:45 +0000)]
[lib/Fuzzer] build tests that work well with dfsan also w/o dfsan

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

9 years ago[lib/Fuzzer] use -fsanitize-coverage=trace-cmp when building LLVM with LLVM_USE_SANIT...
Kostya Serebryany [Fri, 8 May 2015 21:30:55 +0000 (21:30 +0000)]
[lib/Fuzzer] use -fsanitize-coverage=trace-cmp when building LLVM with LLVM_USE_SANITIZE_COVERAGE; in lib/Fuzzer try to reload the corpus to pick up new units from other processes

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

9 years agoSwitch lowering: cluster adjacent fall-through cases even at -O0
Hans Wennborg [Fri, 8 May 2015 21:23:39 +0000 (21:23 +0000)]
Switch lowering: cluster adjacent fall-through cases even at -O0

It's cheap to do, and codegen is much faster if cases can be merged
into clusters.

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

9 years agoAdd a comment about DepthFirstIterator's skipchildren behavior
Daniel Berlin [Fri, 8 May 2015 21:17:24 +0000 (21:17 +0000)]
Add a comment about DepthFirstIterator's skipchildren behavior

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

9 years agoTargetParser: FPU/ARCH/EXT parsing refactory - NFC
Renato Golin [Fri, 8 May 2015 21:04:27 +0000 (21:04 +0000)]
TargetParser: FPU/ARCH/EXT parsing refactory - NFC

This new class in a global context contain arch-specific knowledge in order
to provide LLVM libraries, tools and projects with the ability to understand
the architectures. For now, only FPU, ARCH and ARCH extensions on ARM are
supported.

Current behaviour it to parse from free-text to enum values and back, so that
all users can share the same parser and codes. This simplifies a lot both the
ASM/Obj streamers in the back-end (where this came from), and the front-end
parsers for command line arguments (where this is going to be used next).

The previous implementation, using .def/.h includes is deprecated due to its
inflexibility to be built without the backend support and for being too
cumbersome. As more architectures join this scheme, and as more features of
such architectures are added (such as hardware features, type sizes, etc) into
a full blown TargetDescription class, having a set of classes is the most
sane implementation.

The ultimate goal of this refactor both LLVM's and Clang's target description
classes into one unique interface, so that we can de-duplicate and standardise
the descriptions, as well as make it available for other front-ends, tools,
etc.

The FPU parsing for command line options in Clang has been converted to use
this new library and a number of aliases were added for compatibility:
 * A bogus neon-vfpv3 alias (neon defaults to vfp3)
 * armv5/v6
 * {fp4/fp5}-{sp/dp}-d16

Next steps:
 * Port Clang's ARCH/EXT parsing to use this library.
 * Create a TableGen back-end to generate this information.
 * Run this TableGen process regardless of which back-ends are built.
 * Expose more information and rename it to TargetDescription.
 * Continue re-factoring Clang to use as much of it as possible.

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

9 years agoUpdate Function::getContext documentation. NFC.
Diego Novillo [Fri, 8 May 2015 21:01:29 +0000 (21:01 +0000)]
Update Function::getContext documentation. NFC.

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

9 years ago[Fast-ISel] Clear kill flags on registers replaced by updateValueMap.
Pete Cooper [Fri, 8 May 2015 20:46:54 +0000 (20:46 +0000)]
[Fast-ISel] Clear kill flags on registers replaced by updateValueMap.

When selecting an extract instruction, we don't actually generate code but instead work out which register we are reading, and rewrite uses of the extract def to the source register.  This is done via updateValueMap,.

However, its possible that the source register we are rewriting *to* to also have uses.  If those uses are after a kill of the value we are rewriting *from* then we have uses after a kill and the verifier fails.

This code checks for the case where the to register is also used, and if so it clears all kill on the from register.  This is conservative, but better that always clearing kills on the from register.

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

9 years ago[Hexagon] Generate more hardware loops
Brendon Cahoon [Fri, 8 May 2015 20:18:21 +0000 (20:18 +0000)]
[Hexagon] Generate more hardware loops

Refactored parts of the hardware loop pass to generate
more. Also, added more tests.

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

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

9 years ago[BasicAA] Fix zext & sext handling
Sanjoy Das [Fri, 8 May 2015 18:58:55 +0000 (18:58 +0000)]
[BasicAA] Fix zext & sext handling

Summary:

There are several unhandled edge cases in BasicAA's GetLinearExpression
method. This changes fixes outstanding issues, including zext / sext of
a constant with the sign bit set, and the refusal to decompose zexts or
sexts of wrapping arithmetic.

Test Plan: Unit tests added in //q.ext.ll//.

Patch by Nick White.

Reviewers: hfinkel, sanjoy

Reviewed By: hfinkel, sanjoy

Subscribers: sanjoy, llvm-commits, hfinkel

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

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

9 years agoReplace branch-to-unreachable with assertion.
David Blaikie [Fri, 8 May 2015 18:52:28 +0000 (18:52 +0000)]
Replace branch-to-unreachable with assertion.

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

9 years agoFix a docs build break introduced by rL236888.
Pat Gavlin [Fri, 8 May 2015 18:37:49 +0000 (18:37 +0000)]
Fix a docs build break introduced by rL236888.

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

9 years ago[X86] Fast-ISel was incorrectly always killing the source of a truncate.
Pete Cooper [Fri, 8 May 2015 18:29:42 +0000 (18:29 +0000)]
[X86] Fast-ISel was incorrectly always killing the source of a truncate.

A trunc from i32 to i1 on x86_64 generates an instruction such as

%vreg19<def> = COPY %vreg9:sub_8bit<kill>; GR8:%vreg19 GR32:%vreg9

However, the copy here should only have the kill flag on the 32-bit path, not the 64-bit one.
Otherwise, we are killing the source of the truncate which could be used later in the program.

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

9 years agoExtend the statepoint intrinsic to allow statepoints to be marked as transitions...
Pat Gavlin [Fri, 8 May 2015 18:07:42 +0000 (18:07 +0000)]
Extend the statepoint intrinsic to allow statepoints to be marked as transitions from GC-aware code to code that is not GC-aware.

This changes the shape of the statepoint intrinsic from:

  @llvm.experimental.gc.statepoint(anyptr target, i32 # call args, i32 unused, ...call args, i32 # deopt args, ...deopt args, ...gc args)

to:

  @llvm.experimental.gc.statepoint(anyptr target, i32 # call args, i32 flags, ...call args, i32 # transition args, ...transition args, i32 # deopt args, ...deopt args, ...gc args)

This extension offers the backend the opportunity to insert (somewhat) arbitrary code to manage the transition from GC-aware code to code that is not GC-aware and back.

In order to support the injection of transition code, this extension wraps the STATEPOINT ISD node generated by the usual lowering lowering with two additional nodes: GC_TRANSITION_START and GC_TRANSITION_END. The transition arguments that were passed passed to the intrinsic (if any) are lowered and provided as operands to these nodes and may be used by the backend during code generation.

Eventually, the lowering of the GC_TRANSITION_{START,END} nodes should be informed by the GC strategy in use for the function containing the intrinsic call; for now, these nodes are instead replaced with no-ops.

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

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

9 years ago[NoTTI] reject negative scale in addressing mode
Jingyue Wu [Fri, 8 May 2015 18:07:24 +0000 (18:07 +0000)]
[NoTTI] reject negative scale in addressing mode

Summary:
I noticed this bug when deubging a WIP on LSR. I wonder whether and how we
should add a regression test for this.

Test Plan: no tests failed.

Reviewers: atrick

Subscribers: hfinkel, llvm-commits

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

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

9 years agoClear kill flags on all used registers when sinking instructions.
Pete Cooper [Fri, 8 May 2015 17:54:32 +0000 (17:54 +0000)]
Clear kill flags on all used registers when sinking instructions.

The test here was sinking the AND here to a lower BB:

%vreg7<def> = ANDWri %vreg8, 0; GPR32common:%vreg7,%vreg8
TBNZW %vreg8<kill>, 0, <BB#1>; GPR32common:%vreg8

which meant that vreg8 was read after it was killed.

This commit changes the code from clearing kill flags on the AND to clearing flags on all registers used by the AND.

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

9 years ago80 cols fix since i'm looking at this function anyway. NFC
Pete Cooper [Fri, 8 May 2015 17:54:29 +0000 (17:54 +0000)]
80 cols fix since i'm looking at this function anyway.  NFC

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

9 years agoRemove duplicate cmake target I added in r236792.
Pete Cooper [Fri, 8 May 2015 16:59:53 +0000 (16:59 +0000)]
Remove duplicate cmake target I added in r236792.

Thanks to Daniel Jasper for pointing out the mistake.

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

9 years agoUnbreak build: Makefile must have the same change as CMakeLists.txt
Douglas Katzman [Fri, 8 May 2015 16:39:59 +0000 (16:39 +0000)]
Unbreak build: Makefile must have the same change as CMakeLists.txt

This was omitted from http://reviews.llvm.org/D9441
(the irony is that that was to detect omissions in something else)

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

9 years ago[Hexagon] Update AnalyzeBranch, etc target hooks
Brendon Cahoon [Fri, 8 May 2015 16:16:29 +0000 (16:16 +0000)]
[Hexagon] Update AnalyzeBranch, etc target hooks

Improved the AnalyzeBranch, InsertBranch, and RemoveBranch
functions in order to handle more of our branch instructions.
This requires changes to analyzeCompare and PredicateInstructions.
Specifically, we've added support for new value compare jumps,
improved handling of endloop, added more compare instructions,
and improved support for predicate instructions.

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

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

9 years agoPrevent further errors of omission when adding backend names.
Douglas Katzman [Fri, 8 May 2015 15:34:12 +0000 (15:34 +0000)]
Prevent further errors of omission when adding backend names.

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

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

9 years ago[X86] Teach 'getTargetShuffleMask' how to look through ISD::WrapperRIP when decoding...
Andrea Di Biagio [Fri, 8 May 2015 15:11:07 +0000 (15:11 +0000)]
[X86] Teach 'getTargetShuffleMask' how to look through ISD::WrapperRIP when decoding a PSHUFB mask.

The function 'getTargetShuffleMask' already knows how to deal with PSHUFB nodes
where the mask node is a load from constant pool, and the constant pool node
is wrapped by a X86ISD::Wrapper node. This patch extends that logic by teaching
it how to also look through X86ISD::WrapperRIP.

This helps function combineX86ShufflesRecusively to combine more shuffle
sequences containing PSHUFB nodes if we are in RIPRel PIC mode.

Before this change, llc (with -relocation-model=pic -march=x86-64) was unable
to decode a pshufb where the mask was loaded from a constant pool. For example,
the no-op shuffle from test 'x86-fold-pshufb.ll' was not folded into its
operand, so instead of generating a single 'movaps' the backend always
generated a sub-optimal 'movdqa + pshufb' sequence.

Added test x86-fold-pshufb.ll.

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

9 years ago[mips][microMIPSr6] Implement ALUIPC and AUIPC instructions
Jozef Kolek [Fri, 8 May 2015 14:25:11 +0000 (14:25 +0000)]
[mips][microMIPSr6] Implement ALUIPC and AUIPC instructions

This patch implements ALUIPC and AUIPC instructions using mapping.

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

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

9 years agoFix test added in r236850 for OSX builders.
James Y Knight [Fri, 8 May 2015 14:04:54 +0000 (14:04 +0000)]
Fix test added in r236850 for OSX builders.

Need to specify triple so that llvm emits the asm syntax that the
test expected.

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

9 years ago[mips][microMIPSr6] Implement ADDIUPC and LWPC instructions
Jozef Kolek [Fri, 8 May 2015 13:52:04 +0000 (13:52 +0000)]
[mips][microMIPSr6] Implement ADDIUPC and LWPC instructions

This patch implements ADDIUPC and LWPC instructions using mapping.

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

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

9 years agoFix alignment checks in MergeConsecutiveStores.
James Y Knight [Fri, 8 May 2015 13:47:01 +0000 (13:47 +0000)]
Fix alignment checks in MergeConsecutiveStores.

1) check whether the alignment of the memory is sufficient for the
*merged* store or load to be efficient.

Not doing so can result in some ridiculously poor code generation, if
merging creates a vector operation which must be aligned but isn't.

2) DON'T check that the alignment of each load/store is equal. If
you're merging 2 4-byte stores, the first *might* have 8-byte
alignment, but the second certainly will have 4-byte alignment. We do
want to allow those to be merged.

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

9 years agoFix coding standart based on post submit comments.
Igor Laevsky [Fri, 8 May 2015 13:17:22 +0000 (13:17 +0000)]
Fix coding standart based on post submit comments.

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

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

9 years ago[ARM] Reject invalid -march values
John Brawn [Fri, 8 May 2015 12:52:02 +0000 (12:52 +0000)]
[ARM] Reject invalid -march values

Restructure Triple::getARMCPUForArch so that invalid values will
return nullptr, while retaining the behaviour that an argument
specifying no particular architecture version will give a default
CPU. This will be used by clang to give an error on invalid -march
values.

Also restructure the extraction of the architecture version from
the MArch string a little to hopefully make what it's doing clearer.

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

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

9 years agoFix gcc warning of different enum and non-enum types in ternary
Denis Protivensky [Fri, 8 May 2015 12:21:03 +0000 (12:21 +0000)]
Fix gcc warning of different enum and non-enum types in ternary

Make '0' literal explicitly unsigned with '0u'.
This appeared after r236775.

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

9 years ago[mips] Only use FGR_{32,64} in TableGen descriptions. NFC.
Toma Tabacu [Fri, 8 May 2015 12:15:04 +0000 (12:15 +0000)]
[mips] Only use FGR_{32,64} in TableGen descriptions. NFC.

Summary: Instead of explicitly adding the IsFP64bit and NotFP64bit predicates through AdditionalRequires.

Reviewers: dsanders

Reviewed By: dsanders

Subscribers: llvm-commits

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

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

9 years agoThis change is refactoring only. It moves basic block normalization for invokes to...
Igor Laevsky [Fri, 8 May 2015 11:59:09 +0000 (11:59 +0000)]
This change is refactoring only. It moves basic block normalization for invokes to happen before replacement of a call with safepoint in "ReplaceWithStatepoint". Previously it was partly done before replacement of calls with safepoint and partly after call replacement but before RAUW's for gc_relocates, which was confusing.

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

9 years ago[mips] Emit the .insn directive for empty basic blocks.
Vasileios Kalintiris [Fri, 8 May 2015 09:10:15 +0000 (09:10 +0000)]
[mips] Emit the .insn directive for empty basic blocks.

Summary:
In microMIPS, labels need to know whether they are on code or data. This is
indicated with STO_MIPS_MICROMIPS and can be inferred by being followed
by instructions. For empty basic blocks, we can ensure this by emitting the
.insn directive after the label.

Also, this fixes some failures in our out-of-tree microMIPS buildbots, for the
exception handling regression tests under: SingleSource/Regression/C++/EH

Reviewers: dsanders

Subscribers: llvm-commits

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

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

9 years ago[yaml2elf] Replace error message by assert call in writeSectionContent methods
Simon Atanasyan [Fri, 8 May 2015 07:05:04 +0000 (07:05 +0000)]
[yaml2elf] Replace error message by assert call in writeSectionContent methods

Now caller of ELFState::writeSectionContent() methods is responsible to check
a section type and selects an appropriate writeSectionContent method.
So unexpected section type inside writeSectionContent method indicates
a wrong usage of the method and should be guarded by assert.

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

9 years ago[llvm-readobj/obj2yaml/yaml2obj] Support MIPS machine ELF header flags
Simon Atanasyan [Fri, 8 May 2015 07:04:59 +0000 (07:04 +0000)]
[llvm-readobj/obj2yaml/yaml2obj] Support MIPS machine ELF header flags

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

9 years agoNow that we have a soft-float attribute, use it instead of the
Eric Christopher [Fri, 8 May 2015 00:57:22 +0000 (00:57 +0000)]
Now that we have a soft-float attribute, use it instead of the
hard coded command line option for the Mips soft float tests.

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

9 years ago[opaque pointer type] Explicit pointee type for GEPOperator/GEPConstantExpr.
David Blaikie [Fri, 8 May 2015 00:42:26 +0000 (00:42 +0000)]
[opaque pointer type] Explicit pointee type for GEPOperator/GEPConstantExpr.

Also a couple of other changes to avoid use of
PointerType::getElementType here & there too.

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

9 years agoUpdate CMake flags, LibFuzzer comments and docs for new -fsanitize-coverage= flags.
Alexey Samsonov [Thu, 7 May 2015 23:33:24 +0000 (23:33 +0000)]
Update CMake flags, LibFuzzer comments and docs for new -fsanitize-coverage= flags.

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

9 years agoInMips16HardFloat was only being set conditional on whether or
Eric Christopher [Thu, 7 May 2015 23:10:23 +0000 (23:10 +0000)]
InMips16HardFloat was only being set conditional on whether or
not IsSoftFloat was set so remove it from here simplifying the
accessor.

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

9 years agoRename the MIPS routine abiUsesSoftFloat -> useSoftFloat to match
Eric Christopher [Thu, 7 May 2015 23:10:21 +0000 (23:10 +0000)]
Rename the MIPS routine abiUsesSoftFloat -> useSoftFloat to match
some incoming changes and the general scheme used by features (use/has).

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

9 years agoAdd yaml-bench to the list of tools make check needs to run
Pete Cooper [Thu, 7 May 2015 22:53:11 +0000 (22:53 +0000)]
Add yaml-bench to the list of tools make check needs to run

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

9 years agoDelete unused createSanitizerCoverageModulePass overload.
Alexey Samsonov [Thu, 7 May 2015 22:46:06 +0000 (22:46 +0000)]
Delete unused createSanitizerCoverageModulePass overload.

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

9 years ago[CMake] llvm/test/YAMLParser requires yaml-bench. This fixes r236754.
NAKAMURA Takumi [Thu, 7 May 2015 22:24:58 +0000 (22:24 +0000)]
[CMake] llvm/test/YAMLParser requires yaml-bench. This fixes r236754.

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

9 years agoRevert "SanitizerCoverage: Use `createSanitizerCtor` to create ctor and call init"
Ismail Pazarbasi [Thu, 7 May 2015 22:17:48 +0000 (22:17 +0000)]
Revert "SanitizerCoverage: Use `createSanitizerCtor` to create ctor and call init"

Will fix tomorrow. Unbreak build bots now.

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

9 years agoFix typo.
Matthias Braun [Thu, 7 May 2015 22:16:10 +0000 (22:16 +0000)]
Fix typo.

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

9 years agoClear kill flags in tail duplication.
Pete Cooper [Thu, 7 May 2015 21:48:26 +0000 (21:48 +0000)]
Clear kill flags in tail duplication.

If we duplicate an instruction then we must also clear kill flags on any uses we rewrite.
Otherwise we might be killing a register which was used in other BBs.

For example, here the entry BB ended up with these instructions, the ADD having been tail duplicated.

%vreg24<def> = t2ADDri %vreg10<kill>, 1, pred:14, pred:%noreg, opt:%noreg; GPRnopc:%vreg24 rGPR:%vreg10
%vreg22<def> = COPY %vreg10; GPR:%vreg22 rGPR:%vreg10

The copy here is inserted after the add and so needs vreg10 to be live.

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

9 years agoWhen checking msan.module_ctor, use CHECK-LABEL instead of CHECK
Ismail Pazarbasi [Thu, 7 May 2015 21:47:25 +0000 (21:47 +0000)]
When checking msan.module_ctor, use CHECK-LABEL instead of CHECK

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

9 years agoSanitizerCoverage: Use `createSanitizerCtor` to create ctor and call init
Ismail Pazarbasi [Thu, 7 May 2015 21:43:28 +0000 (21:43 +0000)]
SanitizerCoverage: Use `createSanitizerCtor` to create ctor and call init

Reviewers: kcc, samsonov

Subscribers: llvm-commits

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

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

9 years agoMSan: Use `createSanitizerCtor` to create ctor, and call `__msan_init`
Ismail Pazarbasi [Thu, 7 May 2015 21:41:52 +0000 (21:41 +0000)]
MSan: Use `createSanitizerCtor` to create ctor, and call `__msan_init`

Reviewers: kcc, eugenis

Subscribers: llvm-commits

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

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

9 years agoTSan: Use `createSanitizerCtor` to create ctor, and call `__tsan_init`
Ismail Pazarbasi [Thu, 7 May 2015 21:41:23 +0000 (21:41 +0000)]
TSan: Use `createSanitizerCtor` to create ctor, and call `__tsan_init`

Reviewers: kcc, dvyukov

Subscribers: llvm-commits

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

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

9 years agoASan: Use `createSanitizerCtor` to create ctor, and call `__asan_init`
Ismail Pazarbasi [Thu, 7 May 2015 21:40:46 +0000 (21:40 +0000)]
ASan: Use `createSanitizerCtor` to create ctor, and call `__asan_init`

Reviewers: kcc, samsonov

Subscribers: llvm-commits

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

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

9 years agoChange getTargetNodeName() to produce compiler warnings for missing cases, fix them
Matthias Braun [Thu, 7 May 2015 21:33:59 +0000 (21:33 +0000)]
Change getTargetNodeName() to produce compiler warnings for missing cases, fix them

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

9 years ago[lib/Fuzzer] change the way we use taint information for fuzzing. Now, we run a singl...
Kostya Serebryany [Thu, 7 May 2015 21:02:11 +0000 (21:02 +0000)]
[lib/Fuzzer] change the way we use taint information for fuzzing. Now, we run a single unit and collect suggested mutations based on tracing+taint data, then apply the suggested mutations one by one. The previous scheme was slower and more complex.

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

9 years agoUse auto instead of the long type name. NFC.
Steven Wu [Thu, 7 May 2015 19:56:23 +0000 (19:56 +0000)]
Use auto instead of the long type name. NFC.

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

9 years ago[AArch64] Fix sext/zext folding in address arithmetic.
Pete Cooper [Thu, 7 May 2015 19:21:36 +0000 (19:21 +0000)]
[AArch64] Fix sext/zext folding in address arithmetic.

We were accidentally folding a sign/zero extend in to address arithmetic in a different BB when the extend wasn't available there.

Cross BB fast-isel isn't safe, so restrict this to only when the extend is in the same BB as the use.

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

9 years agoFix r236754: Add the missing yaml-bench dir to the makefile for utils.
Alex Lorenz [Thu, 7 May 2015 18:48:48 +0000 (18:48 +0000)]
Fix r236754: Add the missing yaml-bench dir to the makefile for utils.

This commit adds the missing yaml-bench utility to the
makefile in utils. It was missing before and it caused
the regression tests to fail on some buildbots when llvm-lit
couldn't find yaml-bench when llvm was built without
cmake after I committed r236754.

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

9 years agoDisable r235989 "Reapply r235977 "[DebugInfo] Add debug locations to constant SD...
Sergey Dmitrouk [Thu, 7 May 2015 18:33:50 +0000 (18:33 +0000)]
Disable r235989 "Reapply r235977 "[DebugInfo] Add debug locations to constant SD nodes""

Will be re-enabled with missing changes for ConstantFPSDNode and
fixes for wrong locations due to constant coalescing.

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

9 years ago[lib/Fuzzer] minor refactoring/simplification, NFC
Kostya Serebryany [Thu, 7 May 2015 18:32:29 +0000 (18:32 +0000)]
[lib/Fuzzer] minor refactoring/simplification, NFC

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

9 years agoAdd VSX Scalar loads and stores to the PPC back end
Nemanja Ivanovic [Thu, 7 May 2015 18:24:05 +0000 (18:24 +0000)]
Add VSX Scalar loads and stores to the PPC back end

This patch corresponds to review:
http://reviews.llvm.org/D9440

It adds a new register class to the PPC back end to contain single precision
values in VSX registers. Additionally, it adds scalar loads and stores for
VSX registers.

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

9 years agoYAML: Enable the YAMLParser tests.
Alex Lorenz [Thu, 7 May 2015 18:08:46 +0000 (18:08 +0000)]
YAML: Enable the YAMLParser tests.

This commit enables the tests located in test/YAMLParser directory.
Those tests were never actually enabled, as llvm-lit didn't pick up the
files with the 'data' extension. The commit renames those test files to files
with the 'test' extension so that llvm-lit would find them.

This commit also modifies yaml-bench so that it returns an error status
if an error occurred during parsing. It also adds the '-use-color'
command line option to yaml-bench (to make sure that file check matches
the error messages in the output stream).

This commit modifies some of the renamed tests so that they wouldn't
fail. It gets rid of XFAILs and uses the 'not' command instead for
some of the tests that have to fail during parsing. This commit
also adds some 'FIXME' comments to a couple of tests that are
supposed to fail but currently pass because of various bugs
in the implementation of the yaml parser.

Reviewers: Justin Bogner

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

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

9 years agoRecommit r236670: [opaque pointer type] Pass explicit pointer type through GEP consta...
David Blaikie [Thu, 7 May 2015 17:28:58 +0000 (17:28 +0000)]
Recommit r236670: [opaque pointer type] Pass explicit pointer type through GEP constant folding""

Clang regressions were caused by more stringent assertion checking
introduced by this change. Small fix needed to clang has been committed
in r236751.

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

9 years agoFix information loss in branch probability computation.
Diego Novillo [Thu, 7 May 2015 17:22:06 +0000 (17:22 +0000)]
Fix information loss in branch probability computation.

Summary:
This addresses PR 22718. When branch weights are too large, they were
being clamped to the range [1, MaxWeightForBB]. But this clamping is
only applied to edges that go outside the range, so it distorts the
relative branch probabilities.

This patch changes the weight calculation to scale every branch so the
relative probabilities are preserved. The scaling is done differently
now. First, all the branch weights are added up, and if the sum exceeds
32 bits, it computes an integer scale to bring all the weights within
the range.

The patch fixes an existing test that had slightly wrong branch
probabilities due to the previous clamping. It now gets branch weights
scaled accordingly.

Reviewers: dexonsmith

Subscribers: llvm-commits

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

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

9 years ago[mips][microMIPSr6] Implement JIALC and JIC instructions
Jozef Kolek [Thu, 7 May 2015 17:12:23 +0000 (17:12 +0000)]
[mips][microMIPSr6] Implement JIALC and JIC instructions

This patch implements JIALC and JIC instructions using mapping.

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

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

9 years agoPopulate list of vectorizable functions for Accelerate library.
Michael Zolotukhin [Thu, 7 May 2015 17:11:51 +0000 (17:11 +0000)]
Populate list of vectorizable functions for Accelerate library.

Summary:
This patch adds majority of supported by Accelerate library functions to the
list of vectorizable functions.

The full list of available vector functions could be found here:
https://developer.apple.com/library/mac/documentation/Performance/Conceptual/vecLib/index.html

Test Plan: Unit tests are added.

Reviewers: hfinkel, aschwaighofer, nadav

Subscribers: llvm-commits

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

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

9 years agoR600: Fix comment that mentions AMDIL
Matt Arsenault [Thu, 7 May 2015 17:02:32 +0000 (17:02 +0000)]
R600: Fix comment that mentions AMDIL

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

9 years agoUse intrinsic pattern to make a simpler match
Sanjay Patel [Thu, 7 May 2015 16:51:12 +0000 (16:51 +0000)]
Use intrinsic pattern to make a simpler match

This is a follow-on to r236740 where I took Andrea's advice
in D9504 to remove a redundant pattern...except that I removed
the wrong pattern!

AFAICT, there is no change in the final code produced because
subsequent passes would clean up the extra instructions created
by the more complicated pattern.

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

9 years agoFix another hang caused by ManagedStatic in SignalHandler
Steven Wu [Thu, 7 May 2015 16:20:51 +0000 (16:20 +0000)]
Fix another hang caused by ManagedStatic in SignalHandler

Fix two other variables that might cause the same hang fixed in r235914.
The hang is caused by constructing ManagedStatic in signalhandler. In
this case, if FileToRemove or CallBacksToRun is not contructed, it means
there is no work to do.

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

9 years ago[x86] eliminate unnecessary shuffling/moves with unary scalar math ops (PR21507)
Sanjay Patel [Thu, 7 May 2015 15:48:53 +0000 (15:48 +0000)]
[x86] eliminate unnecessary shuffling/moves with unary scalar math ops (PR21507)

Finish the job that was abandoned in D6958 following the refactoring in
http://reviews.llvm.org/rL230221:

1. Uncomment the intrinsic def for the AVX r_Int instruction.
2. Add missing r_Int entries to the load folding tables; there are already
   tests that check these in "test/Codegen/X86/fold-load-unops.ll", so I
   haven't added any more in this patch.
3. Add patterns to solve PR21507 ( https://llvm.org/bugs/show_bug.cgi?id=21507 ).

So instead of this:

  movaps %xmm0, %xmm1
  rcpss %xmm1, %xmm1
  movss %xmm1, %xmm0

We should now get:

  rcpss %xmm0, %xmm0

And instead of this:

  vsqrtss %xmm0, %xmm0, %xmm1
  vblendps $1, %xmm1, %xmm0, %xmm0 ## xmm0 = xmm1[0],xmm0[1,2,3]

We should now get:

  vsqrtss %xmm0, %xmm0, %xmm0

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

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

9 years agoSwitch lowering: handle zero-weight branch probabilities
Hans Wennborg [Thu, 7 May 2015 15:47:15 +0000 (15:47 +0000)]
Switch lowering: handle zero-weight branch probabilities

After r236617, branch probabilities are no longer guaranteed to be >= 1. This
patch makes the swich lowering code handle that correctly, without bumping the
branch weights by 1 which might cause overflow and skews the probabilities.

Covered by @zero_weight_tree in test/CodeGen/X86/switch.ll.

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