platform/upstream/llvm.git
4 years ago[llvm-objcopy] Fix crash when removing symbol table at same time as adding a symbol
Georgy Komarov [Wed, 1 Jul 2020 07:15:39 +0000 (10:15 +0300)]
[llvm-objcopy] Fix crash when removing symbol table at same time as adding a symbol

This patch resolves crash that occurs when user wanted to remove all
symbols and add a brand new one using:

```
llvm-objcopy -R .symtab --add-symbol foo=1234 in.o out.o
```

Before these changes the symbol table internally being null when adding
new symbols. For now we will regenerate symtab in this case.

This fixes: https://bugs.llvm.org/show_bug.cgi?id=43930

Reviewed By: jhenderson

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

4 years ago[WebAssembly] Do not assume br_table range checks will be gt_u
Thomas Lively [Sun, 5 Jul 2020 01:11:24 +0000 (18:11 -0700)]
[WebAssembly] Do not assume br_table range checks will be gt_u

OSS-Fuzz and the Emscripten test suite uncovered some edge cases in
which the range check instruction seemed to be an (i32.const 0) or
other unexpected instruction, triggering an assertion. Unfortunately
the reproducers are rather complicated, so they don't make good unit
tests. This commit removes the bad assertion and conservatively
optimizes range checks only when the range check instruction is
i32.gt_u.

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

4 years agoFix two -Wrange-loop-analysis warnings that Xcode 12 beta incorrectly complains about
Nico Weber [Sun, 5 Jul 2020 00:41:27 +0000 (20:41 -0400)]
Fix two -Wrange-loop-analysis warnings that Xcode 12 beta incorrectly complains about

Xcode 12 beta apparently has the Wrange-loop-analysis changes from
half a year ago, but it seems to lack https://reviews.llvm.org/D72212
which made the warning usable again.

4 years ago[gn build] fix link of libclang_rt.asan_osx_dynamic.dylib if command line tools are...
Nico Weber [Sun, 5 Jul 2020 00:26:39 +0000 (20:26 -0400)]
[gn build] fix link of libclang_rt.asan_osx_dynamic.dylib if command line tools are not installed

4 years ago[gn build] make stage2_unix_toolchain set clang_base_path
Nico Weber [Fri, 3 Jul 2020 17:52:18 +0000 (13:52 -0400)]
[gn build] make stage2_unix_toolchain set clang_base_path

This fixes the build of compiler-rt on macOS when _not_ using
clang_base_path in args.gn: Xcode clang knows where to find the
SDK, but regular clang doesn't and needs a -isysroot parameter.
We correctly add that parameter when clang_base_path is set,
but else we omit it. If clang_base_path was not set, we also
didn't add the flag for stage2_unix_toolchain() when we build
compiler-rt with just-built clang.

Make stage2_unix_toolchain() use clang_base_path instead of setting
cc / cxx. It's less code, and it gets things like this right.

4 years ago[llvm-reduce] extractGVsFromModule(): don't crash when deleting instr twice
Roman Lebedev [Sat, 4 Jul 2020 22:01:46 +0000 (01:01 +0300)]
[llvm-reduce] extractGVsFromModule(): don't crash when deleting instr twice

As it can be seen in newly-added (previously-crashing) test-case,
there can be a situation where multiple GV's are used in instr,
and we would schedule the same instruction to be deleted several times,
crashing when trying to delete it the second time.

We could either store WeakVH (done here), or use something set-like.
I think using WeakVH is prevalent in these cases elsewhere.

4 years ago[llvm-reduce] extractArgumentsFromModule(): don't crash when deleting instr twice
Roman Lebedev [Sat, 4 Jul 2020 21:48:05 +0000 (00:48 +0300)]
[llvm-reduce] extractArgumentsFromModule(): don't crash when deleting instr twice

As it can be seen in newly-added (previously-crashing) test-case,
there can be a situation where multiple arguments are used in instr,
and we would schedule the same instruction to be deleted several times,
crashing when trying to delete it the second time.

We could either store WeakVH (done here), or use something set-like.
I think using WeakVH is prevalent in these cases elsewhere.

4 years ago[DAGCombiner] visitSIGN_EXTEND_INREG should fold sext_vector_inreg(undef) to 0 not...
Craig Topper [Sat, 4 Jul 2020 21:35:49 +0000 (14:35 -0700)]
[DAGCombiner] visitSIGN_EXTEND_INREG should fold sext_vector_inreg(undef) to 0 not undef.

We need to ensure that the sign bits of the result all match
so we can't fold to undef.

Similar to PR46585.

Reviewed By: lebedev.ri

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

4 years ago[OpenMPOpt] ICV Tracking
sstefan1 [Mon, 29 Jun 2020 22:08:37 +0000 (00:08 +0200)]
[OpenMPOpt] ICV Tracking

This is the first and most basic ICV Tracking implementation. For this
first version, we only support deduplication within the same BB.

Reviewers: jdoerfert, JonChesterfield, hamax97, jhuber6, uenoku,
baziotis

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

4 years agoRevert "[MLIR] Parallelize affine.for op to 1-D affine.parallel op"
Mehdi Amini [Sat, 4 Jul 2020 20:55:47 +0000 (20:55 +0000)]
Revert "[MLIR] Parallelize affine.for op to 1-D affine.parallel op"

This reverts commit 5f2843857feee6fbf755c12c21698a4987eda5d1.
This broke the build when -DDBUILD_SHARED_LIBS=ON is used.

4 years agoRevert "[AssumeBundles] Use operand bundles to encode alignment assumptions"
Roman Lebedev [Sat, 4 Jul 2020 19:45:41 +0000 (22:45 +0300)]
Revert "[AssumeBundles] Use operand bundles to encode alignment assumptions"

Assume bundle can have more than one entry with the same name,
but at least AlignmentFromAssumptionsPass::extractAlignmentInfo() uses
getOperandBundle("align"), which internally assumes that it isn't the
case, and happily crashes otherwise.

Minimal reduced reproducer: run `opt -alignment-from-assumptions` on

target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%0 = type { i64, %1*, i8*, i64, %2, i32, %3*, i8* }
%1 = type opaque
%2 = type { i8, i8, i16 }
%3 = type { i32, i32, i32, i32 }

; Function Attrs: nounwind
define i32 @f(%0* noalias nocapture readonly %arg, %0* noalias %arg1) local_unnamed_addr #0 {
bb:
  call void @llvm.assume(i1 true) [ "align"(%0* %arg, i64 8), "align"(%0* %arg1, i64 8) ]
  ret i32 0
}

