platform/upstream/llvm.git
20 months ago[SLP]Fix PR58863: Mask index beyond mask size for non-power-2 insertelement analysis.
Alexey Bataev [Tue, 8 Nov 2022 14:16:30 +0000 (06:16 -0800)]
[SLP]Fix PR58863: Mask index beyond mask size for non-power-2 insertelement analysis.

Need to check if the insertelement mask size is reached during cost analysis to avoid compiler crash.

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

20 months agoReapply "[SLP] Extend reordering data of tree entry to support PHInodes".
skc7 [Tue, 8 Nov 2022 08:07:12 +0000 (13:37 +0530)]
Reapply "[SLP] Extend reordering data of tree entry to support PHInodes".

Reapplies 87a2086 (which was reverted in 656f1d8).
Fix for scalable vectors in getInsertIndex merged in 46d53f4.

Reviewed By: ABataev

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

20 months ago[Includecleaner] Introduce RefType to ast walking
Kadir Cetinkaya [Mon, 29 Aug 2022 08:34:01 +0000 (10:34 +0200)]
[Includecleaner] Introduce RefType to ast walking

RefTypes are distinct categories for each reference to a symbol. They
are signals indicating strength of a reference, that'll enable different
decision making based on the finding being provided.

There are 3 kinds of ref types:
- Explicit, the reference is spelled in the code.
- Implicit, the reference is not directly visible in the code.
- Ambigious, the reference exists but can't be proven as used (e.g.
  overloads brought in by a using decl but not used by the code).

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

20 months agoReapply: Fix warning: comparison of integers of different signs
OCHyams [Mon, 7 Nov 2022 12:33:23 +0000 (12:33 +0000)]
Reapply: Fix warning: comparison of integers of different signs

Buildbot failure:
https://lab.llvm.org/buildbot/#/builders/36/builds/26925

Review & commit:
https://reviews.llvm.org/D132224
https://reviews.llvm.org/rG171f7024cc82e8702abebdedb699d37b50574be7

20 months agoRevert "[AArch64] Precommit test for D137069; NFC"
chenglin.bi [Tue, 8 Nov 2022 15:00:14 +0000 (23:00 +0800)]
Revert "[AArch64] Precommit test for D137069; NFC"

This reverts commit 281f2134a730f147428d75c09a28f0c5e1be95d9.

