platform/upstream/llvm.git
4 years agoAMDGPU: Don't run indexing mode switches with exec = 0
Matt Arsenault [Tue, 2 Jun 2020 13:22:40 +0000 (09:22 -0400)]
AMDGPU: Don't run indexing mode switches with exec = 0

Add mode defs rather than special casing this like some of the other
instructions.

4 years agoAMDGPU: Don't run mode switches with exec 0
Matt Arsenault [Tue, 2 Jun 2020 01:37:13 +0000 (21:37 -0400)]
AMDGPU: Don't run mode switches with exec 0

These are scalar instructions that change vector instructions, so they
should not be executed without any active lanes.

The implementation of -amdgpu-skip-threshold also seem to be backwards
from expected, since decreasing it prevents removal.

4 years ago[mlir] Provide defaults to make enabling dumping simpler
Jacques Pienaar [Tue, 2 Jun 2020 17:47:06 +0000 (10:47 -0700)]
[mlir] Provide defaults to make enabling dumping simpler

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

4 years ago[PGO] Enable memcmp/bcmp size value profiling.
Hiroshi Yamauchi [Tue, 26 May 2020 18:02:17 +0000 (11:02 -0700)]
[PGO] Enable memcmp/bcmp size value profiling.

Summary: Following up D79751.

Reviewers: davidxl

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[InstCombine] add tests for select-of-select-shuffle; NFC
Sanjay Patel [Tue, 2 Jun 2020 15:06:15 +0000 (11:06 -0400)]
[InstCombine] add tests for select-of-select-shuffle; NFC

4 years ago[InstCombine] regenerate complete test checks; NFC
Sanjay Patel [Tue, 2 Jun 2020 14:54:33 +0000 (10:54 -0400)]
[InstCombine] regenerate complete test checks; NFC

4 years ago[lldb] NFC remove DISALLOW_COPY_AND_ASSIGN
Konrad Kleine [Tue, 2 Jun 2020 16:19:55 +0000 (12:19 -0400)]
[lldb] NFC remove DISALLOW_COPY_AND_ASSIGN