; Function Attrs: nounwind willreturn
declare void @llvm.assume(i1) #1

attributes #0 = { nounwind "reciprocal-estimates"="none" }
attributes #1 = { nounwind willreturn }

This is what we'd have with -mllvm -enable-knowledge-retention

This reverts commit c95ffadb2474a4d8c4f598d94d35a9f31d9606cb.

4 years ago[flang] Add fixes and missing stmts to I/O runtime API handlers (ext. I/O part 8)
peter klausler [Sat, 4 Jul 2020 18:06:28 +0000 (11:06 -0700)]
[flang] Add fixes and missing stmts to I/O runtime API handlers (ext. I/O part 8)

Complete the rework of the initial implementation of external I/O
to fix problems found in testing (tests to follow); add handlers
for hitherto unimplemented PAUSE, FLUSH, ENDFILE, BACKSPACE, and
REWIND statements.

Reviewed By: tskeith, sscalpone

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

4 years ago[DAGCombiner] Don't fold zext_vector_inreg/sext_vector_inreg(undef) to undef. Fold...
Craig Topper [Sat, 4 Jul 2020 18:42:00 +0000 (11:42 -0700)]
[DAGCombiner] Don't fold zext_vector_inreg/sext_vector_inreg(undef) to undef. Fold to 0.

zext_vector_inreg needs to produces 0s in the extended bits and
sext_vector_inreg needs to produce upper bits that are all the
same. So we should fold them to a 0 vector instead of undef.

Fixes PR46585.

4 years ago[X86] Add test caes for pr46585. NFC
Craig Topper [Sat, 4 Jul 2020 18:40:40 +0000 (11:40 -0700)]
[X86] Add test caes for pr46585. NFC

4 years ago[Utils] Make -assume-builder/-assume-simplify actually work on Old-PM
Roman Lebedev [Sat, 4 Jul 2020 17:04:28 +0000 (20:04 +0300)]
[Utils] Make -assume-builder/-assume-simplify actually work on Old-PM

clang w/ old-pm currently would simply crash
when -mllvm  -enable-knowledge-retention=true is specified.

Clearly, these two passes had no Old-PM test coverage,
which would have shown the problem - not requiring AssumptionCacheTracker,
but then trying to always get it.

Also, why try to get domtree only if it's cached,
but at the same time marking it as required?

4 years ago[flang] Extend & fix per-I/O-statement state (ext. I/O work part 7)
peter klausler [Sat, 4 Jul 2020 00:57:28 +0000 (17:57 -0700)]
[flang] Extend & fix per-I/O-statement state (ext. I/O work part 7)

The per-I/O-statement state structures need to support missing
external I/O statements, and some bugs found in testing with
formatted input and record advancement are fixed.  The effects
of these changes will not be visible until further patches to
the I/O API handlers are pushed.

Reviewed By: tskeith

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

4 years ago[profile] Mark gcov test as unsupported on Darwin.
Amara Emerson [Sat, 4 Jul 2020 17:41:27 +0000 (10:41 -0700)]
[profile] Mark gcov test as unsupported on Darwin.

4 years ago[X86] Teach lowerShuffleAsBlend to use bit blend for v16i8/v32i8/v16i16 when avx512vl...
Craig Topper [Sat, 4 Jul 2020 17:26:56 +0000 (10:26 -0700)]
[X86] Teach lowerShuffleAsBlend to use bit blend for v16i8/v32i8/v16i16 when avx512vl is enabled but not avx512bw.

Probably not super important since there are no real CPUs with
avx512vl and not avx512bw. But vpternlog should be better than
vblendvb.

I do wonder if we should use vpternlog even with BWI. We
currently use vblendmb or vpblendmw by putting the mask into a GPR
and moving it to a k-register. But I don't think we hoist the
GPR to k-register copy in machine LICM. Using VPTERNLOG would use
a constant pool load, but has the advantage that we're pretty good
at hoisting and rematerializing those.

Reviewed By: RKSimon

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

4 years ago[X86] Disable VPBLENDVB formation in combineLogicBlendIntoPBLENDV if VPTERNLOG is...
Craig Topper [Sat, 4 Jul 2020 16:59:52 +0000 (09:59 -0700)]
[X86] Disable VPBLENDVB formation in combineLogicBlendIntoPBLENDV if VPTERNLOG is supported.

VPBLENDVB is multiple uops while VPTERNLOG is a single uop. So
we should use that instead.

Reviewed By: RKSimon

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

4 years agoRevert "[libcxx] Put clang::trivial_abi on std::unique_ptr, std::shared_ptr, and...
Vy Nguyen [Sat, 4 Jul 2020 15:29:08 +0000 (11:29 -0400)]
Revert "[libcxx] Put clang::trivial_abi on std::unique_ptr, std::shared_ptr, and std::weak_ptr"

This reverts commit 5cde3c9633fd071c90e9f9ce54a002e78fdd9df9.

The tests were reported failing on clang10

4 years ago[clang] Fix two tests that are affected by llvm opt change
Roman Lebedev [Sat, 4 Jul 2020 15:26:06 +0000 (18:26 +0300)]
[clang] Fix two tests that are affected by llvm opt change

4 years ago[InstCombine] fix miscompile from umul_with_overflow matching
Sanjay Patel [Sat, 4 Jul 2020 15:09:14 +0000 (11:09 -0400)]
[InstCombine] fix miscompile from umul_with_overflow matching

As noted in PR46561:
https://bugs.llvm.org/show_bug.cgi?id=46561
...it takes something beyond a minimal IR example to trigger
this bug because it relies on matching non-canonical IR.

There are no tests that show the need for matching this
pattern, so I'm just deleting it to fix the miscompile.

4 years ago[InstCombine] Always try to invert non-canonical predicate of an icmp
Roman Lebedev [Sat, 4 Jul 2020 14:39:48 +0000 (17:39 +0300)]
[InstCombine] Always try to invert non-canonical predicate of an icmp

Summary:
The actual transform i was going after was:
https://rise4fun.com/Alive/Tp9H
```
Name: zz
Pre: isPowerOf2(C0) && isPowerOf2(C1) && C1 == C0
%t0 = and i8 %x, C0
%r = icmp eq i8 %t0, C1
  =>
%t = icmp eq i8 %t0, 0
%r = xor i1 %t, -1

Name: zz
Pre: isPowerOf2(C0)
%t0 = and i8 %x, C0
%r = icmp ne i8 %t0, 0
  =>
%t = icmp eq i8 %t0, 0
%r = xor i1 %t, -1
```
but as it can be seen from the current tests, we already canonicalize most of it,
and we are only missing handling multi-use non-canonical icmp predicates.

