LLVM 22.0.0git
AutoUpgrade.cpp File Reference
#include "llvm/IR/AutoUpgrade.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/BinaryFormat/Dwarf.h"
#include "llvm/IR/AttributeMask.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstVisitor.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsAArch64.h"
#include "llvm/IR/IntrinsicsARM.h"
#include "llvm/IR/IntrinsicsNVPTX.h"
#include "llvm/IR/IntrinsicsRISCV.h"
#include "llvm/IR/IntrinsicsWebAssembly.h"
#include "llvm/IR/IntrinsicsX86.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Value.h"
#include "llvm/IR/Verifier.h"
#include "llvm/Support/AMDGPUAddrSpace.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/NVPTXAddrSpace.h"
#include "llvm/Support/Regex.h"
#include "llvm/Support/TimeProfiler.h"
#include "llvm/TargetParser/Triple.h"
#include <cstdint>
#include <cstring>
#include <numeric>

Go to the source code of this file.

Functions

static void rename (GlobalValue *GV)
static bool upgradePTESTIntrinsic (Function *F, Intrinsic::ID IID, Function *&NewFn)
static bool upgradeX86IntrinsicsWith8BitMask (Function *F, Intrinsic::ID IID, Function *&NewFn)
static bool upgradeX86MaskedFPCompare (Function *F, Intrinsic::ID IID, Function *&NewFn)
static bool upgradeX86MultiplyAddBytes (Function *F, Intrinsic::ID IID, Function *&NewFn)
static bool upgradeX86BF16Intrinsic (Function *F, Intrinsic::ID IID, Function *&NewFn)
static bool upgradeX86BF16DPIntrinsic (Function *F, Intrinsic::ID IID, Function *&NewFn)
static bool shouldUpgradeX86Intrinsic (Function *F, StringRef Name)
static bool upgradeX86IntrinsicFunction (Function *F, StringRef Name, Function *&NewFn)
static bool upgradeArmOrAarch64IntrinsicFunction (bool IsArm, Function *F, StringRef Name, Function *&NewFn)
static Intrinsic::ID shouldUpgradeNVPTXTMAG2SIntrinsics (Function *F, StringRef Name)
static Intrinsic::ID shouldUpgradeNVPTXSharedClusterIntrinsic (Function *F, StringRef Name)
static Intrinsic::ID shouldUpgradeNVPTXBF16Intrinsic (StringRef Name)
static bool consumeNVVMPtrAddrSpace (StringRef &Name)
static bool upgradeIntrinsicFunction1 (Function *F, Function *&NewFn, bool CanUpgradeDebugIntrinsicsToRecords)
static ValueupgradeX86PSLLDQIntrinsics (IRBuilder<> &Builder, Value *Op, unsigned Shift)
static ValueupgradeX86PSRLDQIntrinsics (IRBuilder<> &Builder, Value *Op, unsigned Shift)
static ValuegetX86MaskVec (IRBuilder<> &Builder, Value *Mask, unsigned NumElts)
static ValueemitX86Select (IRBuilder<> &Builder, Value *Mask, Value *Op0, Value *Op1)
static ValueemitX86ScalarSelect (IRBuilder<> &Builder, Value *Mask, Value *Op0, Value *Op1)
static ValueupgradeX86ALIGNIntrinsics (IRBuilder<> &Builder, Value *Op0, Value *Op1, Value *Shift, Value *Passthru, Value *Mask, bool IsVALIGN)
static ValueupgradeX86VPERMT2Intrinsics (IRBuilder<> &Builder, CallBase &CI, bool ZeroMask, bool IndexForm)
static ValueupgradeX86BinaryIntrinsics (IRBuilder<> &Builder, CallBase &CI, Intrinsic::ID IID)
static ValueupgradeX86Rotate (IRBuilder<> &Builder, CallBase &CI, bool IsRotateRight)
static ValueupgradeX86vpcom (IRBuilder<> &Builder, CallBase &CI, unsigned Imm, bool IsSigned)
static ValueupgradeX86ConcatShift (IRBuilder<> &Builder, CallBase &CI, bool IsShiftRight, bool ZeroMask)
static ValueupgradeMaskedStore (IRBuilder<> &Builder, Value *Ptr, Value *Data, Value *Mask, bool Aligned)
static ValueupgradeMaskedLoad (IRBuilder<> &Builder, Value *Ptr, Value *Passthru, Value *Mask, bool Aligned)
static ValueupgradeAbs (IRBuilder<> &Builder, CallBase &CI)
static ValueupgradePMULDQ (IRBuilder<> &Builder, CallBase &CI, bool IsSigned)
static ValueapplyX86MaskOn1BitsVec (IRBuilder<> &Builder, Value *Vec, Value *Mask)
static ValueupgradeMaskedCompare (IRBuilder<> &Builder, CallBase &CI, unsigned CC, bool Signed)
static ValueupgradeX86MaskedShift (IRBuilder<> &Builder, CallBase &CI, Intrinsic::ID IID)
static ValueupgradeMaskedMove (IRBuilder<> &Builder, CallBase &CI)
static ValueupgradeMaskToInt (IRBuilder<> &Builder, CallBase &CI)
static bool upgradeAVX512MaskToSelect (StringRef Name, IRBuilder<> &Builder, CallBase &CI, Value *&Rep)
static ValueupgradeNVVMIntrinsicCall (StringRef Name, CallBase *CI, Function *F, IRBuilder<> &Builder)
static ValueupgradeX86IntrinsicCall (StringRef Name, CallBase *CI, Function *F, IRBuilder<> &Builder)
static ValueupgradeAArch64IntrinsicCall (StringRef Name, CallBase *CI, Function *F, IRBuilder<> &Builder)
static ValueupgradeARMIntrinsicCall (StringRef Name, CallBase *CI, Function *F, IRBuilder<> &Builder)
static ValueupgradeAMDGCNIntrinsicCall (StringRef Name, CallBase *CI, Function *F, IRBuilder<> &Builder)
static MDNodeunwrapMAVOp (CallBase *CI, unsigned Op)
 Helper to unwrap intrinsic call MetadataAsValue operands.
