platform/upstream/llvm.git
3 years agoChange ASM Op printer to print the operation name in the framework instead of leaving...
Mehdi Amini [Sat, 28 Aug 2021 03:03:15 +0000 (03:03 +0000)]
Change ASM Op printer to print the operation name in the framework instead of leaving it up to each individual operation

This aligns the printer with the parser contract: the operation isn't part of the user-controllable part of the syntax.

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

3 years agoChange dialect `printOperation()` hook to `getOperationPrinter()`
Mehdi Amini [Sat, 28 Aug 2021 03:02:55 +0000 (03:02 +0000)]
Change dialect `printOperation()` hook to `getOperationPrinter()`

This makes the hook return a printer if available, instead of using LogicalResult  to
indicate if a printer was available (and invoked). This allows the caller to detect that
the dialect has a printer for a given operation without actually invoking the printer.
It'll be leveraged in a future revision to move printing the op name itself under control
of the ASMPrinter.

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

3 years ago[flang] Fold PACK()
peter klausler [Wed, 25 Aug 2021 22:50:34 +0000 (15:50 -0700)]
[flang] Fold PACK()

Implement compile-time constant folding for the transformational
intrinsic function PACK.

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

3 years ago[profile] Specify "-V" to otool to get expected test output
Vedant Kumar [Tue, 31 Aug 2021 17:49:27 +0000 (10:49 -0700)]
[profile] Specify "-V" to otool to get expected test output

Newer Xcode toolchains ship a new otool implementation that prints out
section contents in a slightly different way than otool-classic. Specify
"-V" to otool to get the expected test output.

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

3 years ago[AMDGPU] Enable ds_min/ds_max on more subtargets
Joe Nash [Tue, 31 Aug 2021 13:03:12 +0000 (09:03 -0400)]
[AMDGPU] Enable ds_min/ds_max on more subtargets

Adds patterns for f64 ds_min/ds_max. Shrinks HasLDSFPAtomics
scope to enable f32.

Reviewed By: rampitec

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

Change-Id: Id890b677841ee588b20d42b1bb3f4cdbf6e9ba1a

3 years ago[GlobalISel] Don't use G_FPTOSI in G_ISNAN legalization
Jessica Paquette [Tue, 31 Aug 2021 17:23:17 +0000 (10:23 -0700)]
[GlobalISel] Don't use G_FPTOSI in G_ISNAN legalization

As noted in the comments in D108227, using G_FPTOSI produces wrong results for
G_ISNAN. Drop the G_FPTOSI and perform the operation on integer types.

Elsewhere in LLVM, a bitcast would be the appropriate choice (as it is in SDAG).
GlobalISel does not distinguish between integer and FP types, so a bitcast would
be meaningless here.

3 years ago[ARM] Add missing validForTailPredication for VMINNM/VMAXNM
David Green [Tue, 31 Aug 2021 17:19:03 +0000 (18:19 +0100)]
[ARM] Add missing validForTailPredication for VMINNM/VMAXNM

Apparently this was missing, preventing the generation of tail
predication loops containing VMINNM, VMAXNM, VMINNMA and VMAXNMA.

3 years ago[ARM] Test for VMINNM/VMAXNM in tail predicated loops.
David Green [Tue, 31 Aug 2021 13:24:08 +0000 (14:24 +0100)]
[ARM] Test for VMINNM/VMAXNM in tail predicated loops.

3 years ago[lldb] Don't save empty expressions in the multiline editor history
Raphael Isemann [Tue, 31 Aug 2021 16:12:51 +0000 (18:12 +0200)]
[lldb] Don't save empty expressions in the multiline editor history

Right now running `expr` to start the multiline expression editor and then
pressing enter causes an empty history empty to be created for the multiline
editor. That doesn't seem very useful for users as pressing the 'up' key will
now also bring up these empty expressions.

I don't think there is ever a use case for recalling a completely empty
expression from the history, so instead don't save those entries to the history
file and make sure we never recall them when navigating over the expression
history.

Note: This is actually a Swift downstream patch that got shipped with Apple's
LLDB for many years. However, this recently started conflicting with upstream
LLDB as D100048 added a test that made sure that empty expression entries don't
crash LLDB. Apple's LLDB was never affected by this crash as it never saved
empty expressions in the first place.

Reviewed By: augusto2112

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

3 years ago[gn build] Port e983a659e51c
LLVM GN Syncbot [Tue, 31 Aug 2021 16:45:24 +0000 (16:45 +0000)]
[gn build] Port e983a659e51c

3 years ago[libc++][NFC] split <charconv>.
Mark de Wever [Mon, 30 Aug 2021 17:47:55 +0000 (19:47 +0200)]
[libc++][NFC] split <charconv>.

This move the helper types `chars_format`, `to_chars_result` and
`from_chars_result` to a separate header. The first two are needed for
D70631 the third for consistency.

The header `__charconv/ryu.h` uses these types and it can't depend on the
types in `<charconv>` in a modular build. Moving them to the ryu header
would be an odd place and doesn't work since the header is included in the
middle of `<charconv>`.

Reviewed By: #libc, ldionne, Quuxplusone

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

3 years ago[runtime] Move prolog/epilog block to a post-simplify strategy
Philip Reames [Tue, 31 Aug 2021 16:29:36 +0000 (09:29 -0700)]
[runtime] Move prolog/epilog block to a post-simplify strategy

The runtime unroller will try to produce a non-loop if the unroll count is 2 and thus the prolog/epilog loop would only run at most one iteration. The old implementation did this by avoiding loop construction entirely. This patches instead constructs the trivial loop and then explicitly breaks the backedge and simplifies. This does result in some additional code churn when triggered, but a) results in better quality code and b) removes a codepath which didn't work properly for multiple exit epilogs.

One oddity that I want to draw to reviewer attention is that this somehow changes revisit order. The new order looks equivalent to me, but I don't understand how creating and erasing an extra loop here creates this effect.

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

3 years ago[AlignFromAssume] Bailout w/non-constant alignments (pr51680)
Philip Reames [Tue, 31 Aug 2021 16:17:36 +0000 (09:17 -0700)]
[AlignFromAssume] Bailout w/non-constant alignments (pr51680)

This is a bailout for pr51680.  This pass appears to assume that the alignment operand to an align tag on an assume bundle is constant.  This doesn't appear to be required anywhere, and clang happily generates non-constant alignments for cases such as this case taken from the bug report:

// clang -cc1 -triple powerpc64-- -S -O1 opal_pci-min.c
extern int a[];
long *b;
long c;
void *d(long, int *, int, long, long, long) __attribute__((__alloc_align__(6)));
void e() {
  b = d(c, a, 0, 0, 5, c);
  b[0] = 0;
}