If we have both `!=0` and `==0`, even though we can CSE them,
we end up being stuck with them. We should canonicalize to the `==0`.

I believe this is one of the cleanup steps i'll need after `-scalarizer`
if i end up proceeding with my WIP alloca promotion helper pass.

Reviewers: spatel, jdoerfert, nikic

Reviewed By: nikic

Subscribers: zzheng, hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[InstCombine] improve debug value names; NFC
Sanjay Patel [Sat, 4 Jul 2020 14:44:27 +0000 (10:44 -0400)]
[InstCombine] improve debug value names; NFC

The use of 'tmp' can trigger warnings from the update_test_checks.py
script. That's evidence of a flaw in the script's logic, but we
can always do better than naming variables 'tmp' in LLVM too.

The phi test file should be updated with auto-generated regex CHECK
lines, so it isn't affected by cosmetic diffs, but I don't have
time to do that right now.

4 years ago[InstCombine] add test for miscompile (PR46561); NFC
Sanjay Patel [Sat, 4 Jul 2020 14:08:44 +0000 (10:08 -0400)]
[InstCombine] add test for miscompile (PR46561); NFC

4 years ago[DAG] matchBinOpReduction - match subvector reduction patterns beyond a matched shuff...
Simon Pilgrim [Sat, 4 Jul 2020 14:27:55 +0000 (15:27 +0100)]
[DAG] matchBinOpReduction - match subvector reduction patterns beyond a matched shufflevector reduction

Currently matchBinOpReduction only handles shufflevector reduction patterns, but in many cases these only occur in the final stages of a reduction, once we're down to legal vector widths.

Before this its likely that we are performing reductions using subvector extractions to repeatedly split the source vector in half and perform the binop on the halves.

Assuming we've found a non-partial reduction, this patch continues looking for subvector reductions as far as it can beyond the last shufflevector.

Fixes PR37890

4 years ago[libcxx testing] Remove ALLOW_RETRIES from another test
David Zarzycki [Sat, 4 Jul 2020 14:13:46 +0000 (10:13 -0400)]
[libcxx testing] Remove ALLOW_RETRIES from another test

4 years ago[X86][SSE] Add add/fadd reduction shuffle+subvector tests
Simon Pilgrim [Sat, 4 Jul 2020 13:42:20 +0000 (14:42 +0100)]
[X86][SSE] Add add/fadd reduction shuffle+subvector tests

Tests based on the PR37890 test cases - the vector combine pass should leave us with a reduction chain ending in extract(add(x,shuffle(x,1,-1,...))), but the higher reduction stages will be subvector extractions not shuffles.

4 years ago[MLIR] Parallelize affine.for op to 1-D affine.parallel op
Yash Jain [Sat, 4 Jul 2020 13:22:46 +0000 (18:52 +0530)]
[MLIR] Parallelize affine.for op to 1-D affine.parallel op

Introduce pass to convert parallel affine.for op into 1-D
affine.parallel op. Run using --affine-parallelize. Removes
test-detect-parallel: pass for checking parallel affine.for ops.

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

4 years ago[X86][AVX] Fold PACK(LOSUBVECTOR(SHUFFLE(X)),HISUBVECTOR(SHUFFLE(X))) -> SHUFFLE...
Simon Pilgrim [Sat, 4 Jul 2020 12:54:30 +0000 (13:54 +0100)]
[X86][AVX] Fold PACK(LOSUBVECTOR(SHUFFLE(X)),HISUBVECTOR(SHUFFLE(X))) -> SHUFFLE(PACK(LOSUBVECTOR(X),HISUBVECTOR(X)))

Using PACK for truncations leaves us with intermediate shuffles that can be tricky to remove while the truncation tree is being formed.

This fold helps pull out the PERMQ case which is one of the most common, avoiding some costly lane-crossing shuffles.

A future patch will begin adding more general shuffle folding, which we should be able to use for HADD/HSUB as well.

4 years ago[gn build] Port b6cbe6cb039
LLVM GN Syncbot [Sat, 4 Jul 2020 12:02:31 +0000 (12:02 +0000)]
[gn build] Port b6cbe6cb039

4 years ago[analyzer][NFC] Move the data structures from CheckerRegistry to the Core library
Kirstóf Umann [Thu, 18 Jun 2020 19:40:43 +0000 (21:40 +0200)]
[analyzer][NFC] Move the data structures from CheckerRegistry to the Core library

If you were around the analyzer for a while now, you must've seen a lot of
patches that awkwardly puts code from one library to the other:

* D75360 moves the constructors of CheckerManager, which lies in the Core
  library, to the Frontend library. Most the patch itself was a struggle along
  the library lines.
* D78126 had to be reverted because dependency information would be utilized
  in the Core library, but the actual data lied in the frontend.
  D78126#inline-751477 touches on this issue as well.

This stems from the often mentioned problem: the Frontend library depends on
Core and Checkers, Checkers depends on Core. The checker registry functions
(`registerMallocChecker`, etc) lie in the Checkers library in order to keep each
checker its own module. What this implies is that checker registration cannot
take place in the Core, but the Core might still want to use the data that
results from it (which checker/package is enabled, dependencies, etc).

D54436 was the patch that initiated this. Back in the days when CheckerRegistry
was super dumb and buggy, it implemented a non-documented solution to this
problem by keeping the data in the Core, and leaving the logic in the Frontend.
At the time when the patch landed, the merger to the Frontend made sense,
because the data hadn't been utilized anywhere, and the whole workaround without
any documentation made little sense to me.

So, lets put the data back where it belongs, in the Core library. This patch
introduces `CheckerRegistryData`, and turns `CheckerRegistry` into a short lived
wrapper around this data that implements the logic of checker registration. The
data is tied to CheckerManager because it is required to parse it.

Side note: I can't help but cringe at the fact how ridiculously awkward the
library lines are. I feel like I'm thinking too much inside the box, but I guess
this is just the price of keeping the checkers so modularized.

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

4 years ago[clangd] Try to fix windows buildbot. NFC
Sam McCall [Sat, 4 Jul 2020 10:03:22 +0000 (12:03 +0200)]
[clangd] Try to fix windows buildbot. NFC

