platform/upstream/llvm.git
20 months ago[ConstraintElimination] Add Decomposition struct (NFCI)
Nikita Popov [Fri, 11 Nov 2022 16:27:31 +0000 (17:27 +0100)]
[ConstraintElimination] Add Decomposition struct (NFCI)

Replace the vector of DecompEntry with a struct that stores the
constant offset separately. I think this is cleaner than giving the
first element special handling.

This probably also fixes some potential ubsan errors by more
consistently using addWithOverflow/multiplyWithOverflow.

20 months ago[ConstraintElimination] Make decompose() infallible
Nikita Popov [Fri, 11 Nov 2022 16:02:40 +0000 (17:02 +0100)]
[ConstraintElimination] Make decompose() infallible

decompose() currently returns a mix of {} and 0 + 1*V on failure.
This changes it to always return the 0 + 1*V form, thus making
decompose() infallible.

This makes the code marginally more powerful, e.g. we now fold
sub_decomp_i80 by treating the constant as a symbolic value.

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

20 months ago[flang][RFC] Do not rely on attributes to tag HLFIR variable uses
Jean Perier [Mon, 14 Nov 2022 09:38:22 +0000 (10:38 +0100)]
[flang][RFC] Do not rely on attributes to tag HLFIR variable uses

After more considerations and experience, switch to one of the
alternative plan for HLFIR variable that will avoid requiring naming
designators and having to maintain and update names in attributes after
inlining of code duplication.

The cost is the increase of fir.box usage, which in most cases should
be removed when lowering from HLFIR to FIR.

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

20 months ago[flang][NFC] rename hlfir::FortranEntity into EntityWithAttributes
Jean Perier [Mon, 14 Nov 2022 09:37:04 +0000 (10:37 +0100)]
[flang][NFC] rename hlfir::FortranEntity into EntityWithAttributes

This reflects the fact that Attributes will not always be visible when
looking at an HLFIR variable. The EntityWithAttributes class is used
to denote in the compiler code that the value at hand has visible
attributes. It is intended to be used in lowering so that the code
can query about operands attributes when generating code.

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

20 months ago[flang] Add hlfir.declare operation
Jean Perier [Mon, 14 Nov 2022 09:25:03 +0000 (10:25 +0100)]
[flang] Add hlfir.declare operation

This operation will be used to declare named variables in HLFIR.
See the added description in HLFIROpBase.td for more info about it.

The motivation behind this operation is described in https://reviews.llvm.org/D137634.

The FortranVariableInterface verifier is changed a bit. It used to
operate using the result type to verify the provided shape and length
parameters. This is a bit incorrect because what matters to verify the
information is the input address (This worked OK with fir.declare where
the input memref type is the same as the output result). Also, not all
operation defining variables will have an input memref with the same
meaning (hlfir.designate and hlfir.associate for instance).
Hence, this verifier is now optional and must be provided a memref to
operate.

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

20 months agoMove the isSelfContainedHeader function from clangd to libtooling.
Haojian Wu [Mon, 7 Nov 2022 12:30:47 +0000 (13:30 +0100)]
Move the isSelfContainedHeader function from clangd to libtooling.

We plan to reuse it in the include-cleaner library, this patch moves
this functionality from clangd to libtooling, so that this piece of code can be
shared among all clang tools.

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

20 months ago[llvm] Use std::is_integral_v (NFC)
Kazu Hirata [Mon, 14 Nov 2022 08:31:06 +0000 (00:31 -0800)]
[llvm] Use std::is_integral_v (NFC)

20 months agoRevert "[libclang] Expose completion result kind in `CXCompletionResult`"
Muhammad Omair Javaid [Mon, 14 Nov 2022 08:27:11 +0000 (12:27 +0400)]
Revert "[libclang] Expose completion result kind in `CXCompletionResult`"

This reverts commit 97105e5bf70fae5d9902081e917fd178b57f1717.
It breaks clang-armv8-quick buildbot:
https://lab.llvm.org/buildbot/#/builders/245/builds/761

20 months ago[IRCE] Bail out if AddRec in icmp is for another loop (PR58912)
Dmitry Makogon [Fri, 11 Nov 2022 09:49:48 +0000 (16:49 +0700)]
[IRCE] Bail out if AddRec in icmp is for another loop (PR58912)

When IRCE runs on outer loop and sees a check of an AddRec of
inner loop, it crashes with an assert in SCEV that the AddRec
must be loop invariant.
This adds a bail out if the AddRec which is checked in icmp
is for another loop.

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

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

20 months ago[RISCV] Add PACKH/PACKW/PACK to hasAllNBitUsers.
Craig Topper [Mon, 14 Nov 2022 07:43:55 +0000 (23:43 -0800)]
[RISCV] Add PACKH/PACKW/PACK to hasAllNBitUsers.

20 months ago[RISCV] Add another PACKH pattern.
Craig Topper [Mon, 14 Nov 2022 06:49:51 +0000 (22:49 -0800)]
[RISCV] Add another PACKH pattern.

