summaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenTBAA.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/CodeGen/CodeGenTBAA.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenTBAA.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenTBAA.cpp b/clang/lib/CodeGen/CodeGenTBAA.cpp
index 7d730cb1ed154..f4ebe68856758 100644
--- a/clang/lib/CodeGen/CodeGenTBAA.cpp
+++ b/clang/lib/CodeGen/CodeGenTBAA.cpp
@@ -141,6 +141,34 @@ llvm::MDNode *CodeGenTBAA::getTypeInfoHelper(const Type *Ty) {
case BuiltinType::UInt128:
return getTypeInfo(Context.Int128Ty);
+ case BuiltinType::UShortFract:
+ return getTypeInfo(Context.ShortFractTy);
+ case BuiltinType::UFract:
+ return getTypeInfo(Context.FractTy);
+ case BuiltinType::ULongFract:
+ return getTypeInfo(Context.LongFractTy);
+
+ case BuiltinType::SatUShortFract:
+ return getTypeInfo(Context.SatShortFractTy);
+ case BuiltinType::SatUFract:
+ return getTypeInfo(Context.SatFractTy);
+ case BuiltinType::SatULongFract:
+ return getTypeInfo(Context.SatLongFractTy);
+
+ case BuiltinType::UShortAccum:
+ return getTypeInfo(Context.ShortAccumTy);
+ case BuiltinType::UAccum:
+ return getTypeInfo(Context.AccumTy);
+ case BuiltinType::ULongAccum:
+ return getTypeInfo(Context.LongAccumTy);
+
+ case BuiltinType::SatUShortAccum:
+ return getTypeInfo(Context.SatShortAccumTy);
+ case BuiltinType::SatUAccum:
+ return getTypeInfo(Context.SatAccumTy);
+ case BuiltinType::SatULongAccum:
+ return getTypeInfo(Context.SatLongAccumTy);
+
// Treat all other builtin types as distinct types. This includes
// treating wchar_t, char16_t, and char32_t as distinct from their
// "underlying types".
@@ -181,6 +209,15 @@ llvm::MDNode *CodeGenTBAA::getTypeInfoHelper(const Type *Ty) {
return createScalarTypeNode(OutName, getChar(), Size);
}
+ if (const auto *EIT = dyn_cast<ExtIntType>(Ty)) {
+ SmallString<256> OutName;
+ llvm::raw_svector_ostream Out(OutName);
+ // Don't specify signed/unsigned since integer types can alias despite sign
+ // differences.
+ Out << "_ExtInt(" << EIT->getNumBits() << ')';
+ return createScalarTypeNode(OutName, getChar(), Size);
+ }
+
// For now, handle any other kind of type conservatively.
return getChar();
}