platform/upstream/llvm.git
3 years ago[compiler-rt] [emutls] Handle unused parameters in a compiler agnostic way
Martin Storsjö [Fri, 20 Nov 2020 09:29:27 +0000 (11:29 +0200)]
[compiler-rt] [emutls] Handle unused parameters in a compiler agnostic way

The MSVC specific pragmas disable this warning, but the pragmas themselves
(when not guarded by any _MSC_VER ifdef) cause warnings for other targets,
e.g. when targeting mingw.

Instead silence the MSVC warnings about unused parameters by casting
the parameters to void.

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

3 years ago[llvm-readelf/obj] - Move unique warning handling logic to the `ObjDumper`.
Georgii Rymar [Fri, 27 Nov 2020 10:34:30 +0000 (13:34 +0300)]
[llvm-readelf/obj] - Move unique warning handling logic to the `ObjDumper`.

This moves the `reportUniqueWarning` method to the base class.

My motivation is the following:
I've experimented with replacing `reportWarning` calls with `reportUniqueWarning`
in ELF dumper. I've found that for example for removing them from `DynRegionInfo` helper
class, it is worth to pass a dumper instance to it (to be able to call dumper()->reportUniqueWarning()).
The problem was that `ELFDumper<ELFT>` is a template class. I had to make `DynRegionInfo` to be templated
and do lots of minor changes everywhere what did not look reasonable/nice.

At the same time I guess one day other dumpers like COFF/MachO/Wasm etc might want to
start using `reportUniqueWarning` API too. Then it looks reasonable to move the logic to the
base class.

With that the problem of passing the dumper instance will be gone.

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

3 years ago[CodeView] Remove unused declaration collectInlineSiteChildren (NFC)
Kazu Hirata [Tue, 1 Dec 2020 06:28:26 +0000 (22:28 -0800)]
[CodeView] Remove unused declaration collectInlineSiteChildren (NFC)

The function definition was removed on Sep 7, 2016 in commit
a9f4cc9510546f5728258524d344a3e03e43500b.  The declaration seems to be
unused since then.

3 years ago[Remarks][2/2] Expand remarks hotness threshold option support in more tools
Wei Wang [Tue, 17 Nov 2020 18:43:02 +0000 (10:43 -0800)]
[Remarks][2/2] Expand remarks hotness threshold option support in more tools

This is the #2 of 2 changes that make remarks hotness threshold option
available in more tools. The changes also allow the threshold to sync with
hotness threshold from profile summary with special value 'auto'.

This change expands remarks hotness threshold option
-fdiagnostics-hotness-threshold in clang and *-remarks-hotness-threshold in
other tools to utilize hotness threshold from profile summary.

Remarks hotness filtering relies on several driver options. Table below lists
how different options are correlated and affect final remarks outputs:

| profile | hotness | threshold | remarks printed |
|---------|---------|-----------|-----------------|
| No      | No      | No        | All             |
| No      | No      | Yes       | None            |
| No      | Yes     | No        | All             |
| No      | Yes     | Yes       | None            |
| Yes     | No      | No        | All             |
| Yes     | No      | Yes       | None            |
| Yes     | Yes     | No        | All             |
| Yes     | Yes     | Yes       | >=threshold     |

In the presence of profile summary, it is often more desirable to directly use
the hotness threshold from profile summary. The new argument value 'auto'
indicates threshold will be synced with hotness threshold from profile summary
during compilation. The "auto" threshold relies on the availability of profile
summary. In case of missing such information, no remarks will be generated.

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

3 years ago[Remarks][1/2] Expand remarks hotness threshold option support in more tools
Wei Wang [Tue, 17 Nov 2020 18:37:59 +0000 (10:37 -0800)]
[Remarks][1/2] Expand remarks hotness threshold option support in more tools

This is the #1 of 2 changes that make remarks hotness threshold option
available in more tools. The changes also allow the threshold to sync with
hotness threshold from profile summary with special value 'auto'.

This change modifies the interface of lto::setupLLVMOptimizationRemarks() to
accept remarks hotness threshold. Update all the tools that use it with remarks
hotness threshold options:

* lld: '--opt-remarks-hotness-threshold='
* llvm-lto2: '--pass-remarks-hotness-threshold='
* llvm-lto: '--lto-pass-remarks-hotness-threshold='
* gold plugin: '-plugin-opt=opt-remarks-hotness-threshold='

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

3 years ago[DSE] Remove a redundant call to getLocForWriteEx()
Greg Parker [Sun, 29 Nov 2020 01:54:29 +0000 (17:54 -0800)]
[DSE] Remove a redundant call to getLocForWriteEx()

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

3 years agoInitial commit of mktime.
Raman Tenneti [Tue, 1 Dec 2020 05:06:47 +0000 (21:06 -0800)]
Initial commit of mktime.

This introduces mktime to LLVM libc, based on C99/C2X/Single Unix Spec.

Co-authored-by: Jeff Bailey <jeffbailey@google.com>
This change doesn't handle TIMEZONE,  tm_isdst and leap seconds.  It returns -1 for invalid dates. I have verified the return results for all the possible dates with glibc's mktime.

TODO:
+ Handle leap seconds.
+ Handle out of range time and date values that don't overflow or underflow.
+ Implement the following suggestion Siva - As we start accumulating the seconds, we should be able to check if the next amount of seconds to be added can lead to an overflow. If it does, return the overflow value.  If not keep accumulating. The benefit is that, we don't have to validate every input, and also do not need the special cases for sizeof(time_t) == 4.
+ Handle timezone and update of tm_isdst

Reviewed By: sivachandra

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

3 years ago[RISCV] Rename RISCVGenSystemOperands.inc to RISCVGenSearchableTables.inc to prepare...
Craig Topper [Tue, 1 Dec 2020 04:15:04 +0000 (20:15 -0800)]
[RISCV] Rename RISCVGenSystemOperands.inc to RISCVGenSearchableTables.inc to prepare for more tables. NFC

D89449 adds more tables so renaming as a pre-commit for that.

3 years agoAdd MachineModuleInfo constructor with external MCContext
Hendrik Greving [Thu, 12 Nov 2020 01:56:14 +0000 (17:56 -0800)]
Add MachineModuleInfo constructor with external MCContext

Adds a constructor to MachineModuleInfo and MachineModuleInfoWapperPass that
takes an external MCContext. If provided, the external context will be used
throughout codegen instead of MMI's default one.

This enables external drivers to take ownership of data put on the MMI's context
during codegen. The internal context is used otherwise and destroyed upon
finish.

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

