History log of /llvm-project/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp (Results 1 – 25 of 55)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
Revision tags: llvmorg-21-init
# 416f1c46 20-Jan-2025 Mats Jun Larsen <mats@jun.codes>

[IR] Replace of PointerType::get(Type) with opaque version (NFC) (#123617)

In accordance with https://github.com/llvm/llvm-project/issues/123569

In order to keep the patch at reasonable size, this

[IR] Replace of PointerType::get(Type) with opaque version (NFC) (#123617)

In accordance with https://github.com/llvm/llvm-project/issues/123569

In order to keep the patch at reasonable size, this PR only covers for
the llvm subproject, unittests excluded.

show more ...


Revision tags: llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3
# 85c17e40 17-Oct-2024 Jay Foad <jay.foad@amd.com>

[LLVM] Make more use of IRBuilder::CreateIntrinsic. NFC. (#112706)

Convert many instances of:
Fn = Intrinsic::getOrInsertDeclaration(...);
CreateCall(Fn, ...)
to the equivalent CreateIntrinsi

[LLVM] Make more use of IRBuilder::CreateIntrinsic. NFC. (#112706)

Convert many instances of:
Fn = Intrinsic::getOrInsertDeclaration(...);
CreateCall(Fn, ...)
to the equivalent CreateIntrinsic call.

show more ...


Revision tags: llvmorg-19.1.2
# fa789dff 11-Oct-2024 Rahul Joshi <rjoshi@nvidia.com>

[NFC] Rename `Intrinsic::getDeclaration` to `getOrInsertDeclaration` (#111752)

Rename the function to reflect its correct behavior and to be consistent
with `Module::getOrInsertFunction`. This is a

[NFC] Rename `Intrinsic::getDeclaration` to `getOrInsertDeclaration` (#111752)

Rename the function to reflect its correct behavior and to be consistent
with `Module::getOrInsertFunction`. This is also in preparation of
adding a new `Intrinsic::getDeclaration` that will have behavior similar
to `Module::getFunction` (i.e, just lookup, no creation).

show more ...


Revision tags: llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4
# d1f3fecf 31-Aug-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Only demand the active index bits for VPERMV/VPERMV3 mask values (#106750)

VPERMV/VPERMV3 only uses the lower bits of the vector element indices - so use SimplifyDemandedBits to i

[InstCombine][X86] Only demand the active index bits for VPERMV/VPERMV3 mask values (#106750)

VPERMV/VPERMV3 only uses the lower bits of the vector element indices - so use SimplifyDemandedBits to ignore anything touching the remaining bits.

Fixes #106413

show more ...


# ef7b18a5 30-Aug-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[X86] Rename trailing whitespace. NFC.

Noticed in clang-formatting of #106750


# d57c0464 29-Aug-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Only demand used bits for VPERMILPD/VPERMILPS mask values

VPERMILPS lower bits0-3 (to index per-lane i32/f32 0-3)
VPERMILPD uses bit1 (to index per-lane i64/f64 0-1)

Use Simplif

[InstCombine][X86] Only demand used bits for VPERMILPD/VPERMILPS mask values

VPERMILPS lower bits0-3 (to index per-lane i32/f32 0-3)
VPERMILPD uses bit1 (to index per-lane i64/f64 0-1)

Use SimplifyDemandedBits to ignore anything touching the remaining bits.

Part of #106413

show more ...


# 51a09512 28-Aug-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Only demand used bits for PSHUFB mask values (#106377)

(V)PSHUFB only uses the sign bit (for zeroing) and the lower 4 bits (to index per-lane byte 0-15) - so use SimplifyDemandedB

[InstCombine][X86] Only demand used bits for PSHUFB mask values (#106377)

(V)PSHUFB only uses the sign bit (for zeroing) and the lower 4 bits (to index per-lane byte 0-15) - so use SimplifyDemandedBits to ignore anything touching the remaining bits.

Fixes #106256

show more ...


Revision tags: llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1
# dfeb3991 25-Jul-2024 James Y Knight <jyknight@google.com>

Remove the `x86_mmx` IR type. (#98505)

It is now translated to `<1 x i64>`, which allows the removal of a bunch
of special casing.

This _incompatibly_ changes the ABI of any LLVM IR function wit

Remove the `x86_mmx` IR type. (#98505)

It is now translated to `<1 x i64>`, which allows the removal of a bunch
of special casing.

This _incompatibly_ changes the ABI of any LLVM IR function with
`x86_mmx` arguments or returns: instead of passing in mmx registers,
they will now be passed via integer registers. However, the real-world
incompatibility caused by this is expected to be minimal, because Clang
never uses the x86_mmx type -- it lowers `__m64` to either `<1 x i64>`
or `double`, depending on ABI.

This change does _not_ eliminate the SelectionDAG `MVT::x86mmx` type.
That type simply no longer corresponds to an IR type, and is used only
by MMX intrinsics and inline-asm operands.

Because SelectionDAGBuilder only knows how to generate the
operands/results of intrinsics based on the IR type, it thus now
generates the intrinsics with the type MVT::v1i64, instead of
MVT::x86mmx. We need to fix this before the DAG LegalizeTypes, and thus
have the X86 backend fix them up in DAGCombine. (This may be a
short-lived hack, if all the MMX intrinsics can be removed in upcoming
changes.)

Works towards issue #98272.

show more ...


Revision tags: llvmorg-20-init
# 6c1c97c5 05-Jul-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Peek through bitcast+shuffle+bitcast sequence when folding BLENDV to SELECT

Mentioned on #96882


# 2bc474b7 05-Jul-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Pull out repeated uses of PatternMatch namespace. NFC.

Followup requested on #96882


# f60f7b47 03-Jul-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Add multiply-by-one handling for MULH/PMULHU/PMULHRS intrinsics

MULH/PMULHU simplifies to ASHR/ZERO as they just become a SEXT/ZEXT sign-splat instruction

PMULHRS doesn't simplif

[InstCombine][X86] Add multiply-by-one handling for MULH/PMULHU/PMULHRS intrinsics

MULH/PMULHU simplifies to ASHR/ZERO as they just become a SEXT/ZEXT sign-splat instruction

PMULHRS doesn't simplify as much so I've not attempted to fold it.

show more ...


# 7bb251a9 03-Jul-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Add constant folding for PMULH/PMULHU/PMULHRS intrinsics


# 4ee4bc3c 03-Jul-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Add zero/undef arg handling for MULH/PMULHU/PMULHRS intrinsics


# c20695a4 03-Jul-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] simplifyDemandedVectorEltsIntrinsic - add handling for PMULH/PMULHU/PMULHRS intrinsics


# 18eef680 03-Jul-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

Fix signed/unsigned integer comparison warning. NFC.


# 7de7f50f 03-Jul-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Fold blendv(x,y,shuffle(bitcast(sext(m)))) -> select(shuffle(m),x,y) (#96882)

We already handle blendv(x,y,bitcast(sext(m))) -> select(m,x,y) cases, but this adds support for peek

[InstCombine][X86] Fold blendv(x,y,shuffle(bitcast(sext(m)))) -> select(shuffle(m),x,y) (#96882)

We already handle blendv(x,y,bitcast(sext(m))) -> select(m,x,y) cases, but this adds support for peeking through one-use shuffles as well. VectorCombine should already have canonicalized the IR to shuffle(bitcast(...)) for us.

The particular use case is where we have split generic 256/512-bit code to use target-specific blendv intrinsics (e.g. AVX1 spoofing AVX2 256-bit ops).

Fixes #58895

show more ...


# 80368786 01-Jul-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Fold avx512 vpermi2 intrinsics with constant masks to generic shuffles

Similar to most other x86 shuffles, if the shuffle mask is constant then convert to a generic shuffle


# d893ed78 28-Jun-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Add undef arg handling for PMADDWD/PMADDUBSW intrinsics

These fold to zero, not undef, as the other arg could still be zero.


# f1faba25 28-Jun-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Add constant folding for PMADDWD/PMADDUBSW intrinsics


# 9de14e24 28-Jun-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Add zero arg handling for PMADDWD/PMADDUBSW intrinsics

PMADDWD/PMADDUBSW - multiply by zero folds

Initial setup to handle future PMADDWD/PMADDUBSW simplification / constant foldi

[InstCombine][X86] Add zero arg handling for PMADDWD/PMADDUBSW intrinsics

PMADDWD/PMADDUBSW - multiply by zero folds

Initial setup to handle future PMADDWD/PMADDUBSW simplification / constant folding

show more ...


# e1751a10 28-Jun-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] simplifyDemandedVectorEltsIntrinsic - add handling for PMADDWD/PMADDUBSW intrinsics


# 2d209d96 27-Jun-2024 Nikita Popov <npopov@redhat.com>

[IR] Add getDataLayout() helpers to BasicBlock and Instruction (#96902)

This is a helper to avoid writing `getModule()->getDataLayout()`. I
regularly try to use this method only to remember it does

[IR] Add getDataLayout() helpers to BasicBlock and Instruction (#96902)

This is a helper to avoid writing `getModule()->getDataLayout()`. I
regularly try to use this method only to remember it doesn't exist...

`getModule()->getDataLayout()` is also a common (the most common?)
reason why code has to include the Module.h header.

show more ...


# cca4f549 26-Jun-2024 Simon Pilgrim <llvm-dev@redking.me.uk>

[InstCombine][X86] Avoid repeated getType() calls when folding blendv->select. NFC.

Cleanup prep work for #58895


Revision tags: llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6
# f893dccb 09-May-2024 Eli Friedman <efriedma@quicinc.com>

Replace uses of ConstantExpr::getCompare. (#91558)

Use ICmpInst::compare() where possible, ConstantFoldCompareInstOperands
in other places. This only changes places where the either the fold is
gu

Replace uses of ConstantExpr::getCompare. (#91558)

Use ICmpInst::compare() where possible, ConstantFoldCompareInstOperands
in other places. This only changes places where the either the fold is
guaranteed to succeed, or the code doesn't use the resulting compare if
we fail to fold.

show more ...


Revision tags: llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, 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, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2
# 80e57a8e 06-Apr-2023 Shengchen Kan <shengchen.kan@intel.com>

[X86][InstCombine] Avoid -Wparentheses warnings introduced in D145220, NFCI


123