This was exposed by a SCEV change which allowed a non-constant alignment to reach further into the pass' code.  We could generalize the pass, but for now, let's fix the crash.

3 years ago[OpenMP] Fix task wait doesn't work as expected in serialized team
Shilei Tian [Tue, 31 Aug 2021 16:15:38 +0000 (12:15 -0400)]
[OpenMP] Fix task wait doesn't work as expected in serialized team

As discussed in D107121, task wait doesn't work when a regular task T depends on
a detached task or a hidden helper task T' in a serialized team. The root cause is,
since the team is serialized, the last task will not be tracked by
`td_incomplete_child_tasks`. When T' is finished, it first releases its
dependences, and then decrements its parent counter. So far so good. For the thread
that is running task wait, if at the moment it is still spinning and trying to
execute tasks, it is fine because it can detect the new task and execute it.
However, if it happends to finish the function `flag.execute_tasks(...)`, it will
be broken because `td_incomplete_child_tasks` is 0 now.

In this patch, we update the rule to track children tasks a little bit. If the
task team encounters a proxy task or a hidden helper task, all following tasks
will be tracked.

Reviewed By: AndreyChurbanov

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

3 years ago[InstCombine] fix typos in comments; NFC
Sanjay Patel [Tue, 31 Aug 2021 15:40:57 +0000 (11:40 -0400)]
[InstCombine] fix typos in comments; NFC

3 years ago[llvm-lit] unbreak clang-only builds by not assuming llvm-lit in build dir
Yaron Keren [Tue, 31 Aug 2021 15:02:02 +0000 (18:02 +0300)]
[llvm-lit] unbreak clang-only builds by not assuming llvm-lit in build dir

Reviewed By: tstellar

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

3 years ago[clang] Remove redundant calls to c_str() (NFC)
Kazu Hirata [Tue, 31 Aug 2021 15:53:51 +0000 (08:53 -0700)]
[clang] Remove redundant calls to c_str() (NFC)

Identified with readability-redundant-string-cstr.

3 years ago[SystemZ][z/OS] Create html report file with text flag
Fanbo Meng [Tue, 31 Aug 2021 14:48:18 +0000 (10:48 -0400)]
[SystemZ][z/OS] Create html report file with text flag

Change OF_None to OF_Text flag in file creation, same reasoning as https://reviews.llvm.org/D97785

Reviewed By: abhina.sreeskantharajan

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

3 years ago[SCEV] If max BTC is zero, then so is the exact BTC [1 of N]
Philip Reames [Tue, 31 Aug 2021 15:43:29 +0000 (08:43 -0700)]
[SCEV] If max BTC is zero, then so is the exact BTC [1 of N]

This patch is specifically the howManyLessThan case.  There will be a couple of followon patches for other codepaths.

The subtle bit is explaining why the two codepaths have a difference while both are correct. The test case with modifications is a good example, so let's discuss in terms of it.
* The previous exact bounds for this example of (-126 + (126 smax %n))<nsw> can evaluate to either 0 or 1. Both are "correct" results, but only one of them results in a well defined loop. If %n were 127 (the only possible value producing a trip count of 1), then the loop must execute undefined behavior. As a result, we can ignore the TC computed when %n is 127. All other values produce 0.
* The max taken count computation uses the limit (i.e. the maximum value END can be without resulting in UB) to restrict the bound computation. As a result, it returns 0 which is also correct.

WARNING: The logic above only holds for a single exit loop. The current logic for max trip count would be incorrect for multiple exit loops, except that we never call computeMaxBECountForLT except when we can prove either a) no overflow occurs in this IV before exit, or b) this is the sole exit.

An alternate approach here would be to add the limit logic to the symbolic path. I haven't played with this extensively, but I'm hesitant because a) the term is optional and b) I'm not sure it'll reliably simplify away. As such, the resulting code quality from expansion might actually get worse.

This was noticed while trying to figure out why D108848 wasn't NFC, but is otherwise standalone.

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

3 years agoMake a generic test generic again.
Paul Robinson [Tue, 31 Aug 2021 15:45:53 +0000 (08:45 -0700)]
Make a generic test generic again.

Tests in CodeGen/Generic should not depend on any specific target.

3 years ago[OptTable] Improve error message output for grouped short options
gbreynoo [Tue, 31 Aug 2021 15:41:08 +0000 (16:41 +0100)]
[OptTable] Improve error message output for grouped short options

As seen in https://bugs.llvm.org/show_bug.cgi?id=48880 the current
implementation for parsing grouped short options can return unclear
error messages. This change fixes the example given in the ticket in
which a flag is incorrectly given an argument. Also when parsing a
group we now keep reading past the first incorrect option and output
errors for all incorrect options in the group.

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

3 years ago[clang-repl] Install clang-repl
Vassil Vassilev [Tue, 31 Aug 2021 15:19:17 +0000 (15:19 +0000)]
[clang-repl] Install clang-repl

This is essentially what D106813 was supposed to do but did not.

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

3 years ago[VP] implementation of sdag support for VP memory intrinsics
Hussain Kadhem [Tue, 31 Aug 2021 15:01:32 +0000 (17:01 +0200)]
[VP] implementation of sdag support for VP memory intrinsics

Followup to D99355: SDAG support for vector-predicated load/store/gather/scatter.

Reviewed By: frasercrmck

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

3 years ago[libc++][NFC] Add missing HIDE_FROM_ABI on implementation detail __launder
Louis Dionne [Tue, 31 Aug 2021 14:29:22 +0000 (10:29 -0400)]
[libc++][NFC] Add missing HIDE_FROM_ABI on implementation detail __launder

3 years agoRevert "[DebugInfo] Emit DW_TAG_namelist and DW_TAG_namelist_item"
Nemanja Ivanovic [Tue, 31 Aug 2021 13:33:43 +0000 (08:33 -0500)]
Revert "[DebugInfo] Emit DW_TAG_namelist and DW_TAG_namelist_item"

This reverts commit 0a6fad754ed8f0812dd57357ce8071b02e962259.
It caused failures on a number of PowerPC bots.

3 years ago[GlobalDCE] Handle relative pointers in VFE (for Swift vtables)
Kuba Mracek [Tue, 31 Aug 2021 14:06:04 +0000 (07:06 -0700)]
[GlobalDCE] Handle relative pointers in VFE (for Swift vtables)

To support Virtual Function Elimination to Swift, this PR adds support for Swift
vtables which contain "relative pointers" instead of direct pointer references.
These are in the form of:

