platform/upstream/llvm.git
6 years ago[ELF] - Eliminate ObjFile<ELFT>::getLineInfo. NFC.
George Rimar [Mon, 16 Jul 2018 15:29:35 +0000 (15:29 +0000)]
[ELF] - Eliminate ObjFile<ELFT>::getLineInfo. NFC.

Flow is the same, but a bit shorter after this change.

llvm-svn: 337183

6 years ago[ELF] - Cover ObjFile<ELFT>::getLineInfo() with a test.
George Rimar [Mon, 16 Jul 2018 15:27:53 +0000 (15:27 +0000)]
[ELF] - Cover ObjFile<ELFT>::getLineInfo() with a test.

There was no test for the first `return`.

llvm-svn: 337182

6 years ago[cfi-verify] Abort on unsupported targets
Joel Galenson [Mon, 16 Jul 2018 15:26:44 +0000 (15:26 +0000)]
[cfi-verify] Abort on unsupported targets

As suggested in the review for r337007, this makes cfi-verify abort on unsupported targets instead of producing incorrect results.  It also updates the design document to reflect this.

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

llvm-svn: 337181

6 years agoRevert r337175 (https://reviews.llvm.org/D49212) due to unintentional format changes.
Max Moroz [Mon, 16 Jul 2018 15:15:34 +0000 (15:15 +0000)]
Revert r337175 (https://reviews.llvm.org/D49212) due to unintentional format changes.

llvm-svn: 337180

6 years ago[InstrSimplify] add testcases for fold sdiv if two operands are negatived and non...
Chen Zheng [Mon, 16 Jul 2018 15:06:42 +0000 (15:06 +0000)]
[InstrSimplify] add testcases for fold sdiv if two operands are negatived and non-overflow

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

llvm-svn: 337179

6 years agoFix warnings in a static assert added to CFI.
Chandler Carruth [Mon, 16 Jul 2018 15:01:26 +0000 (15:01 +0000)]
Fix warnings in a static assert added to CFI.

llvm-svn: 337178

6 years ago[x86/SLH] Completely rework how we sink post-load hardening past data
Chandler Carruth [Mon, 16 Jul 2018 14:58:32 +0000 (14:58 +0000)]
[x86/SLH] Completely rework how we sink post-load hardening past data
invariant instructions to be both more correct and much more powerful.

While testing, I continued to find issues with sinking post-load
hardening. Unfortunately, it was amazingly hard to create any useful
tests of this because we were mostly sinking across copies and other
loading instructions. The fact that we couldn't sink past normal
arithmetic was really a big oversight.

So first, I've ported roughly the same set of instructions from the data
invariant loads to also have their non-loading varieties understood to
be data invariant. I've also added a few instructions that came up so
often it again made testing complicated: inc, dec, and lea.

With this, I was able to shake out a few nasty bugs in the validity
checking. We need to restrict to hardening single-def instructions with
defined registers that match a particular form: GPRs that don't have
a NOREX constraint directly attached to their register class.

The (tiny!) test case included catches all of the issues I was seeing
(once we can sink the hardening at all) except for the NOREX issue. The
only test I have there is horrible. It is large, inexplicable, and
doesn't even produce an error unless you try to emit encodings. I can
keep looking for a way to test it, but I'm out of ideas really.

Thanks to Ben for giving me at least a sanity-check review. I'll follow
up with Craig to go over this more thoroughly post-commit, but without
it SLH crashes everywhere so landing it for now.

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

llvm-svn: 337177

6 years agoTest commit
Henry Zhu [Mon, 16 Jul 2018 14:54:29 +0000 (14:54 +0000)]
Test commit

llvm-svn: 337176

6 years ago[libFuzzer] Implement stat::stability_rate based on the percentage of unstable edges.
Max Moroz [Mon, 16 Jul 2018 14:54:23 +0000 (14:54 +0000)]
[libFuzzer] Implement stat::stability_rate based on the percentage of unstable edges.

Summary:
Created a -print_unstable_stats flag.
When -print_unstable_stats=1, we run it 2 more times on interesting inputs poisoning unstable edges in an array.
On program termination, we run PrintUnstableStats() which will print a line with a stability percentage like AFL does.

Patch by Kyungtak Woo (@kevinwkt).

Reviewers: metzman, Dor1s, kcc, morehouse

Reviewed By: metzman, Dor1s, morehouse

Subscribers: delcypher, llvm-commits, #sanitizers, kcc, morehouse, Dor1s

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

llvm-svn: 337175

6 years ago[gcov] Add a test showing differences in line counts when building with or without...
Marco Castelluccio [Mon, 16 Jul 2018 14:40:33 +0000 (14:40 +0000)]
[gcov] Add a test showing differences in line counts when building with or without exceptions enabled.

Test for https://bugs.llvm.org/show_bug.cgi?id=38066.

llvm-svn: 337174

6 years agoFix TestDataFormatterUnordered for older libc++ versions
Pavel Labath [Mon, 16 Jul 2018 14:37:58 +0000 (14:37 +0000)]
Fix TestDataFormatterUnordered for older libc++ versions

clang recently started diagnosing "exception specification in
declaration does not match previous declaration" errors. Unfortunately
old libc++ versions had a bug, where they violated this rule, which
means that tests using this library version now fail due to build
errors.

Since it was easy to work around the bug by compiling this test with
-fno-exceptions, I do that here. If supporting old libc++ versions
becomes a burden, we'll have to revisit this.

llvm-svn: 337173

6 years ago[ASTImporter] Changed constant int to unsigned int in test code.
Balazs Keri [Mon, 16 Jul 2018 14:05:18 +0000 (14:05 +0000)]
[ASTImporter] Changed constant int to unsigned int in test code.

llvm-svn: 337172

6 years ago[mips] Eliminate the usage of hasStdEnc in MipsPat.
Simon Atanasyan [Mon, 16 Jul 2018 13:52:41 +0000 (13:52 +0000)]
[mips] Eliminate the usage of hasStdEnc in MipsPat.

Instead, the pattern is tagged with the correct predicate when
it is declared. Some patterns have been duplicated as necessary.

Patch by Simon Dardis.

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

llvm-svn: 337171

6 years ago[cfi] Don't pass a uint16_t to memset. Make sure the 16-bit constant is appropriate...
Filipe Cabecinhas [Mon, 16 Jul 2018 13:41:54 +0000 (13:41 +0000)]
[cfi] Don't pass a uint16_t to memset. Make sure the 16-bit constant is appropriate for us.

Reviewers: eugenis, pcc, kcc

Subscribers: delcypher, #sanitizers, llvm-commits

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

llvm-svn: 337170

6 years ago[analyzer] Fix the Z3 backend always generating unsigned APSInt
Mikhail R. Gadelha [Mon, 16 Jul 2018 13:32:22 +0000 (13:32 +0000)]
[analyzer] Fix the Z3 backend always generating unsigned APSInt

Summary:
In `toAPSInt`, the Z3 backend was not checking the variable `Int`'s type and was always generating unsigned `APSInt`s.

This was found by accident when I removed:
```
    llvm::APSInt ConvertedLHS, ConvertedRHS;
    QualType LTy, RTy;
    std::tie(ConvertedLHS, LTy) = fixAPSInt(*LHS);
    std::tie(ConvertedRHS, RTy) = fixAPSInt(*RHS);
-    doIntTypePromotion<llvm::APSInt, Z3ConstraintManager::castAPSInt>(
-        ConvertedLHS, LTy, ConvertedRHS, RTy);
    return BVF.evalAPSInt(BSE->getOpcode(), ConvertedLHS, ConvertedRHS);
```

And the `BasicValueFactory` started to complain about different `signedness`.

Reviewers: george.karpenkov, NoQ, ddcc

Reviewed By: ddcc

Subscribers: xazax.hun, szepet, a.sidorin

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

llvm-svn: 337169

6 years ago[MIPS GlobalISel] Select instructions to load and store i32 on stack
Petar Jovanovic [Mon, 16 Jul 2018 13:29:32 +0000 (13:29 +0000)]
[MIPS GlobalISel] Select instructions to load and store i32 on stack

Add code for selection of G_LOAD, G_STORE, G_GEP, G_FRAMEINDEX and
G_CONSTANT. Support loads and stores of i32 values.

Patch by Petar Avramovic.

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

llvm-svn: 337168

6 years ago[analyzer] Fix constraint being dropped when analyzing a program without taint tracki...
Mikhail R. Gadelha [Mon, 16 Jul 2018 13:14:46 +0000 (13:14 +0000)]
[analyzer] Fix constraint being dropped when analyzing a program without taint tracking enabled

Summary:
This patch removes the constraint dropping when taint tracking is disabled.

It also voids the crash reported in D28953 by treating a SymSymExpr with non pointer symbols as an opaque expression.

Updated the regressions and verifying the big projects now; I'll update here when they're done.

Based on the discussion on the mailing list and the patches by @ddcc.

Reviewers: george.karpenkov, NoQ, ddcc, baloghadamsoftware

Reviewed By: george.karpenkov

Subscribers: delcypher, llvm-commits, rnkovacs, xazax.hun, szepet, a.sidorin, ddcc

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

llvm-svn: 337167

6 years ago[X86][AArch64][DAGCombine] Unfold 'check for [no] signed truncation' pattern
Roman Lebedev [Mon, 16 Jul 2018 12:44:10 +0000 (12:44 +0000)]
[X86][AArch64][DAGCombine] Unfold 'check for [no] signed truncation' pattern

Summary:

[[ https://bugs.llvm.org/show_bug.cgi?id=38149 | PR38149 ]]

As discussed in https://reviews.llvm.org/D49179#1158957 and later,
the IR for 'check for [no] signed truncation' pattern can be improved:
https://rise4fun.com/Alive/gBf
^ that pattern will be produced by Implicit Integer Truncation sanitizer,
https://reviews.llvm.org/D48958 https://bugs.llvm.org/show_bug.cgi?id=21530
in signed case, therefore it is probably a good idea to improve it.

But the IR-optimal patter does not lower efficiently, so we want to undo it..

This handles the simple pattern.
There is a second pattern with predicate and constants inverted.

NOTE: we do not check uses here. we always do the transform.

Reviewers: spatel, craig.topper, RKSimon, javed.absar

Reviewed By: spatel

Subscribers: kristof.beyls, llvm-commits

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

llvm-svn: 337166

6 years ago[Sparc] Use the correct encoding for ta 3
Daniel Cederman [Mon, 16 Jul 2018 12:28:26 +0000 (12:28 +0000)]
[Sparc] Use the correct encoding for ta 3

Summary: The old encoding generated a "tn %g1 + 3" instruction instead
of the expected "ta 3".

Reviewers: venkatra, jyknight

Reviewed By: jyknight

Subscribers: fedor.sergeev, jrtc27, llvm-commits

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

llvm-svn: 337165

6 years ago[Sparc] Use the names .rem and .urem instead of __modsi3 and __umodsi3
Daniel Cederman [Mon, 16 Jul 2018 12:22:08 +0000 (12:22 +0000)]
[Sparc] Use the names .rem and .urem instead of __modsi3 and __umodsi3

Summary: These are the names used in libgcc.

Reviewers: venkatra, jyknight, ekedaigle

Reviewed By: jyknight

Subscribers: joerg, fedor.sergeev, jrtc27, llvm-commits

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

llvm-svn: 337164

6 years ago[Sparc] Generate ta 1 for the @llvm.debugtrap intrinsic
Daniel Cederman [Mon, 16 Jul 2018 12:16:53 +0000 (12:16 +0000)]
[Sparc] Generate ta 1 for the @llvm.debugtrap intrinsic

Summary: Software trap number one is the trap used for breakpoints
in the Sparc ABI.

Reviewers: jyknight, venkatra

Reviewed By: jyknight

Subscribers: fedor.sergeev, jrtc27, llvm-commits

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

llvm-svn: 337163

6 years ago[ASTImporter] Import implicit methods of existing class.
Balazs Keri [Mon, 16 Jul 2018 12:16:39 +0000 (12:16 +0000)]
[ASTImporter] Import implicit methods of existing class.

Summary:
When an already existing class is encountered during import,
check if it has implicit methods that are missing in the existing one,
and import these.
The to-be-imported code may use the same class in different way than the
existing (before the import) code. This may result in that there are
implicit methods that are not generated for the existing code.

Reviewers: a.sidorin, a_sidorin

Reviewed By: a_sidorin

Subscribers: a_sidorin, martong, cfe-commits

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

llvm-svn: 337162

6 years agoAvoid losing Hi part when expanding VAARG nodes on big endian machines
Daniel Cederman [Mon, 16 Jul 2018 12:14:17 +0000 (12:14 +0000)]
Avoid losing Hi part when expanding VAARG nodes on big endian machines

Summary:
If the high part of the load is not used the offset to the next element
will not be set correctly.

For example, on Sparc V8, the following code will read val2 from offset 4
instead of 8.

```
int val = __builtin_va_arg(va, long long);
int val2 = __builtin_va_arg(va, int);
```

Reviewers: jyknight

Reviewed By: jyknight

Subscribers: fedor.sergeev, jrtc27, llvm-commits

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

llvm-svn: 337161

6 years ago[x86/SLH] Fix a bug where we would try to post-load harden non-GPRs.
Chandler Carruth [Mon, 16 Jul 2018 11:38:48 +0000 (11:38 +0000)]
[x86/SLH] Fix a bug where we would try to post-load harden non-GPRs.

Found cases that hit the assert I added. This patch factors the validity
checking into a nice helper routine and calls it when deciding to harden
post-load, and asserts it when doing so later.

I've added tests for the various ways of loading a floating point type,
as well as loading all vector permutations. Even though many of these go
to identical instructions, it seems good to somewhat comprehensively
test them.

I'm confident there will be more fixes needed here, I'll try to add
tests each time as I get this predicate adjusted.

llvm-svn: 337160

6 years agoMSan: minor fixes, NFC
Alexander Potapenko [Mon, 16 Jul 2018 10:57:19 +0000 (10:57 +0000)]
MSan: minor fixes, NFC

 - remove an extra space after |ID| declaration
 - drop the unused |FirstInsn| parameter in getShadowOriginPtrUserspace()

llvm-svn: 337159

6 years ago[AccelTable] Provide DWARF5AccelTableStaticData for dsymutil.
Jonas Devlieghere [Mon, 16 Jul 2018 10:52:27 +0000 (10:52 +0000)]
[AccelTable] Provide DWARF5AccelTableStaticData for dsymutil.

For dsymutil we want to store offsets in the accelerator table entries
rather than DIE pointers. In addition, we need a way to communicate
which CU a DIE belongs to. This patch provides support for both of these
issues.

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

llvm-svn: 337158

6 years ago[x86/SLH] Extract another small helper function, add better comments and
Chandler Carruth [Mon, 16 Jul 2018 10:46:16 +0000 (10:46 +0000)]
[x86/SLH] Extract another small helper function, add better comments and
use better terminology. NFC.

llvm-svn: 337157

6 years ago[AMDGPU][Waitcnt] Re-apply fix "comparison of integers of different signs" build...
Mark Searles [Mon, 16 Jul 2018 10:21:36 +0000 (10:21 +0000)]
[AMDGPU][Waitcnt] Re-apply fix "comparison of integers of different signs" build error"

Re-apply "[AMDGPU][Waitcnt] fix "comparison of integers of different signs" build error""
fe0a456510131f268e388c4a18a92f575c0db183 ), which was inadvertantly reverted via
2b2ee080f0164485562593b1b87291a48cea4a9a .

llvm-svn: 337156

6 years ago[MSan] factor userspace-specific declarations into createUserspaceApi(). NFC
Alexander Potapenko [Mon, 16 Jul 2018 10:03:30 +0000 (10:03 +0000)]
[MSan] factor userspace-specific declarations into createUserspaceApi(). NFC

This patch introduces createUserspaceApi() that creates function/global
declarations for symbols used by MSan in the userspace.
This is a step towards the upcoming KMSAN implementation patch.

Reviewed at https://reviews.llvm.org/D49292

llvm-svn: 337155

6 years agorun post-RA hazard recognizer pass late
Mark Searles [Mon, 16 Jul 2018 10:02:41 +0000 (10:02 +0000)]
run post-RA hazard recognizer pass late

Memory legalizer, waitcnt, and shrink  passes can perturb the instructions,
which means that the post-RA hazard recognizer pass should run after them.
Otherwise, one of those passes may invalidate the work done by the hazard
recognizer. Note that this has adverse side-effect that any consecutive
S_NOP 0's, emitted by the hazard recognizer, will not be shrunk into a
single S_NOP <N>. This should be addressed in a follow-on patch.

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

llvm-svn: 337154

6 years agoRevert "[AMDGPU][Waitcnt] fix "comparison of integers of different signs" build error"
Mark Searles [Mon, 16 Jul 2018 10:02:40 +0000 (10:02 +0000)]
Revert "[AMDGPU][Waitcnt] fix "comparison of integers of different signs" build error"

This reverts commit fe0a456510131f268e388c4a18a92f575c0db183.

llvm-svn: 337153

6 years ago[Sema] Reword warning for constant captures that are not required
Benjamin Kramer [Mon, 16 Jul 2018 09:52:02 +0000 (09:52 +0000)]
[Sema] Reword warning for constant captures that are not required

This is one of the darker corners of C++, make it clear that this is
about constants and rephrase it a bit.

Before: lambda capture 'i' is not required to be captured for this use
After:  lambda capture of constant 'i' is not required for this use
llvm-svn: 337152

6 years ago[Analyzer] Mark `SymbolData` parts of iterator position as live in program state...
Adam Balogh [Mon, 16 Jul 2018 09:27:27 +0000 (09:27 +0000)]
[Analyzer] Mark `SymbolData` parts of iterator position as live in program state maps

Marking a symbolic expression as live is non-recursive. In our checkers we
either use conjured symbols or conjured symbols plus/minus integers to
represent abstract position of iterators, so in this latter case we also
must mark the `SymbolData` part of these symbolic expressions as live to
prevent them from getting reaped.

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

llvm-svn: 337151

6 years agoAdd a test with __gcov_flush called before terminating the program.
Marco Castelluccio [Mon, 16 Jul 2018 09:13:46 +0000 (09:13 +0000)]
Add a test with __gcov_flush called before terminating the program.

Test for https://bugs.llvm.org/show_bug.cgi?id=38067.

llvm-svn: 337150

6 years ago[MemorySSAUpdater] Remove deleted trivial Phis from active workset
Alexandros Lamprineas [Mon, 16 Jul 2018 07:51:27 +0000 (07:51 +0000)]
[MemorySSAUpdater] Remove deleted trivial Phis from active workset

Bug fix for PR37808. The regression test is a reduced version of the
original reproducer attached to the bug report. As stated in the report,
the problem was that InsertedPHIs was keeping dangling pointers to
deleted Memory-Phis. MemoryPhis are created eagerly and sometimes get
zapped shortly afterwards. I've used WeakVH instead of an expensive
removal operation from the active workset.

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

llvm-svn: 337149

6 years ago[Sema] Add fixit for unused lambda captures
Alexander Shaposhnikov [Mon, 16 Jul 2018 07:23:47 +0000 (07:23 +0000)]
[Sema] Add fixit for unused lambda captures

This diff adds a fixit to suggest removing unused lambda captures
in the appropriate diagnostic.

Patch by Andrew Comminos!

Test plan: make check-all

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

llvm-svn: 337148

6 years ago[X86] Merge the FR128 and VR128 regclass since they have identical spill and alignmen...
Craig Topper [Mon, 16 Jul 2018 06:56:09 +0000 (06:56 +0000)]
[X86] Merge the FR128 and VR128 regclass since they have identical spill and alignment characteristics.

This unfortunately requires a bunch of bitcasts to be added added to SUBREG_TO_REG, COPY_TO_REGCLASS, and instructions in output patterns. Otherwise tablegen seems to default to picking f128 and then we fail when something tries to get the register class for f128 which isn't always valid.

The test changes are because we were previously mixing fr128 and vr128 due to contrainRegClass finding FR128 first and passes like live range shrinking weren't handling that well.

llvm-svn: 337147

6 years ago[MinGW] Automatically mangle Windows-specific entry points as C
Martin Storsjo [Mon, 16 Jul 2018 05:42:25 +0000 (05:42 +0000)]
[MinGW] Automatically mangle Windows-specific entry points as C

This mangles entry points wmain, WinMain, wWinMain or DllMain as C
functions, to match the ABI for these functions.

We already did the same for these functions in MSVC mode, but we also
should do the same in the Itanium ABI.

This fixes PR38124.

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

llvm-svn: 337146

6 years ago[x86/SLH] Fix an unused variable warning in release builds after
Chandler Carruth [Mon, 16 Jul 2018 04:42:27 +0000 (04:42 +0000)]
[x86/SLH] Fix an unused variable warning in release builds after
r337144.

llvm-svn: 337145

6 years ago[x86/SLH] Teach speculative load hardening to correctly harden the
Chandler Carruth [Mon, 16 Jul 2018 04:17:51 +0000 (04:17 +0000)]
[x86/SLH] Teach speculative load hardening to correctly harden the
indices used by AVX2 and AVX-512 gather instructions.

The index vector is hardened by broadcasting the predicate state
into a vector register and then or-ing. We don't even have to worry
about EFLAGS here.

I've added a test for all of the gather intrinsics to make sure that we
don't miss one. A particularly interesting creation is the gather
prefetch, which needs to be marked as potentially "loading" to get the
correct behavior. It's a memory access in many ways, and is actually
relevant for SLH. Based on discussion with Craig in review, I've moved
it to be `mayLoad` and `mayStore` rather than generic side effects. This
matches how we model other prefetch instructions.

Many thanks to Craig for the review here.

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

llvm-svn: 337144

6 years ago[InstCombine] add more SPFofSPF folding
Chen Zheng [Mon, 16 Jul 2018 02:23:00 +0000 (02:23 +0000)]
[InstCombine] add more SPFofSPF folding

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

llvm-svn: 337143

6 years ago[XRay][compiler-rt] Use `SANITIZER_CXX_ABI_LIBRARY` for XRay unit tests
Dean Michael Berris [Mon, 16 Jul 2018 01:08:56 +0000 (01:08 +0000)]
[XRay][compiler-rt] Use `SANITIZER_CXX_ABI_LIBRARY` for XRay unit tests

Summary:
Fix a TODO in CMake config for XRay tests to use the detected C++ ABI
library in the tests.

Also make the tests depend on the llvm-xray target when built in-tree.

Reviewers: kpw, eizan

Reviewed By: eizan

Subscribers: mgorny, llvm-commits

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

llvm-svn: 337142

6 years ago[InstCombine] fold icmp pred (sub 0, X) C for vector type
Chen Zheng [Mon, 16 Jul 2018 00:51:40 +0000 (00:51 +0000)]
[InstCombine] fold icmp pred (sub 0, X) C for vector type

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

llvm-svn: 337141

6 years agoRecommit r335794 "Add support for generating a call graph profile from Branch Frequen...
Michael J. Spencer [Mon, 16 Jul 2018 00:28:24 +0000 (00:28 +0000)]
Recommit r335794 "Add support for generating a call graph profile from Branch Frequency Info." with fix for removed functions.

llvm-svn: 337140

6 years agoPrune empty directory.
Joerg Sonnenberger [Sun, 15 Jul 2018 23:52:15 +0000 (23:52 +0000)]
Prune empty directory.

llvm-svn: 337139

6 years ago[x86/SLH] Extract one of the bits of logic to its own function. NFC.
Chandler Carruth [Sun, 15 Jul 2018 23:46:36 +0000 (23:46 +0000)]
[x86/SLH] Extract one of the bits of logic to its own function. NFC.

This is just a refactoring to start cleaning up the code here and make
it more readable and approachable.

llvm-svn: 337138

6 years ago[X86] Add custom execution domain fixing for 128/256-bit integer logic operations...
Craig Topper [Sun, 15 Jul 2018 23:32:36 +0000 (23:32 +0000)]
[X86] Add custom execution domain fixing for 128/256-bit integer logic operations with AVX512F, but not AVX512DQ.

AVX512F only has integer domain logic instructions. AVX512DQ added FP domain logic instructions.

Execution domain fixing runs before EVEX->VEX. So if we have AVX512F and not AVX512DQ we fail to do execution domain switching of the logic operations. This leads to mismatches in execution domain and more test differences.

This patch adds custom domain fixing that switches EVEX integer logic operations to VEX fp logic operations if XMM16-31 are not used.

llvm-svn: 337137

6 years ago[X86] Add load patterns for cases where we select X86Movss/X86Movsd to blend instruct...
Craig Topper [Sun, 15 Jul 2018 21:49:01 +0000 (21:49 +0000)]
[X86] Add load patterns for cases where we select X86Movss/X86Movsd to blend instructions.

This allows us to fold the load during isel without waiting for the peephole pass to do it.

llvm-svn: 337136

6 years ago[X86] Use 128-bit blends instead vmovss/vmovsd for 512-bit vzmovl patterns to match...
Craig Topper [Sun, 15 Jul 2018 18:51:08 +0000 (18:51 +0000)]
[X86] Use 128-bit blends instead vmovss/vmovsd for 512-bit vzmovl patterns to match AVX.

llvm-svn: 337135

6 years ago[X86] Use 128-bit ops for 256-bit vzmovl patterns.
Craig Topper [Sun, 15 Jul 2018 18:51:07 +0000 (18:51 +0000)]
[X86] Use 128-bit ops for 256-bit vzmovl patterns.

128-bit ops implicitly zero the upper bits. This should address the comment about domain crossing for the integer version without AVX2 since we can use a 128-bit VBLENDW without AVX2.

The only bad thing I see here is that we failed to reuse an vxorps in some of the tests, but I think that's already known issue.

llvm-svn: 337134

6 years ago[cmake] Fix libomptarget/test/CMakeLists.txt
Azharuddin Mohammed [Sun, 15 Jul 2018 17:29:43 +0000 (17:29 +0000)]
[cmake] Fix libomptarget/test/CMakeLists.txt

Summary:
Should be variable name instead of variable reference. If the variable is
somehow unset, it messes up the if condition expression and causes a CMake
error.

Reviewers: jlpeyton, AndreyChurbanov, Hahnfeld

Reviewed By: Hahnfeld

Subscribers: mgorny, llvm-commits, openmp-commits

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

llvm-svn: 337133

6 years ago[DAGCombiner] fix typo in comment; NFC
Sanjay Patel [Sun, 15 Jul 2018 17:09:35 +0000 (17:09 +0000)]
[DAGCombiner] fix typo in comment; NFC

llvm-svn: 337132

6 years ago[InstCombine] Corrections in comments for division transformation (NFC)
Sanjay Patel [Sun, 15 Jul 2018 17:06:59 +0000 (17:06 +0000)]
[InstCombine] Corrections in comments for division transformation (NFC)

The actual code seems to be correct, but the comments were misleading.

Patch by Aaron Puchert!

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

llvm-svn: 337131

6 years ago[DAGCombiner] extend(ifpositive(X)) -> shift-right (not X)
Sanjay Patel [Sun, 15 Jul 2018 16:27:07 +0000 (16:27 +0000)]
[DAGCombiner] extend(ifpositive(X)) -> shift-right (not X)

This is almost the same as an existing IR canonicalization in instcombine,
so I'm assuming this is a good early generic DAG combine too.

The motivation comes from reduced bit-hacking for select-of-constants in IR
after rL331486. We want to restore that functionality in the DAG as noted in
the commit comments for that change and the llvm-dev discussion here:
http://lists.llvm.org/pipermail/llvm-dev/2018-July/124433.html

The PPC and AArch tests show that those targets are already doing something
similar. x86 will be neutral in the minimal case and generally better when
this pattern is extended with other ops as shown in the signbit-shift.ll tests.

Note the asymmetry: we don't include the (extend (ifneg X)) transform because
it already exists in SimplifySelectCC(), and that is verified in the later
unchanged tests in the signbit-shift.ll files. Without the 'not' op, the
general transform to use a shift is always a win because that's a single
instruction.

Alive proofs:
https://rise4fun.com/Alive/ysli

Name: if pos, get -1
  %c = icmp sgt i16 %x, -1
  %r = sext i1 %c to i16
  =>
  %n = xor i16 %x, -1
  %r = ashr i16 %n, 15

Name: if pos, get 1
  %c = icmp sgt i16 %x, -1
  %r = zext i1 %c to i16
  =>
  %n = xor i16 %x, -1
  %r = lshr i16 %n, 15

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

llvm-svn: 337130

6 years ago[InstSimplify] add fixme comment for PR37776; NFC
Sanjay Patel [Sun, 15 Jul 2018 16:13:58 +0000 (16:13 +0000)]
[InstSimplify] add fixme comment for PR37776; NFC

llvm-svn: 337129

6 years ago[AMDGPU] adjusted test checks because minnum with NaN gets simplified
Sanjay Patel [Sun, 15 Jul 2018 15:14:40 +0000 (15:14 +0000)]
[AMDGPU] adjusted test checks because minnum with NaN gets simplified

This was improved with rL337127, but I missed the failure in this test.
I'm not sure what the expected result will be, so I've generalized it
and added a FIXME comment.

llvm-svn: 337128

6 years ago[InstSimplify] fold minnum/maxnum with NaN arg
Sanjay Patel [Sun, 15 Jul 2018 14:52:16 +0000 (14:52 +0000)]
[InstSimplify] fold minnum/maxnum with NaN arg

This fold is repeated/misplaced in instcombine, but I'm
not sure if it's safe to remove that yet because some
other folds appear to be asserting that the transform
has occurred within instcombine itself.

This isn't the best fix for PR37776, but it probably
hides the bug with the given code example:
https://bugs.llvm.org/show_bug.cgi?id=37776

We have another test to demonstrate the more general bug.

llvm-svn: 337127

6 years ago[InstSimplify] add tests for minnum/maxnum; NFC
Sanjay Patel [Sun, 15 Jul 2018 14:46:48 +0000 (14:46 +0000)]
[InstSimplify] add tests for minnum/maxnum; NFC

This isn't the best fix for PR37776, but it probably
hides the bug with the given code example:
https://bugs.llvm.org/show_bug.cgi?id=37776

We have another test to demonstrate the more general
bug.

llvm-svn: 337126

6 years agoRun thread safety tests with both lock and capability attributes; NFC to the analysis...
Aaron Ballman [Sun, 15 Jul 2018 12:08:52 +0000 (12:08 +0000)]
Run thread safety tests with both lock and capability attributes; NFC to the analysis behavior.

Patch thanks to Aaron Puchert.

llvm-svn: 337125

6 years ago[llvm-mca] Regenerate X86 specific tests. NFC
Andrea Di Biagio [Sun, 15 Jul 2018 11:43:11 +0000 (11:43 +0000)]
[llvm-mca] Regenerate X86 specific tests. NFC

Not all tests were correctly updated by the update script after r336797.

llvm-svn: 337124

6 years ago[llvm-mca][BtVer2] teach how to identify false dependencies on partially written
Andrea Di Biagio [Sun, 15 Jul 2018 11:01:38 +0000 (11:01 +0000)]
[llvm-mca][BtVer2] teach how to identify false dependencies on partially written
registers.

The goal of this patch is to improve the throughput analysis in llvm-mca for the
case where instructions perform partial register writes.

On x86, partial register writes are quite difficult to model, mainly because
different processors tend to implement different register merging schemes in
hardware.

When the code contains partial register writes, the IPC (instructions per
cycles) estimated by llvm-mca tends to diverge quite significantly from the
observed IPC (using perf).

Modern AMD processors (at least, from Bulldozer onwards) don't rename partial
registers. Quoting Agner Fog's microarchitecture.pdf:
" The processor always keeps the different parts of an integer register together.
For example, AL and AH are not treated as independent by the out-of-order
execution mechanism. An instruction that writes to part of a register will
therefore have a false dependence on any previous write to the same register or
any part of it."

This patch is a first important step towards improving the analysis of partial
register updates. It changes the semantic of RegisterFile descriptors in
tablegen, and teaches llvm-mca how to identify false dependences in the presence
of partial register writes (for more details: see the new code comments in
include/Target/TargetSchedule.h - class RegisterFile).

This patch doesn't address the case where a write to a part of a register is
followed by a read from the whole register.  On Intel chips, high8 registers
(AH/BH/CH/DH)) can be stored in separate physical registers. However, a later
(dirty) read of the full register (example: AX/EAX) triggers a merge uOp, which
adds extra latency (and potentially affects the pipe usage).
This is a very interesting article on the subject with a very informative answer
from Peter Cordes:
https://stackoverflow.com/questions/45660139/how-exactly-do-partial-registers-on-haswell-skylake-perform-writing-al-seems-to

In future, the definition of RegisterFile can be extended with extra information
that may be used to identify delays caused by merge opcodes triggered by a dirty
read of a partial write.

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

llvm-svn: 337123

6 years ago[AVR] Document some public functions
Dylan McKay [Sun, 15 Jul 2018 07:24:27 +0000 (07:24 +0000)]
[AVR] Document some public functions

llvm-svn: 337122

6 years ago[TableGen] std::move vectors into TreePatternNode.
Craig Topper [Sun, 15 Jul 2018 06:52:49 +0000 (06:52 +0000)]
[TableGen] std::move vectors into TreePatternNode.

llvm-svn: 337121

6 years ago[TableGen] Remove what seems to be an unnecessary std::map copy.
Craig Topper [Sun, 15 Jul 2018 06:52:48 +0000 (06:52 +0000)]
[TableGen] Remove what seems to be an unnecessary std::map copy.

The comment says the copy was made so it could be destroyed in the following loop, but the original map wasn't used after the loop.

llvm-svn: 337120

6 years ago[X86] Add some optsize patterns for 256-bit X86vzmovl.
Craig Topper [Sun, 15 Jul 2018 06:03:19 +0000 (06:03 +0000)]
[X86] Add some optsize patterns for 256-bit X86vzmovl.

These patterns use VMOVSS/SD. Without optsize we use BLENDI instead.

llvm-svn: 337119

6 years ago[CMake] Use correct variable as header install prefix
Petr Hosek [Sun, 15 Jul 2018 04:09:35 +0000 (04:09 +0000)]
[CMake] Use correct variable as header install prefix

This variable is already set in CMakeLists.txt but it wasn't used
which means that the headers get installed into a wrong location
when the per target runtime directory option is being used.

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

llvm-svn: 337118

6 years ago[CMake] Use libc++ and compiler-rt for sanitizers
Petr Hosek [Sun, 15 Jul 2018 03:11:43 +0000 (03:11 +0000)]
[CMake] Use libc++ and compiler-rt for sanitizers

When building runtimes for Linux as part of Fuchsia toolchain, use
libc++ and compiler-rt for sanitizers.

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

llvm-svn: 337117

6 years ago[CMake] Change the flag to use compiler-rt builtins to boolean
Petr Hosek [Sun, 15 Jul 2018 03:05:20 +0000 (03:05 +0000)]
[CMake] Change the flag to use compiler-rt builtins to boolean

This changes the name and the type to what it was prior to r333037
which matches the name of the flag used in other runtimes: libc++,
libc++abi and libunwind. We don't need the type to be a string since
there's only binary choice between libgcc and compiler-rt unlike in
the case of C++ library where there're multiple options.

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

llvm-svn: 337116

6 years ago[CMake] Pass CMAKE_INSTALL_DO_STRIP to external projects
Petr Hosek [Sun, 15 Jul 2018 02:12:25 +0000 (02:12 +0000)]
[CMake] Pass CMAKE_INSTALL_DO_STRIP to external projects

This is necessary to make install-<target>-stripped work for
external projects such as runtimes.

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

llvm-svn: 337115

6 years ago[TableGen] Add some std::move to the PatternToMatch constructor.
Craig Topper [Sun, 15 Jul 2018 01:10:28 +0000 (01:10 +0000)]
[TableGen] Add some std::move to the PatternToMatch constructor.

The are two vectors passed by value to the constructor. We should be able to move them into the object.

llvm-svn: 337114

6 years ago[llvm-mca] Turn InstructionTables into a Stage.
Matt Davis [Sat, 14 Jul 2018 23:52:50 +0000 (23:52 +0000)]
[llvm-mca] Turn InstructionTables into a Stage.

Summary:
This patch converts the InstructionTables class into a subclass of mca::Stage.  This change allows us to use the Stage's inherited Listeners for event notifications.  This also allows us to create a simple pipeline for viewing the InstructionTables report.

I have been working on a follow on patch that should cleanup addView in InstructionTables.  Right now, addView adds the view to both the Listener list and Views list.  The follow-on patch addresses the fact that we don't really need two lists in this case.  That change is not specific to just InstructionTables, so it will be a separate patch.

Reviewers: andreadb, courbet, RKSimon

Reviewed By: andreadb

Subscribers: tschuett, gbedwell, llvm-commits

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

llvm-svn: 337113

6 years ago[NFC][InstCombine] foldICmpWithLowBitMaskedVal(): update comments.
Roman Lebedev [Sat, 14 Jul 2018 20:08:52 +0000 (20:08 +0000)]
[NFC][InstCombine] foldICmpWithLowBitMaskedVal(): update comments.

All predicates are handled.
There does not seem to be any other possible folds here.
There are some more folds possible with inverted mask though.

llvm-svn: 337112

6 years ago[InstCombine] Fold x & (-1 >> y) s< x to x s> (-1 >> y)
Roman Lebedev [Sat, 14 Jul 2018 20:08:47 +0000 (20:08 +0000)]
[InstCombine] Fold  x & (-1 >> y) s< x  to  x s> (-1 >> y)

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/I3O

This pattern is not commutative!
We must make sure not to fold the commuted version!

llvm-svn: 337111

6 years ago[NFC][InstCombine] Tests for x & (-1 >> y) s< x to x s> (-1 >> y) fold.
Roman Lebedev [Sat, 14 Jul 2018 20:08:42 +0000 (20:08 +0000)]
[NFC][InstCombine] Tests for  x & (-1 >> y) s< x  to  x s> (-1 >> y)  fold.

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/I3O

This pattern is not commutative!
We must make sure not to fold the commuted version!

llvm-svn: 337110

6 years ago[InstCombine] Fold x & (-1 >> y) s>= x to x s<= (-1 >> y)
Roman Lebedev [Sat, 14 Jul 2018 20:08:37 +0000 (20:08 +0000)]
[InstCombine] Fold  x & (-1 >> y) s>= x  to  x s<= (-1 >> y)

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/I3O

This pattern is not commutative!
We must make sure not to fold the commuted version!

llvm-svn: 337109

6 years ago[NFC][InstCombine] Tests for x & (-1 >> y) s>= x to x s<= (-1 >> y) fold.
Roman Lebedev [Sat, 14 Jul 2018 20:08:31 +0000 (20:08 +0000)]
[NFC][InstCombine] Tests for  x & (-1 >> y) s>= x  to  x s<= (-1 >> y)  fold.

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/I3O

This pattern is not commutative!
We must make sure not to fold the commuted version!

llvm-svn: 337108

6 years ago[InstCombine] Fold x s<= x & (-1 >> y) to x s<= (-1 >> y)
Roman Lebedev [Sat, 14 Jul 2018 20:08:26 +0000 (20:08 +0000)]
[InstCombine] Fold  x s<= x & (-1 >> y)  to  x s<= (-1 >> y)

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/I3O

This pattern is not commutative!
We must make sure not to fold the commuted version!

llvm-svn: 337107

6 years ago[NFC][InstCombine] Tests for x s<= x & (-1 >> y) to x s<= (-1 >> y) fold.
Roman Lebedev [Sat, 14 Jul 2018 20:08:21 +0000 (20:08 +0000)]
[NFC][InstCombine] Tests for  x s<= x & (-1 >> y)  to  x s<= (-1 >> y)  fold.

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/I3O

This pattern is not commutative!
We must make sure not to fold the commuted version!

llvm-svn: 337106

6 years ago[InstCombine] Fold x s> x & (-1 >> y) to x s> (-1 >> y)
Roman Lebedev [Sat, 14 Jul 2018 20:08:16 +0000 (20:08 +0000)]
[InstCombine] Fold  x s> x & (-1 >> y)  to  x s> (-1 >> y)

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/I3O

This pattern is not commutative!
We must make sure not to fold the commuted version!

llvm-svn: 337105

6 years ago[NFC][InstCombine] Tests for x s> x & (-1 >> y) to x s> (-1 >> y) fold.
Roman Lebedev [Sat, 14 Jul 2018 20:08:09 +0000 (20:08 +0000)]
[NFC][InstCombine] Tests for  x s> x & (-1 >> y)  to  x s> (-1 >> y)  fold.

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/I3O

This pattern is not commutative!
We must make sure not to fold the commuted version!

llvm-svn: 337104

6 years agoAdd caching when looking up coroutine_traits
Brian Gesiak [Sat, 14 Jul 2018 18:21:44 +0000 (18:21 +0000)]
Add caching when looking up coroutine_traits

Summary:
Currently clang looks up the coroutine_traits ClassTemplateDecl
everytime it looks up the promise type. This is unnecessary
as coroutine_traits doesn't change between promise type lookups.

This diff caches the coroutine_traits lookup.

Patch by Tanoy Sinha!

Test Plan:
I added log statements in the new lookupCoroutineTraits function
to ensure that LookupQualifiedName was only called once even
when multiple coroutines existed in the source file.

Reviewers: modocache, GorNishanov

Reviewed By: modocache

Subscribers: cfe-commits

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

llvm-svn: 337103

6 years ago[InstCombine] Fold x u<= x & C to x u<= C
Roman Lebedev [Sat, 14 Jul 2018 16:44:54 +0000 (16:44 +0000)]
[InstCombine] Fold  x u<= x & C  to  x u<= C

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/Fqp

This pattern is not commutative. But InstSimplify will
already have taken care of the 'commutative' variant.

llvm-svn: 337102

6 years ago[NFC][InstCombine] Tests for x u<= x & C to x u<= C fold.
Roman Lebedev [Sat, 14 Jul 2018 16:44:48 +0000 (16:44 +0000)]
[NFC][InstCombine] Tests for  x u<= x & C  to  x u<= C  fold.

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/Fqp

This pattern is not commutative. But InstSimplify will
already have taken care of the 'commutative' variant.

llvm-svn: 337101

6 years ago[InstCombine] Fold x u> x & C to x u> C
Roman Lebedev [Sat, 14 Jul 2018 16:44:43 +0000 (16:44 +0000)]
[InstCombine] Fold  x u> x & C  to  x u> C

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/JvS

This pattern is not commutative. But InstSimplify will
already have taken care of the 'commutative' variant.

llvm-svn: 337100

6 years ago[NFC][InstCombine] Tests for x u> x & C to x u> C fold.
Roman Lebedev [Sat, 14 Jul 2018 16:44:37 +0000 (16:44 +0000)]
[NFC][InstCombine] Tests for  x u> x & C  to  x u> C  fold.

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/JvS

This pattern is not commutative. But InstSimplify will
already have taken care of the 'commutative' variant.

llvm-svn: 337099

6 years ago[InstCombine] Fold x & (-1 >> y) u< x to x u> (-1 >> y)
Roman Lebedev [Sat, 14 Jul 2018 12:20:16 +0000 (12:20 +0000)]
[InstCombine] Fold  x & (-1 >> y) u< x  to  x u> (-1 >> y)

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/ocb

This pattern is not commutative. But InstSimplify will
already have taken care of the 'commutative' variant.

llvm-svn: 337098

6 years ago[NFC][InstCombine] Tests for x & (-1 >> y) u< x to x u> (-1 >> y)
Roman Lebedev [Sat, 14 Jul 2018 12:20:11 +0000 (12:20 +0000)]
[NFC][InstCombine] Tests for  x & (-1 >> y) u< x  to  x u> (-1 >> y)

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/ocb

This pattern is not commutative. But InstSimplify will
already have taken care of the 'commutative' variant.

llvm-svn: 337097

6 years ago[InstCombine] Fold x & (-1 >> y) u>= x to x u<= (-1 >> y)
Roman Lebedev [Sat, 14 Jul 2018 12:20:06 +0000 (12:20 +0000)]
[InstCombine] Fold  x & (-1 >> y) u>= x  to  x u<= (-1 >> y)

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/azI

This pattern is not commutative. But InstSimplify will
already have taken care of the 'commutative' variant.

llvm-svn: 337096

6 years ago[NFC][InstCombine] Tests for x & (-1 >> y) u>= x to x u<= (-1 >> y)
Roman Lebedev [Sat, 14 Jul 2018 12:20:01 +0000 (12:20 +0000)]
[NFC][InstCombine] Tests for  x & (-1 >> y) u>= x  to  x u<= (-1 >> y)

https://bugs.llvm.org/show_bug.cgi?id=38123
https://rise4fun.com/Alive/azI

This pattern is not commutative. But InstSimplify will
already have taken care of the 'commutative' variant.

llvm-svn: 337095

6 years ago[NFC][InstCombine] Add forgotten variable tests for foldICmpWithLowBitMaskedVal()
Roman Lebedev [Sat, 14 Jul 2018 12:19:56 +0000 (12:19 +0000)]
[NFC][InstCombine] Add forgotten variable tests for foldICmpWithLowBitMaskedVal()

llvm-svn: 337094

6 years agoattempt to get test/COFF/driver.test passing on sanitizer-x86_64-linux-fast; cf r337092
Nico Weber [Sat, 14 Jul 2018 11:47:23 +0000 (11:47 +0000)]
attempt to get test/COFF/driver.test passing on sanitizer-x86_64-linux-fast; cf r337092

llvm-svn: 337093

6 years agoAttempt to get test/tools/llvm-lib/help.test passing on sanitizer-x86_64-linux-fast
Nico Weber [Sat, 14 Jul 2018 11:33:33 +0000 (11:33 +0000)]
Attempt to get test/tools/llvm-lib/help.test passing on sanitizer-x86_64-linux-fast

The bot has a /b directory, so /? matches against that and gets expanded to it.

(Thanks to Hans's r187366, which solved the same problem for clang-cl a while
ago and which saved me much head scratching.)

llvm-svn: 337092

6 years ago[clang-tidy] Force exceptions to be enabled in test
Benjamin Kramer [Sat, 14 Jul 2018 10:48:06 +0000 (10:48 +0000)]
[clang-tidy] Force exceptions to be enabled in test

For targets that have them off by default.

llvm-svn: 337091

6 years ago[MachineOutliner] Check the last instruction from the sequence when updating liveness
Francis Visoiu Mistrih [Sat, 14 Jul 2018 09:40:01 +0000 (09:40 +0000)]
[MachineOutliner] Check the last instruction from the sequence when updating liveness

The MachineOutliner was doing an std::for_each from the call (inserted
before the outlined sequence) to the iterator at the end of the
sequence.

std::for_each needs the iterator past the end, so the last instruction
was not taken into account when propagating the liveness information.

This fixes the machine verifier issue in machine-outliner-disubprogram.ll.

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

llvm-svn: 337090

6 years ago[x86/SLH] Fix an issue where we wouldn't harden any loads if we found
Chandler Carruth [Sat, 14 Jul 2018 09:32:37 +0000 (09:32 +0000)]
[x86/SLH] Fix an issue where we wouldn't harden any loads if we found
no conditions.

This is only valid to do if we're hardening calls and rets with LFENCE
which results in an LFENCE guarding the entire entry block for us.

llvm-svn: 337089

6 years ago[X86] Fix a subtle bug in the custom execution domain fixing for blends.
Craig Topper [Sat, 14 Jul 2018 06:30:30 +0000 (06:30 +0000)]
[X86] Fix a subtle bug in the custom execution domain fixing for blends.

The code tried to find the immediate by using getNumOperands() on the MachineInstr, but there might be implicit-defs after the immediate that get counted.

Instead use getNumOperands() from the instruction description which will only count the operands that are defined in the td file.

llvm-svn: 337088

6 years agoMark __equal_to 's operations as constexpr.
Marshall Clow [Sat, 14 Jul 2018 04:15:19 +0000 (04:15 +0000)]
Mark __equal_to 's operations as constexpr.

llvm-svn: 337087

6 years agolld-link: Add /lib to Options.td so that it appears in lld-link's help output.
Nico Weber [Sat, 14 Jul 2018 04:07:51 +0000 (04:07 +0000)]
lld-link: Add /lib to Options.td so that it appears in lld-link's help output.

https://reviews.llvm.org/D49319

llvm-svn: 337086

6 years agoMark one more __wrap_iter operation as constexpr.
Marshall Clow [Sat, 14 Jul 2018 03:06:11 +0000 (03:06 +0000)]
Mark one more __wrap_iter operation as constexpr.

llvm-svn: 337085

6 years agoGive llvm-lib rudimentary help output.
Nico Weber [Sat, 14 Jul 2018 02:29:44 +0000 (02:29 +0000)]
Give llvm-lib rudimentary help output.

https://reviews.llvm.org/D49318

llvm-svn: 337084