platform/upstream/llvm.git
2 years ago[Concepts] Fix overload resolution bug with constrained candidates
Roy Jacobson [Fri, 15 Apr 2022 15:58:11 +0000 (11:58 -0400)]
[Concepts] Fix overload resolution bug with constrained candidates

When doing overload resolution, we have to check that candidates' parameter types are equal before trying to find a better candidate through checking which candidate is more constrained.
This revision adds this missing check and makes us diagnose those cases as ambiguous calls when the types are not equal.

Fixes GitHub issue https://github.com/llvm/llvm-project/issues/53640

Reviewed By: erichkeane

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

2 years ago[hwasan][test] Change -hwasan to -passes=hwasan
Fangrui Song [Sat, 23 Apr 2022 21:07:31 +0000 (14:07 -0700)]
[hwasan][test] Change -hwasan to -passes=hwasan

With the -enable-new-pm defaulting to true, the two forms have the same effect,
but the previous form uses the legacy pass manager syntax which is being phased
out.

2 years ago[Bazel] Add more mlir dependencies after D124298
Fangrui Song [Sat, 23 Apr 2022 20:06:54 +0000 (13:06 -0700)]
[Bazel] Add more mlir dependencies after D124298

The Bazel layering_check feature compiles libraries with `-fmodule-name=X
-fmodules-strict-decluse` which require #include to be in deps.

2 years ago[Bazel] Make mlir:BufferizationDialect depend on mlir:ArithmeticDialect after D124298
Fangrui Song [Sat, 23 Apr 2022 19:59:37 +0000 (12:59 -0700)]
[Bazel] Make mlir:BufferizationDialect depend on mlir:ArithmeticDialect after D124298

2 years ago[analyzer] Clean checker options from bool to DefaultBool (NFC)
Vince Bridgers [Sun, 10 Apr 2022 12:44:11 +0000 (07:44 -0500)]
[analyzer] Clean checker options from bool to DefaultBool (NFC)

A recent review emphasized the preference to use DefaultBool instead of
bool for checker options. This change is a NFC and cleans up some of the
instances where bool was used, and could be changed to DefaultBool.

Reviewed By: steakhal

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

2 years ago[OpenMP] Use CUDA's non-RDC mode when LTO has whole program visibility
Joseph Huber [Fri, 22 Apr 2022 17:19:16 +0000 (13:19 -0400)]
[OpenMP] Use CUDA's non-RDC mode when LTO has whole program visibility

When we do LTO we consider ourselves to have whole program visibility if
every single input file we have contains LLVM bitcode. If we have whole
program visibliity then we can create a single image and utilize CUDA's
non-RDC mode by not passing `-c` to `ptxas` and ignoring the `nvlink`
job. This should be faster for some situations and also saves us the
time executing `nvlink`.

Reviewed By: tra

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

2 years ago[libc++] Fixes concepts overload resolution.
Mark de Wever [Wed, 20 Apr 2022 16:47:13 +0000 (18:47 +0200)]
[libc++] Fixes concepts overload resolution.

D123182 fixes a bug in Clang's overload resolution. After it landed it
was discovered `basic_format_arg`'s constructors contains this bug. This
fixes the bug in libc++, unblocking D123182.

The code has been tested in combination with D123182.

Reviewed By: royjacobson, #libc

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

2 years ago[BOLT][CMAKE] Simplify Clang/LLD identification
Amir Ayupov [Sat, 23 Apr 2022 16:16:53 +0000 (12:16 -0400)]
[BOLT][CMAKE] Simplify Clang/LLD identification

Refactor nested conditions. NFC

Reviewed By: maksfb

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

2 years agoRevert "[clang] Adding Platform/Architecture Specific Resource Header Installation...
Ye Luo [Sat, 23 Apr 2022 14:25:54 +0000 (09:25 -0500)]
Revert "[clang] Adding Platform/Architecture Specific Resource Header Installation Targets"

Caused build failure see github issue #55002

This reverts commit 2512a875ccac158bc9b654b09e3347db167e33df.

2 years ago[C++20][Modules][Driver][HU 4/N] Add fdirectives-only mode for preprocessing output.
Iain Sandoe [Fri, 31 Jul 2020 09:44:12 +0000 (10:44 +0100)]
[C++20][Modules][Driver][HU 4/N] Add fdirectives-only mode for preprocessing output.

When the -fdirectives-only option is used together with -E, the preprocessor
output reflects evaluation of if/then/else directives.

Thus it preserves macros that are still live after such processing.
This output can be consumed by a second compilation to produce a header unit.

We automatically invoke this (with -E) when we know that the job produces a
header unit so that the preprocessed output reflects the macros that will be
defined when the binary HU is emitted.

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

2 years ago[NFC] Sync code for upstreaming.
Eric Schweitz [Fri, 22 Apr 2022 20:57:21 +0000 (13:57 -0700)]
[NFC] Sync code for upstreaming.

Remove redundant code.

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

2 years ago[IndVarSimplify] Replace legacy loop-unswitch with SimpleLoopUnswitch.
Florian Hahn [Sat, 23 Apr 2022 13:08:47 +0000 (14:08 +0100)]
[IndVarSimplify] Replace legacy loop-unswitch with SimpleLoopUnswitch.

Also moves the test to use the new pass manager.

2 years ago[SimpleLoopUnswitch] Use SLU version of memoryssa-threshold option.
Florian Hahn [Sat, 23 Apr 2022 13:03:32 +0000 (14:03 +0100)]
[SimpleLoopUnswitch] Use SLU version of memoryssa-threshold option.

Update the test to use the SLU version of the option.

2 years ago[SCCP] Add initial tests for freeze.
Florian Hahn [Fri, 22 Apr 2022 21:23:21 +0000 (22:23 +0100)]
[SCCP] Add initial tests for freeze.