static MetadataunwrapMAVMetadataOp (CallBase *CI, unsigned Op)
 Helper to unwrap Metadata MetadataAsValue operands, such as the Value field.
static MDNodegetDebugLocSafe (const Instruction *I)
static void upgradeDbgIntrinsicToDbgRecord (StringRef Name, CallBase *CI)
 Convert debug intrinsic calls to non-instruction debug records.
static void upgradeNVVMFnVectorAttr (const StringRef Attr, const char DimC, GlobalValue *GV, const Metadata *V)
static bool isXYZ (StringRef S)
static bool upgradeSingleNVVMAnnotation (GlobalValue *GV, StringRef K, const Metadata *V)
static bool upgradeRetainReleaseMarker (Module &M)
 This checks for objc retain release marker which should be upgraded.
static bool isOldLoopArgument (Metadata *MD)
static MDStringupgradeLoopTag (LLVMContext &C, StringRef OldTag)
static MetadataupgradeLoopArgument (Metadata *MD)

Variables

static cl::opt< boolDisableAutoUpgradeDebugInfo ("disable-auto-upgrade-debug-info", cl::desc("Disable autoupgrade of debug info"))

Function Documentation

◆ applyX86MaskOn1BitsVec()

◆ consumeNVVMPtrAddrSpace()

bool consumeNVVMPtrAddrSpace ( StringRef & Name)
static

Definition at line 1134 of file AutoUpgrade.cpp.

Referenced by upgradeIntrinsicFunction1(), and upgradeNVVMIntrinsicCall().

◆ emitX86ScalarSelect()

Value * emitX86ScalarSelect ( IRBuilder<> & Builder,
Value * Mask,
Value * Op0,
Value * Op1 )
static

◆ emitX86Select()

◆ getDebugLocSafe()

MDNode * getDebugLocSafe ( const Instruction * I)
static

Definition at line 4539 of file AutoUpgrade.cpp.

References I.

Referenced by upgradeDbgIntrinsicToDbgRecord().

◆ getX86MaskVec()

◆ isOldLoopArgument()

bool isOldLoopArgument ( Metadata * MD)
static

Definition at line 5921 of file AutoUpgrade.cpp.

References llvm::dyn_cast_or_null(), and T.

Referenced by llvm::upgradeInstructionLoopAttachment().

◆ isXYZ()

bool isXYZ ( StringRef S)
inlinestatic

Definition at line 5411 of file AutoUpgrade.cpp.

Referenced by upgradeSingleNVVMAnnotation().

◆ rename()

◆ shouldUpgradeNVPTXBF16Intrinsic()

◆ shouldUpgradeNVPTXSharedClusterIntrinsic()

◆ shouldUpgradeNVPTXTMAG2SIntrinsics()

◆ shouldUpgradeX86Intrinsic()

bool shouldUpgradeX86Intrinsic ( Function * F,
StringRef Name )
static

Definition at line 148 of file AutoUpgrade.cpp.

References F.

Referenced by upgradeX86IntrinsicFunction().

◆ unwrapMAVMetadataOp()

Metadata * unwrapMAVMetadataOp ( CallBase * CI,
unsigned Op )
static

