OSDN Git Service

android-x86/external-llvm.git
6 years ago[NFC][InstCombine] Fix extra space padding in icmp-mul-zext.ll test
Roman Lebedev [Wed, 11 Jul 2018 09:57:53 +0000 (09:57 +0000)]
[NFC][InstCombine] Fix extra space padding in icmp-mul-zext.ll test

update_test_checks will drop it anyway, creating noise..

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

6 years ago[NFC][InstCombine] Add variable names and regenerate icmp-logical.ll test.
Roman Lebedev [Wed, 11 Jul 2018 09:57:46 +0000 (09:57 +0000)]
[NFC][InstCombine] Add variable names and regenerate icmp-logical.ll test.

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

6 years ago[SelectionDAG] Add constant buildvector support to isKnownNeverZero
Simon Pilgrim [Wed, 11 Jul 2018 09:56:41 +0000 (09:56 +0000)]
[SelectionDAG] Add constant buildvector support to isKnownNeverZero

This allows us to use SelectionDAG::isKnownNeverZero in DAGCombiner::visitREM (visitSDIVLike/visitUDIVLike handle the checking for constants).

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

6 years ago[llvm-mca] Add tests for partial register writes.
Andrea Di Biagio [Wed, 11 Jul 2018 09:50:00 +0000 (09:50 +0000)]
[llvm-mca] Add tests for partial register writes.

llvm-mca doesn't know that on modern AMD processors, portions of a general
purpose register are not treated independently. So, a partial register write has
a false dependency on the super-register.

The issue with partial register writes will be addressed by a follow-up patch.

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

6 years ago[mips] Remove dead code. NFC
Simon Atanasyan [Wed, 11 Jul 2018 09:41:28 +0000 (09:41 +0000)]
[mips] Remove dead code. NFC

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

6 years ago[DAGCombiner] Support non-uniform X%C -> X-(X/C)*C folds
Simon Pilgrim [Wed, 11 Jul 2018 09:22:42 +0000 (09:22 +0000)]
[DAGCombiner] Support non-uniform X%C -> X-(X/C)*C folds

First stage in PR38057 - support non-uniform constant vectors in the combine to reuse the division-by-constant logic.

We can definitely do better for srem pow2 remainders (and avoid that extra multiply....) but this at least helps keep everything on the vector unit.

Differential Revision: https://reviews.llvm.org/D48975

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

6 years ago[DAGCombiner] Add (urem X, -1) -> select(X == -1, 0, x) fold
Simon Pilgrim [Wed, 11 Jul 2018 09:14:37 +0000 (09:14 +0000)]
[DAGCombiner] Add (urem X, -1) -> select(X == -1, 0, x) fold

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

6 years ago[TableGen] Add missing std::moves to fix build failure.
Simon Tatham [Wed, 11 Jul 2018 08:57:56 +0000 (08:57 +0000)]
[TableGen] Add missing std::moves to fix build failure.

gcc 4.7 seems to disagree with gcc 5.3 about whether you need to say
'return std::move(thing)' instead of just 'return thing'. All the
json::Arrays and json::Objects that I was implicitly turning into
json::Values by returning them from functions now have explicit
std::move wrappers, so hopefully 4.7 will be happy now.

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

6 years ago[TableGen] Add a general-purpose JSON backend.
Simon Tatham [Wed, 11 Jul 2018 08:40:19 +0000 (08:40 +0000)]
[TableGen] Add a general-purpose JSON backend.

The aim of this backend is to output everything TableGen knows about
the record set, similarly to the default -print-records backend. But
where -print-records produces output in TableGen's input syntax
(convenient for humans to read), this backend produces it as
structured JSON data, which is convenient for loading into standard
scripting languages such as Python, in order to extract information
from the data set in an automated way.

The output data contains a JSON representation of the variable
definitions in output 'def' records, and a few pieces of metadata such
as which of those definitions are tagged with the 'field' prefix and
which defs are derived from which classes. It doesn't dump out
absolutely every piece of knowledge it _could_ produce, such as type
information and complicated arithmetic operator nodes in abstract
superclasses; the main aim is to allow consumers of this JSON dump to
essentially act as new backends, and backends don't generally need to
depend on that kind of data.

The new backend is implemented as an EmitJSON() function similar to
all of llvm-tblgen's other EmitFoo functions, except that it lives in
lib/TableGen instead of utils/TableGen on the basis that I'm expecting
to add it to clang-tblgen too in a future patch.

To test it, I've written a Python script that loads the JSON output
and tests properties of it based on comments in the .td source - more
or less like FileCheck, except that the CHECK: lines have Python
expressions after them instead of textual pattern matches.

Reviewers: nhaehnle

Reviewed By: nhaehnle

Subscribers: arichardson, labath, mgorny, llvm-commits

Differential Revision: https://reviews.llvm.org/D46054

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

6 years ago[WebAssembly] Only call llvm::value::dump() in debug build.
Eric Liu [Wed, 11 Jul 2018 08:16:47 +0000 (08:16 +0000)]
[WebAssembly] Only call llvm::value::dump() in debug build.

This fixes compile error in r336759. llvm::value::dump is not available
in released build.

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

6 years ago[X86] The TEST instruction is eliminated when BSF/TZCNT is used
Craig Topper [Wed, 11 Jul 2018 06:57:42 +0000 (06:57 +0000)]
[X86] The TEST instruction is eliminated when BSF/TZCNT is used

Summary:
These changes cover the PR#31399.
Now the ffs(x) function is lowered to (x != 0) ? llvm.cttz(x) + 1 : 0
and it corresponds to the following llvm code:
  %cnt = tail call i32 @llvm.cttz.i32(i32 %v, i1 true)
  %tobool = icmp eq i32 %v, 0
  %.op = add nuw nsw i32 %cnt, 1
  %add = select i1 %tobool, i32 0, i32 %.op
and x86 asm code:
  bsfl     %edi, %ecx
  addl     $1, %ecx
  testl    %edi, %edi
  movl     $0, %eax
  cmovnel  %ecx, %eax
In this case the 'test' instruction can't be eliminated because
the 'add' instruction modifies the EFLAGS, namely, ZF flag
that is set by the 'bsf' instruction when 'x' is zero.

We now produce the following code:
  bsfl     %edi, %ecx
  movl     $-1, %eax
  cmovnel  %ecx, %eax
  addl     $1, %eax

Patch by Ivan Kulagin

Reviewers: davide, craig.topper, spatel, RKSimon

Reviewed By: craig.topper

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D48765

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