3 years ago[lldb] Refactor GetDeviceSupportDirectoryNames and GetPlatformName (NFC)
Jonas Devlieghere [Mon, 30 Nov 2020 23:18:24 +0000 (15:18 -0800)]
[lldb] Refactor GetDeviceSupportDirectoryNames and GetPlatformName (NFC)

Both functions are effectively returning a single string literal. Change
the interface to return a llvm::StringRef instead of populating a vector
of std::strings or returning a std::string respectively.

3 years agoAdd help text for -nogpuinc
Yaxun (Sam) Liu [Mon, 30 Nov 2020 19:48:56 +0000 (14:48 -0500)]
Add help text for -nogpuinc

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

3 years agoRevert "[clang][Fuchsia] Add relative-vtables multilib"
Leonard Chan [Tue, 1 Dec 2020 03:21:35 +0000 (19:21 -0800)]
Revert "[clang][Fuchsia] Add relative-vtables multilib"

This reverts commit fdbd84c6c819d4462546961f6086c1524d5d5ae8.

Reverting due to failing CI builders for Fuchsia's toolchain:
https://luci-milo.appspot.com/p/fuchsia/builders/ci/clang-linux-x64/b8862150211240186992?

3 years ago[GlobalISel] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds
Fangrui Song [Tue, 1 Dec 2020 02:31:42 +0000 (18:31 -0800)]
[GlobalISel] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds

3 years ago[GlobalISel] Fix -Wunused-variable
Fangrui Song [Tue, 1 Dec 2020 02:25:53 +0000 (18:25 -0800)]
[GlobalISel] Fix -Wunused-variable

3 years ago[clang][Fuchsia] Add relative-vtables multilib
Leonard Chan [Tue, 1 Dec 2020 02:21:10 +0000 (18:21 -0800)]
[clang][Fuchsia] Add relative-vtables multilib

This adds multilibs for Fuchsia that is built with the relative vtables ABI,
one with and another without exceptions.

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

3 years agoRevert "[clang][Fuchsia] Add relative-vtables multilib"
Leonard Chan [Tue, 1 Dec 2020 02:19:50 +0000 (18:19 -0800)]
Revert "[clang][Fuchsia] Add relative-vtables multilib"

This reverts commit 7c2bc3b71dc072987d43a2a86609871bd01f981f.

Forgot to add the ifferential revision.

3 years ago[clang][Fuchsia] Add relative-vtables multilib
Leonard Chan [Mon, 19 Oct 2020 20:42:40 +0000 (13:42 -0700)]
[clang][Fuchsia] Add relative-vtables multilib

This adds a multilib for Fuchsia that is built with the relative vtables
ABI.

3 years agoRecommit "[llvm-symbolizer] Switch to using native symbolizer by default on Windows"
Amy Huang [Mon, 30 Nov 2020 22:35:15 +0000 (14:35 -0800)]
Recommit "[llvm-symbolizer] Switch to using native symbolizer by default on Windows"

This reverts commit 1b63177a56e8cd6196778d2b90295f03e96b5800.

3 years ago[llvm] Fix for failing test from cf8ff75bade763b054476321dcb82dcb2e7744c7
Leonard Chan [Tue, 1 Dec 2020 01:18:50 +0000 (17:18 -0800)]
[llvm] Fix for failing test from cf8ff75bade763b054476321dcb82dcb2e7744c7

Handle null values when handling operand changes for DSOLocalEquivalent.

3 years agoDon't count attributes when addressing operands.
Ray (I-Jui) Sung [Tue, 1 Dec 2020 00:22:36 +0000 (00:22 +0000)]
Don't count attributes when addressing operands.

Fixes out-of-bound access in generated nested DAG rewriter matching code.

Reviewed By: tpopp

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

3 years agoLex: Update Module::findHeader to return FileEntryRef, NFC
Duncan P. N. Exon Smith [Thu, 29 Oct 2020 19:29:42 +0000 (15:29 -0400)]
Lex: Update Module::findHeader to return FileEntryRef, NFC

Update `Module::findHeader` to return `Optional<FileEntryRef>` and
fix its one caller.

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

3 years ago[mlir] Small cleanups to func-bufferize/finalizing-bufferize
Sean Silva [Mon, 30 Nov 2020 23:20:30 +0000 (15:20 -0800)]
[mlir] Small cleanups to func-bufferize/finalizing-bufferize

- Address TODO in scf-bufferize: the argument materialization issue is
  now fixed and the code is now in Transforms/Bufferize.cpp
- Tighten up finalizing-bufferize to avoid creating invalid IR when
  operand types potentially change
- Tidy up the testing of func-bufferize, and move appropriate tests
  to a new finalizing-bufferize.mlir
- The new stricter checking in finalizing-bufferize revealed that we
  needed a DimOp conversion pattern (found when integrating into npcomp).
  Previously, the converion infrastructure was blindly changing the
  operand type during finalization, which happened to work due to
  DimOp's tensor/memref polymorphism, but is generally not encouraged
  (the new pattern is the way to tell the conversion infrastructure that
  it is legal to change that type).

3 years agoclang/test: Remove platform-linker feature
Nico Weber [Mon, 30 Nov 2020 01:17:56 +0000 (20:17 -0500)]
clang/test: Remove platform-linker feature

By explicitly requesting the system linker with `-fuse-ld=`, the
tests are able to CHECK for the system linker even with
CLANG_DEFAULT_LINKER=lld.

Alternative to D74704.

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

3 years ago[WinASan] Improve exception reporting accuracy
Reid Kleckner [Mon, 30 Nov 2020 18:21:14 +0000 (10:21 -0800)]
[WinASan] Improve exception reporting accuracy

Previously, ASan would produce reports like this:
ERROR: AddressSanitizer: breakpoint on unknown address 0x000000000000 (pc 0x7fffdd7c5e86 ...)

This is unhelpful, because the developer may think this is a null
pointer dereference, and not a breakpoint exception on some PC.

The cause was that SignalContext::GetAddress would read the
ExceptionInformation array to retreive an address for any kind of
exception. That data is only available for access violation exceptions.
This changes it to be conditional on the exception type, and to use the
PC otherwise.

I added a variety of tests for common exception types:
- int div zero
- breakpoint
- ud2a / illegal instruction
- SSE misalignment

I also tightened up IsMemoryAccess and GetWriteFlag to check the
ExceptionCode rather than looking at ExceptionInformation[1] directly.

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