@symbol = ... {
  i32 trunc (i64 sub (i64 ptrtoint (<type> @target to i64), i64 ptrtoint (... @symbol to i64)) to i32)
}

The PR extends GlobalDCE's way of looking up a vtable offset into a dependency
to be able to see through this expression and find the target symbol.

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

3 years ago[InstCombine] fix propagation of FMF through select-of-fnegs
Sanjay Patel [Tue, 31 Aug 2021 13:42:13 +0000 (09:42 -0400)]
[InstCombine] fix propagation of FMF through select-of-fnegs

The existing code was unquestionably wrong - it looked at one
fneg and ignored the other 2 instructions.

It was also untested, so it didn't make the list of bugs
flagged by Alive2.

This is an unusual propagation, but Alive2 agress that we
can intersect the fnegs and union that with the select,
then apply the results to both new instructions:
https://alive2.llvm.org/ce/z/SF8_dt

3 years ago[gn build] Port 3285c7a4364e
LLVM GN Syncbot [Tue, 31 Aug 2021 13:47:38 +0000 (13:47 +0000)]
[gn build] Port 3285c7a4364e

3 years ago[libcxx] Remove the locale fallback for NuttX
Xiang Xiao [Tue, 31 Aug 2021 13:46:37 +0000 (09:46 -0400)]
[libcxx] Remove the locale fallback for NuttX

Since these functions can handled by NuttX's libc now

Reviewed By: #libc, ldionne

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

3 years ago[SLPVectorizer][Test] Add test for extractelements with (non)const indices (NFC)
Anton Afanasyev [Tue, 31 Aug 2021 13:08:30 +0000 (16:08 +0300)]
[SLPVectorizer][Test] Add test for extractelements with (non)const indices (NFC)

Add test for an issue discussed here: https://reviews.llvm.org/D108703#2974289

3 years ago[InstCombine] add tests for FMF propagation for select-of-fneg; NFC
Sanjay Patel [Fri, 27 Aug 2021 18:07:44 +0000 (14:07 -0400)]
[InstCombine] add tests for FMF propagation for select-of-fneg; NFC

3 years ago[InstCombine] fix typo; NFC
Sanjay Patel [Tue, 31 Aug 2021 13:02:14 +0000 (09:02 -0400)]
[InstCombine] fix typo; NFC

3 years agoRevert "[SLP]No need to schedule/check parent for extract{element/value} instruction."
Anton Afanasyev [Tue, 31 Aug 2021 12:25:14 +0000 (15:25 +0300)]
Revert "[SLP]No need to schedule/check parent for extract{element/value} instruction."

Revert since introduced issure reported here:
https://lists.llvm.org/pipermail/llvm-dev/2021-August/152411.html
Discussed starting from here: https://reviews.llvm.org/D108703#2974289

This reverts commit a36bc873a269dca0c5399d72bfdd42d3ddc72671.

3 years ago[lldb] [gdb-remote client] Remove breakpoints in forked processes
Michał Górny [Sun, 11 Apr 2021 11:08:05 +0000 (13:08 +0200)]
[lldb] [gdb-remote client] Remove breakpoints in forked processes

Remove software breakpoints from forked processes in order to restore
the original program code before detaching it.

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

3 years agoRevert "[lldb] Add minidump save-core functionality to ELF object files"
Andy Yankovsky [Tue, 31 Aug 2021 11:36:53 +0000 (13:36 +0200)]
Revert "[lldb] Add minidump save-core functionality to ELF object files"

This reverts commit aafa05e03d629cc6605718c54575256d9d683659.

Broke builder on aarch64 --
https://lab.llvm.org/buildbot/#/builders/96/builds/10926

3 years ago[MCA][X86] Add basic coverage for icelake arch
Simon Pilgrim [Tue, 31 Aug 2021 11:19:58 +0000 (12:19 +0100)]
[MCA][X86] Add basic coverage for icelake arch

Copy the skylake-avx512 tests for icelake-server coverage.

Add icelake/rocketlake/tigerlake test coverage to the relevent generic tests as well.

3 years ago[lldb] Add minidump save-core functionality to ELF object files
Andrej Korman [Tue, 31 Aug 2021 09:52:41 +0000 (11:52 +0200)]
[lldb] Add minidump save-core functionality to ELF object files

This change adds save-core functionality into the ObjectFileELF that enables
saving minidump of a stopped process. This change is mainly targeting Linux
running on x86_64 machines. Minidump should contain basic information needed
to examine state of threads, local variables and stack traces. Full support
for other platforms is not so far implemented. API tests are using LLDB's
MinidumpParser.

Reviewed By: clayborg

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

3 years ago[X86] Copy X86SchedSkylakeServer.td to X86SchedIceLake.td
Simon Pilgrim [Tue, 31 Aug 2021 09:49:42 +0000 (10:49 +0100)]
[X86] Copy X86SchedSkylakeServer.td to X86SchedIceLake.td

Icelake, Rocketlake and Tigerlake targets currently use the SkylakeServer scheduler model, despite being a later microarchitecture, leading to both reported bugs (PR48110) and discrepancies when comparing llvm-mca reports to other profiling tools (OSACA, uops, uica, etc.). And tbh I'm getting sick of llvm-mca getting blamed for what are backend scheduler model issues :-(

