platform/upstream/llvm.git
21 months ago[OpenMP][AMDGPU] Enable OpenMP device runtime build for gfx110[0123]
Dan Palermo [Fri, 23 Sep 2022 01:49:51 +0000 (01:49 +0000)]
[OpenMP][AMDGPU] Enable OpenMP device runtime build for gfx110[0123]

Add OpenMP device runtime build support for the gfx1100, gfx1101,
gfx1102, and gfx1103 targets.

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

21 months ago[DAG] Move one-use add of splat to base of scatter/gather
Philip Reames [Fri, 23 Sep 2022 01:35:00 +0000 (18:35 -0700)]
[DAG] Move one-use add of splat to base of scatter/gather

This extends the uniform base transform used with scatter/gather to support one-use vector adds-of-splats with a non-zero base. This has the effect of essentially reassociating an add from vector to scalar domain.

The motivation is to improve the lowering of scatter/gather operations fed by complex geps.

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

21 months ago[OpenMP][IRBuilder] Added if clause to task
Shraiysh Vaishay [Fri, 23 Sep 2022 01:24:01 +0000 (01:24 +0000)]
[OpenMP][IRBuilder] Added if clause to task

This patch adds support for if clause to task construct in OpenMP
IRBuilder.

Reviewed By: raghavendhra

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

21 months ago[LoongArch] Add codegen support for atomicrmw add/sub/nand/and/or/xor operation
gonglingqin [Fri, 23 Sep 2022 01:16:32 +0000 (09:16 +0800)]
[LoongArch] Add codegen support for atomicrmw add/sub/nand/and/or/xor operation

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

21 months ago[bazel] Remove "nobuildkite" flag for targets depending on libxml2
Arthur Eubanks [Fri, 23 Sep 2022 01:30:44 +0000 (18:30 -0700)]
[bazel] Remove "nobuildkite" flag for targets depending on libxml2

The buildbots do have libxml2 installed.

21 months ago[flang][NFC] Document ambiguous case of DATA in BLOCK
Peter Klausler [Wed, 21 Sep 2022 18:57:12 +0000 (11:57 -0700)]
[flang][NFC] Document ambiguous case of DATA in BLOCK

Fortran is not clear about the semantics of

```
  subroutine subr
    integer n = 1
    block
      data n/2/
    end block
  end subroutine
```

which could be interpreted as having two variables, each
named 'n', or as having one variable 'n' with invalid double
initialization.  Precedents from existing compilers are also
in disagreement.

The most common interpretation, however, agrees with a subtle
reading of the standard: BLOCK constructs scope names that have
local specifications, and a DATA statement is a declaration
construct, not a specification construct.  So this example is
*not* acceptable.

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

21 months ago[FPEnv] Remove inaccurate comments regarding signaling NaN for isless
eopXD [Thu, 22 Sep 2022 02:21:55 +0000 (19:21 -0700)]
[FPEnv] Remove inaccurate comments regarding signaling NaN for isless

By draft of C23 (https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2912.pdf),
the description for isless macro under 7.12.17.3 says,

The isless macro determines whether its first argument is less than its second
argument. The value of isless(x,y) is always equal to (x)< (y); however, unlike
(x) < (y), isless(x,y) does not raise the invalid floating-point exception when
x and y are unordered and neither is a signaling NaN.

isless should trap when encountering signaling NaN.

Reviewed By: jcranmer-intel, efriedma

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

21 months ago[mlir][sparse] temporarily disable push back for asan
Aart Bik [Fri, 23 Sep 2022 00:48:29 +0000 (17:48 -0700)]
[mlir][sparse] temporarily disable push back for asan

Reviewed By: Peiming

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

21 months ago[bazel] Remove Mips from Exegesis cc_library definition
Caroline Tice [Fri, 23 Sep 2022 00:39:22 +0000 (17:39 -0700)]
[bazel] Remove Mips from Exegesis cc_library definition

Recent update added 'tools/llvm-exegesis/lib/Mips/*.cpp' to srcs for Exegesis cc_library. This was not needed, and in fact breaks things. This CL removes that one change.

Reviewed By: aeubanks

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

21 months ago[NFC][MLGO] Introduce logRewardIfNeeded method
Eric Wang [Mon, 19 Sep 2022 22:29:26 +0000 (17:29 -0500)]
[NFC][MLGO] Introduce logRewardIfNeeded method

This patch introduces a logRewardIfNeeded method to reuse regallocscoring.

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

21 months ago[mlir][sparse] Introducing a new sparse_tensor.foreach operator.
Peiming Liu [Thu, 22 Sep 2022 21:53:48 +0000 (21:53 +0000)]
[mlir][sparse] Introducing a new sparse_tensor.foreach operator.

Reviewed By: aartbik

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

21 months ago[lit] follow-up 2380c1b609631, check stdout and stderr separately
Yuanfang Chen [Thu, 22 Sep 2022 23:42:47 +0000 (16:42 -0700)]
[lit] follow-up 2380c1b609631, check stdout and stderr separately

The error output is cached so it could be out of order with stdout in
some bots.

21 months ago[lit][unit] avoid adding gtest binary more than once
Yuanfang Chen [Thu, 22 Sep 2022 21:17:06 +0000 (14:17 -0700)]
[lit][unit] avoid adding gtest binary more than once

Due to CMake mis-configurations, some gtest binaries may be added to the test
list more than once. This patch makes lit avoid such cases and issues a
warning when it happens.

21 months ago[RISCV] Precommit test for scalable strided load/store lowering
Philip Reames [Thu, 22 Sep 2022 23:10:31 +0000 (16:10 -0700)]
[RISCV] Precommit test for scalable strided load/store lowering

21 months agoAdd clang flag equivalent to clang-cl /Zl flag
Amy Huang [Thu, 15 Sep 2022 17:58:06 +0000 (17:58 +0000)]
Add clang flag equivalent to clang-cl /Zl flag

The /Zl flag omits default C runtime library name from obj files.
This patch just adds an equivalent clang driver flag.

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

21 months agoRevert "[MemProf] Memprof profile matching and annotation"
Teresa Johnson [Thu, 22 Sep 2022 22:11:01 +0000 (15:11 -0700)]
Revert "[MemProf] Memprof profile matching and annotation"