3 years ago[AArch64][GlobalISel] Fix crash during legalization of a vector G_SELECT with scalar...
Amara Emerson [Tue, 17 Nov 2020 20:09:31 +0000 (12:09 -0800)]
[AArch64][GlobalISel] Fix crash during legalization of a vector G_SELECT with scalar mask.

The lowering of vector selects needs to first splat the scalar mask into a vector
first.

This was causing a crash when building oggenc in the test suite.

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

3 years ago[libcxx] remove checks for __STDCPP_THREADS__ as it is defined by compiler
Zequan Wu [Mon, 30 Nov 2020 22:09:00 +0000 (14:09 -0800)]
[libcxx] remove checks for __STDCPP_THREADS__ as it is defined by compiler

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

3 years agoFix GCC 5.3 compile error in ASTImporter code
Reid Kleckner [Mon, 30 Nov 2020 23:43:48 +0000 (15:43 -0800)]
Fix GCC 5.3 compile error in ASTImporter code

Try to simplify this code a different way: use less Expected, more
outparams.

3 years ago[InlineCost] prefer range-for. NFC
Nick Desaulniers [Tue, 1 Dec 2020 00:02:28 +0000 (16:02 -0800)]
[InlineCost] prefer range-for. NFC

Prefer range-for over iterators when such methods exist. Precommitted
from https://reviews.llvm.org/D91816.

Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed By: dblaikie

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

3 years ago[clang][RelativeVTablesABI] Use dso_local_equivalent rather than emitting stubs
Leonard Chan [Tue, 14 Jul 2020 21:56:38 +0000 (14:56 -0700)]
[clang][RelativeVTablesABI] Use dso_local_equivalent rather than emitting stubs

Thanks to D77248, we can bypass the use of stubs altogether and use PLT
relocations if they are available for the target. LLVM and LLD support the
R_AARCH64_PLT32 relocation, so we can also guarantee a static PLT relocation on AArch64.
Not emitting these stubs saves a lot of extra binary size.

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

3 years ago[llvm-symbolizer] Fix typo in llvm-symbolizer test from a previous commit.
Amy Huang [Mon, 30 Nov 2020 23:08:00 +0000 (15:08 -0800)]
[llvm-symbolizer] Fix typo in llvm-symbolizer test from a previous commit.

(Commit was 00bbef2bb20cf212722de282e4eb9afd09ab50db)

3 years agoRemove dead code added in ac49500cd0484e1b2dcf37fa4c0dade6f113c2c9, NFC
Duncan P. N. Exon Smith [Mon, 30 Nov 2020 22:12:28 +0000 (14:12 -0800)]
Remove dead code added in ac49500cd0484e1b2dcf37fa4c0dade6f113c2c9, NFC

This was a copy/paste bug; `M0` is never referenced later.

3 years agoFileManager: Add FileEntryRef::getDir, returning DirectoryEntryRef
Duncan P. N. Exon Smith [Thu, 29 Oct 2020 22:00:31 +0000 (18:00 -0400)]
FileManager: Add FileEntryRef::getDir, returning DirectoryEntryRef

Add `FileEntryRef::getDir`, which returns a `DirectoryEntryRef`. This
includes a few changes:

- Customize `OptionalStorage` so that `Optional<DirectoryEntryRef>` is
  pointer-sized (like the change made to `Optional<FileEntryRef>`).
  Factored out a common class, `FileMgr::MapEntryOptionalStorage`, to
  reduce the code duplication.
- Store an `Optional<DirectoryEntryRef>` in `FileEntryRef::MapValue`.
  This is set if and only if `MapValue` has a real `FileEntry`.
- Change `FileManager::getFileRef` and `getVirtualFileRef` to use
  `getDirectoryRef` and store it in the `StringMap` for `FileEntryRef`.

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

3 years ago[lldb] Give TestDefaultTemplateArgs a unique class name
Jonas Devlieghere [Mon, 30 Nov 2020 22:41:33 +0000 (14:41 -0800)]
[lldb] Give TestDefaultTemplateArgs a unique class name

Multiple tests cannot share the same test class name.

3 years ago[llvm-symbolizer] Fix native symbolization on windows for inline sites.
Amy Huang [Wed, 25 Nov 2020 17:22:17 +0000 (09:22 -0800)]
[llvm-symbolizer] Fix native symbolization on windows for inline sites.

The existing code handles this correctly and I checked that the code
in NativeInlineSiteSymbol also handles this correctly, but it was
wrong in the NativeFunctionSymbol code.

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

3 years ago[OpenMP][Tests][NFC] Use FileCheck from cmake config
Joachim Protze [Mon, 30 Nov 2020 22:16:56 +0000 (23:16 +0100)]
[OpenMP][Tests][NFC] Use FileCheck from cmake config

3 years agoSerialization: Change InputFile to use FileEntryRef and add getVirtualFileRef, NFC
Duncan P. N. Exon Smith [Thu, 22 Oct 2020 03:38:12 +0000 (23:38 -0400)]
Serialization: Change InputFile to use FileEntryRef and add getVirtualFileRef, NFC

Change the `InputFile` class to store `Optional<FileEntryRef>` instead
of `FileEntry*`. This paged in a few API changes:

- Added `FileManager::getVirtualFileRef`, and converted `getVirtualFile`
  to a wrapper of it.
- Updated `SourceManager::bypassFileContentsOverride` to take
  `FileEntryRef` and return `Optional<FileEntryRef>`
  (`ASTReader::getInputFile` is the only caller).

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

3 years ago[OpenMP] libomp: change shm name to include UID, call unregister_lib on SIGTERM
Todd Erdner [Mon, 30 Nov 2020 21:39:52 +0000 (00:39 +0300)]
[OpenMP] libomp: change shm name to include UID, call unregister_lib on SIGTERM

With the change to using shared memory, there were a few problems that need to be fixed.
- The previous filename that was used for SHM only used process id. Given that process is
  usually based on 16bit number, this was causing some conflicts on machines. Thus we add
  UID to the name to prevent this.
- It appears under some conditions (SIGTERM, etc) the shared memory files were not getting
  cleaned up. Added a call to clean up the shm files under those conditions. For this user
  needs to set envirable KMP_HANDLE_SIGNALS to true.

Patch by Erdner, Todd <todd.erdner@intel.com>

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

3 years ago[OpenMP] libomp: fix mutexinoutset dependence for proxy tasks
AndreyChurbanov [Mon, 30 Nov 2020 21:13:31 +0000 (00:13 +0300)]
[OpenMP] libomp: fix mutexinoutset dependence for proxy tasks