Helper to unwrap Metadata MetadataAsValue operands, such as the Value field.

Definition at line 4532 of file AutoUpgrade.cpp.

References llvm::dyn_cast(), and llvm::CallBase::getArgOperand().

Referenced by upgradeDbgIntrinsicToDbgRecord().

◆ unwrapMAVOp()

MDNode * unwrapMAVOp ( CallBase * CI,
unsigned Op )
static

Helper to unwrap intrinsic call MetadataAsValue operands.

Return as a plain MDNode, as it's the verifier's job to check these are the correct types later.

Definition at line 4520 of file AutoUpgrade.cpp.

References llvm::dyn_cast(), llvm::dyn_cast_if_present(), and llvm::CallBase::getArgOperand().

Referenced by upgradeDbgIntrinsicToDbgRecord().

◆ upgradeAArch64IntrinsicCall()

◆ upgradeAbs()

Value * upgradeAbs ( IRBuilder<> & Builder,
CallBase & CI )
static

◆ upgradeAMDGCNIntrinsicCall()

◆ upgradeARMIntrinsicCall()

◆ upgradeArmOrAarch64IntrinsicFunction()

◆ upgradeAVX512MaskToSelect()

◆ upgradeDbgIntrinsicToDbgRecord()

◆ upgradeIntrinsicFunction1()

◆ upgradeLoopArgument()

◆ upgradeLoopTag()

◆ upgradeMaskedCompare()

◆ upgradeMaskedLoad()

◆ upgradeMaskedMove()

Value * upgradeMaskedMove ( IRBuilder<> & Builder,
CallBase & CI )
static

Definition at line 2200 of file AutoUpgrade.cpp.

References A(), B(), llvm::CallBase::getArgOperand(), and Select.

Referenced by upgradeX86IntrinsicCall().

◆ upgradeMaskedStore()

Value * upgradeMaskedStore ( IRBuilder<> & Builder,
Value * Ptr,
Value * Data,
Value * Mask,
bool Aligned )
static

◆ upgradeMaskToInt()

Value * upgradeMaskToInt ( IRBuilder<> & Builder,
CallBase & CI )
static

◆ upgradeNVVMFnVectorAttr()

◆ upgradeNVVMIntrinsicCall()

◆ upgradePMULDQ()

Value * upgradePMULDQ ( IRBuilder<> & Builder,
CallBase & CI,
bool IsSigned )
static

◆ upgradePTESTIntrinsic()

bool upgradePTESTIntrinsic ( Function * F,
Intrinsic::ID IID,
Function *& NewFn )
static

◆ upgradeRetainReleaseMarker()

bool upgradeRetainReleaseMarker ( Module & M)
static

This checks for objc retain release marker which should be upgraded.

It returns true if module is modified.

Definition at line 5517 of file AutoUpgrade.cpp.

References Changed, llvm::dyn_cast_or_null(), llvm::Module::Error, llvm::MDString::get(), llvm::NamedMDNode::getOperand(), and llvm::SmallVectorTemplateCommon< T, typename >::size().

Referenced by llvm::UpgradeARCRuntime().

◆ upgradeSingleNVVMAnnotation()

◆ upgradeX86ALIGNIntrinsics()

Value * upgradeX86ALIGNIntrinsics ( IRBuilder<> & Builder,
Value * Op0,
Value * Op1,
Value * Shift,
Value * Passthru,
Value * Mask,
bool IsVALIGN )
static

◆ upgradeX86BF16DPIntrinsic()

bool upgradeX86BF16DPIntrinsic ( Function * F,
Intrinsic::ID IID,
Function *& NewFn )
static

Definition at line 138 of file AutoUpgrade.cpp.

References F, llvm::Intrinsic::getOrInsertDeclaration(), and rename().

Referenced by upgradeX86IntrinsicFunction().

◆ upgradeX86BF16Intrinsic()

bool upgradeX86BF16Intrinsic ( Function * F,
Intrinsic::ID IID,
Function *& NewFn )
static

Definition at line 128 of file AutoUpgrade.cpp.

References F, llvm::Intrinsic::getOrInsertDeclaration(), and rename().

Referenced by upgradeX86IntrinsicFunction().

◆ upgradeX86BinaryIntrinsics()

Value * upgradeX86BinaryIntrinsics ( IRBuilder<> & Builder,
CallBase & CI,
Intrinsic::ID IID )
static

◆ upgradeX86ConcatShift()

◆ upgradeX86IntrinsicCall()

Value * upgradeX86IntrinsicCall ( StringRef Name,
CallBase * CI,
Function * F,
IRBuilder<> & Builder )
static