6 years agoRevert r336760: "[ORC] Add unit tests for the reexports utility that were..."
Lang Hames [Wed, 11 Jul 2018 06:46:17 +0000 (06:46 +0000)]
Revert r336760: "[ORC] Add unit tests for the reexports utility that were..."

This patch broke a few buildbots. I will investigate and re-apply when I have
a fix.

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

6 years ago[X86] Remove some composite MOVSS/MOVSD isel patterns.
Craig Topper [Wed, 11 Jul 2018 04:51:40 +0000 (04:51 +0000)]
[X86] Remove some composite MOVSS/MOVSD isel patterns.

These patterns looked for a MOVSS/SD followed by a scalar_to_vector. Or a scalar_to_vector followed by a load.

In both cases we emitted a MOVSS/SD for the MOVSS/SD part, a REG_CLASS for the scalar_to_vector, and a MOVSS/SD for the load.

But we have patterns that do each of those 3 things individually so there's no reason to build large patterns.

Most of the test changes are just reorderings. The one test that had a meaningful change is pr30430.ll and it appears to be a regression. But its doing -O0 so I think it missed a lot of opportunities and was just getting lucky before.

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

6 years ago[ORC] Remove a shadowing definition.
Lang Hames [Wed, 11 Jul 2018 04:39:12 +0000 (04:39 +0000)]
[ORC] Remove a shadowing definition.

There is already a VSO member V in the CoreAPIsStandardTest test fixture.

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

6 years ago[ORC] Add unit tests for the reexports utility that were left out of r336741,
Lang Hames [Wed, 11 Jul 2018 04:39:11 +0000 (04:39 +0000)]
[ORC] Add unit tests for the reexports utility that were left out of r336741,
and fix a bug that these exposed.

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

6 years ago[WebAssembly] Add pass to infer prototypes for prototype-less functions
Sam Clegg [Wed, 11 Jul 2018 04:29:36 +0000 (04:29 +0000)]
[WebAssembly] Add pass to infer prototypes for prototype-less functions

See https://bugs.llvm.org/show_bug.cgi?id=35385

Differential Revision: https://reviews.llvm.org/D48471

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

6 years ago[ORC] Drop constexpr in unit test to appease a bot.
Lang Hames [Wed, 11 Jul 2018 03:58:47 +0000 (03:58 +0000)]
[ORC] Drop constexpr in unit test to appease a bot.

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

6 years ago[ORC] Use a gtest fixture to remove a bunch of boilerplate in CoreAPIsTest.cpp.
Lang Hames [Wed, 11 Jul 2018 03:09:36 +0000 (03:09 +0000)]
[ORC] Use a gtest fixture to remove a bunch of boilerplate in CoreAPIsTest.cpp.

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

6 years ago[Power9] Add remaining __flaot128 builtin support for FMA round to odd
Stefan Pintilie [Wed, 11 Jul 2018 01:42:22 +0000 (01:42 +0000)]
[Power9] Add remaining __flaot128 builtin support for FMA round to odd

Implement this as it is done on GCC:

__float128 a, b, c, d;
a = __builtin_fmaf128_round_to_odd (b, c, d);         // generates xsmaddqpo
a = __builtin_fmaf128_round_to_odd (b, c, -d);        // generates xsmsubqpo
a = - __builtin_fmaf128_round_to_odd (b, c, d);       // generates xsnmaddqpo
a = - __builtin_fmaf128_round_to_odd (b, c, -d);      // generates xsnmsubpqp

Differential Revision: https://reviews.llvm.org/D48218

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

6 years ago [test cases] add test cases for find more abs pattern
Chen Zheng [Wed, 11 Jul 2018 01:07:21 +0000 (01:07 +0000)]
  [test cases] add test cases for find more abs pattern

  Differential Revision: https://reviews.llvm.org/D49123

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

6 years ago[TableGen] Fix some bad formatting. NFC
Craig Topper [Wed, 11 Jul 2018 01:01:55 +0000 (01:01 +0000)]
[TableGen] Fix some bad formatting. NFC

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

6 years ago[LangRef] Clarify alloca of zero bytes.
Eli Friedman [Wed, 11 Jul 2018 00:02:01 +0000 (00:02 +0000)]
[LangRef] Clarify alloca of zero bytes.

Let's be conservative here; it matches what we actually implemented, and
it should be rare in practice anyway.

Differential Revision: https://reviews.llvm.org/D49042

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

6 years ago[ARM] Treat cmn immediates as legal in isLegalICmpImmediate.
Eli Friedman [Tue, 10 Jul 2018 23:44:37 +0000 (23:44 +0000)]
[ARM] Treat cmn immediates as legal in isLegalICmpImmediate.

The original code attempted to do this, but the std::abs() call didn't
actually do anything due to implicit type conversions.  Fix the type
conversions, and perform the correct check for negative immediates.

This probably has very little practical impact, but it's worth fixing
just to avoid confusion in the future, I think.

Differential Revision: https://reviews.llvm.org/D48907

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

