platform/upstream/llvm.git
4 years agoAMDGPU/SILoadStoreOptimizer: Add const to more functions
Tom Stellard [Thu, 19 Sep 2019 04:39:45 +0000 (04:39 +0000)]
AMDGPU/SILoadStoreOptimizer: Add const to more functions

Reviewers: arsenm, pendingchaos, rampitec, nhaehnle, vpykhtin

Subscribers: kzhuravl, jvesely, wdng, yaxunl, dstuttard, tpr, t-tye, hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 372298

4 years agoAMDGPU/GlobalISel: RegBankSelect llvm.amdgcn.ds.swizzle
Matt Arsenault [Thu, 19 Sep 2019 04:11:17 +0000 (04:11 +0000)]
AMDGPU/GlobalISel: RegBankSelect llvm.amdgcn.ds.swizzle

llvm-svn: 372297

4 years agoAMDGPU/GlobalISel: RegBankSelect tbuffer load/store
Matt Arsenault [Thu, 19 Sep 2019 04:11:12 +0000 (04:11 +0000)]
AMDGPU/GlobalISel: RegBankSelect tbuffer load/store

These have the same operand structure as the non-t buffer operations.

llvm-svn: 372296

4 years ago[CLANG][BPF] change __builtin_preserve_access_index() signature
Yonghong Song [Thu, 19 Sep 2019 02:59:43 +0000 (02:59 +0000)]
[CLANG][BPF] change __builtin_preserve_access_index() signature

The clang intrinsic __builtin_preserve_access_index() currently
has signature:
  const void * __builtin_preserve_access_index(const void * ptr)

This may cause compiler warning when:
  - parameter type is "volatile void *" or "const volatile void *", or
  - the assign-to type of the intrinsic does not have "const" qualifier.
Further, this signature does not allow dereference of the
builtin result pointer as it is a "const void *" type, which
adds extra step for the user to do type casting.

Let us change the signature to:
  PointerT __builtin_preserve_access_index(PointerT ptr)
such that the result and argument types are the same.
With this, directly dereferencing the builtin return value
becomes possible.

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

llvm-svn: 372294

4 years agoAMDGPU/GlobalISel: Select llvm.amdgcn.raw.buffer.store.format
Matt Arsenault [Thu, 19 Sep 2019 02:35:08 +0000 (02:35 +0000)]
AMDGPU/GlobalISel: Select llvm.amdgcn.raw.buffer.store.format

This needs special handling due to some subtargets that have a
nonstandard register layout for f16 vectors

Also reject some illegal types on other targets.

llvm-svn: 372293

4 years agoAMDGPU/GlobalISel: Select llvm.amdgcn.raw.buffer.store
Matt Arsenault [Thu, 19 Sep 2019 02:30:27 +0000 (02:30 +0000)]
AMDGPU/GlobalISel: Select llvm.amdgcn.raw.buffer.store

llvm-svn: 372292

4 years agoAMDGPU/GlobalISel: RegBankSelect struct buffer load/store
Matt Arsenault [Thu, 19 Sep 2019 02:26:53 +0000 (02:26 +0000)]
AMDGPU/GlobalISel: RegBankSelect struct buffer load/store

llvm-svn: 372291

4 years agoAMDGPU/GlobalISel: RegBankSelect llvm.amdgcn.raw.buffer.{load|store}
Matt Arsenault [Thu, 19 Sep 2019 02:25:09 +0000 (02:25 +0000)]
AMDGPU/GlobalISel: RegBankSelect llvm.amdgcn.raw.buffer.{load|store}

llvm-svn: 372290

4 years agoAMDGPU/GlobalISel: Attempt to RegBankSelect image intrinsics
Matt Arsenault [Thu, 19 Sep 2019 02:23:06 +0000 (02:23 +0000)]
AMDGPU/GlobalISel: Attempt to RegBankSelect image intrinsics

Images should always have 2 consecutive, mandatory SGPR arguments.

llvm-svn: 372289

4 years agoFix typo
Matt Arsenault [Thu, 19 Sep 2019 02:15:29 +0000 (02:15 +0000)]
Fix typo

llvm-svn: 372288

4 years agoMachineScheduler: Fix assert from not checking subregs
Matt Arsenault [Thu, 19 Sep 2019 02:14:12 +0000 (02:14 +0000)]
MachineScheduler: Fix assert from not checking subregs

The assert would fail if there was a dead def of a subregister if
there was a previous use of a different subregister.

llvm-svn: 372287

4 years agoAMDGPU/GlobalISel: Fix RegBankSelect G_SMULH/G_UMULH pre-gfx9
Matt Arsenault [Thu, 19 Sep 2019 01:42:34 +0000 (01:42 +0000)]
AMDGPU/GlobalISel: Fix RegBankSelect G_SMULH/G_UMULH pre-gfx9

The scalar versions were only introduced in gfx9.

llvm-svn: 372286

4 years agoGlobalISel: Don't materialize immarg arguments to intrinsics
Matt Arsenault [Thu, 19 Sep 2019 01:33:14 +0000 (01:33 +0000)]
GlobalISel: Don't materialize immarg arguments to intrinsics

Encode them directly as an imm argument to G_INTRINSIC*.

Since now intrinsics can now define what parameters are required to be
immediates, avoid using registers for them. Intrinsics could
potentially want a constant that isn't a legal register type. Also,
since G_CONSTANT is subject to CSE and legalization, transforms could
potentially obscure the value (and create extra work for the
selector). The register bank of a G_CONSTANT is also meaningful, so
this could throw off future folding and legalization logic for AMDGPU.

This will be much more convenient to work with than needing to call
getConstantVRegVal and checking if it may have failed for every
constant intrinsic parameter. AMDGPU has quite a lot of intrinsics wth
immarg operands, many of which need inspection during lowering. Having
to find the value in a register is going to add a lot of boilerplate
and waste compile time.

SelectionDAG has always provided TargetConstant for constants which
should not be legalized or materialized in a register. The distinction
between Constant and TargetConstant was somewhat fuzzy, and there was
no automatic way to force usage of TargetConstant for certain
intrinsic parameters. They were both ultimately ConstantSDNode, and it
was inconsistently used. It was quite easy to mis-select an
instruction requiring an immediate. For SelectionDAG, start emitting
TargetConstant for these arguments, and using timm to match them.

Most of the work here is to cleanup target handling of constants. Some
targets process intrinsics through intermediate custom nodes, which
need to preserve TargetConstant usage to match the intrinsic
expectation. Pattern inputs now need to distinguish whether a constant
is merely compatible with an operand or whether it is mandatory.

The GlobalISelEmitter needs to treat timm as a special case of a leaf
node, simlar to MachineBasicBlock operands. This should also enable
handling of patterns for some G_* instructions with immediates, like
G_FENCE or G_EXTRACT.

This does include a workaround for a crash in GlobalISelEmitter when
ARM tries to uses "imm" in an output with a "timm" pattern source.

llvm-svn: 372285

4 years ago[WebAssembly] Sort output data sections to place .bss last
Thomas Lively [Thu, 19 Sep 2019 01:14:59 +0000 (01:14 +0000)]
[WebAssembly] Sort output data sections to place .bss last

Summary:
This was always the intended behavior, but had not been
implemented. This ordering is important for Emscripten when generating
.mem files while compiling to JS, since only zeros at the end of
initialized memory can be dropped.

Fixes https://github.com/emscripten-core/emscripten/issues/8999

Reviewers: sbc100

Subscribers: dschuff, jgravelle-google, aheejin, sunfish, llvm-commits

Tags: #llvm

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

llvm-svn: 372284

4 years agogn build: Merge r372282
GN Sync Bot [Thu, 19 Sep 2019 01:03:39 +0000 (01:03 +0000)]
gn build: Merge r372282