This patch doesn't attempt to fix any of these discrepancies - there should be no changes in codegen - its a setup patch that copies the skx model, renames all the resources, adds the additional ports (but doesn't reference them yet) and updates the llvm-exegesis pfm counter mappings (based off https://sourceforge.net/p/perfmon2/libpfm4/ci/master/tree/lib/events/intel_icl_events.h).

This should make it trivial for anyone with hardware access to use llvm-exegesis reports to iteratively improve the model (my attempts to get hold of a cheap tiger lake box haven't been fruitful yet....).

I will copy the SkylakeServer llvm-mca resource tests as follow up commits - the diff should entirely be the resource renames.

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

3 years agoFix test by adding REQUIRES: x86-registered-target to skip test in configurations...
Douglas Yung [Tue, 31 Aug 2021 10:26:54 +0000 (03:26 -0700)]
Fix test by adding REQUIRES: x86-registered-target to skip test in configurations that do not include x86.

3 years ago[mlir] Prevent assertion failure in DropUnitDims
Tres Popp [Tue, 17 Aug 2021 13:28:26 +0000 (15:28 +0200)]
[mlir] Prevent assertion failure in DropUnitDims

Don't assert fail on strided memrefs when dropping unit dims.
Instead just leave them unchanged.

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

3 years ago[mlir][gpu] folds memref.dim of gpu.alloc
marina kolpakova a.k.a. geexie [Sun, 29 Aug 2021 15:54:35 +0000 (18:54 +0300)]
[mlir][gpu] folds memref.dim of gpu.alloc

implements canonicalization which folds memref.dim(gpu.alloc(%size), %idx) -> %size

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

3 years ago[OpenCL] Defines helper function for kernel language compatible OpenCL version
Justas Janickas [Tue, 24 Aug 2021 10:59:42 +0000 (11:59 +0100)]
[OpenCL] Defines helper function for kernel language compatible OpenCL version

This change defines a helper function getOpenCLCompatibleVersion()
inside LangOptions class. The function contains mapping between
C++ for OpenCL versions and their corresponding compatible OpenCL
versions. This mapping function should be updated each time a new
C++ for OpenCL language version is introduced. The helper function
is expected to simplify conditions on OpenCL C and C++ for OpenCL
versions inside compiler code.

Code refactoring performed.

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

3 years agoUse dSYM's file addr for Sections when it doesn't match binary
Jason Molenda [Tue, 31 Aug 2021 08:32:52 +0000 (01:32 -0700)]
Use dSYM's file addr for Sections when it doesn't match binary

When adding a dSYM to a Module and it has different file addresses
from the already-present ObjectFile binary, change the Sections to
use the dSYM's file addresses so the symbol table and DWARF are
properly contained in the Sections.  Previously this was only done
for IsInMemory ObjectFiles, but it's more common than that.

Differential Revision: https://reviews.llvm.org/D108889
rdar://81504400

3 years ago[NFC] Correct typo in CodeGenMapTable.cpp, patch by Jordi
Shivam Gupta [Tue, 31 Aug 2021 07:31:51 +0000 (13:01 +0530)]
[NFC] Correct typo in CodeGenMapTable.cpp, patch by Jordi

CodeGenMapTable.cpp refers to TableGen as TabelGen in the comments. This appears to be a typo. This patch fixes the typo.

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

3 years ago[Arm] Add assert in T2 Imm7s code emitter
Simon Wallis [Tue, 31 Aug 2021 07:16:26 +0000 (08:16 +0100)]
[Arm] Add assert in T2 Imm7s code emitter

Add assert to provoke failure in object file output, not just in disassembly output.

Reviewed By: yroux

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

3 years agoFix typo in two files in Clang, patch by FusionBolt
Shivam Gupta [Tue, 31 Aug 2021 07:01:24 +0000 (12:31 +0530)]
Fix typo in two files in Clang, patch by FusionBolt

Reviewed By: xgupta

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

3 years ago[clang] Fix Typo in AST Matcher Reference
Shivam Gupta [Tue, 31 Aug 2021 06:36:00 +0000 (12:06 +0530)]
[clang] Fix Typo in AST Matcher Reference

In [[ https://clang.llvm.org/docs/LibASTMatchersReference.html | AST Matcher Reference]], the example of matcher `hasDeclContext` contained a typo.

`cxxRcordDecl` was changed to `cxxRecordDecl`.

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

3 years ago[AIX] Rename shared_libraries_to_archive -> objects_to_archive. NFC.
Kai Luo [Tue, 31 Aug 2021 06:46:15 +0000 (06:46 +0000)]
[AIX] Rename shared_libraries_to_archive -> objects_to_archive. NFC.

3 years agoFix typo s/beloinging/belonging
Doug Beck [Tue, 31 Aug 2021 06:30:00 +0000 (12:00 +0530)]
Fix typo s/beloinging/belonging

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

3 years agoFix typo in comments
Alexander Pivovarov [Tue, 31 Aug 2021 06:20:37 +0000 (11:50 +0530)]
Fix typo in comments

Reviewed By: MaskRay, jsji

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

3 years ago[LLDB][Docs] Move best-practices.txt contain to resources/test.rst
Shivam Gupta [Tue, 31 Aug 2021 06:15:00 +0000 (11:45 +0530)]
[LLDB][Docs] Move best-practices.txt contain to resources/test.rst

This file contain some old reference to files those are now either renamed or replaced.
Also this .txt file didn't generate to html during the sphnix documentation build so I send its contents to resources/test.rst file.

Signed-off-by: Shivam Gupta <shivam98.tkg@gmail.com>
Reviewed By: teemperor, mgorny, JDevlieghere

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

3 years ago[LLDB][Docs] Convert some .txt files to .rst
Shivam Gupta [Fri, 27 Aug 2021 07:44:57 +0000 (13:14 +0530)]
[LLDB][Docs] Convert some .txt files to .rst

Upadate some .txt files to .rst for consistency as most
of the documentation is written in reStructuredText format.

Signed-off-by: Shivam Gupta <shivam98.tkg@gmail.com>
Differential Revision: https://reviews.llvm.org/D108807

3 years ago[Docs][Phabricator] Mention how to create a draft revision
Shivam Gupta [Tue, 31 Aug 2021 06:08:23 +0000 (11:38 +0530)]
[Docs][Phabricator] Mention how to create a draft revision

https://llvm.org/docs/Phabricator.html have two links to Arcnist guide but
none of them mention how to create a draft revision. It would create some less noise if
developers create draft revisoin in this(--draft) way instead of [WIP] tag way.

Reviewed By: dblaikie

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

3 years ago[Docs] Remove subversion reference from MyFirstTypoFix.rst
Shivam Gupta [Tue, 31 Aug 2021 06:03:30 +0000 (11:33 +0530)]
[Docs] Remove subversion reference from MyFirstTypoFix.rst

3 years agoDebugInfo: Refactor/deduplicate various template argument list emission
David Blaikie [Tue, 31 Aug 2021 05:38:40 +0000 (22:38 -0700)]
DebugInfo: Refactor/deduplicate various template argument list emission

Streamline template arguments across types, variables, and functions -
for convenient reuse in experiments related to template argument list
reconstitution (not including template argument lists in the "name" of
those entities, and leaving it to debug info consumers to rebuild the
full template name from the semantic descriptions of the argument lists)

But the change seems like a good refactoring/cleanup anyway.

I'd certainly be open to suggestions about how this might be more
streamlined - like is there no generic way to query template argument
lists across the 3 kinds of entities, rather than needing special case
code?

3 years ago[mlir][python] Apply py::module_local() to all classes.
Stella Laurenzo [Tue, 24 Aug 2021 03:01:07 +0000 (20:01 -0700)]
[mlir][python] Apply py::module_local() to all classes.

* This allows multiple MLIR-API embedding downstreams to co-exist in the same process.
* I believe this is the last thing needed to enable isolated embedding.

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

3 years ago[WebAssembly] Free setjmpTable before exiting calls in EmSjLj
Heejin Ahn [Mon, 30 Aug 2021 21:48:33 +0000 (14:48 -0700)]
[WebAssembly] Free setjmpTable before exiting calls in EmSjLj

This is an improvement over D107852. We don't need to enumerate specific
function names; we can just check for `noreturn` attribute. This also
requires us to make sure `__resumeExeption` and `emscripten_longjmp`
have `noreturn` attribute too; one of them is a JS function and the
other calls a JS function so Clang does not have a way to deduce they
don't return.

This is effectively NFC, because I'm not sure if there is an additional
case this case covers; if we add a custom function call that has
`noreturn` attribute, it will be processed within the SjLj handling and
turned into `__invoke` call. So this really applies to some special
functions like `emscripten_longjmp`.

Reviewed By: dschuff

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

3 years ago[WebAssembly] Share rethrowing BBs in LowerEmscriptenEHSjLj
Heejin Ahn [Sat, 28 Aug 2021 05:14:49 +0000 (22:14 -0700)]
[WebAssembly] Share rethrowing BBs in LowerEmscriptenEHSjLj

There are three kinds of "rethrowing" BBs in this pass:
1. In Emscripten SjLj, after a possibly longjmping function call, we
   check if the thrown longjmp corresponds to one of setjmps within the
   current function. If not, we rethrow the longjmp by calling
   `emscripten_longjmp`.
2. In Emscripten EH, after a possibly throwing function call, we check
   if the thrown exception corresponds to the current `catch` clauses.
   If not, we rethrow the exception by calling `__resumeException`.
3. When both Emscripten EH and SjLj are used, when we check for an
   exception after a possibly throwing function call, it is possible
   that we get not an exception but a longjmp. In this case, we
   shouldn't swallow it; we should rethrow the longjmp by calling
   `emscripten_longjmp`.
4. When both Emscripten EH and SjLj are used, when we check for a
   longjmp after a possibly longjmping function call, it is possible
   that we get not a longjmp but an exception. In this case, we
   shouldn't swallot it; we should rethrow the exception by calling
   `__resumeException`.

Case 1 is in Emscripten SjLj, 2 is in Emscripten EH, and 3 and 4 are
relevant when both Emscripten EH and SjLj are used. 3 and 4 were first
implemented in D106525.

We create BBs for 1, 3, and 4 in this pass. We create those BBs for
every throwing/longjmping function call, along with other BBs that
contain condition checks. What this CL does is to create a single BB
within a function for each of 1, 3, and 4 cases. These BBs are exiting
BBs in the function and thus don't have successors, so easy to be shared
between calls.

The names of BBs created are:
Case 1: `call.em.longjmp`
Case 3: `rethrow.exn`
Case 4: `rethrow.longjmp`

For the case 2 we don't currently create BBs; we only replace the
existing `resume` instruction with `call @__resumeException`. And Clang
already creates only a single `resume` BB per function and reuses it,
so we don't need to optimize this case.

Not sure what are good benchmarks for EH/SjLj, but this decreases the
size of the object file for `grfmt_jpeg.bc` (presumably from opencv) we
got from one of our users by 8.9%. Even after running `wasm-opt -O4` on
them, there is still 4.8% improvement.

Reviewed By: dschuff

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

3 years ago[CSSPGO] Split context string to deduplicate function name used in the context.
Hongtao Yu [Wed, 25 Aug 2021 18:40:34 +0000 (11:40 -0700)]
[CSSPGO] Split context string to deduplicate function name used in the context.

Currently context strings contain a lot of duplicated function names and that significantly increase the profile size. This change split the context into a series of {name, offset, discriminator} tuples so function names used in the context can be replaced by the index into the name table and that significantly reduce the size consumed by context.

A follow-up improvement made in the compiler and profiling tools is to avoid reconstructing full context strings which is  time- and memory- consuming. Instead a context vector of `StringRef` is adopted to represent the full context in all scenarios. As a result, the previous prevalent profile map which was implemented as a `StringRef` is now engineered as an unordered map keyed by `SampleContext`. `SampleContext` is reshaped to using an `ArrayRef` to represent a full context for CS profile. For non-CS profile, it falls back to use `StringRef` to represent a contextless function name. Both the `ArrayRef` and `StringRef` objects are underpinned by real array and string objects that are stored in producer buffers. For compiler, they are maintained by the sample reader. For llvm-profgen, they are maintained in `ProfiledBinary` and `ProfileGenerator`. Full context strings can be generated only in those cases of debugging and printing.

When it comes to profile format, nothing has changed to the text format, though internally CS context is implemented as a vector. Extbinary format is only changed for CS profile, with an additional `SecCSNameTable` section which stores all full contexts logically in the form of `vector<int>`, which each element as an offset points to `SecNameTable`. All occurrences of contexts elsewhere are redirected to using the offset of `SecCSNameTable`.

Testing
This is no-diff change in terms of code quality and profile content (for text profile).

For our internal large service (aka ads), the profile generation is cut to half, with a 20x smaller string-based extbinary format generated.

The compile time of ads is dropped by 25%.

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

3 years agoFix unused variable in release build.
MaheshRavishankar [Tue, 31 Aug 2021 02:29:34 +0000 (19:29 -0700)]
Fix unused variable in release build.

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

3 years ago[tsan] Add environment variable TSAN_SYMBOLIZER_PATH as we do in other sanitizers
Xu Mingjie [Tue, 31 Aug 2021 02:15:57 +0000 (10:15 +0800)]
[tsan] Add environment variable TSAN_SYMBOLIZER_PATH as we do in other sanitizers

ASan, LSan, MSan and UBSan all allow to use environment variable `*SAN_SYMBOLIZER_PATH` to pass the symbolizer path, this patch add `TSAN_SYMBOLIZER_PATH` to TSan.

Reviewed By: vitalybuka

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

3 years ago[lld/mac] Leave more room for thunks in thunk placement code
Nico Weber [Mon, 30 Aug 2021 18:32:29 +0000 (14:32 -0400)]
[lld/mac] Leave more room for thunks in thunk placement code

Fixes PR51578 in practice.

Currently there's only enough room for a single thunk, which for real-life code
isn't enough. The error case only happens when there are many branch statements
very close to each other (0 or 1 instructions apart), with the function at the
finalization barrier small.

There's a FIXME on what to do if we hit this case, but that suggestion sounds
complicated to me (see end of PR51578 comment 5 for why).

Instead, just leave more room for thunks. Chromium's unit_tests links fine with
room for 3 thunks. Leave room for 100, which should fix this for most cases in
practice.

There's little cost for leaving lots of room: This slop value only determines
when we finalize sections, and we insert thunks for forward jumps into
unfinalized sections. So leaving room means we'll need a few more thunks, but
the thunk jump range is 128 MiB while a single thunk is just 12 bytes.

For Chromium's unit_tests:
With a slop of   3: thunk calls = 355418, thunks = 10903
With a slop of 100: thunk calls = 355426, thunks = 10904

Chances are 100 is enough for all use cases we'll hit in practice, but even
bumping it to 1000 would probably be fine.

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

3 years ago[modules] Fix miscompilation when using two RecordDecl definitions with the same...
Volodymyr Sapsai [Wed, 28 Jul 2021 16:33:44 +0000 (09:33 -0700)]
[modules] Fix miscompilation when using two RecordDecl definitions with the same name.

When deserializing a RecordDecl we don't enforce that redeclaration
chain contains only a single definition. So if the canonical decl is not
a definition itself, `RecordType::getDecl` can return different objects
before and after an include. It means we can build CGRecordLayout for
one RecordDecl with its set of FieldDecl but try to use it with
FieldDecl belonging to a different RecordDecl. With assertions enabled
it results in

> Assertion failed: (FieldInfo.count(FD) && "Invalid field for record!"),
> function getLLVMFieldNo, file llvm-project/clang/lib/CodeGen/CGRecordLayout.h, line 199.

and with assertions disabled a bunch of fields are treated as their
memory is located at offset 0.

Fix by keeping the first encountered RecordDecl definition and marking
the subsequent ones as non-definitions. Also need to merge FieldDecl
properly, so that `getPrimaryMergedDecl` works correctly and during name
lookup we don't treat fields from same-name RecordDecl as ambiguous.

rdar://80184238

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

3 years ago[llvm-cov][NFC] Add test for coverage-prefix-map remappings
Keith Smiley [Fri, 27 Aug 2021 06:36:49 +0000 (23:36 -0700)]
[llvm-cov][NFC] Add test for coverage-prefix-map remappings

This test covers acts as a regression test for these fixes:

c75a0a1e9dc29be4e00d37d0d00288afc1a6153f
dd388ba3e0b0a5f06565d0bcb6e1aebb5daac065

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

3 years ago[mlir] Add an interface to allow operations to specify how they can be tiled.
MaheshRavishankar [Mon, 30 Aug 2021 22:55:30 +0000 (15:55 -0700)]
[mlir] Add an interface to allow operations to specify how they can be tiled.

An interface to allow for tiling of operations is introduced. The
tiling of the linalg.pad_tensor operation is modified to use this
interface.

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

3 years ago[flang] Fold EOSHIFT
peter klausler [Tue, 24 Aug 2021 23:51:44 +0000 (16:51 -0700)]
[flang] Fold EOSHIFT

Implement constant folding for the transformational intrinsic
function EOSHIFT.

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

3 years ago[Builder] Eliminate the StringRef/StringAttr forms of getSymbolRefAttr.
Chris Lattner [Mon, 30 Aug 2021 16:31:48 +0000 (09:31 -0700)]
[Builder] Eliminate the StringRef/StringAttr forms of getSymbolRefAttr.

The StringAttr version doesn't need a context, so we can just use the
existing `SymbolRefAttr::get` form.  The StringRef version isn't preferred
so we want to encourage people to use StringAttr.

There is an additional form of getSymbolRefAttr that takes a (SymbolTrait
implementing) operation.  This should also be moved, but I'll do that as
a separate patch.

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

3 years ago[libc][nfc][obvious] fix typos in FPUtil
Michael Jones [Mon, 30 Aug 2021 22:17:50 +0000 (22:17 +0000)]
[libc][nfc][obvious] fix typos in FPUtil

Fix minor typos in FPUtil comments.

Reviewed By: michaelrj

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

3 years ago[COFF] Force Symbols containing '.' to be quoted
Keno Fischer [Thu, 19 Aug 2021 18:31:39 +0000 (14:31 -0400)]
[COFF] Force Symbols containing '.' to be quoted

In D87099, the mangler learned to quote export directives that contain
special characters. Only alhpanumerical characters as well as
'_', '$', '.' and '@' were exmpt from this quoting. However, at least
binutils considers an unquoted '.' to be syntax and object files
containing such symbols will cause errors during linking. Fix that
by removing '.' from the list of allowed exemptions.

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

3 years ago[MemCpyOpt] Allow specifying --enable-memcpyopt-without-libcalls more than once
Artem Belevich [Mon, 30 Aug 2021 20:33:24 +0000 (13:33 -0700)]
[MemCpyOpt] Allow specifying --enable-memcpyopt-without-libcalls more than once

so we can override it via clang's CLI if necessary.

3 years ago[libc] Add mtx_destroy which does nothing.
Siva Chandra Reddy [Mon, 30 Aug 2021 20:42:45 +0000 (20:42 +0000)]
[libc] Add mtx_destroy which does nothing.

There is not cleanup to be done for the mutex type so mtx_destroy does
nothing.

3 years ago[IROutliner] Changing outliner to prioritize reductions on assembly rather than IR...
Andrew Litteken [Wed, 25 Aug 2021 19:45:04 +0000 (12:45 -0700)]
[IROutliner] Changing outliner to prioritize reductions on assembly rather than IR instruction

Currently, the IROutliner uses a simple metric to outline the largest amount
of IR possible to outline first if it fits the cost model. This is model
loses out on smaller blocks of code that have higher reductions in cost that
are contained within larger blocks of IR.

This reverses the order, where we calculate all of the costs first, and then
reorder and extract items based on the calculated results.

Reviewers: paquette

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

3 years ago[TTI] Sink IVDescriptors.h include (NFC)
Nikita Popov [Mon, 30 Aug 2021 20:28:14 +0000 (22:28 +0200)]
[TTI] Sink IVDescriptors.h include (NFC)

Forward declare RecurrenceDescriptor and include IVDescritor.h
only in implementation code that actually needs it.

3 years ago[mlir][tosa] Small refactor to the functionality of Conv2D and Fully_connected to...
natashaknk [Mon, 30 Aug 2021 20:18:39 +0000 (13:18 -0700)]
[mlir][tosa] Small refactor to the functionality of Conv2D and Fully_connected to add the bias at the end of the convolution

Made to adjust for a modification to the tiling algorithm

Reviewed By: rsuderman

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

3 years ago[LegalizeTypes][X86] Improve ExpandIntRes_FP_TO_SINT/ExpandIntRes_FP_TO_UINT when...
Craig Topper [Mon, 30 Aug 2021 18:53:18 +0000 (11:53 -0700)]
[LegalizeTypes][X86] Improve ExpandIntRes_FP_TO_SINT/ExpandIntRes_FP_TO_UINT when input is SoftPromoteHalf.

Instead of splitting off the fp16 to float conversion and generating
a libcall, we should split the operation into fp16 to float and float
to integer operations. This will allow the float to integer conversion
to go through any custom handling the target has. If the target doesn't
have custom handling then we should come back to ExpandIntRes_FP_TO_SINT/
ExpandIntRes_FP_TO_UINT automatically to create the libcall.

This avoids generating libcalls on 32-bit X86. These library functions may
not exist in 32-bit libgcc. At least for LLVM, we never generate them when
hardware floating point instructions are available.

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

3 years ago[SelectionDAG] Fix miscompile bugs related to smul.fix.sat with scale zero
Bjorn Pettersson [Mon, 30 Aug 2021 19:07:17 +0000 (21:07 +0200)]
[SelectionDAG] Fix miscompile bugs related to smul.fix.sat with scale zero

When expanding a SMULFIXSAT ISD node (usually originating from
a smul.fix.sat intrinsic) we've applied some optimizations for
the special case when the scale is zero. The idea has been that
it would be cheaper to use an SMULO instruction (if legal) to
perform the multiplication and at the same time detect any overflow.
And in case of overflow we could use some SELECT:s to replace the
result with the saturated min/max value. The only tricky part
is to know if we overflowed on the min or max value, i.e. if the
product is positive or negative. Unfortunately the implementation
has been incorrect as it has looked at the product returned by the
SMULO to determine the sign of the product. In case of overflow that
product is truncated and won't give us the correct sign bit.

This patch is adding an extra XOR of the multiplication operands,
which is used to determine the sign of the non truncated product.

This patch fixes PR51677.

Reviewed By: lebedev.ri

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

3 years ago[flang] Fold CSHIFT
peter klausler [Wed, 7 Jul 2021 17:52:09 +0000 (10:52 -0700)]
[flang] Fold CSHIFT

Implement folding of the transformational intrinsic function
CSHIFT for all types.

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

3 years agoTeach the AArch64 backend patterns to generate the EOR3 instruction.
Owen Anderson [Thu, 26 Aug 2021 22:50:33 +0000 (22:50 +0000)]
Teach the AArch64 backend patterns to generate the EOR3 instruction.

Adds patterns to match the EOR3 instruction.

Reviewed By: dmgreen

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

3 years ago[libc++] Support -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=on in CI
Fangrui Song [Mon, 30 Aug 2021 19:59:07 +0000 (12:59 -0700)]
[libc++] Support -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=on in CI

This fixes -isystem/-L/-Wl,-rpath paths when -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=on
is used (https://reviews.llvm.org/D107799#2969650).

* `-isystem path/to/build/generic-cxx17/include/c++/v1`. `build/generic-cxx17/include/x86_64-unknown-linux-gnu/c++/v1 (__config_site)` is missing.
* `-L path/to/build/generic-cxx17/lib`. Should be `build/generic-cxx17/lib/x86_64-unknown-linux-gnu` instead

Reviewed By: ldionne, phosek, #libc

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

3 years ago[DebugInfo] Remove the restriction on the size of DIStringType
Chih-Ping Chen [Mon, 30 Aug 2021 19:05:24 +0000 (15:05 -0400)]
[DebugInfo] Remove the restriction on the size of DIStringType
in DebugHandlerBase::isUnsignedDIType.

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

3 years ago[DIBuilder] Do not replace empty enum types
Ellis Hoag [Mon, 30 Aug 2021 19:32:57 +0000 (12:32 -0700)]
[DIBuilder] Do not replace empty enum types

It looks like this array was missed in 4276d4a8d08b7640eb57cabf6988a5cf65b228b6

Fixed tests that expected `elements` to be empty or depeneded on the order of the empty DINode.

Reviewed By: aprantl

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

3 years ago[docs][GlobalISel]Adding info for G_JUMP_TABLE generic opcode
pooja2299 [Thu, 5 Aug 2021 18:24:56 +0000 (23:54 +0530)]
[docs][GlobalISel]Adding info for G_JUMP_TABLE generic opcode

Added description of jump table and G_JUMP_TABLE opcode.

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

3 years ago[ARM] Workaround tailpredication min/max costmodel
David Green [Mon, 30 Aug 2021 18:19:51 +0000 (19:19 +0100)]
[ARM] Workaround tailpredication min/max costmodel

The min/max intrinsics are not yet canonical, but when they are the tail
predications analysis will change from treating them like icmp to
treating them like intrinsics. Unfortunately, they can currently produce
better code by not being tail predicated thanks to the vectorizer picking
higher VF's and the backend folding to better instructions (especially
for saturate patterns). In the long run we will need to improve the
vectorizers cost modelling, recognizing the instruction directly, but in
the meantime this treats min/max as before to prevent performance
regressions.

3 years ago[lld/mac] Tweak estimateStubsInRangeVA a bit
Nico Weber [Sat, 28 Aug 2021 03:27:03 +0000 (23:27 -0400)]
[lld/mac] Tweak estimateStubsInRangeVA a bit

- Move a few variables closer to their uses, remove some completely
  (no behavior change)
- Add some comments
- Make maxPotentialThunks include calls to stubs. It's possible that
  an earlier call to a stub late in the stub table will need a thunk,
  and that inserted thunk could push a stub earlier in the stub table
  out of range. This is unlikely to happen, but usually there are
  way fewer stub calls than non-stub calls, so if we're doing a
  conservative approximation here we might as well do it correctly.
  (For chromium's unit_tests target, 134421/242639 stub calls are
  direct calls without this change, compared to 134408/242639 with
  this change)

No real, meaningful behavior difference.

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

3 years ago[InstrInfo] Use 64-bit immediates for analyzeCompare() (NFCI)
Nikita Popov [Sat, 28 Aug 2021 19:29:31 +0000 (21:29 +0200)]
[InstrInfo] Use 64-bit immediates for analyzeCompare() (NFCI)

The backend generally uses 64-bit immediates (e.g. what
MachineOperand::getImm() returns), so use that for analyzeCompare()
and optimizeCompareInst() as well. This avoids truncation for
targets that support immediates larger 32-bit. In particular, we
can avoid the bugprone value normalization hack in the AArch64
target.

This is a followup to D108076.

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

3 years ago[libc++abi] Avoid the warning: "__EXCEPTIONS" is not defined, evaluates to 0 [-Werror...
Xiang Xiao [Mon, 30 Aug 2021 17:34:20 +0000 (13:34 -0400)]
[libc++abi] Avoid the warning: "__EXCEPTIONS" is not defined, evaluates to 0 [-Werror=undef]

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

3 years agoDebugInfo: Correct printing empty template parameter packs
David Blaikie [Mon, 30 Aug 2021 17:06:00 +0000 (10:06 -0700)]
DebugInfo: Correct printing empty template parameter packs

Empty packs in the non-final position would result in an extra ", ".
Empty packs in the final position would result in missing the space
between trailing >>.

3 years agoRevert "[SLP]Improve graph reordering."
Mikhail Goncharov [Mon, 30 Aug 2021 17:16:44 +0000 (19:16 +0200)]
Revert "[SLP]Improve graph reordering."

This reverts commit 84cbd71c95923f9912512f3051c6ab548a99e016.

This commit breaks one of the internal tests. As agreed with Alexey I
will provide the reproducer later.

3 years ago[CSSPGO] Avoid repeatedly computing md5 hash code for pseudo probe inline contexts.
Hongtao Yu [Wed, 25 Aug 2021 18:57:48 +0000 (11:57 -0700)]
[CSSPGO] Avoid repeatedly computing md5 hash code for pseudo probe inline contexts.

Md5 hashing is expansive. Using a hash map to look up already computed GUID for dwarf names. Saw a 2% build time improvement on an internal large application.

Reviewed By: wenlei

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

3 years ago[AsmParser] Support %ty* in force-opaque-pointers mode
Nikita Popov [Sat, 28 Aug 2021 20:26:45 +0000 (22:26 +0200)]
[AsmParser] Support %ty* in force-opaque-pointers mode

Only enforce that ptr* is illegal if the base type is a simple type,
not when it is something like %ty, where %ty may resolve to an
opaque pointer in force-opaque-pointers mode.

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

3 years ago[libcxx][docs] Mark LWG3348 as complete
Joe Loser [Mon, 30 Aug 2021 17:03:33 +0000 (13:03 -0400)]
[libcxx][docs] Mark LWG3348 as complete

Mark LWG3348 as complete. The `__cpp_lib_unwrap_ref` feature test macro
was placed in `<functional>` in 466df1718e41fe2fca6ce6bd98c01b18f42c05e4

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

3 years ago[SCEV] Clarify the overflow precondition of computeMaxBECountForLT [NFC]
Philip Reames [Mon, 30 Aug 2021 16:47:45 +0000 (09:47 -0700)]
[SCEV] Clarify the overflow precondition of computeMaxBECountForLT [NFC]

And add a test case to illustrate that we do in fact produce the right result for the multiple exit case.  I have gotten myself confused at least three times when reading this code, so clarify to prevent future confusion.

3 years ago[NFC][clang] Move IR-independent parts of target MV support to X86TargetParser.cpp
Andrei Elovikov [Mon, 30 Aug 2021 16:24:41 +0000 (09:24 -0700)]
[NFC][clang] Move IR-independent parts of target MV support to X86TargetParser.cpp

...that is located under llvm/lib/Support/.

Reviewed By: erichkeane

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

3 years ago[libc++] Various cleanups in the ranges tests
Louis Dionne [Fri, 27 Aug 2021 16:04:12 +0000 (12:04 -0400)]
[libc++] Various cleanups in the ranges tests

- Rename test files to follow conventions better
- Split constructor tests that were in a single file
- Add missing tests for take_view and transform_view's default constructors
- Add missing tests for transform_view's view/function constructor
- Fix include guards
- Mark some tests as being specific to libc++

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

3 years ago[lld/mac] Set branchRange a bit more carefully
Nico Weber [Sun, 29 Aug 2021 19:19:19 +0000 (15:19 -0400)]
[lld/mac] Set branchRange a bit more carefully

- Don't subtract thunkSize from branchRange. Most places care about
  the actual maximal branch range. Subtract thunkSize in the one place
  that wants to leave room for a thunk.
- Set it to 0x800_0000 instead of 0xFF_FFFF
- Subtract 4 for the positive branch direction since it's a
  two's complement 24bit number sign-extended mutiplied by 4,
  so its range is -0x800_0000..+0x7FF_FFFC
- Make boundary checks include the boundary values

This doesn't make a huge difference in practice. It's preparation
for a "real" fix for PR51578 -- but it also lets the repro in comment 0
in that bug place one more thunk before hitting the TODO.

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

3 years ago[IROutliner] Ensure instructions at end of candidate are excluded
Andrew Litteken [Fri, 11 Jun 2021 17:00:22 +0000 (12:00 -0500)]
[IROutliner] Ensure instructions at end of candidate are excluded

Occasionally instructions are between the last instruction in a region,
and the following instruction as identified by the Candidate.  This
adds an extra check right before splitting a candidate that excludes the region from being split/checked for outlining to remove errors.

Tests Added:
Tranforms/IROuutliner/outlining-extra-bitcasts.ll

Reviewer: paquette, jroelofs

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

3 years ago[AMDGPU][CostModel] Update shuffle instruction tests. NFC.
Daniil Fukalov [Mon, 30 Aug 2021 16:05:55 +0000 (19:05 +0300)]
[AMDGPU][CostModel] Update shuffle instruction tests. NFC.

New tests ported over from test/Analysis/CostModel/AArch64/shuffle-other.ll.

3 years ago[llvm] Remove redundant calls to str() and c_str() (NFC)
Kazu Hirata [Mon, 30 Aug 2021 16:05:05 +0000 (09:05 -0700)]
[llvm] Remove redundant calls to str() and c_str() (NFC)

Identified with readability-redundant-string-cstr.

3 years ago[RISCV] Enable CONCAT_VECTORS for fixed FP vectors.
Craig Topper [Mon, 30 Aug 2021 15:47:43 +0000 (08:47 -0700)]
[RISCV] Enable CONCAT_VECTORS for fixed FP vectors.

Reviewed By: frasercrmck

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

3 years ago[DAGCombiner][RISCV] Don't use vector types in DAGCombiner::tryStoreMergeOfLoads...
Craig Topper [Mon, 30 Aug 2021 15:40:00 +0000 (08:40 -0700)]
[DAGCombiner][RISCV] Don't use vector types in DAGCombiner::tryStoreMergeOfLoads if we need a rotate.

The check for whether a rotate is possible occurs before the
memory legality checks for the integer type. So it's possible we
decide we can use a rotate, but then fail the legality checks. If
that happens we should not fall back to a vector type. This triggers
an assertion in the rotate handling when it finds a vector type
instead of an integer type.

In theory we could use a shufflevector in place of the rotate, but
right now I'd just like to fix the crash.

Reviewed By: RKSimon

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