6 years ago[ORC] Generalize alias materialization to support re-exports (i.e. aliasing of
Lang Hames [Tue, 10 Jul 2018 23:34:56 +0000 (23:34 +0000)]
[ORC] Generalize alias materialization to support re-exports (i.e. aliasing of
symbols in another VSO).

Also fixes a bug where chained aliases within a single VSO would deadlock on
materialization.

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

6 years agoSort includes + include a missing `extern "C"` header
George Burgess IV [Tue, 10 Jul 2018 22:48:13 +0000 (22:48 +0000)]
Sort includes + include a missing `extern "C"` header

If we don't include Initialization.h,
`LLVMInitializeAggressiveInstCombiner` won't see its `extern "C"` decl.
This causes sadness, name mangling, and linker errors.

Reported on the mailing lists by Vladimir Vissoultchev. Thanks!

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

6 years ago[X86] Remove AddedComplexity from all patterns that use X86vzmovl as their root.
Craig Topper [Tue, 10 Jul 2018 22:23:54 +0000 (22:23 +0000)]
[X86] Remove AddedComplexity from all patterns that use X86vzmovl as their root.

Some added 20 and some added 15. Its unclear when to use which value and whether they are required at all.

This patch removes them all. If we start finding real world issues we may need to add them back with proper tests.

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

6 years agoFix -Wmismatched-tags warning
Richard Trieu [Tue, 10 Jul 2018 22:09:33 +0000 (22:09 +0000)]
Fix -Wmismatched-tags warning

class -> struct in forward declaration.

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

6 years ago[X86] Teach X86InstrInfo::commuteInstructionImpl to use MOVSD/MOVSS for BLEND under...
Craig Topper [Tue, 10 Jul 2018 22:02:23 +0000 (22:02 +0000)]
[X86] Teach X86InstrInfo::commuteInstructionImpl to use MOVSD/MOVSS for BLEND under optsize when the immediate allows it.

Isel currently emits movss/movsd a lot of the time and an accidental double commute turns it into a blend.

Ideally we'd select blend directly in isel under optspeed and not rely on the double commute to create blend.

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

6 years ago[NFC] typo
JF Bastien [Tue, 10 Jul 2018 21:52:39 +0000 (21:52 +0000)]
[NFC] typo

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

6 years ago[X86] Remove X86ISD::MOVLPS and X86ISD::MOVLPD. NFCI
Craig Topper [Tue, 10 Jul 2018 21:00:22 +0000 (21:00 +0000)]
[X86] Remove X86ISD::MOVLPS and X86ISD::MOVLPD. NFCI

These ISD nodes try to select the MOVLPS and MOVLPD instructions which are special load only instructions. They load data and merge it into the lower 64-bits of an XMM register. They are logically equivalent to our MOVSD node plus a load.

There was only one place in X86ISelLowering that used MOVLPD and no places that selected MOVLPS. The one place that selected MOVLPD had to choose between it and MOVSD based on whether there was a load. But lowering is too early to tell if the load can really be folded. So in isel we have patterns that use MOVSD for MOVLPD if we can't find a load.

We also had patterns that select the MOVLPD instruction for a MOVSD if we can find a load, but didn't choose the MOVLPD ISD opcode for some reason.

So it seems better to just standardize on MOVSD ISD opcode and manage MOVSD vs MOVLPD instruction with isel patterns.

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

6 years ago[AMDGPU] Fix layering issue with AMDGPUHSAMetadataStreamer (NFC)
Scott Linder [Tue, 10 Jul 2018 20:07:22 +0000 (20:07 +0000)]
[AMDGPU] Fix layering issue with AMDGPUHSAMetadataStreamer (NFC)

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

6 years ago[ThinLTO] Use std::map to get determistic imports files
Teresa Johnson [Tue, 10 Jul 2018 20:06:04 +0000 (20:06 +0000)]
[ThinLTO] Use std::map to get determistic imports files

Summary:
I noticed that the .imports files emitted for distributed ThinLTO
backends do not have consistent ordering. This is because StringMap
iteration order is not guaranteed to be deterministic. Since we already
have a std::map with this information, used when emitting the individual
index files (ModuleToSummariesForIndex), use it for the imports files as
well.

This issue is likely causing some unnecessary rebuilds of the ThinLTO
backends in our distributed build system as the imports files are inputs
to those backends.

Reviewers: pcc, steven_wu, mehdi_amini

Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, llvm-commits

Differential Revision: https://reviews.llvm.org/D48783

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

6 years ago[X86] Remove dead SDNode object from X86InstrFragmentsSIMD.td. NFC
Craig Topper [Tue, 10 Jul 2018 20:03:51 +0000 (20:03 +0000)]
[X86] Remove dead SDNode object from X86InstrFragmentsSIMD.td. NFC

It points to an opcode that doesn't exist.

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

6 years agoRevert r336653 "[VPlan] Add VPlanTestBase.h with helper class to build VPlan for...
Evgeniy Stepanov [Tue, 10 Jul 2018 19:56:10 +0000 (19:56 +0000)]
Revert r336653 "[VPlan] Add VPlanTestBase.h with helper class to build VPlan for tests."

Memory leaks in tests.
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/6289/steps/check-llvm%20asan/logs/stdio

Direct leak of 192 byte(s) in 1 object(s) allocated from:
    #0 0x554ea8 in operator new(unsigned long) /b/sanitizer-x86_64-linux-bootstrap/build/llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:106
    #1 0x56cef1 in llvm::VPlanTestBase::doAnalysis(llvm::Function&) /b/sanitizer-x86_64-linux-bootstrap/build/llvm/unittests/Transforms/Vectorize/VPlanTestBase.h:53:14
    #2 0x56bec4 in llvm::VPlanTestBase::buildHCFG(llvm::BasicBlock*) /b/sanitizer-x86_64-linux-bootstrap/build/llvm/unittests/Transforms/Vectorize/VPlanTestBase.h:57:3
    #3 0x571f1e in llvm::(anonymous namespace)::VPlanHCFGTest_testVPInstructionToVPRecipesInner_Test::TestBody() /b/sanitizer-x86_64-linux-bootstrap/build/llvm/unittests/Transforms/Vectorize/VPlanHCFGTest.cpp:119:15
    #4 0xed2291 in testing::Test::Run() /b/sanitizer-x86_64-linux-bootstrap/build/llvm/utils/unittest/googletest/src/gtest.cc
    #5 0xed44c8 in testing::TestInfo::Run() /b/sanitizer-x86_64-linux-bootstrap/build/llvm/utils/unittest/googletest/src/gtest.cc:2656:11
    #6 0xed5890 in testing::TestCase::Run() /b/sanitizer-x86_64-linux-bootstrap/build/llvm/utils/unittest/googletest/src/gtest.cc:2774:28
    #7 0xef3634 in testing::internal::UnitTestImpl::RunAllTests() /b/sanitizer-x86_64-linux-bootstrap/build/llvm/utils/unittest/googletest/src/gtest.cc:4649:43
    #8 0xef27e0 in testing::UnitTest::Run() /b/sanitizer-x86_64-linux-bootstrap/build/llvm/utils/unittest/googletest/src/gtest.cc
    #9 0xebbc23 in RUN_ALL_TESTS /b/sanitizer-x86_64-linux-bootstrap/build/llvm/utils/unittest/googletest/include/gtest/gtest.h:2233:46
    #10 0xebbc23 in main /b/sanitizer-x86_64-linux-bootstrap/build/llvm/utils/unittest/UnitTestMain/TestMain.cpp:51
    #11 0x7f65569592e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)

and more.

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

6 years ago[CMake] Set per-runtime library directory suffix in runtimes build
Petr Hosek [Tue, 10 Jul 2018 19:13:33 +0000 (19:13 +0000)]
[CMake] Set per-runtime library directory suffix in runtimes build

Do not use LLVM_RUNTIMES_LIBDIR_SUFFIX variable which is an internal
variable used by the runtimes build from individual runtimes, instead
set per-runtime librarhy directory suffix variable which is necessary
for the sanitized runtimes build to install libraries into correct
location.

Differential Revision: https://reviews.llvm.org/D49121

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

6 years ago[X86] Remove AddedComplexity from register form of NOT. NFCI
Craig Topper [Tue, 10 Jul 2018 19:09:00 +0000 (19:09 +0000)]
[X86] Remove AddedComplexity from register form of NOT. NFCI

I believe isProfitableToFold will stop the load folding that this was intended to overcome.

Given an (xor load, -1), isProfitableToFold will see that the immediate can be folded with the xor using a one byte immediate since it can be sign extended. It doesn't know about NOT, but the one byte immediate check is enough to stop the fold.

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

6 years ago[X86] Remove AddedComplexity from MMX_X86movw2d patterns.
Craig Topper [Tue, 10 Jul 2018 18:41:58 +0000 (18:41 +0000)]
[X86] Remove AddedComplexity from MMX_X86movw2d patterns.

There were only 3 patterns with this node as a root and they all the same AddedComplexity. So this doesn't really do anything.

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

6 years ago[CMake] Teach the build system to codesign built products
Justin Bogner [Tue, 10 Jul 2018 17:32:48 +0000 (17:32 +0000)]
[CMake] Teach the build system to codesign built products

Automatically codesign all executables and dynamic libraries if a
codesigning identity is given (via LLVM_CODESIGNING_IDENTITY). This
option is darwin only for now.

Also update platforms/iOS.cmake to pick up the right versions of
codesign and codesign_allocate.

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

6 years ago[AMDGPU] Refactor HSAMetadataStream::emitKernel (NFC)
Scott Linder [Tue, 10 Jul 2018 17:31:32 +0000 (17:31 +0000)]
[AMDGPU] Refactor HSAMetadataStream::emitKernel (NFC)

Move all metadata construction into AMDGPUHSAMetadataStreamer.

Differential Revision: https://reviews.llvm.org/D48176

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

6 years ago[GlobalISel][X86_64] Support for G_SITOFP
Alexander Ivchenko [Tue, 10 Jul 2018 16:38:35 +0000 (16:38 +0000)]
[GlobalISel][X86_64] Support for G_SITOFP

The instruction selection is automatically handled by tablegen

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

6 years ago[Evaluator] Examine alias when evaluating function call
Eugene Leviant [Tue, 10 Jul 2018 16:34:23 +0000 (16:34 +0000)]
[Evaluator] Examine alias when evaluating function call

This fixes PR38120

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

6 years ago[DAGCombiner] Add special case fast paths for udiv x,1 and udiv x,-1
Simon Pilgrim [Tue, 10 Jul 2018 16:33:07 +0000 (16:33 +0000)]
[DAGCombiner] Add special case fast paths for udiv x,1 and udiv x,-1

udiv x,-1 was going down the (slow) BuildUDIV route resulting in unnecessary shifts.

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

6 years agoRevert "[AccelTable] Provide abstraction for emitting DWARF5 accelerator tables."
Jonas Devlieghere [Tue, 10 Jul 2018 16:18:56 +0000 (16:18 +0000)]
Revert "[AccelTable] Provide abstraction for emitting DWARF5 accelerator tables."

This reverts r336529 because an alternative approach turned out to be a
better fit for dsymuil.

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

6 years agoAMDGPU: Make hidden argument metadata consistent with
Konstantin Zhuravlyov [Tue, 10 Jul 2018 16:12:51 +0000 (16:12 +0000)]
AMDGPU: Make hidden argument metadata consistent with
amdgpu-implicitarg-num-bytes attribute

Differential Revision: https://reviews.llvm.org/D49096

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

6 years ago[InstCombine] allow flag propagation when using safe constant
Sanjay Patel [Tue, 10 Jul 2018 16:09:49 +0000 (16:09 +0000)]
[InstCombine] allow flag propagation when using safe constant

This corresponds with the code for the single binop pattern
added in rL336684.

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

6 years ago[X86] Add srem/udiv/urem by constant tests
Simon Pilgrim [Tue, 10 Jul 2018 16:08:28 +0000 (16:08 +0000)]
[X86] Add srem/udiv/urem by constant tests

Match the tests in combine-sdiv.ll

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

6 years ago[gcov] Fix ABI when calling llvm_gcov_... routines from instrumentation code
Ulrich Weigand [Tue, 10 Jul 2018 16:05:47 +0000 (16:05 +0000)]
[gcov] Fix ABI when calling llvm_gcov_... routines from instrumentation code

The llvm_gcov_... routines in compiler-rt are regular C functions that
need to be called using the proper C ABI for the target. The current
code simply calls them using plain LLVM IR types. Since the type are
mostly simple, this happens to just work on certain targets. But other
targets still need special handling; in particular, it may be necessary
to sign- or zero-extended sub-word values to comply with the ABI. This
caused gcov failures on SystemZ in particular.

Now the very same problem was already fixed for the llvm_profile_ calls
here: https://reviews.llvm.org/D21736

This patch uses the same method to fix the llvm_gcov_ calls, in
particular calls to llvm_gcda_start_file, llvm_gcda_emit_function, and
llvm_gcda_emit_arcs.

Reviewed By: marco-c

Differential Revision: https://reviews.llvm.org/D49134

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

6 years ago[WebAssembly] Add missing a few {{$}}s to a test
Heejin Ahn [Tue, 10 Jul 2018 16:00:43 +0000 (16:00 +0000)]
[WebAssembly] Add missing a few {{$}}s to a test

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

6 years agoAMDGPU/NFC: Fix typo in test name
Konstantin Zhuravlyov [Tue, 10 Jul 2018 15:54:46 +0000 (15:54 +0000)]
AMDGPU/NFC: Fix typo in test name

hsa-metadata-enqueu-kernel.ll ->
hsa-metadata-enqueue-kernel.ll

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

6 years ago[MC] Add interface to finish pending labels.
Jonas Devlieghere [Tue, 10 Jul 2018 15:32:17 +0000 (15:32 +0000)]
[MC] Add interface to finish pending labels.

When manually finishing the object writer in dsymutil, it's possible
that there are pending labels that haven't been resolved. This results
in an assertion when the assembler tries to fixup a label that doesn't
have an address yet.

Differential revision: https://reviews.llvm.org/D49131

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

6 years agoUpdate test to work on Windows
Paul Robinson [Tue, 10 Jul 2018 15:23:10 +0000 (15:23 +0000)]
Update test to work on Windows

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

6 years ago[InstCombine] safely allow non-commutative binop identity constant folds
Sanjay Patel [Tue, 10 Jul 2018 15:12:31 +0000 (15:12 +0000)]
[InstCombine] safely allow non-commutative binop identity constant folds

This was originally intended with D48893, but as discussed there, we
have to make the folds safe from producing extra poison. This should
give the single binop folds the same capabilities as the existing
folds for 2-binops+shuffle.

LLVM binary opcode review: there are a total of 18 binops. There are 7
commutative binops (add, mul, and, or, xor, fadd, fmul) which we already
fold. We're able to fold 6 more opcodes with this patch (shl, lshr, ashr,
fdiv, udiv, sdiv). There are no folds for srem/urem/frem AFAIK. We don't
bother with sub/fsub with constant operand 1 because those are
canonicalized to add/fadd. 7 + 6 + 3 + 2 = 18.

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