llvm-svn: 372283

4 years agollvm-reduce: Add pass to reduce instructions
David Blaikie [Thu, 19 Sep 2019 00:59:27 +0000 (00:59 +0000)]
llvm-reduce: Add pass to reduce instructions

Patch by Diego Treviño!

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

llvm-svn: 372282

4 years agoInitialize all fields in ABIArgInfo.
Serge Guelton [Thu, 19 Sep 2019 00:54:40 +0000 (00:54 +0000)]
Initialize all fields in ABIArgInfo.

Due to usage of an uninitialized fields, we end up with
a Conditional jump or move depends on uninitialised value

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

Commited on behalf of Martin Liska <mliska@suse.cz>

llvm-svn: 372281

4 years agollvm-reduce: Avoid use-after-free when removing a branch instruction
David Blaikie [Thu, 19 Sep 2019 00:35:32 +0000 (00:35 +0000)]
llvm-reduce: Avoid use-after-free when removing a branch instruction

Found my msan buildbot & pointed out by Nico Weber - thanks Nico!

llvm-svn: 372280

4 years ago[Object] Extend MachOUniversalBinary::getObjectForArch
Alexander Shaposhnikov [Thu, 19 Sep 2019 00:02:12 +0000 (00:02 +0000)]
[Object] Extend MachOUniversalBinary::getObjectForArch

Make the method MachOUniversalBinary::getObjectForArch return MachOUniversalBinary::ObjectForArch
and add helper methods MachOUniversalBinary::getMachOObjectForArch, MachOUniversalBinary::getArchiveForArch
for those who explicitly expect to get a MachOObjectFile or an Archive.

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

Test plan: make check-all

llvm-svn: 372278

4 years ago[utils] Add minimal support for MIR inputs to update_llc_test_checks.py
Roman Tereshin [Wed, 18 Sep 2019 23:44:17 +0000 (23:44 +0000)]
[utils] Add minimal support for MIR inputs to update_llc_test_checks.py

update_{llc,mir}_test_checks.py applicability is determined by the
output (assembly or MIR), not the input, which makes
update_llc_test_checks.py the right tool to generate tests that start at
MIR and stop at the final assembly.

This commit adds the minimal support for this path. Main limitation that
remains:

- MIR has to have LLVM IR section, and the CHECK lines will be inserted
  into the LLVM IR functions that correspond to the MIR functions.

Running
  ../utils/update_llc_test_checks.py --llc-binary ./bin/llc
on a slightly modified  ../test/CodeGen/X86/bad-tls-fold.mir

produces the following diff:

+# NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+# RUN: llc %s -o - | FileCheck %s
 --- |
   target triple = "x86_64-unknown-linux-gnu"

@@ -6,17 +7,31 @@
   @i = external thread_local global i32

   define i32 @or() {
+  ; CHECK-LABEL: or:
+  ; CHECK:       # %bb.0: # %entry
+  ; CHECK-NEXT:    movq {{.*}}(%rip), %rax
+  ; CHECK-NEXT:    orq $7, %rax
+  ; CHECK-NEXT:    movq i@{{.*}}(%rip), %rcx
+  ; CHECK-NEXT:    orq %rax, %rcx
+  ; CHECK-NEXT:    movl %fs:(%rcx), %eax
+  ; CHECK-NEXT:    retq
   entry:
     ret i32 undef
   }
-
   define i32 @and() {
+  ; CHECK-LABEL: and:
+  ; CHECK:       # %bb.0: # %entry
+  ; CHECK-NEXT:    movq {{.*}}(%rip), %rax
+  ; CHECK-NEXT:    orq $7, %rax
+  ; CHECK-NEXT:    movq i@{{.*}}(%rip), %rcx
+  ; CHECK-NEXT:    andq %rax, %rcx
+  ; CHECK-NEXT:    movl %fs:(%rcx), %eax
+  ; CHECK-NEXT:    retq
   entry:
     ret i32 undef
   }
 ...

(not applied)

llvm-svn: 372277

4 years ago[utils] Amend update_llc_test_checks.py to non-llc tooling, NFC
Roman Tereshin [Wed, 18 Sep 2019 23:44:16 +0000 (23:44 +0000)]
[utils] Amend update_llc_test_checks.py to non-llc tooling, NFC

Very minor change aiming to make it easier to extend the script
downstream to support non-llc, but llc-like tools. The main objective is
to decrease the probability of merge conflicts.

llvm-svn: 372276

4 years ago[WebAssembly] Restore defaults for stores per memop
Thomas Lively [Wed, 18 Sep 2019 23:18:16 +0000 (23:18 +0000)]
[WebAssembly] Restore defaults for stores per memop

Summary:
Large slowdowns were observed in Rust due to many small, constant
sized copies in conjunction with poorly-optimized memory.copy
implementations. Since memory.copy cannot be expected to be inlined
efficiently by engines at this time, stop using it for the smallest
copies. We continue to lower all memcpy intrinsics to memory.copy,
though.

Reviewers: aheejin, alexcrichton

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

Tags: #llvm

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

llvm-svn: 372275

4 years ago[Docs] Moves topics to new categories
DeForest Richards [Wed, 18 Sep 2019 23:04:31 +0000 (23:04 +0000)]
[Docs] Moves topics to new categories

This commit moves several topics to new categories. It also removes a few duplicate links in Subsystem Documentation.

llvm-svn: 372274

4 years ago[AArch64][GlobalISel] Support lowering musttail calls
Jessica Paquette [Wed, 18 Sep 2019 22:42:25 +0000 (22:42 +0000)]
[AArch64][GlobalISel] Support lowering musttail calls

Since we now lower most tail calls, it makes sense to support musttail.

Instead of always falling back to SelectionDAG, only fall back when a musttail
call was not able to be emitted as a tail call. Once we can handle most
incoming and outgoing arguments, we can change this to a `report_fatal_error`
like in ISelLowering.

Remove the assert that we don't have varargs and a musttail, and replace it
with a return false. Implementing this requires that we implement
`saveVarArgRegisters` from AArch64ISelLowering, which is an entirely different
patch.

Add GlobalISel lines to vararg-tallcall.ll to make sure that we produce correct
code. Right now we only fall back, but eventually this will be relevant.

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

llvm-svn: 372273

4 years agoRemove the obsolete BlockByRefStruct flag from LLVM IR
Adrian Prantl [Wed, 18 Sep 2019 22:38:56 +0000 (22:38 +0000)]
Remove the obsolete BlockByRefStruct flag from LLVM IR

DIFlagBlockByRefStruct is an unused DIFlag that originally was used by
clang to express (Objective-)C block captures in debug info. For the
last year Clang has been emitting complex DIExpressions to describe
block captures instead, which makes all the code supporting this flag
redundant.

This patch removes the flag and all supporting "dead" code, so we can
reuse the bit for something else in the future.

Since this only affects debug info generated by Clang with the block
extension this mostly affects Apple platforms and I don't have any
bitcode compatibility concerns for removing this. The Verifier will
reject debug info that uses the bit and thus degrade gracefully when
LTO'ing older bitcode with a newer compiler.

rdar://problem/44304813

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

llvm-svn: 372272

4 years agollvm-reduce: Remove inaccurate doxy comment about a return that isn't returned
David Blaikie [Wed, 18 Sep 2019 22:38:05 +0000 (22:38 +0000)]
llvm-reduce: Remove inaccurate doxy comment about a return that isn't returned

Addressing post-commit code review feedback from Dávid Bolvanský -
thanks!

llvm-svn: 372271