2 years ago[SCEV] Use getConstant to construct SCEV for ConstantInt (NFC).
Florian Hahn [Sat, 23 Apr 2022 10:12:58 +0000 (11:12 +0100)]
[SCEV] Use getConstant to construct SCEV for ConstantInt (NFC).

We already know that we will construct a SCEVConstant. Directly use
getConstant, rather than going through getSCEV.

2 years ago[mlir][bufferize][NFC] Remove old references to Comprehensive Bufferize
Matthias Springer [Sat, 23 Apr 2022 08:59:47 +0000 (17:59 +0900)]
[mlir][bufferize][NFC] Remove old references to Comprehensive Bufferize

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

2 years ago[mlir][bufferize][NFC] Clean up test cases
Matthias Springer [Sat, 23 Apr 2022 08:59:06 +0000 (17:59 +0900)]
[mlir][bufferize][NFC] Clean up test cases

Run `one-shot-bufferize` instead of `linalg-comprehensive-module-bufferize` and move some test cases to their respective dialects.

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

2 years ago[C++20][Modules][Driver][HU 3/N] Handle foo.h with -fmodule-header and/or C++ invocation.
Iain Sandoe [Thu, 18 Feb 2021 12:23:15 +0000 (12:23 +0000)]
[C++20][Modules][Driver][HU 3/N] Handle foo.h with -fmodule-header and/or C++ invocation.

Allow an invocation like clang -fmodule-header bar.h (which will be a C++
compilation, but using a header which will be recognised as a C one).

Also  we do not want to produce:
 "treating 'c-header' input as 'c++-header' when in C++ mode"
diagnostics when the user has been specific about the intent.

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

2 years ago[mlir][NFC] Shift a bunch of dialect includes from the .h to the .cpp
River Riddle [Fri, 22 Apr 2022 21:17:08 +0000 (14:17 -0700)]
[mlir][NFC] Shift a bunch of dialect includes from the .h to the .cpp

Now that dialect constructors are generated in the .cpp file, we can
drop all of the dependent dialect includes from the .h file.

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

2 years ago[mlir] Generate Dialect constructors in .cpp instead of .h
River Riddle [Fri, 22 Apr 2022 21:16:06 +0000 (14:16 -0700)]
[mlir] Generate Dialect constructors in .cpp instead of .h

By generating in the .h file, we were forcing dialects to include
a lot of additional header files because:

* Fields of the dialect, e.g. std::unique_ptr<>, were unable to use
  forward declarations.
* Dependent dialects are loaded in the constructor, requiring the
  full definition of each dependent dialect (which, depending on
  the file structure of the dialect, may include the operations).

By generating in the .cpp we get much faster builds, and also
better align with the rest of the code base.

Fixes #55044

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

2 years ago[clang][OpenMP][DebugInfo] Debug support for TLS variables present in OpenMP consruct
Alok Kumar Sharma [Thu, 14 Apr 2022 09:04:22 +0000 (14:34 +0530)]
[clang][OpenMP][DebugInfo] Debug support for TLS variables present in OpenMP consruct

In case of OpenMP programs, thread local variables can be present in
any clause pertaining to OpenMP constructs, as we know that compiler
generates artificial functions and in some cases values are passed to
those artificial functions thru parameters. For an example, if thread
local variable is present in copyin clause (testcase attached with the
patch), parameter with same name is generated as parameter to artificial
function. When user inquires the thread Local variable, its debug info
is hidden by the parameter. User never gets the actual TLS variable
when inquires it, instead gets the artificial parameter.

Current patch suppresses the debug info for such artificial parameter to
enable correct debugging of TLS variables.

Reviewed By: aprantl

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

2 years ago[test] Don't rely on default of detect_stack_use_after_return
Vitaly Buka [Sat, 23 Apr 2022 06:28:27 +0000 (23:28 -0700)]
[test] Don't rely on default of detect_stack_use_after_return

2 years agoRevert "[test] Don't rely on default of detect_stack_use_after_return"
Vitaly Buka [Sat, 23 Apr 2022 06:25:02 +0000 (23:25 -0700)]
Revert "[test] Don't rely on default of detect_stack_use_after_return"

Revent acidentally deleted lines.

This reverts commit ff25f694731f7b9fa33f2955e751f3ccb3c35afa.

2 years ago[NFC][LAA] Match-up type sizes for possible extensions, based on actual bit-size...
Chang-Sun Lin Jr [Sat, 23 Apr 2022 06:16:20 +0000 (23:16 -0700)]
[NFC][LAA] Match-up type sizes for possible extensions, based on actual bit-size rather than rounded-up byte size.

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

2 years ago[test] Don't rely on default of detect_stack_use_after_return
Vitaly Buka [Sat, 23 Apr 2022 02:08:56 +0000 (19:08 -0700)]
[test] Don't rely on default of detect_stack_use_after_return

2 years ago[ASan][test] Fix mismatched-new-delete in asan test unaligned_loads_and_stores.cpp
Enna1 [Sat, 23 Apr 2022 03:57:23 +0000 (11:57 +0800)]
[ASan][test] Fix mismatched-new-delete in asan test unaligned_loads_and_stores.cpp

Fix mismatched-new-delete in asan test unaligned_loads_and_stores.cpp

Reviewed By: vitalybuka, MaskRay

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

2 years ago[Driver] Call hasFlag instead of hasArg
Akira Hatanaka [Fri, 22 Apr 2022 23:48:38 +0000 (16:48 -0700)]
[Driver] Call hasFlag instead of hasArg

`_HAS_STATIC_RTTI` should be set to 0 only by `-fno-rtti` according to the
summary of https://reviews.llvm.org/D103771.

rdar://92039243

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