6 years agoAdd CachedHashStringRef::data().
Rui Ueyama [Tue, 10 Jul 2018 15:10:49 +0000 (15:10 +0000)]
Add CachedHashStringRef::data().

This accessor is useful and could be slightly more efficient than
Str.val().data() because you can avoid StringRef instantiation.

Differential Revision: https://reviews.llvm.org/D49133

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

6 years ago[Hexagon] Change .mir testcase to make sure function is not in SSA form
Krzysztof Parzyszek [Tue, 10 Jul 2018 14:49:54 +0000 (14:49 +0000)]
[Hexagon] Change .mir testcase to make sure function is not in SSA form

If a machine function satisfies SSA, the IsSSA property is assumed even
if the pass to be executed runs after existing from SSA. If the pass
output then does not conform to SSA, a verifier error will be flagged
(with expensive checks enabled).

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

6 years agoSupport -fdebug-prefix-map in llvm-mc. This is useful to omit the
Paul Robinson [Tue, 10 Jul 2018 14:41:54 +0000 (14:41 +0000)]
Support -fdebug-prefix-map in llvm-mc.  This is useful to omit the
debug compilation dir when compiling assembly files with -g.
Part of PR38050.

Patch by Siddhartha Bagaria!

Differential Revision: https://reviews.llvm.org/D48988

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