4 years agollvm-reduce: Fix inconsistencies between int/unsigned usage (standardize on int)
David Blaikie [Wed, 18 Sep 2019 22:30:25 +0000 (22:30 +0000)]
llvm-reduce: Fix inconsistencies between int/unsigned usage (standardize on int)

llvm-svn: 372270

4 years ago[analyzer] PR43102: Fix an assertion and an out-of-bounds error for diagnostic locati...
Kristof Umann [Wed, 18 Sep 2019 22:24:26 +0000 (22:24 +0000)]
[analyzer] PR43102: Fix an assertion and an out-of-bounds error for diagnostic location construction

Summary:
https://bugs.llvm.org/show_bug.cgi?id=43102

In today's edition of "Is this any better now that it isn't crashing?", I'd like to show you a very interesting test case with loop widening.

Looking at the included test case, it's immediately obvious that this is not only a false positive, but also a very bad bug report in general. We can see how the analyzer mistakenly invalidated `b`, instead of its pointee, resulting in it reporting a null pointer dereference error. Not only that, the point at which this change of value is noted at is at the loop, rather then at the method call.

It turns out that `FindLastStoreVisitor` works correctly, rather the supplied explodedgraph is faulty, because `BlockEdge` really is the `ProgramPoint` where this happens.
{F9855739}
So it's fair to say that this needs improving on multiple fronts. In any case, at least the crash is gone.

Full ExplodedGraph: {F9855743}

Reviewers: NoQ, xazax.hun, baloghadamsoftware, Charusso, dcoughlin, rnkovacs, TWeaver

Subscribers: JesperAntonsson, uabelho, Ka-Ka, bjope, whisperity, szepet, a.sidorin, mikhail.ramalho, donat.nagy, dkrupp, gamesh411, cfe-commits

Tags: #clang

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

llvm-svn: 372269

4 years agogn build: Merge r372267
GN Sync Bot [Wed, 18 Sep 2019 22:21:52 +0000 (22:21 +0000)]
gn build: Merge r372267

llvm-svn: 372268

4 years agoAdd AutoUpgrade function to add new address space datalayout string to existing datal...
Amy Huang [Wed, 18 Sep 2019 22:15:58 +0000 (22:15 +0000)]
Add AutoUpgrade function to add new address space datalayout string to existing datalayouts.

Summary:
Add function to AutoUpgrade to change the datalayout of old X86 datalayout strings.
This adds "-p270:32:32-p271:32:32-p272:64:64" to X86 datalayouts that are otherwise valid
and don't already contain it.

This also removes the compatibility changes in https://reviews.llvm.org/D66843.
Datalayout change in https://reviews.llvm.org/D64931.

Reviewers: rnk, echristo

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 372267

4 years ago[lld][WebAssembly] Fix use after free of archive path
Sam Clegg [Wed, 18 Sep 2019 21:51:03 +0000 (21:51 +0000)]
[lld][WebAssembly] Fix use after free of archive path

This was fixed in the ELF backend in https://reviews.llvm.org/D34554.

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

llvm-svn: 372266

4 years agogn build: Merge r372264
GN Sync Bot [Wed, 18 Sep 2019 21:49:36 +0000 (21:49 +0000)]
gn build: Merge r372264

llvm-svn: 372265

4 years agollvm-reduce: Add pass to reduce basic blocks
David Blaikie [Wed, 18 Sep 2019 21:45:05 +0000 (21:45 +0000)]
llvm-reduce: Add pass to reduce basic blocks

Patch by Diego Treviño!

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

llvm-svn: 372264

4 years agofix build, adjust test also for Windows path separator
Lubos Lunak [Wed, 18 Sep 2019 21:41:45 +0000 (21:41 +0000)]
fix build, adjust test also for Windows path separator

Introduced in 1e9c1d2b7bfc.

llvm-svn: 372263

4 years ago[SimplifyCFG] mergeConditionalStoreToAddress(): try to pacify MSAN
Roman Lebedev [Wed, 18 Sep 2019 21:04:39 +0000 (21:04 +0000)]
[SimplifyCFG] mergeConditionalStoreToAddress(): try to pacify MSAN

MSAN bot complains that there is use-of-uninitialized-value
of this FreeStores later in IsWorthwhile().
Perhaps FreeStores needs to be stored in a vector?

llvm-svn: 372262

4 years agoOn PowerPC, Secure-PLT by default for FreeBSD 13 and higher
Dimitry Andric [Wed, 18 Sep 2019 20:58:03 +0000 (20:58 +0000)]
On PowerPC, Secure-PLT by default for FreeBSD 13 and higher

Summary:
In https://svnweb.freebsd.org/changeset/base/349351, FreeBSD 13 and
higher transitioned to Secure-PLT for PowerPC.  This part contains the
changes in clang's PPC architecture defaults.

Reviewers: emaste, jhibbits, hfinkel

Reviewed By: jhibbits

Subscribers: wuzish, nemanjai, krytarowski, kbarton, MaskRay, jsji, shchenz, steven.zhang, cfe-commits

Tags: #clang

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

llvm-svn: 372261

4 years agoOn PowerPC, Secure-PLT by default for FreeBSD 13 and higher
Dimitry Andric [Wed, 18 Sep 2019 20:57:45 +0000 (20:57 +0000)]
On PowerPC, Secure-PLT by default for FreeBSD 13 and higher

Summary:
In https://svnweb.freebsd.org/changeset/base/349351, FreeBSD 13 and
higher transitioned to Secure-PLT for PowerPC.  This part contains the
changes in llvm's PPC subtarget.

Reviewers: emaste, jhibbits, hfinkel

Reviewed By: jhibbits

Subscribers: wuzish, nemanjai, krytarowski, kbarton, MaskRay, jsji, shchenz, steven.zhang, llvm-commits

Tags: #llvm

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

llvm-svn: 372260

4 years ago[DAGCombine][ARM][X86] (sub Carry, X) -> (addcarry (sub 0, X), 0, Carry) fold
Roman Lebedev [Wed, 18 Sep 2019 20:48:27 +0000 (20:48 +0000)]
[DAGCombine][ARM][X86] (sub Carry, X)  ->  (addcarry (sub 0, X), 0, Carry)  fold

Summary:
`DAGCombiner::visitADDLikeCommutative()` already has a sibling fold:
`(add X, Carry) -> (addcarry X, 0, Carry)`

This fold, as suggested by @efriedma, helps recover from //some//
of the regressions of D62266

Reviewers: efriedma, deadalnix

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

Tags: #llvm

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

llvm-svn: 372259

4 years ago[CodeGen][X86][NFC] Tests for (sub Carry, X) -> (addcarry (sub 0, X), 0, Carry) fold...
Roman Lebedev [Wed, 18 Sep 2019 20:48:05 +0000 (20:48 +0000)]
[CodeGen][X86][NFC] Tests for (sub Carry, X) -> (addcarry (sub 0, X), 0, Carry) fold (D62392)

llvm-svn: 372258

4 years ago[InstCombine] foldUnsignedUnderflowCheck(): handle last few cases (PR43251)
Roman Lebedev [Wed, 18 Sep 2019 20:10:07 +0000 (20:10 +0000)]
[InstCombine] foldUnsignedUnderflowCheck(): handle last few cases (PR43251)

Summary:
I don't have a direct motivational case for this,
but it would be good to have this for completeness/symmetry.

This pattern is basically the motivational pattern from
https://bugs.llvm.org/show_bug.cgi?id=43251
but with different predicate that requires that the offset is non-zero.

The completeness bit comes from the fact that a similar pattern (offset != zero)
will be needed for https://bugs.llvm.org/show_bug.cgi?id=43259,
so it'd seem to be good to not overlook very similar patterns..

Proofs: https://rise4fun.com/Alive/21b