This reverts commit a212d8da94d08e229aa8d65283e4b116310bba10, and follow
on fixes 0cd6763fa93159b84d70a5bb602c24996acaafaa,
e9ff53d42feac7fc157718523275619a8106f2f3, and
37c6a25e9ab230e5e21fa34e246d9fec55275df0.

After re-reading the documentation for hash_combine, I don't think this
is the appropriate hash function to use for computing the hash to use as
a stack id in the metadata, since it is not guaranteed to produce stable
values across executions. I have not hit this problem, but plan to
switch to using an MD5 hash. I am hitting an issue with one of the bots
(https://lab.llvm.org/buildbot/#/builders/171/builds/20732)
where the values produced are only the lower 32 bits of the expected
hash values, however, which I assume is related to the implementation of
hash_combine and hash_code.

I believe I fixed all of the other bot failures with the follow on fixes,
which I'll merge into the new version before reapplying.

21 months ago[llvm] Assert two ValIDs are the same kind before comparing
Leonard Chan [Thu, 22 Sep 2022 22:37:12 +0000 (22:37 +0000)]
[llvm] Assert two ValIDs are the same kind before comparing

I suspect the reason for why D134234 was failing sometimes is because
"operator<" for a ValID could compare ValIDs of different kinds but have
the same non-active values and return an incorrect result. This is an
issue if I attempt to store ValIDs of different kinds in an std::map but
we compare different "active" values. For example, if I create an
std::map and store some ValIDs of kind t_GlobalName, then I insert a
ValID of kind t_GlobalID, the current "operator<" will see that one of
the operands is a t_GlobalID and compare it against the UIntVal of other
items in the map, but the other items in the map don't set UIntVal
because they're not t_GlobalIDs, so I compare against a
dummy/uninitialized value.

It seems pretty easy to add mixed ValID kinds into an std::map in
LLParser, so this just asserts that when doing the comparison that both
ValIDs are the same kind.

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

21 months ago[Pipelines] Introduce DAE after ArgumentPromotion
Pavel Samolysov [Fri, 26 Aug 2022 12:06:21 +0000 (15:06 +0300)]
[Pipelines] Introduce DAE after ArgumentPromotion

The ArgumentPromotion pass uses Mem2Reg promotion at the end to cutting
down generated `alloca` instructions as well as meaningless `store`s and
this behavior can leave unused (dead) arguments. To eliminate the dead
arguments and therefore let the DeadCodeElimination remove becoming dead
inserted `GEP`s as well as `load`s and `cast`s in the callers, the
DeadArgumentElimination pass should be run after the ArgumentPromotion
one.

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

21 months ago[RISCV] Disallow scale for scatter/gather
Philip Reames [Thu, 22 Sep 2022 22:21:05 +0000 (15:21 -0700)]
[RISCV] Disallow scale for scatter/gather

RISCV doesn't actually support a scaled form of indexed load and store. We previously handled this by forming the scaled SDNode, and then doing custom legalization during lowering. This patch instead adds a callback via TLI to prevent formation entirely.

This has two effects:
* First, the GEP gets expanded (and used). Instead of the shift being created with an SDLoc of the memory operation, it has the SDLoc of the GEP instruction. This avoids the scheduler perturbing IR order when there's no reason to.
* Second, we fix what appears to be a bug in index calculation with RV32. The rules for GEPs require index calculation be done in particular bitwidth, and it appears the custom legalization code got this wrong for the case where index type exceeds pointer width. (Or at least, I trust the generic GEP lowering to be correct a lot more.)

The DAGCombiner change to handle VPScatter/VPGather is technically separate, but is required to prevent a regression on those intrinsics.

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

21 months ago[HLSL] clang codeGen for HLSLNumThreadsAttr
Xiang Li [Fri, 12 Aug 2022 18:50:22 +0000 (11:50 -0700)]
[HLSL] clang codeGen for HLSLNumThreadsAttr

Translate HLSLNumThreadsAttr into function attribute with name "dx.numthreads" and value format as "x,y,z".

Reviewed By: beanz

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

21 months ago[mlir][sparse] Mark sparse_tensor.concatenate as NoSideEffect
Peiming Liu [Thu, 22 Sep 2022 22:03:34 +0000 (22:03 +0000)]
[mlir][sparse] Mark sparse_tensor.concatenate as NoSideEffect

Reviewed By: aartbik

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

21 months ago[mlir][Linalg] Expose the implementation of the tiling to scf.foreach_thread.
Mahesh Ravishankar [Thu, 22 Sep 2022 22:19:00 +0000 (22:19 +0000)]
[mlir][Linalg] Expose the implementation of the tiling to scf.foreach_thread.

This allows downstream uses to use the implementation of the tiling
itself, while performing other transformations that are necessary to
go with it.

Reviewed By: nicolasvasilache

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

21 months ago[RISCV] Add codegen test coverage for strided load/store intrinsics
Philip Reames [Thu, 22 Sep 2022 21:57:52 +0000 (14:57 -0700)]
[RISCV] Add codegen test coverage for strided load/store intrinsics

21 months ago[LazyCallGraph] Handle spurious ref edges when deleting a dead function
Arthur Eubanks [Wed, 14 Sep 2022 23:01:28 +0000 (16:01 -0700)]
[LazyCallGraph] Handle spurious ref edges when deleting a dead function

Spurious ref edges are ref edges that still exist in the call graph even
though the corresponding IR reference no longer exists. This can cause
issues when deleting a dead function which has a spurious ref edge
pointed at it because currently we expect the dead function's RefSCC to
be trivial.

In the case that the dead function's RefSCC is not trivial, remove all
ref edges from other nodes in the RefSCC to it.

Removing a ref edge can result in splitting RefSCCs. There's actually no
reason to revisit those RefSCCs because currently we only run passes on
SCCs, and we've already added all SCCs in the RefSCC to the worklist.
(as opposed to removing the ref edge in
updateCGAndAnalysisManagerForPass() which can modify the call graph of
SCCs we have not visited yet). We also don't expect that RefSCC
refinement will allow us to glean any more information for optimization
use. Also, doing so would drastically increase the complexity of
LazyCallGraph::removeDeadFunction(), requiring us to return a list of
invalidated RefSCCs and new RefSCCs to add to the worklist.

Fixes #56503

Reviewed By: asbirlea

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

21 months ago[bazel] Port 47afaf2eb02b1424a9aba241ccd02393a0cbc648 to bazel
Jordan Rupprecht [Thu, 22 Sep 2022 22:00:15 +0000 (15:00 -0700)]
[bazel] Port 47afaf2eb02b1424a9aba241ccd02393a0cbc648 to bazel

21 months ago[OpenMP][NFC] Fix wavesize build warning in OMPGridValues
Dan Palermo [Thu, 22 Sep 2022 21:51:19 +0000 (21:51 +0000)]
[OpenMP][NFC] Fix wavesize build warning in OMPGridValues

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

21 months agoAdd auto source map deduce count statistics
Jeffrey Tan [Thu, 22 Sep 2022 21:32:35 +0000 (14:32 -0700)]
Add auto source map deduce count statistics

This patch adds auto source map deduce count as a target level statistics.
This will help telemetry to track how many debug sessions benefit from this feature.

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

21 months agoReland "[mlir][tensor] Support more cases in MergeConsecutiveExtractSlice"
Lei Zhang [Thu, 22 Sep 2022 19:07:43 +0000 (15:07 -0400)]
Reland "[mlir][tensor] Support more cases in MergeConsecutiveExtractSlice"

This relands commit 5d4603a02d0c3e0106b10d245322b1d2072c0c3d.
It cludes fixes to GCC test failures and simplification to
the implementation.

Co-authored-by: Mahesh Ravishankar <ravishankarm@google.com>
Co-authored-by: Christopher Bate <cbate@nvidia.com>
21 months ago[SelectionDAGBuilder] Simplify how VTs is created for constrained intrinsics. NFC
Craig Topper [Thu, 22 Sep 2022 20:45:15 +0000 (13:45 -0700)]
[SelectionDAGBuilder] Simplify how VTs is created for constrained intrinsics. NFC

All constrained intrinsics return a single value. We can directly
convert it to an EVT instead of going through ComputeValueTypes.

21 months agoAdd Load merge tests to AggressiveInstCombine
bipmis [Thu, 22 Sep 2022 20:50:48 +0000 (21:50 +0100)]
Add Load merge tests to AggressiveInstCombine

21 months ago[AMDGPU] Emit module flag for all code object versions
Yaxun (Sam) Liu [Wed, 21 Sep 2022 04:32:57 +0000 (00:32 -0400)]
[AMDGPU] Emit module flag for all code object versions

Reviewed by: Changpeng Fang, Matt Arsenault, Brian Sumner

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

21 months ago[MemProf] Fix buildbot error due to hasValue deprecation warning
Teresa Johnson [Thu, 22 Sep 2022 20:26:53 +0000 (13:26 -0700)]
[MemProf] Fix buildbot error due to hasValue deprecation warning

Use has_value instead of hasValue to address a deprecation warning from
a212d8da94d08e229aa8d65283e4b116310bba10. E.g.:

https://lab.llvm.org/buildbot/#/builders/57/builds/22166/steps/5/logs/stdio

21 months ago[MemProf] Fix buildbot error due to unused variable from bad merge
Teresa Johnson [Thu, 22 Sep 2022 20:18:03 +0000 (13:18 -0700)]
[MemProf] Fix buildbot error due to unused variable from bad merge

Fix an unused variable warning introduced by a212d8da94d08e229aa8d65283e4b116310bba10
due to a bad merge with a recent change. E.g. in
https://lab.llvm.org/buildbot/#/builders/77/builds/22095

21 months ago[ELF] --compress-debug-sections=zstd: ignore error if zstd was not built with ZSTD_MU...
Fangrui Song [Thu, 22 Sep 2022 20:16:50 +0000 (13:16 -0700)]
[ELF] --compress-debug-sections=zstd: ignore error if zstd was not built with ZSTD_MULTITHREAD

21 months ago[NFC] Remove trailing whitespace in CMake file
Louis Dionne [Thu, 22 Sep 2022 20:15:33 +0000 (16:15 -0400)]
[NFC] Remove trailing whitespace in CMake file

21 months ago[MemProf] Fix buildbot errors by requiring zlib
Teresa Johnson [Thu, 22 Sep 2022 20:10:12 +0000 (13:10 -0700)]
[MemProf] Fix buildbot errors by requiring zlib

This should fix errors like the following from using the raw
memprof_pgo.profraw profile in a212d8da94d08e229aa8d65283e4b116310bba10:

profile uses zlib compression but the profile reader was built without zlib support

E.g.
https://lab.llvm.org/buildbot/#/builders/196/builds/18536

21 months ago[RISCV] Remove support for the unratified Zbe, Zbf, and Zbm extensions.
Craig Topper [Thu, 22 Sep 2022 18:57:21 +0000 (11:57 -0700)]
[RISCV] Remove support for the unratified Zbe, Zbf, and Zbm extensions.

These extensions do not appear to be on their way to ratification.

21 months ago[NFC] Update test case to be flexible
Chris Bieneman [Thu, 22 Sep 2022 19:49:45 +0000 (14:49 -0500)]
[NFC] Update test case to be flexible

As we add more DXIL metadata, these numbers will shift. Using regex
matches and variables will ensure the code still works as expected while
making the test less fragile.

21 months ago[clang][modules][deps] Preserve module map load order
Jan Svoboda [Thu, 22 Sep 2022 19:36:25 +0000 (12:36 -0700)]
[clang][modules][deps] Preserve module map load order

In `ASTWriter`, input files are sorted based on whether they are system or user. The current implementation used single `std::queue` with `push_back` and `push_front`. This resulted in the user files being reversed.

This patch fixes that by keeping the system/user distinction, but otherwise serializing files in the order they were loaded by the `SourceManager`. This is then used in the dependency scanner to report module map dependencies in the correct order.

Depends on D134224.

Reviewed By: Bigcheese

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

21 months ago[MemProf] Memprof profile matching and annotation
Teresa Johnson [Thu, 30 Jun 2022 21:49:44 +0000 (14:49 -0700)]
[MemProf] Memprof profile matching and annotation

Profile matching and IR annotation for memprof profiles.

See also related RFCs:
RFC: Sanitizer-based Heap Profiler [1]
RFC: A binary serialization format for MemProf [2]
RFC: IR metadata format for MemProf [3]*

* Note that the IR metadata format has changed from the RFC during
implementation, as described in the preceeding patch adding the basic
metadata and verification support.

The matching is performed during the normal PGO annotation phase, to
ensure that the inlines applied in the IR at that point are a subset
of the inlines in the profiled binary and thus reflected in the
profile's call stacks. This is important because the call frames are
associated with functions in the profile based on the inlining in the
symbolized call stacks, and this simplifies locating the subset of
profile data relevant for matching onto each function's IR.

The PGOInstrumentationUse pass is enhanced to perform matching for
whatever combination of memprof and regular PGO profile data exists in
the profile.

Using the utilities introduced in D128854:
The memprof profile data for each context is converted to "cold" or
"notcold" based on parameterized thresholds for size, access count, and
lifetime. The memprof allocation contexts are trimmed to the minimal
amount of context required to uniquely identify whether the context is
cold or not cold. For allocations where all profiled contexts have the
same allocation type, no memprof metadata is attached and instead the
allocation call is directly annotated with an attribute specifying the
alloction type. This is the same attributed that will be applied to
allocation calls once cloned for different contexts, and later used
during LibCall simplification to emit allocation hints [4].

Depends on D128141 and D128854.

[1] https://lists.llvm.org/pipermail/llvm-dev/2020-June/142744.html
[2] https://lists.llvm.org/pipermail/llvm-dev/2021-September/153007.html
[3] https://discourse.llvm.org/t/rfc-ir-metadata-format-for-memprof/59165
[4] https://github.com/google/tcmalloc/commit/ab87cf382dc56784f783f3aaa43d6d0465d5f385

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

21 months ago[CostModel][X86] Tidyup sdiv/srem/udiv/urem by constant cost tables
Simon Pilgrim [Thu, 22 Sep 2022 17:14:49 +0000 (18:14 +0100)]
[CostModel][X86] Tidyup sdiv/srem/udiv/urem by constant cost tables

Preparation for adding cost kinds handling

This is necessary to eventually unblock D111968

21 months ago[clang][modules][deps] Report modulemaps describing excluded headers
Jan Svoboda [Thu, 22 Sep 2022 19:17:52 +0000 (12:17 -0700)]
[clang][modules][deps] Report modulemaps describing excluded headers

Module map files describing excluded headers do affect compilation. Track them in the compiler, serialize them into the PCM file and report them in the scanner.

Depends on D134222.

Reviewed By: Bigcheese

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

21 months ago[DAGCombine] Check both forms of a commutative transform
Philip Reames [Thu, 22 Sep 2022 19:15:56 +0000 (12:15 -0700)]
[DAGCombine] Check both forms of a commutative transform

The transform to fold an add into the base of a scatter/gather was only checking to see if the LHS was a splat.  Included test change indicates that splats are not canonicalized to LHS, and that we need to check both sides.

21 months ago[RISCV] Precommit test showing scatter addressing gap
Philip Reames [Thu, 22 Sep 2022 19:13:28 +0000 (12:13 -0700)]
[RISCV] Precommit test showing scatter addressing gap

21 months ago[clang][dataflow] Add support for nested method calls.
Yitzhak Mandelbaum [Thu, 22 Sep 2022 12:42:23 +0000 (12:42 +0000)]
[clang][dataflow] Add support for nested method calls.

Extend the context-sensitive analysis to handle a call to a method (of the same
class) from within a method. That, is a member-call expression through `this`.

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

21 months ago[mlir][MemRef] Simplify extract_strided_metadata(expand_shape)
Quentin Colombet [Sat, 10 Sep 2022 00:23:13 +0000 (00:23 +0000)]
[mlir][MemRef] Simplify extract_strided_metadata(expand_shape)

Add a pattern to the pass that simplifies
extract_strided_metadata(other_op(memref)).

The new pattern gets rid of the expand_shape operation while
materializing its effects on the sizes, and the strides of
the base object.

In other words, this simplification replaces:
```
baseBuffer, offset, sizes, strides =
             extract_strided_metadata(expand_shape(memref))
```

With

```
baseBuffer, offset, baseSizes, baseStrides =
    extract_strided_metadata(memref)
sizes#reassIdx =
    baseSizes#reassDim / product(expandShapeSizes#j,
                                 for j in group excluding
                                   reassIdx)
strides#reassIdx =
    baseStrides#reassDim * product(expandShapeSizes#j,
                                   for j in
                                     reassIdx+1..
                                       reassIdx+group.size-1)
```

Where `reassIdx` is a reassociation index for the group at
`reassDim` and `expandShapeSizes#j` is either:
- The constant size at dimension j, derived directly from the
  result type of the expand_shape op, or
- An affine expression: baseSizes#reassDim / product of all
  constant sizes in expandShapeSizes.

Note: baseBuffer and offset are unaffected by the expand_shape
operation.

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

21 months ago[clang][deps] Report module map describing compiled module
Jan Svoboda [Thu, 22 Sep 2022 18:31:31 +0000 (11:31 -0700)]
[clang][deps] Report module map describing compiled module

This patch fixes compilation failure with explicit modules caused by scanner not reporting the module map describing the module whose implementation is being compiled.

Below is a breakdown of the attached test case. Note the VFS that makes frameworks "A" and "B" share the same header "shared/H.h".

In non-modular build, Clang skips the last import, since the "shared/H.h" header has already been included.

During scan (or implicit build), the compiler handles "tu.m" as follows:
  * `@import B` imports module "B", as expected,
  * `#import <A/H.h>` is resolved textually (due to `-fmodule-name=A`) to "shared/H.h" (due to the VFS remapping),
  * `#import <B/H.h>` is resolved to import module "A_Private", since the header "shared/H.h" is already known to be part of that module, and the import is skipped.
In the end, the only modular dependency of the TU is "B".

In explicit modular build without `-fmodule-name=A`, TU does depend on module "A_Private" properly, not just textually. Clang therefore builds & loads its PCM, and knows to ignore the last import, since "shared/H.h" is known to be part of "A_Private".

But with current scanner behavior and `-fmodule-name=A` present, the last import fails during explicit build. Clang doesn't know about "A_Private" (it's included textually) and tries to import "B_Private" instead, which it doesn't know about either (the scanner correctly didn't report it as dependency). This is fixed by reporting the module map describing "A" and matching the semantics of implicit build.