Once __kmp_task_finish is not executed for proxy tasks,
move mutexinoutset dependency code to __kmp_release_deps
which is executed for all task kinds.

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

3 years ago[lld/mac] Don't warn on -bundle and -execute flags
Nico Weber [Mon, 23 Nov 2020 15:59:38 +0000 (10:59 -0500)]
[lld/mac] Don't warn on -bundle and -execute flags

They've been implemented since D87856 but since they still were
HelpHidden, the driver still warned claiming they were implemented.
Remove HelpHidden.

Use -fatal_warnings to test that the flags now don't warn. The
test depends on D91894 and D91891 to pass.

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

3 years ago[lld-macho] Don't warn on non-existent system libraries
Nico Weber [Fri, 20 Nov 2020 21:05:33 +0000 (16:05 -0500)]
[lld-macho] Don't warn on non-existent system libraries

Now, new mach-o lld no longer warns if the isysroot has just
usr/lib and System/Library/Frameworks but is missing usr/local/lib
and System/Frameworks.

This matches ld64 and old mach-o lld and fixes a regression from D85992.

It also fixes the only test failure in `check-lld` when running it
on an M1 Mac.

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

3 years ago[HIP] Fix HIP test on windows due to lld suffix
Aaron En Ye Shi [Mon, 30 Nov 2020 20:53:17 +0000 (20:53 +0000)]
[HIP] Fix HIP test on windows due to lld suffix

On Windows, lld is instead named lld.exe, therefore
a few HIP tests are failing. Instead the wildcard should
be modified to .*lld.* to handle .exe. This fixes the
bug: https://bugs.llvm.org/show_bug.cgi?id=48289.

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

3 years ago[CodeGen] -fno-delete-null-pointer-checks: change dereferenceable to dereferenceable_...
Fangrui Song [Mon, 30 Nov 2020 20:44:35 +0000 (12:44 -0800)]
[CodeGen] -fno-delete-null-pointer-checks: change dereferenceable to dereferenceable_or_null

After D17993, with -fno-delete-null-pointer-checks we add the dereferenceable attribute to the `this` pointer.

We have observed that one internal target which worked before fails even with -fno-delete-null-pointer-checks.
Switching to dereferenceable_or_null fixes the problem.

dereferenceable currently does not always respect NullPointerIsValid and may
imply nonnull and lead to aggressive optimization. The optimization may be
related to `CallBase::isReturnNonNull`, `Argument::hasNonNullAttr`, or
`Value::getPointerDereferenceableBytes`. See D66664 and D66618 for some discussions.

Reviewed By: bkramer, rsmith

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

3 years ago[ConstraintElimination] Expand GEP decomposition tests.
Florian Hahn [Mon, 30 Nov 2020 16:47:28 +0000 (16:47 +0000)]
[ConstraintElimination] Expand GEP decomposition tests.

This adjusts the tests to cover more scenarios.

3 years ago[FastISel] NFC: Clean up unnecessary bookkeeping
Paul Robinson [Mon, 30 Nov 2020 19:42:08 +0000 (11:42 -0800)]
[FastISel] NFC: Clean up unnecessary bookkeeping

Now that we flush the local value map for every instruction, we don't
need any extra flushes for specific cases.  Also, LastFlushPoint is
not used for anything.  Follow-ups to #dc35368 (D91734).

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

3 years agogithub actions: Use correct credentials for pushing
Tom Stellard [Mon, 30 Nov 2020 20:25:43 +0000 (12:25 -0800)]
github actions: Use correct credentials for pushing

3 years ago[libTooling] Remove deprecated Clang Transformer declarations
Yitzhak Mandelbaum [Mon, 30 Nov 2020 19:55:15 +0000 (19:55 +0000)]
[libTooling] Remove deprecated Clang Transformer declarations

A number of declarations were leftover after the move from `clang::tooling` to
`clang::transformer`. This patch removes those declarations and upgrades the
handful of references to the deprecated declarations.

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

3 years ago[ms] [llvm-ml] Test macro function invocations in arbitrary positions
Eric Astor [Mon, 30 Nov 2020 19:35:46 +0000 (14:35 -0500)]
[ms] [llvm-ml] Test macro function invocations in arbitrary positions

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

3 years agoSplitKit: Use Register
Matt Arsenault [Mon, 30 Nov 2020 19:59:21 +0000 (14:59 -0500)]
SplitKit: Use Register

3 years ago[llvm][inliner] Reuse the inliner pass to implement 'always inliner'
Mircea Trofin [Mon, 16 Nov 2020 22:01:53 +0000 (14:01 -0800)]
[llvm][inliner] Reuse the inliner pass to implement 'always inliner'

Enable performing mandatory inlinings upfront, by reusing the same logic
as the full inliner, instead of the AlwaysInliner. This has the
following benefits:
- reduce code duplication - one inliner codebase
- open the opportunity to help the full inliner by performing additional
function passes after the mandatory inlinings, but before th full
inliner. Performing the mandatory inlinings first simplifies the problem
the full inliner needs to solve: less call sites, more contextualization, and,
depending on the additional function optimization passes run between the
2 inliners, higher accuracy of cost models / decision policies.

Note that this patch does not yet enable much in terms of post-always
inline function optimization.

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

3 years ago[DL] Inline getAlignmentInfo() implementation (NFC)
Nikita Popov [Mon, 30 Nov 2020 17:33:07 +0000 (18:33 +0100)]
[DL] Inline getAlignmentInfo() implementation (NFC)

Apart from getting the entry in the table (which is already a
separate function), the remaining logic is different for all
alignment types and is better combined with getAlignment().

This is a minor efficiency improvement, and should make further
improvements like using separate storage for different alignment
types simpler.

3 years agoCreating a named struct requires only a Context and a name, but looking up a struct...
Nick Lewycky [Mon, 30 Nov 2020 19:34:12 +0000 (11:34 -0800)]
Creating a named struct requires only a Context and a name, but looking up a struct by name requires a Module. The method on Module merely accesses the LLVMContextImpl and no data from the module itself, so this patch moves getTypeByName to a static method on StructType that takes a Context and a name.

There's a small number of users of this function, they are all updated.

This updates the C API adding a new method LLVMGetTypeByName2 that takes a context and a name.

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

3 years ago[ms] [llvm-ml] Implement the statement expansion operator
Eric Astor [Mon, 30 Nov 2020 16:35:24 +0000 (11:35 -0500)]
[ms] [llvm-ml] Implement the statement expansion operator

If prefaced with a %, expand text macros and macro functions in any statement.