http://45.33.8.238/win/19116/step_9.txt

4 years ago[MLIR][Linalg] Generate the right type of load/store when lowering max/min pooling ops
Uday Bondhugula [Thu, 11 Jun 2020 12:40:53 +0000 (18:10 +0530)]
[MLIR][Linalg] Generate the right type of load/store when lowering max/min pooling ops

While lowering min/max pooling ops to loops, generate the right kind of
load/stores (std or affine) instead of always generating std
load/stores.

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

4 years ago[SVE] Fix invalid assert in expand_DestructiveOp.
Paul Walker [Sat, 4 Jul 2020 09:17:53 +0000 (09:17 +0000)]
[SVE] Fix invalid assert in expand_DestructiveOp.

AArch64ExpandPseudo::expand_DestructiveOp contains an assert to
ensure the destructive operand's register is unique.  However,
this is only required when psuedo expansion emits a movprfx.

A simple example when a movprfx is not required is
  Z0 = FADD_ZPZZ_UNDEF_S P0, Z0, Z0
which expands to an unprefixed FADD_ZPmZ_S instruction.

This patch moves the assert to the places where a movprfx is emitted.

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

4 years ago[clangd] Config: compute config in TUScheduler and BackgroundIndex
Sam McCall [Thu, 2 Jul 2020 21:09:25 +0000 (23:09 +0200)]
[clangd] Config: compute config in TUScheduler and BackgroundIndex

Summary:
ClangdServer owns the question of exactly which config to create, but
TUScheduler/BackgroundIndex control threads and so decide at which point
to inject it.

Reviewers: kadircet

Subscribers: ilya-biryukov, javed.absar, MaskRay, jkorous, arphaman, usaxena95, cfe-commits

Tags: #clang

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

4 years ago[InstSimplify] Simplify comparison between zext(x) and sext(x)
Nikita Popov [Thu, 2 Jul 2020 19:35:40 +0000 (21:35 +0200)]
[InstSimplify] Simplify comparison between zext(x) and sext(x)

This is picking up a loose thread from D69006: We can simplify
(zext x) ule (sext x) and (zext x) sge (sext x) to true, with
various permutations. Oddly, SCEV knows about this identity,
but nothing on the IR level does.

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

4 years ago[InstSimplify] Add additional zext/sext comparison tests (NFC)
Nikita Popov [Sat, 4 Jul 2020 08:59:01 +0000 (10:59 +0200)]
[InstSimplify] Add additional zext/sext comparison tests (NFC)

Add vector variants, and negative tests where the operand does
not match.

4 years ago[gn build] Port 8bd000a65fe
LLVM GN Syncbot [Sat, 4 Jul 2020 08:53:11 +0000 (08:53 +0000)]
[gn build] Port 8bd000a65fe

4 years ago[clangd] Config: loading and caching config from disk.
Sam McCall [Wed, 1 Jul 2020 14:30:57 +0000 (16:30 +0200)]
[clangd] Config: loading and caching config from disk.

Summary:
The Provider extension point is designed to also be implemented by
ClangdLSPServer (to inject config-over-lsp) and likely by embedders.

Reviewers: kadircet

Subscribers: mgorny, ilya-biryukov, MaskRay, jkorous, arphaman, jfb, usaxena95, cfe-commits

Tags: #clang

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

4 years ago[X86] Directly emit VPTERNLOG from canonicalizeBitSelect when possible.
Craig Topper [Sat, 4 Jul 2020 05:08:28 +0000 (22:08 -0700)]
[X86] Directly emit VPTERNLOG from canonicalizeBitSelect when possible.

Seems to produce better results on some rotate tests. And is
neutral for other tests.

4 years ago[PowerPC] Implement probing for prologue
Kai Luo [Fri, 3 Jul 2020 05:55:33 +0000 (05:55 +0000)]
[PowerPC] Implement probing for prologue

This patch is part of supporting `-fstack-clash-protection`. Implemented
probing when emitting prologue.

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

4 years ago[X86] Add matching support for X86ISD::ANDNP to X86DAGToDAGISel::tryVPTERNLOG.
Craig Topper [Sat, 4 Jul 2020 00:50:35 +0000 (17:50 -0700)]
[X86] Add matching support for X86ISD::ANDNP to X86DAGToDAGISel::tryVPTERNLOG.

4 years ago[flang] Further implementation of external I/O unit operations (part 6)
peter klausler [Fri, 3 Jul 2020 19:38:22 +0000 (12:38 -0700)]
[flang] Further implementation of external I/O unit operations (part 6)

Rework initial implementation of external I/O unit operations to
fix problems exposed in unit tests (in a later patch).  Add flushing.

Reviewed By: sscalpone

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

4 years ago[WebAssembly] Do not omit range checks for i64 switches
Thomas Lively [Sat, 4 Jul 2020 00:15:39 +0000 (17:15 -0700)]
[WebAssembly] Do not omit range checks for i64 switches

Summary:
Since the br_table instruction takes an i32, switches over i64s (and
larger integers) must use the i32.wrap_i64 instruction to truncate the
table index. This truncation makes numbers just over 2^32
indistinguishable from small numbers, so it was a miscompilation to
omit the range check preceding these br_tables. This change fixes the
problem by skipping the "fixing" of the br_table when the range check
is an i64 instruction.

Fixes PR46447.

Reviewers: aheejin, dschuff, kripken

Reviewed By: kripken

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

Tags: #llvm

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

4 years ago[gcov][test] Add `UNSUPPORTED: host-byteorder-big-endian` to gcov-fork.c
Fangrui Song [Sat, 4 Jul 2020 00:06:54 +0000 (17:06 -0700)]
[gcov][test] Add `UNSUPPORTED: host-byteorder-big-endian` to gcov-fork.c

This test strangely failed on ppc64be
http://lab.llvm.org:8011/builders/clang-ppc64be-linux/builds/50913

4 years ago[gcov][test] Reorganize some compiler-rt/test/profile tests
Fangrui Song [Fri, 3 Jul 2020 23:17:06 +0000 (16:17 -0700)]
[gcov][test] Reorganize some compiler-rt/test/profile tests

4 years ago[LoopDeletion] Emit a remark when a dead loop is deleted
Francis Visoiu Mistrih [Fri, 3 Jul 2020 05:09:01 +0000 (22:09 -0700)]
[LoopDeletion] Emit a remark when a dead loop is deleted