Reviewed By: Bigcheese

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

21 months ago[ELF] Fix std::min error on MacOs
Alex Brachet [Thu, 22 Sep 2022 19:03:13 +0000 (19:03 +0000)]
[ELF] Fix std::min error on MacOs

21 months ago[HLSL] Add resource binding attribute for HLSL.
Xiang Li [Mon, 18 Jul 2022 18:50:25 +0000 (11:50 -0700)]
[HLSL] Add resource binding attribute for HLSL.

The resource binding attribute is to set the virtual registers and logical register spaces resources in HLSL are bound to.
Format is ''register(ID,  space)'' like register(t3,  space1).
ID must be start with
t – for shader resource views (SRV),
s – for samplers,
u – for unordered access views (UAV),
b – for constant buffer views (CBV).

Register space is default to space0.

The full documentation is available here: https://docs.microsoft.com/en-us/windows/win32/direct3d12/resource-binding-in-hlsl

Reviewed By: aaron.ballman

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

21 months ago[mlir] Modify LinalgStructuredInterface to allow the computation block to have argume...
Oleg Shyshkov [Thu, 22 Sep 2022 18:05:35 +0000 (18:05 +0000)]
[mlir] Modify LinalgStructuredInterface to allow the computation block to have arguments only for a subset of operands.