This handles the case where the upper bits are zeroed with an AND
after the OR.

20 months ago[Support] Use std::is_scalar_v (NFC)
Kazu Hirata [Mon, 14 Nov 2022 07:50:08 +0000 (23:50 -0800)]
[Support] Use std::is_scalar_v (NFC)

20 months agoAdd missing include.
Johannes Reifferscheid [Mon, 14 Nov 2022 07:14:31 +0000 (08:14 +0100)]
Add missing include.

20 months ago[Docs] Add Documentation on BOLT Build Configs
Aiden Grossman [Mon, 14 Nov 2022 06:59:43 +0000 (06:59 +0000)]
[Docs] Add Documentation on BOLT Build Configs

This patch adds documentation into the advanced builds documentation on
how to use the BOLT caches, including the combinations with the PGO
multistage builds and (Thin)LTO.

Reviewed By: sylvestre.ledru, Amir

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

20 months ago[Docs] Add Documentation on (Thin)LTO + PGO Build Configs
Aiden Grossman [Sat, 12 Nov 2022 22:55:08 +0000 (22:55 +0000)]
[Docs] Add Documentation on (Thin)LTO + PGO Build Configs

This patch adds documentation on the AdvancedBuilds page on how to do
PGO builds with (Thin)LTO with the currently undocumented (as far as I
can tell) PGO_INSTRUMENT_LTO option in the Clang PGO caches.

Reviewed By: sylvestre.ledru

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

20 months ago[lldb] Re-phase comments in `ScriptedThread.get_stackframes` method (NFC)
Med Ismail Bennani [Mon, 14 Nov 2022 06:19:14 +0000 (22:19 -0800)]
[lldb] Re-phase comments in `ScriptedThread.get_stackframes` method (NFC)

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
20 months ago[lldb] Remove unused `stack_memory_dump` member from ScriptedProcess class (NFC)
Med Ismail Bennani [Mon, 14 Nov 2022 06:05:21 +0000 (22:05 -0800)]
[lldb] Remove unused `stack_memory_dump` member from ScriptedProcess class (NFC)

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
20 months ago[RISCV] Improve PACKH instruction selection
Craig Topper [Mon, 14 Nov 2022 05:54:15 +0000 (21:54 -0800)]
[RISCV] Improve PACKH instruction selection

Handle AssertZExt in addition to AND.

20 months ago[RISCV] Don't use zero-stride vector load if there's no optimized u-arch
wangpc [Mon, 14 Nov 2022 05:50:51 +0000 (13:50 +0800)]
[RISCV] Don't use zero-stride vector load if there's no optimized u-arch

For vector strided instructions, as the RVV spec says:

> When rs2=x0, then an implementation is allowed, but not required, to
> perform fewer memory operations than the number of active elements, and
> may perform different numbers of memory operations across different
> dynamic executions of the same static instruction.

So compiler shouldn't assume that fewer memory operations will be
performed when rs2=x0.

We add a target feature to specify whether u-arch supports optimized
zero-stride vector load. And we do vector splat optimization iff this
feature is supported.

This feature is enabled by default since most designs implement this
optimization.

Reviewed By: reames

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

20 months ago[C++20] [Modules] Emit Macro Definition in -module-file-info action
Chuanqi Xu [Fri, 11 Nov 2022 08:39:12 +0000 (16:39 +0800)]
[C++20] [Modules] Emit Macro Definition in -module-file-info action

It is helpful to know whih macro definition is emitted in the module
file without openning it directly. And this is not easy to be tested
with the lit test. So this patch add the facility to emit macro
definitions in `-module-file-info` action. And this should be innnocent
for every other cases.

20 months agoApply clang-tidy fixes for readability-identifier-naming in MergerTest.cpp (NFC)
Mehdi Amini [Thu, 3 Nov 2022 21:44:12 +0000 (21:44 +0000)]
Apply clang-tidy fixes for readability-identifier-naming in MergerTest.cpp (NFC)

20 months agoApply clang-tidy fixes for llvm-qualified-auto in AttrOrTypeFormatGen.cpp (NFC)
Mehdi Amini [Thu, 3 Nov 2022 21:39:14 +0000 (21:39 +0000)]
Apply clang-tidy fixes for llvm-qualified-auto in AttrOrTypeFormatGen.cpp (NFC)

20 months agoApply clang-tidy fixes for llvm-qualified-auto in MLIRContext.cpp (NFC)
Mehdi Amini [Thu, 3 Nov 2022 21:01:01 +0000 (21:01 +0000)]
Apply clang-tidy fixes for llvm-qualified-auto in MLIRContext.cpp (NFC)

20 months ago[RISCV] Add PACKW and PACKH to isSignExtendingOpW in RISCVSExtWRemoval.
Craig Topper [Mon, 14 Nov 2022 04:00:34 +0000 (20:00 -0800)]
[RISCV] Add PACKW and PACKH to isSignExtendingOpW in RISCVSExtWRemoval.

