Sam McCall [Tue, 15 Dec 2020 13:17:44 +0000 (14:17 +0100)]
[clangd] Oops, fix code in #ifdef WIN32
Jun Ma [Tue, 15 Dec 2020 09:20:55 +0000 (17:20 +0800)]
[InstCombine] Remove scalable vector restriction in foldVectorBinop
Differential Revision: https://reviews.llvm.org/D93289
Sam McCall [Tue, 15 Dec 2020 13:00:03 +0000 (14:00 +0100)]
Reland [clangd] Extract per-dir CDB cache to its own threadsafe class. NFC
This reverts commit
4d956af594c5adc9d566d1846d86dd89c70c9c0b.
Assertion failures on windows fixed by
965d71c69acce658e9e3de00b25a351b00937820
Sam McCall [Tue, 15 Dec 2020 12:58:08 +0000 (13:58 +0100)]
[clangd] Avoid traversing C:\ -> C: when looking for CDBs
Boost in its infinite wisdom considers C: a parent of C:\, and we've
inherited that. This breaks the assumption that after canonicalizing a
path, the path parents are the directory's parents.
Florian Hahn [Tue, 15 Dec 2020 12:51:28 +0000 (12:51 +0000)]
[LV] Pass explicit vector width to not require a X86 target.
Chuanqi Xu [Tue, 15 Dec 2020 12:50:38 +0000 (20:50 +0800)]
[clang-format] Recognize c++ coroutine keywords as unary operator to avoid misleading pointer alignment
Summary: The clang-format may go wrong when handle c++ coroutine keywords and pointer.
The default value for PointerAlignment is PAS_Right. So the following format is good:
```
co_return *a;
```
But within some code style, the value for PointerAlignment is PAS_Left, the behavior goes wrong:
```
co_return* a;
```
test-plan: check-clang
reviewers: MyDeveloperDay
Differential Revision: https://reviews.llvm.org/D91245
Jun Ma [Mon, 14 Dec 2020 06:42:55 +0000 (14:42 +0800)]
[InstCombine][NFC] Change cast of FixedVectorType to dyn_cast.
Jun Ma [Tue, 15 Dec 2020 03:37:10 +0000 (11:37 +0800)]
[InstCombine] Remove scalable vector restriction in InstCombineCompares
Differential Revision: https://reviews.llvm.org/D93269
Jun Ma [Fri, 11 Dec 2020 03:29:47 +0000 (11:29 +0800)]
[InstCombine] Remove scalable vector restriction when fold SelectInst
Differential Revision: https://reviews.llvm.org/D93083
Hsiangkai Wang [Fri, 11 Dec 2020 08:08:10 +0000 (16:08 +0800)]
[RISCV] Define vwadd/vwaddu/vwsub/vwsubu intrinsics.
Define vwadd/vwaddu/vwsub/vwsubu intrinsics and lower to V instructions.
Authored-by: Roger Ferrer Ibanez <rofirrim@gmail.com>
Co-Authored-by: Hsiangkai Wang <kai.wang@sifive.com>
Differential Revision: https://reviews.llvm.org/D93108
Paul Walker [Sat, 24 Oct 2020 10:23:10 +0000 (11:23 +0100)]
[SVE] Move INT_TO_FP i1 promotion into custom lowering.
AddPromotedToType is being used to legalise INT_TO_FP operations
when the source is a predicate. The point where this introduces
vector extends might cause problems in the future so this patch
falls back to manual promotion within custom lowering.
Differential Revision: https://reviews.llvm.org/D90093
Paul Walker [Thu, 3 Dec 2020 12:26:29 +0000 (12:26 +0000)]
[CodeGenPrepare] Update optimizeGatherScatterInst for scalable vectors.
optimizeGatherScatterInst does nothing specific to fixed length vectors
but uses FixedVectorType to extract the number of elements. This patch
simply updates the code to use VectorType and getElementCount instead.
For testing I just copied Transforms/CodeGenPrepare/X86/gather-scatter-opt.ll
replacing `<4 x ` with `<vscale x 4`.
Differential Revision: https://reviews.llvm.org/D92572
Simon Pilgrim [Mon, 14 Dec 2020 17:54:49 +0000 (17:54 +0000)]
[X86] Remove trailing whitespace. NFC.
Simon Pilgrim [Mon, 14 Dec 2020 17:49:33 +0000 (17:49 +0000)]
[X86][AVX] LowerBUILD_VECTOR - reduce 256/512-bit build vectors with zero/undef upper elements + pad.
As discussed on D92645, we don't do a good job of recognising when we don't require the full width of a ymm/zmm build vector because the upper elements are undef/zero.
This commit allows us to make use of implicit zeroing of upper elements with AVX instructions, which we emulate in DAG with a INSERT_SUBVECTOR into the bottom of a undef/zero vector of the original type.
This exposed a limitation in getTargetConstantBitsFromNode which didn't extract bits from INSERT_SUBVECTORs of different element widths which I've included as well to prevent a couple of regressions.
Florian Hahn [Tue, 15 Dec 2020 09:39:47 +0000 (09:39 +0000)]
[LV] Add reduction test, which exposed a crash in a pending patch.
Florian Hahn [Tue, 15 Dec 2020 09:30:14 +0000 (09:30 +0000)]
[VPlan] Use VPDef for VPWidenGEPRecipe.
This patch turns updates VPWidenGEPRecipe to manage the value it defines
using VPDef. The VPValue is used during VPlan construction and
codegeneration instead of the plain IR reference where possible.
Reviewed By: gilr
Differential Revision: https://reviews.llvm.org/D90561
Florian Hahn [Tue, 15 Dec 2020 09:11:24 +0000 (09:11 +0000)]
[VPlan] Use VPdef for VPWidenCall.
This patch turns updates VPWidenREcipe to manage the value it defines
using VPDef.
Reviewed By: gilr
Differential Revision: https://reviews.llvm.org/D90559
Jan Svoboda [Tue, 15 Dec 2020 08:59:19 +0000 (09:59 +0100)]
[clang][cli] Squash multiple cc1 -fxxx-exceptions flags into single -exception-model=xxx option
This patch enables marshalling of the exception model options while enforcing their mutual exclusivity. The clang driver interface remains the same, this only affects the cc1 command line.
Depends on D93215.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D93216
Jan Svoboda [Tue, 15 Dec 2020 08:41:11 +0000 (09:41 +0100)]
[clang][cli] Squash exception model in LangOptions into one member
This squashes multiple members in LangOptions into one. This is leveraged in a follow-up patch that implements marshalling of related command-line options.
Depends on D93214.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D93215
Jan Svoboda [Mon, 14 Dec 2020 12:08:48 +0000 (13:08 +0100)]
[clang][cli] Create accessors for exception models in LangOptions
This abstracts away the members that are being replaced in a follow-up patch.
Depends on D83979.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D93214
xndcn [Tue, 15 Dec 2020 08:45:56 +0000 (09:45 +0100)]
[clangd] Add hover info for `this` expr
How about add hover information for `this` expr?
It seems useful to show related information about the class for `this` expr sometimes.
Reviewed By: sammccall
Differential Revision: https://reviews.llvm.org/D92041
Kazushi (Jam) Marukawa [Sat, 12 Dec 2020 03:27:32 +0000 (12:27 +0900)]
[VE] Support atomic exchange instructions
Support atomic exchange and atomic compare and exchange instructions.
Change CAS and TS1AM instructions for ISel patterns. Add selectADDRzi
pattern for them. Add TS1AM pseudo instruction also for better ISel.
Add shouldExpandAtomicRMWInIR() function to expand all atomicrmw
instructions except atomicrmw xchg. Add custom lower for i8/i16
atomicrmw xchg. Modify replaceFI to support CAS/TS1AM instructions
which use "reg+disp" operands instead of "reg+imm+disp" operands.
And, add several regression tests to check the correctness.
Reviewed By: simoll
Differential Revision: https://reviews.llvm.org/D93161
Hsiangkai Wang [Tue, 15 Dec 2020 05:49:54 +0000 (13:49 +0800)]
[RISCV][NFC] Define scalable vectors for half types.
This is a preperation work for vfadd intrinsics.
Differential Revision: https://reviews.llvm.org/D93275
Georgii Rymar [Mon, 14 Dec 2020 15:04:45 +0000 (18:04 +0300)]
[llvm-readelf] - Don't print OS/Processor specific prefix for known ELF file types.
This is a change suggested in post commit comments for
D93096 (https://reviews.llvm.org/D93096#2451796).
Imagine we want to add a custom OS specific ELF file type.
For that we can update the `ElfObjectFileType` array:
```
static const EnumEntry<unsigned> ElfObjectFileType[] = {
...
{"Core", "CORE (Core file)", ELF::ET_CORE},
{"MyType", "MyType (my description)", 0xfe01},
};
```
The current code then might print:
```
OS Specific: (MyType (my description))
```
Though instead we probably would like to see a nicer output, e.g:
```
Type: MyType (my description)
```
To achieve that we can reorder the code slightly.
It is impossible to add a test I think, because we have no custom values in
the `ElfObjectFileType` array in LLVM.
Differential revision: https://reviews.llvm.org/D93217
Max Kazantsev [Tue, 15 Dec 2020 07:40:17 +0000 (14:40 +0700)]
[SCEV] Add missing type check into getRangeForAffineNoSelfWrappingAR
We make type widening without checking if it's needed. Bail if the max
iteration count is wider than AR's type.
Amara Emerson [Mon, 14 Dec 2020 23:25:35 +0000 (15:25 -0800)]
[GlobalISel][IRTranslator] Ensure branch probabilities are added when translating invoke edges.
This uses a straightforward port of findUnwindDestinations() from SelectionDAG.
Differential Revision: https://reviews.llvm.org/D93256
Kazu Hirata [Tue, 15 Dec 2020 07:00:17 +0000 (23:00 -0800)]
[IR] Remove isPowerOf2ByteWidth
The predicate used to be used with the C backend, which was removed on
Mar 23, 2012 in commit
64a232343aa649fdacf78698da3e4d5737dee56a. It
seems to be unused since then.
Max Kazantsev [Tue, 15 Dec 2020 06:46:09 +0000 (13:46 +0700)]
[Test] Test on assertion failure with expensive SCEV range inference
Kazu Hirata [Tue, 15 Dec 2020 06:40:13 +0000 (22:40 -0800)]
[Analysis] Use llvm::erase_value (NFC)
Raul Tambre [Tue, 15 Dec 2020 06:15:58 +0000 (08:15 +0200)]
Re-apply "[CMake][compiler-rt][AArch64] Avoid preprocessing LSE builtins separately"
aa772fc85e0f526615c78b9c3979c2be945a754c (D92530) has landed fixing relocations on Darwin.
3000c19df64f89ff319590f3a6e4d6b93d20983d (D93236) has landed working around an assembly parser bug on Darwin.
Previous quick-fix
d9697c2e6b153ac7dc40a69450d9b672f71b1029 (D93198) included in this commit.
Invoking the preprocessor ourselves is fragile and would require us to replicate CMake's handling of definitions, compiler flags, etc for proper compatibility.
In my toolchain builds this notably resulted in a bunch of warnings from unused flags as my CMAKE_C_FLAGS includes CPU-specific optimization options.
Notably this part was already duplicating the logic for VISIBILITY_HIDDEN define.
Instead, symlink the files and set the proper set of defines on each.
This should also be faster as we avoid invoking the compiler multiple times.
Fixes https://llvm.org/PR48494
Differential Revision: https://reviews.llvm.org/D93278
Raul Tambre [Tue, 15 Dec 2020 06:12:44 +0000 (08:12 +0200)]
[Compiler-rt][AArch64] Workaround for .cfi_startproc assembler parser bug.
Put .cfi_startproc on a new line to avoid hitting the assembly parser bug in MasmParser::parseDirectiveCFIStartProc().
Reviewed By: tambre
Differential Revision: https://reviews.llvm.org/D93236
Med Ismail Bennani [Tue, 15 Dec 2020 02:40:47 +0000 (03:40 +0100)]
[lldb/API] Expose Target::CreateBreakpoint(..., move_to_nearest_code) overload
This patch exposes the Target::CreateBreakpoint overload with the
boolean argument to move to the neareast code to the SBAPI.
This is useful when creating column breakpoints to restrict lldb's
resolution to the pointed source location, preventing it to go to the next
line.
rdar://
72196842
Differential Revision: https://reviews.llvm.org/D93266
Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
Med Ismail Bennani [Tue, 15 Dec 2020 05:11:35 +0000 (06:11 +0100)]
Revert "[lldb/API] Expose Target::CreateBreakpoint(..., move_to_nearest_code) overload"
This reverts commit
04696ff002e7d311887b7b7e6e171340a0623dd9.
Exposing the LazyBool private type in SBTarget.h breaks some tests.
Hsiangkai Wang [Fri, 11 Dec 2020 07:16:08 +0000 (15:16 +0800)]
[RISCV] Define vadd/vsub/vrsub intrinsics and lower to V instructions.
This patch is based on the proposal from Roger Ferrer Ibanez.
http://lists.llvm.org/pipermail/llvm-dev/2020-October/145850.html
Differential Revision: https://reviews.llvm.org/D93013
LLVM GN Syncbot [Tue, 15 Dec 2020 03:35:00 +0000 (03:35 +0000)]
[gn build] Port
d2ed9d6b7ec
Nico Weber [Tue, 15 Dec 2020 03:33:29 +0000 (22:33 -0500)]
Reland "[MachineDebugify] Insert synthetic DBG_VALUE instructions"
This reverts commit
841f9c937f6e593c926a26aedf054436eb807fe6.
The change landed many months ago; something else broke those tests.
Med Ismail Bennani [Tue, 15 Dec 2020 02:40:47 +0000 (03:40 +0100)]
[lldb/API] Expose Target::CreateBreakpoint(..., move_to_nearest_code) overload
This patch exposes the Target::CreateBreakpoint overload with the
boolean argument to move to the neareast code to the SBAPI.
This is useful when creating column breakpoints to restrict lldb's
resolution to the pointed source location, preventing it to go to the next
line.
rdar://
72196842
Differential Revision: https://reviews.llvm.org/D93266
Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
Nico Weber [Tue, 15 Dec 2020 03:13:40 +0000 (22:13 -0500)]
Revert "[MachineDebugify] Insert synthetic DBG_VALUE instructions"
This reverts commit
2a5675f11d3bc803a245c0e2a3b47491c8f8a065.
The tests it adds fail: https://reviews.llvm.org/D78135#2453736
Nico Weber [Tue, 15 Dec 2020 03:12:15 +0000 (22:12 -0500)]
Revert "[Debugify] Support checking Machine IR debug info"
This reverts commit
c4d2d4337d50bed3cafd564daece1a197005b22b.
Necessary to revert
2a5675f11d3bc803a245c0e.
Luo, Yuanke [Sun, 13 Dec 2020 03:14:46 +0000 (11:14 +0800)]
[X86] Add test case for commit
e52bc1d2bba794b.
Differential Revision: https://reviews.llvm.org/D93173
Nico Weber [Tue, 15 Dec 2020 03:04:41 +0000 (22:04 -0500)]
Revert "Lex: Migrate HeaderSearch::LoadedModuleMaps to FileEntryRef"
This reverts commit
a40db5502b2515a6f2f1676b5d7a655ae0f41179.
and follow-up
d636b881bb9214938973098a012fad453082c444
Somewhat speculative, likely broke check-clang on Windows:
https://reviews.llvm.org/D92975#2453482
Nico Weber [Tue, 15 Dec 2020 02:59:51 +0000 (21:59 -0500)]
Revert "[amdgpu] Default to code object v3"
This reverts commit
4b2e7d0215021d0d1df1a6319884b21d33936265.
Breaks check-clang, see https://reviews.llvm.org/D93258#2453600
Qiu Chaofan [Tue, 15 Dec 2020 02:30:00 +0000 (10:30 +0800)]
[NFC] [Legalizer] Use common method for expanding fp-to-int operands
Reviewed By: RKSimon, steven.zhang
Differential Revision: https://reviews.llvm.org/D92481
Rong Xu [Tue, 15 Dec 2020 02:41:09 +0000 (18:41 -0800)]
[PGO] remove unintentional code in early commit
Remove unintentional code in
commit 54e03d [PGO] Verify BFI counts after loading profile data.
River Riddle [Tue, 15 Dec 2020 02:07:45 +0000 (18:07 -0800)]
[mlir][Inliner] Refactor the inliner to use nested pass pipelines instead of just canonicalization
Now that passes have support for running nested pipelines, the inliner can now allow for users to provide proper nested pipelines to use for optimization during inlining. This revision also changes the behavior of optimization during inlining to optimize before attempting to inline, which should lead to a more accurate cost model and prevents the need for users to schedule additional duplicate cleanup passes before/after the inliner that would already be run during inlining.
Differential Revision: https://reviews.llvm.org/D91211
Siva Chandra [Tue, 15 Dec 2020 02:05:19 +0000 (18:05 -0800)]
[libc] Add remainder[f|l] and remquo[f|l] to the list of aarch64 entrypoints.
Xiang1 Zhang [Tue, 15 Dec 2020 01:51:21 +0000 (17:51 -0800)]
[Debugify] Support checking Machine IR debug info
Add mir-check-debug pass to check MIR-level debug info.
For IR-level, currently, LLVM have debugify + check-debugify to generate
and check debug IR. Much like the IR-level pass debugify, mir-debugify
inserts sequentially increasing line locations to each MachineInstr in a
Module, But there is no equivalent MIR-level check-debugify pass, So now
we support it at "mir-check-debug".
Reviewed By: djtodoro
Differential Revision: https://reviews.llvm.org/D91595
Siva Chandra [Tue, 15 Dec 2020 01:51:13 +0000 (17:51 -0800)]
[libc][NFC] Skip adding dummy targets for skipped unit tests.
Xiang1 Zhang [Tue, 15 Dec 2020 01:42:21 +0000 (17:42 -0800)]
Revert "[Debugify] Support checking Machine IR debug info"
This reverts commit
57a3d9ec4a8c1422f07264bed9f12a4ea416707e.
Cheng Wang [Fri, 4 Dec 2020 10:21:48 +0000 (18:21 +0800)]
[libc] Add memcmp implementation.
Reviewed By: gchatelet
Differential Revision: https://reviews.llvm.org/D93009
Xiang1 Zhang [Tue, 15 Dec 2020 01:28:34 +0000 (17:28 -0800)]
[Debugify] Support checking Machine IR debug info
Add mir-check-debug pass to check MIR-level debug info.
For IR-level, currently, LLVM have debugify + check-debugify to generate
and check debug IR. Much like the IR-level pass debugify, mir-debugify
inserts sequentially increasing line locations to each MachineInstr in a
Module, But there is no equivalent MIR-level check-debugify pass, So now
we support it at "mir-check-debug".
Reviewed By: djtodoro
Differential Revision: https://reviews.llvm.org/D95195
Craig Topper [Tue, 15 Dec 2020 01:19:53 +0000 (17:19 -0800)]
[RISCV] Prevent assertion in the assembler if vmerge or vfmerge are given a V0 destination.
Craig Topper [Tue, 15 Dec 2020 00:48:56 +0000 (16:48 -0800)]
[RISCV] Handle Match_InvalidSImm5 in RISCVAsmParser::MatchAndEmitInstruction
Craig Topper [Tue, 15 Dec 2020 00:48:20 +0000 (16:48 -0800)]
[RISCV] Teach debug output from assembly parser to print register names instead of enum values.
Alexander Kornienko [Mon, 14 Dec 2020 22:06:36 +0000 (23:06 +0100)]
Remove the ast_type_traits namespace.
This is the final cleanup after https://reviews.llvm.org/D74499
Reviewed By: steveire
Differential Revision: https://reviews.llvm.org/D93244
Siva Chandra Reddy [Tue, 15 Dec 2020 01:12:08 +0000 (17:12 -0800)]
[libc][Obvious] Mark functions in DummyFEnv.h as static inline.
Jon Chesterfield [Tue, 15 Dec 2020 01:10:41 +0000 (01:10 +0000)]
[amdgpu] Default to code object v3
[amdgpu] Default to code object v3
v4 is not yet readily available, and doesn't appear
to be implemented in the back end
Reviewed By: t-tye
Differential Revision: https://reviews.llvm.org/D93258
Reid Kleckner [Tue, 15 Dec 2020 00:56:04 +0000 (16:56 -0800)]
Revert "ADT: Migrate users of AlignedCharArrayUnion to std::aligned_union_t, NFC"
We determined that the MSVC implementation of std::aligned* isn't suited
to our needs. It doesn't support 16 byte alignment or higher, and it
doesn't really guarantee 8 byte alignment. See
https://github.com/microsoft/STL/issues/1533
Also reverts "ADT: Change AlignedCharArrayUnion to an alias of std::aligned_union_t, NFC"
Also reverts "ADT: Remove AlignedCharArrayUnion, NFC" to bring back
AlignedCharArrayUnion.
This reverts commit
4d8bf870a82765eb0d4fe53c82f796b957c05954.
This reverts commit
d10f9863a5ac1cb681af07719650c44b48f289ce.
This reverts commit
4b5dc150b9862271720b3d56a3e723a55dd81838.
Changpeng Fang [Tue, 15 Dec 2020 00:34:32 +0000 (16:34 -0800)]
AMDGPU: If a store defines (alias) a load, it clobbers the load.
Summary:
If a store defines (must alias) a load, it clobbers the load.
Fixes: SWDEV-258915
Reviewers:
arsenm
Differential Revision:
https://reviews.llvm.org/D92951
Nemanja Ivanovic [Tue, 15 Dec 2020 00:07:45 +0000 (18:07 -0600)]
[PowerPC] Temporarily disable asan longjmp tests
Commit
bfdc19e77868b849b5c636bf0512970264aef571 seems to have broken
some PPC bots with a couple of asan test cases. Disable those test
cases for now until I can resolve the issue.
Rong Xu [Mon, 14 Dec 2020 23:54:28 +0000 (15:54 -0800)]
[PGO] Verify BFI counts after loading profile data
This patch adds the functionality to compare BFI counts with real
profile
counts right after reading the profile. It will print remarks under
-Rpass-analysis=pgo, or the internal option -pass-remarks-analysis=pgo.
Differential Revision: https://reviews.llvm.org/D91813
Harald van Dijk [Mon, 14 Dec 2020 23:47:27 +0000 (23:47 +0000)]
[X86] Fix variadic argument handling for x32
The X86-64 ABI defines va_list as
typedef struct {
unsigned int gp_offset;
unsigned int fp_offset;
void *overflow_arg_area;
void *reg_save_area;
} va_list[1];
This means the size, alignment, and reg_save_area offset will depend on
whether we are in LP64 or in ILP32 mode, so this commit adds the checks.
Additionally, the VAARG_64 pseudo-instruction assumed 64-bit pointers, so
this commit adds a VAARG_X32 pseudo-instruction that behaves just like
VAARG_64, except for assuming 32-bit pointers.
Some of these changes were originally done by
Michael Liao <michael.hliao@gmail.com>.
Fixes https://bugs.llvm.org/show_bug.cgi?id=48428.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D93160
Nico Weber [Mon, 14 Dec 2020 23:24:50 +0000 (18:24 -0500)]
[lld/mac] implement -compatibility_version, -current_version
Differential Revision: https://reviews.llvm.org/D93237
Peter Collingbourne [Mon, 14 Dec 2020 21:57:59 +0000 (13:57 -0800)]
scudo: Remove positional template arguments for secondary cache. NFCI.
Make these arguments named constants in the Config class instead
of being positional arguments to MapAllocatorCache. This makes the
configuration easier to follow.
Eventually we should follow suit with the other classes but this is
a start.
Differential Revision: https://reviews.llvm.org/D93251
Sanjay Patel [Mon, 14 Dec 2020 23:30:40 +0000 (18:30 -0500)]
[VectorCombine] add alignment test for gep load; NFC
Nico Weber [Mon, 14 Dec 2020 23:23:15 +0000 (18:23 -0500)]
[gn build] (semi-manually) port
19d57b5c42b
Nico Weber [Mon, 14 Dec 2020 23:22:54 +0000 (18:22 -0500)]
[gn build] (semi-manually) port
7ad49aec125
Eugene Zhulenev [Mon, 14 Dec 2020 22:55:46 +0000 (14:55 -0800)]
[mlir] Fix opaque struct typedef in AsyncRuntime header
Differential Revision: https://reviews.llvm.org/D93250
Richard Uhler [Mon, 14 Dec 2020 22:48:57 +0000 (14:48 -0800)]
[mlir] Add section page for Rationale docs.
With a brief overview and summary of each of the Rationale docs.
Differential Revision: https://reviews.llvm.org/D93245
Gulfem Savrun Yeniceri [Mon, 14 Dec 2020 21:56:11 +0000 (13:56 -0800)]
[clang][IR] Add support for leaf attribute
This patch adds support for leaf attribute as an optimization hint
in Clang/LLVM.
Differential Revision: https://reviews.llvm.org/D90275
Louis Dionne [Mon, 14 Dec 2020 21:58:52 +0000 (16:58 -0500)]
[libc++] Remove unnecessary static assertion in allocate_shared
Checking that `T` is constructible from `Args...` is technically not
required by the Standard, although any implementation will obviously
error out if that's not satisfied. However, this check is incompatible
with using Allocator construction in the control block (upcoming change
as part of implementing P0674), so I'm removing it now to reduce the
upcoming diff as much as possible.
Differential Revision: https://reviews.llvm.org/D93246
Louis Dionne [Mon, 14 Dec 2020 22:40:56 +0000 (17:40 -0500)]
[libc++] NFCI: Return pointer instead of reference from __shared_ptr_emplace helper method
This makes __get_alloc consistent with __get_elem, and will reduce the
diff required to implement P0674R1.
Sanjay Patel [Mon, 14 Dec 2020 22:20:15 +0000 (17:20 -0500)]
[VectorCombine] make load transform poison-safe
As noted in D93229, the transform from scalar load to vector load
potentially leaks poison from the extra vector elements that are
being loaded.
We could use freeze here (and x86 codegen at least appears to be
the same either way), but we already have a shuffle in this logic
to optionally change the vector size, so let's allow that
instruction to serve both purposes.
Differential Revision: https://reviews.llvm.org/D93238
Duncan P. N. Exon Smith [Mon, 14 Dec 2020 22:41:12 +0000 (14:41 -0800)]
Adapt lldb to
a40db5502b2515a6f2f1676b5d7a655ae0f41179
The bots just told me about a place in LLDB I missed in
a40db5502b2515a6f2f1676b5d7a655ae0f41179 when changing
`HeaderSearch::LoadedModuleMaps`, but I think this will fix it.
Duncan P. N. Exon Smith [Mon, 14 Dec 2020 22:28:59 +0000 (14:28 -0800)]
Add comment to closing brace of anonymous namespace, NFC
Duncan P. N. Exon Smith [Mon, 14 Dec 2020 22:36:59 +0000 (14:36 -0800)]
AST: Silence an instance of -Wsign-compare, NFC
Looks this this was added by
68f53960e17d93c3a2727164dac4e54140bd98ba.
Duncan P. N. Exon Smith [Wed, 9 Dec 2020 22:46:34 +0000 (14:46 -0800)]
Lex: Migrate HeaderSearch::LoadedModuleMaps to FileEntryRef
Migrate `HeaderSearch::LoadedModuleMaps` and a number of APIs over to
`FileEntryRef`. This should have no functionality change. Note that two
`FileEntryRef`s hash the same if they point at the same `FileEntry`.
Differential Revision: https://reviews.llvm.org/D92975
Craig Topper [Mon, 14 Dec 2020 21:51:00 +0000 (13:51 -0800)]
[LoopIdiomRecognize] Teach detectShiftUntilZeroIdiom to recognize loops where the counter is decrementing.
This adds support for loops like
unsigned clz(unsigned x) {
unsigned w = sizeof (x) * CHAR_BIT;
while (x) {
w--;
x >>= 1;
}
return w;
}
and
unsigned clz(unsigned x) {
unsigned w = sizeof (x) * CHAR_BIT - 1;
while (x >>= 1) {
w--;
}
return w;
}
To support these we look for add x, -1 as well as add x, 1 that
we already matched. If the value was -1 we need to subtract from
the initial counter value instead of adding to it.
Fixes PR48404.
Differential Revision: https://reviews.llvm.org/D92745
River Riddle [Mon, 14 Dec 2020 22:14:22 +0000 (14:14 -0800)]
[mlir][OpDefGen] Add support for generating local functions for shared utilities
This revision adds a new `StaticVerifierFunctionEmitter` class that emits local static functions in the .cpp file for shared operation verification. This class deduplicates shared operation verification code by emitting static functions alongside the op definitions. These methods are local to the definition file, and are invoked within the operation verify methods. The first bit of shared verification is for the type constraints used when verifying operands and results. An example is shown below:
```
static LogicalResult localVerify(...) {
...
}
LogicalResult OpA::verify(...) {
if (failed(localVerify(...)))
return failure();
...
}
LogicalResult OpB::verify(...) {
if (failed(localVerify(...)))
return failure();
...
}
```
This allowed for saving >400kb of code size from a downstream TensorFlow project (~15% of MLIR code size).
Differential Revision: https://reviews.llvm.org/D91381
Stanislav Mekhanoshin [Wed, 25 Nov 2020 23:27:49 +0000 (15:27 -0800)]
[AMDGPU] Use multi-dword flat scratch for spilling
Differential Revision: https://reviews.llvm.org/D93067
Louis Dionne [Fri, 11 Dec 2020 17:20:06 +0000 (12:20 -0500)]
[libc++] Refactor allocate_shared to use an allocation guard
This commit is a step towards making it easier to add support for arrays
in allocate_shared. Adding support for arrays will require writing multiple
functions, and the current complexity of writing allocate_shared is
prohibitive for understanding.
Differential Revision: https://reviews.llvm.org/D93130
Bardia Mahjour [Mon, 14 Dec 2020 21:54:20 +0000 (16:54 -0500)]
Revert "[DDG] Data Dependence Graph - DOT printer"
This reverts commit
fd4a10732c8bd646ccc621c0a9af512be252f33a, to
investigate the failure on windows: http://lab.llvm.org:8011/#/builders/127/builds/3274
Christian Sigg [Mon, 14 Dec 2020 21:45:37 +0000 (22:45 +0100)]
Revert "[mlir] Remove methods from mlir::OpState that just forward to mlir::Operation."
This reverts commit
6f271e921ba48f4c4fa54bbd2c7a4c548ca5e59e.
Differential Revision: https://reviews.llvm.org/D93242
Philip Reames [Mon, 14 Dec 2020 21:42:25 +0000 (13:42 -0800)]
Speculative fix for build bot failures
(The clang build fails for me locally, so this is based on built bot output and a guess as to root cause.)
f5fe849 made the execution of LAA conditional, so I'm guessing that's the root cause.
Bardia Mahjour [Mon, 14 Dec 2020 21:34:48 +0000 (16:34 -0500)]
[DDG] Data Dependence Graph - DOT printer
This patch implements a DDG printer pass that generates a graph in
the DOT description language, providing a more visually appealing
representation of the DDG. Similar to the CFG DOT printer, this
functionality is provided under an option called -dot-ddg and can
be generated in a less verbose mode under -dot-ddg-only option.
Differential Revision: https://reviews.llvm.org/D90159
Javier Setoain [Mon, 14 Dec 2020 21:30:53 +0000 (21:30 +0000)]
[mlir][ArmSVE][RFC] Add an ArmSVE dialect
This revision starts an Arm-specific ArmSVE dialect discussed in the discourse RFC thread:
https://llvm.discourse.group/t/rfc-vector-dialects-neon-and-sve/2284
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D92172
Matt Arsenault [Thu, 19 Nov 2020 23:53:28 +0000 (18:53 -0500)]
OpaquePtr: Require byval on x86_intrcc parameter 0
Currently the backend special cases x86_intrcc and treats the first
parameter as byval. Make the IR require byval for this parameter to
remove this special case, and avoid the dependence on the pointee
element type.
Fixes bug 46672.
I'm not sure the IR is enforcing all the calling convention
constraints. clang seems to ignore the attribute for empty parameter
lists, but the IR tolerates it.
Matt Arsenault [Mon, 14 Dec 2020 21:13:29 +0000 (16:13 -0500)]
clang: Add byval on x86_intrcc parameter 0
This will allow removing the special case treatment of the parameter
and avoid depending on the pointer's element type.
Louis Dionne [Thu, 10 Dec 2020 23:28:13 +0000 (18:28 -0500)]
[libc++] Split allocator_traits and pointer_traits out of <memory>
In addition to making the code a lot easier to grasp by localizing many
helper functions to the only file where they are actually needed, this
will allow creating helper functions that depend on allocator_traits
outside of <memory>.
This is done as part of implementing array support in allocate_shared,
which requires non-trivial array initialization algorithms that would be
better to keep out of <memory> for sanity. It's also a first step towards
splitting up our monolithic headers into finer grained ones, which will
make it easier to reuse functionality across the library. For example,
it's just weird that we had to define `addressof` inside <type_traits>
to avoid circular dependencies -- instead it's better to implement those
in true helper headers.
Differential Revision: https://reviews.llvm.org/D93074
Zequan Wu [Sat, 12 Dec 2020 01:21:23 +0000 (17:21 -0800)]
[NFC] cleanup cg-profile emission on TargetLowerinng
Differential Revision: https://reviews.llvm.org/D93150
Hafiz Abid Qadeer [Mon, 14 Dec 2020 19:11:51 +0000 (19:11 +0000)]
Add initial support for multilibs in Baremetal toolchain.
This patch add support of riscv multilibs in the Baremetal toolchain. It is
a bit different to what is done in GNU.cpp as we are not iterating a
GNU sysroot to find the multilibs. This is intended for an llvm only
toolchain. We are not checking for the presence of any runtime bits to
enable a specific multilib.
I have structured the patch so that other targets for which
there is no multilibs support yet in Baremetal.cpp (e.g. arm-none-eabi)
will not be affected. Patch also allows some multilibs reuse.
Long term, I would like to go in the direction of data-driven specification of
multilib directories and flags.
Reviewed By: jroelofs
Differential Revision: https://reviews.llvm.org/D93138
Guozhi Wei [Mon, 14 Dec 2020 20:48:55 +0000 (12:48 -0800)]
[MBP] Prevent rotating a chain contains entry block
The entry block should always be the first BB in a function.
So we should not rotate a chain contains the entry block.
Differential Revision: https://reviews.llvm.org/D92882
Philip Reames [Mon, 14 Dec 2020 20:42:19 +0000 (12:42 -0800)]
[LAA] Relax restrictions on early exits in loop structure
his is a preparation patch for supporting multiple exits in the loop vectorizer, by itself it should be mostly NFC. This patch moves the loop structure checks from LAA to their respective consumers (where duplicates don't already exist). Moving the checks does end up changing some of the optimization warnings and debug output slightly, but nothing that appears to be a regression.
Why do this? Well, after auditing the code, I can't actually find anything in LAA itself which relies on having all instructions within a loop execute an equal number of times. This patch simply makes this explicit so that if one consumer - say LV in the near future (hopefully) - wants to handle a broader class of loops, it can do so.
Differential Revision: https://reviews.llvm.org/D92066
River Riddle [Mon, 14 Dec 2020 20:32:21 +0000 (12:32 -0800)]
[mlir] Change the internal representation of FrozenRewritePatternList to use shared_ptr
This will allow for caching pattern lists across multiple pass instances, such as when multithreading. This is an extremely important invariant for PDL patterns, which are compiled at runtime when the FrozenRewritePatternList is built.
Differential Revision: https://reviews.llvm.org/D93146
Christian Sigg [Mon, 14 Dec 2020 07:34:39 +0000 (08:34 +0100)]
[mlir] Remove methods from mlir::OpState that just forward to mlir::Operation.
All call sites have been converted in previous changes.
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D93176
Michael Kruse [Mon, 14 Dec 2020 17:05:51 +0000 (11:05 -0600)]
[flang] Fix copy elision assumption.
Before this patch, the Restorer depended on copy elision to happen.
Without copy elision, the function ScopedSet calls the move constructor
before its dtor. The dtor will prematurely restore the reference to the
original value.
Instead of relying the compiler to not use the Restorer's copy
constructor, delete its copy and assign operators. Hence, callers cannot
move or copy a Restorer object anymore, and have to explicitly provide
the reset state. ScopedSet avoids calling move/copy operations by
relying on unnamed return value optimization, which is mandatory in
C++17.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D88797
River Riddle [Mon, 14 Dec 2020 19:53:43 +0000 (11:53 -0800)]
[mlir][OpAsmParser] Add support for parsing integer literals without going through IntegerAttr
Some operations use integer literals as part of their custom format that don't necessarily map to an internal IntegerAttr. This revision exposes the same `parseInteger` functions as the DialectAsmParser to allow for these operations to parse integer literals without incurring the otherwise unnecessary roundtrip through IntegerAttr.
Differential Revision: https://reviews.llvm.org/D93152
River Riddle [Mon, 14 Dec 2020 19:53:34 +0000 (11:53 -0800)]
[mlir][OpFormat] Add support for emitting newlines from the custom format of an operation
This revision adds a new `printNewline` hook to OpAsmPrinter that allows for printing a newline within the custom format of an operation, that is then indented to the start of the operation. Support for the declarative assembly format is also added, in the form of a `\n` literal.
Differential Revision: https://reviews.llvm.org/D93151
Artem Belevich [Tue, 8 Dec 2020 23:05:33 +0000 (15:05 -0800)]
[CUDA] Do not diagnose host/device variable access in dependent types.
`isCUDADeviceBuiltinSurfaceType()`/`isCUDADeviceBuiltinTextureType()` do not
work on dependent types as they rely on specific type attributes.
Differential Revision: https://reviews.llvm.org/D92893
Sanjay Patel [Mon, 14 Dec 2020 15:59:26 +0000 (10:59 -0500)]
[VectorCombine] add test for load with offset; NFC