This emits a remark when LoopDeletion deletes a dead loop, using the
source location of the loop's header. There are currently two reasons
for removing the loop: invariant loop or loop that never executes.

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

4 years ago[PowerPC][NFC] Fix indentation
Lei Huang [Fri, 3 Jul 2020 21:47:24 +0000 (16:47 -0500)]
[PowerPC][NFC] Fix indentation

4 years ago[NFCI][LoopUnroll] s/%tmp/%i/ in one test to silence update script warning
Roman Lebedev [Fri, 3 Jul 2020 20:39:24 +0000 (23:39 +0300)]
[NFCI][LoopUnroll] s/%tmp/%i/ in one test to silence update script warning

4 years ago[NFCI][InstCombine] shift.ll: s/%tmp/%i/ to silence update script warning
Roman Lebedev [Fri, 3 Jul 2020 20:39:01 +0000 (23:39 +0300)]
[NFCI][InstCombine] shift.ll: s/%tmp/%i/ to silence update script warning

4 years ago[x86] improve codegen for bit-masked vector compare and select (PR46531)
Sanjay Patel [Fri, 3 Jul 2020 21:31:57 +0000 (17:31 -0400)]
[x86] improve codegen for bit-masked vector compare and select (PR46531)

We canonicalize patterns like:
  %s = lshr i32 %a0, 1
  %t = trunc i32 %s to i1

to:
  %a = and i32 %a0, 2
  %c = icmp ne i32 %a, 0

...in IR, but the bit-shifting original sequence may be better for x86 vector codegen.

I tried several variants of the transform, and it's tricky to not induce regressions.
In particular, I did not find a way to cleanly handle non-splat constants, so I've left
that as a TODO item here (currently negative tests for those are included). AVX512
resulted in some diffs, but didn't look meaningful, so I left that out too. Some of
the 256-bit AVX1 diffs are questionable, but close enough that they are probably
insignificant.

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

4 years ago[InstCombine] fold mul of sext bools to 'and'
Sanjay Patel [Fri, 3 Jul 2020 19:34:55 +0000 (15:34 -0400)]
[InstCombine] fold mul of sext bools to 'and'

Alive2:
  define i32 @src(i1 %x, i1 %y) {
  %0:
  %zx = sext i1 %x to i32
  %zy = sext i1 %y to i32
  %r = mul i32 %zx, %zy
  ret i32 %r
  }
  =>
  define i32 @tgt(i1 %x, i1 %y) {
  %0:
  %a = and i1 %x, %y
  %r = zext i1 %a to i32
  ret i32 %r
  }
  Transformation seems to be correct!

https://alive2.llvm.org/ce/z/gaPQxA

4 years ago[InstCombine] add more tests for mul of bools; NFC
Sanjay Patel [Fri, 3 Jul 2020 19:27:43 +0000 (15:27 -0400)]
[InstCombine] add more tests for mul of bools; NFC

4 years ago[libcxx] Put clang::trivial_abi on std::unique_ptr, std::shared_ptr, and std::weak_ptr
Vy Nguyen [Wed, 24 Jun 2020 19:03:08 +0000 (15:03 -0400)]
[libcxx] Put clang::trivial_abi on std::unique_ptr, std::shared_ptr, and std::weak_ptr

Reviewers: jyknight, EricWF, #libc!

Subscribers: arphaman, libcxx-commits

Tags: #libc

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

4 years ago[clangd] Fix hover crash on invalid decls
Kadir Cetinkaya [Fri, 3 Jul 2020 18:52:41 +0000 (20:52 +0200)]
[clangd] Fix hover crash on invalid decls

Summary: This also changes the way we display Size and Offset to be independent.

Reviewers: sammccall

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits

Tags: #clang

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

4 years ago[PowerPC] Implement Vector Insert Builtins in LLVM/Clang
Biplob Mishra [Fri, 3 Jul 2020 17:45:27 +0000 (12:45 -0500)]
[PowerPC] Implement Vector Insert Builtins in LLVM/Clang

Implements vec_insertl() and vec_inserth().

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

4 years agoRevert AST Matchers default to AsIs mode
Stephen Kelly [Thu, 2 Jul 2020 19:46:27 +0000 (20:46 +0100)]
Revert AST Matchers default to AsIs mode

Reviewers: aaron.ballman, klimek

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[flang] Track known file size, add IsATerminal (ext. I/O work part 5)
peter klausler [Fri, 3 Jul 2020 17:56:08 +0000 (10:56 -0700)]
[flang] Track known file size, add IsATerminal (ext. I/O work part 5)

Add a data member knownSize_ and an accessor to allow the size of
an external file to be tracked when known.  Also add a wrapper for
::isatty() here in the filesystem encapsulation module.  These
features are needed for the external I/O rework changes still
to come.

Reviewed By: sscalpone

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

4 years ago[flang] Define new runtime error IOSTAT values (I/O runtime work part 4)
peter klausler [Fri, 3 Jul 2020 17:47:02 +0000 (10:47 -0700)]
[flang] Define new runtime error IOSTAT values (I/O runtime work part 4)

Add more IOSTAT= values for errors that can arise in external I/O.

Reviewed By: sscalpone

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

4 years ago[InstCombine] Try to narrow expr if trunc cannot be removed.
Florian Hahn [Fri, 3 Jul 2020 19:22:51 +0000 (20:22 +0100)]
[InstCombine] Try to narrow expr if trunc cannot be removed.

Narrowing an input expression of a truncate to a type larger than the
result of the truncate won't allow removing the truncate, but it may
enable further optimizations, e.g. allowing for larger vectorization
factors.

For now this is intentionally limited to integer types only, to avoid
producing new vector ops that might not be suitable for the target.

If we know that the only user is a trunc, we can also be allow more
cases, e.g. also shortening expressions with some additional shifts.

I would appreciate feedback on the best place to do such a narrowing.

This fixes PR43580.

Reviewers: spatel, RKSimon, lebedev.ri, xbolva00

Reviewed By: lebedev.ri

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

4 years ago[libc++/libc++abi] Automatically detect whether exceptions are enabled
Louis Dionne [Fri, 3 Jul 2020 17:46:41 +0000 (13:46 -0400)]
[libc++/libc++abi] Automatically detect whether exceptions are enabled

Instead of detecting it automatically (in libc++) and relying on
_LIBCXXABI_NO_EXCEPTIONS being set explicitly (in libc++abi), always
detect whether exceptions are enabled automatically.

