platform/upstream/llvm.git
2 years agoRewording "static_assert" diagnostics
Muhammad Usman Shahid [Thu, 14 Jul 2022 11:44:51 +0000 (07:44 -0400)]
Rewording "static_assert" diagnostics

This patch rewords the static assert diagnostic output. Failing a
_Static_assert in C should not report that static_assert failed. This
changes the wording to be more like GCC and uses "static assertion"
when possible instead of hard coding the name. This also changes some
instances of 'static_assert' to instead be based on the token in the
source code.

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

2 years ago[IndVars] Eliminate redundant type cast between unsigned integer and float
zhongyunde [Thu, 14 Jul 2022 11:40:49 +0000 (19:40 +0800)]
[IndVars] Eliminate redundant type cast between unsigned integer and float

Extend for unsigned integer according the comment of D129191.

Reviewed By: nikic

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

2 years agoThread safety analysis: Don't erase TIL_Opcode type (NFC)
Aaron Puchert [Thu, 14 Jul 2022 11:36:35 +0000 (13:36 +0200)]
Thread safety analysis: Don't erase TIL_Opcode type (NFC)

This is mainly for debugging, but it also eliminates some casts.

2 years agoThread safety analysis: Support builtin pointer-to-member operators
Aaron Puchert [Thu, 14 Jul 2022 11:36:11 +0000 (13:36 +0200)]
Thread safety analysis: Support builtin pointer-to-member operators

We consider an access to x.*pm as access of the same kind into x, and
an access to px->*pm as access of the same kind into *px. Previously we
missed reads and writes in the .* case, and operations to the pointed-to
data for ->* (we didn't miss accesses to the pointer itself, because
that requires an LValueToRValue cast that we treat independently).

We added support for overloaded operator->* in D124966.

Reviewed By: aaron.ballman

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

2 years ago[JITLink] Silence unused variable warning. (NFC)
Sunho Kim [Thu, 14 Jul 2022 11:14:22 +0000 (20:14 +0900)]
[JITLink] Silence unused variable warning. (NFC)

2 years ago[gn build] Port 3e9cc543f223
LLVM GN Syncbot [Thu, 14 Jul 2022 11:06:28 +0000 (11:06 +0000)]
[gn build] Port 3e9cc543f223

2 years agoRevert "[llvm-ar][test] Add testing for bitcode file handling"
gbreynoo [Thu, 14 Jul 2022 11:04:38 +0000 (12:04 +0100)]
Revert "[llvm-ar][test] Add testing for bitcode file handling"

This reverts commit 264b9a4885e6f1beac3de72ee55c15dc78981927.

Due to build bot test failure.

2 years ago[VP] Add test to show optimization opportunities
Simon Moll [Thu, 14 Jul 2022 10:36:22 +0000 (12:36 +0200)]
[VP] Add test to show optimization opportunities

Add vp.add test cases that can are optimized with D92086 to show the
potential of generalized pattern rewriting.

Reviewed By: frasercrmck

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

2 years ago[lldb] [gdb-remote] Remove stray GetSupportsThreadSuffix() method (NFC)
Michał Górny [Thu, 14 Jul 2022 09:34:36 +0000 (11:34 +0200)]
[lldb] [gdb-remote] Remove stray GetSupportsThreadSuffix() method (NFC)

Remove stray GDBRemoteCommunicationClient::GetSupportsThreadSuffix()
method that is not implemented nor used anywhere.

2 years ago[llvm-ar][test] Add testing for bitcode file handling
gbreynoo [Thu, 14 Jul 2022 09:48:52 +0000 (10:48 +0100)]
[llvm-ar][test] Add testing for bitcode file handling

This change adds testing for handling of bitcode files in archives,
particularly the creation of symbol tables and through MRI scripts.
Although there is some testing of bitcode handling in the archive
library testing, this was not covered.

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

2 years agoRevert "[ORC] Add a shared-memory based orc::MemoryMapper."
Cullen Rhodes [Thu, 14 Jul 2022 09:46:23 +0000 (09:46 +0000)]
Revert "[ORC] Add a shared-memory based orc::MemoryMapper."

This reverts commit 5acd471698849d9e322a29e6ca08791e8d447b7b.

Breaks shared library build with:

  ld.lld-12: error: undefined symbol: shm_open
  >>> referenced by ExecutorSharedMemoryMapperService.cpp:68
  (/home/culrho01/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/ExecutorSharedMemoryMapperService.cpp:68)
  >>>
  lib/ExecutionEngine/Orc/TargetProcess/CMakeFiles/LLVMOrcTargetProcess.dir/ExecutorSharedMemoryMapperService.cpp.o:(llvm::orc::rt_bootstrap::ExecutorSharedMemoryMapperService::reserve[abi:cxx11](unsigned
  long))
  >>> did you mean: sem_open
  >>> defined in:
  /usr/bin/../lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libpthread.so

2 years agoRevert "[ORC] Fix compilation on mingw"
Cullen Rhodes [Thu, 14 Jul 2022 09:46:11 +0000 (09:46 +0000)]
Revert "[ORC] Fix compilation on mingw"

This reverts commit 46b1a7c5f9e6841016078d32728bb0d205336df5.

Parent commit breaks shared library build, reverting both commits.

2 years ago[AMDGPU] Update LiveVariables after killing an immediate def
Jay Foad [Wed, 13 Jul 2022 16:17:35 +0000 (17:17 +0100)]
[AMDGPU] Update LiveVariables after killing an immediate def

D114999 added code to kill an immediate def if it was folded into its
only use by convertToThreeAddress. This patch updates LiveVariables when
that happens in order to fix verification failures exposed by D129213.

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

2 years ago[IndVars] Make sure header phi simplification preserves LCSSA form
Nikita Popov [Thu, 14 Jul 2022 09:45:35 +0000 (11:45 +0200)]
[IndVars] Make sure header phi simplification preserves LCSSA form

When simplifying instructions, make sure that the replacement
preserves LCSSA form. This fixes the issue reported at:
https://reviews.llvm.org/D129293#3650851

2 years ago[RISCV] Add a test showing a miscompilation with subreg liveness
Fraser Cormack [Wed, 13 Jul 2022 13:21:48 +0000 (14:21 +0100)]
[RISCV] Add a test showing a miscompilation with subreg liveness

This patch adds a test which shows that we may incorrectly register
allocate for RVV instructions which have no-overlap constraints on
source/dest registers of different LMUL groups.

The particular case shows that a vrgatherei16 instruction writes to a
LMUL=1 register group v11 and reads from an EMUL=2 register group
v10/v11. This breaks the overlap constraints of the vrgatherei16
instruction.

The test also shows that disabling subregister liveness fixes the test.

We use `early-clobber` on the `VR` dest and the `VRM2` source to enforce
the constraint but with subregister liveness this constraint is not met.

It's unclear to me at this point whether this is per-design of
early-clobber in conjunction with subregisters (meaning we should find
another way of expressing this constraint) or whether it's a bug in the
register allocator somewhere.

Reviewed By: rogfer01

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