Also, there is something odd with `isKnownNonZero()`, if the non-zero
knowledge was specified as an assumption, it didn't pick it up (PR43267)

With this, i see no other missing folds for
https://bugs.llvm.org/show_bug.cgi?id=43251

Reviewers: spatel, nikic, xbolva00

Reviewed By: spatel

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 372257

4 years ago[AArch64] Don't implicitly enable global isel on Darwin if code-model==large.
Lang Hames [Wed, 18 Sep 2019 19:56:55 +0000 (19:56 +0000)]
[AArch64] Don't implicitly enable global isel on Darwin if code-model==large.

Summary:
AArch64 GlobalISel doesn't support MachO's large code model, so this patch
adds a check for that combination before implicitly enabling it.

Reviewers: paquette

Subscribers: kristof.beyls, ributzka, llvm-commits

Tags: #llvm

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

llvm-svn: 372256

4 years ago[SimplifyCFG] mergeConditionalStoreToAddress(): consider cost, not instruction count
Roman Lebedev [Wed, 18 Sep 2019 19:46:57 +0000 (19:46 +0000)]
[SimplifyCFG] mergeConditionalStoreToAddress(): consider cost, not instruction count

Summary:
As it can be see in the changed test, while `div` is really costly,
we were speculating it. This does not seem correct.

Also, the old code would run for every single insturuction in BB,
instead of eagerly bailing out as soon as there are too many instructions.

This function still has a problem that `PHINodeFoldingThreshold` is
per-basic-block, while it should be for all the basic blocks.

Reviewers: efriedma, craig.topper, dmgreen, jmolloy

Reviewed By: jmolloy

Subscribers: xbolva00, hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 372255

4 years ago[MIPS] For vectors, select `add %x, C` as `sub %x, -C` if it results in inline immediate
Roman Lebedev [Wed, 18 Sep 2019 19:34:41 +0000 (19:34 +0000)]
[MIPS] For vectors, select `add %x, C` as `sub %x, -C` if it results in inline immediate

Summary:
As discussed in https://reviews.llvm.org/D62341#1515637,
for MIPS `add %x, -1` isn't optimal. Unlike X86 there
are no fastpaths to matearialize such `-1`/`1` vector constants,
and `sub %x, 1` results in better codegen,
so undo canonicalization

Reviewers: atanasyan, Petar.Avramovic, RKSimon

Reviewed By: atanasyan

Subscribers: sdardis, arichardson, hiraditya, jrtc27, llvm-commits

Tags: #llvm

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

llvm-svn: 372254

4 years ago[CodeGen][MIPS][NFC] Some standalone tests for D66805 "or vectors, select `add %x...
Roman Lebedev [Wed, 18 Sep 2019 19:34:24 +0000 (19:34 +0000)]
[CodeGen][MIPS][NFC] Some standalone tests for D66805 "or vectors, select `add %x, C` as `sub %x, -C` if it results in inline immediate"

llvm-svn: 372253

4 years ago[OPENMP]Fix for PR43349: Crash for privatized loop bound.
Alexey Bataev [Wed, 18 Sep 2019 19:24:07 +0000 (19:24 +0000)]
[OPENMP]Fix for PR43349: Crash for privatized loop bound.

If the variable, used in the loop boundaries, is not captured in the
construct, this variable must be considered as undefined if it was
privatized.

llvm-svn: 372252

4 years ago[mips] Expand 'lw/sw' instructions for 32-bit GOT
Simon Atanasyan [Wed, 18 Sep 2019 19:19:47 +0000 (19:19 +0000)]
[mips] Expand 'lw/sw' instructions for 32-bit GOT

In case of using 32-bit GOT access to the table requires two instructions
with attached %got_hi and %got_lo relocations. This patch implements
correct expansion of 'lw/sw' instructions in that case.

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

llvm-svn: 372251

4 years agoactually also compile output in tests for -frewrite-includes
Lubos Lunak [Wed, 18 Sep 2019 19:12:14 +0000 (19:12 +0000)]
actually also compile output in tests for -frewrite-includes

Checking that the created output matches something is nice, but
this should also check whether the output makes sense.

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

llvm-svn: 372250

4 years ago[clang-format][PR41899] PointerAlignment: Left leads to useless space in lambda intia...
Paul Hoad [Wed, 18 Sep 2019 19:11:40 +0000 (19:11 +0000)]
[clang-format][PR41899] PointerAlignment: Left leads to useless space in lambda intializer expression

Summary:
https://bugs.llvm.org/show_bug.cgi?id=41899

```auto lambda = [&a = a]() { a = 2; };```

is formatted as

```auto lambda = [& a = a]() { a = 2; };```

With an extra space if PointerAlignment is set to Left

> The space "& a" looks strange when there is no type in the lambda's intializer expression. This can be worked around with by setting "PointerAlignment: Right", but ideally "PointerAlignment: Left" would not add a space in this case.

Reviewers: klimek, owenpan, krasimir, timwoj

Reviewed By: klimek

Subscribers: cfe-commits

Tags: #clang-tools-extra, #clang

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

llvm-svn: 372249

4 years agomake -frewrite-includes also rewrite conditions in #if/#elif
Lubos Lunak [Wed, 18 Sep 2019 19:09:41 +0000 (19:09 +0000)]
make -frewrite-includes also rewrite conditions in #if/#elif

Those conditions may use __has_include, which needs to be rewritten.
The existing code has already tried to rewrite just __has_include,
but it didn't work with macro expansion, so e.g. Qt's
"#define QT_HAS_INCLUDE(x) __has_include(x)" didn't get handled
properly. Since the preprocessor run knows what each condition evaluates
to, just rewrite the entire condition. This of course requires that
the -frewrite-include pass has the same setup as the following
compilation, but that has always been the requirement.

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

llvm-svn: 372248

4 years ago[Sema] Suppress -Wformat diagnostics for bool types when printed using %hhd
Erik Pilkington [Wed, 18 Sep 2019 19:05:14 +0000 (19:05 +0000)]
[Sema] Suppress -Wformat diagnostics for bool types when printed using %hhd

Also, add a diagnostic under -Wformat for printing a boolean value as a
character.

rdar://54579473

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

llvm-svn: 372247

4 years ago[clang-format][PR41964] Fix crash with SIGFPE when TabWidth is set to 0 and line...
Paul Hoad [Wed, 18 Sep 2019 18:57:09 +0000 (18:57 +0000)]
[clang-format][PR41964] Fix crash with SIGFPE when TabWidth is set to 0 and line starts with tab

Summary:
clang-format 8.0 crashes with SIGFPE (floating point exception) when formatting following file:
app.cpp:
void a() {
//line starts with '\t'
}

$ clang-format -style='{TabWidth: 0}' app.cpp

Reviewers: owenpan, klimek, russellmcc, timwoj

Reviewed By: klimek

Subscribers: cfe-commits

Tags: #clang-tools-extra, #clang

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

llvm-svn: 372246

4 years ago[InstCombine] dropRedundantMaskingOfLeftShiftInput(): some cleanup before upcoming...
Roman Lebedev [Wed, 18 Sep 2019 18:38:40 +0000 (18:38 +0000)]
[InstCombine] dropRedundantMaskingOfLeftShiftInput(): some cleanup before upcoming patch

llvm-svn: 372245

4 years ago[NFC][InstCombine] More tests for PR42563 "Dropping pointless masking before left...
Roman Lebedev [Wed, 18 Sep 2019 18:38:32 +0000 (18:38 +0000)]
[NFC][InstCombine] More tests for PR42563 "Dropping pointless masking before left shift"

For patterns c/d/e we too can deal with the pattern even if we can't
just drop the mask, we can just apply it afterwars:
   https://rise4fun.com/Alive/gslRa

llvm-svn: 372244

