Commit Graph

168983 Commits

Author SHA1 Message Date
Reid Kleckner dc281ceff8 [Windows] Convert from UTF-8 to UTF-16 when writing to a Windows console
Summary:
Calling WriteConsoleW is the most reliable way to print Unicode
characters to a Windows console.

If binary data gets printed to the console, attempting to re-encode it
shouldn't be a problem, since garbage in can produce garbage out.

This breaks printing strings in the local codepage, which WriteConsoleA
knows how to handle. For example, this can happen when user source code
is encoded with the local codepage, and an LLVM tool quotes it while
emitting a caret diagnostic. This is unfortunate, but well-behaved tools
should validate that their input is UTF-8 and escape non-UTF-8
characters before sending them to raw_fd_ostream. Clang already does
this, but not all LLVM tools do this.

One drawback to the current implementation is printing a string a byte
at a time doesn't work. Consider this LLVM code:
  for (char C : MyStr) outs() << C;

Because outs() is now unbuffered, we wil try to convert each byte to
UTF-16, which will fail. However, this already didn't work, so I think
we may as well update callers that do that as we find them to print
complete portions of strings. You can see a real example of this in my
patch to SourceMgr.cpp

Fixes PR38669 and PR36267.

Reviewers: zturner, efriedma

Subscribers: llvm-commits, hiraditya

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341433 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-05 00:08:56 +00:00
Sanjay Patel cb00c85d1c [InstCombine] fix xor-or-xor fold to check uses and handle commutes
I'm probably missing some way to use m_Deferred to remove the code
duplication, but that can be a follow-up.

The improvement in demand_shrink_nsw.ll is an example of missing
the fold because the pattern matching was deficient. I didn't try
to follow the bits in that test, but Alive says it's correct:
https://rise4fun.com/Alive/ugc


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341426 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 23:22:13 +00:00
Sanjay Patel 59d80eec3d [InstCombine] update tests checks; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341424 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 23:08:23 +00:00
Wouter van Oortmerssen 013c07f165 [WebAssembly] Fixed stale assert message in WebAssemblyMCInstLower
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341423 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 22:59:05 +00:00
Steven Wu 3e090e5aa5 [ThinLTO] Fix memory corruption in ThinLTOCodeGenerator when CodeGenOnly was specified
Summary:
Issue occurs when doing ThinLTO with CodeGenOnly flag.
TMBuilder.TheTriple is assigned to by multiple threads in an unsafe way resulting in double-free of std::string memory.