Summary:
Currently there is an expectations that there is a corresponsing block argument
for each operand. For some operation, it leads to unused arguments. For example,
in `map`, only input operands are used for the computation.

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

21 months ago[llvm] Handle dso_local_equivalent in FunctionComparator
Leonard Chan [Tue, 20 Sep 2022 22:00:20 +0000 (22:00 +0000)]
[llvm] Handle dso_local_equivalent in FunctionComparator

This addresses https://github.com/llvm/llvm-project/issues/51066.

Prior to this, dso_local_equivalent would lead to an llvm_unreachable in
a switch in the FunctionComparator. This adds a conservative case in
that switch that just compares the underlying functions.

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

21 months agoTrack .dwo/.dwp loading errors and notify user when viewing variables.
Greg Clayton [Tue, 20 Sep 2022 02:43:10 +0000 (19:43 -0700)]
Track .dwo/.dwp loading errors and notify user when viewing variables.

When debugging using Fission (-gsplit-dwarf), we can sometimes have issues loading .dwo files if they are missing or if the path was relative and we were unable to locate the file. We can also skip loading due to DWO ID mismatch or if a .dwp file doesn't contain a matching .dwo file. Also .dwo files could be updated due to a recompile and if the user debugs an executable that was linked against the old .dwo file, it could fail to load the information.