Also, prevent expanding text macros in the message of an ECHO directive unless expanded explicitly by the statement expansion operator.

Reviewed By: thakis

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

3 years ago[x86] add tests for maxnum/minnum with nnan; NFC
Sanjay Patel [Mon, 30 Nov 2020 18:56:08 +0000 (13:56 -0500)]
[x86] add tests for maxnum/minnum with nnan; NFC

3 years ago[AArch64] Enable Cortex-A55 schedmodel
Sjoerd Meijer [Mon, 30 Nov 2020 17:37:41 +0000 (17:37 +0000)]
[AArch64] Enable Cortex-A55 schedmodel

The model was committed in 4b8ade837e36b7f0181ce86fc23f33851d0fdd35
but not yet enabled to allow for a few fix ups. This adds a few
of these fixes, and also a LLVM MCA test to check most instructions.
While I do have plans to look into some more tuning, it's time to
enable this as it better than using the A53 schedule.

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

3 years ago[CSSPGO] Disabling a pseudo probe test on non-x86 platforms.
Hongtao Yu [Mon, 30 Nov 2020 19:18:34 +0000 (11:18 -0800)]
[CSSPGO] Disabling a pseudo probe test on non-x86 platforms.

Disabling a pseudo probe test on non-x86 platforms since it's not fully tested there.

3 years ago[FastISel] NFC: Remove obsolete -fast-isel-sink-local-values option
Paul Robinson [Mon, 30 Nov 2020 18:24:08 +0000 (10:24 -0800)]
[FastISel] NFC: Remove obsolete -fast-isel-sink-local-values option

This option is not used for anything after #dc35368 (D91734).

3 years ago[X86] Zero-extend pointers to i64 for x86_64
Harald van Dijk [Mon, 30 Nov 2020 18:51:23 +0000 (18:51 +0000)]
[X86] Zero-extend pointers to i64 for x86_64

For LP64 mode, this has no effect as pointers are already 64 bits.
For ILP32 mode (x32), this extension is specified by the ABI.

Reviewed By: pengfei

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

3 years ago[libcxxabi] Add macro for changing functions to support the relative vtables ABI
Leonard Chan [Mon, 6 Apr 2020 23:08:58 +0000 (16:08 -0700)]
[libcxxabi] Add macro for changing functions to support the relative vtables ABI

Under the relative vtables ABI, __dynamic_cast will not work since it assumes
the vtable pointer is 2 ptrdiff_ts away from the start of the vtable (8-byte
offset to top + 8-byte pointer to typeinfo) when it is actually 8 bytes away
(4-byte offset to top + 4-byte offset to typeinfo). This adjusts the logic under
__dynamic_cast and other areas vtable calculations are done to support this ABI
when it's used.

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

3 years ago[InstCombine][X86] Add basic addsub intrinsic SimplifyDemandedVectorElts support...
Simon Pilgrim [Mon, 30 Nov 2020 18:39:00 +0000 (18:39 +0000)]
[InstCombine][X86] Add basic addsub intrinsic SimplifyDemandedVectorElts support (PR46277)

Pass through the demanded elts mask to the source operands.

The next step will be to add support for folding to add/sub if we only demand odd/even elements.

3 years ago[gn build] Port 64fa8cce225
LLVM GN Syncbot [Mon, 30 Nov 2020 18:20:24 +0000 (18:20 +0000)]
[gn build] Port 64fa8cce225

3 years ago[CSSPGO] A Clang switch -fpseudo-probe-for-profiling for pseudo-probe instrumentation.
Hongtao Yu [Tue, 18 Aug 2020 23:28:47 +0000 (16:28 -0700)]
[CSSPGO] A Clang switch -fpseudo-probe-for-profiling for pseudo-probe instrumentation.

This change introduces a new clang switch `-fpseudo-probe-for-profiling` to enable AutoFDO with pseudo instrumentation. Please refer to https://reviews.llvm.org/D86193 for the whole story.

One implication from pseudo-probe instrumentation is that the profile is now sensitive to CFG changes. We perform the pseudo instrumentation very early in the pre-LTO pipeline, before any CFG transformation. This ensures that the CFG instrumented and annotated is stable and optimization-resilient.

The early instrumentation also allows the inliner to duplicate probes for inlined instances. When a probe along with the other instructions of a callee function are inlined into its caller function, the GUID of the callee function goes with the probe. This allows samples collected on inlined probes to be reported for the original callee function.

Reviewed By: wmi

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

3 years ago[CSSPGO] Pseudo probe instrumentation pass
Hongtao Yu [Tue, 25 Aug 2020 00:52:47 +0000 (17:52 -0700)]
[CSSPGO] Pseudo probe instrumentation pass

This change introduces a pseudo probe instrumentation pass for block instrumentation. Please refer to https://reviews.llvm.org/D86193 for the whole story.

Given the following LLVM IR:

```
define internal void @foo2(i32 %x, void (i32)* %f) !dbg !4 {
bb0:
  %cmp = icmp eq i32 %x, 0
   br i1 %cmp, label %bb1, label %bb2
bb1:
   br label %bb3
bb2:
   br label %bb3
bb3:
   ret void
}
```

The instrumented IR will look like below. Note that each llvm.pseudoprobe intrinsic call represents a pseudo probe at a block, of which the first parameter is the GUID of the probe’s owner function and the second parameter is the probe’s ID.

```
define internal void @foo2(i32 %x, void (i32)* %f) !dbg !4 {
bb0:
   %cmp = icmp eq i32 %x, 0
   call void @llvm.pseudoprobe(i64 837061429793323041, i64 1)
   br i1 %cmp, label %bb1, label %bb2
bb1:
   call void @llvm.pseudoprobe(i64 837061429793323041, i64 2)
   br label %bb3
bb2:
   call void @llvm.pseudoprobe(i64 837061429793323041, i64 3)
   br label %bb3
bb3:
   call void @llvm.pseudoprobe(i64 837061429793323041, i64 4)
   ret void
}
```

Reviewed By: wmi

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

3 years ago[PowerPC] Delete remnant Darwin code in PPCAsmParser
Fangrui Song [Mon, 30 Nov 2020 18:16:19 +0000 (10:16 -0800)]
[PowerPC] Delete remnant Darwin code in PPCAsmParser

Continue the work started at D50989.
The code has been long dead since the triple has been removed (D75494).

Reviewed By: nickdesaulniers, void

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

