platform/upstream/llvm.git
7 years ago__kmp_free_task: Fix for serial explicit tasks producing proxy tasks
Jonas Hahnfeld [Mon, 8 Aug 2016 10:08:07 +0000 (10:08 +0000)]
__kmp_free_task: Fix for serial explicit tasks producing proxy tasks

Consider the following code which may be executed by a serial team:

    int dep;
    #pragma omp target nowait depend(out: dep)
    {
        sleep(1);
    }
    #pragma omp task depend(in: dep)
    {
        #pragma omp target nowait
        {
            sleep(1);
        }
    }

Here the explicit task may not be freed until the nested proxy task has
finished. The current code hasn't considered this and called __kmp_free_task
anyway which triggered an assert because of remaining incomplete children:

    KMP_DEBUG_ASSERT( TCR_4(taskdata->td_incomplete_child_tasks) == 0 );

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

llvm-svn: 277991

7 years agoRevert r277988: [mips][ias] Fix all the hacks related to MIPS-specific unary operator...
Daniel Sanders [Mon, 8 Aug 2016 09:33:14 +0000 (09:33 +0000)]
Revert r277988: [mips][ias] Fix all the hacks related to MIPS-specific unary operators (%hi/%lo/%gp_rel/etc.).

It seems that MSVC doesn't like std::tie().

llvm-svn: 277990

7 years ago[analyzer] Model base to derived casts more precisely.
Gabor Horvath [Mon, 8 Aug 2016 09:22:59 +0000 (09:22 +0000)]
[analyzer] Model base to derived casts more precisely.

Dynamic casts are handled relatively well by the static analyzer.
BaseToDerived casts however are treated conservatively. This can cause some
false positives with the NewDeleteLeaks checker.

This patch alters the behavior of BaseToDerived casts. In case a dynamic cast
would succeed use the same semantics. Otherwise fall back to the conservative
approach.

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

llvm-svn: 277989