4 years agoFix compile-time regression caused by rL371928
Daniel Sanders [Wed, 18 Sep 2019 18:14:42 +0000 (18:14 +0000)]
Fix compile-time regression caused by rL371928

Summary:
Also fixup rL371928 for cases that occur on our out-of-tree backend

There were still quite a few intermediate APInts and this caused the
compile time of MCCodeEmitter for our target to jump from 16s up to
~5m40s. This patch, brings it back down to ~17s by eliminating pretty
much all of them using two new APInt functions (extractBitsAsZExtValue(),
insertBits() but with a uint64_t). The exact conditions for eliminating
them is that the field extracted/inserted must be <=64-bit which is
almost always true.

Note: The two new APInt API's assume that APInt::WordSize is at least
64-bit because that means they touch at most 2 APInt words. They
statically assert that's true. It seems very unlikely that someone
is patching it to be smaller so this should be fine.

Reviewers: jmolloy

Reviewed By: jmolloy

Subscribers: hiraditya, dexonsmith, llvm-commits

Tags: #llvm

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

llvm-svn: 372243

4 years agoRevert "Revert "Implement std::condition_variable via pthread_cond_clockwait() where...
Dan Albert [Wed, 18 Sep 2019 18:13:32 +0000 (18:13 +0000)]
Revert "Revert "Implement std::condition_variable via pthread_cond_clockwait() where available""

With the fix for non-Linux.

This reverts commit c1c519d2f1a66dd2eeaa4c321d8d7b50f623eb71.

llvm-svn: 372242

4 years ago[DDG] Break a cyclic dependency from Analysis to ScalarOpts
Benjamin Kramer [Wed, 18 Sep 2019 18:04:45 +0000 (18:04 +0000)]
[DDG] Break a cyclic dependency from Analysis to ScalarOpts

llvm-svn: 372240

4 years agogn build: Merge r372238
GN Sync Bot [Wed, 18 Sep 2019 17:48:49 +0000 (17:48 +0000)]
gn build: Merge r372238

llvm-svn: 372239

4 years agoData Dependence Graph Basics
Bardia Mahjour [Wed, 18 Sep 2019 17:43:45 +0000 (17:43 +0000)]
Data Dependence Graph Basics

Summary:
This is the first patch in a series of patches that will implement data dependence graph in LLVM. Many of the ideas used in this implementation are based on the following paper:
D. J. Kuck, R. H. Kuhn, D. A. Padua, B. Leasure, and M. Wolfe (1981). DEPENDENCE GRAPHS AND COMPILER OPTIMIZATIONS.
This patch contains support for a basic DDGs containing only atomic nodes (one node for each instruction). The edges are two fold: def-use edges and memory-dependence edges.
The implementation takes a list of basic-blocks and only considers dependencies among instructions in those basic blocks. Any dependencies coming into or going out of instructions that do not belong to those basic blocks are ignored.

The algorithm for building the graph involves the following steps in order:

  1. For each instruction in the range of basic blocks to consider, create an atomic node in the resulting graph.
  2. For each node in the graph establish def-use edges to/from other nodes in the graph.
  3. For each pair of nodes containing memory instruction(s) create memory edges between them. This part of the algorithm goes through the instructions in lexicographical order and creates edges in reverse order if the sink of the dependence occurs before the source of it.

Authored By: bmahjour

Reviewer: Meinersbur, fhahn, myhsu, xtian, dmgreen, kbarton, jdoerfert

Reviewed By: Meinersbur, fhahn, myhsu

Subscribers: ychen, arphaman, simoll, a.elovikov, mgorny, hiraditya, jfb, wuzish, llvm-commits, jsji, Whitney, etiotto

Tag: #llvm

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

llvm-svn: 372238

4 years ago[c++20] P1331R2: Allow transient use of uninitialized objects in
Richard Smith [Wed, 18 Sep 2019 17:37:44 +0000 (17:37 +0000)]
[c++20] P1331R2: Allow transient use of uninitialized objects in
constant evaluation.

llvm-svn: 372237

4 years ago[InstSimplify] add tests for fma/fmuladd; NFC
Sanjay Patel [Wed, 18 Sep 2019 17:27:02 +0000 (17:27 +0000)]
[InstSimplify] add tests for fma/fmuladd; NFC

llvm-svn: 372236

4 years ago[OPENMP5.0]Allow multiple context selectors in the context selector
Alexey Bataev [Wed, 18 Sep 2019 16:24:31 +0000 (16:24 +0000)]
[OPENMP5.0]Allow multiple context selectors in the context selector
sets.

According to OpenMP 5.0, context selector set might include several
context selectors, separated with commas. Patch fixes this problem.

llvm-svn: 372235

4 years ago[Alignment][NFC] Align(1) to Align::None() conversions
Guillaume Chatelet [Wed, 18 Sep 2019 16:19:40 +0000 (16:19 +0000)]
[Alignment][NFC] Align(1) to Align::None() conversions

Summary:
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790

Reviewers: courbet

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 372234

4 years agounwind: remove a could of extraneous `else` (NFC)
Saleem Abdulrasool [Wed, 18 Sep 2019 16:15:56 +0000 (16:15 +0000)]
unwind: remove a could of extraneous `else` (NFC)

Simplify `if return else return` by removing the unnecessary `else`.

llvm-svn: 372233

4 years ago[SampleFDO] Minimize performance impact when profile-sample-accurate
Wei Mi [Wed, 18 Sep 2019 16:06:28 +0000 (16:06 +0000)]
[SampleFDO] Minimize performance impact when profile-sample-accurate
is enabled.

We can save memory and reduce binary size significantly by enabling
ProfileSampleAccurate. However when ProfileSampleAccurate is true,
function without sample will be regarded as cold and this could
potentially cause performance regression.

To minimize the potential negative performance impact, we want to be
a little conservative here saying if a function shows up in the profile,
no matter as outline instance, inline instance or call targets, treat
the function as not being cold. This will handle the cases such as most
callsites of a function are inlined in sampled binary (thus outline copy
don't get any sample) but not inlined in current build (because of source
code drift, imprecise debug information, or the callsites are all cold
individually but not cold accumulatively...), so that the outline function
showing up as cold in sampled binary will actually not be cold after current
build. After the change, such function will be treated as not cold even
profile-sample-accurate is enabled.

At the same time we lower the hot criteria of callsiteIsHot check when
profile-sample-accurate is enabled. callsiteIsHot is used to determined
whether a callsite is hot and qualified for early inlining. When
profile-sample-accurate is enabled, functions without profile will be
regarded as cold and much less inlining will happen in CGSCC inlining pass,
so we can worry less about size increase and be aggressive to allow more
early inlining to happen for warm callsites and it is helpful for performance
overall.

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

llvm-svn: 372232

4 years ago[Alignment][NFC] Remove LogAlignment functions
Guillaume Chatelet [Wed, 18 Sep 2019 15:49:49 +0000 (15:49 +0000)]
[Alignment][NFC] Remove LogAlignment functions

Summary:
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790

Reviewers: courbet

Subscribers: arsenm, sdardis, nemanjai, jvesely, nhaehnle, hiraditya, kbarton, jrtc27, MaskRay, atanasyan, jsji, llvm-commits

Tags: #llvm

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

llvm-svn: 372231

4 years ago[Alignment][NFC] Use Align::None instead of 1
Guillaume Chatelet [Wed, 18 Sep 2019 15:40:20 +0000 (15:40 +0000)]
[Alignment][NFC] Use Align::None instead of 1

Summary:
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790

Reviewers: courbet

Subscribers: sdardis, nemanjai, hiraditya, kbarton, jrtc27, MaskRay, atanasyan, jsji, llvm-commits

Tags: #llvm

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

llvm-svn: 372230

