platform/upstream/llvm.git
22 months ago[mlir] Flip Async/GPU/OpenACC/OpenMP to use Both accessors
River Riddle [Wed, 21 Sep 2022 20:08:26 +0000 (13:08 -0700)]
[mlir] Flip Async/GPU/OpenACC/OpenMP to use Both accessors

This allows for incrementally updating the old API usages without
needing to update everything at once. These will be left on Both
for a little bit and then flipped to prefixed when all APIs have been
updated.

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

22 months ago[analyzer] Support implicit parameter 'self' in path note
Jan Korous [Tue, 13 Sep 2022 21:45:45 +0000 (14:45 -0700)]
[analyzer] Support implicit parameter 'self' in path note

showBRParamDiagnostics assumed stores happen only via function parameters while that
can also happen via implicit parameters like 'self' or 'this'.
The regression test caused a failed assert in the original cast to ParmVarDecl.

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

22 months ago[msan] Instrument vtest instrinsics
Vitaly Buka [Sun, 18 Sep 2022 06:44:23 +0000 (23:44 -0700)]
[msan] Instrument vtest instrinsics

Instrumentation just ORs shadow of inputs.
I assume some result shadow bits can be reset if we go into specifics of particular checks,
but as-is it is still an improvement against existing default strict instruction handler, when
every set bit of input shadow is  reported as an error.

Reviewed By: kda

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

22 months ago[RISCV] Add a couple more fp_to_sint_sat/uint_sat tests. NFC
Craig Topper [Wed, 21 Sep 2022 23:44:02 +0000 (16:44 -0700)]
[RISCV] Add a couple more fp_to_sint_sat/uint_sat tests. NFC

22 months ago[RISCV] Add tests for fixed vector fp_to_sint_sat/fp_to_sint_sat. NFC
Craig Topper [Wed, 21 Sep 2022 23:16:37 +0000 (16:16 -0700)]
[RISCV] Add tests for fixed vector fp_to_sint_sat/fp_to_sint_sat. NFC

22 months ago[test] Fix CodeGen/arm-crc32.c to not write an output to CWD
Fangrui Song [Wed, 21 Sep 2022 23:13:25 +0000 (16:13 -0700)]
[test] Fix CodeGen/arm-crc32.c to not write an output to CWD

CWD may be read-only in some testing environments.

22 months ago[flang] Write semantics test for atomic_xor
Katherine Rasmussen [Tue, 20 Sep 2022 18:48:57 +0000 (11:48 -0700)]
[flang] Write semantics test for atomic_xor

Write a semantics test for the atomic intrinsic subroutine,
atomic_xor.

Reviewed By: rouson

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

22 months ago[NFC] Make dxil namespace consistent
Chris Bieneman [Wed, 21 Sep 2022 22:34:39 +0000 (17:34 -0500)]
[NFC] Make dxil namespace consistent

We have namespaces `DXIL` and `dxil`, which is just confusing. This
renames `DXIL` -> `dxil` making everything consistent.

While the LLVM coding standards don't have a clear direction here, I
chose lower case because by my current unscientific count there are
more places where we had the lowercase namespace than the uppercase.

22 months agoRemove the unused/undefined `_cmd` parameter in `objc_direct` methods.
Michael Wyman [Wed, 14 Sep 2022 21:42:30 +0000 (14:42 -0700)]
Remove the unused/undefined `_cmd` parameter in `objc_direct` methods.

When `objc_direct` methods were implemented, the implicit `_cmd` parameter was left as an argument to the method implementation function, but was unset by callers; if the method body referenced the `_cmd` variable, a selector load would be emitted inside the body. However, this leaves an unused argument in the ABI, and is unnecessary.

This change removes the empty/unset argument, and if `_cmd` is referenced inside an `objc_direct` method it will emit local storage for the implicit variable. From the ABI perspective, `objc_direct` methods will have the implicit `self` parameter, immediately followed by whatever explicit arguments are defined on the method, rather than having one unset/undefined register in the middle.

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

22 months ago[RISCV] Rename RISCVISD::SINT_TO_FP_VL/UINT_TO_FP_VL. NFC
Craig Topper [Wed, 21 Sep 2022 22:31:45 +0000 (15:31 -0700)]
[RISCV] Rename RISCVISD::SINT_TO_FP_VL/UINT_TO_FP_VL. NFC

Name them after the instructions VFCVT_RTZ_X(U)_F_VL to make it
clear that the ISD nodes don't have the poison semantics of
ISD::SINT_TO_FP/UINT_TO_FP.

I play to reuse this node for a FP_TO_SINT_SAT/FP_TO_UINT_SAT
patch and need the instruction semantics.

22 months ago[msan] Handle x86_avx_cmp_pd_256 and x86_avx_cmp_ps_256
Vitaly Buka [Sun, 18 Sep 2022 03:17:09 +0000 (20:17 -0700)]
[msan] Handle x86_avx_cmp_pd_256 and x86_avx_cmp_ps_256

Removed FIXME which looks irrelevant. The error message happens only without -mattr=+avx.
E.g.
GOOD: opt llvm/test/Instrumentation/MemorySanitizer/avx-intrinsics-x86.ll -passes=msan -o - | llc -O3 -o /dev/null -mattr=+avx
BAD: opt llvm/test/Instrumentation/MemorySanitizer/avx-intrinsics-x86.ll -passes=msan -o - | llc -O3 -o /dev/null

So nothing to fix here.

Reviewed By: RKSimon

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

22 months ago[MLIR] Set default NVIDIA GPU version
Ivan Radanov Ivanov [Wed, 21 Sep 2022 22:10:10 +0000 (18:10 -0400)]
[MLIR] Set default NVIDIA GPU version

22 months ago[MLIR] Add a create function for mlir::SerializeToCubinPass
Ivan Radanov Ivanov [Wed, 21 Sep 2022 21:56:02 +0000 (17:56 -0400)]
[MLIR] Add a create function for mlir::SerializeToCubinPass

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