20 months agoReapply [Assignment Tracking][5/*] Add core infrastructure for instruction reference
OCHyams [Mon, 7 Nov 2022 11:56:36 +0000 (11:56 +0000)]
Reapply [Assignment Tracking][5/*] Add core infrastructure for instruction reference

Previously reverted in 41f5a0004e442ae71c8e754fdadb4bd1e172fb2d. Fold in
D133576 previously reverted in d29d5ffb6332569e85d5eda5130603bbd8664635.

---

The Assignment Tracking debug-info feature is outlined in this RFC:

https://discourse.llvm.org/t/
rfc-assignment-tracking-a-better-way-of-specifying-variable-locations-in-ir

Overview
It's possible to find intrinsics linked to an instruction by looking at the
MetadataAsValue uses of the attached DIAssignID. That covers instruction ->
intrinsic(s) lookup. Add a global DIAssignID -> instruction(s) map which gives
us the ability to perform intrinsic -> instruction(s) lookup. Add plumbing to
keep the map up to date through optimisations and add utility functions
including two that perform those lookups. Finally, add a unittest.

Details
In llvm/lib/IR/LLVMContextImpl.h add AssignmentIDToInstrs which maps DIAssignID
* attachments to Instruction *s. Because the DIAssignID * is the key we can't
use a TrackingMDNodeRef for it, and therefore cannot easily update the mapping
when a temporary DIAssignID is replaced.

Temporary DIAssignID's are only used in IR parsing to deal with metadata
forward references. Update llvm/lib/AsmParser/LLParser.cpp to avoid using
temporary DIAssignID's for attachments.

In llvm/lib/IR/Metadata.cpp add Instruction::updateDIAssignIDMapping which is
called to remove or add an entry (or both) to AssignmentIDToInstrs. Call this
from Instruction::setMetadata and add a call to setMetadata in Intruction's
dtor that explicitly unsets the DIAssignID so that the mappging gets updated.

In llvm/lib/IR/DebugInfo.cpp and DebugInfo.h add utility functions:

    getAssignmentInsts(const DbgAssignIntrinsic *DAI)
    getAssignmentMarkers(const Instruction *Inst)
    RAUW(DIAssignID *Old, DIAssignID *New)
    deleteAll(Function *F)
    deleteAssignmentMarkers(const Instruction *Inst)

These core utils are tested in llvm/unittests/IR/DebugInfoTest.cpp.

Reviewed By: jmorse

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

20 months ago[X86] CVTTSS2SI64rm has the same scheduler def as (V)CVTSS2SI64rm
Simon Pilgrim [Tue, 8 Nov 2022 14:35:30 +0000 (14:35 +0000)]
[X86] CVTTSS2SI64rm has the same scheduler def as (V)CVTSS2SI64rm

None of Haswell/Broadwell/Skylake/Icelake treat CVTTSS2SI64rm differently from CVTSS2SI64rm (or the AVX variants)

Confirmed with Agner, uops.info and Intel AoM

20 months agoFix dupe word typos
Rageking8 [Tue, 8 Nov 2022 14:28:25 +0000 (15:28 +0100)]
Fix dupe word typos

This revision fixes typos where there are 2 consecutive words which are duplicated.
There should be no code changes in this revision (only changes to comments and docs).
Do let me know if there are any undesirable changes in this revision. Thanks.

20 months ago[include-cleaner] Record main-file macro occurences and includes
Sam McCall [Wed, 26 Oct 2022 00:21:06 +0000 (02:21 +0200)]
[include-cleaner] Record main-file macro occurences and includes

The occurrences are roots for finding used headers, like walkAST.
Includes are the targets we're matching used headers against.

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

20 months agoReland "[llvm][NFC] Use c++17 style variable type traits"
Nathan James [Tue, 8 Nov 2022 14:15:04 +0000 (14:15 +0000)]
Reland "[llvm][NFC] Use c++17 style variable type traits"

This reverts commit 632a389f96355cbe7ed8fa7b8d2ed6267c92457c.

This relands commit
1834a310d060d55748ca38d4ae0482864c2047d8.

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

20 months ago[AArch64] Precommit test for D137069; NFC
chenglin.bi [Tue, 8 Nov 2022 14:13:42 +0000 (22:13 +0800)]
[AArch64] Precommit test for D137069; NFC

20 months ago[VectorCombine] add test with addrspacecast; NFC
Sanjay Patel [Mon, 7 Nov 2022 17:39:32 +0000 (12:39 -0500)]
[VectorCombine] add test with addrspacecast; NFC

D137341

20 months ago[OpenMP][mingw] Fix build for aarch64 target
Alvin Wong [Fri, 4 Nov 2022 22:22:50 +0000 (00:22 +0200)]
[OpenMP][mingw] Fix build for aarch64 target

This patch changes AArch64 + `__GNUC__` to use `__sync` builtins to
implement internal atomic macros just like for Unix, because mingw-w64
is missing some of the intrinsics which the MSVC codepath is using.

Then some remaining intel-only functions are removed from dllexport to
fix linking.

This should fix https://github.com/llvm/llvm-project/issues/56349.

Reviewed By: natgla

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

20 months ago[NFC][intelpt] Improve IntelPT trace bundle documentation
Jakob Johnson [Sun, 6 Nov 2022 22:32:18 +0000 (14:32 -0800)]
[NFC][intelpt] Improve IntelPT trace bundle documentation

Mention that the LLVM/clang triple must be provided if the trace will be
consumed via `SBTraceCursor`

Test Plan:

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

20 months agoRevert "[llvm][NFC] Use c++17 style variable type traits"
Nathan James [Tue, 8 Nov 2022 13:11:10 +0000 (13:11 +0000)]
Revert "[llvm][NFC] Use c++17 style variable type traits"

This reverts commit 1834a310d060d55748ca38d4ae0482864c2047d8.

20 months ago[SLP][NFC] Restructure getInsertIndex
skc7 [Mon, 7 Nov 2022 15:58:03 +0000 (21:28 +0530)]
[SLP][NFC] Restructure getInsertIndex

Reviewed By: ABataev

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

20 months ago[AArch64]SME2 Single and Multi vector Shift and Multiply instructions
Caroline Concatto [Tue, 8 Nov 2022 12:02:04 +0000 (12:02 +0000)]
[AArch64]SME2 Single and Multi vector  Shift and Multiply instructions

This patch adds the assembly/disassembly for the following instructions:

  SQRSHR (four registers): Multi-vector signed saturating rounding shift right narrow by immediate.
         (two registers): Multi-vector signed saturating rounding shift right narrow by immediate.
  SQRSHRN: Multi-vector signed saturating rounding shift right narrow by immediate and interleave.
  SQRSHRU (four registers): Multi-vector signed saturating rounding shift right unsigned narrow by immediate.
          (two registers): Multi-vector signed saturating rounding shift right unsigned narrow by immediate.
  SQRSHRUN: Multi-vector signed saturating rounding shift right unsigned narrow by immediate and interleave.
  UQRSHR (four registers): Multi-vector unsigned saturating rounding shift right narrow by immediate
         (two registers): Multi-vector unsigned saturating rounding shift right narrow by immediate.
  UQRSHRN: Multi-vector unsigned saturating rounding shift right narrow by immediate and interleave.

The reference can be found here:

https://developer.arm.com/documentation/ddi0602/2022-09

Reviewed By: paulwalker-arm

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

20 months agoFix build file for PDLL tests.
Johannes Reifferscheid [Tue, 8 Nov 2022 12:24:08 +0000 (13:24 +0100)]
Fix build file for PDLL tests.

20 months ago[llvm][NFC] Use c++17 style variable type traits
Nathan James [Tue, 8 Nov 2022 12:22:50 +0000 (12:22 +0000)]
[llvm][NFC] Use c++17 style variable type traits

This was done as a test for D137302 and it makes sense to push these changes

Reviewed By: dblaikie

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

20 months agoFix duplicate word typos; NFC
Rageking8 [Tue, 8 Nov 2022 12:21:23 +0000 (07:21 -0500)]
Fix duplicate word typos; NFC

This revision fixes typos where there are 2 consecutive words which are
duplicated. There should be no code changes in this revision (only
changes to comments and docs). Do let me know if there are any
undesirable changes in this revision. Thanks.

20 months ago[Test] Add tests with range checks with known constant ranges
Dmitry Makogon [Tue, 8 Nov 2022 10:56:19 +0000 (17:56 +0700)]
[Test] Add tests with range checks with known constant ranges

LoopPredication might be able to turn such checks (which are
not necessarily are done on IV) into loop invariant checks.

20 months ago[AMDGPU] Declutter applyPreexistingWaitcnt()
Stephen Thomas [Tue, 8 Nov 2022 11:39:41 +0000 (11:39 +0000)]
[AMDGPU] Declutter applyPreexistingWaitcnt()

Declutter applyPreexistingWaitcnt() a little by abstracting the code
that updates the operands to S_WAITCNT and S_WAITCNT_VSCNT instructions
into discrete functions.

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

20 months ago[clang][Sema][NFC] Remove two nonsensical dyn_cast_or_null
Timm Bäder [Mon, 7 Nov 2022 08:46:08 +0000 (09:46 +0100)]
[clang][Sema][NFC] Remove two nonsensical dyn_cast_or_null

The values used here are never null.

20 months agoAMDGPU/GlobalISel: Fix combine crash because LI is not set in prelegalizer
Petar Avramovic [Tue, 8 Nov 2022 09:32:04 +0000 (10:32 +0100)]
AMDGPU/GlobalISel: Fix combine crash because LI is not set in prelegalizer

Caused by legacy min/max combines (select + cmp) asking for legalizer info
in prelegalizer (D135047 added combine to all_combines).
Combine still does not work for AMDGPU since destination opcode is custom,
not legal. Similar combine works on DAG since it asks for legal or custom.

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

20 months ago[LoongArch] Add support for the BranchRelaxation pass
Xiaodong Liu [Wed, 2 Nov 2022 07:47:26 +0000 (15:47 +0800)]
[LoongArch] Add support for the BranchRelaxation pass

When the branch target is out of the range represented by the current
branch instruction's immediate, branch relaxation is required. There
are three types of immediate for branch instructions on LoongArch,
including simm16, simm21 and simm26. And the real branch target
address is PC + sext(simmXX << 2). In addition, the indirect branch
way is implemented to support larger branch target.

BranchRelaxation pass calls `RenumberBlocks` to renumber all of the
machine basic blocks in the function. So the machine basic blocks
number changed in some test cases.

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

20 months ago[include-cleaner] Add the missing parts of Symbol and Header clases.
Sam McCall [Tue, 25 Oct 2022 19:04:59 +0000 (21:04 +0200)]
[include-cleaner] Add the missing parts of Symbol and Header clases.

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

20 months agoUse opt -passes=<name> instead of opt -name
Bjorn Pettersson [Mon, 7 Nov 2022 09:46:57 +0000 (10:46 +0100)]
Use opt -passes=<name> instead of opt -name

Updated the RUN line in several test cases to use the new PM syntax
  opt -passes=<pipeline>
instead of the deprecated syntax
  opt -pass1 -pass2

20 months ago[clang][test] Use opt -passes=<name> instead of opt -name
Bjorn Pettersson [Sun, 6 Nov 2022 17:38:32 +0000 (18:38 +0100)]
[clang][test] Use opt -passes=<name> instead of opt -name

Updated the RUN line in several test cases to use the new PM syntax
  opt -passes=<pipeline>
instead of the deprecated syntax
  opt -pass1 -pass2

This was not a complete cleanup in clang/test. But just a swipe using
some simple search-and-replace. Mainly for RUN lines involving
-mem2reg, -instnamer and -early-cse.

20 months agoAdd missing PDLL libs.
Johannes Reifferscheid [Tue, 8 Nov 2022 11:14:32 +0000 (12:14 +0100)]
Add missing PDLL libs.

20 months agoAdd const information about AST nodes used to construct CFG elements.
Dani Ferreira Franco Moura [Tue, 8 Nov 2022 09:14:02 +0000 (10:14 +0100)]
Add const information about AST nodes used to construct CFG elements.

Most constructors and destructors in CFG.h already specify const arguments, but some are missing this.

Reviewed By: gribozavr2, krasimir

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

20 months agoAdd missing build deps.
Johannes Reifferscheid [Tue, 8 Nov 2022 10:45:12 +0000 (11:45 +0100)]
Add missing build deps.

20 months ago[AArch64][SVE2] Add the SVE2.1 dupq and extq instructions
David Sherwood [Mon, 7 Nov 2022 17:22:54 +0000 (17:22 +0000)]
[AArch64][SVE2] Add the SVE2.1 dupq and extq instructions

This patch adds the assembly/disassembly for the following instructions:

dupq : Broadcast indexed element within each quadword vector segment (unpredicated)
extq : Extract vector segment from each pair of quadword vector segments

The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2022-09

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

20 months agoSuppress warning for unused variable if assertions are disabled.
Johannes Reifferscheid [Tue, 8 Nov 2022 10:12:09 +0000 (11:12 +0100)]
Suppress warning for unused variable if assertions are disabled.

Reviewed By: bkramer

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

20 months ago[mlir:PDLL] Allow complex constraints on Rewrite arguments/results
River Riddle [Thu, 15 Sep 2022 23:18:32 +0000 (16:18 -0700)]
[mlir:PDLL] Allow complex constraints on Rewrite arguments/results

The documentation already has examples of this, and it allows for
using nicer C++ types when defining native Rewrites.

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

20 months ago[mlir:PDLL] Don't require users to provide operands/results when all are variadic
River Riddle [Mon, 12 Sep 2022 18:43:44 +0000 (11:43 -0700)]
[mlir:PDLL] Don't require users to provide operands/results when all are variadic

When all operands or results are variadic, zero values is a perfectly valid behavior
to expect, and we shouldn't force the user to provide values in this case. For example,
when creating a call or a return operation we often don't want/need to provide return
values.

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

20 months ago[mlir:PDLL] Add support for building a range from a tuple within a rewrite
River Riddle [Sat, 10 Sep 2022 01:43:27 +0000 (18:43 -0700)]
[mlir:PDLL] Add support for building a range from a tuple within a rewrite

This allows for constructing type and value ranges from various sub elements,
which makes it easier to construct operations that take a range as an operand
or result type. Range construction is currently limited to within rewrites, to match
the current constraint on the PDL side.

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

20 months ago[mlir:PDL] Add support for creating ranges in rewrites
River Riddle [Fri, 9 Sep 2022 23:31:24 +0000 (16:31 -0700)]
[mlir:PDL] Add support for creating ranges in rewrites

This commit adds support for building a concatenated range from
a given set of elements, either single element or other ranges, within a
rewrite. We could conceptually extend this to support constraining
input ranges, but the logic there is quite a bit more complex so it is
left for later work when a need arises.

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

20 months ago[mlir:PDL] Add support for DialectConversion with pattern configurations
River Riddle [Thu, 8 Sep 2022 23:59:39 +0000 (16:59 -0700)]
[mlir:PDL] Add support for DialectConversion with pattern configurations

Up until now PDL(L) has not supported dialect conversion because we had no
way of remapping values or integrating with type conversions. This commit
rectifies that by adding a new "pattern configuration" concept to PDL. This
essentially allows for attaching external configurations to patterns, which
can hook into pattern events (for now just the scope of a rewrite, but we
could also pass configs to native rewrites as well). This allows for injecting
the type converter into the conversion pattern rewriter.

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

20 months ago[Test] Fix driverkit-path.c with lib64 dir
Thomas Preud'homme [Sat, 5 Nov 2022 10:07:21 +0000 (10:07 +0000)]
[Test] Fix driverkit-path.c with lib64 dir

Reviewed By: yln

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

20 months ago[AArch64]SME2 MOV Instructions
Caroline Concatto [Wed, 2 Nov 2022 09:36:50 +0000 (09:36 +0000)]
[AArch64]SME2 MOV Instructions

This patch adds the assembly/disassembly for the following instructions:

MOVA (array to vector, four registers): Move four ZA single-vector groups to four vector registers.
     (array to vector, two registers): Move two ZA single-vector groups to two vector registers.
     (tile to vector, four registers): Move four ZA tile slices to four vector registers.
     (tile to vector, single): Move ZA tile slice to vector register.
     (tile to vector, two registers): Move two ZA tile slices to two vector registers.
     (vector to array, four registers): Move four vector registers to four ZA single-vector groups.
     (vector to array, two registers): Move two vector registers to two ZA single-vector groups.
     (vector to tile, four registers): Move four vector registers to four ZA tile slices.
     (vector to tile, single): Move vector register to ZA tile slice.
     (vector to tile, two registers): Move two vector registers to two ZA tile slices.

The reference can be found here:

https://developer.arm.com/documentation/ddi0602/2022-09

It add more sizes for Matrix Operand:
MatrixOp8 and MatrixOp16
two implicit operands uimm0s2range and uimm0s4range.
and  uimm1s2range that are immediates

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

20 months ago[AArch64][SVE2] Add the SVE2.1 FP quadword reduction instructions
David Sherwood [Thu, 3 Nov 2022 11:51:29 +0000 (11:51 +0000)]
[AArch64][SVE2] Add the SVE2.1 FP quadword reduction instructions

This patch adds the assembly/disassembly for the following instructions:

faddqv   : Floating-point add recursive reduction of quadword vector segments
fmaxqv   : Floating-point maximum reduction of quadword vector segments
fmaxnmqv : Floating-point maximum number recursive reduction of quadword vector segments
fminqv   : Floating-point minimum recursive reduction of quadword vector segments
fminnmqv : Floating-point minimum number recursive reduction of quadword vector segments

The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2022-09

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

20 months ago[clang][pdb] Don't include -fmessage-length in PDB buildinfo
Tobias Hieta [Tue, 8 Nov 2022 08:23:10 +0000 (09:23 +0100)]
[clang][pdb] Don't include -fmessage-length in PDB buildinfo

As discussed in https://reviews.llvm.org/D136474 -fmessage-length
creates problems with reproduciability in the PDB files.

This patch just drops that argument when writing the PDB file.

Reviewed By: hans

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

20 months ago[mlir][vector] Add vector.scalable.insert/extract ops
Javier Setoain [Wed, 15 Jun 2022 13:27:25 +0000 (14:27 +0100)]
[mlir][vector] Add vector.scalable.insert/extract ops

These new operations match the semantics of
llvm.experimental.vector.insert and llvm.experimental.vector.extract.

`vector.scalable.insert` and `vector.scalable.extract` allow,
respectively, insert vectors into scalable vectors, and extract vectors
from scalable vectors.

The discussion about the inclusion of these operations is here:
https://discourse.llvm.org/t/rfc-interfacing-between-fixed-length-and-scalable-vectors-for-vls-vector-code-on-scalable-vector-architectures

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

20 months ago[mlir][llvm] Test LLVM IR constant import separately.
Tobias Gysi [Tue, 8 Nov 2022 08:23:48 +0000 (10:23 +0200)]
[mlir][llvm] Test LLVM IR constant import separately.

The revision moves tests related to LLVM IR constant import
into a separate constant.ll file and adds tests for integer,
null and undef immediates.

Depends on D136679

Reviewed By: ftynse

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

20 months ago[Statepoint] Use default attributes for some GC intrinsics
Nikita Popov [Fri, 28 Oct 2022 09:21:30 +0000 (11:21 +0200)]
[Statepoint] Use default attributes for some GC intrinsics

This adds the default intrinsic attributes (nosync, nofree, nocallback,
willreturn) to the gc.result, gc.relocate, gc.pointer.base and
gc.pointer.offset intrinsics. As far as I understand, all of these
are supposed to be pure. Some quotes from LangRef:

> A gc.result is modeled as a ‘readnone’ pure function. It has no
> side effects since it is just a projection of the return value of
> the previous call represented by the gc.statepoint.

> A gc.relocate is modeled as a readnone pure function. It has no
> side effects since it is just a way to extract information about
> work done during the actual call modeled by the gc.statepoint.

Having willreturn in particular will be important to avoid
optimization regressions in the future.

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

20 months ago[X86] Use default attributes for even more intrinsics
Nikita Popov [Mon, 7 Nov 2022 15:08:15 +0000 (16:08 +0100)]
[X86] Use default attributes for even more intrinsics

Another followup to D136939: This switches readonly X86 intrinsics
to use default attributes (nosync, nofree, nocallback and willreturn).

With this, all readnone/readonly intrinsics should be covered,
only memory writing intrinsics are left.

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

20 months ago[mlir][llvm] Update insertion point handling in LLVM import.
Tobias Gysi [Tue, 8 Nov 2022 07:46:39 +0000 (09:46 +0200)]
[mlir][llvm] Update insertion point handling in LLVM import.

Insert constants and globals in order by maintaining the position
of the constant and global inserted last. Update the tests
to reflect the updated insertion order. Also make sure functions
are always inserted at the end of the module instead of at
the second last position and delete a spurious function in
the intrinsic.ll that seems to exist to avoid the first
function under test ends up at the end of the module.

Reviewed By: ftynse

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

20 months ago[AMDGPU][GlobalISel] Support mad/fma_mix selection
Pierre van Houtryve [Wed, 28 Sep 2022 07:47:35 +0000 (07:47 +0000)]
[AMDGPU][GlobalISel] Support mad/fma_mix selection

Adds support for selecting the following instructions using GlobalISel:
- v_mad_mix/v_fma_mix
- v_mad_mixhi/v_fma_mixhi
- v_mad_mixlo/v_fma_mixlo

To select those instructions properly, some additional changes were
needed which impacted other tests as well.

Reviewed By: arsenm

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

20 months ago[NFC] [C++20] [Modules] Rename ASTWriter::isWritingStdCXXNamedModules
Chuanqi Xu [Tue, 8 Nov 2022 07:53:08 +0000 (15:53 +0800)]
[NFC] [C++20] [Modules] Rename ASTWriter::isWritingStdCXXNamedModules

According to the discussion in
https://discourse.llvm.org/t/rfc-unifying-the-terminology-about-modules-in-clang/66054,
this patch rename ASTWriter::isWritingNamedModules to ASTWriter::isWrittingStdCXXNamedModules
to make the name more clear.

20 months ago[AMDGPU] Add & use `hasNamedOperand`, NFC
Pierre van Houtryve [Mon, 7 Nov 2022 11:54:18 +0000 (11:54 +0000)]
[AMDGPU] Add & use `hasNamedOperand`, NFC

In a lot of places, we were just calling `getNamedOperandIdx` to check if the result was != or == to -1.
This is fine in itself, but it's verbose and doesn't make the intention clear, IMHO. I added a `hasNamedOperand` and replaced all cases I could find with regexes and manually.

Reviewed By: arsenm, foad

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

20 months ago[SIFoldOperands] Small code cleanups, NFC.
Pierre van Houtryve [Mon, 7 Nov 2022 11:32:44 +0000 (11:32 +0000)]
[SIFoldOperands] Small code cleanups, NFC.

I've been trying to understand the backend better and decided to read the code of this pass.
While doing so, I noticed parts that could be refactored to be a tiny bit clearer.
I tried to keep the changes minimal, a non-exhaustive list of changes is:
- Stylistic changes to better fit LLVM's coding style
- Removing dead/useless functions (e.g. FoldCandidate had getters, but it's a public struct!)
 - Saving regs/opcodes in variables if they're going to be used multiple times in the same condition

Reviewed By: arsenm, foad

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

20 months ago[Driver] Add -fsample-profile-use-profi
haoyuintel [Tue, 8 Nov 2022 06:51:14 +0000 (14:51 +0800)]
[Driver] Add -fsample-profile-use-profi

This patch enable `-sample-profile-use-profi` in Clang frontend as user-facing
feature. By using this patch, we can use the cflag of `-fsample-profile-use-profi`
instead of `-mllvm -sample-profile-use-profi`.

Reviewed By: hans, MaskRay

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

20 months ago[SIFoldOperands] Move `isFoldableCopy` into a separate helper, NFC.
Pierre van Houtryve [Mon, 7 Nov 2022 11:33:43 +0000 (11:33 +0000)]
[SIFoldOperands] Move `isFoldableCopy` into a separate helper, NFC.

There was quite a bit of logic there that was just in the middle of core loop. I think it makes it easier to follow when it's split off in a separate helper like the others.

Reviewed By: arsenm

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

20 months ago[X86] Add In64BitMode predicates for LOCK_INC64m, LOCK_DEC64m
Haohai Wen [Tue, 8 Nov 2022 06:04:10 +0000 (14:04 +0800)]
[X86] Add In64BitMode predicates for LOCK_INC64m, LOCK_DEC64m

These two instructions are only encodable in 64bit mode.

Reviewed By: pengfei

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

20 months ago[SimpleLoopUnswitch] Skip trivial selects in guards conditions unswitch candidates
Dmitry Makogon [Wed, 2 Nov 2022 12:44:22 +0000 (19:44 +0700)]
[SimpleLoopUnswitch] Skip trivial selects in guards conditions unswitch candidates

We do this for conditional branches, but not for guards for some reason.

Fixes pr58666.

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

20 months ago[Docs] Add my Office Hours
Paulo Matos [Tue, 8 Nov 2022 05:59:48 +0000 (21:59 -0800)]
[Docs] Add my Office Hours

20 months agoInstCombine: Fold fdiv nnan x, 0 -> copysign(inf, x)
Matt Arsenault [Mon, 17 Oct 2022 05:49:30 +0000 (22:49 -0700)]
InstCombine: Fold fdiv nnan x, 0 -> copysign(inf, x)

https://alive2.llvm.org/ce/z/gLBFKB

20 months ago[PowerPC][NFC] remove the rop-protect attribute in LIT cases.
Chen Zheng [Tue, 8 Nov 2022 05:43:06 +0000 (05:43 +0000)]
[PowerPC][NFC] remove the rop-protect attribute in LIT cases.

This flag will cause LLC warning:

"'-rop-protection' is not a recognized feature for this target
(ignoring feature)"

Remove this unused feature first. We may also need to check why
llc emits this warning as we declare '-rop-protection' not
'+rop-protection'.

20 months agollvm-reduce: Try to turn calls into something else
Matt Arsenault [Sat, 22 Oct 2022 17:05:54 +0000 (10:05 -0700)]
llvm-reduce: Try to turn calls into something else

Try to turn calls that look like operators into known
intrinsics. Also try to turn calls that look like a load or
a store into a load or store.

20 months ago[SLP][NFC] Restructure areTwoInsertFromSameBuildVector
skc7 [Mon, 7 Nov 2022 16:36:12 +0000 (22:06 +0530)]
[SLP][NFC] Restructure areTwoInsertFromSameBuildVector

Reviewed By: ABataev

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

20 months ago[mlir][arith] Convert fastmath to LLVM dialect for some arith ops.
Slava Zakharin [Tue, 8 Nov 2022 03:38:36 +0000 (19:38 -0800)]
[mlir][arith] Convert fastmath to LLVM dialect for some arith ops.

This is a follow-up on D126305 and D136225.
We can now preserve fastmath for arith::MaxFOp,MinFOp,RemFOp during
ArithToLLVM conversion.

Reviewed By: rriddle

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

20 months ago[lldb] Fix issue with re.Pattern availability
Dave Lee [Mon, 7 Nov 2022 21:20:48 +0000 (13:20 -0800)]
[lldb] Fix issue with re.Pattern availability

`re.Pattern` is introduced in Python 3.7. To support Python 3.6, fallback to typechecking against `SRE_Pattern`.

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

20 months agoMIPS/compiler_rt: use synci to flush icache on r6
YunQiang Su [Tue, 8 Nov 2022 01:43:41 +0000 (17:43 -0800)]
MIPS/compiler_rt: use synci to flush icache on r6

syscall makes it failed to build on mips64 for mipsel:
```
compiler-rt/lib/builtins/clear_cache.c:97:3: error:
call to undeclared function 'syscall'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
  syscall(__NR_cacheflush, start, (end_int - start_int), BCACHE);
```

In this patch, we use `rdhwr` to get synci_step.
If synci_step is zero, it means that the hardware will maintain the coherence. We need to do nothing.
Then for r6+, `synci` is required to keep icache global.
So we can use `synci` to flush icache.
The ISA documents ask a `sync` and a `jr.hb` after `synci`.

For pre-r6, we can use cacheflush libc function, which is same on Linux and FreeBSD.

Reviewed By: MaskRay

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

20 months ago[CMake] Fix -Wstrict-prototypes
Sam James [Tue, 8 Nov 2022 01:36:43 +0000 (01:36 +0000)]
[CMake] Fix -Wstrict-prototypes

Fixes warnings (or errors, if someone injects -Werror in their build system,
which happens in fact with some folks vendoring LLVM too) with Clang 16:
```
+/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.4/work/llvm_build-abi_x86_64.amd64/CMakeFiles/CMakeTmp/src.c:3:9: warning: a function declaration without a prototype
is deprecated in all versions of C [-Wstrict-prototypes]
-/var/tmp/portage.notmp/portage/sys-devel/llvm-14.0.4/work/llvm_build-abi_x86_64.amd64/CMakeFiles/CMakeTmp/src.c:3:9: error: a function declaration without a prototype is
deprecated in all versions of C [-Werror,-Wstrict-prototypes]
 int main() {return 0;}
         ^
          void
```

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

20 months ago[flang] Add atomic_xor to list of intrinsics
Katherine Rasmussen [Tue, 1 Nov 2022 21:14:08 +0000 (14:14 -0700)]
[flang] Add atomic_xor to list of intrinsics

Add the atomic subroutine, atomic_xor, to the list of
intrinsic subroutines, add its last dummy argument to a check
for a coindexed-object, and update test.

Reviewed By: PeteSteinfeld

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

20 months ago[Debuginfod] DEBUGINFOD_HEADERS_FILE environment variable
Daniel Thornburgh [Tue, 18 Oct 2022 22:20:49 +0000 (15:20 -0700)]
[Debuginfod] DEBUGINFOD_HEADERS_FILE environment variable

This change adds a DEBUGINFOD_HEADERS_FILE environment variable provides
a file containing HTTP headers to attach to outgoing HTTP requests, one
per line. This allows a file permissioned with OS access control
mechanisms to supply bearer credentials for Debuginfod requests.

This matches the mechanism recently added to elfutils' libdebuginfod.

Reviewed By: MaskRay

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

20 months ago[mlir][spirv] Don't return value when cannot fold spirv.bitcast
Lei Zhang [Tue, 8 Nov 2022 00:11:46 +0000 (19:11 -0500)]
[mlir][spirv] Don't return value when cannot fold spirv.bitcast

Returing a value would make the canonicalization infrastructure
think that folding succeeded so the pattern will be tried again
when invoked via, e.g., `applyPatternsAndFoldGreedily` and
eventually fail due to not converging after 10 times by default.

Reviewed By: hanchung

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

20 months ago[gn build] Port 428ac8f3a0f9
LLVM GN Syncbot [Mon, 7 Nov 2022 23:22:09 +0000 (23:22 +0000)]
[gn build] Port 428ac8f3a0f9

20 months agoRevert "[NFC] Move getDebugValueLoc from static in Local.cpp to DebugInfo.h"
Shubham Sandeep Rastogi [Mon, 7 Nov 2022 23:18:20 +0000 (15:18 -0800)]
Revert "[NFC] Move getDebugValueLoc from static in Local.cpp to DebugInfo.h"

This reverts commit 80378a4ca725eeeae940b99220b3913f7b73c895.

    I am reverting this patch because I need to revert 171f7024cc82e8702abebdedb699d37b50574be7 and without reverting this patch, reverting 171f7024cc82e8702abebdedb699d37b50574be7 causes conflicts.

     Patch 171f7024cc82e8702abebdedb699d37b50574be7 introduced a cyclic dependancy in the module build.

        https://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/48197/consoleFull#-69937453049ba4694-19c4-4d7e-bec5-911270d8a58c

        In file included from <module-includes>:1:
        /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/IR/Argument.h:18:10: fatal error: cyclic dependency in module 'LLVM_IR': LLVM_IR -> LLVM_intrinsic_gen -> LLVM_IR
                 ^
        While building module 'LLVM_MC' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:
        While building module 'LLVM_IR' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCPseudoProbe.h:57:
        In file included from <module-includes>:12:
        /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/IR/DebugInfo.h:24:10: fatal error: could not build module 'LLVM_intrinsic_gen'
         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
        While building module 'LLVM_MC' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:
        In file included from <module-includes>:15:
        In file included from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCContext.h:23:
        /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCPseudoProbe.h:57:10: fatal error: could not build module 'LLVM_IR'
         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
        /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:10: fatal error: could not build module 'LLVM_MC'
         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
        4 errors generated.

20 months ago[mlir:SubElementInterfaces] Remove unnecessary static check
River Riddle [Mon, 7 Nov 2022 23:13:09 +0000 (15:13 -0800)]
[mlir:SubElementInterfaces] Remove unnecessary static check

We already constrain the template on just attributes/types.

20 months agoRevert "[Assignment Tracking][5/*] Add core infrastructure for instruction reference"
Shubham Sandeep Rastogi [Mon, 7 Nov 2022 23:04:16 +0000 (15:04 -0800)]
Revert "[Assignment Tracking][5/*] Add core infrastructure for instruction reference"

This reverts commit 171f7024cc82e8702abebdedb699d37b50574be7.

Reverting this patch because it causes a cyclic dependency in the module build

https://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/48197/consoleFull#-69937453049ba4694-19c4-4d7e-bec5-911270d8a58c

In file included from <module-includes>:1:
/Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/IR/Argument.h:18:10: fatal error: cyclic dependency in module 'LLVM_IR': LLVM_IR -> LLVM_intrinsic_gen -> LLVM_IR
         ^
While building module 'LLVM_MC' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:
While building module 'LLVM_IR' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCPseudoProbe.h:57:
In file included from <module-includes>:12:
/Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/IR/DebugInfo.h:24:10: fatal error: could not build module 'LLVM_intrinsic_gen'
 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
While building module 'LLVM_MC' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:
In file included from <module-includes>:15:
In file included from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCContext.h:23:
/Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCPseudoProbe.h:57:10: fatal error: could not build module 'LLVM_IR'
 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
/Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:10: fatal error: could not build module 'LLVM_MC'
 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
4 errors generated.

20 months agoRevert "Fix warning: comparison of integers of different signs"
Shubham Sandeep Rastogi [Mon, 7 Nov 2022 22:59:03 +0000 (14:59 -0800)]
Revert "Fix warning: comparison of integers of different signs"

This reverts commit 028df7fab11bd8c26d8f5689e049186eb8b39092.

I am reverting this patch because I need to revert 171f7024cc82e8702abebdedb699d37b50574be7 and without reverting this patch, reverting 171f7024cc82e8702abebdedb699d37b50574be7 causes conflicts.

 Patch 171f7024cc82e8702abebdedb699d37b50574be7 introduced a cyclic dependancy in the module build.

    https://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/48197/consoleFull#-69937453049ba4694-19c4-4d7e-bec5-911270d8a58c

    In file included from <module-includes>:1:
    /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/IR/Argument.h:18:10: fatal error: cyclic dependency in module 'LLVM_IR': LLVM_IR -> LLVM_intrinsic_gen -> LLVM_IR
             ^
    While building module 'LLVM_MC' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:
    While building module 'LLVM_IR' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCPseudoProbe.h:57:
    In file included from <module-includes>:12:
    /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/IR/DebugInfo.h:24:10: fatal error: could not build module 'LLVM_intrinsic_gen'
     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
    While building module 'LLVM_MC' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:
    In file included from <module-includes>:15:
    In file included from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCContext.h:23:
    /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCPseudoProbe.h:57:10: fatal error: could not build module 'LLVM_IR'
     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
    /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:10: fatal error: could not build module 'LLVM_MC'
     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
    4 errors generated.

20 months agoRevert "[Assignment Tracking][5.1/*] Add deleteAssignmentMarkers function"
Shubham Sandeep Rastogi [Mon, 7 Nov 2022 22:57:43 +0000 (14:57 -0800)]
Revert "[Assignment Tracking][5.1/*] Add deleteAssignmentMarkers function"

This reverts commit 4c44fa1c3829c2d0c6ce10b576dafbc2e0631d47.

This patch has to be reverted because I need to revert 171f7024cc82e8702abebdedb699d37b50574be7 and without reverting this patch, reverting 171f7024cc82e8702abebdedb699d37b50574be7 causes conflicts.

Patch 171f7024cc82e8702abebdedb699d37b50574be7 introduced a cyclic dependency in the module build.

https://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/48197/consoleFull#-69937453049ba4694-19c4-4d7e-bec5-911270d8a58c

In file included from <module-includes>:1:
/Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/IR/Argument.h:18:10: fatal error: cyclic dependency in module 'LLVM_IR': LLVM_IR -> LLVM_intrinsic_gen -> LLVM_IR
         ^
While building module 'LLVM_MC' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:
While building module 'LLVM_IR' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCPseudoProbe.h:57:
In file included from <module-includes>:12:
/Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/IR/DebugInfo.h:24:10: fatal error: could not build module 'LLVM_intrinsic_gen'
 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
While building module 'LLVM_MC' imported from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:
In file included from <module-includes>:15:
In file included from /Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCContext.h:23:
/Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/include/llvm/MC/MCPseudoProbe.h:57:10: fatal error: could not build module 'LLVM_IR'
 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
/Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/llvm/lib/MC/MCAsmInfoCOFF.cpp:14:10: fatal error: could not build module 'LLVM_MC'
 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
4 errors generated.

20 months ago[Clang][Sema] Add -Wincompatible-function-pointer-types-strict
Sami Tolvanen [Mon, 7 Nov 2022 22:55:24 +0000 (22:55 +0000)]
[Clang][Sema] Add -Wincompatible-function-pointer-types-strict

Clang supports indirect call Control-Flow Integrity (CFI) sanitizers
(e.g. -fsanitize=cfi-icall), which enforce an exact type match
between a function pointer and the target function. Unfortunately,
Clang doesn't provide diagnostics that help developers avoid
function pointer assignments that can lead to runtime CFI
failures. -Wincompatible-function-pointer-types doesn't warn about
enum to integer mismatches if the types are otherwise compatible, for
example, which isn't sufficient with CFI.

Add -Wincompatible-function-pointer-types-strict, which checks for a
stricter function type compatibility in assignments and helps warn about
assignments that can potentially lead to CFI failures.

Reviewed By: aaron.ballman, nickdesaulniers

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

20 months ago[Clang][AArch64][Darwin] Enable GlobalISel by default for Darwin ARM64 platforms.
Amara Emerson [Wed, 2 Nov 2022 16:25:59 +0000 (09:25 -0700)]
[Clang][AArch64][Darwin] Enable GlobalISel by default for Darwin ARM64 platforms.

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

20 months ago[clangd] Rename QueryDriverDatabase.cpp to SystemIncludeExtractor.cpp
Nathan Ridge [Fri, 4 Nov 2022 08:39:46 +0000 (04:39 -0400)]
[clangd] Rename QueryDriverDatabase.cpp to SystemIncludeExtractor.cpp

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

20 months ago[clangd] Perform system include extraction inside CommandMangler
Nathan Ridge [Mon, 12 Sep 2022 08:29:29 +0000 (04:29 -0400)]
[clangd] Perform system include extraction inside CommandMangler

It needs to run after edits from config files are applied to
the compile command (because the config file may specify the
compiler), and before resolveDriver() runs at the end of
CommandMangler.

As part of this change, QueryDriverDatabase is renamed to
SystemIncludeExtractor and is no longer a GlobalCompilationDatabase.

Fixes https://github.com/clangd/clangd/issues/1089
Fixes https://github.com/clangd/clangd/issues/1173
Fixes https://github.com/clangd/clangd/issues/1263

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

20 months ago[clangd] Pass the entire tooling::CompileCommand to CommandMangler
Nathan Ridge [Sun, 25 Sep 2022 08:07:58 +0000 (01:07 -0700)]
[clangd] Pass the entire tooling::CompileCommand to CommandMangler

This gives CommandMangler access to other fields of
tooling::CompileCommand as well, e.g. Directory.

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

20 months ago[lld-macho] Ensure that chained fixups data comes first in __LINKEDIT
Daniel Bertalan [Sat, 5 Nov 2022 15:29:11 +0000 (16:29 +0100)]
[lld-macho] Ensure that chained fixups data comes first in __LINKEDIT

libstuff-based tools (e.g. `codesign` and `strip`) require
`__chainfixups` to be the first section in `__LINKEDIT`, and print a
"file not in an order that can be processed" error message if that is
not the case.

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

20 months ago[libomp] Add -Wl,--undefined-version workaround
Fangrui Song [Mon, 7 Nov 2022 22:15:28 +0000 (22:15 +0000)]
[libomp] Add -Wl,--undefined-version workaround

Issue #58858: when linking libomp.so, exports_so.txt has non-existent/undefined
symbols which cause errors to ld --no-undefined-version. Use
-Wl,--undefined-version if available (gold, ld.lld, future GNU ld 2.40).

20 months ago[LLD] Enable --no-undefined-version by default.
Dan Albert [Thu, 6 Oct 2022 22:22:55 +0000 (15:22 -0700)]
[LLD] Enable --no-undefined-version by default.

Allowing incorrect version scripts is not a helpful default. Flip that
to help users find their bugs at build time rather than at run time.

Reviewed By: MaskRay

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

20 months ago[libc][obvious] fix tests using wrong size for string
Michael Jones [Mon, 7 Nov 2022 22:02:32 +0000 (14:02 -0800)]
[libc][obvious] fix tests using wrong size for string

In the code
const char *str = "abc"
if you do sizeof(str) you get the size of the pointer, not the string.
This patch fixes that mistake.

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

20 months ago[HLSL] Added HLSL this as a reference
Grace Jennings [Mon, 7 Nov 2022 21:16:54 +0000 (13:16 -0800)]
[HLSL] Added HLSL this as a reference

This change makes `this` a reference instead of a pointer in
HLSL. HLSL does not have the `->` operator, and accesses through `this`
are with the `.` syntax.

Tests were added and altered to make sure
the AST accurately reflects the types.

Reviewed By: aaron.ballman

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

20 months ago[libc] add scanf string converters
Michael Jones [Thu, 3 Nov 2022 21:22:34 +0000 (14:22 -0700)]
[libc] add scanf string converters

This patch adds the basic conversion facilities to scanf as well as unit
tests for them. It also adds scanf_main which will be used for the
eventual scanf entrypoints.

Reviewed By: sivachandra

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

20 months ago[libc] add scanf reader
Michael Jones [Wed, 19 Oct 2022 20:33:05 +0000 (13:33 -0700)]
[libc] add scanf reader

This is the interface that will be used to read from a file or string in
scanf. This patch also adds the string and file implementations of the
reader, although the file reader is not yet complete since ungetc has
not yet been implemented.

Reviewed By: sivachandra

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

20 months ago[libc] Add implementation of getc, getc_unlocked and fgetc_unlocked.
Siva Chandra Reddy [Sun, 6 Nov 2022 06:25:15 +0000 (06:25 +0000)]
[libc] Add implementation of getc, getc_unlocked and fgetc_unlocked.

Reviewed By: michaelrj

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

20 months ago[mlir][sparse] extend foreach operation to accept reduction arguments; fix sparse...
Peiming Liu [Fri, 4 Nov 2022 17:52:21 +0000 (17:52 +0000)]
[mlir][sparse] extend foreach operation to accept reduction arguments; fix sparse tensor rewriting patterns that do not propagate sparse tensor SSA properly.

This patch re-commit D137468 and D137463, which were reverted by mistakes.

Reviewed By: aartbik

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

20 months ago[libc] Add implementations of ftell.
Siva Chandra Reddy [Fri, 4 Nov 2022 05:42:49 +0000 (05:42 +0000)]
[libc] Add implementations of ftell.

Reviewed By: michaelrj, lntue

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

20 months agoFix MLIR doc build
Mehdi Amini [Mon, 7 Nov 2022 21:26:21 +0000 (21:26 +0000)]
Fix MLIR doc build

20 months agoApply clang-tidy fixes for performance-unnecessary-value-param in LinalgOps.cpp ...
Mehdi Amini [Thu, 3 Nov 2022 20:12:14 +0000 (20:12 +0000)]
Apply clang-tidy fixes for performance-unnecessary-value-param in LinalgOps.cpp (NFC)

20 months agoApply clang-tidy fixes for performance-move-const-arg in IndexOps.cpp (NFC)
Mehdi Amini [Thu, 3 Nov 2022 20:10:11 +0000 (20:10 +0000)]
Apply clang-tidy fixes for performance-move-const-arg in IndexOps.cpp (NFC)

20 months ago[NFC] clang-format part of TypePrinter.cpp
Arthur Eubanks [Mon, 7 Nov 2022 21:20:09 +0000 (13:20 -0800)]
[NFC] clang-format part of TypePrinter.cpp

Fixes weird clang-format indentation with an upcoming patch.

20 months agoExplicitly initialize opaque pointer mode in CodeGenAction
Matthias Braun [Fri, 4 Nov 2022 23:19:18 +0000 (16:19 -0700)]
Explicitly initialize opaque pointer mode in CodeGenAction

Explicitly call `LLVMContext::setOpaquePointers` in `CodeGenAction`
before loading any IR files. With this we use the mode specified on the
command-line rather than lazily initializing it based on the contents of
the IR.

This helps when using `-fthinlto-index` which may end up mixing files
with typed and opaque pointer types which fails when the first file
happened to use typed pointers since we cannot downgrade IR with opaque
pointer types to typed pointer types.

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

20 months ago[bazel][mlir] NVGPUToNVVM fixes for 708185f03ff
Emilio Cota [Mon, 7 Nov 2022 19:21:06 +0000 (14:21 -0500)]
[bazel][mlir] NVGPUToNVVM fixes for 708185f03ff

20 months ago[NFC] Comment in MLInlineAdvisor as to why use std::map for FPICache
Mircea Trofin [Mon, 7 Nov 2022 19:10:58 +0000 (11:10 -0800)]
[NFC] Comment in MLInlineAdvisor as to why use  std::map for FPICache

20 months ago[libc][obvious] fix printf failing to stop on %\0
Michael Jones [Thu, 3 Nov 2022 22:21:30 +0000 (15:21 -0700)]
[libc][obvious] fix printf failing to stop on %\0

Previously, the printf parser would treat "%\0" as a conversion with the
name "\0", and advance past the null byte causing a buffer overflow.
This patch corrects that in both printf and scanf.

Reviewed By: sivachandra

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

20 months agoAMDGPU: Fix DivergenceAnalysis for llvm.read_register
Matt Arsenault [Mon, 31 Oct 2022 23:49:43 +0000 (16:49 -0700)]
AMDGPU: Fix DivergenceAnalysis for llvm.read_register

This was treating all calls as uniform by default, which
is wrong if used to read a VGPR.

20 months ago[NFC][lldb] Remove unnecessary branch in TypeSystemClang::DumpTypeDescription()
Arthur Eubanks [Fri, 4 Nov 2022 21:02:11 +0000 (14:02 -0700)]
[NFC][lldb] Remove unnecessary branch in TypeSystemClang::DumpTypeDescription()

Reviewed By: Michael137

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

20 months ago[clang][NFC] Use c++17 style variable type traits
Nathan James [Mon, 7 Nov 2022 18:25:46 +0000 (18:25 +0000)]
[clang][NFC] Use c++17 style variable type traits

This was done as a test for D137302 and it makes sense to push these changes

Reviewed By: shafik

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

20 months ago[LTO] Make local linkage GlobalValue in non-prevailing COMDAT available_externally
Fangrui Song [Mon, 7 Nov 2022 18:07:10 +0000 (10:07 -0800)]
[LTO] Make local linkage GlobalValue in non-prevailing COMDAT available_externally

For a local linkage GlobalObject in a non-prevailing COMDAT, it remains defined while its
leader has been made available_externally. This violates the COMDAT rule that
its members must be retained or discarded as a unit.

To fix this, update the regular LTO change D34803 to track local linkage
GlobalValues, and port the code to ThinLTO (GlobalAliases are not handled.)

This fixes two problems.

(a) `__cxx_global_var_init` in a non-prevailing COMDAT group used to
linger around (unreferenced, hence benign), and is now correctly discarded.
```
int foo();
inline int v = foo();
```

(b) Fix https://github.com/llvm/llvm-project/issues/58215:
as a size optimization, we place private `__profd_` in a COMDAT with a
`__profc_` key. When FuncImport.cpp makes `__profc_` available_externally due to
a non-prevailing COMDAT, `__profd_` incorrectly remains private. This change
makes the `__profd_` available_externally.

```
cat > c.h <<'eof'
extern void bar();
inline __attribute__((noinline)) void foo() {}
eof
cat > m1.cc <<'eof'
#include "c.h"
int main() {
  bar();
  foo();
}
eof
cat > m2.cc <<'eof'
#include "c.h"
__attribute__((noinline)) void bar() {
  foo();
}
eof

clang -O2 -fprofile-generate=./t m1.cc m2.cc -flto -fuse-ld=lld -o t_gen
rm -fr t && ./t_gen && llvm-profdata show -function=foo t/default_*.profraw

clang -O2 -fprofile-generate=./t m1.cc m2.cc -flto=thin -fuse-ld=lld -o t_gen
rm -fr t && ./t_gen && llvm-profdata show -function=foo t/default_*.profraw
```

If a GlobalAlias references a GlobalValue which is just changed to
available_externally, change the GlobalAlias as well (e.g. C5/D5 comdats due to
cc1 -mconstructor-aliases). The GlobalAlias may be referenced by other
available_externally functions, so it cannot easily be removed.

Depends on D137441: we use available_externally to mark a GlobalAlias in a
non-prevailing COMDAT, similar to how we handle GlobalVariable/Function.
GlobalAlias may refer to a ConstantExpr, not changing GlobalAlias to
GlobalVariable gives flexibility for future extensions (the use case is niche.
For simplicity we don't handle it yet). In addition, available_externally
GlobalAlias is the most straightforward implementation and retains the aliasee
information to help optimizers.

Reviewed By: tejohnson

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