This patch adds a m_dwo_error to DWARFUnit that can be get/set and will cause "frame variable" to show errors when there are .dwo/.dwp issues informing the user about the error.

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

21 months agoDocument WarnOnSizeOfPointerToAggregate.
Michael Benfield [Thu, 22 Sep 2022 17:17:34 +0000 (17:17 +0000)]
Document WarnOnSizeOfPointerToAggregate.

This option was just landed in D134381. It would make sense to actually
document it.

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

21 months ago[llvm-objcopy] --compress-debug-sections: remove tail padding for ELFCLASS32
Fangrui Song [Thu, 22 Sep 2022 17:26:47 +0000 (10:26 -0700)]
[llvm-objcopy] --compress-debug-sections: remove tail padding for ELFCLASS32

For an ELFCLASS32 object, a compressed section due to --compress-debug-sections={zlib,zstd} has a
tail padding of 12 zero bytes. zlib happily allows this while zstd is rigid and
reports `error: '{{.*}}': failed to decompress section '.debug_foo': Src size is incorrect`.

Cole Kissane reported the problem.

Reviewed By: jhenderson, phosek

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

21 months ago[NFC] Empty commit to check commit access
Yashwant Singh [Thu, 22 Sep 2022 17:24:50 +0000 (22:54 +0530)]
[NFC] Empty commit to check commit access

21 months ago[NFC] Refactor dxil metadata code
Chris Bieneman [Wed, 21 Sep 2022 23:12:43 +0000 (18:12 -0500)]
[NFC] Refactor dxil metadata code

DXIL relies on a whole bunch of IR metadata constructs being populated
in the right shape. Rather than just hard coding or using complicated
arrangements of constant data strings, let's make first-class objects
that reprensent the metadata and manage reading and writing the
metadata from the module.

Reviewed By: python3kgae

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

21 months ago[gn build] port 47afaf2eb02b (exegesis all targets)
Nico Weber [Thu, 22 Sep 2022 17:16:49 +0000 (13:16 -0400)]
[gn build] port 47afaf2eb02b (exegesis all targets)

21 months ago[flang][runtime] Fixes for element size calculation.
Slava Zakharin [Thu, 22 Sep 2022 16:31:20 +0000 (09:31 -0700)]
[flang][runtime] Fixes for element size calculation.

BytesFor() used to return KIND for the size, which is not always
correct, so I changed it to return the size of the actual CppType
corresponding to the given category and kind.

MinElemLen() used to calculate size incorrectly (e.g. CFI_type_extended_double
was sized 10, whereas it may occupy more bytes on a target), so I changed it
to call BytesFor().

Additional changes were needed to resolve new failures for transformational
intrinsics. These intrinsics used to work for not fully supported
data types (e.g. REAL(3)), but now stopped working because CppType
cannot be computed for those categories/kinds. The solution is to use
known element size from the source argument(s) for establishing
the destination descriptor - the element size is all that is needed
for transformational intrinsics to keep working.

Note that this does not help cases, where runtime still has to
compute the element size, e.g. when it creates descriptors for
components of derived types. If the component has unsupported
data type, BytesFor() will still fail. So these cases require
adding support for the missing types.

New regression unit test in Runtime/Transformational.cpp
demonstrates the case that will start working properly with
this commit.