2 years ago[AArch64][NFC] Drop 'V' from ASIMD FP convert, other, D/Q-form regex
Cullen Rhodes [Wed, 13 Jul 2022 10:29:02 +0000 (10:29 +0000)]
[AArch64][NFC] Drop 'V' from ASIMD FP convert, other, D/Q-form regex

In the Cortex A57 Optimization Guide [1] VCVTAU (AArch32) is incorrectly
listed in the AArch64 instructions for instruction groups:

  - ASIMD FP convert, other, D-form
  - ASIMD FP convert, other, Q-form

It's meant to be FCVTAU, this will be fixed in future releases of the guide.

[1] https://developer.arm.com/documentation/uan0015/b

2 years ago[NFC][SVE] Add tests for zext(cmpeq(x, splat(0)))
Cullen Rhodes [Thu, 14 Jul 2022 09:01:08 +0000 (09:01 +0000)]
[NFC][SVE] Add tests for zext(cmpeq(x, splat(0)))

In preparation for follow up patch folding above to CNOT.

Reviewed By: paulwalker-arm, peterwaller-arm

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

2 years ago[LoongArch] Implement OR combination to generate bstrins.w/d
Weining Lu [Wed, 13 Jul 2022 08:03:35 +0000 (16:03 +0800)]
[LoongArch] Implement OR combination to generate bstrins.w/d

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

2 years ago[mlir][doc] Fix usage of PatternApplicator.
Ingo Müller [Mon, 9 May 2022 15:05:47 +0000 (15:05 +0000)]
[mlir][doc] Fix usage of PatternApplicator.

The constructor of PatternApplicator doesn't have a constructor that
accepts only a `RewritePatternSet` as currently used in the example
code in PatternRewriter.md. Instead, one has to turn it into a
`FrozenRewritePatternSet`.

Reviewed By: nicolasvasilache

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

2 years ago[ORC] Fix compilation on mingw
Martin Storsjö [Thu, 14 Jul 2022 09:01:47 +0000 (12:01 +0300)]
[ORC] Fix compilation on mingw

Explicitly call the -W suffixed API functions when passing wchar based
strings.

2 years ago[SCCP] Make check for unknown/undef in unary op handling more explicit (NFCI)
Nikita Popov [Thu, 14 Jul 2022 08:52:19 +0000 (10:52 +0200)]
[SCCP] Make check for unknown/undef in unary op handling more explicit (NFCI)

