Struct-path aware TBAA: uniformize scalar tag and path tag.
For struct-path aware TBAA, we used to use scalar type node as the scalar tag, which has an incompatible format with the struct path tag. We now use the same format: base type, access type and offset. We also uniformize the scalar type node and the struct type node: name, a list of pairs (offset + pointer to MDNode). For scalar type, we have a single pair. These are to make implementaiton of aliasing rules easier. llvm-svn: 179335
This commit is contained in:
@@ -242,9 +242,18 @@ llvm::MDNode *CodeGenModule::getTBAAStructTagInfo(QualType BaseTy,
|
||||
return TBAA->getTBAAStructTagInfo(BaseTy, AccessN, O);
|
||||
}
|
||||
|
||||
/// Decorate the instruction with a TBAA tag. For scalar TBAA, the tag
|
||||
/// is the same as the type. For struct-path aware TBAA, the tag
|
||||
/// is different from the type: base type, access type and offset.
|
||||
/// When ConvertTypeToTag is true, we create a tag based on the scalar type.
|
||||
void CodeGenModule::DecorateInstruction(llvm::Instruction *Inst,
|
||||
llvm::MDNode *TBAAInfo) {
|
||||
Inst->setMetadata(llvm::LLVMContext::MD_tbaa, TBAAInfo);
|
||||
llvm::MDNode *TBAAInfo,
|
||||
bool ConvertTypeToTag) {
|
||||
if (ConvertTypeToTag && TBAA && CodeGenOpts.StructPathTBAA)
|
||||
Inst->setMetadata(llvm::LLVMContext::MD_tbaa,
|
||||
TBAA->getTBAAScalarTagInfo(TBAAInfo));
|
||||
else
|
||||
Inst->setMetadata(llvm::LLVMContext::MD_tbaa, TBAAInfo);
|
||||
}
|
||||
|
||||
bool CodeGenModule::isTargetDarwin() const {
|
||||
|
||||
Reference in New Issue
Block a user