4 years agoRecommit -r372180
Erich Keane [Wed, 18 Sep 2019 15:09:49 +0000 (15:09 +0000)]
Recommit -r372180

Commit message below, original caused the sphinx build bot to fail, this
one should fix it.

Create UsersManual section entitled 'Controlling Floating Point
Behavior'

Create a new section for documenting the floating point options. Move
all the floating point options into this section, and add new entries
for the floating point options that exist but weren't previously
described in the UsersManual.

Patch By: mibintc
Differential Revision: https://reviews.llvm.org/D67517

llvm-svn: 372229

4 years agoRevert "[AArch64][DebugInfo] Do not recompute CalleeSavedStackSize"
Krasimir Georgiev [Wed, 18 Sep 2019 14:42:09 +0000 (14:42 +0000)]
Revert "[AArch64][DebugInfo] Do not recompute CalleeSavedStackSize"

Summary:
This reverts commit r372204.

This change causes build bot failures under msan:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/35236/steps/check-llvm%20msan/logs/stdio:

```
FAIL: LLVM :: DebugInfo/AArch64/asan-stack-vars.mir (19531 of 33579)
******************** TEST 'LLVM :: DebugInfo/AArch64/asan-stack-vars.mir' FAILED ********************
Script:
--
: 'RUN: at line 1';   /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/llc -O0 -start-before=livedebugvalues -filetype=obj -o - /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/test/DebugInfo/AArch64/asan-stack-vars.mir | /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/llvm-dwarfdump -v - | /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/FileCheck /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/test/DebugInfo/AArch64/asan-stack-vars.mir
--
Exit Code: 2

Command Output (stderr):
--
==62894==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0xdfcafb in llvm::AArch64FrameLowering::resolveFrameOffsetReference(llvm::MachineFunction const&, int, bool, unsigned int&, bool, bool) const /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp:1658:3
    #1 0xdfae8a in resolveFrameIndexReference /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp:1580:10
    #2 0xdfae8a in llvm::AArch64FrameLowering::getFrameIndexReference(llvm::MachineFunction const&, int, unsigned int&) const /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp:1536
    #3 0x46642c1 in (anonymous namespace)::LiveDebugValues::extractSpillBaseRegAndOffset(llvm::MachineInstr const&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/LiveDebugValues.cpp:582:21
    #4 0x4647cb3 in transferSpillOrRestoreInst /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/LiveDebugValues.cpp:883:11
    #5 0x4647cb3 in process /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/LiveDebugValues.cpp:1079
    #6 0x4647cb3 in (anonymous namespace)::LiveDebugValues::ExtendRanges(llvm::MachineFunction&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/LiveDebugValues.cpp:1361
    #7 0x463ac0e in (anonymous namespace)::LiveDebugValues::runOnMachineFunction(llvm::MachineFunction&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/LiveDebugValues.cpp:1415:18
    #8 0x4854ef0 in llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:73:13
    #9 0x53b0b01 in llvm::FPPassManager::runOnFunction(llvm::Function&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1648:27
    #10 0x53b15f6 in llvm::FPPassManager::runOnModule(llvm::Module&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1685:16
    #11 0x53b298d in runOnModule /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1750:27
    #12 0x53b298d in llvm::legacy::PassManagerImpl::run(llvm::Module&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1863
    #13 0x905f21 in compileModule(char**, llvm::LLVMContext&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/tools/llc/llc.cpp:601:8
    #14 0x8fdc4e in main /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/tools/llc/llc.cpp:355:22
    #15 0x7f67673632e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
    #16 0x882369 in _start (/b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/llc+0x882369)

MemorySanitizer: use-of-uninitialized-value /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp:1658:3 in llvm::AArch64FrameLowering::resolveFrameOffsetReference(llvm::MachineFunction const&, int, bool, unsigned int&, bool, bool) const
Exiting
error: -: The file was not recognized as a valid object file
FileCheck error: '-' is empty.
FileCheck command line:  /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/FileCheck /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/test/DebugInfo/AArch64/asan-stack-vars.mir
```

Reviewers: bkramer

Reviewed By: bkramer

Subscribers: sdardis, aprantl, kristof.beyls, jrtc27, atanasyan, llvm-commits

Tags: #llvm

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

llvm-svn: 372228

4 years ago[SimplifyLibCalls] fix crash with empty function name (PR43347)
Sanjay Patel [Wed, 18 Sep 2019 14:33:40 +0000 (14:33 +0000)]
[SimplifyLibCalls] fix crash with empty function name (PR43347)

...and improve some variable names while here.

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

llvm-svn: 372227

4 years agoFollow-up to r372209: Use single quotes for host_ldflags in the lit config
Hans Wennborg [Wed, 18 Sep 2019 14:12:59 +0000 (14:12 +0000)]
Follow-up to r372209: Use single quotes for host_ldflags in the lit config

HOST_LDFLAGS is now using double quotes, and that would break the lit
config file.

llvm-svn: 372226

4 years agoRevert r372082 "[Clang] Pragma vectorize_width() implies vectorize(enable)"
Hans Wennborg [Wed, 18 Sep 2019 13:41:51 +0000 (13:41 +0000)]
Revert r372082 "[Clang] Pragma vectorize_width() implies vectorize(enable)"

This broke the Chromium build. Consider the following code:

  float ScaleSumSamples_C(const float* src, float* dst, float scale, int width) {
    float fsum = 0.f;
    int i;
  #if defined(__clang__)
  #pragma clang loop vectorize_width(4)
  #endif
    for (i = 0; i < width; ++i) {
      float v = *src++;
      fsum += v * v;
      *dst++ = v * scale;
    }
    return fsum;
  }

Compiling at -Oz, Clang  now warns:

  $ clang++ -target x86_64 -Oz -c /tmp/a.cc
  /tmp/a.cc:1:7: warning: loop not vectorized: the optimizer was unable to
  perform the requested transformation; the transformation might be disabled or
  specified as part of an unsupported transformation ordering
  [-Wpass-failed=transform-warning]

this suggests it's not actually enabling vectorization hard enough.

At -Os it asserts instead:

  $ build.release/bin/clang++ -target x86_64 -Os -c /tmp/a.cc
  clang-10: /work/llvm.monorepo/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:2734: void
  llvm::InnerLoopVectorizer::emitMemRuntimeChecks(llvm::Loop*, llvm::BasicBlock*): Assertion `
  !BB->getParent()->hasOptSize() && "Cannot emit memory checks when optimizing for size"' failed.

Of course neither of these are what the developer expected from the pragma.

> Specifying the vectorization width was supposed to implicitly enable
> vectorization, except that it wasn't really doing this. It was only
> setting the vectorize.width metadata, but not vectorize.enable.
>
> This should fix PR27643.
>
> Differential Revision: https://reviews.llvm.org/D66290

llvm-svn: 372225

4 years agoFir TestAPILog for gcc
Pavel Labath [Wed, 18 Sep 2019 13:41:50 +0000 (13:41 +0000)]
Fir TestAPILog for gcc

different compilers will put different things into __PRETTY_FUNCTION__.
For instance gcc will not put a " " in the "const char *" argument,
causing our regex matching to fail.

This patch relaxes the regexes in this test to account for this
difference.

llvm-svn: 372224

4 years ago[SDA] Don't stop divergence propagation at the IPD.
Jay Foad [Wed, 18 Sep 2019 13:40:22 +0000 (13:40 +0000)]
[SDA] Don't stop divergence propagation at the IPD.

Summary:
This fixes B42473 and B42706.

This patch makes the SDA propagate branch divergence until the end of the RPO traversal. Before, the SyncDependenceAnalysis propagated divergence only until the IPD in rpo order. RPO is incompatible with post dominance in the presence of loops. This made the SDA crash because blocks were missed in the propagation.

Reviewers: foad, nhaehnle

Reviewed By: foad

Subscribers: jvesely, llvm-commits

Tags: #llvm

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

llvm-svn: 372223

4 years agoFix command-script-import.test on linux
Pavel Labath [Wed, 18 Sep 2019 12:58:52 +0000 (12:58 +0000)]
Fix command-script-import.test on linux

The test was expecting the value of "lldb.frame" to be None, because it
is cleared after each python interpreter session. However, this is not
true in the very first session, because lldb.py sets these values to
invalid objects (lldb.SBFrame(), etc.).

I have not investigated why is it that this test passes on darwin, but
my guess is that this is because we do extra work on darwin (loading the
objc runtime, etc), which causes us to enter the python interpreter
sooner.

This patch changes lldb.py to also initialize these values to None, as
that seems to make more sense. I also fixed some typos in the test while
I was in there.

llvm-svn: 372222

4 years ago[lldb] Fix a test assertion after r372192
Krasimir Georgiev [Wed, 18 Sep 2019 12:41:17 +0000 (12:41 +0000)]
[lldb] Fix a test assertion after r372192

Summary:
The `CHECK: frame:py: None` seems to have been a typo, causing build bot failures:

```
# CHECK: frame:py: None

         ^