PACKW sign extends like other W instructions.
PACKH zeroes bits 63:16 which means bits 63:31 are all zero.

20 months ago[RISCV] Improve selection of PACKW.
Craig Topper [Mon, 14 Nov 2022 02:34:20 +0000 (18:34 -0800)]
[RISCV] Improve selection of PACKW.

Use hasAllWUsers to check if the upper bits are ignored so we can
use PACKW even when no sign_extend_inreg is present before the OR.

20 months ago[LoopFlatten] Forget all block and loop dispositions after flatten
luxufan [Fri, 11 Nov 2022 13:21:45 +0000 (21:21 +0800)]
[LoopFlatten] Forget all block and loop dispositions after flatten

Method forgetLoop only forgets expression of phi or its users. SCEV
expressions except the above mentioned may still has loop dispositions
that point to the destroyed loop, which might cause a crash.

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

Reviewed By: nikic, fhahn

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

20 months ago[LoongArch] Expand atomicrmw fadd/fsub/fmin/fmax with CmpXChg
gonglingqin [Mon, 14 Nov 2022 01:27:01 +0000 (09:27 +0800)]
[LoongArch] Expand atomicrmw fadd/fsub/fmin/fmax with CmpXChg

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

20 months ago[RISCV][NFC] Remove dead code.
Yeting Kuo [Sun, 13 Nov 2022 13:43:31 +0000 (21:43 +0800)]
[RISCV][NFC] Remove dead code.

All ISD::BSWAP nodes are not customized lowered in RISC-V now, so the patch
removed dead code for ISD::BSWAP in LowerOperation.

Reviewed By: craig.topper

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

20 months ago[RISCV] Fix incorrect early out from isSignExtendedW in RISCVSExtWRemoval.
Craig Topper [Mon, 14 Nov 2022 01:23:54 +0000 (17:23 -0800)]
[RISCV] Fix incorrect early out from isSignExtendedW in RISCVSExtWRemoval.

We can only return false to abort. If the criteria is met we need
to use continue instead. Returning true stops us from visiting all
nodes and makes the caller think it is safe to remove sext.w.

20 months ago[RISCV] Add test for incorrect sext.w removal. NFC
Craig Topper [Mon, 14 Nov 2022 00:46:43 +0000 (16:46 -0800)]
[RISCV] Add test for incorrect sext.w removal. NFC

20 months ago[PowerPC] Use ArrayRef (NFC)
Kazu Hirata [Mon, 14 Nov 2022 00:22:33 +0000 (16:22 -0800)]
[PowerPC] Use ArrayRef (NFC)

This patch teaches getStoreOpcodesForSpillArray and
getLoadOpcodesForSpillArray to return ArrayRef.  This way,
isLoadFromStackSlot and isStoreToStackSlot can use llvm::is_contained.

20 months ago[RISCV] Improve selection of PACK/PACKW for AssertZExt input.
Craig Topper [Sun, 13 Nov 2022 21:35:04 +0000 (13:35 -0800)]
[RISCV] Improve selection of PACK/PACKW for AssertZExt input.

20 months ago[IR] Use llvm::any_of (NFC)
Kazu Hirata [Sun, 13 Nov 2022 22:54:29 +0000 (14:54 -0800)]
[IR] Use llvm::any_of (NFC)

20 months ago[Hexagon] Use `Register` instead of `unsigned`, NFC
Krzysztof Parzyszek [Sun, 13 Nov 2022 21:10:06 +0000 (15:10 -0600)]
[Hexagon] Use `Register` instead of `unsigned`, NFC

Use `Register` instead of `unsigned` in HexagonInstrInfo,
HexagonRegisterInfo, HexagonFrameLowering, and HexagonHardwareLoops.

20 months ago[lldb][test] Avoid UB in optimized_code test
Arthur Eubanks [Sun, 13 Nov 2022 22:21:12 +0000 (14:21 -0800)]
[lldb][test] Avoid UB in optimized_code test

20 months ago[VectorUtils] Skip interleave members with diff type and alloca sizes.
Florian Hahn [Sun, 13 Nov 2022 22:05:37 +0000 (22:05 +0000)]
[VectorUtils] Skip interleave members with diff type and alloca sizes.

Currently, codegen doesn't support cases where the type size doesn't
match the alloc size. Skip them for now.

Fixes #58722.

20 months ago[clang][test] Avoid UB in overload.cl
Arthur Eubanks [Sun, 13 Nov 2022 22:02:24 +0000 (14:02 -0800)]
[clang][test] Avoid UB in overload.cl

20 months ago[Hexagon] Pass Hexagon::PC to InitializeHexagonMCRegisterInfo
Krzysztof Parzyszek [Sun, 13 Nov 2022 20:33:26 +0000 (14:33 -0600)]
[Hexagon] Pass Hexagon::PC to InitializeHexagonMCRegisterInfo

That will make MCRegisterInfo::getProgramCounter return the right thing.