7 years ago[mips][ias] Fix all the hacks related to MIPS-specific unary operators (%hi/%lo/...
Daniel Sanders [Mon, 8 Aug 2016 09:20:52 +0000 (09:20 +0000)]
[mips][ias] Fix all the hacks related to MIPS-specific unary operators (%hi/%lo/%gp_rel/etc.).

Summary:
They are now lexed as a single token on targets where
MCAsmInfo::HasMipsExpressions is true and then parsed in a similar way to
the '~' operator as part of MCExpr::parseExpression.

As a result:
* expressions and immediates no longer have different parsing rules. The
  difference is now solely down to whether evaluateAsAbsolute() succeeds.
* %hi(%neg(%gp_rel(x))) are no longer parsed as a single operator and
  decomposed into the three MipsMCExpr nodes. They are parsed directly as
  three MipsMCExpr nodes.
  * parseMemOperand no longer needs to eat all the surrounding parenthesis
    to get at the outermost operator to make this work
* %hi(%neg(%gp_rel(x))) and %lo(%neg(%gp_rel(x))) are no longer the only
  3-in-1 relocs that parse for N64. They're still the only combinations that
  are permitted in relocatable expressions though. Fixing that should be a
  later patch.
* We no longer need to list all the tokens that can occur as the first token of
  an expression or immediate.

test/MC/Mips/expr1.s:
    This change also prevents the incorrect lowering of %lo(2*4)+foo to
    %lo(8+foo) which is not an equivalent expression (the difference is
    whether foo is truncated to 16-bit or not) and the test has been
    updated to account for the macro expansion the correct expression requires.

Reviewers: sdardis

Subscribers: dsanders, sdardis, llvm-commits

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

llvm-svn: 277988

7 years ago[SelectionDAG] Refactor visitInlineAsm a bit. NFCI.
Diana Picus [Mon, 8 Aug 2016 08:54:39 +0000 (08:54 +0000)]
[SelectionDAG] Refactor visitInlineAsm a bit. NFCI.

This shaves off ~100 lines from visitInlineAsm.

llvm-svn: 277987

7 years ago[ELF] - Linkerscript: do not define _edata,_end,_etext if SECTIONS is used.
George Rimar [Mon, 8 Aug 2016 08:42:48 +0000 (08:42 +0000)]
[ELF] - Linkerscript: do not define _edata,_end,_etext if SECTIONS is used.

I faced that when tried to link FreeBSD kernel.
It was "duplicate symbol: _edata in (internal) and (internal)" error.
_data was a shared symbol that came from hack.so. At first it was replaced with DefinedRegular by the code
disabled in this patch and later when script tried to define the same symbol - the error was shown.

In the same situation (as given in testcase) ld defines them as UND. gold defines as ABS with zero value.
Patch just disables any operations of creating these symbols if script do layout.

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

llvm-svn: 277986

7 years agoFix two bugs for musl-libc on ARM
Diana Picus [Mon, 8 Aug 2016 08:27:36 +0000 (08:27 +0000)]
Fix two bugs for musl-libc on ARM

Bug 1: triples like armv7-pc-linux-musl use the wrong linker name
ld-musl-armv7.so.1; the right name should be ld-musl-arm.so.1, disregarding the
subarch field.

Bug 2: when compiler option -mhard-float is used, we should use the "hardfloat"
linker, no matter whether the triple itself mentions "hardfloat".

Patch by Lei Zhang!

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

llvm-svn: 277985

7 years agoAdd some comments linking back to PR28400.
Sean Silva [Mon, 8 Aug 2016 07:03:49 +0000 (07:03 +0000)]
Add some comments linking back to PR28400.

Thanks to Mehdi for the suggestion!

llvm-svn: 277984

7 years ago[compiler-rt][XRay] Only add xray dependency if XRay is built and is available for...
Dean Michael Berris [Mon, 8 Aug 2016 05:49:29 +0000 (05:49 +0000)]
[compiler-rt][XRay] Only add xray dependency if XRay is built and is available for the platform

llvm-svn: 277983

7 years ago[PM] More workaround for PR28400
Sean Silva [Mon, 8 Aug 2016 05:38:06 +0000 (05:38 +0000)]
[PM] More workaround for PR28400

llvm-svn: 277982

7 years ago[PM] BasicAA needs to be invalidated since it holds pointers to other stuff.
Sean Silva [Mon, 8 Aug 2016 05:38:03 +0000 (05:38 +0000)]
[PM] BasicAA needs to be invalidated since it holds pointers to other stuff.

llvm-svn: 277981

7 years ago[PM] Invalidate CallGraphAnalysis because it holds AssertingVH
Sean Silva [Mon, 8 Aug 2016 05:38:01 +0000 (05:38 +0000)]
[PM] Invalidate CallGraphAnalysis because it holds AssertingVH

This is essentially PR28400. The fix here is similar to that implemented
in r274656.

llvm-svn: 277980

7 years ago[PM] Function-level TLI is also immutable.
Sean Silva [Mon, 8 Aug 2016 05:37:58 +0000 (05:37 +0000)]
[PM] Function-level TLI is also immutable.

llvm-svn: 277979

7 years ago[MSSA] Fix PR28880 by fixing use optimizer's lower bound tracking behavior.
Daniel Berlin [Mon, 8 Aug 2016 04:44:53 +0000 (04:44 +0000)]
[MSSA] Fix PR28880 by fixing use optimizer's lower bound tracking behavior.

Summary:
In the use optimizer, we need to keep of whether the lower bound still
dominates us or else we may decide a lower bound is still valid when it
is not due to intervening pushes/pops.  Fixes PR28880 (and probably a
bunch of other things).

Reviewers: george.burgess.iv

Subscribers: MatzeB, llvm-commits, sebpop

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

llvm-svn: 277978

7 years ago[JumpThreading] Fix handling of aliasing metadata.
Eli Friedman [Mon, 8 Aug 2016 04:10:22 +0000 (04:10 +0000)]
[JumpThreading] Fix handling of aliasing metadata.

Summary:
The correctness fix here is that when we CSE a load with another load,
we need to combine the metadata on the two loads. This matches the
behavior of other passes, like instcombine and GVN.

There's also a minor optimization improvement here: for load PRE, the
aliasing metadata on the inserted load should be the same as the
metadata on the original load. Not sure why the old code was throwing
it away.

Issue found by inspection.

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

llvm-svn: 277977

7 years agoPass information in a record instead of stack. NFC
Serge Pavlov [Mon, 8 Aug 2016 04:02:15 +0000 (04:02 +0000)]
Pass information in a record instead of stack. NFC

Functions of Sema that work with building of nested name specifiers have too
many parameters (BuildCXXNestedNameSpecifier already expects 10 arguments).
With this change the information about identifier and its context is packed
into a structure, which is then passes to the semantic functions.

llvm-svn: 277976

7 years ago[compiler-rt][XRay] Default COMPILER_RT_BUILD_XRAY to ON
Dean Michael Berris [Mon, 8 Aug 2016 03:58:57 +0000 (03:58 +0000)]
[compiler-rt][XRay] Default COMPILER_RT_BUILD_XRAY to ON

llvm-svn: 277975

7 years ago[compiler-rt][XRay] Fix XRay test build dependencies
Dean Michael Berris [Mon, 8 Aug 2016 03:42:11 +0000 (03:42 +0000)]
[compiler-rt][XRay] Fix XRay test build dependencies

llvm-svn: 277974

7 years ago[MC] Delete use of *structors_used.
Davide Italiano [Mon, 8 Aug 2016 03:30:01 +0000 (03:30 +0000)]
[MC] Delete use of *structors_used.

Jim Grosbach and Kevin Enderby think those are not used anymore.
Originally submitted by: Rafael Espindola

llvm-svn: 277973

7 years ago[SimplifyLibCalls] Emit sqrt intrinsic instead of a libcall.
Davide Italiano [Mon, 8 Aug 2016 03:23:01 +0000 (03:23 +0000)]
[SimplifyLibCalls] Emit sqrt intrinsic instead of a libcall.

llvm-svn: 277972

7 years ago[compiler-rt][XRay] Implement __xray_unpatch() and __xray_remove_handler()
Dean Michael Berris [Mon, 8 Aug 2016 03:10:22 +0000 (03:10 +0000)]
[compiler-rt][XRay] Implement __xray_unpatch() and __xray_remove_handler()

Summary:
We also add one test (and the XRay testing infrastructure) to exercise
the patching and unpatching code. This uses the XRay API exported
through the headers as well, installing a custom log handler.

Depends on D23101 for the updated emitted code alignment for the
return/entry sleds.

Reviewers: rSerge, echristo, rnk

Subscribers: tberghammer, danalbert, srhines, mehdi_amini, llvm-commits

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

llvm-svn: 277971

7 years agoFix copy/move constructor annotation for the uses-allocator test types.
Eric Fiselier [Mon, 8 Aug 2016 02:22:41 +0000 (02:22 +0000)]
Fix copy/move constructor annotation for the uses-allocator test types.

Previously the copy/move constructors of the test types did not
properly set the arg_id to T const& or T&& respectivly.

llvm-svn: 277970

7 years ago[SROA] Fix crash with lifetime intrinsic partially covering alloca.
Eli Friedman [Mon, 8 Aug 2016 01:30:53 +0000 (01:30 +0000)]
[SROA] Fix crash with lifetime intrinsic partially covering alloca.

Summary:
PromoteMemToReg looks specifically for the pattern
bitcast+lifetime.start (or a bitcast-equivalent GEP); any offset
will lead to an assertion failure.

Fixes https://llvm.org/bugs/show_bug.cgi?id=27999 .

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

llvm-svn: 277969

7 years ago[libcxx] Add "flag" default arg: basic_regex ptr_size_flag ctor
Hubert Tong [Sun, 7 Aug 2016 22:26:04 +0000 (22:26 +0000)]
[libcxx] Add "flag" default arg: basic_regex ptr_size_flag ctor

Summary:
The synopsis in C++11 subclause 28.8 [re.regex] has:
```
basic_regex(const charT* p, size_t len,
            flag_type f = regex_constants::ECMAScript);
```

The default argument is added to libc++ by this change.

Reviewers: mclow.lists, rsmith, hubert.reinterpretcast

Subscribers: cfe-commits

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

Reapplies r277966.
Patch by Jason Liu!

llvm-svn: 277968

7 years agoRevert r277966. Forgot patch attribution.
Hubert Tong [Sun, 7 Aug 2016 22:23:24 +0000 (22:23 +0000)]
Revert r277966. Forgot patch attribution.

llvm-svn: 277967

7 years ago[libcxx] Add "flag" default arg: basic_regex ptr_size_flag ctor
Hubert Tong [Sun, 7 Aug 2016 22:18:33 +0000 (22:18 +0000)]
[libcxx] Add "flag" default arg: basic_regex ptr_size_flag ctor

Summary:
The synopsis in C++11 subclause 28.8 [re.regex] has:
```
basic_regex(const charT* p, size_t len,
            flag_type f = regex_constants::ECMAScript);
```

The default argument is added to libc++ by this change.

Reviewers: mclow.lists, rsmith, hubert.reinterpretcast

Subscribers: cfe-commits

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

llvm-svn: 277966

7 years ago[AVX-512] Improve lowering of inserting a single element into lowest element of a...
Craig Topper [Sun, 7 Aug 2016 21:52:59 +0000 (21:52 +0000)]
[AVX-512] Improve lowering of inserting a single element into lowest element of a 512-bit vector of zeroes by using vmovq/vmovd/vmovss/vmovsd.

llvm-svn: 277965

7 years agoMark LWG 2726 as complete. No code change needed.
Eric Fiselier [Sun, 7 Aug 2016 21:47:06 +0000 (21:47 +0000)]
Mark LWG 2726 as complete. No code change needed.

llvm-svn: 277964

7 years ago[SLC] Emit an intrinsic instead of a libcall for pow.
Davide Italiano [Sun, 7 Aug 2016 20:27:03 +0000 (20:27 +0000)]
[SLC] Emit an intrinsic instead of a libcall for pow.

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

llvm-svn: 277963

7 years agoRevert r277905, it caused PR28894
Nico Weber [Sun, 7 Aug 2016 20:18:04 +0000 (20:18 +0000)]
Revert r277905, it caused PR28894

llvm-svn: 277962

7 years ago[AVX-512] Add 512-bit logical operations to load folding tables. Add avx512f stack...
Craig Topper [Sun, 7 Aug 2016 17:14:09 +0000 (17:14 +0000)]
[AVX-512] Add 512-bit logical operations to load folding tables. Add avx512f stack folding test and move some tests from the avx512vl test.

llvm-svn: 277961

7 years ago[AVX-512] Add EVEX encoded floating point MAX/MIN instructions to the load folding...
Craig Topper [Sun, 7 Aug 2016 17:14:05 +0000 (17:14 +0000)]
[AVX-512] Add EVEX encoded floating point MAX/MIN instructions to the load folding tables.

llvm-svn: 277960

7 years ago[X86] lowerVectorShuffle - ensure that undefined mask elements only use SM_SentinelUndef
Simon Pilgrim [Sun, 7 Aug 2016 15:29:12 +0000 (15:29 +0000)]
[X86] lowerVectorShuffle - ensure that undefined mask elements only use SM_SentinelUndef

Help lowering and combining (which can specify SM_SentinelZero mask elements) share more shuffle matching code.

llvm-svn: 277959

7 years agoAVX-512: Changed lowering of BITCAST between i1 vectors and i8/i16/i32 integer values
Elena Demikhovsky [Sun, 7 Aug 2016 13:05:58 +0000 (13:05 +0000)]
AVX-512: Changed lowering of BITCAST between i1 vectors and i8/i16/i32 integer values

Optimized lowering of BITCAST node. The BITCAST node can be replaced with COPY_TO_REG instead of KMOV.
It allows to suppress two opposite BITCAST operations and avoid redundant "movs".

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

llvm-svn: 277958

7 years ago[X86][AVX512BW] Add sext/zext AVX512BW 512-bit vector tests
Simon Pilgrim [Sun, 7 Aug 2016 12:41:36 +0000 (12:41 +0000)]
[X86][AVX512BW] Add sext/zext AVX512BW 512-bit vector tests

llvm-svn: 277957

7 years ago[X86][AVX512] Add sext/zext to 512-bit vector tests
Simon Pilgrim [Sun, 7 Aug 2016 12:10:46 +0000 (12:10 +0000)]
[X86][AVX512] Add sext/zext to 512-bit vector tests

llvm-svn: 277956

7 years ago[AVX512] integer comparisions enumeration.
Asaf Badouh [Sun, 7 Aug 2016 10:43:04 +0000 (10:43 +0000)]
[AVX512] integer comparisions enumeration.

fix Bug 28842 https://llvm.org/bugs/show_bug.cgi?id=28842

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

llvm-svn: 277955

7 years agoAVX-512: Added a test for cmp intrinsics
Elena Demikhovsky [Sun, 7 Aug 2016 09:29:34 +0000 (09:29 +0000)]
AVX-512: Added a test for cmp intrinsics

This is a new test that should explore a current suboptimal sequence in passing values between cmp and kor intrinsics.
The code will be optimized in an upcoming patch.

Submitted bug here:
https://llvm.org/bugs/show_bug.cgi?id=28839

llvm-svn: 277954

7 years agoUpdate clang tests for LLVM r277950
David Majnemer [Sun, 7 Aug 2016 08:28:58 +0000 (08:28 +0000)]
Update clang tests for LLVM r277950

We infer inbounds on GEPs of allocas leading to minor perturbations in
tests.

llvm-svn: 277953

7 years ago[InstSimplify] Fold gep (gep V, C), (sub 0, V) to C
David Majnemer [Sun, 7 Aug 2016 07:58:12 +0000 (07:58 +0000)]
[InstSimplify] Fold gep (gep V, C), (sub 0, V) to C

llvm-svn: 277952

7 years ago[InstSimplify] Try hard to simplify pointer comparisons
David Majnemer [Sun, 7 Aug 2016 07:58:10 +0000 (07:58 +0000)]
[InstSimplify] Try hard to simplify pointer comparisons

Simplify ptrtoint comparisons involving operands with different source
types.

llvm-svn: 277951

7 years ago[InstCombine] Infer inbounds on geps of allocas
David Majnemer [Sun, 7 Aug 2016 07:58:00 +0000 (07:58 +0000)]
[InstCombine] Infer inbounds on geps of allocas

llvm-svn: 277950

7 years ago[X86] Add commutable floating point max/min instructions to the load folding tables.
Craig Topper [Sun, 7 Aug 2016 05:39:51 +0000 (05:39 +0000)]
[X86] Add commutable floating point max/min instructions to the load folding tables.

llvm-svn: 277949

7 years ago[AVX-512] Add andnps/andnpd to the avx512vl stack folding test.
Craig Topper [Sun, 7 Aug 2016 05:39:48 +0000 (05:39 +0000)]
[AVX-512] Add andnps/andnpd to the avx512vl stack folding test.

llvm-svn: 277948

7 years ago[X86] Simplify a shuffle mask copy. NFC
Craig Topper [Sun, 7 Aug 2016 05:39:46 +0000 (05:39 +0000)]
[X86] Simplify a shuffle mask copy. NFC

llvm-svn: 277947

7 years agoRevert "Revert "[LoopSimplify] Fix updating LCSSA after separating nested loops.""
Michael Zolotukhin [Sun, 7 Aug 2016 01:56:54 +0000 (01:56 +0000)]
Revert "Revert "[LoopSimplify] Fix updating LCSSA after separating nested loops.""

This reverts commit r277901. Reaaply the commit as it looks like it has
nothing to do with the bots failures.

llvm-svn: 277946

7 years ago[ExecutionEngine][RuntimeDyld] Move JITSymbol from ExecutionEngine to RuntimeDyld.
Lang Hames [Sun, 7 Aug 2016 01:19:37 +0000 (01:19 +0000)]
[ExecutionEngine][RuntimeDyld] Move JITSymbol from ExecutionEngine to RuntimeDyld.

JITSymbol really belongs in RuntimeDyld. This should fix the llvm-rtdyld link
failures caused by r277943.

llvm-svn: 277945

7 years ago[RuntimeDyld] Remove symbol that is unused as of r277943.
Lang Hames [Sun, 7 Aug 2016 01:12:44 +0000 (01:12 +0000)]
[RuntimeDyld] Remove symbol that is unused as of r277943.

llvm-svn: 277944

7 years ago[RuntimeDyld] Replace manual flag checks with JITSymbolFlags::fromObjectSymbol.
Lang Hames [Sun, 7 Aug 2016 00:18:14 +0000 (00:18 +0000)]
[RuntimeDyld] Replace manual flag checks with JITSymbolFlags::fromObjectSymbol.

llvm-svn: 277943

7 years ago[ORC] Re-apply r277896, removing bogus triples and datalayouts that broke tests
Lang Hames [Sat, 6 Aug 2016 22:36:26 +0000 (22:36 +0000)]
[ORC] Re-apply r277896, removing bogus triples and datalayouts that broke tests
on linux last time.

llvm-svn: 277942

7 years ago[libFuzzer] make libFuzzer work with a bit older clang versions
Kostya Serebryany [Sat, 6 Aug 2016 21:28:56 +0000 (21:28 +0000)]
[libFuzzer] make libFuzzer work with a bit older clang versions

llvm-svn: 277941

7 years ago[libFuzzer] don't print bogus error message
Kostya Serebryany [Sat, 6 Aug 2016 21:23:29 +0000 (21:23 +0000)]
[libFuzzer] don't print bogus error message

llvm-svn: 277940

7 years ago[X86][AVX2] Improve sign/zero extension on AVX2 targets
Simon Pilgrim [Sat, 6 Aug 2016 21:21:12 +0000 (21:21 +0000)]
[X86][AVX2] Improve sign/zero extension on AVX2 targets

Split extensions to large vectors into 256-bit chunks - the equivalent of what we do with pre-AVX2 into 128-bit chunks

llvm-svn: 277939

7 years agoCoroSplit: Squash unused variable FnTrigger warning in NDEBUG
Gor Nishanov [Sat, 6 Aug 2016 21:11:10 +0000 (21:11 +0000)]
CoroSplit: Squash unused variable FnTrigger warning in NDEBUG

llvm-svn: 277938

7 years ago[Coroutines] Passify the build bots. Remove restart-trigger.ll test for now
Gor Nishanov [Sat, 6 Aug 2016 21:01:22 +0000 (21:01 +0000)]
[Coroutines] Passify the build bots. Remove restart-trigger.ll test for now

llvm-svn: 277937

7 years ago[Coroutines] Part 5: Add CGSCC restart trigger
Gor Nishanov [Sat, 6 Aug 2016 20:44:39 +0000 (20:44 +0000)]
[Coroutines] Part 5: Add CGSCC restart trigger

Summary:
CoroSplit pass processes the coroutine twice. First, it lets it go through
complete IPO optimization pipeline as a single function. It forces restart
of the pipeline by inserting an indirect call to an empty function "coro.devirt.trigger"
which is devirtualized by CoroElide pass that triggers a restart of the pipeline by CGPassManager.
(In later patches, when CoroSplit pass sees the same coroutine the second time, it splits it up,
adds coroutine subfunctions to the SCC to be processed by IPO pipeline.)

Documentation and overview is here: http://llvm.org/docs/Coroutines.html.

Upstreaming sequence (rough plan)
1.Add documentation. (https://reviews.llvm.org/D22603)
2.Add coroutine intrinsics. (https://reviews.llvm.org/D22659)
3.Add empty coroutine passes. (https://reviews.llvm.org/D22847)
4.Add coroutine devirtualization + tests.
ab) Lower coro.resume and coro.destroy (https://reviews.llvm.org/D22998)
c) Do devirtualization (https://reviews.llvm.org/D23229)
5.Add CGSCC restart trigger + tests. <= we are here
6.Add coroutine heap elision + tests.
7.Add the rest of the logic (split into more patches)

Reviewers: mehdi_amini, majnemer

Subscribers: llvm-commits, mehdi_amini

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

llvm-svn: 277936

7 years agoAdd the new scan-build option (--show-description) in the 4.0 release notes
Sylvestre Ledru [Sat, 6 Aug 2016 20:23:54 +0000 (20:23 +0000)]
Add the new scan-build option (--show-description) in the 4.0 release notes

llvm-svn: 277935

7 years ago[AVX-512] Add SQRT/RCP14/RNDSCALE to hasUndefRegUpdate.
Craig Topper [Sat, 6 Aug 2016 19:31:52 +0000 (19:31 +0000)]
[AVX-512] Add SQRT/RCP14/RNDSCALE to hasUndefRegUpdate.

llvm-svn: 277934

7 years ago[AVX-512] Add AVX-512 scalar CVT instructions to hasUndefRegUpdate.
Craig Topper [Sat, 6 Aug 2016 19:31:50 +0000 (19:31 +0000)]
[AVX-512] Add AVX-512 scalar CVT instructions to hasUndefRegUpdate.

llvm-svn: 277933

7 years ago[AVX-512] Add AVX512 run line to a test and re-generate the checks. Future commits...
Craig Topper [Sat, 6 Aug 2016 19:31:47 +0000 (19:31 +0000)]
[AVX-512] Add AVX512 run line to a test and re-generate the checks. Future commits will refine some of the sequences.

llvm-svn: 277932

7 years ago[X86] Add VRCPSSr_Int, VRSQRTSSr_Int, VSQRTSSr_Int, and VSQRTSDr_Int to hasUndefRegUp...
Craig Topper [Sat, 6 Aug 2016 19:31:44 +0000 (19:31 +0000)]
[X86] Add VRCPSSr_Int, VRSQRTSSr_Int, VSQRTSSr_Int, and VSQRTSDr_Int to hasUndefRegUpdate.

llvm-svn: 277931

7 years ago[X86][SSE] Enable commutation between MOVHLPS and UNPCKHPD
Simon Pilgrim [Sat, 6 Aug 2016 18:40:28 +0000 (18:40 +0000)]
[X86][SSE] Enable commutation between MOVHLPS and UNPCKHPD

Assuming SSE2 is available then we can safely commute between these, removing some unnecessary register moves and improving memory folding opportunities.

VEX encoded versions don't benefit so I haven't added support to them.

llvm-svn: 277930

7 years agoCOFF ARM: Fix typos in the relocation test
Saleem Abdulrasool [Sat, 6 Aug 2016 18:02:51 +0000 (18:02 +0000)]
COFF ARM: Fix typos in the relocation test

Fix comments.  NFC.

Patch by Martin Storsjö!

llvm-svn: 277929

7 years agoHeaders: Add ARM support to intrin.h for MSVC compatibility
Saleem Abdulrasool [Sat, 6 Aug 2016 17:58:24 +0000 (17:58 +0000)]
Headers: Add ARM support to intrin.h for MSVC compatibility

This fixes compiling with headers from the Windows SDK for ARM, where the
YieldProcessor function (in winnt.h) refers to _ARM_BARRIER_ISHST.

The actual MSVC armintr.h contains a lot more definitions, but this is enough to
build code that uses the Windows SDK but doesn't use ARM intrinsics directly.

An alternative would to just keep the addition to intrin.h (to include
armintr.h), but not actually ship armintr.h, instead having clang's intrin.h
include armintr.h from MSVC's include directory. (That one works fine with
clang, at least for building code that uses the Windows SDK.)

Patch by Martin Storsjö!

llvm-svn: 277928

7 years ago[libfuzzer] do not warn about missing pcbuffer functions: they are new.
Mike Aizatsky [Sat, 6 Aug 2016 17:03:22 +0000 (17:03 +0000)]
[libfuzzer] do not warn about missing pcbuffer functions: they are new.

llvm-svn: 277927

7 years agoUnpollute the global namespace. lld edition.
Benjamin Kramer [Sat, 6 Aug 2016 13:52:37 +0000 (13:52 +0000)]
Unpollute the global namespace. lld edition.

llvm-svn: 277926

7 years ago[X86][SSE] Regenerate SSE1 shuffle tests
Simon Pilgrim [Sat, 6 Aug 2016 13:46:09 +0000 (13:46 +0000)]
[X86][SSE] Regenerate SSE1 shuffle tests

llvm-svn: 277925

7 years ago[ARM] Don't copy MCInsts in loop. NFC.
Benjamin Kramer [Sat, 6 Aug 2016 12:58:24 +0000 (12:58 +0000)]
[ARM] Don't copy MCInsts in loop. NFC.

llvm-svn: 277924

7 years ago[ASTReader] Use real move semantics instead of emulating them in the copy ctor.
Benjamin Kramer [Sat, 6 Aug 2016 12:45:16 +0000 (12:45 +0000)]
[ASTReader] Use real move semantics instead of emulating them in the copy ctor.

No functionality change intended.

llvm-svn: 277923

7 years ago[Inliner] Use function_ref for functors which are never taken ownership of.
Benjamin Kramer [Sat, 6 Aug 2016 12:33:46 +0000 (12:33 +0000)]
[Inliner] Use function_ref for functors which are never taken ownership of.

llvm-svn: 277922

7 years ago[LoadCombine] Simplify code with a brace init. NFC.
Benjamin Kramer [Sat, 6 Aug 2016 12:11:11 +0000 (12:11 +0000)]
[LoadCombine] Simplify code with a brace init. NFC.

llvm-svn: 277921

7 years ago[Sema] Make switch fully covered again.
Benjamin Kramer [Sat, 6 Aug 2016 11:28:20 +0000 (11:28 +0000)]
[Sema] Make switch fully covered again.

llvm-svn: 277920

7 years ago[X86][SSE] Add 2 input shuffle support to matchBinaryVectorShuffle
Simon Pilgrim [Sat, 6 Aug 2016 11:22:39 +0000 (11:22 +0000)]
[X86][SSE] Add 2 input shuffle support to matchBinaryVectorShuffle

Not actually used yet...

llvm-svn: 277919

7 years agoMove helpers into anonymous namespaces. NFC.
Benjamin Kramer [Sat, 6 Aug 2016 11:21:04 +0000 (11:21 +0000)]
Move helpers into anonymous namespaces. NFC.

llvm-svn: 277918

7 years ago[StaticAnalyzer] Remove dead code.
Benjamin Kramer [Sat, 6 Aug 2016 11:20:59 +0000 (11:20 +0000)]
[StaticAnalyzer] Remove dead code.

llvm-svn: 277917

7 years agoMove helpers into anonymous namespaces. NFC.
Benjamin Kramer [Sat, 6 Aug 2016 11:13:10 +0000 (11:13 +0000)]
Move helpers into anonymous namespaces. NFC.

llvm-svn: 277916

7 years ago[CodeGen] Fix a -Wdocumentation warning
David Majnemer [Sat, 6 Aug 2016 08:37:12 +0000 (08:37 +0000)]
[CodeGen] Fix a -Wdocumentation warning

A parameter was documented with the wrong name.
No functionality change is intended.

llvm-svn: 277915

7 years ago[ValueTracking] Teach computeKnownBits about [su]min/max
David Majnemer [Sat, 6 Aug 2016 08:16:00 +0000 (08:16 +0000)]
[ValueTracking] Teach computeKnownBits about [su]min/max

Reasoning about a select in terms of a min or max allows us to derive a
tigher bound on the result.

llvm-svn: 277914

7 years ago[CallGraphSCCPass] Use an ArrayRef instead of a pair of iterators
David Majnemer [Sat, 6 Aug 2016 06:21:02 +0000 (06:21 +0000)]
[CallGraphSCCPass] Use an ArrayRef instead of a pair of iterators

No functional change is intended.

llvm-svn: 277913

7 years ago[ADT] Make the triple test 1000x faster through more focused test cases.
Chandler Carruth [Sat, 6 Aug 2016 06:00:50 +0000 (06:00 +0000)]
[ADT] Make the triple test 1000x faster through more focused test cases.

The current approach isn't a long-term viable pattern. Given the set of
architectures A, vendors V, operating systems O, and environments E, it
does |A| * |V| * |O| * |E| * 4! tests. As LLVM grows, this test keeps
getting slower, despite my working very hard to make it get some
"optimizations" even in -O0 builds in order to lower the constant
factors. Fundamentally, we're doing an unreasonable amount of work.i

Looking at the specific thing being tested -- the goal seems very
clearly to be testing the *permutations*, not the *combinations*. The
combinations are driving up the complexity much more than anything else.

Instead, test every possible value for a given triple entry in every
permutation of *some* triple. This really seems to cover the core goal
of the test. Every single possible triple component is tested in every
position. But because we keep the rest of the triple constant, it does
so in a dramatically more scalable amount of time. With this model we do
(|A| + |V| + |O| + |E|) * 4! tests.

For me on a debug build, this goes from running for 19 seconds to 19
milliseconds, or a 1000x improvement. This makes a world of difference
for the critical path of 'ninja check-llvm' and other extremely common
workflows.

Thanks to Renato, Dean, and David for the helpful review comments and
helping me refine the explanation of the change.

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

llvm-svn: 277912

7 years ago[ELF][MIPS] Produce a correct and complete set of MIPS ELF header flags
Simon Atanasyan [Sat, 6 Aug 2016 05:11:41 +0000 (05:11 +0000)]
[ELF][MIPS] Produce a correct and complete set of MIPS ELF header flags

The patch extends the `getMipsEFlags` function. Now in that function
we iterate over all object files, parse ELF header flags and merge them.
If a file is incompatible with previously analyzed ones we show an error
or warning. That can happen if, for example, we try to link files with
incompatible ABI, ISA, NAN encoding etc.

There is an alternative solution. We can check and merge flags and
reject incompatible input modules in the `isCompatible` function which
is called from the `SymbolTable::addFile` method. But in that case we
have to save and keep somewhere a merged ELF flags combination to use it
later in the writer.

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

llvm-svn: 277911

7 years ago[InstCombine] Don't coerce non-integral pointers to integers
Sanjoy Das [Sat, 6 Aug 2016 02:58:48 +0000 (02:58 +0000)]
[InstCombine] Don't coerce non-integral pointers to integers

Reviewers: majnemer

Subscribers: mcrosier, llvm-commits

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

llvm-svn: 277910

7 years agoRevert "(refs/bisect/bad) GVN-hoist: enable by default"
Matthias Braun [Sat, 6 Aug 2016 02:23:15 +0000 (02:23 +0000)]
Revert "(refs/bisect/bad) GVN-hoist: enable by default"

GVN-Hoist appears to miscompile llvm-testsuite
SingleSource/Benchmarks/Misc/fbench.c at the moment.

I filed http://llvm.org/PR28880

This reverts commit r277786.

llvm-svn: 277909

7 years agoPart 4c: Coroutine Devirtualization: Devirtualize coro.resume and coro.destroy.
Gor Nishanov [Sat, 6 Aug 2016 02:16:35 +0000 (02:16 +0000)]
Part 4c: Coroutine Devirtualization: Devirtualize coro.resume and coro.destroy.

Summary:
This is the 4c patch of the coroutine series. CoroElide pass now checks if PostSplit coro.begin
is referenced by coro.subfn.addr intrinsics. If so replace coro.subfn.addrs with an appropriate coroutine
subfunction associated with that coro.begin.

Documentation and overview is here: http://llvm.org/docs/Coroutines.html.

Upstreaming sequence (rough plan)
1.Add documentation. (https://reviews.llvm.org/D22603)
2.Add coroutine intrinsics. (https://reviews.llvm.org/D22659)
3.Add empty coroutine passes. (https://reviews.llvm.org/D22847)
4.Add coroutine devirtualization + tests.
ab) Lower coro.resume and coro.destroy (https://reviews.llvm.org/D22998)
c) Do devirtualization <= we are here
5.Add CGSCC restart trigger + tests.
6.Add coroutine heap elision + tests.
7.Add the rest of the logic (split into more patches)

Reviewers: majnemer

Subscribers: mehdi_amini, llvm-commits

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

llvm-svn: 277908

7 years agoRevert r277896.
Nico Weber [Sat, 6 Aug 2016 02:00:45 +0000 (02:00 +0000)]
Revert r277896.

It breaks ExecutionEngine/OrcLazy/weak-function.ll on most bots.

Script:
--
...
--
Exit Code: 1

Command Output (stderr):
--
Could not find main function.

llvm-svn: 277907

7 years ago[NFC] Silence noisy -Wreturn-type warnings
Erik Pilkington [Sat, 6 Aug 2016 01:54:50 +0000 (01:54 +0000)]
[NFC] Silence noisy -Wreturn-type warnings

llvm-svn: 277906

7 years agoCodeGen: If Convert blocks that would form a diamond when tail-merged.
Kyle Butt [Sat, 6 Aug 2016 01:52:37 +0000 (01:52 +0000)]
CodeGen: If Convert blocks that would form a diamond when tail-merged.

The following function currently relies on tail-merging for if
conversion to succeed. The common tail of cond_true and cond_false is
extracted, and this then forms a diamond pattern that can be
successfully if converted.

If this block does not get extracted, either because tail-merging is
disabled or the threshold is higher, we should still recognize this
pattern and if-convert it.
define i32 @t2(i32 %a, i32 %b) nounwind {
entry:
%tmp1434 = icmp eq i32 %a, %b ; <i1> [#uses=1]
br i1 %tmp1434, label %bb17, label %bb.outer

bb.outer: ; preds = %cond_false, %entry
%b_addr.021.0.ph = phi i32 [ %b, %entry ], [ %tmp10, %cond_false ]
%a_addr.026.0.ph = phi i32 [ %a, %entry ], [ %a_addr.026.0, %cond_false ]
br label %bb

bb: ; preds = %cond_true, %bb.outer
%indvar = phi i32 [ 0, %bb.outer ], [ %indvar.next, %cond_true ]
%tmp. = sub i32 0, %b_addr.021.0.ph
%tmp.40 = mul i32 %indvar, %tmp.
%a_addr.026.0 = add i32 %tmp.40, %a_addr.026.0.ph
%tmp3 = icmp sgt i32 %a_addr.026.0, %b_addr.021.0.ph
br i1 %tmp3, label %cond_true, label %cond_false

cond_true: ; preds = %bb
%tmp7 = sub i32 %a_addr.026.0, %b_addr.021.0.ph
%tmp1437 = icmp eq i32 %tmp7, %b_addr.021.0.ph
%indvar.next = add i32 %indvar, 1
br i1 %tmp1437, label %bb17, label %bb

cond_false: ; preds = %bb
%tmp10 = sub i32 %b_addr.021.0.ph, %a_addr.026.0
%tmp14 = icmp eq i32 %a_addr.026.0, %tmp10
br i1 %tmp14, label %bb17, label %bb.outer

bb17: ; preds = %cond_false, %cond_true, %entry
%a_addr.026.1 = phi i32 [ %a, %entry ], [ %tmp7, %cond_true ], [ %a_addr.026.0, %cond_false ]
ret i32 %a_addr.026.1
}

Without tail-merging or diamond-tail if conversion:
LBB1_1:                                 @ %bb
                                        @ =>This Inner Loop Header: Depth=1
        cmp     r0, r1
        ble     LBB1_3
@ BB#2:                                 @ %cond_true
                                        @   in Loop: Header=BB1_1 Depth=1
        subs    r0, r0, r1
        cmp     r1, r0
        it      ne
        cmpne   r0, r1
        bgt     LBB1_4
LBB1_3:                                 @ %cond_false
                                        @   in Loop: Header=BB1_1 Depth=1
        subs    r1, r1, r0
        cmp     r1, r0
        bne     LBB1_1
LBB1_4:                                 @ %bb17
        bx      lr

With diamond-tail if conversion, but without tail-merging:
@ BB#0:                                 @ %entry
        cmp     r0, r1
        it      eq
        bxeq    lr
LBB1_1:                                 @ %bb
                                        @ =>This Inner Loop Header: Depth=1
        cmp     r0, r1
        ite     le
        suble   r1, r1, r0
        subgt   r0, r0, r1
        cmp     r1, r0
        bne     LBB1_1
@ BB#2:                                 @ %bb17
        bx      lr

llvm-svn: 277905

7 years agoIfConverter: Split ScanInstructions into 2 functions.
Kyle Butt [Sat, 6 Aug 2016 01:52:34 +0000 (01:52 +0000)]
IfConverter: Split ScanInstructions into 2 functions.

ScanInstructions is now 2 functions:
AnalyzeBranches and ScanInstructions. ScanInstructions also now takes a
pair of arguments delimiting the instructions to be scanned. This will
be used for forked diamond support to re-scan only a portion of the
block.

llvm-svn: 277904

7 years agoIfConversion: Document countDuplicatedInstructions. NFC
Kyle Butt [Sat, 6 Aug 2016 01:52:33 +0000 (01:52 +0000)]
IfConversion: Document countDuplicatedInstructions. NFC

llvm-svn: 277903

7 years agoIfConversion: factor out 2 functions to skip debug instrs. NFC
Kyle Butt [Sat, 6 Aug 2016 01:52:31 +0000 (01:52 +0000)]
IfConversion: factor out 2 functions to skip debug instrs. NFC

Skipping debug instructions occurrs repeatedly, factor it out.

llvm-svn: 277902

7 years agoRevert "[LoopSimplify] Fix updating LCSSA after separating nested loops."
Michael Zolotukhin [Sat, 6 Aug 2016 01:48:51 +0000 (01:48 +0000)]
Revert "[LoopSimplify] Fix updating LCSSA after separating nested loops."

This reverts commit r277877.
Try to appease clang-x64-ninja-win7 buildbot.

llvm-svn: 277901

7 years agoFix typos from r277797 and unused variable from r277889.
Richard Trieu [Sat, 6 Aug 2016 01:44:06 +0000 (01:44 +0000)]
Fix typos from r277797 and unused variable from r277889.

llvm-svn: 277900

7 years ago[sanitizer] allocator: move TransferBatch into SizeClassAllocator64/SizeClassAllocato...
Kostya Serebryany [Sat, 6 Aug 2016 01:24:11 +0000 (01:24 +0000)]
[sanitizer] allocator: move TransferBatch into SizeClassAllocator64/SizeClassAllocator32 because we actually need different iplementations for the 64- and 32-bit case. NFC; the following patches will make the TransferBatch implementations differ

llvm-svn: 277899

7 years agoTry to fix the ill.cc test on Linux
Reid Kleckner [Sat, 6 Aug 2016 00:57:58 +0000 (00:57 +0000)]
Try to fix the ill.cc test on Linux

llvm-svn: 277898

7 years agoThe lack of classes in the hash table is not an error - it's very legitimately possib...
Enrico Granata [Sat, 6 Aug 2016 00:57:07 +0000 (00:57 +0000)]
The lack of classes in the hash table is not an error - it's very legitimately possible for a process to define no ObjC classes of its own. Discovered by debugging /bin/ls

llvm-svn: 277897

7 years ago[ORC] Add (partial) weak symbol support to the CompileOnDemand layer.
Lang Hames [Sat, 6 Aug 2016 00:54:43 +0000 (00:54 +0000)]
[ORC] Add (partial) weak symbol support to the CompileOnDemand layer.

This adds partial support for weak functions to the CompileOnDemandLayer by
modifying the addLogicalModule method to check for existing stub definitions
before building a new stub for a weak function. This scheme is sufficient to
support ODR definitions, but fails for general weak definitions if strong
definition is encountered after the first weak definition. (A more extensive
refactor will be required to fully support weak symbols).

This patch does *not* add weak symbol support to RuntimeDyld: I hope to add
that in the near future.

llvm-svn: 277896

7 years agoFix Windows build - add return statement in SBThread::StepUsingScriptedThreadPlan.
Oleksiy Vyalov [Sat, 6 Aug 2016 00:42:23 +0000 (00:42 +0000)]
Fix Windows build - add return statement in SBThread::StepUsingScriptedThreadPlan.

llvm-svn: 277895

7 years agoUse %stdcxx11 instead of -std=c++11 so the test passes with VS 2015
Reid Kleckner [Sat, 6 Aug 2016 00:37:14 +0000 (00:37 +0000)]
Use %stdcxx11 instead of -std=c++11 so the test passes with VS 2015

llvm-svn: 277894

7 years agoFix a -Wunused-const-variable due to a bug in clang.
Zachary Turner [Sat, 6 Aug 2016 00:13:32 +0000 (00:13 +0000)]
Fix a -Wunused-const-variable due to a bug in clang.

llvm-svn: 277893

7 years ago[IRCE] Remove unused headers; NFC
Sanjoy Das [Sat, 6 Aug 2016 00:02:01 +0000 (00:02 +0000)]
[IRCE] Remove unused headers; NFC

llvm-svn: 277892