22 months ago[Analysis] Make members of InlineCost const (NFC)
Kazu Hirata [Wed, 21 Sep 2022 21:47:23 +0000 (14:47 -0700)]
[Analysis] Make members of InlineCost const (NFC)

Once we create an instance of InlineCost, we don't change its
contents.

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

22 months ago[TTI] Recognize fp constants in getOperandInfo
Philip Reames [Wed, 21 Sep 2022 21:33:04 +0000 (14:33 -0700)]
[TTI] Recognize fp constants in getOperandInfo

We were recognizing vectors of floats, but not scalars.  That's a tad odd.

22 months ago[test][msan] Precommit part of D134119
Vitaly Buka [Sun, 18 Sep 2022 03:17:09 +0000 (20:17 -0700)]
[test][msan] Precommit part of D134119

22 months ago[Hexagon] Fix -Wunused-variable in non-assertion builds after f6e7ad56040ee8531be3375...
Fangrui Song [Wed, 21 Sep 2022 21:14:45 +0000 (14:14 -0700)]
[Hexagon] Fix -Wunused-variable in non-assertion builds after f6e7ad56040ee8531be3375e04312d30700a58b2

22 months ago[libunwind] Handle G in personality string
Florian Mayer [Fri, 3 Jun 2022 21:33:08 +0000 (14:33 -0700)]
[libunwind] Handle G in personality string

Tested with the following program:

```
static volatile int* x = nullptr;

void throws()  __attribute__((noinline)) {
  if (getpid() == 0)
    return;
  throw "error";
}

void maybe_throws()  __attribute__((noinline)) {
  volatile int y = 1;
  x = &y;
  throws();
  y = 2;
}

int main(int argc, char** argv) {
  int y;
  try {
    maybe_throws();
  } catch (const char* e) {
    //printf("Caught\n");
  }
  y = *x;
  printf("%d\n", y); // should be MTE failure.
  return 0;
}
```

Built using `clang++ -c -O2 -target aarch64-linux -fexceptions -march=armv8-a+memtag -fsanitize=memtag-heap,memtag-stack`

Currently only Android implements runtime support for MTE stack tagging.

Without this change, we crash on `__cxa_get_globals` when trying to catch
the exception (because the stack frame __cxa_get_globals frame will fail due
to tags left behind on the stack). With this change, we crash on the `y = *x;`
as expected, because the stack frame has been untagged, but the pointer hasn't.

Reviewed By: #libunwind, compnerd, MaskRay

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

22 months ago[Driver] Add --gcc-install-dir=
Fangrui Song [Wed, 21 Sep 2022 21:11:15 +0000 (14:11 -0700)]
[Driver] Add --gcc-install-dir=

This option specifies a GCC installation directory such as
/usr/lib/gcc/x86_64-linux-gnu/12, /usr/lib/gcc/x86_64-gentoo-linux-musl/11.2.0 .

It is intended to replace --gcc-toolchain=, which specifies a directory where
`lib/gcc{,-cross}` can be found. When --gcc-toolchain= is specified, the
selected `lib/gcc/$triple/$version` installation uses complex logic and the
largest GCC version is picked. There is no way to specify another version in the
presence of multiple GCC versions.

D25661 added gcc-config detection for Gentoo: `ScanGentooConfigs`.
The implementation may be simplified by using --gcc-install-dir=.

Reviewed By: mgorny

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

22 months ago[GlobalISel] Fix std::max after D134380
Fangrui Song [Wed, 21 Sep 2022 21:09:04 +0000 (14:09 -0700)]
[GlobalISel] Fix std::max after D134380

22 months agoAMDGPU: Stop validating earlyclobber operands in assembler
Jay Foad [Tue, 20 Sep 2022 09:43:40 +0000 (10:43 +0100)]
AMDGPU: Stop validating earlyclobber operands in assembler

This validation was introduced in D34003 for v_qsad/v_mqsad instructions
but it applies to all instructions with earlyclobber operands, which now
includes v_mad_i64/v_mad_u64.

In all these cases I do not think there is documentation saying that the
destination must not overlap the sources. Rather there are *some* cases
where the instruction may not function correctly if there is an overlap,
and we are using earlyclobber as a conservative way of preventing
codegen from generating those cases.

I think it is unhelpful for the assembler to enforce the earlyclobber
restriction because it prevents assembling cases where the programmer
knows that in fact the overlap is safe.

See also: https://github.com/llvm/llvm-project/issues/57610

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

22 months ago[GlobalISel] Fix known bits for G_ASSERT_ALIGN.
Amara Emerson [Wed, 21 Sep 2022 19:37:31 +0000 (20:37 +0100)]
[GlobalISel] Fix known bits for G_ASSERT_ALIGN.

I don't know what was going on originally with these tests. It seems reasonable
to have the immediate be the same byte alignment unit as the IR, in which case
we need to take the log2 in order to set the right number of low bits.

This fixes a miscompile in chromium.

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

22 months ago[clang-format][NFC] Reformat the clang/unittests/Format directory
owenca [Wed, 21 Sep 2022 20:17:28 +0000 (13:17 -0700)]
[clang-format][NFC] Reformat the clang/unittests/Format directory

Also add a .clang-format file to clang/include/clang/Format and
clang/unittests/Format to keep the directories formatted.

22 months agoRevert "[llvm] Support forward-referenced globals with dso_local_equivalent"
Leonard Chan [Wed, 21 Sep 2022 20:13:31 +0000 (20:13 +0000)]
Revert "[llvm] Support forward-referenced globals with dso_local_equivalent"

This reverts commit 411020ad1c15a5f8cdbf674a2a8f845000f761e3.

One of the tests here fails on some upstream builders:
https://lab.llvm.org/buildbot#builders/16/builds/35314

22 months ago[Clang] Support case and default labels at end of compound statement
Evgeny Shulgin [Mon, 19 Sep 2022 19:26:03 +0000 (19:26 +0000)]
[Clang] Support case and default labels at end of compound statement

Direct continuation of https://reviews.llvm.org/D133887