20 months ago[Hexagon] Remove unneeded HexagonRegisterInfo::getRARegister
Krzysztof Parzyszek [Sun, 13 Nov 2022 20:32:18 +0000 (14:32 -0600)]
[Hexagon] Remove unneeded HexagonRegisterInfo::getRARegister

That function exists in MCRegisterInfo, and is inherited into HRI.

20 months ago[Hexagon] Reduce the spill alignment for double/quad vector classes
Krzysztof Parzyszek [Sun, 13 Nov 2022 19:56:06 +0000 (13:56 -0600)]
[Hexagon] Reduce the spill alignment for double/quad vector classes

The spill alignment for HVX vectors is always the single vector size,
regardless of whether the class describes vector tuples or not.

20 months ago[RISCV] Add BREV8 to hasAllWUsers in RISCVSExtWRemoval.
Craig Topper [Sun, 13 Nov 2022 19:52:14 +0000 (11:52 -0800)]
[RISCV] Add BREV8 to hasAllWUsers in RISCVSExtWRemoval.

This instruction reverses the bits in each byte. Since we're only
interested in whether the upper 32 bits are used or not, we can
look through them to check their users.

20 months ago[RISCV] Add PACK/PACKH/PACKW to hasAllWUsers in RISCVSExtWRemoval.
Craig Topper [Sun, 13 Nov 2022 19:34:06 +0000 (11:34 -0800)]
[RISCV] Add PACK/PACKH/PACKW to hasAllWUsers in RISCVSExtWRemoval.

20 months ago[MLIR] Move JitRunner Options to header, pass to mlirTransformer
Renato Golin [Sat, 12 Nov 2022 21:48:54 +0000 (21:48 +0000)]
[MLIR] Move JitRunner Options to header, pass to mlirTransformer

This allows the MLIR transformer to see the command line options and
make desicions based on them. No change upstream, but my use-case is to
look at the entry point name and type to make sure I can use them.

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

20 months agoMove variable declarations out of #if guard, NFC
Krzysztof Parzyszek [Sat, 12 Nov 2022 23:27:59 +0000 (17:27 -0600)]
Move variable declarations out of #if guard, NFC

They are used in other sides of the #if/#else.

20 months ago[SimpleLoopUnswitch] Forget SCEVs for replaced phis.
Florian Hahn [Sun, 13 Nov 2022 17:38:39 +0000 (17:38 +0000)]
[SimpleLoopUnswitch] Forget SCEVs for replaced phis.

Forget SCEVs based on exit phis in case SCEV looked through the phi.
After unswitching, it may not be possible to look through the phi due to
it having multiple incoming values, so it needs to be re-computed.

Fixes #58868

20 months ago[MLIR][Bytecode] Ensure `dataIt` is aligned coming out of `EncodingReader::alignTo`.
bzcheeseman [Fri, 11 Nov 2022 19:22:06 +0000 (11:22 -0800)]
[MLIR][Bytecode] Ensure `dataIt` is aligned coming out of `EncodingReader::alignTo`.

This addresses the TODO in the code previously and checks that the address of `dataIt` is properly aligned to the requested alignment.

Reviewed By: rriddle

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

20 months ago[X86] Regenerate combine-movmsk.ll
Simon Pilgrim [Sun, 13 Nov 2022 17:12:18 +0000 (17:12 +0000)]
[X86] Regenerate combine-movmsk.ll

Adds a AVX check that we lost at some point

20 months agoRevert "[InstCombine] allow more folds for multi-use selects (2nd try)"
Sanjay Patel [Sun, 13 Nov 2022 16:47:21 +0000 (11:47 -0500)]
Revert "[InstCombine] allow more folds for multi-use selects (2nd try)"

This reverts commit 6eae6b3722d9204fa93b772e24afab93406cc143.

This version of the patch results in the same DFSAN bot failure as before,
so my guess about the SimplifyQuery context instruction was wrong.
I don't know what the real bug is.

20 months ago[InstCombine] allow more folds for multi-use selects (2nd try)
Sanjay Patel [Sun, 13 Nov 2022 15:19:41 +0000 (10:19 -0500)]
[InstCombine] allow more folds for multi-use selects (2nd try)

The 1st try ( 681a6a399022 ) was reverted because it caused
a DataFlowSanitizer bot failure.

This try modifies the existing calls to simplifyBinOp() to
not use a query that sets the context instruction because
that seems like a likely source of failure. Since we already
try those simplifies with multi-use patterns in some cases,
that means the bug is likely present even without this patch.

However, I have not been able to reduce a test to prove that
this was the bug, so if we see any bot failures with this patch,
then it should be reverted again.

The reduced simplify power does not affect any optimizations
in existing, motivating regression tests.

Original commit message:

The 'and' case showed up in a recent bug report and prevented
more follow-on transforms from happening.

We could handle more patterns (for example, the select arms
simplified, but not to constant values), but this seems
like a safe, conservative enhancement. The backend can
convert select-of-constants to math/logic in many cases
if it is profitable.

There is a lot of overlapping logic for these kinds of patterns
(see SimplifySelectsFeedingBinaryOp() and FoldOpIntoSelect()),
so there may be some opportunity to improve efficiency.