Pseudocode:
if (CodeGenOnly) {
  // Perform only parallel codegen and return.
  ThreadPool Pool;
  int count = 0;
  for (auto &ModuleBuffer : Modules) {
    Pool.async([&](int count) {
    ...
      /// Now call OutputBuffer = codegen(*TheModule);
      /// Which turns into initTMBuilder(moduleTMBuilder, Triple(TheModule.getTargetTriple()));
      /// Which turns into

      TMBuilder.TheTriple = std::move(TheTriple);   // std::string = "....."
      /// So, basically std::string assignment to same string on multiple threads = memory corruption

  }

  return;
}

Patch by Alex Borcan

Reviewers: llvm-commits, steven_wu

Reviewed By: steven_wu

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

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341422 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 22:54:17 +00:00
Jordan Rupprecht e15daa3dfb [llvm-strip] Allow copying relocation sections without symbol tables.
Summary:
Fixes the error "Link field value 0 in section .rela.plt is invalid" when copying/stripping certain binaries. Minimal repro:

```
$ cat /tmp/a.c
int main() { return 0; }
$ clang -static /tmp/a.c -o /tmp/a
$ llvm-strip /tmp/a -o /tmp/b
llvm-strip: error: Link field value 0 in section .rela.plt is invalid.
```

Reviewers: jakehehrlich, alexshap

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341419 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 22:28:49 +00:00
Zhaoshi Zheng e4422b6a2a Revert "Revert r341269: [Constant Hoisting] Hoisting Constant GEP Expressions"
Reland r341269. Use std::stable_sort when sorting constant condidates.

Reverting commit, r341365:

  Revert r341269: [Constant Hoisting] Hoisting Constant GEP Expressions

  One of the tests is failing 50% of the time when expensive checks are
  enabled. Not sure how deep the problem is so just reverting while the
  author can investigate so that the bots stop repeatedly failing and
  blaming things incorrectly. Will respond with details on the original
  commit.

Original commit, r341269:

  [Constant Hoisting] Hoisting Constant GEP Expressions

  Leverage existing logic in constant hoisting pass to transform constant GEP
  expressions sharing the same base global variable. Multi-dimensional GEPs are
  rewritten into single-dimensional GEPs.

  https://reviews.llvm.org/D51396

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341417 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 22:17:03 +00:00
Anna Thomas a989ec75d4 [LV] First order recurrence phis should not be treated as uniform
This is fix for PR38786.
First order recurrence phis were incorrectly treated as uniform,
which caused them to be vectorized as uniform instructions.

Patch by Ayal Zaks and Orivej Desh!

Reviewed by: Anna

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341416 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 22:12:23 +00:00
Sanjay Patel df71640548 [InstCombine] add tests for xor-or-xor fold; NFC
There are 2 bugs shown here that were untested before:
1. We fail to perform the fold in 1/2 the possible commuted variants.
2. When the fold is done, it disregards extra uses.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341415 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 22:10:23 +00:00
Thomas Lively e49253c0c1 [WebAssembly][NFC] Add colon to label in test
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341414 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 21:51:32 +00:00
Scott Linder 6da9a35885 [AMDGPU] Legalize VGPR Rsrc operands for MUBUF instructions
Emit a waterfall loop in the general case for a potentially-divergent Rsrc
operand. When practical, avoid this by using Addr64 instructions.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341413 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 21:50:47 +00:00
Hiroshi Yamauchi 66ded417a2 Fix a memory leak after rL341386.
Reviewers: davidxl

Reviewed By: davidxl

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341412 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 21:28:22 +00:00
Thomas Lively c5f4b48f16 [WebAssembly][NFC] Fix formatting and tests
Summary: Small fixes

Reviewers: aheejin, dschuff

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

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341411 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 21:26:17 +00:00
Sanjay Patel 04349cea71 [InstCombine] make ((X & C) ^ C) form consistent for vectors
It would be better to create a 'not' here, but that's not possible yet.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341410 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 21:17:14 +00:00
Krzysztof Parzyszek 09f9778d84 [Hexagon] Don't packetize new-value stores with any other stores
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341409 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 21:07:27 +00:00
Jessica Paquette 2618a117e1 [NFC] Improve clarity in emitInstrCountChangedRemark
Add a "CouldOnlyImpactOneFunction" bool that's true when we pass in a function.

Just cleaning up a little bit, since I'm going to add in the per-function
remarks soon from D51467.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341407 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 21:03:43 +00:00
JF Bastien 354803c92f NFC: expand memset inline arm64 coverage
I'm looking at some codegen optimization in this area and want to make sure I understand the current codegen and don't regress it. This patch simply expands the two existing tests to capture more of the current code generation when it comes to heap-based and stack-based small memset on arm64. The tested code is already pretty good, notably when it comes to using STP, FP stores, FP immediate generation, and folding one of the stores into a stack spill when possible. The uses of STUR could be improved, and some more pairing could occur. Straying from bzero patterns currently yield suboptimal code, and I expect a variety of small changes could make things way better.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341406 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 21:02:00 +00:00
Sanjay Patel 85c2e694ef [InstCombine] simplify code for xor folds; NFCI
This is just a cleanup step. The TODO comments show
what is wrong with the 'and' version of the fold.
Fixing this should be part of recommitting:
rL300977


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341405 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 21:00:13 +00:00
Martin Storsjo 5d04fc0ef3 [MinGW] Move code for indicating "potentially not DSO local" into shouldAssumeDSOLocal. NFC.
On Windows, if shouldAssumeDSOLocal returns false, it's either a
dllimport reference, or a reference that we should treat as non-local
and create a stub for.

Clean up AArch64Subtarget::ClassifyGlobalReference a little while
touching the flag handling relating to dllimport.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341402 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 20:56:28 +00:00
Martin Storsjo 42d7052fc2 [MinGW] [AArch64] Add stubs for potential automatic dllimported variables
The runtime pseudo relocations can't handle the AArch64 format PC
relative addressing in adrp+add/ldr pairs. By using stubs, the potentially
dllimported addresses can be touched up by the runtime pseudo relocation
framework.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341401 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 20:56:21 +00:00
Reid Kleckner 801cfc82da Fix unused variable warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341400 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 20:34:47 +00:00
Fedor Sergeev ff4ee4df90 [SimpleLoopUnswitch] remove a chain of dead blocks at once
Recent change to deleteDeadBlocksFromLoop was not enough to
fix all the problems related to dead blocks after nontrivial
unswitching of switches.

We need to delete all the dead blocks that were created during
unswitching, otherwise we will keep having problems with phi's
or dead blocks.

This change removes all the dead blocks that are reachable from the loop,
not trying to track whether these blocks are newly created by unswitching
or not. While not completely correct, we are unlikely to get loose but
reachable dead blocks that do not belong to our loop nest.

It does fix all the failures currently known, in particular PR38778.

Reviewed By: asbirlea
Differential Revision: https://reviews.llvm.org/D51519

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341398 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 20:19:41 +00:00
Jordan Rupprecht 46d216b8ef [Codegen] Fix test added in rL341380: AArch64SelectionDAGTest needs to link against Analysis lib.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341397 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 20:19:17 +00:00
David Bolvansky 810335c3b5 Set console mode when -fansi-escape-codes is enabled
Summary:
Windows console now supports supports ANSI escape codes, but we need to enable it using SetConsoleMode with ENABLE_VIRTUAL_TERMINAL_PROCESSING flag.

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


Tested on Windows 10, screenshot:
https://i.imgur.com/bqYq0Uy.png

Reviewers: zturner, chandlerc

Reviewed By: zturner

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341396 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 19:23:05 +00:00
Petr Hosek e2888fd876 [CMake] Provide a custom target to install LLVM libraries
This simplifies installing all LLVM libraries when doing component
build; now you can include llvm-libraries in distribution components.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341395 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 19:10:37 +00:00
Sanjay Patel badf51784f [InstCombine] improve xor+and/or tests
The tests attempted to check for commuted variants
of these folds, but complexity-based canonicalization
meant we had no coverage for at least 1/2 of the cases.

Also, the folds correctly check hasOneUse(), but there
was no coverage for that.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341394 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 19:06:46 +00:00
Matt Arsenault 49cbe528e3 AMDGPU: Fix DAG divergence not reporting flat loads
Match behavior in DAG of r340343

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341393 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 18:58:19 +00:00
Matt Arsenault 87877c5043 DAG: Factor out helper function for odd vector sizes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341392 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 18:47:43 +00:00
Hiroshi Yamauchi 012ff47f2f Fix build failures after rL341386.
Reviewers: davidxl

Reviewed By: davidxl

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341391 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 18:10:54 +00:00
Dan Gohman b9587f4923 [WebAssembly] Fix operand rewriting in inline asm lowering.
Use MachineOperand::ChangeToImmediate rather than reassigning
MachineOperands to new values created from MachineOperand::CreateImm,
so that their parent pointers are preserved.

This fixes "Instruction has operand with wrong parent set" errors
reported by the MachineVerifier.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341389 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 17:46:12 +00:00
Hiroshi Yamauchi c38c85037d [PGO] Control Height Reduction
Summary:
Control height reduction merges conditional blocks of code and reduces the
number of conditional branches in the hot path based on profiles.

if (hot_cond1) { // Likely true.
  do_stg_hot1();
}
if (hot_cond2) { // Likely true.
  do_stg_hot2();
}

->

if (hot_cond1 && hot_cond2) { // Hot path.
  do_stg_hot1();
  do_stg_hot2();
} else { // Cold path.
  if (hot_cond1) {
    do_stg_hot1();
  }
  if (hot_cond2) {
    do_stg_hot2();
  }
}

This speeds up some internal benchmarks up to ~30%.

Reviewers: davidxl

Reviewed By: davidxl

Subscribers: xbolva00, dmgreen, mehdi_amini, llvm-commits, mgorny

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341386 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 17:19:13 +00:00
Scott Linder c7d9aac718 [CodeGen] Fix remaining zext() assertions in SelectionDAG
Fix remaining cases not committed in https://reviews.llvm.org/D49574

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341380 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 16:33:34 +00:00
Francis Visoiu Mistrih fe2c6872d7 [MachO] Fix inconsistency between error messages when validating LC_DYSYMTAB
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341379 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 16:31:53 +00:00
Francis Visoiu Mistrih e6cfed9796 [MachO] Fix LC_DYSYMTAB validation for external symbols
We were validating the same index (ilocalsym) twice, while iextdefsym
was never validated.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341378 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 16:31:48 +00:00
Jonas Devlieghere 488ca48067 [dwarfdump] Improve -diff option by hiding more data.
The -diff option makes it easy to diff dwarf by hiding addresses and
offsets. However not all of them were hidden, which should be fixed by
this patch.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341377 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 16:21:37 +00:00
Chandler Carruth 1381c3b1f0 Revert r341269: [Constant Hoisting] Hoisting Constant GEP Expressions
One of the tests is failing 50% of the time when expensive checks are
enabled. Not sure how deep the problem is so just reverting while the
author can investigate so that the bots stop repeatedly failing and
blaming things incorrectly. Will respond with details on the original
commit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341365 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 13:36:44 +00:00
Sven van Haastregt 784fc22c77 Fix some Wundef warnings in Compiler.h
Check for definedness of the __cpp_sized_deallocation and
__cpp_aligned_new feature test macros.  These will not be defined
when the feature is not available, and that prevents any code that
includes this header from compiling with -Wundef -Werror.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341364 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 12:46:21 +00:00
Chandler Carruth d2b1fb11d3 [x86/SLH] Add a real Clang flag and LLVM IR attribute for Speculative
Load Hardening.

Wires up the existing pass to work with a proper IR attribute rather
than just a hidden/internal flag. The internal flag continues to work
for now, but I'll likely remove it soon.

Most of the churn here is adding the IR attribute. I talked about this
Kristof Beyls and he seemed at least initially OK with this direction.
The idea of using a full attribute here is that we *do* expect at least
some forms of this for other architectures. There isn't anything
*inherently* x86-specific about this technique, just that we only have
an implementation for x86 at the moment.

While we could potentially expose this as a Clang-level attribute as
well, that seems like a good question to defer for the moment as it
isn't 100% clear whether that or some other programmer interface (or
both?) would be best. We'll defer the programmer interface side of this
for now, but at least get to the point where the feature can be enabled
without relying on implementation details.

This also allows us to do something that was really hard before: we can
enable *just* the indirect call retpolines when using SLH. For x86, we
don't have any other way to mitigate indirect calls. Other architectures
may take a different approach of course, and none of this is surfaced to
user-level flags.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341363 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 12:38:00 +00:00
Aaron Ballman 24a8df2c42 Disable -Wnoexcept-type due to false positives with GCC.
GCC triggers false positives if a nothrow function is called through a template argument. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80985 for details. The LLVM libraries have no stable C++ API, so the warning is not useful.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341361 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 12:03:49 +00:00
Chandler Carruth cf0bf50e16 Revert r341342: Dwarf .debug section compression support (zlib, zlib-gnu).
Also reverts follow-up commits r341343 and r341344.

The primary commit continues to break some build bots even after the
fixes in r341343 for UBSan issues:
http://lab.llvm.org:8011/builders/clang-cmake-aarch64-full/builds/5823

It is also failing for me locally (linux, x86-64).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341360 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 11:55:57 +00:00
Chandler Carruth 2ec0ce0cc3 [x86/SLH] Teach SLH to harden against the "ret2spec" attack by
implementing the proposed mitigation technique described in the original
design document.

The idea is to check after calls that the return address used to arrive
at that location is in fact the correct address. In the event of
a mis-predicted return which reaches a *valid* return but not the
*correct* return, this will detect the mismatch much like it would
a mispredicted conditional branch.

This is the last published attack vector that I am aware of in the
Spectre v1 space which is not mitigated by SLH+retpolines. However,
don't read *too* much into that: this is an area of ongoing research
where we expect more issues to be discovered in the future, and it also
makes no attempt to mitigate Spectre v4. Still, this is an important
completeness bar for SLH.

The change here is of course delightfully simple. It was predicated on
cutting support for post-instruction symbols into LLVM which was not at
all simple. Many thanks to Hal Finkel, Reid Kleckner, and Justin Bogner
who helped me figure out how to do a bunch of the complex changes
involved there.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341358 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 10:59:10 +00:00
Kristina Brooks 81a94dc637 Do not leak the Mach host port in sys::getHostCPUName()
Patch by rsesek (Robert Sesek)



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341357 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 10:54:09 +00:00
Chandler Carruth be7ae28b63 [x86/SLH] Teach SLH to harden indirect branches and switches without
retpolines.

This implements the core design of tracing the intended target into the
target, checking it, and using that to update the predicate state. It
takes advantage of a few interesting aspects of SLH to make it a bit
easier to implement:
- We already split critical edges with conditional branches, so we can
assume those are gone.
- We already unfolded any memory access in the indirect branch
instruction itself.

I've left hard errors in place to catch if any of these somewhat subtle
invariants get violated.

There is some code that I can factor out and share with D50837 when it
lands, but I didn't want to couple landing the two patches, so I'll do
that in a follow-up cleanup commit if alright.

Factoring out the code to handle different scenarios of materializing an
address remains frustratingly hard. In a bunch of cases you want to fold
one of the cases into an immediate operand of some other instruction,
and you also have both symbols and basic blocks being used which require
different methods on the MI builder (and different operand kinds).
Still, I'll take a stab at sharing at least some of this code in
a follow-up if I can figure out how.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341356 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 10:44:21 +00:00
Nicola Zaghen 4cf831c0ee [InstCombine] Fold icmp ugt/ult (add nuw X, C2), C --> icmp ugt/ult X, (C - C2)
Support for sgt/slt was added in rL294898, this adds the same cases also for unsigned compares.

This is the Alive proof: https://rise4fun.com/Alive/nyY

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341353 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 10:29:48 +00:00
Fedor Sergeev 7bcfffc012 [NFC] correcting patterns in time-passes test to fix buildbot
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341348 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 08:21:37 +00:00
Max Kazantsev dc6d9ec364 [NFC] Add assert to detect LCSSA breaches early
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341347 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 06:34:40 +00:00
Fedor Sergeev 0f20aef25a [PassTiming] reporting time-passes separately for multiple pass instances of the same pass
Summary:
Refactoring done by rL340872 accidentally appeared to be non-NFC, changing the way how
multiple instances of the same pass are handled - aggregation of results by PassName
forced data for multiple instances to be merged together and reported as one line.

Getting back to creating/reporting timers per pass instance.
Reporting was a bit enhanced by counting pass instances and adding #<num> suffix
to the pass description. Note that it is instances that are being counted,
not invocations of them.

time-passes test updated to account for multiple passes being run.

Reviewers: paquette, jhenderson, MatzeB, skatkov

Reviewed By: skatkov

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341346 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 06:12:28 +00:00
Max Kazantsev f0dce6702c [IndVars] Fix usage of SCEVExpander to not mess with SCEVConstant. PR38674
This patch removes the function `expandSCEVIfNeeded` which behaves not as
it was intended. This function tries to make a lookup for exact existing expansion
and only goes to normal expansion via `expandCodeFor` if this lookup hasn't found
anything. As a result of this, if some instruction above the loop has a `SCEVConstant`
SCEV, this logic will return this instruction when asked for this `SCEVConstant` rather
than return a constant value. This is both non-profitable and in some cases leads to
breach of LCSSA form (as in PR38674).

Whether or not it is possible to break LCSSA with this algorithm and with some
non-constant SCEVs is still in question, this is still being investigated. I wasn't
able to construct such a test so far, so maybe this situation is impossible. If it is,
it will go as a separate fix.

Rather than do it, it is always correct to just invoke `expandCodeFor` unconditionally:
it behaves smarter about insertion points, and as side effect of this it will choose a
constant value for SCEVConstants. For other SCEVs it may end up finding a better insertion
point. So it should not be worse in any case.

NOTE: So far the only known case for which this transform may break LCSSA is mapping
of SCEVConstant to an instruction. However there is a suspicion that the entire algorithm
can compromise LCSSA form for other cases as well (yet not proved).

Differential Revision: https://reviews.llvm.org/D51286
Reviewed By: etherzhhb


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341345 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 05:01:35 +00:00
Puyan Lotfi f27e1852c4 [NFC][llvm-objcopy] clang-formating Object.cpp
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341344 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 01:58:32 +00:00
Puyan Lotfi 8098c52b19 [NFC][llvm-objcopy] Fixing a ubi-san problem with unaligned memory writes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341343 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04 01:57:30 +00:00