6 years ago[InstCombine] drop poison flags when shuffle mask undef propagates to constant
Sanjay Patel [Tue, 10 Jul 2018 14:27:55 +0000 (14:27 +0000)]
[InstCombine] drop poison flags when shuffle mask undef propagates to constant

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

6 years ago[AArch64][SVE] Asm: Support for predicated unary operations.
Sander de Smalen [Tue, 10 Jul 2018 14:05:55 +0000 (14:05 +0000)]
[AArch64][SVE] Asm: Support for predicated unary operations.

This patch adds support for the following instructions:
  CLS  (Count Leading Sign bits)
  CLZ  (Count Leading Zeros)
  CNT  (Count non-zero bits)
  CNOT (Logically invert boolean condition in vector)
  NOT  (Bitwise invert vector)
  FABS (Floating-point absolute value)
  FNEG (Floating-point negate)

All operations are predicated and unary, e.g.
  clz  z0.s, p0/m, z1.s

- CLS, CLZ, CNT, CNOT and NOT have variants for 8, 16, 32
  and 64 bit elements.

- FABS and FNEG have variants for 16, 32 and 64 bit elements.

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

6 years agoReapply "AMDGPU: Force inlining if LDS global address is used"
Matt Arsenault [Tue, 10 Jul 2018 14:03:41 +0000 (14:03 +0000)]
Reapply "AMDGPU: Force inlining if LDS global address is used"

This reverts commit r336623

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

6 years ago[InstCombine] allow more shuffle-binop folds with safe constants
Sanjay Patel [Tue, 10 Jul 2018 13:33:26 +0000 (13:33 +0000)]
[InstCombine] allow more shuffle-binop folds with safe constants

The case with 2 variables is more complicated than the case where
we eliminate the shuffle entirely because a shuffle with an undef
mask element creates an undef result.

I'm not aware of any current analysis/transform that recognizes that
undef propagating to a div/rem/shift, but we have to guard against
the possibility.

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

6 years ago[DebugInfo][LoopVectorize] Preserve DL in induction PHI and Add
Anastasis Grammenos [Tue, 10 Jul 2018 13:29:50 +0000 (13:29 +0000)]
[DebugInfo][LoopVectorize] Preserve DL in induction PHI and Add

Differential Revision: https://reviews.llvm.org/D48968

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

6 years ago[DAGCombiner] visitREM - call visitSDIVLike/visitUDIVLike directly to avoid recursive...
Simon Pilgrim [Tue, 10 Jul 2018 13:18:16 +0000 (13:18 +0000)]
[DAGCombiner] visitREM - call visitSDIVLike/visitUDIVLike directly to avoid recursive combining.

As suggested by @efriedma on D48975 use the visitSDIVLike/visitUDIVLike functions introduced at rL336656.

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

6 years ago[Hexagon] Add implicit uses even when untied explicit uses are present
Krzysztof Parzyszek [Tue, 10 Jul 2018 12:57:49 +0000 (12:57 +0000)]
[Hexagon] Add implicit uses even when untied explicit uses are present

An explicit untied use is not sufficient to maintain liveness of a
register redefined in a predicated instruction. For example
  %1 = COPY %0
  ...
  %1 = A2_paddif %2, %1, 1
could become
  $r1 = COPY $r0
  ...
  $r1 = A2_paddif $p0, $r1, 1
and later
  $r1 = COPY $r0                ;; this is not really dead!
  ...
  $r1 = A2_paddif $p0, $r0, 1

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

6 years ago[LowerSwitch] Fixed faulty PHI nodes
Karl-Johan Karlsson [Tue, 10 Jul 2018 12:06:16 +0000 (12:06 +0000)]
[LowerSwitch] Fixed faulty PHI nodes

Summary:
Fixed two cases of where PHI nodes need to be updated by lowerswitch.

When lowerswitch find out that the switch default branch is not
reachable it remove the old default and replace it with the most
popular block from the cases, but it forget to update the PHI
nodes in the default block.

The PHI nodes also need to be updated when the switch is replaced
with a single branch.

Reviewers: hans, reames, arsenm

Reviewed By: arsenm

Differential Revision: https://reviews.llvm.org/D47203

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

6 years ago[Support] Harded JSON against invalid UTF-8.
Sam McCall [Tue, 10 Jul 2018 11:51:26 +0000 (11:51 +0000)]
[Support] Harded JSON against invalid UTF-8.

Parsing invalid UTF-8 input is now a parse error.
Creating JSON values from invalid UTF-8 now triggers an assertion, and
(in no-assert builds) substitutes the unicode replacement character.
Strings retrieved from json::Value are always valid UTF-8.

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