There are also optimization gaps/inconsistency because we do
not call this code for all bin-opcodes (see TODO for ashr test).

20 months ago[X86] Update WriteMPSAD class and remove VMPSADBWrri override
Simon Pilgrim [Sun, 13 Nov 2022 15:19:30 +0000 (15:19 +0000)]
[X86] Update WriteMPSAD class and remove VMPSADBWrri override

AMD 15h SoG + Agner both indicate there's no difference between MPSADBWrri + VMPSADBWrri - I can't find any data on the folded variant so I've kept the existing numbers

Removes the last X86 override for WriteMPSAD/WritePSADBW classes - removing a further 3 entries from every sched class table

20 months ago[X86] Remove unnecessary VPSADBW/VDBPSADBW zmm overrides
Simon Pilgrim [Sun, 13 Nov 2022 14:54:16 +0000 (14:54 +0000)]
[X86] Remove unnecessary VPSADBW/VDBPSADBW zmm overrides

These match the existing WritePSADBWZ schedule classes

20 months ago[MCA][X86] Add test coverage for VDBPSADBW instructions
Simon Pilgrim [Sun, 13 Nov 2022 14:49:29 +0000 (14:49 +0000)]
[MCA][X86] Add test coverage for VDBPSADBW instructions

20 months ago[gn build] Extract gen_arch_intrinsics() template to remove some duplication
Nico Weber [Thu, 10 Nov 2022 13:59:44 +0000 (08:59 -0500)]
[gn build] Extract gen_arch_intrinsics() template to remove some duplication

No behavior change.

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

20 months ago[X86] Fix scheduler tag for GFNI YMM instructions
Simon Pilgrim [Sun, 13 Nov 2022 14:10:03 +0000 (14:10 +0000)]
[X86] Fix scheduler tag for GFNI YMM instructions

These were hardcoded to XMM width

20 months ago[GlobalISel] Correct constant type in matchReassocConstantInnerLHS
chenglin.bi [Sun, 13 Nov 2022 11:19:38 +0000 (19:19 +0800)]
[GlobalISel] Correct constant type in matchReassocConstantInnerLHS

When we match a pattern from m_GCst, the register type could be different from original op. So we can't replace the original op to vreg direct.
This code create a new constant with original op type then replace the original op.

Fix #58906

Reviewed By: arsenm, aemerson

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

20 months ago[X86] Cleanup CVTPD2PS schedule values
Simon Pilgrim [Sun, 13 Nov 2022 11:13:30 +0000 (11:13 +0000)]
[X86] Cleanup CVTPD2PS schedule values

The znver1/znver2 schedules for CVTPD2PS were incorrectly double pumping the xmm-load variant instead of the ymm variants (znver1 only)

Also, the xmm-load variant was incorrectly using FP03 instead of just FP3

Confirmed by the AMD SoG 17h tables, Agner + uops.info

Another step towards removing a lot of unnecessary overrides from all the x86 scheduler models - these should hopefully be convertible into regular WriteCvtPD2I classes soon.

20 months ago[X86] Fix sched class typo - the CVTPD2DQrr instructions were mapping to ZnWriteCVTDQ...
Simon Pilgrim [Sun, 13 Nov 2022 09:34:19 +0000 (09:34 +0000)]
[X86] Fix sched class typo - the CVTPD2DQrr instructions were mapping to ZnWriteCVTDQ2PDr instead of ZnWriteCVTPD2DQr

20 months agoDecoderEmitter: Simplify addOneOperandFields. NFC
Fangrui Song [Sun, 13 Nov 2022 09:15:54 +0000 (01:15 -0800)]
DecoderEmitter: Simplify addOneOperandFields. NFC

Follow-up to d1fbdf5bf79219549bc1fde255186d02f646a46f

20 months ago[TableGen] Remove unneeded flush and add missing newline
Fangrui Song [Sun, 13 Nov 2022 08:48:47 +0000 (00:48 -0800)]
[TableGen] Remove unneeded flush and add missing newline

20 months agoRevert "[InstCombine] allow more folds more multi-use selects"
Michał Górny [Sun, 13 Nov 2022 06:27:01 +0000 (07:27 +0100)]
Revert "[InstCombine] allow more folds more multi-use selects"

This reverts commit 681a6a3990226c667fb648952731d2753df2716d.
It broke sanitizer tests (as seen on buildbots), see:
https://reviews.llvm.org/rG681a6a399022#1143137

20 months ago[AArch64] Optimize more memcmp when the result is tested for [in]equality with 0
zhongyunde [Sun, 13 Nov 2022 03:01:45 +0000 (11:01 +0800)]
[AArch64] Optimize more memcmp when the result is tested for [in]equality with 0

We already surpport the or (xor a, b), (xor c, d) with D136244, while it should
capture more cases than just bcmp according the comment on
https://reviews.llvm.org/D136672, so this patch try to fold continuous
comparison series.