21 months ago[clang-tidy] Add option WarnOnSizeOfPointerToAggregate.
Michael Benfield [Wed, 21 Sep 2022 19:46:35 +0000 (19:46 +0000)]
[clang-tidy] Add option WarnOnSizeOfPointerToAggregate.

This is now an option under the check bugprone-sizeof-expression.

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

21 months ago[clang][DebugInfo] Emit access specifiers for typedefs
Jonathan Camilleri [Thu, 22 Sep 2022 16:59:00 +0000 (16:59 +0000)]
[clang][DebugInfo] Emit access specifiers for typedefs

The accessibility level of a typedef or using declaration in a
struct or class was being lost when producing debug information.

Reviewed By: dblaikie

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

21 months ago[DebugInfo] Emit access specifiers for typedefs
Jonathan Camilleri [Thu, 22 Sep 2022 16:47:02 +0000 (16:47 +0000)]
[DebugInfo] Emit access specifiers for typedefs

The accessibility level of a typedef or using declaration in a
struct or class was being lost when producing debug information.

Reviewed By: dblaikie

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

21 months agoUpdate the C status page for WG14 N2359
Aaron Ballman [Thu, 22 Sep 2022 17:04:27 +0000 (13:04 -0400)]
Update the C status page for WG14 N2359

We don't yet implement this paper, so this adds a basic test
demonstrating that.

21 months ago[mlir][vector] Fix test for vector-warp-distribute
Christopher Bate [Thu, 22 Sep 2022 16:11:59 +0000 (10:11 -0600)]
[mlir][vector] Fix test for vector-warp-distribute

Test does a "CHECK-NOT" against the function name when it should check
to ensure that the `vector.warp_execute_on_lane_0` is removed.

Reviewed By: ThomasRaoux

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

21 months ago[AArh64-SVE]: Improve cost model for div/udiv/mul 128-bit vector operations
Hassnaa Hamdi [Tue, 23 Aug 2022 15:22:52 +0000 (15:22 +0000)]
[AArh64-SVE]: Improve cost model for div/udiv/mul 128-bit vector operations

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

21 months ago[Doc][OpenCL] Fixed typos in code examples
Anastasia Stulova [Thu, 22 Sep 2022 16:46:47 +0000 (17:46 +0100)]
[Doc][OpenCL] Fixed typos in code examples

21 months ago[CostModel][X86] Remove duplicate ashr v4i64 cost table entry. NFCI.
Simon Pilgrim [Thu, 22 Sep 2022 16:27:20 +0000 (17:27 +0100)]
[CostModel][X86] Remove duplicate ashr v4i64 cost table entry. NFCI.

21 months agoMC: make section classification a bit more thorough
Saleem Abdulrasool [Fri, 5 Aug 2022 16:52:03 +0000 (16:52 +0000)]
MC: make section classification a bit more thorough

This does *NOT* change the emitted section flags in any way.  This only
impacts the internal classification of sections.

Extend the section classification in LLVM for ELF targets.  This has one
important change: we now classify sections as text by default rather
than readonly.  This matches the behaviour for GAS better.

Ensure that any section that has a writable attribute set is not treated
as readonly.  We also special case any section named `.debug_` which is
reserved for DWARF as metadata.  In the case none of the attributes are
set (or because no attributes were provided), consult the section name
for classification.  We match the well known names and classify the
section accordingly.  Any remaining section is now classified as text.

This change allows us to classify sections in the MC layer more
precisely which is needed for subsequent changes for handling target
specific behaviour.

Re-apply the change that was reverted with additional changes to
classify section prefixes appropriately and differentiate the TLS
sections, addressing the FIXME and post-commit review comments by
@MaskRay.

Differential Revision: https://reviews.llvm.org/D133456
Reviewed By: @MaskRay

21 months ago[mlir][sparse] Add codegen rule for the push_back operator.
bixia1 [Wed, 21 Sep 2022 16:26:09 +0000 (09:26 -0700)]
[mlir][sparse] Add codegen rule for the push_back operator.

Reviewed By: aartbik

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

21 months ago[llvm-exegesis] Initialize all supported targets
Philip Reames [Thu, 22 Sep 2022 16:02:22 +0000 (09:02 -0700)]
[llvm-exegesis] Initialize all supported targets

Enable registration of multiple exegesis targets at once. Use idiomatic approach to defining target select macros, but leave code in the llvm-mca sub-directories for now.

This is a stepping stone towards allowing llvm-exegesis benchmarking via simulator or testing in non-target dependent tests.

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

21 months ago[VPlan] Only generate single instr for unpredicated stores of varying value to invari...
Philip Reames [Thu, 22 Sep 2022 15:47:19 +0000 (08:47 -0700)]
[VPlan] Only generate single instr for unpredicated stores of varying value to invariant address

This extends the previously added uniform store case to handle stores of loop varying values to a loop invariant address. Note that the placement of this code only allows unpredicated stores; this is important for correctness. (That is "IsPredicated" is always false at this point in the function.)

This patch does not include scalable types. The diff felt "large enough" as it were; I'll handle that in a separate patch. (It requires some changes to cost modeling.)

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

21 months ago[RISCV] Use structured bindings in common RVV lowering code
Fraser Cormack [Thu, 22 Sep 2022 15:07:27 +0000 (16:07 +0100)]
[RISCV] Use structured bindings in common RVV lowering code

This patch uses structured bindings to simplify a couple of specific
cases when lowering RVV operations where we commonly declare two
SDValues and immediately 'tie' them to the mask and vector length.

There's also a couple places where we split vectors that structured
bindings make sense to use.

This patch tries to keep these sorts of changes minimal and to cases
where the returned types are commonly understood, rather than applying
this wholesale to the RISCV backend.

Reviewed By: reames

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

21 months ago[AArch64] add tests for vector load combining; NFC
Sanjay Patel [Thu, 22 Sep 2022 15:21:08 +0000 (11:21 -0400)]
[AArch64] add tests for vector load combining; NFC

More coverage for D133584

21 months ago[CostModel][X86] Add CostKinds test coverage for mul-by-constant patterns
Simon Pilgrim [Thu, 22 Sep 2022 15:40:50 +0000 (16:40 +0100)]
[CostModel][X86] Add CostKinds test coverage for mul-by-constant patterns

Help check to see the costs predicted for mul->shift conversions