Reviewed By: #clang-language-wg, aaron.ballman

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

22 months agoAdd tests & update the C99 DR statuses for dr315 and dr316
Aaron Ballman [Wed, 21 Sep 2022 19:31:53 +0000 (15:31 -0400)]
Add tests & update the C99 DR statuses for dr315 and dr316

22 months ago[llvm] Support forward-referenced globals with dso_local_equivalent
Leonard Chan [Mon, 19 Sep 2022 23:22:14 +0000 (23:22 +0000)]
[llvm] Support forward-referenced globals with dso_local_equivalent

See https://github.com/llvm/llvm-project/issues/57815.

dso_local_equivalent would fail with an assertion on forward-referenced
globals. This is an issue that only comes up in textual IR, which is why
we've never seen this assertion with clang.

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

22 months ago[HLSL] Allow SV_GroupIndex for lib profile.
Xiang Li [Tue, 20 Sep 2022 23:40:55 +0000 (16:40 -0700)]
[HLSL] Allow SV_GroupIndex for lib profile.

Lib profile could include all kind of entry functions.

Reviewed By: beanz

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

22 months ago[InstCombine] try to fold mul by neg-power-of-2 to shl
Sanjay Patel [Wed, 21 Sep 2022 18:36:27 +0000 (14:36 -0400)]
[InstCombine] try to fold mul by neg-power-of-2 to shl

`(A * -2**C) + B --> B - (A << C)`

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

This inverts what Negator was doing before:
D134310 / 0f32a5dea0e9

Analysis and codegen are generally better without multiply,
so we should favor this form even if we trade add for sub
(because those are generally equivalent cost operations).

22 months ago[clang-format][NFC] Reformat clang/lib/Format using 6257832bf94f
owenca [Wed, 21 Sep 2022 00:00:05 +0000 (17:00 -0700)]
[clang-format][NFC] Reformat clang/lib/Format using 6257832bf94f

Fix braces and add .clang-format to keep the directory formatted.

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

22 months agoChanging some strange code into an assert; NFC
Aaron Ballman [Wed, 21 Sep 2022 18:51:17 +0000 (14:51 -0400)]
Changing some strange code into an assert; NFC

This code was added in b65b1f322bd88513586a4539d2b5f18aeb698f3f, but it
was not noticed that the [[fallthrough]] behavior was very wrong. In C
mode, we would set the ParenExprType to CompoundLiteral and then
promptly overwrite that information by falling through.

After some investigation, I convinced myself that it is not possible to
hit this code path in C, only in C++. I've switched it to be an
assertion; I don't expect to hit it, but if we do hit it, that will at
least give us a code example we can use to reason about the intent of
the original code.

22 months ago[libclang] Fix -Wswitch after D129883
Fangrui Song [Wed, 21 Sep 2022 18:55:14 +0000 (11:55 -0700)]
[libclang] Fix -Wswitch after D129883

22 months ago[ARM] Check target feature support for __builtin_arm_crc*
Fangrui Song [Wed, 21 Sep 2022 18:50:15 +0000 (11:50 -0700)]
[ARM] Check target feature support for __builtin_arm_crc*

`__builtin_arm_crc*` requires the target feature crc which is available on armv8
and above. Calling the fuctions for armv7 leads to a SelectionDAG crash.

```
% clang -c --target=armv7-unknown-linux-gnueabi -c a.c
fatal error: error in backend: Cannot select: intrinsic %llvm.arm.crc32b
PLEASE submit a bug report to ...
```

Add `TARGET_BUILTIN` and define required features for these builtins to
report an error in `CodeGenFunction::checkTargetFeatures`. The problem is quite widespread.
I will add `TARGET_BUILTIN` for more builtins later.

Fix https://github.com/llvm/llvm-project/issues/57802

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

22 months agoRevert "[NFC][AMDGPU] Refactor AMDGPUDisassembler"
Scott Linder [Wed, 21 Sep 2022 18:48:42 +0000 (18:48 +0000)]
Revert "[NFC][AMDGPU] Refactor AMDGPUDisassembler"

This reverts commit f5831514612cd9e014e4fc7455b75411531fe6e1.

22 months ago[ELF] --pack-dyn-relocs=android: scan relocation serially after D133003
Fangrui Song [Wed, 21 Sep 2022 18:43:12 +0000 (11:43 -0700)]
[ELF] --pack-dyn-relocs=android: scan relocation serially after D133003

https://reviews.llvm.org/D133003#3806508 can reproduce a non-determinism with
--threads=4. Making the config serial fixes non-determinism (by running the link
many times and compare output).

22 months ago[libc] Add implementations of POSIX getpid, getppid, getuid, geteuid functions.
Siva Chandra Reddy [Wed, 21 Sep 2022 08:13:14 +0000 (08:13 +0000)]
[libc] Add implementations of POSIX getpid, getppid, getuid, geteuid functions.

Reviewed By: lntue

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

22 months ago[libc] Add implementation of functions stat, fstat and lstat.
Siva Chandra Reddy [Fri, 9 Sep 2022 19:02:28 +0000 (19:02 +0000)]
[libc] Add implementation of functions stat, fstat and lstat.

All supporting type and macro definitions have also been added.

Reviewed By: lntue

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

22 months ago[Hexagon] Revamp type legalization of ext/trunc/sat in HVX
Krzysztof Parzyszek [Tue, 20 Sep 2022 17:47:55 +0000 (10:47 -0700)]
[Hexagon] Revamp type legalization of ext/trunc/sat in HVX

Resizing operations (e.g. sign extension) in DAG can go from any width
to any other width, e.g. i8 -> i32. If the input and the result differ
by a factor larger than 2, the operation cannot be legal in HVX, since
the only two legal vector sizes in HVX are a single vector and a pair
of vectors.
To simplify the legalization, such operations are expanded into steps
that only double/halve the type size, so that each such step can be fully
legalized on its own. The complication is that DAG will automatically
fold these steps back into one, e.g. sext(sext) -> sext. To prevent that
new HexagonISD nodes are introduced: TL_EXTEND and TL_TRUNCATE. Once
legalized, these nodes are replaced with the original opcodes.