Also add a new callsite in LowerSETCC to address some cases folded And in the
stage of `Optimized type-legalized selection`.
Depends on D136244

Reviewed By: dmgreen, bcl5980
Differential Revision: https://reviews.llvm.org/D137721

20 months agoApply clang-tidy fixes for readability-container-size-empty in ExecutionEngine.cpp...
Mehdi Amini [Thu, 3 Nov 2022 20:53:35 +0000 (20:53 +0000)]
Apply clang-tidy fixes for readability-container-size-empty in ExecutionEngine.cpp (NFC)

20 months agoApply clang-tidy fixes for readability-identifier-naming in TosaDecomposeConv2D.cpp...
Mehdi Amini [Thu, 3 Nov 2022 20:45:39 +0000 (20:45 +0000)]
Apply clang-tidy fixes for readability-identifier-naming in TosaDecomposeConv2D.cpp (NFC)

20 months ago[NFC][Clang] Add some codegen tests for https://github.com/llvm/llvm-project/issues...
Roman Lebedev [Sat, 12 Nov 2022 22:58:07 +0000 (01:58 +0300)]
[NFC][Clang] Add some codegen tests for https://github.com/llvm/llvm-project/issues/58798

20 months ago[mlir] Add openInputFile overload that accepts the expected alignment
River Riddle [Sat, 12 Nov 2022 22:38:27 +0000 (14:38 -0800)]
[mlir] Add openInputFile overload that accepts the expected alignment

This just forwards to the alignment parameter on `MemoryBuffer::getFileOrSTDIN`.

20 months ago[MemoryBuffer] Allow optionally specifying desired buffer alignment
River Riddle [Fri, 11 Nov 2022 09:54:45 +0000 (01:54 -0800)]
[MemoryBuffer] Allow optionally specifying desired buffer alignment

Underlying data may have requirements/expectations/etc. about
the run-time alignment. WritableMemoryBuffer currently uses
a 16 byte alignment, which works for many situations but not all.
Allowing a desired alignment makes it easier to reuse WritableMemoryBuffer
in situations of special alignment, and also removes a problem when
opening files with special alignment constraints. Large files generally
get mmaped, which has ~page alignment, but small files go through
WritableMemoryBuffer which has the much smaller alignment guarantee.

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

20 months ago[mlir] Add a new AttrTypeReplacer class to simplify sub element replacements
River Riddle [Thu, 10 Nov 2022 04:59:40 +0000 (20:59 -0800)]
[mlir] Add a new AttrTypeReplacer class to simplify sub element replacements

We currently only have the SubElement interface API for attribute/type
replacement, but this suffers from several issues; namely that it doesn't
allow caching across multiple replacements (very common), and also
creates a somewhat awkward/limited API. The new AttrTypeReplacer class
allows for registering replacements using a much cleaner API, similarly to
the TypeConverter class, removes a lot of manual interaction with the
sub element interfaces, and also better enables large scale replacements.

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

20 months ago[mlir] Don't include the attribute self type in a `params` directive
River Riddle [Wed, 9 Nov 2022 20:39:04 +0000 (12:39 -0800)]
[mlir] Don't include the attribute self type in a `params` directive

The self type is handled separately from normal parameters, and
the use of the params directive currently breaks attributes that
want to use it (e.g. in a struct directive).

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

20 months ago[lldb] Revert SBFileSpec.fullpath path separator fix
Dave Lee [Sat, 12 Nov 2022 22:16:41 +0000 (14:16 -0800)]
[lldb] Revert SBFileSpec.fullpath path separator fix

Primarily reverts 5223366416fb.

20 months ago[lldb] Complete fix of test after 5223366416fb
Dave Lee [Sat, 12 Nov 2022 22:11:43 +0000 (14:11 -0800)]
[lldb] Complete fix of test after 5223366416fb

20 months ago[lldb] Fix test after 5223366416fb
Dave Lee [Sat, 12 Nov 2022 22:09:35 +0000 (14:09 -0800)]
[lldb] Fix test after 5223366416fb

20 months ago[Docs] Minor Fixups in Advanced Builds Documentation
Aiden Grossman [Sat, 12 Nov 2022 01:54:01 +0000 (01:54 +0000)]
[Docs] Minor Fixups in Advanced Builds Documentation

This patch makes some minor fixups in the PGO section of the advanced
builds documentation in preparation for some future changes. Some minor
formatting and wording changes are included to hopefully make the
documentation more clear.

Reviewed By: sylvestre.ledru

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

20 months agoAMDGPU: Add some tests for i1 sitofp/uitofp-like selects
Matt Arsenault [Sat, 12 Nov 2022 17:57:07 +0000 (09:57 -0800)]
AMDGPU: Add some tests for i1 sitofp/uitofp-like selects

20 months agoAMDGPU: Switch some tests to generated checks
Matt Arsenault [Sat, 12 Nov 2022 18:03:55 +0000 (10:03 -0800)]
AMDGPU: Switch some tests to generated checks