3 years ago[InstCombine][X86] Add addsub PR46277 test case
Simon Pilgrim [Mon, 30 Nov 2020 18:10:52 +0000 (18:10 +0000)]
[InstCombine][X86] Add addsub PR46277 test case

Also fix a copy+paste typo in the elts_addsub_v4f32 demanded elts test from the godbolt reference

3 years ago[VE][NFC] Update comments
Kazushi (Jam) Marukawa [Mon, 30 Nov 2020 17:53:28 +0000 (02:53 +0900)]
[VE][NFC] Update comments

Update comments.  I forgot to update it previously when I modified code.

3 years ago[SelectionDAGBuilder] Update signature of `getRegsAndSizes()`.
Francesco Petrogalli [Mon, 30 Nov 2020 17:30:11 +0000 (17:30 +0000)]
[SelectionDAGBuilder] Update signature of `getRegsAndSizes()`.

The mapping between registers and relative size has been updated to
use TypeSize to account for the size of scalable EVTs.

The patch is a NFCI, if not for the fact that with this change the
function `getUnderlyingArgRegs` does not raise a warning for implicit
conversion of `TypeSize` to `unsigned` when generating machine code
from the test added to the patch.

Reviewed By: arsenm

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

3 years ago[VE] Optimize prologue/epilogue instructions about GOT
Kazushi (Jam) Marukawa [Mon, 23 Nov 2020 07:12:39 +0000 (16:12 +0900)]
[VE] Optimize prologue/epilogue instructions about GOT

Optimize prologue/epilogue instructions if a given function use GOT but
do not call other functions by eliminating FP.  Previously, we had wrong
implementations taken from other architectures.  Update regression tests
also.

Reviewed By: simoll

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

3 years ago[VE] Clean check routines of branch types
Kazushi (Jam) Marukawa [Sat, 28 Nov 2020 02:26:52 +0000 (11:26 +0900)]
[VE] Clean check routines of branch types

Previously, these check routines accepted non-generatble instructions.
This time, I clean them and add assert for those non-generatable
instructions.

Reviewed By: simoll

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

3 years agoAdd -fintegrated-as to second invocation of clang in test case.
Zarko Todorovski [Mon, 30 Nov 2020 17:15:25 +0000 (12:15 -0500)]
Add -fintegrated-as to second invocation of clang in test case.

3 years ago[analyzer][StdLibraryFunctionsChecker] Fix typos in summaries of mmap and mmap64
Balazs Benics [Mon, 30 Nov 2020 17:06:28 +0000 (18:06 +0100)]
[analyzer][StdLibraryFunctionsChecker] Fix typos in summaries of mmap and mmap64

The fd parameter of
```
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
```
should be constrained to the range [0, IntMax] as that is of type int.
Constraining to the range [0, Off_tMax] would result in a crash as that is
of a signed type with the value of 0xff..f (-1).

The crash would happen when we try to apply the arg constraints.
At line 583: assert(Min <= Max), as 0 <= -1 is not satisfied

The mmap64 is fixed for the same reason.

Reviewed By: martong, vsavchenko

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

3 years ago[FPEnv] clang should get from the AST the metadata for constrained FP builtins
Kevin P. Neal [Mon, 30 Nov 2020 16:56:38 +0000 (11:56 -0500)]
[FPEnv] clang should get from the AST the metadata for constrained FP builtins

Currently clang is not correctly retrieving from the AST the metadata for
constrained FP builtins. This patch fixes that for the non-target specific
builtins.

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

3 years ago[ASTImporter] Support import of CXXDeductionGuideDecl
Gabor Marton [Wed, 25 Nov 2020 17:32:30 +0000 (18:32 +0100)]
[ASTImporter] Support import of CXXDeductionGuideDecl

CXXDeductionGuideDecl is a FunctionDecl, but its constructor should be called
appropriately, at least to set the kind variable properly.

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

3 years ago[Flang][OpenMP] Add semantic checks for OpenMP Private clause.
Praveen G [Mon, 30 Nov 2020 16:35:35 +0000 (11:35 -0500)]
[Flang][OpenMP] Add semantic checks for OpenMP Private clause.

Add the semantic checks for the OpenMP 4.5 - 2.15.3.3 Private clause.

1. Pointers with the INTENT(IN) attribute may not appear in a private clause.
2. Variables that appear in namelist statements may not appear in a private clause.
   A flag 'InNamelist' is added to the Symbol::Flag to identify the symbols
   in Namelist statemnts.

Test cases : omp-private01.f90, omp-private02.f90

Reviewed By: kiranchandramohan

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

3 years ago[sanitizer] Disable use_tls_dynamic on on-Android x86 Linux.
Vy Nguyen [Sun, 29 Nov 2020 02:09:21 +0000 (21:09 -0500)]
[sanitizer] Disable use_tls_dynamic on on-Android x86 Linux.

https://bugs.chromium.org/p/chromium/issues/detail?id=1153421

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

3 years ago[RISCV] Combine (GORCI (GORCI x, C2), C1) -> (GORCI x, C1|C2).
Craig Topper [Mon, 30 Nov 2020 16:33:10 +0000 (08:33 -0800)]
[RISCV] Combine (GORCI (GORCI x, C2), C1) -> (GORCI x, C1|C2).

Unlike GREVI, GORCI stages can't be undone, but they are
redundant if done more than once.

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

3 years ago[IR][LoopRotate] remove assertion that phi must have at least one operand
Sanjay Patel [Mon, 30 Nov 2020 16:25:07 +0000 (11:25 -0500)]
[IR][LoopRotate] remove assertion that phi must have at least one operand

This was suggested in D92247 - I initially committed an alternate
fix ( bfd2c216ea ) to avoid the crash/assert shown in
https://llvm.org/PR48296 ,
but that was reverted because it caused msan failures on other
tests. We can try to revive that patch using the test included
here, but I do not have an immediate plan to isolate that problem.

3 years ago[RISCV] Custom legalize bswap/bitreverse to GREVI with Zbp extension to enable them...
Craig Topper [Mon, 30 Nov 2020 16:14:30 +0000 (08:14 -0800)]
[RISCV] Custom legalize bswap/bitreverse to GREVI with Zbp extension to enable them to combine with other GREVI instructions

This enables bswap/bitreverse to combine with other GREVI patterns or each other without needing to add more special cases to the DAG combine or new DAG combines.

I've also enabled the existing GREVI combine for GREVIW so that it can pick up the i32 bswap/bitreverse on RV64 after they've been type legalized to GREVIW.

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