Summary:
This is how I applied my clang-tidy check (see
https://reviews.llvm.org/D80531) in order to remove
`DISALLOW_COPY_AND_ASSIGN` and have deleted copy ctors and deleted
assignment operators instead.

```
lang=bash
grep DISALLOW_COPY_AND_ASSIGN /opt/notnfs/kkleine/llvm/lldb -r -l | sort | uniq > files

for i in $(cat files);
do
  clang-tidy \
    --checks="-*,modernize-replace-disallow-copy-and-assign-macro" \
    --format-style=LLVM \
    --header-filter=.* \
    --fix \
    -fix-errors \
    $i;
done
```

Reviewers: espindola, labath, aprantl, teemperor

Reviewed By: labath, aprantl, teemperor

Subscribers: teemperor, aprantl, labath, emaste, sbc100, aheejin, MaskRay, arphaman, usaxena95, lldb-commits

Tags: #lldb

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

4 years ago[Clang] Add a new warning to warn when passing uninitialized variables as const refer...
Zequan Wu [Tue, 2 Jun 2020 17:21:02 +0000 (10:21 -0700)]
[Clang] Add a new warning to warn when passing uninitialized variables as const reference parameters to a function

Summary:
Add a new warning -Wuninitialized-const-reference as a subgroup of -Wuninitialized to address a bug filed here: https://bugs.llvm.org/show_bug.cgi?id=45624

This warning is controlled by -Wuninitialized and can be disabled by -Wno-uninitialized-const-reference.
The warning is diagnosed when passing uninitialized variables as const reference parameters to a function.

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

4 years agoSupport ExtVectorType conditional operator
Min-Yih Hsu [Tue, 26 May 2020 06:27:34 +0000 (06:27 +0000)]
Support ExtVectorType conditional operator

Extension vectors now can be used in element-wise conditional selector.
For example:
```
R[i] = C[i]? A[i] : B[i]
```
This feature was previously only enabled in OpenCL C. Now it's also
available in C. Not that it has different behaviors than GNU vectors
(i.e. __vector_size__). Extension vectors selects on signdness of the
vector. GNU vectors on the other hand do normal bool conversions. Also,
this feature is not available in C++.

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

4 years ago[lldb] Skip tests exercising DW_OP_GNU_entry_value with dsymutil
Pavel Labath [Tue, 2 Jun 2020 16:22:25 +0000 (18:22 +0200)]
[lldb] Skip tests exercising DW_OP_GNU_entry_value with dsymutil

It seems that this opcode needs explicit support in dsymutil. Disable
these tests until that is implemented.

4 years ago[libc++abi] Make sure we link in CrashReporterClient.a when it's present
Louis Dionne [Tue, 2 Jun 2020 16:21:01 +0000 (12:21 -0400)]
[libc++abi] Make sure we link in CrashReporterClient.a when it's present

When building the system libc++abi for Apple, we use CrashReporterClient
to provide better crash logs when calling abort(). This is exemplified by
the fact that we test for the presence of <CrashReporterClient.h> in
abort_message.cpp.

However, we must link against CrashReporterClient.a in order to get that
functionality, otherwise we get a linking error.

4 years agoTypeSymbolEmitter.h - reduce includes to forward declarations. NFC.
Simon Pilgrim [Tue, 2 Jun 2020 15:29:16 +0000 (16:29 +0100)]
TypeSymbolEmitter.h - reduce includes to forward declarations. NFC.

4 years ago[flang] Fix release build flags.
David Truby [Fri, 29 May 2020 13:03:21 +0000 (14:03 +0100)]
[flang] Fix release build flags.

Summary:
This patch removes the custom CMAKE_RELEASE_CXX_FLAGS variable.
This variable being set was having the effect of removing other important
Release flags, notably `-DNDEBUG`.

This patch may need to be accompanied by fixes for the macOS issues that
the removed comment mentions; I don't have a mac to test this on though so
hopefully a reviewer can help with that.

Reviewers: Andrzej, tskeith, sscalpone

Subscribers: mgorny, llvm-commits

Tags: #llvm

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

4 years ago[Dexter] Add DexLimitSteps command and ConditionalController
Tom Weaver [Tue, 2 Jun 2020 15:19:43 +0000 (16:19 +0100)]
[Dexter] Add DexLimitSteps command and ConditionalController

  * Adds DexLimitSteps Command.
  * Add ConditionalController, a new DebuggerController type.
  * 5 regression tests
  * documentation

  Reviewers: jmorse

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

4 years ago[Dexter] Add os.path.normcase(...) transform to test path early.
Tom Weaver [Tue, 2 Jun 2020 15:09:17 +0000 (16:09 +0100)]
[Dexter] Add os.path.normcase(...) transform to test path early.

  When passing a test path, if the path points directly at a file, then
  normcase would not be called on path.

  This would change the expected lower case drive path, on windows, to be
  uppercase. This patch simply calls normcase on the test path at the earliest
  point possible to avoid this issue.

  Reviewers: djtodoro, jmorse

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

4 years agoReinstate the syntax tree test for 'static' in an array subscript
Dmitri Gribenko [Tue, 2 Jun 2020 15:01:50 +0000 (17:01 +0200)]
Reinstate the syntax tree test for 'static' in an array subscript

Reviewers: eduucaldas

Reviewed By: eduucaldas

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[OPENMP50]Initial codegen for 'affinity' clauses.
Alexey Bataev [Tue, 19 May 2020 20:29:36 +0000 (16:29 -0400)]
[OPENMP50]Initial codegen for 'affinity' clauses.

Summary:
Added initial codegen for 'affinity' clauses on task directives.
Emits next code:
```
kmp_task_affinity_info_t affs[<num_elems>];

void *td = __kmpc_task_alloc(..);

affs[<i>].base = &data_i;
affs[<i>].size = sizeof(data_i);
__kmpc_omp_reg_task_with_affinity(&loc, <gtid>, td, <num_elems>, affs);
```

The result returned by the call of `__kmpc_omp_reg_task_with_affinity`
function is ignored currently sincethe  runtime currently ignores args
and returns 0 uncoditionally.

Reviewers: jdoerfert

Subscribers: yaxunl, guansong, sstefan1, llvm-commits, cfe-commits, caomhin

Tags: #clang, #llvm

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

4 years agoRenamed Lang_C to Lang_C99, Lang_CXX to Lang_CXX03, and 2a to 20
Dmitri Gribenko [Tue, 2 Jun 2020 14:10:39 +0000 (16:10 +0200)]
Renamed Lang_C to Lang_C99, Lang_CXX to Lang_CXX03, and 2a to 20

Summary:
I think we would be better off with tests explicitly specifying the
language mode. Right now Lang_C means C99, but reads as "any C version",
or as "unspecified C version".

I also changed '-std=c++98' to '-std=c++03' because they are aliases (so
there is no difference in practice), because Clang implements C++03
rules in practice, and because 03 makes a nice sortable progression
between 03, 11, 14, 17, 20.

Reviewers: shafik, hlopko

Reviewed By: hlopko

Subscribers: jfb, martong, cfe-commits

Tags: #clang

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

4 years ago[yaml2obj] - Allocate the file space for SHT_NOBITS sections in some cases.
Georgii Rymar [Tue, 26 May 2020 16:05:52 +0000 (19:05 +0300)]
[yaml2obj] - Allocate the file space for SHT_NOBITS sections in some cases.

This teaches yaml2obj to allocate file space for a no-bits section
when there is a non-nobits section in the same segment that follows it.

It was discussed in D78005 thread and matches GNU linkers and LLD behavior.

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

4 years agoUse Pseudo Instruction to carry stack probing information
serge-sans-paille [Wed, 27 May 2020 15:42:28 +0000 (17:42 +0200)]
Use Pseudo Instruction to carry stack probing information

Instead of using a fake call and metadata to temporarily represent a probed
static alloca, use a pseudo instruction.

This is inspired by the SystemZ approach proposed in https://reviews.llvm.org/D78717.

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

4 years ago[AST][RecoveryExpr] Build RecoveryExpr for "undef_var" cases.
Haojian Wu [Thu, 28 May 2020 11:43:35 +0000 (13:43 +0200)]
[AST][RecoveryExpr] Build RecoveryExpr for "undef_var" cases.

Summary:
For a none-function-like unresolved expression, clang builds a TypoExpr
for it, and tries to correct it afterwards. If the typo-correction
fails, clang just drops the whole expr.

This patch improves the recovery strategy -- if the typo-correction
fails, we preserve the AST by degrading the typo exprs to recovery
exprs.

This would improve toolings for "undef_var" broken cases:
```
void foo();
void test() {
  fo^o(undef_var); // go-to-def, hover still works.
}
```

TESTED=ran tests with this patch + turn-on-recovery-ast patch, it breaks
one declare_variant_messages testcase (the diagnostics are slightly
changed), I think it is acceptable.

```
Error: 'error' diagnostics seen but not expected:
  File llvm-project/clang/test/OpenMP/declare_variant_messages.cpp Line 16: expected 'match' clause on 'omp declare variant' directive
  File llvm-project/clang/test/OpenMP/declare_variant_messages.cpp Line 57: expected 'match' clause on 'omp declare variant' directive
error: 'warning' diagnostics expected but not seen:
  File llvm-project/clang/test/OpenMP/declare_variant_messages.cpp Line 47: the context selector 'kind' in the context set 'device' cannot have a score ('<invalid>'); score ignored
  File llvm-project/clang/test/OpenMP/declare_variant_messages.cpp Line 87: the context selector 'kind' in the context set 'device' cannot have a score ('<invalid>'); score ignored
error: 'warning' diagnostics seen but not expected:
  File llvm-project/clang/test/OpenMP/declare_variant_messages.cpp Line 47: the context selector 'kind' in the context set 'device' cannot have a score ('<recovery-expr>()'); score ignored
  File llvm-project/clang/test/OpenMP/declare_variant_messages.cpp Line 87: the context selector 'kind' in the context set 'device' cannot have a score ('<recovery-expr>()'); score ignored
6 errors generated.
```

Reviewers: sammccall, jdoerfert

Subscribers: sstefan1, cfe-commits

Tags: #clang

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

4 years agoAMDGPU: Fix not using scalar loads for global reads in shaders
Matt Arsenault [Sat, 30 May 2020 23:37:57 +0000 (19:37 -0400)]
AMDGPU: Fix not using scalar loads for global reads in shaders

The pass which infers when it's legal to load a global address space
as SMRD was only considering amdgpu_kernel, and ignoring the shader
entry type calling conventions.

4 years agoRemove a comment-out llvm::errs debugging code, NFC.
Haojian Wu [Tue, 2 Jun 2020 13:40:09 +0000 (15:40 +0200)]
Remove a comment-out llvm::errs debugging code, NFC.

4 years ago[lldb] Handle a new clang built-in type
Kadir Cetinkaya [Tue, 2 Jun 2020 13:22:26 +0000 (15:22 +0200)]
[lldb] Handle a new clang built-in type

4 years agoAMDGPU: Fix clang side null pointer value for private
Matt Arsenault [Mon, 1 Jun 2020 14:31:05 +0000 (10:31 -0400)]
AMDGPU: Fix clang side null pointer value for private

The change to fold_priv_arith looks strange to me, but this was
already the untested behavior for local.

4 years ago[clangd] Copy existing includes in ReplayPreamble
Kadir Cetinkaya [Tue, 2 Jun 2020 09:52:55 +0000 (11:52 +0200)]
[clangd] Copy existing includes in ReplayPreamble

Summary:
ReplayPreamble was just grabbing the reference of IncludeStructure
passed to it and then replayed any includes seen so while exiting
built-in file.

This implies any include seen in built-in files being replayed as part
of preamble, even though they are not. This wasn't an issue until we've
started patching preambles, as includes from built-in files were not
mapped back to main-file.

This patch copies over existing includes at the time of
ReplayPreamble::attach and only replies those to prevent any includes
from the preamble patch getting mixed-in.

Reviewers: sammccall, jkorous

Subscribers: ilya-biryukov, MaskRay, dexonsmith, arphaman, usaxena95, cfe-commits

Tags: #clang

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

4 years agoRevert "[clangd] Copy existing includes in ReplayPreamble"
Kadir Cetinkaya [Tue, 2 Jun 2020 12:30:52 +0000 (14:30 +0200)]
Revert "[clangd] Copy existing includes in ReplayPreamble"

This reverts commit bff0c56ff92106afad22b54a90e1c612da4d6f99. I've
pushed the earlier version of the patch by mistake.

4 years ago[gn build] (manually) port 44f989e7809
Nico Weber [Tue, 2 Jun 2020 12:18:42 +0000 (08:18 -0400)]
[gn build] (manually) port 44f989e7809

4 years agoFix a failing test.
Igor Kudrin [Tue, 2 Jun 2020 11:50:01 +0000 (18:50 +0700)]
Fix a failing test.

4 years ago[mlir] support materialization for 1-1 type conversions
Alex Zinenko [Tue, 2 Jun 2020 11:24:04 +0000 (13:24 +0200)]
[mlir] support materialization for 1-1 type conversions

Dialect conversion infrastructure supports 1->N type conversions by requiring
individual conversions to provide facilities to generate operations
retrofitting N values into 1 of the original type when N > 1. This
functionality can also be used to materialize explicit "cast"-like operations,
but it did not support 1->1 type conversions until now. Modify TypeConverter to
support materialization of cast operations for 1-1 conversions.

This also makes materialization specification more extensible following the
same pattern as type conversions. Instead of overloading a virtual function,
users or subclasses of TypeConversion can now register type-specific
materialization callbacks that will be called in order for the given type.

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

4 years ago[clangd] Copy existing includes in ReplayPreamble
Kadir Cetinkaya [Tue, 2 Jun 2020 09:52:55 +0000 (11:52 +0200)]
[clangd] Copy existing includes in ReplayPreamble

ReplayPreamble was just grabbing the reference of IncludeStructure
passed to it and then replayed any includes seen so while exiting
built-in file.

This implies any include seen in built-in files being replayed as part
of preamble, even though they are not. This wasn't an issue until we've
started patching preambles, as includes from built-in files were not
mapped back to main-file.

This patch copies over existing includes at the time of
ReplayPreamble::attach and only replies those to prevent any includes
from the preamble patch getting mixed-in.

4 years ago[CSInfo][NFC] Interpret loaded parameter value separately
Djordje Todorovic [Tue, 2 Jun 2020 09:44:32 +0000 (11:44 +0200)]
[CSInfo][NFC] Interpret loaded parameter value separately

The collectCallSiteParameters() method searches for instructions
which load values into registers used for parameters passing.
Previously, interpretation of those values, loaded by one such
instruction, was implemented inside collectCallSiteParameters() method.

This patch moves the interpretation code from collectCallSiteParameters()
method into a separate static method named interpretValue. New method is
called from collectCallSiteParameters() to process each instruction from
targeted instruction scope.

The collectCallSiteParameters() searches for loaded parameter value
among instructions which precede the call instruction, inside the same
basic block. When needed, new method (interpretValue) could be used for
searching any instruction scope.

This is preparation for search of parameter value, loaded inside call
delay slot.

Patch by Nikola Tesic

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

4 years ago[mlir] SCFToGPUPass: fix macros referring to LOOPS to use SCF instead
Alex Zinenko [Tue, 2 Jun 2020 11:01:37 +0000 (13:01 +0200)]
[mlir] SCFToGPUPass: fix macros referring to LOOPS to use SCF instead

One header guard was overlooked when renaming LoopOps to SCF, rename it.
Also drop two unused macros, one of which referred to LoopOp (not "Ops",
hence the overlook).

4 years ago[Support] Make DataExtractor error messages more clear
Pavel Labath [Mon, 20 Apr 2020 15:28:15 +0000 (17:28 +0200)]
[Support] Make DataExtractor error messages more clear

Summary:
This is a result of the discussion at D78113. Previously we would be
only giving the current offset at which the error was detected. However,
this was phrased somewhat ambiguously (as it could also mean that end of
data was at that offset). The new error message includes the current
offset as well as the extent of the data being read.

I've changed a couple of file-level static functions into private member
functions in order to avoid passing a bunch of new arguments everywhere.

Reviewers: dblaikie, jhenderson

Subscribers: hiraditya, MaskRay, llvm-commits

Tags: #llvm

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

4 years ago[lldb/DWARF] Add support for pre-standard GNU call site attributes
Pavel Labath [Mon, 25 May 2020 12:37:04 +0000 (14:37 +0200)]
[lldb/DWARF] Add support for pre-standard GNU call site attributes

Summary:
The code changes are very straight-forward -- just handle both DW_AT_GNU
and DW_AT_call versions of all tags and attributes. There is just one
small gotcha: in the GNU version, DW_AT_low_pc was used both for the
"return pc" and the "call pc" values, depending on whether the tag was
describing a tail call, while the official scheme uses different
attributes for the two things.

Reviewers: vsk, dblaikie

Subscribers: lldb-commits

Tags: #lldb

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

4 years ago[DebugInfo] Report the format of type units [10/10]
Igor Kudrin [Tue, 2 Jun 2020 09:14:48 +0000 (16:14 +0700)]
[DebugInfo] Report the format of type units [10/10]

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

4 years ago[DebugInfo] Report the format of location and range lists [9/10]
Igor Kudrin [Tue, 2 Jun 2020 09:11:02 +0000 (16:11 +0700)]
[DebugInfo] Report the format of location and range lists [9/10]

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

4 years ago[DebugInfo] Report the format of tables in .debug_pub* sections [8/10]
Igor Kudrin [Tue, 2 Jun 2020 09:08:16 +0000 (16:08 +0700)]
[DebugInfo] Report the format of tables in .debug_pub* sections [8/10]

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

4 years ago[DebugInfo] Report the format of line tables [7/10]
Igor Kudrin [Tue, 2 Jun 2020 09:05:43 +0000 (16:05 +0700)]
[DebugInfo] Report the format of line tables [7/10]

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

4 years ago[DebugInfo] Report the format of call frame information entries [6/10]
Igor Kudrin [Tue, 2 Jun 2020 09:00:44 +0000 (16:00 +0700)]
[DebugInfo] Report the format of call frame information entries [6/10]

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

4 years ago[DebugInfo] Report the format of address range tables [5/10]
Igor Kudrin [Tue, 2 Jun 2020 08:44:47 +0000 (15:44 +0700)]
[DebugInfo] Report the format of address range tables [5/10]

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

4 years ago[DebugInfo] Report the format of address tables [4/10]
Igor Kudrin [Tue, 2 Jun 2020 08:40:56 +0000 (15:40 +0700)]
[DebugInfo] Report the format of address tables [4/10]

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

4 years ago[DebugInfo] Report the format of compilation units [3/10]
Igor Kudrin [Tue, 2 Jun 2020 08:37:25 +0000 (15:37 +0700)]
[DebugInfo] Report the format of compilation units [3/10]

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

4 years ago[DebugInfo] Report the format of .debug_names [2/10]
Igor Kudrin [Tue, 2 Jun 2020 05:31:02 +0000 (12:31 +0700)]
[DebugInfo] Report the format of .debug_names [2/10]

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

4 years ago[DebugInfo] Extract a helper function to return the DWARF format name, NFC [1/10]
Igor Kudrin [Tue, 2 Jun 2020 05:16:51 +0000 (12:16 +0700)]
[DebugInfo] Extract a helper function to return the DWARF format name, NFC [1/10]

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

4 years ago[mlir] Toy tutorial: avoid erasing and then re-creating loop terminators
Alex Zinenko [Tue, 2 Jun 2020 10:49:45 +0000 (12:49 +0200)]
[mlir] Toy tutorial: avoid erasing and then re-creating loop terminators

The lower-to-affine-loops pass in chapters 5-7 of the Toy tutorial has
been creating affine loops, erasing their terminator and creating it
anew using a PatternRewriter instance to work around the fact that
implicit terminators were created without notifying the rewriter. Now
that has been fixed in 3ccf4a5bd109, remove the code erasing and
re-creating the terminators and rely on the default ones.

4 years agoAdd missing MemoryBuffer.h include
Simon Pilgrim [Tue, 2 Jun 2020 10:24:42 +0000 (11:24 +0100)]
Add missing MemoryBuffer.h include

4 years ago[mlir] post-commit review fixes
Alex Zinenko [Tue, 2 Jun 2020 10:06:56 +0000 (12:06 +0200)]
[mlir] post-commit review fixes

This fixes several post-commit nits from D79688 and D80135, namely
typos, debug output and control flow inversion.

4 years agoTextAPIReader.h - reduce MemoryBuffer.h include to forward declaration. NFC.
Simon Pilgrim [Tue, 2 Jun 2020 09:52:39 +0000 (10:52 +0100)]
TextAPIReader.h - reduce MemoryBuffer.h include to forward declaration. NFC.

4 years agoTextAPIWriter.h - reduce MemoryBuffer.h include to forward declarations. NFC.
Simon Pilgrim [Tue, 2 Jun 2020 09:51:50 +0000 (10:51 +0100)]
TextAPIWriter.h - reduce MemoryBuffer.h include to forward declarations. NFC.

4 years ago[Sema] Fix -Wunused-variable in CreateBuiltinMatrixSubscriptExpr (NFC).
Florian Hahn [Tue, 2 Jun 2020 09:45:30 +0000 (10:45 +0100)]
[Sema] Fix -Wunused-variable in CreateBuiltinMatrixSubscriptExpr (NFC).

4 years ago[LV] Make sure the MaxVF is a power-of-2 by rounding down.
Florian Hahn [Tue, 2 Jun 2020 09:33:10 +0000 (10:33 +0100)]
[LV] Make sure the MaxVF is a power-of-2 by rounding down.

LV currently only supports power of 2 vectorization factors, which has
been made explicit with the assertion added in
840450549c9199150cbdee29acef756c19660ca1.

However, if the widest type is not a power-of-2 the computed MaxVF won't
be a power-of-2 either. This patch updates computeFeasibleMaxVF to
ensure the returned value is a power-of-2 by rounding down to the
nearest power-of-2.

Fixes PR46139.

Reviewers: Ayal, gilr, rengolin

Reviewed By: Ayal

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

4 years ago[mlir] Introduce CallOp converter for buffer placement
Ehsan Toosi [Tue, 26 May 2020 13:03:45 +0000 (15:03 +0200)]
[mlir] Introduce CallOp converter for buffer placement

Add BufferAssignmentCallOpConverter as a pattern rewriter for Buffer
Placement. It matches the signature of the caller operation with the callee
after rewriting the callee with FunctionAndBlockSignatureConverter.

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

4 years ago[EarlyCSE] Common gc.relocate calls.
Denis Antrushin [Fri, 22 May 2020 14:03:02 +0000 (17:03 +0300)]
[EarlyCSE] Common gc.relocate calls.

gc.relocate intrinsic is special in that its second and third operands
are not real values, but indices into relocate's parent statepoint list
of GC pointers.
To be CSE'd, they need special handling in `isEqual()` and `getHashCode()`.

Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D80445

4 years ago[LLDB] Mark TestCreateDuringInstructionStep as flaky on Linux
Muhammad Omair Javaid [Tue, 2 Jun 2020 09:08:10 +0000 (14:08 +0500)]
[LLDB] Mark TestCreateDuringInstructionStep as flaky on Linux

This patch marks TestCreateDuringInstructionStep.py as flakey for Linux.
This is failing randomly on arm/aarch64. I will monitor buildbot and
skip it if it fails again.

4 years ago[VectorCombine][X86] Add loaded insert tests from D80885
Simon Pilgrim [Tue, 2 Jun 2020 09:03:41 +0000 (10:03 +0100)]
[VectorCombine][X86] Add loaded insert tests from D80885

4 years ago[AST] Fix a null initializer crash for InitListExpr
Haojian Wu [Fri, 29 May 2020 21:27:05 +0000 (23:27 +0200)]
[AST] Fix a null initializer crash for InitListExpr

Summary:
The Initializer of a InitListExpr can be reset to null, which leads to
nullptr-acces crashes.

Reviewers: sammccall

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[mips] Support 64-bit relative relocations
Simon Atanasyan [Fri, 24 Apr 2020 12:41:13 +0000 (15:41 +0300)]
[mips] Support 64-bit relative relocations

MIPS 64-bit ABI does not provide special PC-relative relocation like
R_MIPS_PC32 in 32-bit case. But we can use a "chain of relocation"
defined by N64 ABIs. In that case one relocation record might contain up
to three relocations which applied sequentially. Width of a final relocation
mask applied to the result of relocation depends on the last relocation
in the chain. In case of 64-bit PC-relative relocation we need the following
chain: `R_MIPS_PC32 | R_MIPS_64`. The first relocation calculates an
offset, but does not truncate the result. The second relocation just
apply calculated result as a 64-bit value.

The 64-bit PC-relative relocation might be useful in generation of
`.eh_frame` sections to escape passing `-Wl,-z,notext` flags to linker.

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

4 years agoRun syntax tree tests in many language modes
Dmitri Gribenko [Tue, 2 Jun 2020 08:30:01 +0000 (10:30 +0200)]
Run syntax tree tests in many language modes

Reviewers: hlopko, eduucaldas

Reviewed By: hlopko, eduucaldas

Subscribers: gribozavr2, mgorny, cfe-commits

Tags: #clang

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

4 years ago[VE] Support I32/F32 registers in assembler parser
Kazushi (Jam) Marukawa [Tue, 2 Jun 2020 08:22:30 +0000 (10:22 +0200)]
[VE] Support I32/F32 registers in assembler parser

Summary:
Support I32/F32 registers in assembler parser and add regression tests of LD/ST
instructions.

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

4 years ago[llvm-exegesis] Fix D80610.
Clement Courbet [Tue, 2 Jun 2020 07:36:11 +0000 (09:36 +0200)]
[llvm-exegesis] Fix D80610.

Summary:
Using a .data() member on a StringRef was discarding the StringRef
size, breaking llvm-exegesis on machines with counter sums (e.g.
Zen2).

Reviewers: oontvoo

Subscribers: mstojanovic, llvm-commits

Tags: #llvm

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

4 years ago[NFC][ARM][AArch64] Test runs
Sam Parker [Tue, 2 Jun 2020 08:04:20 +0000 (09:04 +0100)]
[NFC][ARM][AArch64] Test runs

Add code size tests runs for memory ops for both architectures.

4 years ago[OpenMP][OMPT] Fix and add event callbacks for detached tasks
Joachim Protze [Mon, 1 Jun 2020 12:49:45 +0000 (14:49 +0200)]
[OpenMP][OMPT] Fix and add event callbacks for detached tasks

The OpenMP spec has the task-fulfill event for a call to omp_fulfill_event.
If the task did not yet finish execution, ompt_task_early_fulfill is used,
otherwise ompt_task_late_fulfill.
If a task does not complete, when the execution finishes (i.e., the task goes
in detached mode), ompt_task_detach instead of ompt_task_complete must be
used, when the next task is scheduled.

A test for both cases is included, which only work with clang-11+

Reviewed By: hbae

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

4 years agoOptions for Basic Block Sections, enabled in D68063 and D73674.
Sriraman Tallam [Tue, 2 Jun 2020 06:17:29 +0000 (23:17 -0700)]
Options for Basic Block Sections, enabled in D68063 and D73674.

This patch adds clang options:
-fbasic-block-sections={all,<filename>,labels,none} and
-funique-basic-block-section-names.
LLVM Support for basic block sections is already enabled.

+ -fbasic-block-sections={all, <file>, labels, none} : Enables/Disables basic
block sections for all or a subset of basic blocks. "labels" only enables
basic block symbols.
+ -funique-basic-block-section-names: Enables unique section names for
basic block sections, disabled by default.

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

4 years ago[StatepointLowering] Handle UNDEF gc values.
Denis Antrushin [Thu, 28 May 2020 12:26:56 +0000 (15:26 +0300)]
[StatepointLowering] Handle UNDEF gc values.

Do not spill UNDEF GC values. Instead, replace corresponding
gc.relocate intrinsic with an (arbitrary, but recognizable) constant.

Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D80714

4 years ago[GlobalISel] Combine scalar unmerge(trunc)
Dominik Montada [Thu, 7 May 2020 10:27:57 +0000 (12:27 +0200)]
[GlobalISel] Combine scalar unmerge(trunc)

Summary:
Combine unmerge(trunc) to enable other merge combines.
Without this combine, the scalar unmerge(trunc(merge))
pattern cannot be combined and easily lead to
hard-to-legalize merge/unmerge artifacts.

Reviewed By: arsenm

Tags: #llvm

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

4 years ago[NFC] Move vector unmerge(trunc) combine to function
Dominik Montada [Tue, 2 Jun 2020 06:49:37 +0000 (08:49 +0200)]
[NFC] Move vector unmerge(trunc) combine to function

In preparation of D79567, move arsenm's vector unmerge(trunc)
combine to a new function `tryFoldUnmergeCast`

4 years ago[ObjectYAML][DWARF] Let `dumpPubSection` return `DWARFYAML::PubSection`.
Xing GUO [Tue, 2 Jun 2020 06:38:15 +0000 (14:38 +0800)]
[ObjectYAML][DWARF] Let `dumpPubSection` return `DWARFYAML::PubSection`.

Summary: This patch addresses comments in [D80722](https://reviews.llvm.org/D80722#inline-742353)

Reviewers: grimar, jhenderson

Reviewed By: grimar, jhenderson

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[mlir][SCFToGPU] Remove conversions from scf.for to gpu.launch.
MaheshRavishankar [Tue, 2 Jun 2020 05:42:33 +0000 (22:42 -0700)]
[mlir][SCFToGPU] Remove conversions from scf.for to gpu.launch.

Keeping in the affine.for to gpu.launch conversions, which should
probably be the affine.parallel to gpu.launch conversion as well.

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

4 years ago[ELF] --wrap: don't error `undefined reference to __real_foo` (--no-allow-shlib-undef...
Fangrui Song [Tue, 2 Jun 2020 05:57:43 +0000 (22:57 -0700)]
[ELF] --wrap: don't error `undefined reference to __real_foo` (--no-allow-shlib-undefined) if foo is a wrapped definition

This is a regression after D51283.

Also, export `foo` if `__real_foo` is referenced by a shared object.

4 years ago[BrachProbablityInfo] Proportional distribution of reachable probabilities
Yevgeny Rouban [Tue, 2 Jun 2020 04:28:12 +0000 (11:28 +0700)]
[BrachProbablityInfo] Proportional distribution of reachable probabilities

When fixing probability of unreachable edges in
BranchProbabilityInfo::calcMetadataWeights() proportionally distribute
remainder probability over the reachable edges. The old implementation
distributes the remainder probability evenly.
See examples in the fixed tests.

Reviewers: yamauchi, ebrevnov
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D80611

4 years agoFix violations of [basic.class.scope]p2.
Richard Smith [Tue, 2 Jun 2020 04:10:27 +0000 (21:10 -0700)]
Fix violations of [basic.class.scope]p2.

These cases all follow the same pattern:

struct A {
  friend class X;
  //...
  class X {};
};

But 'friend class X;' injects 'X' into the surrounding namespace scope,
rather than introducing a class member. So the second 'class X {}' is a
completely different type, which changes the meaning of the earlier name
'X' from '::X' to 'A::X'.

Additionally, the friend declaration is pointless -- members of a class
don't need to be befriended to be able to access private members.

4 years ago[X86] Fix a few recursivelyDeleteUnusedNodes calls that were trying to delete nodes...
Craig Topper [Tue, 2 Jun 2020 04:53:19 +0000 (21:53 -0700)]
[X86] Fix a few recursivelyDeleteUnusedNodes calls that were trying to delete nodes before their user was really gone.

We looked through a truncate to get to the load. So we should be
deleting the truncate first.

There is a check that the node is really unused before deleting
so this didn't cause a functional issue.

4 years ago[BrachProbablityInfo] Rename loop variables. NFC
Yevgeny Rouban [Tue, 2 Jun 2020 03:55:27 +0000 (10:55 +0700)]
[BrachProbablityInfo] Rename loop variables. NFC

4 years ago[asan] fix a comment typo
Kostya Serebryany [Tue, 2 Jun 2020 00:40:23 +0000 (17:40 -0700)]
[asan] fix a comment typo

4 years agoadd debug code to chase down a rare crash in asan/lsan https://github.com/google...
Kostya Serebryany [Tue, 2 Jun 2020 00:33:49 +0000 (17:33 -0700)]
add debug code to chase down a rare crash in asan/lsan https://github.com/google/sanitizers/issues/1193

Summary: add debug code to chase down a rare crash in asan/lsan https://github.com/google/sanitizers/issues/1193

Reviewers: vitalybuka

Subscribers: #sanitizers, llvm-commits

Tags: #sanitizers

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

4 years agoFix how cc1 command line options are mapped into FP options.
John McCall [Tue, 2 Jun 2020 01:02:02 +0000 (21:02 -0400)]
Fix how cc1 command line options are mapped into FP options.

Canonicalize on storing FP options in LangOptions instead of
redundantly in CodeGenOptions.  Incorporate -ffast-math directly
into the values of those LangOptions rather than considering it
separately when building FPOptions.  Build IR attributes from
those options rather than a mix of sources.

We should really simplify the driver/cc1 interaction here and have
the driver pass down options that cc1 directly honors.  That can
happen in a follow-up, though.

Patch by Michele Scandale!
https://reviews.llvm.org/D80315

4 years ago[COFF] Free some memory used for chunks
Reid Kleckner [Tue, 2 Jun 2020 01:46:51 +0000 (18:46 -0700)]
[COFF] Free some memory used for chunks

First, do not reserve numSections in the Chunks array. In cases where
there are many non-prevailing sections, this will overallocate memory
which will not be used.

Second, free the memory for sparseChunks after initializeSymbols. After
that, it is never used.

This saves 50MB of 627MB for my use case without affecting performance.

4 years agoFix UB in EmulateInstructionARM64.cpp
Adrian Prantl [Mon, 1 Jun 2020 21:23:04 +0000 (14:23 -0700)]
Fix UB in EmulateInstructionARM64.cpp

This fixes an unhandled signed integer overflow in AddWithCarry() by
using the llvm::checkedAdd() function. Thats to Vedant Kumar for the
suggestion!

<rdar://problem/60926115>

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

4 years ago[os_log][test] Remove -O1 from a test, NFC
Vedant Kumar [Mon, 1 Jun 2020 23:54:16 +0000 (16:54 -0700)]
[os_log][test] Remove -O1 from a test, NFC

4 years ago[docs] Sketch outline for HowToUpdateDebugInfo.rst
Vedant Kumar [Sat, 16 May 2020 00:13:18 +0000 (17:13 -0700)]
[docs] Sketch outline for HowToUpdateDebugInfo.rst

Summary:
Sketch the outline for a new document that explains how to update debug
info in various kinds of code transformations.

Some of the guidelines that belong in HowToUpdateDebugInfo.rst were in
SourceLevelDebugging.rst already under the debugify section. It seems
like the distinction between the two docs ought to be that the former is
more prescriptive, while the latter is more descriptive.

To that end I've consolidated the "how to update debug info" guidelines
which were in SourceLevelDebugging.rst into the new doc, along with the
information about using "debugify" to test transformations. Since we've
added a mir-debugify pass, I've described that as well.

Reviewers: aprantl, jmorse, chrisjackson, dsanders

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[AArch64][GlobalISel] Split G_GLOBAL_VALUE into ADRP + G_ADD_LOW and optimize.
Amara Emerson [Fri, 29 May 2020 19:35:36 +0000 (12:35 -0700)]
[AArch64][GlobalISel] Split G_GLOBAL_VALUE into ADRP + G_ADD_LOW and optimize.

The concept of G_GLOBAL_VALUE is nice and simple, but always using it as the
representation for global var addressing until selection time creates some
problems in optimizing accesses in certain code/relocation models.

The problem comes from trying to optimize adrp -> add -> load/store sequences
in the most common "small" code model. These accesses can be optimized into an
adrp -> load with the add offset being folded into the load's immediate field.
If we try to keep all global var references as a single generic instruction
then by the time we get to the complex operand trying to match these, we end up
generating an adrp at the point of use. The real issue here is that we don't
have any form of CSE during selection, so the code size will bloat from many
redundant adrp's.

This patch custom legalizes small code mode non-GOT G_GLOBALs into target ADRP
and a new "target specific generic opcode" G_ADD_LOW. We also teach the
localizer to localize these instructions via the custom hook that was added
recently. Finally, the complex pattern for indexed loads/stores is extended to
try to fold these G_ADD_LOW instructions into the load immediate.

On -O0 CTMark, we see a 0.8% geomean code size improvement. We should also see
some minor performance improvements too.

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

4 years ago[AArch64] Fix CollectLOH creating an AdrpAdd LOH when there's a live used reg
Amara Emerson [Fri, 29 May 2020 19:30:20 +0000 (12:30 -0700)]
[AArch64] Fix CollectLOH creating an AdrpAdd LOH when there's a live used reg
between the two instructions.

If there's a pattern like:
$xA = ADRP foo @PAGE
[some killing use of reg Xb]
$Xb = ADDXri $Xa, 0, @PAGEOFF

CollectLOH would create an AdrpAdd LOH that resulted in the linker optimizing
this sequence into:
$xB = ADR foo
[some killing use of reg $Xb]
... and therefore clobbers the live $Xb register that was used by the
instruction in between.

This was discovered by a GlobalISel patch D78465 which broke up global variable
accesses into two pseudos, which in some cases could be moved apart.

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

4 years ago[LiveDebugValues] Remove early-exit when testing regmasks, NFC
Vedant Kumar [Sat, 30 May 2020 05:47:08 +0000 (22:47 -0700)]
[LiveDebugValues] Remove early-exit when testing regmasks, NFC

In transferRegisterDef, if the instruction has a regmask attached, we'll
check if any currently used register is clobbered by the regmask.

The early exit in this scan isn't necessary, costs a set lookup, and is
almost never taken [1]. Delete it.

[1]
http://lab.llvm.org:8080/coverage/coverage-reports/coverage/Users/buildslave/jenkins/workspace/coverage/llvm-project/llvm/lib/CodeGen/LiveDebugValues.cpp.html#L1136

4 years agoAMDGPU: Change internal tracking of wave size
Matt Arsenault [Mon, 1 Jun 2020 17:16:58 +0000 (13:16 -0400)]
AMDGPU: Change internal tracking of wave size

Store the log2 wave size instead of forcing division and log2
operations when querying either.

4 years agoUpdated synopsis of <atomic> to match what is implemented
Olivier Giroux [Mon, 1 Jun 2020 21:30:13 +0000 (14:30 -0700)]
Updated synopsis of <atomic> to match what is implemented

4 years agoClean up clang/test/CodeGenObjC/os_log.m
Akira Hatanaka [Sat, 30 May 2020 01:08:09 +0000 (18:08 -0700)]
Clean up clang/test/CodeGenObjC/os_log.m

Don't run optimization passes at -O2 and remove unneeded #ifdef and test
cases.

4 years ago[analyzer][MallocChecker] Fix the incorrect retrieval of the from argument in realloc()
Kirstóf Umann [Mon, 1 Jun 2020 20:03:05 +0000 (22:03 +0200)]
[analyzer][MallocChecker] Fix the incorrect retrieval of the from argument in realloc()

In the added testfile, the from argument was recognized as
&Element{SymRegion{reg_$0<long * global_a>},-1 S64b,long}
instead of
reg_$0<long * global_a>.

4 years ago[libc++] Add assertions on OOB accesses in std::array when the debug mode is enabled
Louis Dionne [Mon, 1 Jun 2020 20:35:42 +0000 (16:35 -0400)]
[libc++] Add assertions on OOB accesses in std::array when the debug mode is enabled

Like we do for empty std::array, make sure we have assertions in place
for obvious out-of-bounds issues in std::array when the debug mode is
enabled (which isn't by default).

4 years ago[PowerPC] Add clang option -m[no-]pcrel
Lei Huang [Thu, 28 May 2020 20:30:47 +0000 (15:30 -0500)]
[PowerPC] Add clang option -m[no-]pcrel

Summary:
Add user-facing front end option to turn off pc-relative memops.
This will be compatible with gcc.

Reviewers: stefanp, nemanjai, hfinkel, power-llvm-team, #powerpc, NeHuang, saghir

Reviewed By: stefanp, NeHuang, saghir

Subscribers: saghir, wuzish, shchenz, cfe-commits, kbarton, echristo

Tags: #clang, #powerpc

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

4 years ago[libc++] NFC: Minor refactoring in std::array
Louis Dionne [Mon, 1 Jun 2020 20:28:44 +0000 (16:28 -0400)]
[libc++] NFC: Minor refactoring in std::array

4 years ago[OpenMP] Replace Clang's OpenMP RTL Definitions with OMPKinds.def
Joseph Huber [Mon, 1 Jun 2020 20:23:10 +0000 (16:23 -0400)]
[OpenMP] Replace Clang's OpenMP RTL Definitions with OMPKinds.def

Summary: This changes Clang's generation of OpenMP runtime functions to use the types and functions defined in OpenMPKinds and OpenMPConstants. New OpenMP runtime function information should now be added to OMPKinds.def. This patch also changed the definitions of __kmpc_push_num_teams and __kmpc_copyprivate to match those found in the runtime.

Reviewers: jdoerfert

Reviewed By: jdoerfert

Subscribers: jfb, AndreyChurbanov, openmp-commits, fghanim, hiraditya, sstefan1, cfe-commits, llvm-commits

Tags: #openmp, #clang, #llvm

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

4 years ago[PDB] Share code to relocate .debug$[SF] sections, NFC
Reid Kleckner [Mon, 1 Jun 2020 20:12:06 +0000 (13:12 -0700)]
[PDB] Share code to relocate .debug$[SF] sections, NFC

Sink relocateDebugChunk near the only call site.

4 years agoFor --relativenames, ignore directory 0, which is the comp_dir.
Sterling Augustine [Mon, 18 May 2020 22:54:55 +0000 (15:54 -0700)]
For --relativenames, ignore directory 0, which is the comp_dir.

Update for upstream comments. Improve test by writing all the debug
info by hand.

Reviewers: dblaikie, jhenderson

Subscribers: hiraditya, MaskRay, rupprecht, llvm-commits

Tags: #llvm

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

4 years ago[lldb/Test] Add test for man page and lldb --help output
Jonas Devlieghere [Mon, 1 Jun 2020 20:04:32 +0000 (13:04 -0700)]
[lldb/Test] Add test for man page and lldb --help output

4 years ago[llvm][NFC] Cache FAM in InlineAdvisor
Mircea Trofin [Thu, 21 May 2020 15:40:49 +0000 (08:40 -0700)]
[llvm][NFC] Cache FAM in InlineAdvisor

Summary:
This simplifies the interface by storing the function analysis manager
with the InlineAdvisor, and, thus, not requiring it be passed each time
we inquire for an advice.

Reviewers: davidxl, asbirlea

Subscribers: eraman, hiraditya, llvm-commits

Tags: #llvm

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

4 years agoAdd DIAError.h to list of headers excluded from the LLVM_DebugInfo_PDB module
Daniel Grumberg [Fri, 29 May 2020 15:34:07 +0000 (16:34 +0100)]
Add DIAError.h to list of headers excluded from the LLVM_DebugInfo_PDB module

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

4 years ago[libc] Expose APIGenerator.
Paula Toth [Mon, 1 Jun 2020 19:27:25 +0000 (12:27 -0700)]
[libc] Expose APIGenerator.

Summary: This is split off from D79192 and exposes APIGenerator (renames to APIIndexer) for use in generating the integrations tests.

Reviewers: sivachandra

Reviewed By: sivachandra

Subscribers: tschuett, ecnelises, libc-commits

Tags: #libc-project

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

4 years ago[PDB] Use inlinee file checksum offsets directly
Reid Kleckner [Mon, 1 Jun 2020 18:34:09 +0000 (11:34 -0700)]
[PDB] Use inlinee file checksum offsets directly

The inlinees section contains references to the file checksum table. The
file checksum table in the PDB must have the same layout as the file
checksum table in the object file, so all the existing file id
references should stay valid.

Previously, we would do this:
  for all inlined functions:
    - lookup filename from checksum and string table
    - make that filename absolute
    - look up the new file id for that filename up in the new checksum
      table

This lead to pdbMakeAbsolute and remove_dots ending up in the hot path.
We should only need to absolutify the source path once, not once every
time we process an inline function from that source file.

This speeds up linking chrome PGO stage 1 net_unittests.exe from 9.203s
to 8.500s (-7.6%). Looking just at time to process symbol records, it
goes from ~2000ms to ~1300ms, which is consistent with the overall
speedup of about 700ms. This will be less noticeable in debug builds,
which have fewer inlined functions records.

4 years ago[Matrix] Implement matrix index expressions ([][]).
Florian Hahn [Mon, 1 Jun 2020 18:42:03 +0000 (19:42 +0100)]
[Matrix] Implement matrix index expressions ([][]).

This patch implements matrix index expressions
(matrix[RowIdx][ColumnIdx]).

It does so by introducing a new MatrixSubscriptExpr(Base, RowIdx, ColumnIdx).
MatrixSubscriptExprs are built in 2 steps in ActOnMatrixSubscriptExpr. First,
if the base of a subscript is of matrix type, we create a incomplete
MatrixSubscriptExpr(base, idx, nullptr). Second, if the base is an incomplete
MatrixSubscriptExpr, we create a complete
MatrixSubscriptExpr(base->getBase(), base->getRowIdx(), idx)

Similar to vector elements, it is not possible to take the address of
a MatrixSubscriptExpr.
For CodeGen, a new MatrixElt type is added to LValue, which is very
similar to VectorElt. The only difference is that we may need to cast
the type of the base from an array to a vector type when accessing it.

Reviewers: rjmccall, anemet, Bigcheese, rsmith, martong

Reviewed By: rjmccall

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