21 months ago[RISCV] Verify consistency of a couple TSFlags related to vector operands
Philip Reames [Thu, 22 Sep 2022 15:27:23 +0000 (08:27 -0700)]
[RISCV] Verify consistency of a couple TSFlags related to vector operands

Various bits of existing code assume the presence of one operand implies the presence of another.  Add verifier rules to catch violations.

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

21 months ago[RISCV] Improve support for vector fp_to_sint_sat/uint_sat.
Craig Topper [Thu, 22 Sep 2022 15:13:47 +0000 (08:13 -0700)]
[RISCV] Improve support for vector fp_to_sint_sat/uint_sat.

The default fixed vector legalization is to unroll. The default
scalable vector legalization is to clamp in the FP domain. The
RVV vfcvt instructions have saturating behavior so we can use them
directly. The only difference is that RVV instruction turn nan into
the max value, but the _SAT intrinsics want 0.

I'm only supporting 1 step of narrowing for now. I think we can
support more steps by using VNCLIP to saturate and narrower.

The only case that needs 2 steps of widening is f16->i64 which we can
do as f16->f32->i64.

Reviewed By: frasercrmck

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

21 months ago[RISCV] Formatting fixes to RISCV.td NFC
Craig Topper [Thu, 22 Sep 2022 02:04:48 +0000 (19:04 -0700)]
[RISCV] Formatting fixes to RISCV.td NFC

Improve indentation. Fix the worst of the 80 column violations.

21 months agoFix -Wunused-local-typedef warning in some build configurations
Dmitri Gribenko [Thu, 22 Sep 2022 15:09:58 +0000 (17:09 +0200)]
Fix -Wunused-local-typedef warning in some build configurations

21 months ago[GlobalISel] Enforce G_ASSERT_ALIGN to have a valid alignment > 0.
Amara Emerson [Thu, 22 Sep 2022 14:41:27 +0000 (15:41 +0100)]
[GlobalISel] Enforce G_ASSERT_ALIGN to have a valid alignment > 0.

21 months ago[BasicAA] Move experimental.guard modelling to getModRefBehavior()
Nikita Popov [Wed, 14 Sep 2022 15:10:39 +0000 (17:10 +0200)]
[BasicAA] Move experimental.guard modelling to getModRefBehavior()

While we can't express this with attributes yet, we can model
these intrinsics as readonly + writing inaccessible memory (for
the control dependence) in FMRB. This way we don't need to
special-case them in getModRefInfo(), it falls out of the usual
logic.

21 months ago[InstCombine] Remove buggy zext of icmp eq with pow2 fold (PR57899)
Nikita Popov [Thu, 22 Sep 2022 14:35:07 +0000 (16:35 +0200)]
[InstCombine] Remove buggy zext of icmp eq with pow2 fold (PR57899)

For the case where the constant is a power of two rather than zero,
the fold is incorrect, because it fails to check that the bit set
in the LHS matches the bit in the RHS.

Rather than fixing this, remove the power of two handling entirely,
as a different fold will already canonicalize such comparisons to
use a zero constant.

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

21 months ago[Flang] Finalize IO operations after calling EndIO
Peter Steinfeld [Wed, 21 Sep 2022 20:08:02 +0000 (13:08 -0700)]
[Flang] Finalize IO operations after calling EndIO

The process of passing arguments to IO calls can cause allocations that
get referenced during EndIO calls.  Calling "Finalize" causes these
allocations to be deallocated.  This means that references to them in
the code in EndIO will be invalid.  The fix is to delay the call to
"finalize" until after the call to EndIO.

This particularly causes problems with the IO items are strings that are
produced by calls to functions.

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

21 months ago[CostModel][X86] Add gep.ll CostKind test coverage
Simon Pilgrim [Thu, 22 Sep 2022 13:59:02 +0000 (14:59 +0100)]
[CostModel][X86] Add gep.ll CostKind test coverage

21 months ago[CostModel][X86] Regenerate gep.ll test checks
Simon Pilgrim [Thu, 22 Sep 2022 13:51:23 +0000 (14:51 +0100)]
[CostModel][X86] Regenerate gep.ll test checks

21 months ago[InstCombine] Add test for PR57899 (NFC)
Nikita Popov [Thu, 22 Sep 2022 13:59:43 +0000 (15:59 +0200)]
[InstCombine] Add test for PR57899 (NFC)

21 months ago[clang][docs] Fix supported element types for __builtin_reduce_(add|mul)
Joe Loser [Tue, 20 Sep 2022 21:15:26 +0000 (15:15 -0600)]
[clang][docs] Fix supported element types for __builtin_reduce_(add|mul)

The docs mention that `__builtin_reduce_add` and `__builtin_reduce_mul` support
both integer and floating point element types, but only integer element types
are actually supported. See https://github.com/llvm/llvm-project/issues/57847,
and specifically,
https://github.com/llvm/llvm-project/blob/00874c48ea4d291908517afaab50d1dcbfb016c3/clang/lib/Sema/SemaChecking.cpp#L2631 for the fact that floating point element types are not supported yet.

Fix the docs to only mention support for integer element types.

21 months agoMachineVerifier: Verify REG_SEQUENCE
Matt Arsenault [Wed, 21 Sep 2022 14:42:03 +0000 (10:42 -0400)]
MachineVerifier: Verify REG_SEQUENCE

Somehow there was no verification of this, other than an ad-hoc
assertion in TwoAddressInstructions.

21 months ago[InstCombine] Use simplifyWithOpReplaced() for non-bool selects
Nikita Popov [Thu, 22 Sep 2022 09:04:22 +0000 (11:04 +0200)]
[InstCombine] Use simplifyWithOpReplaced() for non-bool selects

Perform the simplifyWithOpReplaced() fold even for non-bool
selects. This subsumes a number of recently added folds for
zext/sext of the condition.

We still need to manually handle variations with both sext/zext
and not, because simplifyWithOpReplaced() only performs one
level of replacements.

21 months agoRe-apply "Deferred Concept Instantiation Implementation"
Erich Keane [Fri, 19 Aug 2022 20:57:45 +0000 (13:57 -0700)]
Re-apply "Deferred Concept Instantiation Implementation"

This reverts commit 95d94a67755620c0a2871ac6f056ca8e9731d5e9.