The type legalization is now common to aext/sext/zext/trunc and Hexagon-
specific ssat/usat nodes.

22 months ago[AArch64] Try to fold shuffle (tbl2, tbl2) to tbl4.
Florian Hahn [Wed, 21 Sep 2022 18:15:39 +0000 (19:15 +0100)]
[AArch64] Try to fold shuffle (tbl2, tbl2) to tbl4.

shuffle (tbl2, tbl2) can be folded into a single tbl4 if the mask for
the selected elements is constant.

Reviewed By: t.p.northover

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

22 months ago[InstCombine] try multi-use demanded bits fold for 'sub'
Sanjay Patel [Wed, 21 Sep 2022 17:45:43 +0000 (13:45 -0400)]
[InstCombine] try multi-use demanded bits fold for 'sub'

This is similar to D133788 / 73919a87e9a6, but for sub
the transform is valid only for low zeros in operand 1.

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

22 months ago[InstCombine] add tests for multi-use sub demanded bits: NFC
Sanjay Patel [Wed, 21 Sep 2022 17:24:05 +0000 (13:24 -0400)]
[InstCombine] add tests for multi-use sub demanded bits: NFC

22 months ago[InstCombine] add tests for (X * -2**C) + Y; NFC
Sanjay Patel [Wed, 21 Sep 2022 16:41:54 +0000 (12:41 -0400)]
[InstCombine] add tests for (X * -2**C) + Y; NFC

22 months ago[ELF] Parallelize --compress-debug-sections=zstd
Fangrui Song [Wed, 21 Sep 2022 18:13:02 +0000 (11:13 -0700)]
[ELF] Parallelize --compress-debug-sections=zstd

See D117853: compressing debug sections is a bottleneck and therefore it
has a large value parallizing the step.