2 years ago[RISCV][test] Rename prefix and remove unused text (NFC)
Zakk Chen [Fri, 22 Apr 2022 03:01:54 +0000 (20:01 -0700)]
[RISCV][test] Rename prefix and remove unused text (NFC)

In D123418 we removed some RUN line (ex. RV32-ELEN16) but their
expected results still exist there.
Remove them and rename prefix for more descriptive.

Reviewed By: frasercrmck, asb, craig.topper

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

2 years ago[lld-macho] Remove stray debug printf
Jez Ng [Sat, 23 Apr 2022 02:17:24 +0000 (22:17 -0400)]
[lld-macho] Remove stray debug printf

Accidentally committed as part of b440c25742.

2 years agoRevert "[nfc][asan][windows] Fix test after D124057"
Vitaly Buka [Sat, 23 Apr 2022 02:10:08 +0000 (19:10 -0700)]
Revert "[nfc][asan][windows] Fix test after D124057"

The patch does not fix the bot.

This reverts commit 62b78a063ab1dc6c2df33c7a6582ecc62b31b519.

2 years ago[asan] Don't enable detect_stack_use_after_return on Windows
Vitaly Buka [Sat, 23 Apr 2022 02:09:52 +0000 (19:09 -0700)]
[asan] Don't enable detect_stack_use_after_return on Windows

It's not clear how ready it's there.

2 years ago[test] Don't rely on default of detect_stack_use_after_return
Vitaly Buka [Sat, 23 Apr 2022 02:08:56 +0000 (19:08 -0700)]
[test] Don't rely on default of detect_stack_use_after_return

2 years ago[SLP][NFC] Outline lookahead heuristics into a separate helper class.
Valery N Dmitriev [Sat, 23 Apr 2022 01:59:08 +0000 (18:59 -0700)]
[SLP][NFC] Outline lookahead heuristics into a separate helper class.

Minor refactoring to reduce size of functional change D124309:
  look-ahead scoring routines pulled out of VLOperands and formed
  new LookAheadHeuristics helper class.

Reviewed By: Alexey Bataev (ABataev), Vasileios Porpodas (vporpo)
Differential Revision: https://reviews.llvm.org/D124313

2 years agoRevert "Revert "[compiler-rt][Darwin] Add arm64 to simulator platforms""
Dan Liew [Sat, 23 Apr 2022 01:44:15 +0000 (18:44 -0700)]
Revert "Revert "[compiler-rt][Darwin] Add arm64 to simulator platforms""

This reverts commit 3469cb14e2316a1e3cf64db5be3738379d9daa8d.

Relanding the patch on behalf of Byoungchan Lee.

The original patch (8a3afc6da5bc94fcbac708156fc1cf4220e7d1f1) was
reverted because it appeared to be landed without the approval
of an Apple engineer.