This implements the deferred concepts instantiation, which should allow
the libstdc++ ranges to properly compile, and for the CRTP to work for
constrained functions.

Since the last attempt, this has fixed the issues from @wlei and
@mordante.

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

21 months ago[AST] Better recovery on an expression refers to an invalid decl.
Haojian Wu [Thu, 22 Sep 2022 09:50:17 +0000 (11:50 +0200)]
[AST] Better recovery on an expression refers to an invalid decl.

Prior to the patch, we didn't build a DeclRefExpr if the Decl being
referred to is invalid, because many clang downstream AST consumers
assume it, violating it will cause many diagnostic regressions.

With this patch, we build a DeclRefExpr enven for an invalid decl (when the
AcceptInvalidDecl is true), and wrap it with a dependent-type
RecoveryExpr (to prevent follow-up semantic analysis, and diagnostic
regressions).

This is a revised version of https://reviews.llvm.org/D76831

Reviewed By: sammccall

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

21 months ago[LLD] [ELF] Fix building with LLVM_LINK_LLVM_DYLIB since zstd was taken into use
Martin Storsjö [Thu, 22 Sep 2022 11:08:45 +0000 (11:08 +0000)]
[LLD] [ELF] Fix building with LLVM_LINK_LLVM_DYLIB since zstd was taken into use

This fixes a regression since fa74144c64dff6b145b0b3fa9397f913ddaa87bf;
even if we're linking to the dylib (which handles all the dependencies
in LLVMSupport), we're now also directly referencing zstd from
lld/ELF, and thus need to explicitly express our dependency on it.

21 months ago[clang] Rework IsTailPaddedMemberArray into isFlexibleArrayMemberExpr
serge-sans-paille [Thu, 1 Sep 2022 13:15:29 +0000 (15:15 +0200)]
[clang] Rework IsTailPaddedMemberArray into isFlexibleArrayMemberExpr

This fixes a bunch of FIXME within IsTailPaddedMemberArray related code.

As a side effect, this now also triggers a warning when trying to access a
"struct hack" member with an index above address space index range.

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

21 months ago[MemorySSA] Reset location size if IsGuaranteedLoopInvariant after phi tranlation
luxufan [Mon, 19 Sep 2022 03:29:16 +0000 (03:29 +0000)]
[MemorySSA] Reset location size if IsGuaranteedLoopInvariant after phi tranlation

We set the Location size to beforeOrAfter if the Location value is not
guaranteed loop invariant. But in some cases, we need to reset the
location size if the location size is precise after phi tranlation of
location value. This will improve MemorySSA analysis results.

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

21 months ago[mlir] Fix a cast that should be a dyn_cast.
Johannes Reifferscheid [Thu, 22 Sep 2022 11:01:28 +0000 (13:01 +0200)]
[mlir] Fix a cast that should be a dyn_cast.

This fixes a crash for certain IR, see the new test case for an
example.

Reviewed By: ftynse

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

21 months agoAArch64: add support for newer Apple CPUs
Tim Northover [Tue, 20 Sep 2022 14:03:26 +0000 (15:03 +0100)]
AArch64: add support for newer Apple CPUs

They're roughly ARMv8.6. This works in the .td file, but in
AArch64TargetParser.def, marking them v8.6 brings in support for the SM4
cryptographic hash and we don't actually have that. So TargetParser side
they're marked as v8.5, with the extra features (BF16 and I8MM added manually).

Finally, A16 supports the HCX extension in addition to v8.6. This has no
TargetParser implications.

21 months ago[CostModel][X86] Add partial CostKinds handling for funnelshifts/rotates
Simon Pilgrim [Thu, 22 Sep 2022 10:24:01 +0000 (11:24 +0100)]
[CostModel][X86] Add partial CostKinds handling for funnelshifts/rotates

This mainly just adds costs for the targets where we have actual funnelshift/rotate instructions (VBMI2/XOP etc.) - the cases where we expand still need addressing, although for many the default shift+or expansion, especially for uniform cases, isn't that bad.

This was achieved with the 'cost-tables vs llvm-mca' script D103695

21 months agoRe-land "[llvm-exegesis] Support analyzing results from a different target."
Clement Courbet [Thu, 22 Sep 2022 09:27:44 +0000 (11:27 +0200)]
Re-land "[llvm-exegesis] Support analyzing results from a different target."

With Mips fixes.

This reverts commit 7daf60e3440b22b79084bb325d823aa3ad8df0f3.

21 months ago[CostModel][X86] Add CostKinds handling for smax/smin/umax/umin instructions
Simon Pilgrim [Thu, 22 Sep 2022 09:19:16 +0000 (10:19 +0100)]
[CostModel][X86] Add CostKinds handling for smax/smin/umax/umin instructions

This was achieved with the 'cost-tables vs llvm-mca' script D103695

21 months agoRevert "[llvm-exegesis] Support analyzing results from a different target."
Clement Courbet [Thu, 22 Sep 2022 09:18:12 +0000 (11:18 +0200)]
Revert "[llvm-exegesis] Support analyzing results from a different target."

Breaks MIPS compile.

This reverts commit cc61c822e05c51e494c50d1e72f963750116ef08.

21 months ago[AA] Model operand bundles more precisely
Nikita Popov [Thu, 1 Sep 2022 14:51:00 +0000 (16:51 +0200)]
[AA] Model operand bundles more precisely

Based on D130896, we can model operand bundles more precisely. In
addition to the baseline ModRefBehavior, a reading/clobbering operand
bundle may also read/write all locations. For example, a memcpy with
deopt bundle can read any memory, but only write argument memory.

This means that getModRefInfo() for memcpy with a pointer that does
not alias the arguments results in Ref, rather than ModRef, without
the need to implement any special handling.

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

21 months ago[llvm-exegesis] Support analyzing results from a different target.
Clement Courbet [Mon, 12 Sep 2022 08:13:14 +0000 (10:13 +0200)]
[llvm-exegesis] Support analyzing results from a different target.

We were using the native triple to parse the benchmarks. Use the triple
from the benchmarks file.

Right now this still only allows analyzing files produced by the current
target until D133605 is in.

This also makes the `Analysis` class much less ad-hoc.

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