zstd provides multi-threading API and the output is deterministic even with
different numbers of threads (see https://github.com/facebook/zstd/issues/2238).
Therefore we can leverage it instead of using the pigz-style sharding approach.

Also, switch to the default compression level 3. The current level 5
is significantly slower without providing justifying size benefit.

```
  'dash b.sh 1' ran
    1.05 ± 0.01 times faster than 'dash b.sh 3'
    1.18 ± 0.01 times faster than 'dash b.sh 4'
    1.29 ± 0.02 times faster than 'dash b.sh 5'

level=1 size: 358946945
level=3 size: 309002145
level=4 size: 307693204
level=5 size: 297828315
```

Reviewed By: andrewng, peter.smith

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

22 months ago[libc] add fputs and puts
Michael Jones [Tue, 20 Sep 2022 23:58:05 +0000 (16:58 -0700)]
[libc] add fputs and puts

add fputs, puts, and the EOF macro that they use.

Reviewed By: sivachandra

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

22 months ago[ORC-RT] Fix case on test file suffix.
Lang Hames [Wed, 21 Sep 2022 18:08:50 +0000 (11:08 -0700)]
[ORC-RT] Fix case on test file suffix.

Testcases expect this file to have an uppercase .S suffix.

22 months ago[lit] Work around another windows issue in new test from 28412d1800e3
Joel E. Denny [Wed, 21 Sep 2022 18:08:10 +0000 (14:08 -0400)]
[lit] Work around another windows issue in new test from 28412d1800e3

Based on result shown at:

<https://lab.llvm.org/buildbot/#/builders/216/builds/10123>

22 months ago[NFC] Fix build error ignored by MSVC.
Xiang Li [Wed, 21 Sep 2022 17:55:51 +0000 (10:55 -0700)]
[NFC] Fix build error ignored by MSVC.

22 months ago[Utils] Refactor update_cc_test_checks.py to use shutil
John McIver [Wed, 21 Sep 2022 17:55:33 +0000 (10:55 -0700)]
[Utils] Refactor update_cc_test_checks.py to use shutil

The package `distutils` is deprecated and removal is planned for Python 3.12. All calls to `distutils.spawn.find_executable` are replaced with local version of `find_executable` which makes use of `shutils.which`.

Reviewed By: arichardson, MaskRay

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

22 months ago[RegisterCoalescer] Use LiveRangeEdit to handle rematerialization
Guozhi Wei [Wed, 21 Sep 2022 17:51:07 +0000 (17:51 +0000)]
[RegisterCoalescer] Use LiveRangeEdit to handle rematerialization

This patch uses the API provided by LiveRangeEdit to handle rematerialization.
It will make future maintenance and improvement more easier.

No functional change.

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

22 months ago[gn build] Don't set LLVM_UNREACHABLE_OPTIMIZE when llvm_enable_assertions
Arthur Eubanks [Wed, 21 Sep 2022 03:37:49 +0000 (20:37 -0700)]
[gn build] Don't set LLVM_UNREACHABLE_OPTIMIZE when llvm_enable_assertions

llvm_unreachable should properly error out if assertions are enabled.

Reviewed By: thakis

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

22 months ago[lit] Work around windows issue in new test from 28412d1800e3
Joel E. Denny [Wed, 21 Sep 2022 17:27:41 +0000 (13:27 -0400)]
[lit] Work around windows issue in new test from 28412d1800e3

Based on result shown at:

<https://lab.llvm.org/buildbot/#/builders/216/builds/10120>

22 months ago[gn build] Port 782ac2182c2b
LLVM GN Syncbot [Wed, 21 Sep 2022 17:07:56 +0000 (17:07 +0000)]
[gn build] Port 782ac2182c2b

22 months ago[HLSL] Support cbuffer/tbuffer for hlsl.
Xiang Li [Fri, 15 Jul 2022 17:45:57 +0000 (10:45 -0700)]
[HLSL] Support cbuffer/tbuffer for hlsl.

This is first part for support cbuffer/tbuffer.

The format for cbuffer/tbuffer is
BufferType [Name] [: register(b#)] { VariableDeclaration [: packoffset(c#.xyzw)]; ... };

More details at https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-constants

New keyword 'cbuffer' and 'tbuffer' are added.
New AST node HLSLBufferDecl is added.
Build AST for simple cbuffer/tbuffer without attribute support.

The special thing is variables declared inside cbuffer is exposed into global scope.
So isTransparentContext should return true for HLSLBuffer.

Reviewed By: aaron.ballman

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

22 months ago[NFC][AMDGPU] Add new v_bfi Codegen test.
Thomas Symalla [Wed, 21 Sep 2022 17:01:33 +0000 (19:01 +0200)]
[NFC][AMDGPU] Add new v_bfi Codegen test.

Pre-commit a test for an upcoming change.

22 months agoRefactor XCOFFObjectFile::getImportFileTable.
zhijian [Wed, 21 Sep 2022 16:51:38 +0000 (12:51 -0400)]
Refactor XCOFFObjectFile::getImportFileTable.

Summary:

  1. Refactor with XCOFFObjectFile::getImportFileTable with function getSectionFileOffsetToRawData instead of getLoaderSectionAddress

  2. Delete the function getLoaderSectionAddress.

Reviewers: James Henderson,Esme Yi
Differential Revision: https://reviews.llvm.org/D134280

22 months ago[CGSCC] Properly handle invalidating analyses for invalidated SCCs
Arthur Eubanks [Wed, 21 Sep 2022 16:04:06 +0000 (09:04 -0700)]
[CGSCC] Properly handle invalidating analyses for invalidated SCCs

Currently if we mark an SCC as invalid, if we haven't set UR.UpdatedC, we won't propagate the PreservedAnalyses up to the parent pass (adaptor/pass manager).

In the provided test case, we inline the function into itself then delete it as it has no users. The SCC is marked as invalid without providing a replacement UR.UpdatedC. Then the CGSCC pass manager and adaptor discard the PreservedAnalyses. Instead, handle PreservedAnalyses first before bailing due to the invalid SCC.

Fixes crashes due to out of date analyses.

22 months ago[flang] Avoid deallocation of intent(out) when dummy arg is not in entry stmt
Valentin Clement [Wed, 21 Sep 2022 16:47:41 +0000 (18:47 +0200)]
[flang] Avoid deallocation of intent(out) when dummy arg is not in entry stmt

In some case, the ENTRY statement in a procedure is including some
dummy argument. Until now, deallocation of intent(out) allocatable was
not checking for this and it could result in a segmentation fault.

This patch avoids deallocation when the value is not in the ENTRY stmt.

Reviewed By: jeanPerier, PeteSteinfeld

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

22 months ago[mlir][LLVMIR] Do not create pseudo debug file name using llvm::Instruction
Min-Yih Hsu [Mon, 19 Sep 2022 21:50:14 +0000 (14:50 -0700)]
[mlir][LLVMIR] Do not create pseudo debug file name using llvm::Instruction

Previously in mlir-translate, if debug info was absent in a
llvm::Instruction, we tried to create one using the name of its defined
value in a textual LLVM IR file as the (pseudo) debug file name.
However, in order to get that name, we need to call out to LLVM's
SlotTracker, which, surprisingly, took a lot of time. Judging from
the usefulness of such pseudo debug file name and the performance penalty
during translation, this patch simply use "imported-bitcode" as the
debug file name in these case. Eliminating the need of using (expensive)
LLVM value numbering.

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

22 months ago[llvm-profgen] Remove CommaSeparated option from perf file cl
wlei [Tue, 20 Sep 2022 16:37:43 +0000 (09:37 -0700)]
[llvm-profgen] Remove CommaSeparated option from perf file cl

There could be comma in one perf file path, since at this point it only support one file as input, there is no need for the `llvm::cl::MiscFlags::CommaSeparated` option.

Reviewed By: hoy, wenlei

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

22 months ago[mlir][tosa] Revert added support for dynamic height/weight for pooling in tosa-to...
natashaknk [Wed, 21 Sep 2022 16:29:17 +0000 (09:29 -0700)]
[mlir][tosa] Revert added support for dynamic height/weight for pooling in tosa-to-linalg

Partial rollback to D133389

Reviewed By: jpienaar

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

22 months ago[lit] Increase FileCheck verbosity temporarily
Joel E. Denny [Wed, 21 Sep 2022 16:26:11 +0000 (12:26 -0400)]
[lit] Increase FileCheck verbosity temporarily

This is to help debug the failure 28412d1800e3 caused and f47a5df92d48
failed to fix at:

<https://lab.llvm.org/buildbot/#/builders/216/builds/10117>

22 months ago[NFC][NewGVN] Remove OpIsSafeForPHIOfOpsHelper()
Konstantina [Mon, 1 Aug 2022 23:14:39 +0000 (16:14 -0700)]
[NFC][NewGVN] Remove OpIsSafeForPHIOfOpsHelper()

Reviewed By: asbirlea

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

22 months ago[llvm] prefix linker flag on non-MSVC compilers with `-Wl,`
Ashay Rane [Mon, 19 Sep 2022 07:38:47 +0000 (02:38 -0500)]
[llvm] prefix linker flag on non-MSVC compilers with `-Wl,`

Prior to this patch, a Windows build of llvm-lto using clang failed with
the error: `LTO.def: unknown file type`.  The reason for this failure is
that .DEF files are used by the linker not by the clang compiler.  The
MSVC compiler+linker handles this transparently, but if we're using
clang (or gcc), then we need to tell the compiler to forward this flag
to the linker. This patch adds the necessary `-Wl` flag to fix the
problem.

Reviewed By: rnk, mstorsjo

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

22 months ago[Sema] Reject array element types whose sizes aren't a multiple of their
Akira Hatanaka [Sat, 25 Jun 2022 20:19:52 +0000 (13:19 -0700)]
[Sema] Reject array element types whose sizes aren't a multiple of their
alignments

In the following code, the first element is aligned on a 16-byte
boundary, but the remaining elements aren't:

```
typedef char int8_a16 __attribute__((aligned(16)));
int8_a16 array[4];
```

Currently clang doesn't reject the code, but it should since it can
cause crashes at runtime. This patch also fixes assertion failures in
CodeGen caused by the changes in https://reviews.llvm.org/D123649.

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

22 months ago[lit] Try to fix new test from 28412d1800e3 under Windows
Joel E. Denny [Wed, 21 Sep 2022 16:06:41 +0000 (12:06 -0400)]
[lit] Try to fix new test from 28412d1800e3 under Windows

`llvm/utils/lit/tests/Inputs/shtest-define/value-escaped.txt` broke at
least at <https://lab.llvm.org/buildbot/#/builders/216/builds/10114>.

The problem appears to be a non-portable `echo` command line.

22 months ago[SDAG] Split handling of VPLoad/VPGather and VPStore/VPScatter [nfc]
Philip Reames [Wed, 21 Sep 2022 16:04:42 +0000 (09:04 -0700)]
[SDAG] Split handling of VPLoad/VPGather and VPStore/VPScatter [nfc]

The merged routines are not-idiomatic, and the code sharing that results is prettty minimal.  The confusion factor is not justified.

22 months ago[LangRef][Docs] Fix RST header length for GC intrinsics
J. Ryan Stinnett [Wed, 21 Sep 2022 15:52:44 +0000 (16:52 +0100)]
[LangRef][Docs] Fix RST header length for GC intrinsics

This fixes up the header length which regressed in
8c1a9e3cf37cb2aa6e67934e56796284efa42806.

22 months ago[ModuleInliner] Factor out common code in InlineOrder.cpp (NFC)
Kazu Hirata [Wed, 21 Sep 2022 15:50:30 +0000 (08:50 -0700)]
[ModuleInliner] Factor out common code in InlineOrder.cpp (NFC)

This patch factors out common code in InlineOrder.cpp.

Without this patch, the model is to ask classes like SizePriority and
CostPriority to compare a pair of call sites:

  bool hasLowerPriority(const CallBase *L, const CallBase *R) const override {

while these priority classes have their own caches of priorities:

  DenseMap<const CallBase *, PriorityT> Priorities;

This model results in a lot of duplicate code like hasLowerPriority
and updateAndCheckDecreased.

This patch changes the model so that priority classes just have two
methods to compute a priority for a given call site and to compare two
previously computed priorities (as opposed to call sites).

Facilities like hasLowerPriority and updateAndCheckDecreased move to
PriorityInlineOrder along with the map from call sites to their
priorities.  PriorityInlineOrder becomes a template class so that it
can accommodate different priority classes.

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

22 months ago[LangRef][Docs] Align RST syntax for GC intrinsics
J. Ryan Stinnett [Wed, 21 Sep 2022 15:44:58 +0000 (16:44 +0100)]
[LangRef][Docs] Align RST syntax for GC intrinsics

This changes the GC intrinsics to use the same header styling as the others.

22 months ago[lit] Implement DEFINE and REDEFINE directives
Joel E. Denny [Wed, 21 Sep 2022 15:32:05 +0000 (11:32 -0400)]
[lit] Implement DEFINE and REDEFINE directives

These directives define per-test lit substitutions.  The concept was
discussed at
<https://discourse.llvm.org/t/iterating-lit-run-lines/62596/10>.

For example, the following directives can be inserted into a test file
to define `%{cflags}` and `%{fcflags}` substitutions with empty
initial values, which serve as the parameters of another newly defined
`%{check}` substitution:

```
// DEFINE: %{cflags} =
// DEFINE: %{fcflags} =

// DEFINE: %{check} = %clang_cc1 %{cflags} -emit-llvm -o - %s | \
// DEFINE:            FileCheck %{fcflags} %s
```

The following directives then redefine the parameters before each use
of `%{check}`:

```
// REDEFINE: %{cflags} = -foo
// REDEFINE: %{fcflags} = -check-prefix=FOO
// RUN: %{check}

// REDEFINE: %{cflags} = -bar
// REDEFINE: %{fcflags} = -check-prefix=BAR
// RUN: %{check}
```

Of course, `%{check}` would typically be more elaborate, increasing
the benefit of the reuse.

One issue is that the strings `DEFINE:` and `REDEFINE:` already appear
in 5 tests.  This patch adjusts those tests not to use those strings.
Our prediction is that, in the vast majority of cases, if a test
author mistakenly uses one of those strings for another purpose, the
text appearing after the string will not happen to have the syntax
required for these directives.  Thus, the test author will discover
the mistake immediately when lit reports the syntax error.

This patch also expands the documentation on existing lit substitution
behavior.

Reviewed By: jhenderson, MaskRay, awarzynski

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

22 months ago[NFC] Add GitHub issues to HLSL FIXME comments
Chris Bieneman [Wed, 21 Sep 2022 15:29:26 +0000 (10:29 -0500)]
[NFC] Add GitHub issues to HLSL FIXME comments

In order to make this easier to track I've filed issues for each of the
HLSL FIXME comments that I can find. I may have missed some, but I want
this to be the new default mode.

22 months agoAMDGPU: Move test to correct location
Matt Arsenault [Wed, 21 Sep 2022 15:25:04 +0000 (11:25 -0400)]
AMDGPU: Move test to correct location

This is not a MIR printer/parser test, so it belongs with the ordinary
codegen tests.

22 months ago[mlir][llvm] Support pointer entries in data layout translation
rkayaith [Wed, 7 Sep 2022 16:42:52 +0000 (12:42 -0400)]
[mlir][llvm] Support pointer entries in data layout translation

This adds support for pointer DLTI entries in LLVMIR export, e.g.
```
// translated to: p0:32:64:128
#dlti.dl_entry<!llvm.ptr, dense<[32,64,128]> : vector<3xi32>>
// translated to: p1:32:32:32:64
#dlti.dl_entry<!llvm.ptr<1>, dense<[32,32,32,64]> : vector<4xi32>>
```

Reviewed By: ftynse

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

22 months agoAdd clang_CXXMethod_isDeleted function
Anders Langlands [Wed, 21 Sep 2022 15:12:48 +0000 (11:12 -0400)]
Add clang_CXXMethod_isDeleted function

Adds a function to check if a method has been deleted by copy-pasting
the existing implementation of clang_CXXMethod_isDefaulted and changing
it to call CXXMethod::isDeleted() instead.

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

22 months ago[mlir][memref] Add realloc op.
bixia1 [Wed, 21 Sep 2022 13:59:09 +0000 (06:59 -0700)]
[mlir][memref] Add realloc op.

Add memref.realloc and canonicalization of the op. Add conversion patterns for
lowering the op to LLVM using unaligned alloc or aligned alloc based on the
conversion option.

Add filecheck tests for parsing and converting the op. Add an integration test.

Reviewed By: ftynse

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

22 months ago[SLP]Fix write-after-bounds.
Alexey Bataev [Wed, 21 Sep 2022 14:18:06 +0000 (07:18 -0700)]
[SLP]Fix write-after-bounds.

Mask might be larger than the NumElts-OffsetBeg, need to use actual
indices to avoid acces out of bounds.

22 months ago[InstSimplify] Add additional simplifyWithOpReplaced() vector tests (NFC)
Nikita Popov [Wed, 21 Sep 2022 14:52:25 +0000 (16:52 +0200)]
[InstSimplify] Add additional simplifyWithOpReplaced() vector tests (NFC)

22 months ago[llvm-reduce] Update NoChunks initializer to be in line with AllChunks.
Florian Hahn [Wed, 21 Sep 2022 14:50:29 +0000 (15:50 +0100)]
[llvm-reduce] Update NoChunks initializer to be in line with AllChunks.

Without this patch, the assertion triggers below on the test case,
because we are using different oracles for the verification.

    Assertion failed: (Targets == NoChunksCounter.count() && "number of chunks changes when reducing"), function runDeltaPass, file Delta.cpp, line 272.

22 months ago[NFC][LV] Scalarizing test for masked vector calls
Graham Hunter [Tue, 20 Sep 2022 11:17:32 +0000 (12:17 +0100)]
[NFC][LV] Scalarizing test for masked vector calls

22 months ago[LoopVectorize] Fix test name - the test is for fshl not cttz intrinsic costs
Simon Pilgrim [Wed, 21 Sep 2022 14:24:33 +0000 (15:24 +0100)]
[LoopVectorize] Fix test name - the test is for fshl not cttz intrinsic costs

22 months ago[AIX] change "llvm-nm" to "env OBJECT_MODE=any llvm-nm" in clang/test for AIX OS
zhijian [Wed, 21 Sep 2022 13:38:13 +0000 (09:38 -0400)]
[AIX] change "llvm-nm" to "env OBJECT_MODE=any llvm-nm" in clang/test for AIX OS

Summary:
   since default object mode of llvm-nm is change to -X32 (from default -Xany) in patch https://reviews.llvm.org/D132494.In order not effect the test cases in clang/test we need to change "llvm-nm" to "env OBJECT_MODE=any llvm-nm" in clang/test for AIX OS

Reviewers: James Henderson,David Tenty, Hubert Tong
Differential Revision: https://reviews.llvm.org/D134284

22 months agoLICM: Pass through AssumptionCache
Matt Arsenault [Mon, 19 Sep 2022 20:54:18 +0000 (16:54 -0400)]
LICM: Pass through AssumptionCache

22 months ago[AArch64] add tests for fadd -> fma combines; NFC
Sanjay Patel [Wed, 21 Sep 2022 12:56:25 +0000 (08:56 -0400)]
[AArch64] add tests for fadd -> fma combines; NFC

The transform to create a final fma was added with:
D132837 / c98a46fee6f4043276eac

These tests are intended to show the minimal fast-math-flags
necessary to enable the fold: currently only the final fadd
needs to have "reassoc".

22 months agoAdd all constant physical registers to callee preserved masks
Alex Richardson [Tue, 20 Sep 2022 13:42:32 +0000 (13:42 +0000)]
Add all constant physical registers to callee preserved masks

This allows MachineCopyPropagation to eliminate copies of constant registers
such as zero registers. They were previously not being eliminated as the
check for MO.clobbersPhysReg(AvailSrc) would return true for constant
registers such as MIPS $zero.

To avoid having to manually add the zero registers to all CalleeSavedRegs
instantiations in tablegen, I instead added a new isConstant bit to the
Register and set this for MIPS, RISC-V, and AArch64 zero registers.
RegisterInfoEmitter.cpp looks at this flag and adds all constant registers
to the preserved register mask.

This may also benefit other passes but so far I have only seen differences
in MachineCopyPropagation. In the future it might make sense to generate
`isConstantPhysReg()` from this information.

Original source: https://github.com/CTSRD-CHERI/llvm-project/commit/8588d8b81458ed6d87b674893e7752e6a6915574

Reviewed By: arsenm

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

22 months agoAdd a baseline test for D131958
Alex Richardson [Tue, 20 Sep 2022 13:40:37 +0000 (13:40 +0000)]
Add a baseline test for D131958

This test shows that the save of MIPS $zero to a callee-saved register
is not elided by the machine-cp pass.

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

22 months ago[mlir] Move getDimsOfType to StructuredOpsUtils.h.
Oleg Shyshkov [Wed, 21 Sep 2022 12:47:21 +0000 (12:47 +0000)]
[mlir] Move getDimsOfType to StructuredOpsUtils.h.

Summary:
This change will bring all helpers that work with iterator types to one place.
Currently getDimsOfType is is declared in Linalg.h, but not directly included by
LinalgInterfaces. It worked so far only because all the places that include
LinalgInterfaces.h also include Linalg.h directly or indirectly.

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

22 months ago[CostModel][X86] Add vbmi2 costs for funnelshift/rotate intrinsics
Simon Pilgrim [Wed, 21 Sep 2022 12:48:15 +0000 (13:48 +0100)]
[CostModel][X86] Add vbmi2 costs for funnelshift/rotate intrinsics

Add costs for the funnel shift instructions - fixes some discrepancies I was hitting with costs numbers from the 'cost-tables vs llvm-mca' script D103695

22 months ago[InstCombine] don't canonicalize shl+sub to mul+add
Sanjay Patel [Wed, 21 Sep 2022 12:03:48 +0000 (08:03 -0400)]
[InstCombine] don't canonicalize shl+sub to mul+add

This stops Negator from transforming:
`C1 - shl X, C2 --> mul X, (1<<C2) + C1`
...in the general case. There does not seem to be any analysis
benefit to using mul in IR, and there's definitely downside in
codegen (particularly when the multiply has to be expanded).

If `C1` is 0, then there's a stronger argument that the single
mul is a better canonicalization than negate-of-shl, but we may
want to remove that too.

This was noted as a potential conflict for D133667.

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

22 months agoRevert "[llvm] Remove libcxx, libcxxabi and libunwind from supported LLVM_ENABLE_PROJ...
Louis Dionne [Wed, 21 Sep 2022 12:38:00 +0000 (08:38 -0400)]
Revert "[llvm] Remove libcxx, libcxxabi and libunwind from supported LLVM_ENABLE_PROJECTS"

This reverts commit 887b8bd733ea36aaa5d9b0a2b45df16c6f6bb6a4 while we
work on resolving issues brought up in https://reviews.llvm.org/D132480.

22 months ago[CostModel][X86] Add vbmi2 test coverage for funnelshift/rotate intrinsics
Simon Pilgrim [Wed, 21 Sep 2022 12:34:32 +0000 (13:34 +0100)]
[CostModel][X86] Add vbmi2 test coverage for funnelshift/rotate intrinsics

vbmi2 has vector funnel shift support that we should be costing correctly

22 months ago[CostModel][X86] Remove out of date TODO
Simon Pilgrim [Wed, 21 Sep 2022 11:55:59 +0000 (12:55 +0100)]
[CostModel][X86] Remove out of date TODO

ROTR constant and uniform-constant tests were added some time ago by 2fe1076a0888b4cdc22abc33ef2e5d9a7d8de1b1

22 months ago[clang] AST: SubstTemplateTypeParmType support for non-canonical underlying type
Matheus Izvekov [Sun, 28 Aug 2022 20:26:01 +0000 (22:26 +0200)]
[clang] AST: SubstTemplateTypeParmType support for non-canonical underlying type

This change allows us to represent in the AST some specific
circumstances where we substitute a template parameter type
which is part of the underlying type of a previous substitution.

This presently happens in some circumstances dealing with
substitution of defaulted parameters of template template
parameters, and in some other cases during concepts substitution.

The main motivation for this change is for the future use in the
implementation of template specialization resugaring, as this will
allow us to represent a substitution with sugared types.

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D132816

23 months ago[mlir] Allow negative strides and offset in StridedLayoutAttr
Ivan Butygin [Sun, 18 Sep 2022 21:34:20 +0000 (23:34 +0200)]
[mlir] Allow negative strides and offset in StridedLayoutAttr

Negative strides are useful for creating reverse-view of array. We don't have specific example for negative offset yet but will add it for consistency.

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

23 months ago[clang] [Driver] Support multiple configuration files
Michał Górny [Tue, 20 Sep 2022 09:04:06 +0000 (11:04 +0200)]
[clang] [Driver] Support multiple configuration files

Support specifying multiple configuration files via multiple `--config`
options.  When multiple files are specified, the options from subsequent
files are appended to the options from the initial file.

While at it, remove the incorrect assertion about CfgFileName being
non-empty.  It can be empty if `--config ""` is passed, and it makes
sense to report it as non-existing file rather than crash.

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

23 months ago[clang][dataflow] Remove deprecated `transfer(const Stmt *, ...)` API.
Wei Yi Tee [Wed, 21 Sep 2022 10:37:52 +0000 (10:37 +0000)]
[clang][dataflow] Remove deprecated `transfer(const Stmt *, ...)` API.

Reviewed By: gribozavr2

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

23 months ago[CostModel][X86] Add CostKinds test coverage for funnelshift/rotate intrinsics
Simon Pilgrim [Wed, 21 Sep 2022 11:00:09 +0000 (12:00 +0100)]
[CostModel][X86] Add CostKinds test coverage for funnelshift/rotate intrinsics

23 months ago[clang][dataflow] Remove deprecated overloads of `checkDataflow` in `TestingSupport.h`.
Wei Yi Tee [Wed, 21 Sep 2022 09:01:00 +0000 (09:01 +0000)]
[clang][dataflow] Remove deprecated overloads of `checkDataflow` in `TestingSupport.h`.

Reviewed By: gribozavr2

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

23 months ago[VE] Remove obsolete ANDrm patterns
Kazushi (Jam) Marukawa [Sun, 18 Sep 2022 06:26:57 +0000 (15:26 +0900)]
[VE] Remove obsolete ANDrm patterns

Remove obsolete ANDrm patterns for MIMM operands.  We add these
translations to optimize commonly used cast operations before
we support MIMM operands directly by each isntruction.  Such
translations are obsolete now.

Reviewed By: efocht

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

23 months ago[InstSimplify] Add vector tests for simplifyWithOpReplaced (NFC)
Nikita Popov [Wed, 21 Sep 2022 10:03:53 +0000 (12:03 +0200)]
[InstSimplify] Add vector tests for simplifyWithOpReplaced (NFC)

23 months ago[ISel] Enable generating more fma instructions.
Thomas Symalla [Fri, 26 Aug 2022 07:14:10 +0000 (09:14 +0200)]
[ISel] Enable generating more fma instructions.

This patch changes a FADD / FMUL => FMA ISel pattern implemented
in D80801 so that it peeks through more than one FMA.

Reviewed By: foad

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