6 years ago[DAGCombiner] Split SDIV/UDIV optimization expansions from the rest of the combines...
Simon Pilgrim [Tue, 10 Jul 2018 11:38:00 +0000 (11:38 +0000)]
[DAGCombiner] Split SDIV/UDIV optimization expansions from the rest of the combines. NFCI.

As suggested by @efriedma on D48975, this patch separates the BuildDiv/Pow2 style optimizations from the rest of the visitSDIV/visitUDIV to make it easier to reuse the combines and will allow us to avoid some rather nasty node recursive combining in visitREM.

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

6 years ago[VPlan] Add VPlanTestBase.h with helper class to build VPlan for tests.
Florian Hahn [Tue, 10 Jul 2018 10:45:46 +0000 (10:45 +0000)]
[VPlan] Add VPlanTestBase.h with helper class to build VPlan for tests.

Reviewers: dcaballe, hsaito, rengolin

Reviewed By: dcaballe

Differential Revision: https://reviews.llvm.org/D49032

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

6 years agoFix MSVC "signed/unsigned mismatch" warning. NFCI.
Simon Pilgrim [Tue, 10 Jul 2018 09:46:57 +0000 (09:46 +0000)]
Fix MSVC "signed/unsigned mismatch" warning. NFCI.

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

6 years ago[PM/Unswitch] Fix unused variable in r336646.
Chandler Carruth [Tue, 10 Jul 2018 08:57:04 +0000 (08:57 +0000)]
[PM/Unswitch] Fix unused variable in r336646.

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

6 years ago[PM/Unswitch] Fix a collection of closely related issues with trivial
Chandler Carruth [Tue, 10 Jul 2018 08:36:05 +0000 (08:36 +0000)]
[PM/Unswitch] Fix a collection of closely related issues with trivial
switch unswitching.

The core problem was that the way we handled unswitching trivial exit
edges through the default successor of a switch. For some reason
I thought the right way to do this was to add a block containing
unreachable and point the default successor at this block. In
retrospect, this has an amazing number of problems.