After internal discussion we're happy for this to land and I've
formally approved the patch in phabricator
(https://reviews.llvm.org/D119174).

rdar://92134140

2 years ago[lld-macho] Allow dead_strip to work with exported private extern symbols
Vincent Lee [Thu, 21 Apr 2022 02:57:10 +0000 (19:57 -0700)]
[lld-macho] Allow dead_strip to work with exported private extern symbols

It seems like we are overly asserting when running `-dead_strip` with
exported symbols. ld64 treats exported private extern symbols as a liveness
root. Loosen the assert to match ld64's behavior.

Reviewed By: #lld-macho, int3

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

2 years ago[fixup] Handle enum constant `Lang_OBJC` introduced in 4604db94.
Volodymyr Sapsai [Sat, 23 Apr 2022 00:59:17 +0000 (17:59 -0700)]
[fixup] Handle enum constant `Lang_OBJC` introduced in 4604db94.

2 years ago[Index] Remove reference to `UnresolvedUsingIfExists`
Ben Barham [Fri, 22 Apr 2022 18:36:00 +0000 (11:36 -0700)]
[Index] Remove reference to `UnresolvedUsingIfExists`

Assuming `ns::foo` doesn't exist, given:
```
using ns::foo __attribute__((using_if_exists));
```

The AST will look something like:
UsingDecl
  UsingShadowDecl
    UnresolvedUsingIfExistsDecl

Thus we end up adding a reference to `UnresolvedUsingIfExistsDecl` when
processing `UsingDecl`, but never add the decl itself. In this case the
decl is really the `UsingDecl` anyway though (which we do output), so it
makes more sense to just remove the extra reference.

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

2 years ago[nfc][asan][android] Fix test after D124057
Vitaly Buka [Sat, 23 Apr 2022 00:16:11 +0000 (17:16 -0700)]
[nfc][asan][android] Fix test after D124057

2 years ago[nfc][asan][windows] Fix test after D124057
Vitaly Buka [Sat, 23 Apr 2022 00:09:47 +0000 (17:09 -0700)]
[nfc][asan][windows] Fix test after D124057

2 years agoRevert "[compiler-rt][Darwin] Add arm64 to simulator platforms"
Dan Liew [Fri, 22 Apr 2022 23:50:35 +0000 (16:50 -0700)]
Revert "[compiler-rt][Darwin] Add arm64 to simulator platforms"

This reverts commit 8a3afc6da5bc94fcbac708156fc1cf4220e7d1f1.

The commit being was landed without review from any Apple engineers
which is problematic because the patch only affects Apple platforms.

rdar://92134140

2 years ago[flang][runtime] Signal record read overrun when PAD='NO'
Peter Klausler [Tue, 19 Apr 2022 23:48:42 +0000 (16:48 -0700)]
[flang][runtime] Signal record read overrun when PAD='NO'

When PAD='NO' and ADVANCE='YES', we currently signal an input
error when a formatted read tries to go past the end of a record
only when a fixed RECL= is in effect.  Other compilers will signal
an error without RECL= too, and that seems like a precedent we
should follow.

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

2 years ago[flang][runtime] Enforce some limits on kP scale factors
Peter Klausler [Fri, 22 Apr 2022 21:21:51 +0000 (14:21 -0700)]
[flang][runtime] Enforce some limits on kP scale factors

Ew.d and Dw.d output edit descriptors should respect limitations from
the standard on the value of a kP scale factor with respect to the
digit count (d), at least for values of k other than zero.

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

2 years ago[ASTStructuralEquivalence] Add support for comparing ObjCCategoryDecl.
Volodymyr Sapsai [Sat, 5 Mar 2022 01:33:48 +0000 (17:33 -0800)]
[ASTStructuralEquivalence] Add support for comparing ObjCCategoryDecl.

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

2 years ago[ELF] Drop unused original symbol after wrapping if not defined
Shoaib Meenai [Wed, 20 Apr 2022 04:45:54 +0000 (21:45 -0700)]
[ELF] Drop unused original symbol after wrapping if not defined

We were previously only omitting the original of a wrapped symbol if it
was not used by an object file and undefined. We can tighten the second
condition to drop any symbol that isn't defined instead, which lets us
drop a previous check (added in https://reviews.llvm.org/D118756) that
was only covering some such symbols.

Reviewed By: MaskRay

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

2 years ago[clang-tidy] Ignore macros defined within declarations
Richard [Sun, 17 Apr 2022 00:26:01 +0000 (18:26 -0600)]
[clang-tidy] Ignore macros defined within declarations

Modernize-macro-to-enum shouldn't try to convert macros to enums
when they are defined inside a declaration or definition, only
when the macros are defined at the top level.  Since preprocessing
is disconnected from AST traversal, match nodes in the AST and then
invalidate source ranges spanning AST nodes before issuing diagnostics.

ClangTidyCheck::onEndOfTranslationUnit is called before
PPCallbacks::EndOfMainFile, so defer final diagnostics to the
PPCallbacks implementation.

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

Fixes #54883

2 years ago[ELF] Fix wrapping symbols produced during LTO codegen
Shoaib Meenai [Wed, 20 Apr 2022 01:04:17 +0000 (18:04 -0700)]
[ELF] Fix wrapping symbols produced during LTO codegen

We were previously not correctly wrapping symbols that were only
produced during LTO codegen and unreferenced before then, or symbols
only referenced from such symbols. The root cause was that we weren't
marking the wrapped symbol as used if we only saw the use after LTO
codegen, leading to the failed wrapping.

Fix this by explicitly tracking whether a symbol will become referenced
after wrapping is done. We can use this property to tell LTO to preserve
such symbols, instead of overload isUsedInRegularObj for this purpose.
Since we're no longer setting isUsedInRegularObj for all symbols which
will be wrapped, its value at the time of performing the wrapping in the
symbol table will accurately reflect whether the symbol was actually
used in an object (including in an LTO-generated object), and we can
propagate that value to the wrapped symbol and thereby ensure we wrap
correctly.

This incorrect wrapping was the only scenario I was aware of where we
produced an invalid PLT relocation, which D123985 started diagnosing,
and with it fixed, we lose the test for that diagnosis. I think it's
worth keeping the diagnosis though, in case we run into other issues in
the future which would be caught by it.

Fixes PR50675.

Reviewed By: MaskRay

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

2 years ago[ELF] Move SymbolUnion assertions to source file
Shoaib Meenai [Tue, 19 Apr 2022 20:42:05 +0000 (13:42 -0700)]
[ELF] Move SymbolUnion assertions to source file

Otherwise they fires for every single file which includes the header,
which is very noisy when building.

Reviewed By: MaskRay, peter.smith

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

2 years ago[flang][runtime] Fix edge-case FP input bugs
Peter Klausler [Wed, 13 Apr 2022 16:56:42 +0000 (09:56 -0700)]
[flang][runtime] Fix edge-case FP input bugs

Blanks are allowed in more places than I allowed for, and
"NAN(foobar)" is allowed to have any parenthesis-balanced
characters in parentheses.

Update: Fix up old sanity test, then avoid usage of "limit" when null.

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

2 years ago[llvm][misexpect] Avoid division by 0 when using sample profiling
Paul Kirth [Fri, 22 Apr 2022 22:41:54 +0000 (22:41 +0000)]
[llvm][misexpect] Avoid division by 0 when using sample profiling

MisExpect diagnostics should not prevent compilation from succeeding, and the
assertion is insufficient to prevent division by zero in release builds.

This patch addresses that by replacing the assert with an early return.

Additionally, it disables MisExpect diagnostics when using sample profiling,
since this is the only known case where this error has manifested.

Reviewed By: tejohnson

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

2 years agoRecommit "[SLP][AArch64] Implement lookahead operand reordering score of splat loads...
Vasileios Porpodas [Fri, 22 Apr 2022 15:29:51 +0000 (08:29 -0700)]
Recommit "[SLP][AArch64] Implement lookahead operand reordering score of splat loads for AArch64"

This reverts commit 7052a0ad689b990265ec79bd2b0a7d6e8c131bfe.

2 years ago[libomptarget] Make omp_target_is_present checks storage instead of zero length array.
Ye Luo [Fri, 22 Apr 2022 22:36:59 +0000 (17:36 -0500)]
[libomptarget] Make omp_target_is_present checks storage instead of zero length array.

Consider checking whether a pointer has been mapped can be achieved via omp_get_mapped_ptr.
omp_target_is_present is more needed to check whether the storage being pointed is mapped.
This restore the old behavior of omp_target_is_present before D123093
Fixes https://github.com/llvm/llvm-project/issues/54899

Reviewed By: jdenny

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

2 years ago[Clang][OpenMP] libompd: get libomp hwloc includedir by target_link_libraries
Ye Luo [Fri, 22 Apr 2022 22:33:41 +0000 (17:33 -0500)]
[Clang][OpenMP] libompd: get libomp hwloc includedir by target_link_libraries

When hwloc is used and is installed outside of the default paths, the omp CMake target
needs to provide the needed include path thru the CMake target by adding it with
target_include_directories to it, so libompd gets it as well when it defines it's cmake
target using target_link_libraries.

As suggested in D122667

Reviewed By: ye-luo

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

2 years ago[asan] Enable detect_stack_use_after_return=1 by default
Vitaly Buka [Wed, 20 Apr 2022 01:31:13 +0000 (18:31 -0700)]
[asan] Enable detect_stack_use_after_return=1 by default

By default -fsanitize=address already compiles with this check,
why not use it.
For compatibly it can be disabled with env ASAN_OPTIONS=detect_stack_use_after_return=0.

Reviewed By: eugenis, kda, #sanitizers, hans

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

2 years agollvm-reduce: Fix cloning unset maxCallFrameSize
Matt Arsenault [Fri, 22 Apr 2022 20:31:08 +0000 (16:31 -0400)]
llvm-reduce: Fix cloning unset maxCallFrameSize

This was promoting an unset max call frame size to a max call frame
size of 0.

2 years agoProcessImplicitDefs: Use required properties instead of isSSA assert
Matt Arsenault [Fri, 22 Apr 2022 21:43:53 +0000 (17:43 -0400)]
ProcessImplicitDefs: Use required properties instead of isSSA assert

2 years ago[mlir][LLVM] Fix `DataLayoutTypeInterface` for opqaue pointers with non-default addre...
Markus Böck [Fri, 22 Apr 2022 22:10:02 +0000 (00:10 +0200)]
[mlir][LLVM] Fix `DataLayoutTypeInterface` for opqaue pointers with non-default address space

As a fallback mechanism, if no entry was supplied for a given address space, the size or alignment for a pointer type with the default address space is returned instead.
This code currently crashes with opaque pointers, as it tries to construct a typed pointer type from the opaque pointer type, leading to a null pointer dereference when fetching the element type.

This patch fixes the issue by handling the opaque pointer cases explicitly.

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

2 years ago[mlir][LLVM] Fix crash when using opaque pointers in function signatures
Markus Böck [Fri, 22 Apr 2022 22:09:27 +0000 (00:09 +0200)]
[mlir][LLVM] Fix crash when using opaque pointers in function signatures

Using opaque pointers in function signatures leads to an attempt to recursively convert all types, including sub types in LLVM types. In the case of LLVM pointers, it may not have a subtype aka element type if it is opaque which would then lead to a null pointer dereference.

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

2 years ago[Clang][OpenMP] Fix the issue that temp cubin files are not removed after compilation...
Shilei Tian [Fri, 22 Apr 2022 22:07:20 +0000 (18:07 -0400)]
[Clang][OpenMP] Fix the issue that temp cubin files are not removed after compilation when using new OpenMP driver

The root cause of this is, in `NVPTX::Assembler::ConstructJob`, the output file name might not match the `Output`'s file name passed into the function because `CudaToolChain::getInputFilename` is a specialized version. That means the real output file is not added to the temp files list, which will be all removed in the d'tor of `Compilation`. In order to "fix" it, in the function `NVPTX::OpenMPLinker::ConstructJob`, before calling `clang-nvlink-wrapper`, the function calls `getToolChain().getInputFilename(II)` to get the right output file name for each input, and add it to temp file, and then they can be removed w/o any issue. However, this whole logic doesn't work when using the new OpenMP driver because `NVPTX::OpenMPLinker::ConstructJob` is not called at all, which causing the issue that the cubin file generated in each single unit compilation is out of track.

In this patch, we add the real output file into temp files if its name doesn't match `Output`. We add it when the file is an output instead of doing it when it is an input, like what we did in `NVPTX::OpenMPLinker::ConstructJob`, which makes more sense.

Reviewed By: jhuber6

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

2 years agoFix CollapsedLayoutMap for dim size 1 case
Yi Zhang [Tue, 19 Apr 2022 00:50:30 +0000 (20:50 -0400)]
Fix CollapsedLayoutMap for dim size 1 case

This change fixes `CollapsedLayoutMap` for cases where the collapsed
dims are size 1. The cases where inner most dims are size 1 and
noncontiguous can be represented by the strided form and therefore can
be allowed. For such cases, the new stride should be of the next entry
in an association whose dimension is not size 1. If the next entry is
dynamic, it's not possible to decide which stride to use at compilation
time and the stride is set to dynamic.

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

2 years ago[SLP][NFC] Pre-commit test showing deficiency in current roots selection algorithm.
Valery N Dmitriev [Fri, 22 Apr 2022 21:47:02 +0000 (14:47 -0700)]
[SLP][NFC] Pre-commit test showing deficiency in current roots selection algorithm.

Test case to show not quite optimal SLP vectorization.

Reviewed By: Vasileios Porpodas (vporpo)
Differential Revision: https://reviews.llvm.org/D124293

2 years ago[libc] Fix PrintfMatcher Cmake Rule
Michael Jones [Fri, 22 Apr 2022 21:38:12 +0000 (14:38 -0700)]
[libc] Fix PrintfMatcher Cmake Rule

The PrintfMatcher depends on printf which is in stdio. Stdio is
currently fullbuild only, but the matcher wasn't, causing failing builds
when fullbuild was off. This patch adds the fullbuild condition to the
PrintfMatcher cmake.

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

2 years ago[CMake] Update ARM32 list for CRT config-ix
Petr Hosek [Fri, 22 Apr 2022 21:35:38 +0000 (14:35 -0700)]
[CMake] Update ARM32 list for CRT config-ix

This matches the behavior prior to b0e2ffe151c3.

Fixes: https://github.com/llvm/llvm-project/issues/55046

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

2 years ago[mlir] use side effects in the Transform dialect
Alex Zinenko [Fri, 22 Apr 2022 08:26:53 +0000 (10:26 +0200)]
[mlir] use side effects in the Transform dialect

Currently, the sequence of Transform dialect operations only supports a single
use of each operand (verified by the `transform.sequence` operation). This was
originally motivated by the need to guard against accessing a payload IR
operation associated with a transform IR value after this operation has likely
been rewritten by a transformation. However, not all Transform dialect
operations rewrite payload IR, in particular the "navigation" operation such as
`transform.pdl_match` do not.

Introduce memory effects to the Transform dialect operations to describe their
effect on the payload IR and the mapping between payload IR opreations and
transform IR values. Use these effects to replace the single-use rule, allowing
repeated reads and disallowing use-after-free, where operations with the "free"
effect are considered to "consume" the transform IR value and rewrite the
corresponding payload IR operations). As an additional improvement, this
enables code motion transformation on the transform IR itself.

Reviewed By: Mogball

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

2 years ago[libc] Add Printf FormatSection Matcher
Michael Jones [Wed, 20 Apr 2022 21:39:16 +0000 (14:39 -0700)]
[libc] Add Printf FormatSection Matcher

This patch changes the printf parser tests to use a more robust matcher.
This allows for better debugging of parsing issues. This does not affect
the actual printf code at all, only the tests.

Reviewed By: sivachandra, lntue

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

2 years ago[CUDA][HIP] Externalize kernels with internal linkage
Yaxun (Sam) Liu [Thu, 21 Apr 2022 15:44:11 +0000 (11:44 -0400)]
[CUDA][HIP] Externalize kernels with internal linkage

This patch is a continuation of https://reviews.llvm.org/D123353.

Not only kernels in anonymous namespace, but also template
kernels with template arguments in anonymous namespace
need to be externalized.

To be more generic, this patch checks the linkage of a kernel
assuming the kernel does not have __global__ attribute. If
the linkage is internal then clang will externalize it.

This patch also fixes the postfix for externalized symbol
since nvptx does not allow '.' in symbol name.

Reviewed by: Artem Belevich

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

Fixes: https://github.com/llvm/llvm-project/issues/54560

2 years ago[Bazel] Make mlir/test:TestShapeDialect depend on mlir:FuncDialect
Fangrui Song [Fri, 22 Apr 2022 20:55:27 +0000 (13:55 -0700)]
[Bazel] Make mlir/test:TestShapeDialect depend on mlir:FuncDialect

2 years ago[LICM] Add test for writeonly fn with noalias call.
Florian Hahn [Fri, 22 Apr 2022 20:37:08 +0000 (21:37 +0100)]
[LICM] Add test for writeonly fn with noalias call.

Add an additional test for D123473.

2 years ago[LLDB] Applying clang-tidy modernize-use-override over LLDB
Shafik Yaghmour [Fri, 22 Apr 2022 20:28:59 +0000 (13:28 -0700)]
[LLDB] Applying clang-tidy modernize-use-override over LLDB

Applied clang-tidy modernize-use-override over LLDB and added it to the LLDB .clang-tidy config.

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

2 years ago[SimpleLoopUnswitch] Check if freeze is needed for partial unswitching.
Florian Hahn [Fri, 22 Apr 2022 20:24:55 +0000 (21:24 +0100)]
[SimpleLoopUnswitch] Check if freeze is needed for partial unswitching.

We only need to insert a Freeze instruction if any of the conditions
may be poison. Similar checks are already done in the other places
SimpleLoopUnswitch creates Freeze instruction.

Reviewed By: aeubanks, efriedma

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

2 years agoTableGen/GlobalISel: Make address space/align predicates consistent
Matt Arsenault [Tue, 5 Apr 2022 14:36:57 +0000 (10:36 -0400)]
TableGen/GlobalISel: Make address space/align predicates consistent

The builtin predicate handling has a strange behavior where the code
assumes that a PatFrag is a stack of PatFrags, and each level adds at
most one predicate. I don't think this particularly makes sense,
especially without a diagnostic to ensure you aren't trying to set
multiple at once.

This wasn't followed for address spaces and alignment, which could
potentially fall through to report no builtin predicate was
added. Just switch these to follow the existing convention for now.

2 years ago[flang][runtime] Accept "." as REAL input
Peter Klausler [Thu, 21 Apr 2022 21:11:32 +0000 (14:11 -0700)]
[flang][runtime] Accept "." as REAL input

".", possibly followed by an exponent, is a valid REAL input value (meaning zero).

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

2 years ago[lld-macho] Fix ICF crash when comparing symbol relocs
Jez Ng [Fri, 22 Apr 2022 19:34:54 +0000 (15:34 -0400)]
[lld-macho] Fix ICF crash when comparing symbol relocs

Previously, when encountering a symbol reloc located in a literal section, we
would look up the contents of the literal at the `symbol value + addend` offset
within the literal section. However, it seems that this offset is not guaranteed
to be valid. Instead, we should use just the symbol value to retrieve the
literal's contents, and compare the addend values separately. ld64 seems to do
this.

Reviewed By: #lld-macho, thevinster

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

2 years ago[lld-macho][nfc] Simplify unwind section lookup
Jez Ng [Fri, 22 Apr 2022 19:34:50 +0000 (15:34 -0400)]
[lld-macho][nfc] Simplify unwind section lookup

Previously, we stored a pointer from the ObjFile to its compact unwind
section in order to avoid iterating over the file's sections a second
time. However, given the small number of sections (not subsections) per
file, this caching was really quite unnecessary. We will soon do lookups
for more sections (such as the `__eh_frame` section), so let's simplify
the code first.

Reviewed By: #lld-macho, Roger

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

2 years ago[flang][runtime] Ignore leading spaces even in BZ mode
Peter Klausler [Thu, 21 Apr 2022 20:20:24 +0000 (13:20 -0700)]
[flang][runtime] Ignore leading spaces even in BZ mode

When editing numeric input, always skip leading spaces, even if
BZ mode (or BLANK='ZERO') is in effect; otherwise, a sign character
preceded by blanks will not be recognized.

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

2 years ago[flang] Fix regression from generic fix
Peter Klausler [Thu, 21 Apr 2022 16:25:39 +0000 (09:25 -0700)]
[flang] Fix regression from generic fix

A recent change that corrected the name resolution of a generic interface
when the same name was visible in scope incorrectly prevented a local
generic from shadowing an outer name that is not a generic, subprogram,
or derived type -- e.g., a simple variable -- leading to an inappropriate
error message.

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

2 years ago[mlir] Do not bubble up extract slice when it is rank-reducing.
Okwan Kwon [Fri, 22 Apr 2022 17:49:22 +0000 (10:49 -0700)]
[mlir] Do not bubble up extract slice when it is rank-reducing.

The bubble up logic was written by assuming the slice operation is
always a normal slice that outputs a tensor with the same rank.

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

2 years ago[git-clang-format] Change run line from python to python3
Nico Weber [Fri, 22 Apr 2022 17:45:54 +0000 (13:45 -0400)]
[git-clang-format] Change run line from python to python3

Several systems no longer ship `python`.

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

2 years ago[git-clang-format] Add some examples to the help text
Nico Weber [Fri, 22 Apr 2022 17:51:05 +0000 (13:51 -0400)]
[git-clang-format] Add some examples to the help text

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

2 years ago[sanitizer] Use canonical syscalls everywhere
Evgenii Stepanov [Thu, 21 Apr 2022 22:17:29 +0000 (15:17 -0700)]
[sanitizer] Use canonical syscalls everywhere

These "new" syscalls have been added in 2.6.16, more than 16 years ago.
Surely that's enough time to migrate. Glibc 2.33 is using them on both
i386 and x86_64. Android has an selinux filter to block the legacy
syscalls in the apps.

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

2 years ago[MLIR] Add option to print users of an operation as comment in the printer
cpillmayer [Fri, 22 Apr 2022 18:52:54 +0000 (18:52 +0000)]
[MLIR] Add option to print users of an operation as comment in the printer

This allows printing the users of an operation as proposed in the git issue #53286.
To be able to refer to operations with no result, these operations are assigned an
ID in SSANameState.

Reviewed By: mehdi_amini

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

2 years ago[libc++] Change vector<bool>::const_iterator::reference to bool in ABIv2
Nikolas Klauser [Fri, 22 Apr 2022 18:56:58 +0000 (20:56 +0200)]
[libc++] Change vector<bool>::const_iterator::reference to bool in ABIv2

`vector<bool>::const_reference` and `vector<bool>::const_iterator::reference` should be the same type.

Reviewed By: Mordante, #libc

Spies: libcxx-commits

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

2 years ago[mlir] Add shape.func
Jacques Pienaar [Fri, 22 Apr 2022 18:35:34 +0000 (11:35 -0700)]
[mlir] Add shape.func

Add shape func op for use (primarily) in shape function_library op. Allows
setting default dialect for some simpler authoring. This is a minimal version
of the ops needed.

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

2 years ago[mlir][vector] Fold 1-element reduction into extract or arith ops
Lei Zhang [Fri, 22 Apr 2022 18:22:10 +0000 (14:22 -0400)]
[mlir][vector] Fold 1-element reduction into extract or arith ops

If there is only one single element in the vector, then we can
just extract the element to compute the final result.

Reviewed By: mravishankar

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

2 years ago[nfc][msan] Add D123875 into release notes
Vitaly Buka [Fri, 22 Apr 2022 18:13:20 +0000 (11:13 -0700)]
[nfc][msan] Add D123875 into release notes

2 years ago[RISCV] transform MI to W variant to remove sext.w
Mohammed Nurul Hoque [Fri, 22 Apr 2022 17:25:54 +0000 (10:25 -0700)]
[RISCV] transform MI to W variant to remove sext.w

Backwards search
The sext.w removal pass (before the new patch) checks if the input to sext.w is already in sign-extended form, so it can eliminate it. It does that by checking every definition/source that reaches the sext.w is an instruction that produces a sign-extended value, either by definition (e.g. ADDW), or it propagates sign-extension (e.g. OR) so we check its sources recursively.

Forward search
Sometimes, one of the sources is an instruction that doesn't always produce a sign-extended value, but it has a W-version that does (e.g. ADD / ADDW). If we transform the ADD to ADDW, the sext.w can be removed (assuming other def paths are satisfied), but this transformation is sound only if every use of this ADD/W only reqruires the lower 32-bits either directly (like sll %x, 32) or they propagate dependency (lower word of output only depends on lower word of input) so we check its uses recursively.

When searching backwards, if an instruction that can be replaced with W-variant is encountered, this pass runs the forward search to verify it can be replaced, then adds it to a list of fixable instructions. After verifying all paths, it replaces the instruction and removes the sext.w.

Reviewed By: craig.topper

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

2 years ago[Hexagon] Generate TargetConstant in SelectAnyInt
Krzysztof Parzyszek [Fri, 22 Apr 2022 17:32:35 +0000 (10:32 -0700)]
[Hexagon] Generate TargetConstant in SelectAnyInt

At some point in instruction selection, A2_tfrsi Constant:i32<...> was
created, where the "Constant" came from SelectAnyInt. Since it wasn't
a TargetConstant, it was selected again, leading to
  %vreg = A2_tfrsi ...
  ...   = A2_tfrsi %vreg
which is not a valid code.

2 years ago[lld-macho] Fix crash on invalid framework tbd
Keith Smiley [Fri, 22 Apr 2022 16:42:23 +0000 (09:42 -0700)]
[lld-macho] Fix crash on invalid framework tbd

Previously these would crash because `file` is null in the case there is
an invalid tbd file.

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

2 years ago[NFC] Cosmetic changes to OpenACC.cpp.
Eric Schweitz [Fri, 22 Apr 2022 02:06:11 +0000 (19:06 -0700)]
[NFC] Cosmetic changes to OpenACC.cpp.

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

2 years ago[SimpleLoopUnswitch] Add test where all conds are guaranteed non poison.
Florian Hahn [Fri, 22 Apr 2022 17:09:04 +0000 (18:09 +0100)]
[SimpleLoopUnswitch] Add test where all conds are guaranteed non poison.

Extra test for D124259.

2 years ago[llvm-objcopy][NFC] refactor restoreStatOnFile out of llvm-objcopy.
Alexey Lapshin [Wed, 13 Apr 2022 20:40:27 +0000 (23:40 +0300)]
[llvm-objcopy][NFC] refactor restoreStatOnFile out of llvm-objcopy.

Functionality of restoreStatOnFile may be reused. Move it into
FileUtilities.cpp. Create helper class FilePermissionsApplier
to store and apply permissions.

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

2 years agoFix crash getting name of a template decl
Tom Eccles [Fri, 22 Apr 2022 17:03:28 +0000 (13:03 -0400)]
Fix crash getting name of a template decl

NamedDecl::getIdentifier can return a nullptr when
DeclarationName::isIdentifier is false, which leads to a null pointer
dereference when TypePrinter::printTemplateId calls ->getName().

NamedDecl::getName does the same thing in the successful case and
returns an empty string in the failure case.

This crash affects the llvm 14 packages on llvm.org.

2 years agoRevert "Revert "Revert "[clang][pp] adds '#pragma include_instead'"""
Christopher Di Bella [Sat, 16 Apr 2022 00:22:43 +0000 (00:22 +0000)]
Revert "Revert "Revert "[clang][pp] adds '#pragma include_instead'"""

> Includes regression test for problem noted by @hans.
> is reverts commit 973de71.
>
> Differential Revision: https://reviews.llvm.org/D106898

Feature implemented as-is is fairly expensive and hasn't been used by
libc++. A potential reimplementation is possible if libc++ become
interested in this feature again.

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

2 years ago[RISCV][NFC] Adjust some formatting in VL patterns
Fraser Cormack [Fri, 22 Apr 2022 16:19:27 +0000 (17:19 +0100)]
[RISCV][NFC] Adjust some formatting in VL patterns

2 years ago[RISCV] Print human-readable VTYPE/SEW/LMUL in MIR
Fraser Cormack [Wed, 3 Nov 2021 11:41:03 +0000 (11:41 +0000)]
[RISCV] Print human-readable VTYPE/SEW/LMUL in MIR

This patch adds custom MIR operand comments to VTYPE immediate operands
in VSETVLI instructions and SEW/LMUL operands in vector codegen pseudo
instructions. The result is intended to be more human-readable and
hopefully maintainable when working with MIR, particularly when
writing or reading test cases.

Reviewed By: craig.topper

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

2 years ago[clang-format][NFC] Use isComment() in setCommentLineLevels()
owenca [Thu, 21 Apr 2022 23:46:07 +0000 (16:46 -0700)]
[clang-format][NFC] Use isComment() in setCommentLineLevels()

Also replace an unnecessary check with assert() in the unwrapped
line parser.

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

2 years ago[mlir][bufferize][NFC] Add function boundary bufferization flag to BufferizationOptions
Matthias Springer [Fri, 22 Apr 2022 15:57:25 +0000 (00:57 +0900)]
[mlir][bufferize][NFC] Add function boundary bufferization flag to BufferizationOptions

This makes the API easier to use. Also allows us to check for incorrect API usage for easier debugging.

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

2 years ago[InstCombine] Fold (A & 2^C1) + A => A & (2^C1 - 1) iff bit C1 in A is a sign bit...
Simon Pilgrim [Fri, 22 Apr 2022 15:58:55 +0000 (16:58 +0100)]
[InstCombine] Fold (A & 2^C1) + A => A & (2^C1 - 1) iff bit C1 in A is a sign bit (PR21929)

Alive2: https://alive2.llvm.org/ce/z/Ygq26C

This is the final missing fold to handle the modulo2 simplification: https://github.com/llvm/llvm-project/issues/22303

Fixes #22303

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

2 years ago[clangd][NFC] Reduce memory usage while building dex
Kadir Cetinkaya [Fri, 22 Apr 2022 08:47:46 +0000 (10:47 +0200)]
[clangd][NFC] Reduce memory usage while building dex

Reduce peak memory usage by tearing down the intermediate representation
as we build the final one. Rather than deleting it in the end.

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

2 years ago[DAG] Fold freeze(bitcast(x)) -> bitcast(freeze(x))
Simon Pilgrim [Fri, 22 Apr 2022 15:39:25 +0000 (16:39 +0100)]
[DAG] Fold freeze(bitcast(x)) -> bitcast(freeze(x))

This is a very specific fold to fix an upstream poor codegen issue.

InstCombine has the much more flexible pushFreezeToPreventPoisonFromPropagating but I don't think we're quite there with DAG/TLI handling for canCreateUndefOrPoison/isGuaranteedNotToBeUndefOrPoison value tracking yet.

Fixes #54911

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

2 years ago[mlir][bufferize][NFC] Rewrite op filter logic
Matthias Springer [Fri, 22 Apr 2022 14:54:03 +0000 (23:54 +0900)]
[mlir][bufferize][NFC] Rewrite op filter logic

The `hasFilter` field is not needed. Instead, the filter accepts ops by default if no ALLOW rule was specified.

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