LLVM 17.0.0git
|
#include "llvm/Transforms/IPO/LowerTypeTests.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/EquivalenceClasses.h"
#include "llvm/ADT/PointerUnion.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/TinyPtrVector.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Analysis/TypeMetadataUtils.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalObject.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/ModuleSummaryIndex.h"
#include "llvm/IR/ModuleSummaryIndexYAML.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/ReplaceConstant.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Use.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/TrailingObjects.h"
#include "llvm/Support/YAMLTraits.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TargetParser/Triple.h"
#include "llvm/Transforms/IPO.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <memory>
#include <set>
#include <string>
#include <system_error>
#include <utility>
#include <vector>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "lowertypetests" |
Functions | |
STATISTIC (ByteArraySizeBits, "Byte array size in bits") | |
STATISTIC (ByteArraySizeBytes, "Byte array size in bytes") | |
STATISTIC (NumByteArraysCreated, "Number of byte arrays created") | |
STATISTIC (NumTypeTestCallsLowered, "Number of type test calls lowered") | |
STATISTIC (NumTypeIdDisjointSets, "Number of disjoint sets of type identifiers") | |
static Value * | createMaskedBitTest (IRBuilder<> &B, Value *Bits, Value *BitOffset) |
Build a test that bit BitOffset mod sizeof(Bits)*8 is set in Bits. | |
static bool | isKnownTypeIdMember (Metadata *TypeId, const DataLayout &DL, Value *V, uint64_t COffset) |
static bool | isThumbFunction (Function *F, Triple::ArchType ModuleArch) |
static bool | isDirectCall (Use &U) |
static void | dropTypeTests (Module &M, Function &TypeTestFunc) |
Variables | |
static cl::opt< bool > | AvoidReuse ("lowertypetests-avoid-reuse", cl::desc("Try to avoid reuse of byte array addresses using aliases"), cl::Hidden, cl::init(true)) |
static cl::opt< PassSummaryAction > | ClSummaryAction ("lowertypetests-summary-action", cl::desc("What to do with the summary when running this pass"), cl::values(clEnumValN(PassSummaryAction::None, "none", "Do nothing"), clEnumValN(PassSummaryAction::Import, "import", "Import typeid resolutions from summary and globals"), clEnumValN(PassSummaryAction::Export, "export", "Export typeid resolutions to summary and globals")), cl::Hidden) |
static cl::opt< std::string > | ClReadSummary ("lowertypetests-read-summary", cl::desc("Read summary from given YAML file before running pass"), cl::Hidden) |
static cl::opt< std::string > | ClWriteSummary ("lowertypetests-write-summary", cl::desc("Write summary to given YAML file after running pass"), cl::Hidden) |
static cl::opt< bool > | ClDropTypeTests ("lowertypetests-drop-type-tests", cl::desc("Simply drop type test assume sequences"), cl::Hidden, cl::init(false)) |
static const unsigned | kX86JumpTableEntrySize = 8 |
static const unsigned | kX86IBTJumpTableEntrySize = 16 |
static const unsigned | kARMJumpTableEntrySize = 4 |
static const unsigned | kARMBTIJumpTableEntrySize = 8 |
static const unsigned | kARMv6MJumpTableEntrySize = 16 |
static const unsigned | kRISCVJumpTableEntrySize = 8 |
#define DEBUG_TYPE "lowertypetests" |
Definition at line 88 of file LowerTypeTests.cpp.
Build a test that bit BitOffset mod sizeof(Bits)*8 is set in Bits.
This pattern matches to the bt instruction on x86.
Definition at line 571 of file LowerTypeTests.cpp.
References B, llvm::BitWidth, and llvm::ConstantInt::get().
Definition at line 1886 of file LowerTypeTests.cpp.
References llvm::all_of(), assert(), llvm::Instruction::eraseFromParent(), llvm::ConstantInt::getTrue(), llvm::make_early_inc_range(), llvm::Value::replaceAllUsesWith(), llvm::Value::use_empty(), llvm::Value::users(), and llvm::Value::uses().
Definition at line 1840 of file LowerTypeTests.cpp.
|
static |
Definition at line 682 of file LowerTypeTests.cpp.
References DL, GEP, llvm::APInt::getZExtValue(), isKnownTypeIdMember(), and llvm::Offset.
Referenced by isKnownTypeIdMember().
|
static |
Definition at line 1394 of file LowerTypeTests.cpp.
References F, llvm::Attribute::getValueAsString(), llvm::Attribute::isValid(), llvm::StringRef::split(), and llvm::Triple::thumb.
Referenced by llvm::ARMBasicBlockUtils::ARMBasicBlockUtils().
STATISTIC | ( | ByteArraySizeBits | , |
"Byte array size in bits" | |||
) |
STATISTIC | ( | ByteArraySizeBytes | , |
"Byte array size in bytes" | |||
) |
STATISTIC | ( | NumByteArraysCreated | , |
"Number of byte arrays created" | |||
) |
STATISTIC | ( | NumTypeIdDisjointSets | , |
"Number of disjoint sets of type identifiers" | |||
) |
|
static |
|
static |
|
static |
|
static |
Referenced by checkCombinedSummaryForTesting().
|
static |
Definition at line 1196 of file LowerTypeTests.cpp.
Definition at line 1195 of file LowerTypeTests.cpp.
Definition at line 1197 of file LowerTypeTests.cpp.
Definition at line 1198 of file LowerTypeTests.cpp.
Definition at line 1194 of file LowerTypeTests.cpp.
Definition at line 1193 of file LowerTypeTests.cpp.