Make the implementation more similar to other functions, by
explicitly skipping an unknown/undef first, and always falling
back to overdefined at the end. I don't think it makes a difference
now, but could make one once the constant evaluation can fail. In
that case we would directly mark the result as overdefined now,
rather than keeping it unknown (and later making it overdefined
because we think it's undef-based).

2 years ago[CodeGen] Move instruction predicate verification to emitInstruction
David Green [Thu, 14 Jul 2022 08:33:28 +0000 (09:33 +0100)]
[CodeGen] Move instruction predicate verification to emitInstruction

D25618 added a method to verify the instruction predicates for an
emitted instruction, through verifyInstructionPredicates added into
<Target>MCCodeEmitter::encodeInstruction. This is a very useful idea,
but the implementation inside MCCodeEmitter made it only fire for object
files, not assembly which most of the llvm test suite uses.

This patch moves the code into the <Target>_MC::verifyInstructionPredicates
method, inside the InstrInfo.  The allows it to be called from other
places, such as in this patch where it is called from the
<Target>AsmPrinter::emitInstruction methods which should trigger for
both assembly and object files. It can also be called from other places
such as verifyInstruction, but that is not done here (it tends to catch
errors earlier, but in reality just shows all the mir tests that have
incorrect feature predicates). The interface was also simplified
slightly, moving computeAvailableFeatures into the function so that it
does not need to be called externally.

The ARM, AMDGPU (but not R600), AVR, Mips and X86 backends all currently
show errors in the test-suite, so have been disabled with FIXME
comments.

Recommitted with some fixes for the leftover MCII variables in release
builds.

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

2 years ago[CommandLine] --help: print "-o <xxx>" instead of "-o=<xxx>"
Fangrui Song [Thu, 14 Jul 2022 08:28:28 +0000 (01:28 -0700)]
[CommandLine] --help: print "-o <xxx>" instead of "-o=<xxx>"

Accepting -o= is a quirk of CommandLine. For --help, we should print the
conventional "-o <xxx>".

2 years agoRevert "[llvm] add zstd to llvm::compression namespace"
Amara Emerson [Thu, 14 Jul 2022 08:11:15 +0000 (01:11 -0700)]
Revert "[llvm] add zstd to llvm::compression namespace"

This reverts commit d449c600767284486615f3b79601ced15a00af61.

Breaks macOS builds with this:
llvm/lib/Support/Compression.cpp:24:10: fatal error: 'zstd.h' file not found

2 years ago[SCCP] Don't check for UndefValue before calling markConstant()
Nikita Popov [Wed, 22 Jun 2022 09:27:58 +0000 (11:27 +0200)]
[SCCP] Don't check for UndefValue before calling markConstant()

The value lattice explicitly represents undef, and markConstant()
internally checks for UndefValue and will create an undef rather
than constant lattice element in that case.

This is mostly a code simplification, it has little practical impact
because we usually get undef results from undef operands, and those
don't get processed.

Only leave the check behind for the CmpInst case, because it
currently goes through this incorrect code in the getCompare()
implementation: https://github.com/llvm/llvm-project/blob/f98697642cea761448dc0f84f750d3f5def8af6b/llvm/include/llvm/Analysis/ValueLattice.h#L456-L457

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

2 years ago[GlobalISel] Re-generate some checks.
Amara Emerson [Thu, 14 Jul 2022 07:57:29 +0000 (00:57 -0700)]
[GlobalISel] Re-generate some checks.

2 years agojGetLoadedDynamicLibrariesInfos can inspect machos not yet loaded
Jason Molenda [Thu, 14 Jul 2022 07:53:08 +0000 (00:53 -0700)]
jGetLoadedDynamicLibrariesInfos can inspect machos not yet loaded

jGetLoadedDynamicLibrariesInfos normally checks with dyld to find
the list of binaries loaded in the inferior, and getting the filepath,
before trying to parse the Mach-O binary in inferior memory.
This allows for debugserver to parse a Mach-O binary present in memory,
but not yet registered with dyld.  This patch also adds some simple
sanity checks that we're reading a Mach-O header before we begin
stepping through load commands, because we won't have the sanity check
of consulting dyld for the list of loaded binaries before parsing.
Also adds a testcase.

[This patch was reverted after causing a testsuite failure on a CI bot;
I haven't been able to repro the failure outside the CI, but I have a
theory that my sanity check on cputype which only matched arm64 and
x86_64 - and the CI machine may have a watch simulator that is still
using i386.]

Differential Revision: https://reviews.llvm.org/D128956
rdar://95737734

2 years ago[mlir][sparse] Switch to One-Shot Bufferize
Matthias Springer [Thu, 14 Jul 2022 07:47:37 +0000 (09:47 +0200)]
[mlir][sparse] Switch to One-Shot Bufferize

This change removes the partial bufferization passes from the sparse compilation pipeline and replaces them with One-Shot Bufferize. One-Shot Analysis (and TensorCopyInsertion) is used to resolve all out-of-place bufferizations, dense and sparse. Dense ops are then bufferized with BufferizableOpInterface. Sparse ops are still bufferized in the Sparsification pass.

Details:
* Dense allocations are automatically deallocated, unless they are yielded from a block. (In that case the alloc would leak.) All test cases are modified accordingly. E.g., some funcs now have an "out" tensor argument that is returned from the function. (That way, the allocation happens at the call site.)
* Sparse allocations are *not* automatically deallocated. They must be "released" manually. (No change, this will be addressed in a future change.)
* Sparse tensor copies are not supported yet. (Future change)
* Sparsification no longer has to consider inplacability. If necessary, allocations and/or copies are inserted during TensorCopyInsertion. All tensors are inplaceable by the time Sparsification is running. Instead of marking a tensor as "not inplaceable", it can be marked as "not writable", which will trigger an allocation and/or copy during TensorCopyInsertion.

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

2 years ago[AMDGPU] SIMachineScheduler: Add support for several MachineScheduler features
Jannik Silvanus [Fri, 20 May 2022 15:21:15 +0000 (17:21 +0200)]
[AMDGPU] SIMachineScheduler: Add support for several MachineScheduler features

The SI machine scheduler inherits from ScheduleDAGMI.
This patch adds support for a few features that are implemented
in ScheduleDAGMI (or its base classes) that were missing so far
because their support is implemented in overridden functions.

* Support cl::opt -view-misched-dags
  This option allows to open a graphical window of the scheduling DAG.

* Support cl::opt -misched-print-dags
  This option allows to print the scheduling DAG in text form.

* After constructing the scheduling DAG, call postprocessDAG()
  to apply any registered DAG mutations.
  Note that currently there are no mutations defined in AMDGPUTargetMachine.cpp
  in case SIScheduler is used.
  Still add this to avoid surprises in the future in case mutations are added.

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

2 years ago[obj2yaml] Add -o to specify output filename
Fangrui Song [Thu, 14 Jul 2022 07:32:48 +0000 (00:32 -0700)]
[obj2yaml] Add -o to specify output filename

-o is very common among tools. yaml2obj supports -o and it surprised me that
obj2yaml doesn't support -o. Just add it which doesn't take much code.

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

2 years ago[clang] Add missing header include
Shoaib Meenai [Thu, 14 Jul 2022 07:21:09 +0000 (00:21 -0700)]
[clang] Add missing header include

With my version of the MSVC tools (14.11.25503), this was failing to
build because of missing declarations of `std::isalnum` and
`std::isdigit`. Include `<cctype>` to get these.

2 years ago[mlir] Use value instead of getValue (NFC)
Kazu Hirata [Thu, 14 Jul 2022 07:19:59 +0000 (00:19 -0700)]
[mlir] Use value instead of getValue (NFC)

2 years ago[clang-tidy] Improve check cert-dcl58-cpp.
Balázs Kéri [Thu, 14 Jul 2022 06:37:21 +0000 (08:37 +0200)]
[clang-tidy] Improve check cert-dcl58-cpp.

Detect template specializations that should be handled specially.
In some cases it is allowed to extend the `std` namespace with
template specializations.

Reviewed By: aaron.ballman

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

2 years ago[clang] Use value instead of getValue (NFC)
Kazu Hirata [Thu, 14 Jul 2022 06:39:33 +0000 (23:39 -0700)]
[clang] Use value instead of getValue (NFC)

2 years ago[BOLT] Support multiple parents for split jump table
Huan Nguyen [Thu, 14 Jul 2022 06:35:51 +0000 (23:35 -0700)]
[BOLT] Support multiple parents for split jump table

There are two assumptions regarding jump table:
(a) It is accessed by only one fragment, say, Parent
(b) All entries target instructions in Parent

For (a), BOLT stores jump table entries as relative offset to Parent.
For (b), BOLT treats jump table entries target somewhere out of Parent
as INVALID_OFFSET, including fragment of same split function.

In this update, we extend (a) and (b) to include fragment of same split
functinon. For (a), we store jump table entries in absolute offset
instead. In addition, jump table will store all fragments that access
it. A fragment uses this information to only create label for jump table
entries that target to that fragment.

For (b), using absolute offset allows jump table entries to target
fragments of same split function, i.e., extend support for split jump
table. This can be done using relocation (fragment start/size) and
fragment detection heuristics (e.g., using symbol name pattern for
non-stripped binaries).

For jump table targets that can only be reached by one fragment, we
mark them as local label; otherwise, they would be the secondary
function entry to the target fragment.

Test Plan
```
ninja check-bolt
```

Reviewed By: Amir

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

2 years ago[llvm] Use value instead of getValue (NFC)
Kazu Hirata [Thu, 14 Jul 2022 06:11:56 +0000 (23:11 -0700)]
[llvm] Use value instead of getValue (NFC)

2 years ago[Clang] Adjust extension warnings for delimited sequences
Corentin Jabot [Wed, 13 Jul 2022 17:03:18 +0000 (19:03 +0200)]
[Clang] Adjust extension warnings for delimited sequences

WG21 approved delimited escape sequences and named escape
sequences.
Adjust the extension warnings accordingly, and update
the release notes.

Reviewed By: aaron.ballman

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

2 years ago[llvm] Make lib/Target/BPF/BTF.h self-contained
owenca [Thu, 14 Jul 2022 03:51:40 +0000 (20:51 -0700)]
[llvm] Make lib/Target/BPF/BTF.h self-contained

2 years ago[CSKY] Fix the br target operand type in td
Zi Xuan Wu (Zeson) [Thu, 14 Jul 2022 03:25:37 +0000 (11:25 +0800)]
[CSKY] Fix the br target operand type in td

br target operand should be Operand<OtherVT> type instead of Operand<iPTR>

2 years ago[llvm] add zstd to llvm::compression namespace
Cole Kissane [Thu, 14 Jul 2022 02:58:42 +0000 (19:58 -0700)]
[llvm] add zstd to llvm::compression namespace
- add `FindZSTD.cmake`
- add zstd to `llvm::compression` namespace
- add a CMake option `LLVM_ENABLE_ZSTD` with behavior mirroring that of `LLVM_ENABLE_ZLIB`
- add tests for zstd to `llvm/unittests/Support/CompressionTest.cpp`

Reviewed By: leonardchan, MaskRay

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

2 years agoRevert "[llvm] add zstd to `llvm::compression` namespace"
Cole Kissane [Thu, 14 Jul 2022 02:48:29 +0000 (19:48 -0700)]
Revert "[llvm] add zstd to `llvm::compression` namespace"

This reverts commit cef07169ec9f46fd25291a3218cf12bef324ea0c.

2 years ago[compiler-rt][hwasan] Support for new Intel LAM API
Alexander Potapenko [Thu, 14 Jul 2022 02:04:38 +0000 (19:04 -0700)]
[compiler-rt][hwasan] Support for new Intel LAM API

New version of Intel LAM patches
(https://lore.kernel.org/linux-mm/20220712231328.5294-1-kirill.shutemov@linux.intel.com/)
uses a different interface based on arch_prctl():
 - arch_prctl(ARCH_GET_UNTAG_MASK, &mask) returns the current mask for
   untagging the pointers. We use it to detect kernel LAM support.
 - arch_prctl(ARCH_ENABLE_TAGGED_ADDR, nr_bits) enables pointer tagging
   for the current process.

Because __NR_arch_prctl is defined in different headers, and no other
platforms need it at the moment, we only declare internal_arch_prctl()
on x86_64.

Reviewed By: vitalybuka

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

2 years ago[llvm] add zstd to `llvm::compression` namespace
Cole Kissane [Thu, 14 Jul 2022 02:06:26 +0000 (19:06 -0700)]
[llvm] add zstd to `llvm::compression` namespace

- add `FindZSTD.cmake`
- add zstd to `llvm::compression` namespace
- add a CMake option `LLVM_ENABLE_ZSTD` with behavior mirroring that of `LLVM_ENABLE_ZLIB`
- add tests for zstd to `llvm/unittests/Support/CompressionTest.cpp`

Reviewed By: leonardchan, MaskRay

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

2 years ago[VPlan] Move VPBB verification to separate function (NFC).
Florian Hahn [Thu, 14 Jul 2022 01:53:39 +0000 (18:53 -0700)]
[VPlan] Move VPBB verification to separate function (NFC).

2 years ago[CUDA] Allow the new driver to compile CUDA in non-RDC mode
Joseph Huber [Wed, 13 Jul 2022 15:25:31 +0000 (11:25 -0400)]
[CUDA] Allow the new driver to compile CUDA in non-RDC mode

The new driver primarily allows us to support RDC-mode compilations with
proper linking. This is not needed for non-RDC mode compilation, but we
still would like the new driver to be able to handle this mode so we can
transition away from the old driver in the future. This patch adds the
necessary code to support creating a fatbinary for CUDA code generation
as well as removing old assumptions and errors about RDC-mode with the
new driver.

Reviewed By: tra

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

2 years ago[lld-macho] Enable EH frame relocation / pruning
Jez Ng [Thu, 14 Jul 2022 01:13:45 +0000 (21:13 -0400)]
[lld-macho] Enable EH frame relocation / pruning

This just removes the code that gates the logic. The main issue here is
perf impact: without {D122258}, LLD takes a significant perf hit because
it now has to do a lot more work in the input parsing phase. But with
that change to eliminate unnecessary EH frames from input object files,
the perf overhead here is minimal. Concretely, here are the numbers for
some builds as measured on my 16-core Mac Pro:

**chromium_framework**

This is without the use of `-femit-dwarf-unwind=no-compact-unwind`:

             base           diff           difference (95% CI)
  sys_time   1.826 ± 0.019  1.962 ± 0.034  [  +6.5% ..   +8.4%]
  user_time  9.306 ± 0.054  9.926 ± 0.082  [  +6.2% ..   +7.1%]
  wall_time  8.225 ± 0.068  8.947 ± 0.128  [  +8.0% ..   +9.6%]
  samples    15             22

With that flag enabled, the regression mostly disappears, as hoped:

             base           diff           difference (95% CI)
  sys_time   1.839 ± 0.062  1.866 ± 0.068  [  -0.9% ..   +3.8%]
  user_time  9.452 ± 0.068  9.490 ± 0.067  [  -0.1% ..   +0.9%]
  wall_time  8.383 ± 0.127  8.452 ± 0.114  [  -0.1% ..   +1.8%]
  samples    17             21

**Unnamed internal app**

Without `-femit-dwarf-unwind`, this is the perf hit:

             base           diff           difference (95% CI)
  sys_time   1.372 ± 0.029  1.317 ± 0.024  [  -4.6% ..   -3.5%]
  user_time  2.835 ± 0.028  2.980 ± 0.027  [  +4.8% ..   +5.4%]
  wall_time  3.205 ± 0.079  3.383 ± 0.066  [  +4.9% ..   +6.2%]
  samples    102            83

With `-femit-dwarf-unwind`, the perf hit almost disappears:

             base           diff           difference (95% CI)
  sys_time   1.274 ± 0.026  1.270 ± 0.025  [  -0.9% ..   +0.3%]
  user_time  2.812 ± 0.023  2.822 ± 0.035  [  +0.1% ..   +0.7%]
  wall_time  3.166 ± 0.047  3.174 ± 0.059  [  -0.2% ..   +0.7%]
  samples    95             97

Just for fun, I measured the impact of `-femit-dwarf-unwind` on ld64
(`base` has the extra DWARF unwind info in the input object files,
`diff` doesn't):

             base           diff           difference (95% CI)
  sys_time   1.128 ± 0.010  1.124 ± 0.023  [  -1.3% ..   +0.6%]
  user_time  7.176 ± 0.030  7.106 ± 0.094  [  -1.5% ..   -0.4%]
  wall_time  7.874 ± 0.041  7.795 ± 0.121  [  -1.7% ..   -0.3%]
  samples    16             25

And for LLD:

             base           diff           difference (95% CI)
  sys_time   1.315 ± 0.019  1.280 ± 0.019  [  -3.2% ..   -2.0%]
  user_time  2.980 ± 0.022  2.822 ± 0.016  [  -5.5% ..   -5.0%]
  wall_time  3.369 ± 0.038  3.175 ± 0.033  [  -6.2% ..   -5.3%]
  samples    47             47

So parsing the extra EH frames is a lot more expensive for us than for
ld64. But given that we are quite a lot faster than ld64 to begin with,
I guess this isn't entirely unexpected...

Reviewed By: #lld-macho, oontvoo

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

2 years ago[docs] Document git-clang-format
Nico Weber [Tue, 12 Jul 2022 14:54:54 +0000 (10:54 -0400)]
[docs] Document git-clang-format

clang-format's documentation documented the more general clang-format-diff.py
script. Add documentation for the less general but arguably easier-to-use
git integration as well.

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

2 years ago[gn build] fix building lldb after b5ccfeb6bfbb
Nico Weber [Thu, 14 Jul 2022 01:05:36 +0000 (21:05 -0400)]
[gn build] fix building lldb after b5ccfeb6bfbb

2 years ago[PowerPC][LLD] Change PPC64R2SaveStub to only use non-PC-relative code
Stefan Pintilie [Wed, 13 Jul 2022 19:08:55 +0000 (14:08 -0500)]
[PowerPC][LLD] Change PPC64R2SaveStub to only use non-PC-relative code

Currently the PPC64R2SaveStub thunk will produce Power 10 code by default.
This produced an issue when linking older code that made use of the st_other=1
bit but was never meant to be linked or run on Power 10.

This patch makes it so that only the R_PPC64_REL24_NOTOC relocation can produce
Power 10 code.

Reviewed By: MaskRay

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

2 years ago[analyzer] Fix use of length in CStringChecker
einvbri [Thu, 7 Jul 2022 09:38:56 +0000 (04:38 -0500)]
[analyzer] Fix use of length in CStringChecker

CStringChecker is using getByteLength to get the length of a string
literal. For targets where a "char" is 8-bits, getByteLength() and
getLength() will be equal for a C string, but for targets where a "char"
is 16-bits getByteLength() returns the size in octets.

This is verified in our downstream target, but we have no way to add a
test case for this case since there is no target supporting 16-bit
"char" upstream. Since this cannot have a test case, I'm asserted this
change is "correct by construction", and visually inspected to be
correct by way of the following example where this was found.

The case that shows this fails using a target with 16-bit chars is here.
getByteLength() for the string literal returns 4, which fails when
checked against "char x[4]". With the change, the string literal is
evaluated to a size of 2 which is a correct number of "char"'s for a
16-bit target.

```
void strcpy_no_overflow_2(char *y) {
  char x[4];
  strcpy(x, "12"); // with getByteLength(), returns 4 using 16-bit chars
}
```

This change exposed that embedded nulls within the string are not
handled. This is documented as a FIXME for a future fix.

```
    void strcpy_no_overflow_3(char *y) {
      char x[3];
      strcpy(x, "12\0");
    }

```

Reviewed By: martong

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

2 years ago[LSR] Add test coverage for ICmpZero cases involving urem RHS
Philip Reames [Thu, 14 Jul 2022 00:12:48 +0000 (17:12 -0700)]
[LSR] Add test coverage for ICmpZero cases involving urem RHS

For the moment, we're pretty conservative here.  My motivating case is the vscale one (as that is idiomatic for scalable vectorized loops on RISCV).  There are two obvious approaches to fixing this, and I tried to add reasonable coverage for both even though I'll likely only fix one.

2 years ago[LV] Use PredRecipe directly instead of getOrAddVPValue (NFC).
Florian Hahn [Thu, 14 Jul 2022 00:01:42 +0000 (17:01 -0700)]
[LV] Use PredRecipe directly instead of getOrAddVPValue (NFC).

There is no need to look up the VPValue for Instr, PredRecipe can be
used directly.

2 years ago[flang] Avoid crash from forward referenced derived type
Peter Klausler [Mon, 11 Jul 2022 17:08:01 +0000 (10:08 -0700)]
[flang] Avoid crash from forward referenced derived type

Fortran permits forward references to derived types in contexts that don't
require knowledge of the derived type definition for semantic analysis,
such as in the declaration of a pointer or allocatable variable or component.
But when the forward-referenced derived type is used later for a component
reference, it is possible for the DerivedTypeSpec in he base variable or component
declaration to still have a null scope pointer even if the type has been defined,
since DerivedTypeSpec and TypeSpec objects are created in scopes of use
rather than in scopes of definition.  The fix is to call
DerivedTypeSpec::Instantiate() in the name resolution of each component
name so that the scope gets filled in if it is still null.

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

2 years ago[lldb] Add image dump pcm-info command
Dave Lee [Sat, 9 Jul 2022 00:34:10 +0000 (17:34 -0700)]
[lldb] Add image dump pcm-info command

Add `pcm-info` to the `target module dump` subcommands.

This dump command shows information about clang .pcm files. This command
effectively runs `clang -module-file-info` and produces identical output.

The .pcm file format is tightly coupled to the clang version. The clang
embedded in lldb is not guaranteed to match the version of the clang executable
available on the local system.

There have been times when I've needed to view the details about a .pcm file
produced by lldb's embedded clang, but because the clang executable was a
slightly different version, the `-module-file-info` invocation failed. With
this command, users can inspect .pcm files generated by lldb too.

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

2 years ago[flang] Error detection/avoidance for TRANSFER with empty MOLD= type
Peter Klausler [Fri, 8 Jul 2022 23:16:42 +0000 (16:16 -0700)]
[flang] Error detection/avoidance for TRANSFER with empty MOLD= type

When MOLD= is an array and there is no SIZE= in a call to TRANSFER(),
the size of an element of the MOLD= is used as the denominator in a
division to establish the extent of the vector result.  When the
total storage size of the SOURCE= is known to be zero, the result is
empty and no division is needed.

To avoid a division by zero at runtime, we need to check for a zero-sized
MOLD= element type when the storage size of SOURCE= is nonzero and there
is no SIZE=.  Further, in the compilation-time rewriting of calls to
SHAPE(TRANSFER(...)) and SIZE(TRANSFER(...)) for constant folding and
simplification purposes, we can't replace the call with an arithmetic
element count expression when the storage size of SOURCE= is not known
to be zero and the element size of MOLD= is not known to be nonzero at
compilation time.

These changes mostly affect tests using a MOLD= argument that is an
assumed-length character.

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

2 years ago[Support] Fix LLVM_ENABLE_ZLIB==0 builds
Fangrui Song [Wed, 13 Jul 2022 23:47:35 +0000 (16:47 -0700)]
[Support] Fix LLVM_ENABLE_ZLIB==0 builds

2 years ago[clang-format][NFC] Replace most of std::vector with SmallVector
owenca [Mon, 11 Jul 2022 06:49:16 +0000 (23:49 -0700)]
[clang-format][NFC] Replace most of std::vector with SmallVector

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

2 years ago[flang][runtime] Complete list-directed character input with DECIMAL='COMMA'
Peter Klausler [Fri, 8 Jul 2022 22:25:01 +0000 (15:25 -0700)]
[flang][runtime] Complete list-directed character input with DECIMAL='COMMA'

Most of the infrastructure for DECIMAL='COMMA' mode was in place
in the I/O runtime support library, but I dropped the ball for
list-directed character input, which has its own detection of
input separators.  Finish the job.

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

2 years ago[flang] Ensure name resolution visits "=>NULL()" in entity-decl
Peter Klausler [Fri, 8 Jul 2022 21:35:42 +0000 (14:35 -0700)]
[flang] Ensure name resolution visits "=>NULL()" in entity-decl

Most modern Fortran programs declare procedure pointers with a
procedure-declaration-stmt, but it's also possible to declare one
with a type-declaration-stmt with a POINTER attribute.  In this
case, e.g. "real, external, pointer :: p => null()" the initializer
is required to be a null-init.  The parse tree traversal in name
resolution would visit the null-init if the symbol were an object
pointer only, leading to a crash in the case of a procedure pointer.

That explanation of the bug is longer than the fix.  In short,
ensure that a null-init in an entity-decl is visited for both
species of pointers.

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

2 years ago[Support] Change compression::zlib::{compress,uncompress} to use uint8_t *
Fangrui Song [Wed, 13 Jul 2022 23:26:54 +0000 (16:26 -0700)]
[Support] Change compression::zlib::{compress,uncompress} to use uint8_t *

It's more natural to use uint8_t * (std::byte needs C++17 and llvm has
too much uint8_t *) and most callers use uint8_t * instead of char *.
The functions are recently moved into `llvm::compression::zlib::`, so
downstream projects need to make adaption anyway.

2 years ago[SimplifyCFG] Improve SwitchToLookupTable optimization
Alexander Shaposhnikov [Wed, 13 Jul 2022 23:21:45 +0000 (23:21 +0000)]
[SimplifyCFG] Improve SwitchToLookupTable optimization

Try to use the original value as an index (in the lookup table)
in more cases (to avoid one subtraction and shorten the dependency chain)
(https://github.com/llvm/llvm-project/issues/56189).

Test plan:
1/ ninja check-all
2/ bootstrapped LLVM + Clang pass tests

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

2 years ago[flang][runtime] Keep frame buffer in sync with file when truncating
Peter Klausler [Thu, 7 Jul 2022 21:51:40 +0000 (14:51 -0700)]
[flang][runtime] Keep frame buffer in sync with file when truncating

When the I/O runtime is truncating an external file due to an
implied ENDFILE or explicit ENDFILE, ensure that the unit's frame
buffer for the file discards any data that have become obsolete.

This bug caused trouble with ACCESS='STREAM' I/O using POS= on
a WRITE, but it may have not been limited to that scenario.

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

2 years ago[flang][runtime] Refine list-directed REAL(2) output
Peter Klausler [Thu, 7 Jul 2022 16:32:21 +0000 (09:32 -0700)]
[flang][runtime] Refine list-directed REAL(2) output

The rule used by list-directed REAL output editing to select
between Ew.d and Fw.d output editing breaks down for 16-bit
floating-point data, since the number of significant decimal
digits is so low that Ew,d output editing is nearly always selected.
Cap the test so that five-digit values will be output with Fw.d
editing.

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

2 years ago[gn build] (semi-manually) Port 5acd47169884
Nico Weber [Wed, 13 Jul 2022 22:35:25 +0000 (18:35 -0400)]
[gn build] (semi-manually) Port 5acd47169884

2 years ago[flang] Fold TRANSFER()
Peter Klausler [Tue, 5 Jul 2022 23:32:59 +0000 (16:32 -0700)]
[flang] Fold TRANSFER()

Fold usage of the raw data reinterpretation intrinsic function TRANSFER().

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

2 years ago[ORC] Add a shared-memory based orc::MemoryMapper.
Anubhab Ghosh [Tue, 12 Jul 2022 23:15:19 +0000 (16:15 -0700)]
[ORC] Add a shared-memory based orc::MemoryMapper.

This is an implementation of orc::MemoryMapper that maps shared memory
pages in both executor and controller process and writes directly to
them avoiding transferring content over EPC. All allocations are properly
deinitialized automatically on the executor side at shutdown by the
ExecutorSharedMemoryMapperService.

Reviewed By: lhames

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

2 years ago[BPF] Handle anon record for CO-RE relocations
Yonghong Song [Tue, 12 Jul 2022 19:21:11 +0000 (12:21 -0700)]
[BPF] Handle anon record for CO-RE relocations

When doing experiment in kernel, for kernel data structure sockptr_t
in CO-RE operation, I hit an assertion error. The sockptr_t definition
and usage look like below:
  #pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record)
  typedef struct {
        union {
                void    *kernel;
                void    *user;
        };
        unsigned is_kernel : 1;
  } sockptr_t;
  #pragma clang attribute pop
  int test(sockptr_t *arg) {
    return arg->is_kernel;
  }
The assertion error looks like
  clang: ../lib/Target/BPF/BPFAbstractMemberAccess.cpp:878: llvm::Value*
   {anonymous}::BPFAbstractMemberAccess::computeBaseAndAccessKey(llvm::CallInst*,
   {anonymous}::BPFAbstractMemberAccess::CallInfo&, std::__cxx11::string&,
   llvm::MDNode*&): Assertion `TypeName.size()' failed.

In this particular, the clang frontend attach the debuginfo metadata associated
with anon structure with the preserve_access_info IR intrinsic. But the first
debuginfo type has to be a named type so libbpf can have a sound start to
do CO-RE relocation.

Besides the above approach using pragma to push attribute, the below typedef/struct
definition can have preserve_access_index directly applying to the anon struct.
  typedef struct {
        union {
                void    *kernel;
                void    *user;
        };
        unsigned is_kernel : 1;
  } __attribute__((preserve_access_index) sockptr_t;

This patch fixed the issue by preprocessing function argument/return types
and local variable types used by other CO-RE intrinsics. For any
   typedef struct/union { ... } typedef_name
an association of <anon struct/union, typedef> is recorded to replace
the IR intrinsic metadata 'anon struct/union' to 'typedef'.
It is possible that two different 'typedef' types may have identical
anon struct/union type. For such a case, the association will be
<anon struct/union, nullptr> to indicate the invalid case.

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

2 years ago[hwasan] Add __hwasan_add_frame_record to the hwasan interface
Leonard Chan [Wed, 13 Jul 2022 22:07:59 +0000 (15:07 -0700)]
[hwasan] Add __hwasan_add_frame_record to the hwasan interface

Hwasan includes instructions in the prologue that mix the PC and SP and store
it into the stack ring buffer stored at __hwasan_tls. This is a thread_local
global exposed from the hwasan runtime. However, if TLS-mechanisms or the
hwasan runtime haven't been setup yet, it will be invalid to access __hwasan_tls.
This is the case for Fuchsia where we instrument libc, so some functions that
are instrumented but can run before hwasan initialization will incorrectly
access this global. Additionally, libc cannot have any TLS variables, so we
cannot weakly define __hwasan_tls until the runtime is loaded.

A way we can work around this is by moving the instructions into a hwasan
function that does the store into the ring buffer and creating a weak definition
of that function locally in libc. This way __hwasan_tls will not actually be
referenced. This is not our long-term solution, but this will allow us to roll
out hwasan in the meantime.

This patch includes:

- A new llvm flag for choosing to emit a libcall rather than instructions in the
  prologue (off by default)
- The libcall for storing into the ringbuffer (__hwasan_add_frame_record)

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

2 years ago[llvm] fix zlib buffer truncate edge cases and fix nits in tests
Cole Kissane [Wed, 13 Jul 2022 22:08:40 +0000 (15:08 -0700)]
[llvm] fix zlib buffer truncate edge cases and fix nits in tests

- add check before truncating (un)compressed data buffer if the buffer is already a perfect length, to avoid triggering truncate assertion in edge case.
- explictly coerce LLVM_ENABLE_ZLIB to a 0 or 1 value in OFF case, to match current ON, FORCE_ON behavior.
- fix code style nits in zlib tests

Reviewed By: phosek

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

2 years agoRevert "[hwasan] Add __hwasan_record_frame_record to the hwasan interface"
Leonard Chan [Wed, 13 Jul 2022 22:06:07 +0000 (15:06 -0700)]
Revert "[hwasan] Add __hwasan_record_frame_record to the hwasan interface"

This reverts commit 4956620387ee45a48a394853a47ddd65195c4cc6.

This broke a sanitizer builder: https://lab.llvm.org/buildbot/#/builders/77/builds/19597

2 years ago[GlobalISel] Fix and(load)->zextload combine crash.
Amara Emerson [Wed, 13 Jul 2022 21:30:51 +0000 (14:30 -0700)]
[GlobalISel] Fix and(load)->zextload combine crash.

We shouldn't use getOpcodeDef() if we need to guarantee the def has only one
user since under the hood it may look through copies and optimization hints,
which themselves may have multiple users.

2 years ago[flang] Refine semantic checks for procedure pointer assignment
Peter Klausler [Fri, 8 Jul 2022 20:38:31 +0000 (13:38 -0700)]
[flang] Refine semantic checks for procedure pointer assignment

Some procedure pointers and EXTERNAL procedures have neither
explicit interfaces nor result types; these procedures are obviously
not known to be functions, but they could be, so semantics must not
assume that they are necessarily subroutines.  Refine the procedure
pointer / dummy procedure compatibility check to handle these more
ambiguous cases and not elicit inappropriate error messages.

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

2 years ago[DOC] Add DR1734 and DR1496 Clang's cxx_dr_status as not implemented
Roy Jacobson [Tue, 12 Jul 2022 19:24:19 +0000 (22:24 +0300)]
[DOC] Add DR1734 and DR1496 Clang's cxx_dr_status as not implemented

Those two DRs about the (copy) triviality of types with deleted special member functions are not implemented in Clang.
Document them as such.

Reviewed By: aaron.ballman

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

2 years ago[LV] Move VPBranchOnMaskRecipe::execute to VPlanRecipes.cpp (NFC).
Florian Hahn [Wed, 13 Jul 2022 21:39:59 +0000 (14:39 -0700)]
[LV] Move VPBranchOnMaskRecipe::execute to VPlanRecipes.cpp (NFC).

2 years ago[RISCV] Fold (sra (sext_inreg (shl X, C1), i32), C2) -> (sra (shl X, C1+32), C2+32).
Craig Topper [Wed, 13 Jul 2022 19:50:49 +0000 (12:50 -0700)]
[RISCV] Fold (sra (sext_inreg (shl X, C1), i32), C2) -> (sra (shl X, C1+32), C2+32).

The former pattern will select as slliw+sraiw while the latter
will select as slli+srai. This can enable the slli+srai to be
compressed.

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

2 years ago[docs] Add BOLT Office Hours
Maksim Panchenko [Fri, 8 Jul 2022 23:07:13 +0000 (16:07 -0700)]
[docs] Add BOLT Office Hours

Reviewed By: rafauler

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

2 years ago[hwasan] Add __hwasan_record_frame_record to the hwasan interface
leonardchan [Wed, 6 Jul 2022 21:47:43 +0000 (05:47 +0800)]
[hwasan] Add __hwasan_record_frame_record to the hwasan interface

Hwasan includes instructions in the prologue that mix the PC and SP and store
it into the stack ring buffer stored at __hwasan_tls. This is a thread_local
global exposed from the hwasan runtime. However, if TLS-mechanisms or the
hwasan runtime haven't been setup yet, it will be invalid to access __hwasan_tls.
This is the case for Fuchsia where we instrument libc, so some functions that
are instrumented but can run before hwasan initialization will incorrectly
access this global. Additionally, libc cannot have any TLS variables, so we
cannot weakly define __hwasan_tls until the runtime is loaded.

A way we can work around this is by moving the instructions into a hwasan
function that does the store into the ring buffer and creating a weak definition
of that function locally in libc. This way __hwasan_tls will not actually be
referenced. This is not our long-term solution, but this will allow us to roll
out hwasan in the meantime.

This patch includes:

- A new llvm flag for choosing to emit a libcall rather than instructions in the
  prologue (off by default)
- The libcall for storing into the ringbuffer (__hwasan_record_frame_record)

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

2 years ago[clang][deps] Silence a GCC warning about missing returns after a fully covered switc...
Martin Storsjö [Wed, 13 Jul 2022 20:56:27 +0000 (23:56 +0300)]
[clang][deps] Silence a GCC warning about missing returns after a fully covered switch. NFC.

2 years ago[lldb] Silence a GCC warning about missing returns after a fully covered switch....
Martin Storsjö [Wed, 13 Jul 2022 20:56:03 +0000 (23:56 +0300)]
[lldb] Silence a GCC warning about missing returns after a fully covered switch. NFC.

2 years ago[libc][NFC] Make all integration tests depend on the threads implementation.
Siva Chandra Reddy [Wed, 13 Jul 2022 20:51:12 +0000 (20:51 +0000)]
[libc][NFC] Make all integration tests depend on the threads implementation.

The integration tests use the loader which sets up the main thread's
self object. So, all integration tests have to depend on the threads
implementation.

2 years ago[libc] Linux threads - Setup TLS area of a new thread and cleanup at exit.
Siva Chandra Reddy [Mon, 11 Jul 2022 22:12:47 +0000 (22:12 +0000)]
[libc] Linux threads - Setup TLS area of a new thread and cleanup at exit.

Reviewed By: lntue

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

2 years ago[gn build] Port 3ce78cbd2392
LLVM GN Syncbot [Wed, 13 Jul 2022 20:38:59 +0000 (20:38 +0000)]
[gn build] Port 3ce78cbd2392

2 years ago[Analysis] clang-format InlineAdvisor.cpp (NFC)
Kazu Hirata [Wed, 13 Jul 2022 20:38:50 +0000 (13:38 -0700)]
[Analysis] clang-format InlineAdvisor.cpp (NFC)

2 years ago[test] Fix macOS triple check
Ben Langmuir [Wed, 13 Jul 2022 19:10:20 +0000 (12:10 -0700)]
[test] Fix macOS triple check

While the inferred host triple for macOS is something like
<arch>-apple-darwin, it's also valid to have <arch>-apple-macos.
Currently that globally changes whether an SDKROOT is provided in tests,
so make this check more portable.

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

2 years ago[clang][deps] Fix handling of -MT in module command-line
Ben Langmuir [Tue, 12 Jul 2022 23:55:11 +0000 (16:55 -0700)]
[clang][deps] Fix handling of -MT in module command-line

Follow-up to 6626f6fec3d3, this fixes the handling of -MT
* If no targets are provided, we need to invent one since cc1 expects
  the driver to have handled it. The default is to use -o, quoting as
  necessary for a make target.
* Fix the splitting for empty string, which was incorrectly treated as
  {""} instead of {}.
* Add a way to test this behaviour in clang-scan-deps.

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

2 years ago[lld-macho] Accept dylibs with LC_DYLD_EXPORTS_TRIE
Daniel Bertalan [Sat, 9 Jul 2022 22:05:13 +0000 (00:05 +0200)]
[lld-macho] Accept dylibs with LC_DYLD_EXPORTS_TRIE

This load command specifies the offset and size of the exports trie.
This information used to be a field in LC_DYLD_INFO, but in newer
libraries, it has a dedicated load command: LC_DYLD_EXPORTS_TRIE.

The format of the trie is the same for both load commands, so the code
for parsing it can be shared.

LLD does not generate this yet; it is mainly useful when chained fixups
are in use, as the other members of LC_DYLD_INFO are unused then, so the
smaller LC_DYLD_EXPORTS_TRIE can be output instead.

LLDB gained support for this in D107673.

Fixes #54550

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

2 years ago[gn build] Port a5c0638dec83
LLVM GN Syncbot [Wed, 13 Jul 2022 20:25:34 +0000 (20:25 +0000)]
[gn build] Port a5c0638dec83

2 years ago[libc++][ranges] implement `std::ranges::set_symmetric_difference`
Hui Xie [Mon, 11 Jul 2022 22:39:59 +0000 (23:39 +0100)]
[libc++][ranges] implement `std::ranges::set_symmetric_difference`

[libc++][ranges] implement `std::ranges::set_symmetric_difference`

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

2 years ago[libc] Specify rounding mode for strto[f|d] tests
Alex Brachet [Wed, 13 Jul 2022 20:20:30 +0000 (20:20 +0000)]
[libc] Specify rounding mode for strto[f|d] tests

The specified rounding mode will be used and restored
to what it was before the test ran.

Additionally, it moves ForceRoundingMode and RoundingMode
out of MPFRUtils to be used in more places.

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

2 years agoChange shebang from python to python3 in update_cc_test_checks.py
Roman Rusyaev [Wed, 13 Jul 2022 20:02:32 +0000 (13:02 -0700)]
Change shebang from python to python3 in update_cc_test_checks.py

All update_test_checks.py scripts were updated in this revision
https://reviews.llvm.org/D70730 except for update_cc_test_checks.py.

Reviewed By: barannikov88

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

2 years ago[CUDA][HIP][NFC] Do not add `-fgpu-rdc` flag twice
Joseph Huber [Wed, 13 Jul 2022 19:56:15 +0000 (15:56 -0400)]
[CUDA][HIP][NFC] Do not add `-fgpu-rdc` flag twice

Summary:
We currently add the `-fgpu-rdc` flag twice. Once unconditionally for
both the host and device phases of compilation, and a second time only
for the host. When we moved to an unconditional addition of this flag it
the old one was most likely not removed. This patch simply removes the
redundant flag and changes no functionality.

2 years ago[RISCV] Add test case show missed opportunity to turn slliw+sraiw into slli+srai.
Craig Topper [Wed, 13 Jul 2022 19:45:18 +0000 (12:45 -0700)]
[RISCV] Add test case show missed opportunity to turn slliw+sraiw into slli+srai.

slliw and sraiw have no compressed encodings. slli and srai
do have compressed encodings.

Pre-commit for D129688

2 years ago[LinkerWrapper] Fix deleted constructor error on older compilers
Joseph Huber [Wed, 13 Jul 2022 19:44:08 +0000 (15:44 -0400)]
[LinkerWrapper] Fix deleted constructor error on older compilers

Summary:
The previous patch moved some functoinality into a new function and
returned it. The vector contained move-only members. Newer compilers
should figure this out and I didn't notice any problems, but other ones
have problems. Explicitly move this vector to hopefully solve the issue.

2 years ago[NFC] Minor cleanup of usage of FloatModeKind with bitmask enums
Jolanta Jensen [Fri, 8 Jul 2022 13:55:08 +0000 (14:55 +0100)]
[NFC] Minor cleanup of usage of FloatModeKind with bitmask enums

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

2 years ago[LinkerWrapper] Support time tracing in the linker wrapper
Joseph Huber [Wed, 13 Jul 2022 18:55:55 +0000 (14:55 -0400)]
[LinkerWrapper] Support time tracing in the linker wrapper

Summary:
This patch adds the new `--wrapper-time-trace=` option to write a time
tracing JSON file indicating where time was spent in the linker wrapper.
We also reformat and group some of the existing code to make
constraining the scope easier for time tracing.  We use the `--wrapper`
prefix to set this apart from the time tracing that lld may use.

2 years ago[LinkerWrapper] Add support for timescope tracing
Joseph Huber [Wed, 13 Jul 2022 17:35:39 +0000 (13:35 -0400)]
[LinkerWrapper] Add support for timescope tracing

2 years ago[Clang][Sema][AIX][PowerPC] Emit byval alignment warning only when struct is passed...
Zarko Todorovski [Wed, 13 Jul 2022 19:32:16 +0000 (15:32 -0400)]
[Clang][Sema][AIX][PowerPC] Emit byval alignment warning only when struct is passed to a function

Previous warning went on whenever a struct with a struct member with alignment => 16
was declared. This led to too many false positives and led to diagnostic lit failures
due to it being emitted too frequently. Only emit the warning when such a struct and
that struct contains a member that has an alignment of 16 bytes is passed to a caller
function since this is where the potential binary compatibility issue with XL 16.1.0
and older exists.

Reviewed By: sfertile, aaron.ballman

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

2 years ago[trace][intel pt] Support dumping the trace info in json
ymeng [Thu, 7 Jul 2022 13:52:04 +0000 (06:52 -0700)]
[trace][intel pt] Support dumping the trace info in json

Thanks to ymeng@fb.com for coming up with this change.

`thread trace dump info` can dump some metrics that can be useful for
analyzing the performance and quality of a trace. This diff adds a --json
option for dumping this information in json format that can be easily
understood my machines.

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

2 years ago[trace][intel pt] Add a cgroup filter
Gaurav Gaur [Wed, 29 Jun 2022 20:09:12 +0000 (13:09 -0700)]
[trace][intel pt] Add a cgroup filter

It turns out that cgroup filtering is relatively trivial and works
really nicely. Thid diffs adds automatic cgroup filtering when in
per-cpu mode, unless a new --disable-cgroup-filtering flag is passed in
the start command. At least on Meta machines, all processes are spawned
inside a cgroup by default, which comes super handy, because per cpu
tracing is now much more precise.

A manual test gave me this result

- Without filtering:
    Total number of trace items: 36083
    Total number of continuous executions found: 229
    Number of continuous executions for this thread: 2
    Total number of PSB blocks found: 98
    Number of PSB blocks for this thread 2
    Total number of unattributed PSB blocks found: 38

- With filtering:
    Total number of trace items: 87756
    Total number of continuous executions found: 123
    Number of continuous executions for this thread: 2
    Total number of PSB blocks found: 10
    Number of PSB blocks for this thread 3
    Total number of unattributed PSB blocks found: 2

Filtering gives us great results. The number of instructions collected
more than double (probalby because we have less noise in the trace), and
we have much less unattributed PSBs blocks and unrelated PSBs in
general. The ones that are unrelated probably belong to other processes
in the same cgroup.

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

2 years ago[trace][intel pt] Create a CPU change event and expose it in the dumper
Walter Erquinigo [Fri, 8 Jul 2022 01:31:18 +0000 (18:31 -0700)]
[trace][intel pt] Create a CPU change event and expose it in the dumper

Thanks to fredzhou@fb.com for coming up with this feature.

When tracing in per-cpu mode, we have information of in which cpu we are execution each instruction, which comes from the context switch trace. This diff makes this information available as a `cpu changed event`, which an additional accessor in the cursor `GetCPU()`. As cpu changes are very infrequent, any consumer should listen to cpu change events instead of querying the actual cpu of a trace item. Once a cpu change event is seen, the consumer can invoke GetCPU() to get that information. Also, it's possible to invoke GetCPU() on an arbitrary instruction item, which will return the last cpu seen. However, this call is O(logn) and should be used sparingly.

Manually tested with a sample program that starts on cpu 52, then goes to 18, and then goes back to 52.

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