Definition at line 2628 of file AutoUpgrade.cpp.

References A(), AbstractManglingParser< Derived, Alloc >::Ops, llvm::Aligned, applyX86MaskOn1BitsVec(), llvm::CallBase::arg_size(), llvm::CallBase::args(), llvm::ArrayRef(), assert(), B(), llvm::CallingConv::C, llvm::cast(), llvm::Data, emitX86ScalarSelect(), emitX86Select(), F, llvm::ConstantAggregateZero::get(), llvm::ConstantAsMetadata::get(), llvm::FixedVectorType::get(), llvm::MDNode::get(), llvm::PoisonValue::get(), llvm::VectorType::get(), llvm::Constant::getAllOnesValue(), llvm::CallBase::getArgOperand(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getFixedValue(), llvm::Type::getHalfTy(), llvm::Type::getInt32Ty(), llvm::Type::getInt64Ty(), llvm::VectorType::getInteger(), llvm::Instruction::getModule(), llvm::Constant::getNullValue(), getNumElements(), llvm::User::getOperand(), llvm::Intrinsic::getOrInsertDeclaration(), llvm::Type::getPrimitiveSizeInBits(), llvm::Type::getScalarSizeInBits(), llvm::ShuffleVectorInst::getShuffleMask(), getType(), llvm::Value::getType(), getX86MaskVec(), High, I, llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLT, llvm::isa(), llvm::Type::isIntegerTy(), LHS, llvm_unreachable, llvm::Offset, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::Value::replaceAllUsesWith(), RHS, llvm::Instruction::setMetadata(), Size, std::swap(), upgradeAbs(), upgradeAVX512MaskToSelect(), upgradeMaskedCompare(), upgradeMaskedLoad(), upgradeMaskedMove(), upgradeMaskedStore(), upgradeMaskToInt(), upgradePMULDQ(), upgradeX86ALIGNIntrinsics(), upgradeX86BinaryIntrinsics(), upgradeX86ConcatShift(), upgradeX86MaskedShift(), upgradeX86PSLLDQIntrinsics(), upgradeX86PSRLDQIntrinsics(), upgradeX86Rotate(), upgradeX86vpcom(), and upgradeX86VPERMT2Intrinsics().

Referenced by llvm::UpgradeIntrinsicCall().

◆ upgradeX86IntrinsicFunction()

◆ upgradeX86IntrinsicsWith8BitMask()

bool upgradeX86IntrinsicsWith8BitMask ( Function * F,
Intrinsic::ID IID,
Function *& NewFn )
static

◆ upgradeX86MaskedFPCompare()

bool upgradeX86MaskedFPCompare ( Function * F,
Intrinsic::ID IID,
Function *& NewFn )
static

Definition at line 99 of file AutoUpgrade.cpp.

References F, llvm::Intrinsic::getOrInsertDeclaration(), and rename().

Referenced by upgradeX86IntrinsicFunction().

◆ upgradeX86MaskedShift()

Value * upgradeX86MaskedShift ( IRBuilder<> & Builder,
CallBase & CI,
Intrinsic::ID IID )
static

Definition at line 2193 of file AutoUpgrade.cpp.

References emitX86Select(), and llvm::CallBase::getArgOperand().

Referenced by upgradeX86IntrinsicCall().

◆ upgradeX86MultiplyAddBytes()

bool upgradeX86MultiplyAddBytes ( Function * F,
Intrinsic::ID IID,
Function *& NewFn )
static

◆ upgradeX86PSLLDQIntrinsics()

Value * upgradeX86PSLLDQIntrinsics ( IRBuilder<> & Builder,
Value * Op,
unsigned Shift )
static

◆ upgradeX86PSRLDQIntrinsics()

Value * upgradeX86PSRLDQIntrinsics ( IRBuilder<> & Builder,
Value * Op,
unsigned Shift )
static

◆ upgradeX86Rotate()

Value * upgradeX86Rotate ( IRBuilder<> & Builder,
CallBase & CI,
bool IsRotateRight )
static

◆ upgradeX86vpcom()

◆ upgradeX86VPERMT2Intrinsics()

Value * upgradeX86VPERMT2Intrinsics ( IRBuilder<> & Builder,
CallBase & CI,
bool ZeroMask,
bool IndexForm )
static

Variable Documentation

◆ DisableAutoUpgradeDebugInfo

cl::opt< bool > DisableAutoUpgradeDebugInfo("disable-auto-upgrade-debug-info", cl::desc("Disable autoupgrade of debug info")) ( "disable-auto-upgrade-debug-info" ,
cl::desc("Disable autoupgrade of debug info")  )
static

Referenced by llvm::UpgradeDebugInfo().