The first issue is the one that this pass has always worked around -- we
have to *detect* such edges and avoid unswitching them again. This
seemed pretty easy really. You juts look for an edge to a block
containing unreachable. However, this pattern is woefully unsound. So
many things can break it. The amazing thing is that I found a test case
where *simple-loop-unswitch itself* breaks this! When we do
a *non-trivial* unswitch of a switch we will end up splitting this exit
edge. The result will be a default successor that is an exit and
terminates in ... a perfectly normal branch. So the first test case that
I started trying to fix is added to the nontrivial test cases. This is
a ridiculous example that did just amazing things previously. With just
unswitch, it would create 10+ copies of this stuff stamped out. But if
you combine it *just right* with a bunch of other passes (like
simplify-cfg, loop rotate, and some LICM) you can get it to do this
infinitely. Or at least, I never got it to finish. =[

This, in turn, uncovered another related issue. When we are manipulating
these switches after doing a trivial unswitch we never correctly updated
PHI nodes to reflect our edits. As soon as I started changing how these
edges were managed, it became obvious there were more issues that
I couldn't realistically leave unaddressed, so I wrote more test cases
around PHI updates here and ensured all of that works now.

And this, in turn, required some adjustment to how we collect and manage
the exit successor when it is the default successor. That showed a clear
bug where we failed to include it in our search for the outer-most loop
reached by an unswitched exit edge. This was actually already tested and
the test case didn't work. I (wrongly) thought that was due to SCEV
failing to analyze the switch. In fact, it was just a simple bug in the
code that skipped the default successor. While changing this, I handled
it correctly and have updated the test to reflect that we now get
precise SCEV analysis of trip counts for the outer loop in one of these
cases.

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

6 years ago[X86] Fast-isel tests for lowered truncation intrinsics
Mikhail Dvoretckii [Tue, 10 Jul 2018 08:26:54 +0000 (08:26 +0000)]
[X86] Fast-isel tests for lowered truncation intrinsics

This patch adds fast-isel tests for the IR patterns produced for truncation
intrinsics in rC336643.

Differential Revision: https://reviews.llvm.org/D48822

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

6 years ago[X86][SSE] Prefer BLEND(SHL(v,c1),SHL(v,c2)) over MUL(v, c3)
Simon Pilgrim [Tue, 10 Jul 2018 07:58:33 +0000 (07:58 +0000)]
[X86][SSE] Prefer BLEND(SHL(v,c1),SHL(v,c2)) over MUL(v, c3)

Now that rL336250 has landed, we should prefer 2 immediate shifts + a shuffle blend over performing a multiply. Despite the increase in instructions, this is quicker (especially for slow v4i32 multiplies), avoid loads and constant pool usage. It does mean however that we increase register pressure. The code size will go up a little but by less than what we save on the constant pool data.

This patch also adds support for v16i16 to the BLEND(SHIFT(v,c1),SHIFT(v,c2)) combine, and also prevents blending on pre-SSE41 shifts if it would introduce extra blend masks/constant pool usage.

Differential Revision: https://reviews.llvm.org/D48936

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

6 years ago[X86] Regenerate vector-shuffle-512-v8.ll so the script will merge the 32 and 64...
Craig Topper [Tue, 10 Jul 2018 07:17:41 +0000 (07:17 +0000)]
[X86] Regenerate vector-shuffle-512-v8.ll so the script will merge the 32 and 64 bit checks together. NFC

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

6 years ago[X86] Use IsProfitableToFold to block vinsertf128rm in favor of insert_subreg instead...
Craig Topper [Tue, 10 Jul 2018 06:19:54 +0000 (06:19 +0000)]
[X86] Use IsProfitableToFold to block vinsertf128rm in favor of insert_subreg instead of artifically increasing pattern complexity to give priority.

This is a much more direct way to solve the issue than just giving extra priority.

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

6 years ago[X86] Remove some seemingly unnecessary patterns.
Craig Topper [Tue, 10 Jul 2018 05:31:42 +0000 (05:31 +0000)]
[X86] Remove some seemingly unnecessary patterns.

We're missing the EVEX equivalents of these patterns and seem to get along fine.

I think we end up with X86vzload for the obvious IR cases that would produce this DAG.

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

6 years ago[X86] Add back GCCBuiltin on mask_div_ss/sd_round.
Craig Topper [Tue, 10 Jul 2018 00:49:50 +0000 (00:49 +0000)]
[X86] Add back GCCBuiltin on mask_div_ss/sd_round.

We no longer need custom handling in clang.

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

6 years ago[X86] Correct vfixupimm load patterns to look for an integer load, not a floating...
Craig Topper [Tue, 10 Jul 2018 00:49:49 +0000 (00:49 +0000)]
[X86] Correct vfixupimm load patterns to look for an integer load, not a floating point load bitcasted to integer.

DAG combine wouldn't let a floating point load bitcasted to integer exist. It would just be an integer load.

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

6 years ago[X86] Add test cases that show failure to fold load into vfixupimm instructions due...
Craig Topper [Tue, 10 Jul 2018 00:49:47 +0000 (00:49 +0000)]
[X86] Add test cases that show failure to fold load into vfixupimm instructions due to bad isel pattern.

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

6 years ago[X86] Remove FloatVT from X86VectorVTInfo in X86InstrAVX512.td
Craig Topper [Tue, 10 Jul 2018 00:49:45 +0000 (00:49 +0000)]
[X86] Remove FloatVT from X86VectorVTInfo in X86InstrAVX512.td

The only places it was used where places where VT was the same as FloatVT. So switch those uses to VT and drop it.

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

6 years agoRevert "AMDGPU: Force inlining if LDS global address is used"
Vlad Tsyrklevich [Tue, 10 Jul 2018 00:46:07 +0000 (00:46 +0000)]
Revert "AMDGPU: Force inlining if LDS global address is used"

This reverts commit r336587, it was causing test failures on the
sanitizer bots.

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

6 years ago[DWARF][NFC] Refactor range list emission to use a static helper
Wolfgang Pieb [Tue, 10 Jul 2018 00:10:11 +0000 (00:10 +0000)]
[DWARF][NFC] Refactor range list emission to use a static helper

This is prep for DWARF v5 range list emission. Emission of a single range list is moved
to a static helper function.

Reviewer: jdevlieghere

Differential Revision: https://reviews.llvm.org/D49098

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

6 years ago[InstCombine] allow more shuffle folds using safe constants
Sanjay Patel [Mon, 9 Jul 2018 23:22:47 +0000 (23:22 +0000)]
[InstCombine] allow more shuffle folds using safe constants

getSafeVectorConstantForBinop() was calling getBinOpIdentity() assuming
that the constant we wanted was operand 1 (RHS). That's wrong, but I
don't think we could expose a bug or even a suboptimal fold from that
because the callers have other guards for any binop that would have
been affected.

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

6 years ago[WebAssembly] Support for binary atomic RMW instructions
Heejin Ahn [Mon, 9 Jul 2018 22:30:51 +0000 (22:30 +0000)]
[WebAssembly] Support for binary atomic RMW instructions

Summary:
This adds support for binary atomic read-modify-write instructions:
add, sub, and, or, xor, and xchg.

This does not yet support translations of some of LLVM IR atomicrmw
instructions (nand, max, min, umax, and umin) that do not have a direct
counterpart in wasm instructions.

Reviewers: dschuff

Subscribers: sbc100, jgravelle-google, sunfish, llvm-commits

Differential Revision: https://reviews.llvm.org/D49088

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

6 years agollvm: Add support for "-fno-delete-null-pointer-checks"
Manoj Gupta [Mon, 9 Jul 2018 22:27:23 +0000 (22:27 +0000)]
llvm: Add support for "-fno-delete-null-pointer-checks"

Summary:
Support for this option is needed for building Linux kernel.
This is a very frequently requested feature by kernel developers.

More details : https://lkml.org/lkml/2018/4/4/601

GCC option description for -fdelete-null-pointer-checks:
This Assume that programs cannot safely dereference null pointers,
and that no code or data element resides at address zero.

-fno-delete-null-pointer-checks is the inverse of this implying that
null pointer dereferencing is not undefined.

This feature is implemented in LLVM IR in this CL as the function attribute
"null-pointer-is-valid"="true" in IR (Under review at D47894).
The CL updates several passes that assumed null pointer dereferencing is
undefined to not optimize when the "null-pointer-is-valid"="true"
attribute is present.

Reviewers: t.p.northover, efriedma, jyknight, chandlerc, rnk, srhines, void, george.burgess.iv

Reviewed By: efriedma, george.burgess.iv

Subscribers: eraman, haicheng, george.burgess.iv, drinkcat, theraven, reames, sanjoy, xbolva00, llvm-commits

Differential Revision: https://reviews.llvm.org/D47895

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

6 years agoUse StringRef instead of `const char *`.
Rui Ueyama [Mon, 9 Jul 2018 22:26:49 +0000 (22:26 +0000)]
Use StringRef instead of `const char *`.

I don't think there's a need to use `const char *`. In most (probably all?)
cases, we need a length of a name later, so discarding a length will
lead to a wasted effort.

Differential Revision: https://reviews.llvm.org/D49046

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

6 years agoMake llvm.objectsize more conservative with null
George Burgess IV [Mon, 9 Jul 2018 22:21:16 +0000 (22:21 +0000)]
Make llvm.objectsize more conservative with null

In non-zero address spaces, we were reporting that an object at `null`
always occupies zero bytes. This is incorrect in many cases, so just
return `unknown` in those cases for now.

Differential Revision: https://reviews.llvm.org/D48860

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

6 years ago[ORC] Rename MaterializationResponsibility::delegate to replace and add a new
Lang Hames [Mon, 9 Jul 2018 20:54:36 +0000 (20:54 +0000)]
[ORC] Rename MaterializationResponsibility::delegate to replace and add a new
delegate method (and unit test).

The name 'replace' better captures what the old delegate method did: it
returned materialization responsibility for a set of symbols to the VSO.

The new delegate method delegates responsibility for a set of symbols to a new
MaterializationResponsibility instance. This can be used to split responsibility
between multiple threads, or multiple materialization methods.

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

6 years agoFix line endings. NFCI.
Simon Pilgrim [Mon, 9 Jul 2018 20:52:07 +0000 (20:52 +0000)]
Fix line endings. NFCI.

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

6 years ago[Power9] Add __float128 builtins for Rounding Operations
Stefan Pintilie [Mon, 9 Jul 2018 20:38:40 +0000 (20:38 +0000)]
[Power9] Add __float128 builtins for Rounding Operations

Added __float128 support for a number of rounding operations:

trunc
rint
nearbyint
round
floor
ceil

Differential Revision: https://reviews.llvm.org/D48415

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

6 years ago[WebAssembly] Improve readability of load/stores and tests. NFC.
Heejin Ahn [Mon, 9 Jul 2018 20:18:21 +0000 (20:18 +0000)]
[WebAssembly] Improve readability of load/stores and tests. NFC.

Summary:
- Changed variable/function names to be more consistent
- Improved comments in test files
- Added more tests
- Fixed a few typos
- Misc. cosmetic changes

Reviewers: dschuff

Subscribers: sbc100, jgravelle-google, sunfish, llvm-commits

Differential Revision: https://reviews.llvm.org/D49087

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

6 years ago[Power9] [LLVM] Add __float128 support for trunc to double round to odd
Stefan Pintilie [Mon, 9 Jul 2018 20:09:22 +0000 (20:09 +0000)]
[Power9] [LLVM] Add __float128 support for trunc to double round to odd

Add support for this builtin:
double builtin_truncf128_round_to_odd(float128)

Differential Revision: https://reviews.llvm.org/D48483

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

6 years agoRenameIndependentSubregs: Fix handling of undef tied operands
Mark Searles [Mon, 9 Jul 2018 20:07:03 +0000 (20:07 +0000)]
RenameIndependentSubregs: Fix handling of undef tied operands

Ensure that, if updating a tied operand pair, to only update
that pair.

Differential Revision: https://reviews.llvm.org/D49052

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

6 years ago[globalisel][irtranslator] Add support for atomicrmw and (strong) cmpxchg
Daniel Sanders [Mon, 9 Jul 2018 19:33:40 +0000 (19:33 +0000)]
[globalisel][irtranslator] Add support for atomicrmw and (strong) cmpxchg

Summary:
This patch adds support for the atomicrmw instructions and the strong
cmpxchg instruction to the IRTranslator.

I've left out weak cmpxchg because LangRef.rst isn't entirely clear on what
difference it makes to the backend. As far as I can tell from the code, it
only matters to AtomicExpandPass which is run at the LLVM-IR level.

Reviewers: ab, t.p.northover, qcolombet, rovka, aditya_nandakumar, volkan, javed.absar

Reviewed By: qcolombet

Subscribers: kristof.beyls, javed.absar, igorb, llvm-commits

Differential Revision: https://reviews.llvm.org/D40092

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

6 years ago[AMDGPU][Waitcnt] fix "comparison of integers of different signs" build error
Mark Searles [Mon, 9 Jul 2018 19:28:14 +0000 (19:28 +0000)]
[AMDGPU][Waitcnt] fix "comparison of integers of different signs" build error

Build error on Android; reported by and fix provided by (thanks) by Mauro Rossi <issor.oruam@gmail.com>

Fixes the following building error:

external/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp:1903:61:
error: comparison of integers of different signs:
'typename iterator_traits<__wrap_iter<MachineBasicBlock **> >::difference_type'
(aka 'int') and 'unsigned int' [-Werror,-Wsign-compare]
                      BlockWaitcntProcessedSet.end(), &MBB) < Count)) {
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~
1 error generated.

Differential Revision: https://reviews.llvm.org/D49089

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

6 years agoAMDGPU: Force inlining if LDS global address is used
Matt Arsenault [Mon, 9 Jul 2018 19:22:22 +0000 (19:22 +0000)]
AMDGPU: Force inlining if LDS global address is used

These won't work for the forseeable future. These aren't allowed
from OpenCL, but IPO optimizations can make them appear.

Also directly set the attributes on functions, regardless
of the linkage rather than cloning functions like before.

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

6 years ago[X86][TLI] DAGCombine: Unfold variable bit-clearing mask to two shifts.
Roman Lebedev [Mon, 9 Jul 2018 19:06:42 +0000 (19:06 +0000)]
[X86][TLI] DAGCombine: Unfold variable bit-clearing mask to two shifts.

Summary:
This adds a reverse transform for the instcombine canonicalizations
that were added in D47980, D47981.

As discussed later, that was worse at least for the code size,
and potentially for the performance, too.

https://rise4fun.com/Alive/Zmpl

Reviewers: craig.topper, RKSimon, spatel

Reviewed By: spatel

Subscribers: reames, llvm-commits

Differential Revision: https://reviews.llvm.org/D48768

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

6 years ago[Utils] Fix gdb pretty printers to work with Python 3.
Philip Pfaffe [Mon, 9 Jul 2018 18:51:50 +0000 (18:51 +0000)]
[Utils] Fix gdb pretty printers to work with Python 3.

Reiterate D23202 for container printers added after the change landed.

Differential Revision: https://reviews.llvm.org/D46578

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

6 years ago[Power9] Add __float128 builtins for Round To Odd
Stefan Pintilie [Mon, 9 Jul 2018 18:50:06 +0000 (18:50 +0000)]
[Power9] Add __float128 builtins for Round To Odd

GCC has builtins for these round to odd instructions:

__float128 __builtin_sqrtf128_round_to_odd (__float128)
__float128 __builtin_{add,sub,mul,div}f128_round_to_odd (__float128, __float128)
__float128 __builtin_fmaf128_round_to_odd (__float128, __float128, __float128)

Differential Revision: https://reviews.llvm.org/D47550

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

6 years ago[DebugInfo] Change default value of FDEPointerEncoding
Maksim Panchenko [Mon, 9 Jul 2018 18:45:38 +0000 (18:45 +0000)]
[DebugInfo] Change default value of FDEPointerEncoding

Summary:
If the encoding is not specified in CIE augmentation string, then it
should be DW_EH_PE_absptr instead of DW_EH_PE_omit.

Reviewers: ruiu, MaskRay, plotfi, rafauler

Reviewed By: MaskRay

Subscribers: rafauler, JDevlieghere, llvm-commits

Differential Revision: https://reviews.llvm.org/D49000

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

6 years ago[SelectionDAG] Add VT consistency checks to the creation of ISD::FMA.
Craig Topper [Mon, 9 Jul 2018 18:23:55 +0000 (18:23 +0000)]
[SelectionDAG] Add VT consistency checks to the creation of ISD::FMA.

This is similar to what is done for binops. I don't know if this would have helped us catch the bug fixed in r336566 earlier or not, but I figured it couldn't hurt.

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

6 years agoAdd bitcode compatibility test for 6.0
Steven Wu [Mon, 9 Jul 2018 17:57:48 +0000 (17:57 +0000)]
Add bitcode compatibility test for 6.0

Summary:
Add bitcode compatibility test for 6.0. On top of the normal disassemble
test, also runs the verifier to make sure simple 6.0 bitcode can pass
the current IR verifier.

Reviewers: vsk

Reviewed By: vsk

Subscribers: dexonsmith, llvm-commits

Differential Revision: https://reviews.llvm.org/D49086

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