History log of /llvm-project/llvm/lib/CodeGen/GlobalISel/Utils.cpp (Results 26 – 50 of 172)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
Revision tags: llvmorg-18.1.3
# 3a106e5b 29-Mar-2024 Shilei Tian <i@tianshilei.me>

[GlobalISel] Fold G_ICMP if possible (#86357)

This patch tries to fold `G_ICMP` if possible.


# 0a429940 25-Mar-2024 Shilei Tian <i@tianshilei.me>

[GlobalISel] Fold G_CTTZ if possible (#86224)

This patch tries to fold `G_CTTZ` if possible.


Revision tags: llvmorg-18.1.2
# 430de48a 08-Mar-2024 Jay Foad <jay.foad@amd.com>

[GISel] Simplify getConstantVRegValWithLookThrough. NFC.


Revision tags: llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4
# 4235e44d 22-Feb-2024 Pierre van Houtryve <pierre.vanhoutryve@amd.com>

[GlobalISel] Constant-fold G_PTR_ADD with different type sizes (#81473)

All other opcodes in the list are constrained to have the same type on
both operands, but not G_PTR_ADD.

Fixes #81464


Revision tags: llvmorg-18.1.0-rc3
# c954986f 07-Feb-2024 Michael Maitland <michaeltmaitland@gmail.com>

[GISel] Add support for scalable vectors in getGCDType (#80307)

This function can be called from buildCopyToRegs where at least one of
the types is a scalable vector type. This function crashed bec

[GISel] Add support for scalable vectors in getGCDType (#80307)

This function can be called from buildCopyToRegs where at least one of
the types is a scalable vector type. This function crashed because it
did not know how to handle scalable vector types.

This patch extends the functionality of getGCDType to handle when at
least one of the types is a scalable vector. getGCDType between a fixed
and scalable vector is not implemented since the docstring of the
function explains that getGCDType is used to build MERGE/UNMERGE
instructions and we will never build a MERGE/UNMERGE between fixed and
scalable vectors.

---------

Co-authored-by: Matt Arsenault <arsenm2@gmail.com>

show more ...


Revision tags: llvmorg-18.1.0-rc2
# 055ac72e 07-Feb-2024 Michael Maitland <michaeltmaitland@gmail.com>

[GISel] Add support for scalable vectors in getLCMType (#80306)

This function can be called from buildCopyToRegs where at least one of
the types is a scalable vector type. This function crashed bec

[GISel] Add support for scalable vectors in getLCMType (#80306)

This function can be called from buildCopyToRegs where at least one of
the types is a scalable vector type. This function crashed because it
did not know how to handle scalable vector types.

This patch extends the functionality of getLCMType to handle when at
least one of the types is a scalable vector. getLCMType between a fixed
and scalable vector is not implemented since the docstring of the
function explains that getLCMType is used to build MERGE/UNMERGE
instructions and we will never build a MERGE/UNMERGE between fixed and
scalable vectors.

show more ...


# ad0acf9e 02-Feb-2024 Michael Maitland <michaeltmaitland@gmail.com>

[GISEL] More accounting for scalable vectors when operating on LLTs (#80372)

This is stacked on by #80377 and #80378


Revision tags: llvmorg-18.1.0-rc1, llvmorg-19-init
# fcfe1b64 15-Jan-2024 chuongg3 <chuong.goh@arm.com>

[GlobalISel] Refactor extractParts() (#75223)

Moved extractParts() and extractVectorParts() from LegalizerHelper
to Utils to be able to use it in different passes.

extractParts() will also try t

[GlobalISel] Refactor extractParts() (#75223)

Moved extractParts() and extractVectorParts() from LegalizerHelper
to Utils to be able to use it in different passes.

extractParts() will also try to use unmerge when doing irregular
splits where possible, falling back to extract elements when not.

show more ...


Revision tags: llvmorg-17.0.6
# 011c9eeb 14-Nov-2023 Changpeng Fang <changpeng.fang@amd.com>

GlobalISel: Guard return in llvm::getIConstantSplatVal (#71989)

getIConstantVRegValWithLookThrough could return NULL.


Revision tags: llvmorg-17.0.5
# 16ddd25b 04-Nov-2023 Craig Topper <craig.topper@sifive.com>

Revert "[GISel] Add LookThroughInstrs for getIConstantVRegVal and getIConstan… (#68327)"

This reverts commit 28ae42e6625154dfd164803850b15d8a0c296b94.

The assert in getIConstantVRegVal was not upda

Revert "[GISel] Add LookThroughInstrs for getIConstantVRegVal and getIConstan… (#68327)"

This reverts commit 28ae42e6625154dfd164803850b15d8a0c296b94.

The assert in getIConstantVRegVal was not updated for this change.
The ValAndVReg->VReg == VReg check fails if any look through happens.

RISC-V was the only target using the lookthrough functionality, but I'm
not sure it was needed so I'm removing that too.

show more ...


Revision tags: llvmorg-17.0.4
# 28ae42e6 20-Oct-2023 Michael Maitland <michaeltmaitland@gmail.com>

[GISel] Add LookThroughInstrs for getIConstantVRegVal and getIConstan… (#68327)

…tVRegSExtVal

The implementation of these methods uses
getIConstantVRegValWithLookThrough with LookThroughInstrs a

[GISel] Add LookThroughInstrs for getIConstantVRegVal and getIConstan… (#68327)

…tVRegSExtVal

The implementation of these methods uses
getIConstantVRegValWithLookThrough with LookThroughInstrs argument set
to false. By adding the optional argument to getIConstantVRegVal and
getIConstantVRegSExtVal we can take advantage of the already built look
through functionality.

show more ...


Revision tags: llvmorg-17.0.3, llvmorg-17.0.2
# ce8c2285 23-Sep-2023 Kazu Hirata <kazu@google.com>

Use llvm::drop_begin and llvm::drop_end (NFC)


Revision tags: llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1
# d86a7d63 28-Jul-2023 Matt Arsenault <Matthew.Arsenault@amd.com>

GlobalISel: Add constant fold combine for zext/sext/anyext

Could use more work for vectors.

https://reviews.llvm.org/D156534


# c5f763b5 16-Aug-2023 David Green <david.green@arm.com>

[AArch64][GISel] Fix selection of G_CONSTANT_FOLD_BARRIER

As far as I understand - When lowering a G_CONSTANT_FOLD_BARRIER we replace the
DstReg with SrcReg, and need to check that the register clas

[AArch64][GISel] Fix selection of G_CONSTANT_FOLD_BARRIER

As far as I understand - When lowering a G_CONSTANT_FOLD_BARRIER we replace the
DstReg with SrcReg, and need to check that the register class is equivalent
when doing so for the replacement to be legal. During lowering we could end up
visiting nodes in an odd order, leaving a G_CONSTANT_FOLD_BARRIER with a known
regclass for the src, but only a regbank for the dst. Providing the Regbank
contains the regclass, the replacement should still be safe.

This fixes an assert seen in the llvm-test-suite when lowering hoisted
constants, relaxing canReplaceReg to account for the case when the regbank
covers the regclass, so it is better able to handle differences in visiting
order.

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

show more ...


Revision tags: llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5
# 5022fc2a 24-May-2023 Jay Foad <jay.foad@amd.com>

[CodeGen] Make use of MachineInstr::all_defs and all_uses. NFCI.

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


Revision tags: llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2
# 7021182d 16-Apr-2023 Shraiysh Vaishay <shraiysh@gmail.com>

[nfc][llvm] Replace pointer cast functions in PointerUnion by llvm casting functions.

This patch replaces the uses of PointerUnion.is function by llvm::isa,
PointerUnion.get function by llvm::cast,

[nfc][llvm] Replace pointer cast functions in PointerUnion by llvm casting functions.

This patch replaces the uses of PointerUnion.is function by llvm::isa,
PointerUnion.get function by llvm::cast, and PointerUnion.dyn_cast by
llvm::dyn_cast_if_present. This is according to the FIXME in
the definition of the class PointerUnion.

This patch does not remove them as they are being used in other
subprojects.

Reviewed By: mehdi_amini

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

show more ...


Revision tags: llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3
# f8f3db27 20-Feb-2023 Kazu Hirata <kazu@google.com>

Use APInt::count{l,r}_{zero,one} (NFC)


Revision tags: llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init
# 0a85c531 17-Jan-2023 Diana Picus <Diana-Magda.Picus@amd.com>

[GlobalISel] Detect splats built with G_CONCAT_VECTORS

Add support to the MI matching of vector splats for patterns that
consist of `G_CONCAT_VECTORS` of smaller splats with the same constant
value.

[GlobalISel] Detect splats built with G_CONCAT_VECTORS

Add support to the MI matching of vector splats for patterns that
consist of `G_CONCAT_VECTORS` of smaller splats with the same constant
value. With this, we would consider the following pseudo-MIR to be a splat:

```
%0 = G_[F]CONSTANT [...]
%1 = G_BUILD_VECTOR %0, %0, ..., %0
%2 = G_CONCAT_VECTORS %1, %1, ..., %1
```

Since it uses recursion for matching splats, it could match pretty
complicated patterns with all sorts of combinations of `G_BUILD_VECTOR`
and `G_CONCAT_VECTORS` (e.g. a `G_CONCAT_VECTORS` with
a `G_BUILD_VECTOR_TRUNC` and another `G_CONCAT_VECTORS` as operands),
and it should also look through copies etc.

This should make it easier to match complex immediates for certain
instructions on AMDGPU, where for instance a <8 x s16> will be split
before instruction selection into a `G_CONCAT_VECTORS` of <2 x s16>
splats.

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

show more ...


# 544e0290 16-Jan-2023 Diana Picus <Diana-Magda.Picus@amd.com>

Fix typo. NFC


# e72ca520 13-Jan-2023 Craig Topper <craig.topper@sifive.com>

[CodeGen] Remove uses of Register::isPhysicalRegister/isVirtualRegister. NFC

Use isPhysical/isVirtual methods.

Reviewed By: foad

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


Revision tags: llvmorg-15.0.7
# 6eb0b0a0 15-Dec-2022 Kazu Hirata <kazu@google.com>

Don't include Optional.h

These files no longer use llvm::Optional.


# 67819a72 13-Dec-2022 Fangrui Song <i@maskray.me>

[CodeGen] llvm::Optional => std::optional


# 998960ee 03-Dec-2022 Kazu Hirata <kazu@google.com>

[CodeGen] Use std::nullopt instead of None (NFC)

This patch mechanically replaces None with std::nullopt where the
compiler would warn if None were deprecated. The intent is to reduce
the amount of

[CodeGen] Use std::nullopt instead of None (NFC)

This patch mechanically replaces None with std::nullopt where the
compiler would warn if None were deprecated. The intent is to reduce
the amount of manual work required in migrating from Optional to
std::optional.

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

show more ...


Revision tags: llvmorg-15.0.6
# af0d3856 26-Nov-2022 Kazu Hirata <kazu@google.com>

[GlobalISel] Use std::optional in Utils.cpp (NFC)

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getval

[GlobalISel] Use std::optional in Utils.cpp (NFC)

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

show more ...


Revision tags: llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, working, llvmorg-15.0.2
# 7388520d 29-Sep-2022 Pierre van Houtryve <pierre.vanhoutryve@amd.com>

[GISel] Add more cases to isKnownNeverNaN

Make it even with the DAG implementation as of D134854

Reviewed By: arsenm, foad

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


1234567