3 years ago[ELF] Don't relax R_X86_64_GOTPCRELX if addend != -4
Fangrui Song [Mon, 30 Nov 2020 16:30:19 +0000 (08:30 -0800)]
[ELF] Don't relax R_X86_64_GOTPCRELX if addend != -4

clang may produce `movl x@GOTPCREL+4(%rip), %eax` when loading the high 32 bits
of the address of a global variable in -fpic/-fpie mode.

If assembled by GNU as, the fixup emits an R_X86_64_GOTPCRELX with an
addend != -4. The instruction loads from the GOT entry with an offset
and thus it is incorrect to relax the instruction.

If assembled by the integrated assembler, we emit R_X86_64_GOTPCREL for
relocations that definitely cannot be relaxed (D92114), so this patch is not
needed.

This patch disables the relaxation, which is compatible with the implementation in GNU ld
("Add R_X86_64_[REX_]GOTPCRELX support to gas and ld").

Reviewed By: grimar, jhenderson

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

3 years ago[X86] Don't emit R_X86_64_[REX_]GOTPCRELX for a GOT load with an offset
Fangrui Song [Mon, 30 Nov 2020 16:27:30 +0000 (08:27 -0800)]
[X86] Don't emit R_X86_64_[REX_]GOTPCRELX for a GOT load with an offset

clang may produce `movl x@GOTPCREL+4(%rip), %eax` when loading the high
32 bits of the address of a global variable in -fpic/-fpie mode.

If assembled by GNU as, the fixup emits R_X86_64_GOTPCRELX with an addend != -4.
The instruction loads from the GOT entry with an offset and thus it is incorrect
to relax the instruction.

This patch does not emit a relaxable relocation for a GOT load with an offset
because R_X86_64_[REX_]GOTPCRELX do not make sense for instructions which cannot
be relaxed.  The result is good enough for LLD to work. GNU ld relaxes
mov+GOTPCREL as well, but it suppresses the relaxation if addend != -4.

Reviewed By: jhenderson

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

3 years ago[RISCV] Only combine (or (GREVI x, shamt), x) -> GORCI if shamt is a power of 2.
Craig Topper [Mon, 30 Nov 2020 15:06:32 +0000 (07:06 -0800)]
[RISCV] Only combine (or (GREVI x, shamt), x) -> GORCI if shamt is a power of 2.

GORCI performs an OR between each stage. So we need to ensure only
one stage is active before doing this combine.

Initial attempts at finding a test case for this failed due to
the order things get combined. It's most likely that we'll form
one stage of GREVI then combine to GORCI before the two stages of
GREVI are able to be formed and combined with each other to form
a multi stage GREVI.

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

3 years ago[ConstraintElimination] Add additional GEP decomposition tests.
Florian Hahn [Mon, 30 Nov 2020 15:47:43 +0000 (15:47 +0000)]
[ConstraintElimination] Add additional GEP decomposition tests.

3 years ago[X86] Add vbmi2 test coverage for vector rotations
Simon Pilgrim [Mon, 30 Nov 2020 15:59:46 +0000 (15:59 +0000)]
[X86] Add vbmi2 test coverage for vector rotations

We should be using the funnel shift instructions for vXi16 types.

3 years ago[IR] improve code comment/logic in removePredecessor(); NFC
Sanjay Patel [Mon, 30 Nov 2020 15:49:40 +0000 (10:49 -0500)]
[IR] improve code comment/logic in removePredecessor(); NFC

This was suggested in the post-commit review of ce134da4b1.

3 years ago[lldb] Always include template arguments that have their default value in the interna...
Raphael Isemann [Mon, 30 Nov 2020 15:14:30 +0000 (16:14 +0100)]
[lldb] Always include template arguments that have their default value in the internal type name

Our type formatters/summaries match on the internal type name we generate in LLDB for Clang types.

These names were generated using Clang's default printing policy. However Clang's
default printing policy got tweaked over the last month to make the generated type
names more readable (by for example excluding inline/anonymous namespaces and
removing template arguments that have their default value). This broke the formatter
system where LLDB's matching logic now no longer can format certain types as
the new type names generated by Clang's default printing policy no longer match
the type names that LLDB/the user specified.

I already introduced LLDB's own type printing policy and fixed the inline/anonymous
namespaces in da121fff1184267a405f81a87f7314df2d474e1c (just to get the
test suite passing again).

This patch is restoring the old type printing behaviour where always include the template
arguments in the internal type name (even if they match the default args). This should get
template type formatters/summaries working again in the rare situation where we do
know template default arguments within LLDB. This can only happen when either having
a template that was parsed in the expression parser or when we get type information from a C++ module.

The Clang change that removed defaulted template arguments from Clang's printing policy was
e7f3e2103cdb567dda4fd52f81bf4bc07179f5a8

Reviewed By: labath

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

3 years agoRevert "[IR][LoopRotate] avoid leaving phi with no operands (PR48296)"
Sanjay Patel [Mon, 30 Nov 2020 15:13:38 +0000 (10:13 -0500)]
Revert "[IR][LoopRotate] avoid leaving phi with no operands (PR48296)"

This reverts commit bfd2c216ea8ef09f8fb1f755ca2b89f86f74acbb.
This appears to be causing stage2 msan failures on buildbots:
  FAIL: LLVM :: Transforms/SimplifyCFG/X86/bug-25299.ll (65872 of 71835)
  ******************** TEST 'LLVM :: Transforms/SimplifyCFG/X86/bug-25299.ll' FAILED ********************
  Script:
  --
  : 'RUN: at line 1';   /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/opt < /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/test/Transforms/SimplifyCFG/X86/bug-25299.ll -simplifycfg -S | /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/FileCheck /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/test/Transforms/SimplifyCFG/X86/bug-25299.ll
  --
  Exit Code: 2
  Command Output (stderr):
  --
  ==87374==WARNING: MemorySanitizer: use-of-uninitialized-value
      #0 0x9de47b6 in getBasicBlockIndex /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/IR/Instructions.h:2749:5
      #1 0x9de47b6 in simplifyCommonResume /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:4112:23
      #2 0x9de47b6 in simplifyResume /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:4039:12
      #3 0x9de47b6 in (anonymous namespace)::SimplifyCFGOpt::simplifyOnce(llvm::BasicBlock*) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:6330:16
      #4 0x9dcca13 in run /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:6358:16
      #5 0x9dcca13 in llvm::simplifyCFG(llvm::BasicBlock*, llvm::TargetTransformInfo const&, llvm::SimplifyCFGOptions const&, llvm::SmallPtrSetImpl<llvm::BasicBlock*>*) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:6369:8
      #6 0x974643d in iterativelySimplifyCFG(