This commit also removes support for specifying -D_LIBCPP_NO_EXCEPTIONS
and -D_LIBCXXABI_NO_EXCEPTIONS explicitly -- those should just be inferred
from using -fno-exceptions (or an equivalent flag).

Allowing both -D_FOO_NO_EXCEPTIONS to be provided explicitly and trying
to detect it automatically is just confusing, especially since we did
specify it explicitly when building libc++abi. We should have only one
way to detect whether exceptions are enabled, but it should be robust.

4 years ago[flang] Add FIRBuilder.cpp
Eric Schweitz [Fri, 3 Jul 2020 00:44:51 +0000 (17:44 -0700)]
[flang] Add FIRBuilder.cpp

The FIR builder is a helper class that manages the creation of MLIR
operations from the bridge. The focus of the builder is the creation of
Operations, Types, etc.

Differential revision: htps://reviews.llvm.org/D83107

4 years ago[XCOFF][AIX] Use 'L..' instead of '.L' for getPrivateGlobalPrefix in DataLayout
jasonliu [Thu, 2 Jul 2020 22:45:59 +0000 (22:45 +0000)]
[XCOFF][AIX] Use 'L..' instead of '.L' for getPrivateGlobalPrefix in DataLayout

Summary:
D80831 changed part of the prefix usage for AIX.
But there are other places getting prefix from DataLayout.
This patch intends to make prefix usage consistent on AIX.

Reviewed by: hubert.reinterpretcast, daltenty

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

4 years ago[llvm-ar][test] Unsupport error-opening-directory.test on FreeBSD
sameerarora101 [Fri, 3 Jul 2020 17:57:32 +0000 (10:57 -0700)]
[llvm-ar][test] Unsupport error-opening-directory.test on FreeBSD

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

4 years ago[InstCombine] fold mul of zext bools to 'and'
Sanjay Patel [Fri, 3 Jul 2020 17:08:59 +0000 (13:08 -0400)]
[InstCombine] fold mul of zext bools to 'and'

The base case only works because we are relying on a
poison-unsafe select transform; if that is fixed, we
would regress on patterns like this.

The extra use tests show that the select transform can't
be applied consistently. So it may be a regression to have
an extra instruction on 1 test, but that result was not
created safely and does not happen reliably.

4 years ago[InstCombine] add tests for mul of bools; NFC
Sanjay Patel [Fri, 3 Jul 2020 16:52:34 +0000 (12:52 -0400)]
[InstCombine] add tests for mul of bools; NFC

4 years ago[NFC][InstCombine] Add some more tests for select based on non-canonical bit-test
Roman Lebedev [Fri, 3 Jul 2020 17:12:46 +0000 (20:12 +0300)]
[NFC][InstCombine] Add some more tests for select based on non-canonical bit-test

4 years ago[InstSimplify] Fold icmp with dominating assume
Nikita Popov [Sun, 28 Jun 2020 13:59:56 +0000 (15:59 +0200)]
[InstSimplify] Fold icmp with dominating assume

If we assume(x > y), then we should be able to fold the basic
implications of that, like x >= y. This already happens if either
one of the operands is constant (LVI) or if the conditions are
exactly the same (GVN), but not if we have an implication with
non-constant operands. Support this by querying AssumptionCache.

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

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

4 years ago[ELF] Resolve R_DTPREL in .debug_* referencing discarded symbols to -1
Fangrui Song [Fri, 3 Jul 2020 16:50:30 +0000 (09:50 -0700)]
[ELF] Resolve R_DTPREL in .debug_* referencing discarded symbols to -1