20 months ago[mlir][transform] Make `tile_to_foreach_thread_op` builder to use ArrayAttr
Guray Ozen [Sat, 12 Nov 2022 12:02:02 +0000 (13:02 +0100)]
[mlir][transform] Make `tile_to_foreach_thread_op` builder to use ArrayAttr

D137413 clarified `scf_foreach_thread` thread mapping nicely. `tile_to_foreach_thread_op` is one of the op that generates `scf_foreach_thread`, however, its builders are still having integer array.

This is bug fix of potential problem.

Reviewed By: nicolasvasilache

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

20 months ago[X86] IceLakeModel - conversion instructions don't use Port015
Simon Pilgrim [Sat, 12 Nov 2022 18:17:46 +0000 (18:17 +0000)]
[X86] IceLakeModel - conversion instructions don't use Port015

Fixes a lot of throughput mismatches - the more complicated conversion instructions use ICXPort5+ICXPort01, not ICXPort5+ICXPort015 (ICXPort015 is mainly used for basic Logic + blend ops)

Fixing this should allow us to remove a lot of unnecessary scheduler overrides from IceLakeModel

Confirmed by both Agner + uops.info

20 months ago[lsan] Fix stack buffer overwrite in SuspendedThreadsListMac::GetRegistersAndSP
Kuba Mracek [Sat, 12 Nov 2022 18:16:34 +0000 (10:16 -0800)]
[lsan] Fix stack buffer overwrite in SuspendedThreadsListMac::GetRegistersAndSP

The call to the thread_get_state syscall (that fetches the register values for a thread) on arm64 is mistakenly claiming that the buffer to receive the register state is larger that its actual size on the stack -- the struct on the stack is arm_thread_state64_t, but the MACHINE_THREAD_STATE + MACHINE_THREAD_STATE_COUNT refer to the "unified arm state" struct (which is larger).

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

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

20 months ago[libc++] Make sure that we use the libc++ CI pipeline when no projects have changed
Louis Dionne [Sat, 12 Nov 2022 18:09:32 +0000 (08:09 -1000)]
[libc++] Make sure that we use the libc++ CI pipeline when no projects have changed

That is necessary for scheduled builds to work.

20 months ago[libc++] Remove unused variable in buildkite pipeline generation
Louis Dionne [Sat, 12 Nov 2022 17:57:16 +0000 (07:57 -1000)]
[libc++] Remove unused variable in buildkite pipeline generation

20 months ago[MCA][X86] Add test coverage for VNNI instructions
Simon Pilgrim [Sat, 12 Nov 2022 17:38:29 +0000 (17:38 +0000)]
[MCA][X86] Add test coverage for VNNI instructions

20 months ago[MCA][X86] Add missing AVX-GFNI YMM test coverage
Simon Pilgrim [Sat, 12 Nov 2022 17:37:09 +0000 (17:37 +0000)]
[MCA][X86] Add missing AVX-GFNI YMM test coverage

20 months ago[X86] Always classify gf2p8affineqb/gf2p8affineinvqb instructions with SchedWriteVecIMul
Simon Pilgrim [Sat, 12 Nov 2022 17:20:07 +0000 (17:20 +0000)]
[X86] Always classify gf2p8affineqb/gf2p8affineinvqb instructions with SchedWriteVecIMul

There was a mismatch between the AVX512 and SSE/AVX versions

20 months ago[MCA][X86] Add test coverage for GFNI instructions
Simon Pilgrim [Sat, 12 Nov 2022 17:02:32 +0000 (17:02 +0000)]
[MCA][X86] Add test coverage for GFNI instructions

20 months ago[Hexagon] Improve idioms for fixed-point vector multiplication
Krzysztof Parzyszek [Wed, 28 Sep 2022 14:57:08 +0000 (07:57 -0700)]
[Hexagon] Improve idioms for fixed-point vector multiplication

Make the code more general, restore the ability to generate V6_vmpyhvsrs.

20 months ago[AArch64] Allow sinking both extract and splat to smull
David Green [Sat, 12 Nov 2022 16:41:15 +0000 (16:41 +0000)]
[AArch64] Allow sinking both extract and splat to smull

We currently will sink either a splat or two extracts to a smull/umull.
There can be cases where we have both one operand as an extract and one
as a splat. This alters the areExtractShuffleVectors method to account
for that case.

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

20 months ago[X86] Replace unnecessary SKL CVTSI2SS/CVTSI2SD overrides with better base class...
Simon Pilgrim [Sat, 12 Nov 2022 14:29:45 +0000 (14:29 +0000)]
[X86] Replace unnecessary SKL CVTSI2SS/CVTSI2SD overrides with better base class defs

The folded patterns were missing entirely - confirmed by both Agner + uops.info

20 months ago[MCA][X86][AVX512] Add test coverage for unsigned<->fp conversion instructions
Simon Pilgrim [Sat, 12 Nov 2022 13:45:16 +0000 (13:45 +0000)]
[MCA][X86][AVX512] Add test coverage for unsigned<->fp conversion instructions