3 years ago[mlir] Make mlir-cpu-runner depend on native instead of X86
Nicolas Vasilache [Mon, 30 Nov 2020 15:11:34 +0000 (15:11 +0000)]
[mlir] Make mlir-cpu-runner depend on native instead of X86

3 years ago[windows-itanium] handle dllimport/export code paths separately and share with PS4
Ben Dunbobbin [Mon, 30 Nov 2020 11:50:45 +0000 (11:50 +0000)]
[windows-itanium] handle dllimport/export code paths separately and share with PS4

Similar to Windows Itanium, PS4 is also an Itanium C++ ABI variant
which shares the goal of semantic compatibility with Microsoft C++
code that uses dllimport/export.

This change introduces a new function to determine from the triple
if an environment aims for compatibility with MS C++ code w.r.t to
these attributes and guards the relevant code paths using that
function.

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

3 years ago[lld-macho] Implement -fatal_warnings
Nico Weber [Fri, 20 Nov 2020 21:44:55 +0000 (16:44 -0500)]
[lld-macho] Implement -fatal_warnings

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

3 years ago[IR][LoopRotate] avoid leaving phi with no operands (PR48296)
Sanjay Patel [Mon, 30 Nov 2020 13:59:40 +0000 (08:59 -0500)]
[IR][LoopRotate] avoid leaving phi with no operands (PR48296)

https://llvm.org/PR48296 shows an example where we delete all of the operands
of a phi without actually deleting the phi, and that is currently considered
invalid IR. The reduced test included here would crash for that reason.

A suggested follow-up is to loosen the assert to allow 0-operand phis
in unreachable blocks.

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

3 years agoAdd 'asserts' requiremnt to test/CodeGen/ARM/cortex-a57-misched-mla.mir
Dmitri Gribenko [Mon, 30 Nov 2020 14:19:27 +0000 (15:19 +0100)]
Add 'asserts' requiremnt to test/CodeGen/ARM/cortex-a57-misched-mla.mir

'-debug-only=machine-scheduler' only works when asserts are enabled.

3 years ago[LLDB/Lua] add support for one-liner breakpoint callback
Pedro Tammela [Sun, 15 Nov 2020 19:39:16 +0000 (19:39 +0000)]
[LLDB/Lua] add support for one-liner breakpoint callback

These callbacks are set using the following:
   breakpoint command add -s lua -o "print('hello world!')"

The user supplied script is executed as:
   function (frame, bp_loc, ...)
      <body>
   end

So the local variables 'frame', 'bp_loc' and vararg are all accessible.
Any global variables declared will persist in the Lua interpreter.
A user should never hold 'frame' and 'bp_loc' in a global variable as
these userdatas are context dependent.

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

3 years ago[LangRef] missing link, minor fix
Juneyoung Lee [Mon, 30 Nov 2020 14:09:36 +0000 (23:09 +0900)]
[LangRef] missing link, minor fix

3 years ago[ConstantFold] Don't fold and/or i1 poison to poison (NFC)
Juneyoung Lee [Mon, 30 Nov 2020 13:48:43 +0000 (22:48 +0900)]
[ConstantFold] Don't fold and/or i1 poison to poison (NFC)

.. because it causes miscompilation when combined with select i1 -> and/or.

It is the select fold which is incorrect; but it is costly to disable the fold, so hack this one.

D92270

3 years ago[llvm-objdump] Require x86 target for mcpu/attr test
David Spickett [Mon, 30 Nov 2020 13:46:16 +0000 (13:46 +0000)]
[llvm-objdump] Require x86 target for mcpu/attr test

This fixes test failure on clang-cmake-armv7-quick bot
with change c2ead57ccf74900901fdda1cd0fbe9a7a0d1297a.

This bot only builds Arm/AArch64 targets.

3 years ago[InstCombine][X86] Add addsub tests showing failure to simplify demandedelts (PR46277)
Simon Pilgrim [Mon, 30 Nov 2020 13:37:04 +0000 (13:37 +0000)]
[InstCombine][X86] Add addsub tests showing failure to simplify demandedelts (PR46277)

3 years ago[lld/mac] Add --reproduce option
Nico Weber [Sun, 29 Nov 2020 03:38:27 +0000 (22:38 -0500)]
[lld/mac] Add --reproduce option

This adds support for ld.lld's --reproduce / lld-link's /reproduce:
flag to the MachO port. This flag can be added to a link command
to make the link write a tar file containing all inputs to the link
and a response file containing the link command. This can be used
to reproduce the link on another machine, which is useful for sharing
bug report inputs or performance test loads.

Since the linker is usually called through the clang driver and
adding linker flags can be a bit cumbersome, setting the env var
`LLD_REPRODUCE=foo.tar` triggers the feature as well.

The file response.txt in the archive can be used with
`ld64.lld.darwinnew $(cat response.txt)` as long as the contents are
smaller than the command-line limit, or with `ld64.lld.darwinnew
@response.txt` once D92149 is in.

The support in this patch is sufficient to create a tar file for
Chromium's base_unittests that can link after unpacking on a different
machine.

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

3 years agoTry harder to get rid off cortex-a57-misched-mla.s
Hans Wennborg [Mon, 30 Nov 2020 13:30:44 +0000 (14:30 +0100)]
Try harder to get rid off cortex-a57-misched-mla.s

3 years ago[mac/lld] Add support for response files
Nico Weber [Thu, 26 Nov 2020 02:48:27 +0000 (21:48 -0500)]
[mac/lld] Add support for response files

ld64 learned about them in Xcode 12, so we should too.

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

3 years ago[VE] Optimize prologue/epilogue instructions
Kazushi (Jam) Marukawa [Thu, 26 Nov 2020 13:37:34 +0000 (22:37 +0900)]
[VE] Optimize prologue/epilogue instructions

Optimize eliminate FP mechanism.  This time optimize a function which has
no call but fixed stack objects.  LLVM eliminates FP on such functions now.
Also, optimize GOT/PLT registers save/restore instructions if a given
function doesn't uses them.  In addition, remove generating mechanism of
`.cfi` instructions since those are taken from other architectures and not
inspected yet.  Update regression tests, also.

Reviewed By: simoll

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

3 years agoTry to fix bots after 112b3cb by removing cortex-a57-misched-mla.s
Hans Wennborg [Mon, 30 Nov 2020 13:15:41 +0000 (14:15 +0100)]
Try to fix bots after 112b3cb by removing cortex-a57-misched-mla.s