<stdin>:1:1: note: scanning from here

(lldb) command source -s 0 'E:/build_slave/lldb-x64-windows-ninja/build/tools/lldb\lit\lit-lldb-init'

^

<stdin>:23:1: note: possible intended match here

frame:py: No value

^
```

This update fixes the build bots.

--

Reviewers: bkramer

Reviewed By: bkramer

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

llvm-svn: 372221

4 years ago[mips] Pass "xgot" flag as a subtarget feature
Simon Atanasyan [Wed, 18 Sep 2019 12:24:57 +0000 (12:24 +0000)]
[mips] Pass "xgot" flag as a subtarget feature

We need "xgot" flag in the MipsAsmParser to implement correct expansion
of some pseudo instructions in case of using 32-bit GOT (XGOT).
MipsAsmParser does not have reference to MipsSubtarget but has a
reference to "feature bit set".

llvm-svn: 372220

4 years ago[mips] Mark tests for lw/sw expansion in PIC by a separate "check prefix". NFC
Simon Atanasyan [Wed, 18 Sep 2019 12:24:30 +0000 (12:24 +0000)]
[mips] Mark tests for lw/sw expansion in PIC by a separate "check prefix". NFC

That simplify adding XGOT tests later.

llvm-svn: 372219

4 years ago[mips] Reduce code duplication in the `loadAndAddSymbolAddress`. NFC
Simon Atanasyan [Wed, 18 Sep 2019 12:24:23 +0000 (12:24 +0000)]
[mips] Reduce code duplication in the `loadAndAddSymbolAddress`. NFC

llvm-svn: 372218

4 years ago[AST] CommentLexer - Remove (optional) Invalid parameter from getSpelling.
Simon Pilgrim [Wed, 18 Sep 2019 12:11:16 +0000 (12:11 +0000)]
[AST] CommentLexer - Remove (optional) Invalid parameter from getSpelling.

The static analyzer noticed that we were dereferencing it even when the default null value was being used. Further investigation showed that we never explicitly set the parameter so I've just removed it entirely.

llvm-svn: 372217

4 years agoFix -Wdocumentation warning. NFCI.
Simon Pilgrim [Wed, 18 Sep 2019 11:22:22 +0000 (11:22 +0000)]
Fix -Wdocumentation warning. NFCI.

llvm-svn: 372215

4 years agoFix -Wdocumentation "empty paragraph passed to '\brief'" warning. NFCI.
Simon Pilgrim [Wed, 18 Sep 2019 10:41:20 +0000 (10:41 +0000)]
Fix -Wdocumentation "empty paragraph passed to '\brief'" warning. NFCI.

llvm-svn: 372214

4 years ago[lldb][CMake] Build LLDB.framework with -Wdocumentation in Xcode
Stefan Granitz [Wed, 18 Sep 2019 10:41:13 +0000 (10:41 +0000)]
[lldb][CMake] Build LLDB.framework with -Wdocumentation in Xcode

llvm-svn: 372213

4 years agoFix -Wdocumentation "@returns in a void function" warning. NFCI.
Simon Pilgrim [Wed, 18 Sep 2019 10:39:16 +0000 (10:39 +0000)]
Fix -Wdocumentation "@returns in a void function" warning. NFCI.

llvm-svn: 372212

4 years agoFix -Wdocumentation "Unknown param" warning. NFCI.
Simon Pilgrim [Wed, 18 Sep 2019 10:37:53 +0000 (10:37 +0000)]
Fix -Wdocumentation "Unknown param" warning. NFCI.

llvm-svn: 372211

4 years ago[lldb][CMake] Infer `Clang_DIR` if not passed explicitly
Stefan Granitz [Wed, 18 Sep 2019 10:20:28 +0000 (10:20 +0000)]
[lldb][CMake] Infer `Clang_DIR` if not passed explicitly

Summary:
If we only get `LLVM_DIR` and find Clang in the same provided build-tree, automatically infer `Clang_DIR` like this:

```
LLVM_DIR = /path/to/build-llvm/lib/cmake/llvm
Clang_DIR = /paht/to/build-llvm/lib/cmake/clang
```

Reviewers: JDevlieghere, jingham, xiaobai, compnerd, labath

Reviewed By: JDevlieghere, labath

Subscribers: mgorny, lldb-commits, #lldb

Tags: #lldb

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

llvm-svn: 372210

4 years ago[cmake] Changes to get Windows self-host working with PGO
Russell Gallop [Wed, 18 Sep 2019 09:43:13 +0000 (09:43 +0000)]
[cmake] Changes to get Windows self-host working with PGO

Fixes quoting of profile arguments to work on Windows
Suppresses adding profile arguments to linker flags when using lld-link
Avoids -fprofile-instr-use being added to rc.exe flags
Removes duplicated adding of -fprofile-instr-use to linker flags (since
r355541)
Move handling LLVM_PROFDATA_FILE to HandleLLVMOptions.cmake

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

llvm-svn: 372209

4 years ago[AMDGPU] Allow FP inline constant in v_madak_f16 and v_fmaak_f16
Tim Renouf [Wed, 18 Sep 2019 09:32:06 +0000 (09:32 +0000)]
[AMDGPU] Allow FP inline constant in v_madak_f16 and v_fmaak_f16

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

Change-Id: Ic38f47cb2079c2c1070a441b5943854844d80a7c
llvm-svn: 372208

4 years ago[Alignment] Add a None() member function
Guillaume Chatelet [Wed, 18 Sep 2019 09:24:40 +0000 (09:24 +0000)]
[Alignment] Add a None() member function

Summary:
This will allow writing `if(A != llvm::Align::None())` which is clearer than `if(A > llvm::Align(1))`

This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790

Reviewers: courbet

Subscribers: llvm-commits

Tags: #llvm

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

llvm-svn: 372207

4 years ago[clang-tidy] Fix a potential infinite loop in readability-isolate-declaration check.
Haojian Wu [Wed, 18 Sep 2019 09:21:35 +0000 (09:21 +0000)]
[clang-tidy] Fix a potential infinite loop in readability-isolate-declaration check.

Reviewers: ilya-biryukov

Subscribers: xazax.hun, cfe-commits

Tags: #clang

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

llvm-svn: 372206

4 years agotsan: allow the Go runtime to return multiple stack frames for a single PC
Dmitry Vyukov [Wed, 18 Sep 2019 09:18:04 +0000 (09:18 +0000)]
tsan: allow the Go runtime to return multiple stack frames for a single PC

This fix allows tsan to report stack traces correctly even in the
presence of mid-stack inlining by the Go compiler.

See https://go-review.googlesource.com/c/go/+/195781 for the Go runtime side of this change.

Author: randall77 (Keith Randall)
Reviewed: https://reviews.llvm.org/D67671
llvm-svn: 372205

4 years ago[AArch64][DebugInfo] Do not recompute CalleeSavedStackSize
Sander de Smalen [Wed, 18 Sep 2019 09:02:44 +0000 (09:02 +0000)]
[AArch64][DebugInfo] Do not recompute CalleeSavedStackSize

This patch fixes a bug exposed by D65653 where a subsequent invocation
of `determineCalleeSaves` ends up with a different size for the callee
save area, leading to different frame-offsets in debug information.

In the invocation by PEI, `determineCalleeSaves` tries to determine
whether it needs to spill an extra callee-saved register to get an
emergency spill slot. To do this, it calls 'estimateStackSize' and
manually adds the size of the callee-saves to this. PEI then allocates
the spill objects for the callee saves and the remaining frame layout
is calculated accordingly.

A second invocation in LiveDebugValues causes estimateStackSize to return
the size of the stack frame including the callee-saves. Given that the
size of the callee-saves is added to this, these callee-saves are counted
twice, which leads `determineCalleeSaves` to believe the stack has
become big enough to require spilling an extra callee-save as emergency
spillslot. It then updates CalleeSavedStackSize with a larger value.

Since CalleeSavedStackSize is used in the calculation of the frame
offset in getFrameIndexReference, this leads to incorrect offsets for
variables/locals when this information is recalculated after PEI.

Reviewers: omjavaid, eli.friedman, thegameg, efriedma

Reviewed By: efriedma

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

llvm-svn: 372204

4 years ago[lldb] Print better diagnostics for user expressions and modules
Raphael Isemann [Wed, 18 Sep 2019 08:53:35 +0000 (08:53 +0000)]
[lldb] Print better diagnostics for user expressions and modules

Summary:
Currently our expression evaluators only prints very basic errors that are not very useful when writing complex expressions.

For example, in the expression below the user made a type error, but it's not clear from the diagnostic what went wrong:
```
(lldb) expr printf("Modulos are:", foobar%mo1, foobar%mo2, foobar%mo3)
error: invalid operands to binary expression ('int' and 'double')
```

This patch enables full Clang diagnostics in our expression evaluator. After this patch the diagnostics for the expression look like this:

```
(lldb) expr printf("Modulos are:", foobar%mo1, foobar%mo2, foobar%mo3)
error: <user expression 1>:1:54: invalid operands to binary expression ('int' and 'float')
printf("Modulos are:", foobar%mo1, foobar%mo2, foobar%mo3)
                                               ~~~~~~^~~~
