LLVM 18.0.0git
|
This file implements a TargetTransformInfo analysis pass specific to the X86 target machine. More...
#include "X86TargetTransformInfo.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/IntrinsicsX86.h"
#include "llvm/Support/KnownBits.h"
#include "llvm/Transforms/InstCombine/InstCombiner.h"
#include <optional>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "x86tti" |
Functions | |
static Constant * | getNegativeIsTrueBoolVec (Constant *V) |
Return a constant boolean vector that has true elements in all positions where the input constant data vector has an element with the sign bit set. | |
static Value * | getBoolVecFromMask (Value *Mask) |
Convert the x86 XMM integer vector mask to a vector of bools based on each element's most significant bit (the sign bit). | |
static Instruction * | simplifyX86MaskedLoad (IntrinsicInst &II, InstCombiner &IC) |
static bool | simplifyX86MaskedStore (IntrinsicInst &II, InstCombiner &IC) |
static Value * | simplifyX86immShift (const IntrinsicInst &II, InstCombiner::BuilderTy &Builder) |
static Value * | simplifyX86varShift (const IntrinsicInst &II, InstCombiner::BuilderTy &Builder) |
static Value * | simplifyX86pack (IntrinsicInst &II, InstCombiner::BuilderTy &Builder, bool IsSigned) |
static Value * | simplifyX86movmsk (const IntrinsicInst &II, InstCombiner::BuilderTy &Builder) |
static Value * | simplifyX86addcarry (const IntrinsicInst &II, InstCombiner::BuilderTy &Builder) |
static Value * | simplifyTernarylogic (const IntrinsicInst &II, InstCombiner::BuilderTy &Builder) |
static Value * | simplifyX86insertps (const IntrinsicInst &II, InstCombiner::BuilderTy &Builder) |
static Value * | simplifyX86extrq (IntrinsicInst &II, Value *Op0, ConstantInt *CILength, ConstantInt *CIIndex, InstCombiner::BuilderTy &Builder) |
Attempt to simplify SSE4A EXTRQ/EXTRQI instructions using constant folding or conversion to a shuffle vector. | |
static Value * | simplifyX86insertq (IntrinsicInst &II, Value *Op0, Value *Op1, APInt APLength, APInt APIndex, InstCombiner::BuilderTy &Builder) |
Attempt to simplify SSE4A INSERTQ/INSERTQI instructions using constant folding or conversion to a shuffle vector. | |
static Value * | simplifyX86pshufb (const IntrinsicInst &II, InstCombiner::BuilderTy &Builder) |
Attempt to convert pshufb* to shufflevector if the mask is constant. | |
static Value * | simplifyX86vpermilvar (const IntrinsicInst &II, InstCombiner::BuilderTy &Builder) |
Attempt to convert vpermilvar* to shufflevector if the mask is constant. | |
static Value * | simplifyX86vpermv (const IntrinsicInst &II, InstCombiner::BuilderTy &Builder) |
Attempt to convert vpermd/vpermps to shufflevector if the mask is constant. | |
This file implements a TargetTransformInfo analysis pass specific to the X86 target machine.
It uses the target's detailed information to provide more precise answers to certain TTI queries, while letting the target independent and default TTI implementations handle the rest.
Definition in file X86InstCombineIntrinsic.cpp.
#define DEBUG_TYPE "x86tti" |
Definition at line 25 of file X86InstCombineIntrinsic.cpp.
Convert the x86 XMM integer vector mask to a vector of bools based on each element's most significant bit (the sign bit).
Definition at line 39 of file X86InstCombineIntrinsic.cpp.
References getNegativeIsTrueBoolVec(), llvm::Value::getType(), llvm::Type::isIntOrIntVectorTy(), llvm::PatternMatch::m_SExt(), llvm::PatternMatch::m_Value(), and llvm::PatternMatch::match().
Referenced by simplifyX86MaskedLoad(), and simplifyX86MaskedStore().
Return a constant boolean vector that has true elements in all positions where the input constant data vector has an element with the sign bit set.
Definition at line 29 of file X86InstCombineIntrinsic.cpp.
References llvm::ConstantExpr::getBitCast(), llvm::ConstantExpr::getICmp(), llvm::Constant::getNullValue(), and llvm::CmpInst::ICMP_SGT.
Referenced by getBoolVecFromMask(), and llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Definition at line 560 of file X86InstCombineIntrinsic.cpp.
References A, llvm::And, assert(), B, llvm::CallingConv::C, llvm::IRBuilderBase::CreateAnd(), llvm::IRBuilderBase::CreateNot(), llvm::IRBuilderBase::CreateOr(), llvm::IRBuilderBase::CreateXor(), llvm::Constant::getAllOnesValue(), llvm::CallBase::getArgOperand(), llvm::Constant::getNullValue(), llvm::Value::getType(), llvm::PatternMatch::m_ImmConstant(), llvm::PatternMatch::match(), llvm::Or, and llvm::Xor.
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Definition at line 533 of file X86InstCombineIntrinsic.cpp.
References assert(), llvm::IRBuilderBase::CreateExtractValue(), llvm::IRBuilderBase::CreateInsertValue(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::IRBuilderBase::CreateZExt(), llvm::PoisonValue::get(), llvm::CallBase::getArgOperand(), llvm::IRBuilderBase::getInt8Ty(), llvm::Value::getType(), llvm::PatternMatch::m_ZeroInt(), llvm::PatternMatch::match(), and RetTy.
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Attempt to simplify SSE4A EXTRQ/EXTRQI instructions using constant folding or conversion to a shuffle vector.
Definition at line 1687 of file X86InstCombineIntrinsic.cpp.
References llvm::IRBuilderBase::CreateBitCast(), llvm::IRBuilderBase::CreateCall(), llvm::IRBuilderBase::CreateShuffleVector(), End, F, llvm::ConstantVector::get(), llvm::FixedVectorType::get(), llvm::UndefValue::get(), llvm::ConstantAggregateZero::get(), llvm::ConstantInt::get(), llvm::Value::getContext(), llvm::Intrinsic::getDeclaration(), llvm::Type::getInt64Ty(), llvm::Type::getInt8Ty(), llvm::IntrinsicInst::getIntrinsicID(), llvm::Instruction::getModule(), llvm::Value::getType(), llvm::ConstantInt::getValue(), llvm::APInt::getZExtValue(), llvm::Length, llvm::APInt::lshrInPlace(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::APInt::zextOrTrunc().
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Definition at line 120 of file X86InstCombineIntrinsic.cpp.
References assert(), llvm::BitWidth, llvm::computeKnownBits(), llvm::IRBuilderBase::CreateAShr(), llvm::IRBuilderBase::CreateLShr(), llvm::IRBuilderBase::CreateShl(), llvm::IRBuilderBase::CreateShuffleVector(), llvm::IRBuilderBase::CreateVectorSplat(), llvm::IRBuilderBase::CreateZExtOrTrunc(), llvm::ConstantAggregateZero::get(), llvm::ConstantInt::get(), llvm::CallBase::getArgOperand(), llvm::APInt::getBitsSet(), llvm::Module::getDataLayout(), llvm::IntrinsicInst::getIntrinsicID(), llvm::KnownBits::getMaxValue(), llvm::KnownBits::getMinValue(), llvm::Instruction::getModule(), llvm::APInt::getOneBitSet(), llvm::Type::getPrimitiveSizeInBits(), llvm::Value::getType(), llvm::Type::isIntegerTy(), llvm::Type::isVectorTy(), llvm::APInt::isZero(), llvm::KnownBits::isZero(), llvm_unreachable, llvm::APInt::uge(), llvm::APInt::ult(), and llvm::APInt::zextOrTrunc().
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Definition at line 1628 of file X86InstCombineIntrinsic.cpp.
References assert(), llvm::IRBuilderBase::CreateShuffleVector(), llvm::ConstantAggregateZero::get(), llvm::CallBase::getArgOperand(), and llvm::Value::getType().
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Attempt to simplify SSE4A INSERTQ/INSERTQI instructions using constant folding or conversion to a shuffle vector.
Definition at line 1778 of file X86InstCombineIntrinsic.cpp.
References llvm::IRBuilderBase::CreateBitCast(), llvm::IRBuilderBase::CreateCall(), llvm::IRBuilderBase::CreateShuffleVector(), End, F, llvm::ConstantVector::get(), llvm::FixedVectorType::get(), llvm::UndefValue::get(), llvm::ConstantInt::get(), llvm::Value::getContext(), llvm::Intrinsic::getDeclaration(), llvm::Type::getInt64Ty(), llvm::Type::getInt8Ty(), llvm::IntrinsicInst::getIntrinsicID(), llvm::APInt::getLowBitsSet(), llvm::Instruction::getModule(), llvm::Value::getType(), llvm::APInt::getZExtValue(), llvm::Length, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::APInt::shl(), and llvm::APInt::zextOrTrunc().
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Definition at line 57 of file X86InstCombineIntrinsic.cpp.
References llvm::InstCombiner::Builder, llvm::IRBuilderBase::CreateBitCast(), llvm::IRBuilderBase::CreateMaskedLoad(), getBoolVecFromMask(), llvm::Constant::getNullValue(), llvm::User::getOperand(), llvm::Value::getType(), Ptr, and llvm::InstCombiner::replaceInstUsesWith().
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Definition at line 87 of file X86InstCombineIntrinsic.cpp.
References llvm::InstCombiner::Builder, llvm::IRBuilderBase::CreateBitCast(), llvm::IRBuilderBase::CreateMaskedStore(), llvm::InstCombiner::eraseInstFromFunction(), getBoolVecFromMask(), llvm::IntrinsicInst::getIntrinsicID(), llvm::User::getOperand(), llvm::Value::getType(), and Ptr.
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Definition at line 504 of file X86InstCombineIntrinsic.cpp.
References llvm::IRBuilderBase::CreateBitCast(), llvm::IRBuilderBase::CreateIsNeg(), llvm::IRBuilderBase::CreateZExtOrTrunc(), llvm::CallBase::getArgOperand(), llvm::IRBuilderBase::getIntNTy(), llvm::Constant::getNullValue(), and llvm::Value::getType().
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Definition at line 438 of file X86InstCombineIntrinsic.cpp.
References assert(), llvm::IRBuilderBase::CreateICmpSGT(), llvm::IRBuilderBase::CreateICmpSLT(), llvm::IRBuilderBase::CreateSelect(), llvm::IRBuilderBase::CreateShuffleVector(), llvm::IRBuilderBase::CreateTrunc(), llvm::UndefValue::get(), llvm::CallBase::getArgOperand(), llvm::Constant::getIntegerValue(), llvm::APInt::getLowBitsSet(), llvm::Type::getPrimitiveSizeInBits(), llvm::Type::getScalarSizeInBits(), llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignedMinValue(), llvm::Value::getType(), llvm::APInt::getZero(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::APInt::sext().
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Attempt to convert pshufb* to shufflevector if the mask is constant.
Definition at line 1871 of file X86InstCombineIntrinsic.cpp.
References assert(), llvm::IRBuilderBase::CreateShuffleVector(), llvm::CallBase::getArgOperand(), llvm::Constant::getNullValue(), llvm::Value::getType(), and I.
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Definition at line 302 of file X86InstCombineIntrinsic.cpp.
References llvm::all_of(), assert(), llvm::BitWidth, llvm::computeKnownBits(), llvm::IRBuilderBase::CreateAShr(), llvm::IRBuilderBase::CreateLShr(), llvm::IRBuilderBase::CreateShl(), llvm::ConstantVector::get(), llvm::UndefValue::get(), llvm::ConstantInt::get(), llvm::CallBase::getArgOperand(), llvm::Module::getDataLayout(), llvm::Type::getIntegerBitWidth(), llvm::IntrinsicInst::getIntrinsicID(), llvm::KnownBits::getMaxValue(), llvm::Instruction::getModule(), llvm::Value::getType(), llvm::APInt::getZExtValue(), I, Idx, llvm_unreachable, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::APInt::uge(), and llvm::APInt::ult().
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Attempt to convert vpermilvar* to shufflevector if the mask is constant.
Definition at line 1916 of file X86InstCombineIntrinsic.cpp.
References assert(), llvm::IRBuilderBase::CreateShuffleVector(), llvm::CallBase::getArgOperand(), llvm::APInt::getLoBits(), llvm::Value::getType(), I, llvm::APInt::lshrInPlace(), and llvm::APInt::zextOrTrunc().
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
static |
Attempt to convert vpermd/vpermps to shufflevector if the mask is constant.
Definition at line 1963 of file X86InstCombineIntrinsic.cpp.
References assert(), llvm::IRBuilderBase::CreateShuffleVector(), llvm::CallBase::getArgOperand(), llvm::Value::getType(), I, and Size.
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().