The location of a TLS variable is encoded as a DW_OP_const4u/DW_OP_const8u
followed by a DW_OP_push_tls_address (or DW_OP_GNU_push_tls_address https://sourceware.org/bugzilla/show_bug.cgi?id=11616 ).

This change follows up to D81784 and makes relocations types generalized as
R_DTPREL (e.g. R_X86_64_DTPOFF{32,64}, R_PPC64_DTPREL64) use -1 as the
tombstone value as well. This works for both TLS Variant I and Variant II
architectures.

* arm: .long tls(tlsldo)   # not working currently (R_ARM_TLS_LDO32 is R_ABS)
* mips64: .dtpreldword tls+32768
* ppc64: .quad tls@DTPREL+0x8000
* riscv: neither GCC nor clang has implemented DW_AT_location. It is likely .long/.quad tls@dtprel+0x800
* x86-32: .long tls@DTPOFF
* x86-64: .long tls@DTPOFF; .quad tls@DTPOFF

tls has a non-negative st_value, so such relocations (st_value+addend)
never resolve to -1 in a normal (not discarded) case.

```
// clang -fuse-ld=lld -g -ffunction-sections a.c -Wl,--gc-sections
// foo and tls will be discarded by --gc-sections.
// DW_AT_location [DW_FORM_exprloc] (DW_OP_const8u 0xffffffffffffffff, DW_OP_GNU_push_tls_address)
thread_local int tls;
int foo() { return ++tls; }
int main() {}
```

Also, drop logic added in D26201 intended to address PR30793. It added a test
(gc-debuginfo-tls.s) using a non-SHF_ALLOC section and a local symbol, which
does not reflect the intended scenario: a relocation in a SHF_ALLOC section
referencing a discarded non-local symbol. For such a non .debug_* section, just
emit an error.

Reviewed By: jhenderson

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

4 years ago[SLP] Make sure instructions are ordered when computing spill cost.
Florian Hahn [Fri, 3 Jul 2020 16:28:45 +0000 (17:28 +0100)]
[SLP] Make sure instructions are ordered when computing spill cost.

The entries in VectorizableTree are not necessarily ordered by their
position in basic blocks. Collect them and order them by dominance so
later instructions are guaranteed to be visited first. For instructions
in different basic blocks, we only scan to the beginning of the block,
so their order does not matter, as long as all instructions in a basic
block are grouped together. Using dominance ensures a deterministic order.

The modified test case contains an example where we compute a wrong
spill cost (2) without this patch, even though there is no call between
any instruction in the bundle.

This seems to have limited practical impact, .e.g on X86 with a recent
Intel Xeon CPU with -O3 -march=native -flto on MultiSource,SPEC2000,SPEC2006
there are no binary changes.

Reviewers: craig.topper, RKSimon, xbolva00, ABataev, spatel

Reviewed By: ABataev

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

4 years ago[ARM][HWLoops] Create hardware loops for sibling loops
David Green [Fri, 3 Jul 2020 13:18:32 +0000 (14:18 +0100)]
[ARM][HWLoops] Create hardware loops for sibling loops

Given a loop with two subloops, it should be possible for both to be
converted to hardware loops. That's what this patch does, simply enough.
It slightly alters the loop iterating order to try and convert all
subloops. If one (or more) succeeds, it stops as before.

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

4 years ago[SLP] Precommit test for which spill cost is computed incorrectly.
Florian Hahn [Tue, 23 Jun 2020 18:07:30 +0000 (19:07 +0100)]
[SLP] Precommit test for which spill cost is computed incorrectly.

Test for D82444.

4 years ago[InstCombine] Precommit tests for PR43580.
Florian Hahn [Wed, 1 Jul 2020 12:54:24 +0000 (13:54 +0100)]
[InstCombine] Precommit tests for PR43580.

4 years agoEnable basepointer for AIX.
Sean Fertile [Fri, 3 Jul 2020 15:55:49 +0000 (11:55 -0400)]
Enable basepointer for AIX.

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

4 years ago[InstCombine] add one-use check to cast+select narrowing transform
Sanjay Patel [Fri, 3 Jul 2020 15:52:52 +0000 (11:52 -0400)]
[InstCombine] add one-use check to cast+select narrowing transform

Prevent increasing the instruction count.

4 years ago[InstCombine] add tests to show missing one-use checks; NFC
Sanjay Patel [Fri, 3 Jul 2020 15:28:03 +0000 (11:28 -0400)]
[InstCombine] add tests to show missing one-use checks; NFC

4 years ago[DWARFYAML][test] Use --ignore-case to suppress errors.
Xing GUO [Fri, 3 Jul 2020 15:44:36 +0000 (23:44 +0800)]
[DWARFYAML][test] Use --ignore-case to suppress errors.

This patch is to fix build bot failure (http://lab.llvm.org:8011/builders/llvm-clang-win-x-aarch64/builds/553).

4 years ago[flang] Improve API for runtime allocator (I/O runtime work part 3)
peter klausler [Fri, 3 Jul 2020 01:35:20 +0000 (18:35 -0700)]
[flang] Improve API for runtime allocator (I/O runtime work part 3)

New<A> used to return an A&; now it returns an OwningPtr<A>
to force better ownership tracking of allocations.  Its API
has also been split into New<A> and SizedNew<A> to allow
allocations with a size override.

Reviewed By: tskeith

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

4 years ago[clang][NFC] Removed unused parameters in InitializeSourceManager
Andrzej Warzynski [Fri, 3 Jul 2020 14:44:06 +0000 (15:44 +0100)]
[clang][NFC] Removed unused parameters in InitializeSourceManager

4 years ago[InstCombine] canEvaluateTruncated - use KnownBits to check for inrange shift amounts
Simon Pilgrim [Fri, 3 Jul 2020 14:51:06 +0000 (15:51 +0100)]
[InstCombine] canEvaluateTruncated - use KnownBits to check for inrange shift amounts

Currently canEvaluateTruncated can only attempt to truncate shifts if they are scalar/uniform constant amounts that are in range.

This patch replaces the constant extraction code with KnownBits handling, using the KnownBits::getMaxValue to check that the amounts are inrange.

This enables support for nonuniform constant cases, and also variable shift amounts that have been masked somehow. Annoyingly, this still won't work for vectors with (demanded) undefs as KnownBits returns nothing in those cases, but its a definite improvement on what we currently have.

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

4 years ago[AMDGPU] Added support of new inline assembler constraints
Dmitry Preobrazhensky [Fri, 3 Jul 2020 11:36:57 +0000 (14:36 +0300)]
[AMDGPU] Added support of new inline assembler constraints

Added support for constraints 'I', 'J', 'L', 'B', 'C', 'Kf', 'DA', 'DB'.

See https://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html#Machine-Constraints.

Reviewers: arsenm, rampitec

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

4 years ago[ARM] Generate [SU]RHADD from (b - (~a)) >> 1
Petre-Ionut Tudor [Wed, 3 Jun 2020 14:28:43 +0000 (15:28 +0100)]
[ARM] Generate [SU]RHADD from (b - (~a)) >> 1

Summary:
Teach LLVM to recognize the above pattern, which is usually a
transformation of (a + b + 1) >> 1, where the operands are either
signed or unsigned types.

Subscribers: kristof.beyls, hiraditya, danielkiss, llvm-commits

Tags: #llvm

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

4 years ago[lldb/DWARF] Look for complete member definitions in other modules
Pavel Labath [Wed, 1 Jul 2020 14:46:24 +0000 (16:46 +0200)]
[lldb/DWARF] Look for complete member definitions in other modules

With -flimit-debug-info, we can have a definition of a class, but no
definition for some of its members. This extends the same logic we were
using for incomplete base classes to cover incomplete members too.

Test forward-declarations.s is removed as it is no longer applicable --
we don't warn anymore when encountering incomplete members as they could
be completed elsewhere. New checks added to TestLimitDebugInfo cover the
handling of incomplete members more thoroughly.

4 years ago[mlir] Add check for ViewLikeOpInterface that creates additional aliases.
Julian Gross [Thu, 2 Jul 2020 13:10:24 +0000 (15:10 +0200)]
[mlir] Add check for ViewLikeOpInterface that creates additional aliases.

ViewLikeOpInterfaces introduce new aliases that need to be added to the alias
list. This is necessary to place deallocs in the right positions.

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

4 years ago[ObjectYAML][ELF] Add support for emitting the .debug_gnu_pubnames/pubtypes sections.
Xing GUO [Fri, 3 Jul 2020 10:13:49 +0000 (18:13 +0800)]
[ObjectYAML][ELF] Add support for emitting the .debug_gnu_pubnames/pubtypes sections.

This patch helps add support for emitting the .debug_gnu_pubnames and .debug_gnu_pubtypes sections.

The .debug_gnu_pub* sections is verified by llvm-dwarfdump.

Known issues:
- Doesn't support emitting multiple pub-tables.

Reviewed By: jhenderson

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

4 years ago[lldb/Utility] Simplify more Scalar methods
Pavel Labath [Fri, 3 Jul 2020 14:31:50 +0000 (16:31 +0200)]
[lldb/Utility] Simplify more Scalar methods

A lot of the methods handle all integral and all floating point types
the same way. They can be changed to switch on the category of the type,
instead of the actual type, saving a lot of boilerplate.

This patch does that for the methods where I could be reasonably certain
of their expected semantics.

4 years ago[DWARFYAML][unittest] Use parseDWARFYAML() in unit test. NFC.
Xing GUO [Fri, 3 Jul 2020 14:34:27 +0000 (22:34 +0800)]
[DWARFYAML][unittest] Use parseDWARFYAML() in unit test. NFC.

4 years ago[mlir] Add redundant copy removal transform
Ehsan Toosi [Thu, 25 Jun 2020 15:02:11 +0000 (17:02 +0200)]
[mlir] Add redundant copy removal transform

This pass removes redundant dialect-independent Copy operations in different
situations like the following:

%from = ...
%to = ...
... (no user/alias for %to)
copy(%from, %to)
... (no user/alias for %from)
dealloc %from
use(%to)

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

4 years ago[NFC][SimplifyCFG] Move X86 tests into subdir
Sam Parker [Fri, 3 Jul 2020 13:20:57 +0000 (14:20 +0100)]
[NFC][SimplifyCFG] Move X86 tests into subdir

4 years ago[llvm-readobj] - Use cantFail() for all `Obj->sections()` calls. NFCI.
Georgii Rymar [Fri, 3 Jul 2020 11:17:08 +0000 (14:17 +0300)]
[llvm-readobj] - Use cantFail() for all `Obj->sections()` calls. NFCI.

`ELFDumper<ELFT>::ELFDumper` calls `Obj->sections()` in its constructor:
https://github.com/llvm/llvm-project/blob/master/llvm/tools/llvm-readobj/ELFDumper.cpp#L2046

this means that all subsequent calls can't fail and can be
wrapped into `cantFail` in instead of `unwrapOrError` for simplicity.

Actually we already do it in a few places. In this patch I've fixed all
other places I've found.

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

4 years ago[IR] Short-circuit comparison with itself for Attributes
Danila Malyutin [Tue, 23 Jun 2020 11:43:02 +0000 (14:43 +0300)]
[IR] Short-circuit comparison with itself for Attributes

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

4 years ago[clang][NFC] Add a missing /dev/null in test/AST/ast-dump-lambda.cpp
Bruno Ricci [Fri, 3 Jul 2020 12:58:59 +0000 (13:58 +0100)]
[clang][NFC] Add a missing /dev/null in test/AST/ast-dump-lambda.cpp

4 years ago[clang][NFC] Also test for serialization in test/AST/ast-dump-comment.cpp
Bruno Ricci [Fri, 3 Jul 2020 12:58:19 +0000 (13:58 +0100)]
[clang][NFC] Also test for serialization in test/AST/ast-dump-comment.cpp

4 years ago[clang][NFC] Store a pointer to the ASTContext in ASTDumper and TextNodeDumper
Bruno Ricci [Fri, 3 Jul 2020 12:54:10 +0000 (13:54 +0100)]
[clang][NFC] Store a pointer to the ASTContext in ASTDumper and TextNodeDumper

In general there is no way to get to the ASTContext from most AST nodes
(Decls are one of the exception). This will be a problem when implementing
the rest of APValue::dump since we need the ASTContext to dump some kinds of
APValues.

The ASTContext* in ASTDumper and TextNodeDumper is not always non-null.
This is because we still want to be able to use the various dump() functions
in a debugger.

No functional changes intended.

Reverted in fcf4d5e4499a391dff42ea1a096f146db44147b6 since a few dump()
functions in lldb where missed.

4 years agoAdd tests for trunc(shl/lshr/ashr(*ext(x),zext(and(y,c)))) patterns with variable...
Simon Pilgrim [Fri, 3 Jul 2020 12:39:16 +0000 (13:39 +0100)]
Add tests for trunc(shl/lshr/ashr(*ext(x),zext(and(y,c)))) patterns with variable shifts with clamped shift amounts

4 years agoAdd vector trunc(or(shl(zext(x),c1),zext(x))) tests
Simon Pilgrim [Fri, 3 Jul 2020 10:51:59 +0000 (11:51 +0100)]
Add vector trunc(or(shl(zext(x),c1),zext(x))) tests

4 years ago[LLD][ELF][Windows] Allow LLD to overwrite existing output files that are in use
Ben Dunbobbin [Fri, 3 Jul 2020 11:54:24 +0000 (12:54 +0100)]
[LLD][ELF][Windows] Allow LLD to overwrite existing output files that are in use

On Windows co-operative programs can be expected to open LLD's
output in FILE_SHARE_DELETE mode. This allows us to delete the
file (by moving it to a temporary filename and then deleting
it) so that we can link another output file that overwrites
the existing file, even if the current file is in use.

A similar strategy is documented here:
https://boostgsoc13.github.io/boost.afio/doc/html/afio/FAQ/deleting_open_files.html

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

4 years ago[AMDGPU] Don't combine DPP if DPP register is used more than once per instruction
vpykhtin [Thu, 25 Jun 2020 14:24:58 +0000 (17:24 +0300)]
[AMDGPU] Don't combine DPP if DPP register is used more than once per instruction

Reviewers: arsenm, rampitec, foad

Reviewed By: rampitec, foad

Subscribers: wuzish, kzhuravl, nemanjai, jvesely, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, hiraditya, kbarton, kerbowa, llvm-commits

Tags: #llvm

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

4 years ago[ARM] Add Cortex-A77 Support for Clang and LLVM
Luke Geeson [Tue, 30 Jun 2020 15:45:36 +0000 (16:45 +0100)]
[ARM] Add Cortex-A77 Support for Clang and LLVM

This patch upstreams support for the Arm-v8 Cortex-A77
processor for AArch64 and ARM.

In detail:
- Adding cortex-a77 as a cpu option for aarch64 and arm targets in clang
- Cortex-A77 CPU name and ProcessorModel in llvm

details of the CPU can be found here:
https://www.arm.com/products/silicon-ip-cpu/cortex-a/cortex-a77

and a similar submission to GCC can be found here:
https://github.com/gcc-mirror/gcc/commit/e0664b7a63ed8305e9f8539309df7fb3eb13babe

The following people contributed to this patch:
- Luke Geeson
- Mikhail Maltsev

Reviewers: t.p.northover, dmgreen, ostannard, SjoerdMeijer

Reviewed By: dmgreen

Subscribers: dmgreen, kristof.beyls, hiraditya, danielkiss, cfe-commits,
llvm-commits, miyuki

Tags: #clang, #llvm

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