```

To make this possible, we now emulate a user expression file within our diagnostics. This prevents that the user is exposed to
our internal wrapper code we inject.

Note that the diagnostics that refer to declarations from the debug information (e.g. 'note' diagnostics pointing to a called function)
will not be improved by this as they don't have any source locations associated with them, so caret or line printing isn't possible.
We instead just suppress these diagnostics as we already do with warnings as they would otherwise just be a context message
without any context (and the original diagnostic in the user expression should be enough to explain the issue).

Fixes rdar://24306342

Reviewers: JDevlieghere, aprantl, shafik, #lldb

Reviewed By: JDevlieghere, #lldb

Subscribers: usaxena95, davide, jingham, aprantl, arphaman, kadircet, lldb-commits

Tags: #lldb

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

llvm-svn: 372203

4 years agoRevert "r372201: [Support] Replace function with function_ref in writeFileAtomically...
Ilya Biryukov [Wed, 18 Sep 2019 08:47:09 +0000 (08:47 +0000)]
Revert "r372201: [Support] Replace function with function_ref in writeFileAtomically. NFC"

function_ref causes calls to the function to be ambiguous, breaking
compilation.

Reverting for now.

llvm-svn: 372202

4 years ago[Support] Replace function with function_ref in writeFileAtomically. NFC
Ilya Biryukov [Wed, 18 Sep 2019 08:31:28 +0000 (08:31 +0000)]
[Support] Replace function with function_ref in writeFileAtomically. NFC

Summary:
The latter is slightly more efficient and communicates the intent of the
API: writeFileAtomically does not own or copy the callback, it merely
calls it at some point.

Reviewers: jkorous

Reviewed By: jkorous

Subscribers: hiraditya, dexonsmith, jfb, llvm-commits, cfe-commits

Tags: #llvm

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

llvm-svn: 372201

4 years ago[X86] Break non-power of 2 vXi1 vectors into scalars for argument passing with avx512.
Craig Topper [Wed, 18 Sep 2019 06:06:11 +0000 (06:06 +0000)]
[X86] Break non-power of 2 vXi1 vectors into scalars for argument passing with avx512.

This generates worse code, but matches what is done for avx2 and
prevents crashes when more arguments are passed than we have
registers for.

llvm-svn: 372200

4 years ago[X86] Add test case for passing a v17i1 vector with avx512
Craig Topper [Wed, 18 Sep 2019 06:06:07 +0000 (06:06 +0000)]
[X86] Add test case for passing a v17i1 vector with avx512

llvm-svn: 372199

4 years ago[BPF] Permit all user instructed offset relocatiions
Yonghong Song [Wed, 18 Sep 2019 03:49:07 +0000 (03:49 +0000)]
[BPF] Permit all user instructed offset relocatiions

Currently, not all user specified relocations
(with clang intrinsic __builtin_preserve_access_index())
will turn into relocations.

In the current implementation, a __builtin_preserve_access_index()
chain is turned into relocation only if the result of the clang
intrinsic is used in a function call or a nonzero offset computation
of getelementptr. For all other cases, the relocatiion request
is ignored and the __builtin_preserve_access_index() is turned
into regular getelementptr instructions.
The main reason is to mimic bpf_probe_read() requirement.

But there are other use cases where relocatable offset is
generated but not used for bpf_probe_read(). This patch
relaxed previous constraints when to generate relocations.
Now, all user __builtin_preserve_access_index() will have
relocations generated.

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

llvm-svn: 372198

4 years ago[X86] Prevent assertion when calling a function that returns double with -mno-sse2...
Craig Topper [Wed, 18 Sep 2019 01:57:46 +0000 (01:57 +0000)]
[X86] Prevent assertion when calling a function that returns double with -mno-sse2 on x86-64.

As seen in the most recent updates to PR10498

llvm-svn: 372197

4 years agoClean up this test.
Jim Ingham [Wed, 18 Sep 2019 01:53:52 +0000 (01:53 +0000)]
Clean up this test.

I don't know what the intent of parts of this test were.  We set a
bunch of breakpoints and ran from one to the other, doing "self.runCmd("thread backtrace")"
then continuing to the next one.  We didn't actually verify the contents of the backtrace,
nor that we hit the breakpoints we set in any particular order.  The only actual test was
to run sel_getName at two of these stops.

So I reduced the test to just stopping at the places where we were actually going to run
an expression, and tested the expression.

llvm-svn: 372196

4 years ago[Remarks] Allow the RemarkStreamer to be used directly with a stream
Francis Visoiu Mistrih [Wed, 18 Sep 2019 01:04:45 +0000 (01:04 +0000)]
[Remarks] Allow the RemarkStreamer to be used directly with a stream

The filename in the RemarkStreamer should be optional to allow clients
to stream remarks to memory or to existing streams.

This introduces a new overload of `setupOptimizationRemarks`, and avoids
enforcing the presence of a filename at different places.

llvm-svn: 372195