20 months ago[X86] SkylakeServerModel - conversion instructions don't use Port015
Simon Pilgrim [Sat, 12 Nov 2022 12:39:59 +0000 (12:39 +0000)]
[X86] SkylakeServerModel - conversion instructions don't use Port015

Fixes a lot of throughput mismatches - the more complicated conversion instructions use SKXPort5+SKXPort01, not SKXPort5+SKXPort015 (SKXPort015 is mainly used for basic Logic + blend ops)

Fixing this should allow us to remove a lot of unnecessary scheduler overrides from SkylakeServerModel

Confirmed by both Agner + uops.info

20 months ago[X86] Replace unnecessary SKL CVTPD2DQ overrides with better base class defs
Simon Pilgrim [Sat, 12 Nov 2022 12:15:56 +0000 (12:15 +0000)]
[X86] Replace unnecessary SKL CVTPD2DQ overrides with better base class defs

Also fixes some AVX missing folded instructions

20 months ago[X86] Tweak Alderlake instregex to match CodeGen-only and public scalar instruction ops
Simon Pilgrim [Sat, 12 Nov 2022 10:37:33 +0000 (10:37 +0000)]
[X86] Tweak Alderlake instregex to match CodeGen-only and public scalar instruction ops

As detailed on #58792 the _Int postfix needs to be optional in the instregex to match both instructions - fixes mismatch warnings on a scheduler model verifier I'm working on

20 months ago[X86] Replace unnecessary SKL conversion overrides with better base class defs
Simon Pilgrim [Sat, 12 Nov 2022 10:23:52 +0000 (10:23 +0000)]
[X86] Replace unnecessary SKL conversion overrides with better base class defs

Split various conversion instructions that use different scheduler pipes for the reg-reg and reg-mem variants (and not an additional Port23 uop for memory folding) - declare the classes separately instead of using the SKLWriteResPair helper

20 months ago[Support/ELF] - Add OpenBSD PT_OPENBSD_MUTABLE constant.
Brad Smith [Sat, 12 Nov 2022 09:54:41 +0000 (04:54 -0500)]
[Support/ELF] - Add OpenBSD PT_OPENBSD_MUTABLE constant.

OpenBSD commit for reference:
https://github.com/openbsd/src/commit/bd249b5664da50f0178adea78250a7a0d8ea6566

20 months ago[lldb] [cmake] Fix another typo in third-party/unittest path
Michał Górny [Sat, 12 Nov 2022 09:34:57 +0000 (10:34 +0100)]
[lldb] [cmake] Fix another typo in third-party/unittest path

20 months ago[LoongArch] Implement MCTargetExpr::fixELFSymbolsInTLSFixups hook
wanglei [Sat, 12 Nov 2022 08:35:59 +0000 (16:35 +0800)]
[LoongArch] Implement MCTargetExpr::fixELFSymbolsInTLSFixups hook

Reviewed By: SixWeining, MaskRay

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

20 months ago[clang-format] Treats &/&& as reference when followed by ',' or ')'
Micah Weston [Sat, 12 Nov 2022 08:51:35 +0000 (00:51 -0800)]
[clang-format] Treats &/&& as reference when followed by ',' or ')'

Ran into an issue where function declarations inside function
scopes or uses of sizeof inside a function would treat the && in
'sizeof(Type &&)' as a binary operator.

Attempt to fix this by assuming reference when followed by ',' or
')'. Also adds tests for these.

Also hit an edge case in another test that treated "and" the same
as "&&" since it parses as C++. Changed the "and" to "also" so it
is no longer a keyword.

Fixes #58923.

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

20 months ago[clang-format] Correctly annotate function names before attributes
Owen Pan [Sat, 5 Nov 2022 11:09:13 +0000 (04:09 -0700)]
[clang-format] Correctly annotate function names before attributes

Fixes #58827.

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

20 months ago[RISCV] Rename template parameter. NFC
Craig Topper [Sat, 12 Nov 2022 08:31:31 +0000 (00:31 -0800)]
[RISCV] Rename template parameter. NFC

20 months ago[RISCV] Use template to reduce some code. NFC
Craig Topper [Sat, 12 Nov 2022 07:05:34 +0000 (23:05 -0800)]
[RISCV] Use template to reduce some code. NFC

20 months agoAdd back single quotes when dontcall attribute was split into dontcall-error/dontcall...
Fangrui Song [Sat, 12 Nov 2022 06:59:51 +0000 (22:59 -0800)]
Add back single quotes when dontcall attribute was split into dontcall-error/dontcall-warn

Single quotes were accidentally dropped in D110364.

20 months ago[X86] Reduce unnecessary instregex for AlderlakeP schedule model
Haohai Wen [Sat, 12 Nov 2022 04:30:04 +0000 (12:30 +0800)]
[X86] Reduce unnecessary instregex for AlderlakeP schedule model

Using instregex for simple instruction opcode is much slower than
instrs. This patch replaces them with instrs.

Github issue: 35303

Reviewed By: RKSimon

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