Author: majnemer
Date: Mon Jun 16 13:46:51 2014
New Revision: 211041

URL: http://llvm.org/viewvc/llvm-project?rev=211041&view=rev
Log:
MS ABI: Implement x86_64 RTTI

Summary:
The RTTI scheme for x86_64 is largely the same as the one for i386.

Differences are largely limited to avoiding load-time relocations by
replacing pointers to RTTI metadata with the difference of that data
relative to the load address of the module.

Interestingly, this precludes the possibility of successfully using RTTI
data from another DLL.  The ImageBase reference is always relative to
the current DLL.

Differential Revision: http://reviews.llvm.org/D4148

Modified:
    cfe/trunk/lib/CodeGen/MicrosoftRTTI.cpp
    cfe/trunk/test/CodeGenCXX/microsoft-abi-rtti.cpp

Modified: cfe/trunk/lib/CodeGen/MicrosoftRTTI.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/MicrosoftRTTI.cpp?rev=211041&r1=211040&r2=211041&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/MicrosoftRTTI.cpp (original)
+++ cfe/trunk/lib/CodeGen/MicrosoftRTTI.cpp Mon Jun 16 13:46:51 2014
@@ -51,6 +51,43 @@ using namespace CodeGen;
 //   vbtable.  The names of the BaseClassDescriptors have all of their fields
 //   mangled into them so they can be aggressively deduplicated by the linker.
 
+static bool isImageRelative(CodeGenModule &CGM) {
+  return CGM.getTarget().getPointerWidth(/*AddressSpace=*/0) == 64;
+}
+
+static llvm::Type *getImageRelativeType(CodeGenModule &CGM,
+                                        llvm::Type *PtrType) {
+  if (!isImageRelative(CGM))
+    return PtrType;
+  return CGM.IntTy;
+}
+
+static llvm::GlobalVariable *getImageBase(CodeGenModule &CGM) {
+  StringRef Name = "__ImageBase";
+  if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(Name))
+    return GV;
+
+  return new llvm::GlobalVariable(CGM.getModule(), CGM.Int8Ty,
+                                  /*isConstant=*/true,
+                                  llvm::GlobalValue::ExternalLinkage,
+                                  /*Initializer=*/nullptr, Name);
+}
+
+static llvm::Constant *getImageRelativeConstant(CodeGenModule &CGM,
+                                                llvm::Constant *PtrVal) {
+  if (!isImageRelative(CGM))
+    return PtrVal;
+
+  llvm::Constant *ImageBaseAsInt =
+      llvm::ConstantExpr::getPtrToInt(getImageBase(CGM), CGM.IntPtrTy);
+  llvm::Constant *PtrValAsInt =
+      llvm::ConstantExpr::getPtrToInt(PtrVal, CGM.IntPtrTy);
+  llvm::Constant *Diff =
+      llvm::ConstantExpr::getSub(PtrValAsInt, ImageBaseAsInt,
+                                 /*HasNUW=*/true, /*HasNSW=*/true);
+  return llvm::ConstantExpr::getTrunc(Diff, CGM.IntTy);
+}
+
 // 5 routines for constructing the llvm types for MS RTTI structs.
 static llvm::StructType *getClassHierarchyDescriptorType(CodeGenModule &CGM);
 
@@ -72,13 +109,15 @@ static llvm::StructType *getBaseClassDes
   if (auto Type = CGM.getModule().getTypeByName(Name))
     return Type;
   llvm::Type *FieldTypes[] = {
-      CGM.Int8PtrTy,
+      getImageRelativeType(CGM, CGM.Int8PtrTy),
       CGM.IntTy,
       CGM.IntTy,
       CGM.IntTy,
       CGM.IntTy,
       CGM.IntTy,
-      getClassHierarchyDescriptorType(CGM)->getPointerTo()};
+      getImageRelativeType(
+          CGM, getClassHierarchyDescriptorType(CGM)->getPointerTo()),
+  };
   return llvm::StructType::create(CGM.getLLVMContext(), FieldTypes, Name);
 }
 
@@ -92,7 +131,10 @@ static llvm::StructType *getClassHierarc
     CGM.IntTy,
     CGM.IntTy,
     CGM.IntTy,
-    getBaseClassDescriptorType(CGM)->getPointerTo()->getPointerTo()};
+    getImageRelativeType(
+        CGM,
+        getBaseClassDescriptorType(CGM)->getPointerTo()->getPointerTo()),
+  };
   Type->setBody(FieldTypes);
   return Type;
 }
@@ -101,13 +143,21 @@ static llvm::StructType *getCompleteObje
   static const char Name[] = "MSRTTICompleteObjectLocator";
   if (auto Type = CGM.getModule().getTypeByName(Name))
     return Type;
+  llvm::StructType *Type = llvm::StructType::create(CGM.getLLVMContext(), 
Name);
   llvm::Type *FieldTypes[] = {
     CGM.IntTy,
     CGM.IntTy,
     CGM.IntTy,
-    CGM.Int8PtrTy,
-    getClassHierarchyDescriptorType(CGM)->getPointerTo() };
-  return llvm::StructType::create(CGM.getLLVMContext(), FieldTypes, Name);
+    getImageRelativeType(CGM, CGM.Int8PtrTy),
+    getImageRelativeType(
+        CGM, getClassHierarchyDescriptorType(CGM)->getPointerTo()),
+    getImageRelativeType(CGM, Type),
+  };
+  llvm::ArrayRef<llvm::Type *> FieldTypesRef(
+      std::begin(FieldTypes),
+      isImageRelative(CGM) ? std::end(FieldTypes) : std::end(FieldTypes) - 1);
+  Type->setBody(FieldTypesRef);
+  return Type;
 }
 
 static llvm::GlobalVariable *getTypeInfoVTable(CodeGenModule &CGM) {
@@ -288,9 +338,11 @@ llvm::GlobalVariable *MSRTTIBuilder::get
     llvm::ConstantInt::get(CGM.IntTy, 0), // Unknown
     llvm::ConstantInt::get(CGM.IntTy, Flags),
     llvm::ConstantInt::get(CGM.IntTy, Classes.size()),
-    llvm::ConstantExpr::getInBoundsGetElementPtr(
-        getBaseClassArray(Classes),
-        llvm::ArrayRef<llvm::Value *>(GEPIndices))};
+    getImageRelativeConstant(CGM,
+                             llvm::ConstantExpr::getInBoundsGetElementPtr(
+                                 getBaseClassArray(Classes),
+                                 llvm::ArrayRef<llvm::Value *>(GEPIndices))),
+  };
   CHD->setInitializer(llvm::ConstantStruct::get(Type, Fields));
   return CHD;
 }
@@ -308,7 +360,8 @@ MSRTTIBuilder::getBaseClassArray(SmallVe
   // mode) bytes of padding.  We provide a pointer sized amount of padding by
   // adding +1 to Classes.size().  The sections have pointer alignment and are
   // marked pick-any so it shouldn't matter.
-  auto PtrType = getBaseClassDescriptorType(CGM)->getPointerTo();
+  auto PtrType = getImageRelativeType(
+      CGM, getBaseClassDescriptorType(CGM)->getPointerTo());
   auto ArrayType = llvm::ArrayType::get(PtrType, Classes.size() + 1);
   auto BCA = new llvm::GlobalVariable(Module, ArrayType,
       /*Constant=*/true, Linkage, /*Initializer=*/nullptr, 
MangledName.c_str());
@@ -316,8 +369,9 @@ MSRTTIBuilder::getBaseClassArray(SmallVe
   // Initialize the BaseClassArray.
   SmallVector<llvm::Constant *, 8> BaseClassArrayData;
   for (MSRTTIClass &Class : Classes)
-    BaseClassArrayData.push_back(getBaseClassDescriptor(Class));
-  BaseClassArrayData.push_back(llvm::ConstantPointerNull::get(PtrType));
+    BaseClassArrayData.push_back(
+        getImageRelativeConstant(CGM, getBaseClassDescriptor(Class)));
+  BaseClassArrayData.push_back(llvm::Constant::getNullValue(PtrType));
   BCA->setInitializer(llvm::ConstantArray::get(ArrayType, BaseClassArrayData));
   return BCA;
 }
@@ -354,13 +408,16 @@ MSRTTIBuilder::getBaseClassDescriptor(co
 
   // Initialize the BaseClassDescriptor.
   llvm::Constant *Fields[] = {
-    CGM.getMSTypeDescriptor(Context.getTypeDeclType(Class.RD)),
+    getImageRelativeConstant(
+        CGM, CGM.getMSTypeDescriptor(Context.getTypeDeclType(Class.RD))),
     llvm::ConstantInt::get(CGM.IntTy, Class.NumBases),
     llvm::ConstantInt::get(CGM.IntTy, Class.OffsetInVBase),
     llvm::ConstantInt::get(CGM.IntTy, VBPtrOffset),
     llvm::ConstantInt::get(CGM.IntTy, OffsetInVBTable),
     llvm::ConstantInt::get(CGM.IntTy, Class.Flags),
-    MSRTTIBuilder(CGM, Class.RD).getClassHierarchyDescriptor()};
+    getImageRelativeConstant(
+        CGM, MSRTTIBuilder(CGM, Class.RD).getClassHierarchyDescriptor()),
+  };
   BCD->setInitializer(llvm::ConstantStruct::get(Type, Fields));
   return BCD;
 }
@@ -395,12 +452,18 @@ MSRTTIBuilder::getCompleteObjectLocator(
 
   // Initialize the CompleteObjectLocator.
   llvm::Constant *Fields[] = {
-    llvm::ConstantInt::get(CGM.IntTy, 0), // IsDeltaEncoded
+    llvm::ConstantInt::get(CGM.IntTy, isImageRelative(CGM)),
     llvm::ConstantInt::get(CGM.IntTy, OffsetToTop),
     llvm::ConstantInt::get(CGM.IntTy, VFPtrOffset),
-    CGM.getMSTypeDescriptor(Context.getTypeDeclType(RD)),
-    getClassHierarchyDescriptor()};
-  COL->setInitializer(llvm::ConstantStruct::get(Type, Fields));
+    getImageRelativeConstant(
+        CGM, CGM.getMSTypeDescriptor(Context.getTypeDeclType(RD))),
+    getImageRelativeConstant(CGM, getClassHierarchyDescriptor()),
+    getImageRelativeConstant(CGM, COL),
+  };
+  llvm::ArrayRef<llvm::Constant *> FieldsRef(Fields);
+  if (!isImageRelative(CGM))
+    FieldsRef = FieldsRef.slice(0, FieldsRef.size() - 1);
+  COL->setInitializer(llvm::ConstantStruct::get(Type, FieldsRef));
   return COL;
 }
 

Modified: cfe/trunk/test/CodeGenCXX/microsoft-abi-rtti.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-rtti.cpp?rev=211041&r1=211040&r2=211041&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/microsoft-abi-rtti.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/microsoft-abi-rtti.cpp Mon Jun 16 13:46:51 2014
@@ -1,4 +1,5 @@
 // RUN: %clang_cc1 -emit-llvm -o - -triple=i386-pc-win32 2>/dev/null %s | 
FileCheck %s
+// RUN: %clang_cc1 -emit-llvm -o - -triple=x86_64-pc-win32 2>/dev/null %s | 
FileCheck --check-prefix=X64 %s
 
 struct N {};
 struct M : private N {};
@@ -144,3 +145,123 @@ struct B2 : virtual A2 { B2() {} virtual
 // CHECK: @"\01??_R4Z@@6B@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 0, i32 0, i32 0, i8* bitcast 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVZ@@@8" to i8*), 
%MSRTTIClassHierarchyDescriptor* @"\01??_R3Z@@8" }
 // CHECK: @"\01??_R4V@@6B@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 0, i32 0, i32 0, i8* bitcast 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVV@@@8" to i8*), 
%MSRTTIClassHierarchyDescriptor* @"\01??_R3V@@8" }
 // CHECK: @"\01??_R4X@@6B@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 0, i32 0, i32 0, i8* bitcast 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUX@@@8" to i8*), 
%MSRTTIClassHierarchyDescriptor* @"\01??_R3X@@8" }
+
+// X64: @"\01??_R4B2@@6BZ2@@@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 16, i32 4, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUB2@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3B2@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4B2@@6BZ2@@@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUB2@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\08" 
{ i8** @"\01??_7type_info@@6B@", i8* null, [9 x i8] c".?AUB2@@\00" }
+// X64: @"\01??_R3B2@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 3, i32 4, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([5 x i32]* @"\01??_R2B2@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2B2@@8" = linkonce_odr constant [5 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@B2@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@A@3FA@A2@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@A@3EA@Z2@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R17A@3EA@Y2@@8" to i64), 
i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@B2@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUB2@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 3, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3B2@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@A@3FA@A2@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUA2@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 2, i32 0, i32 0, i32 4, i32 80, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3A2@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUA2@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\08" 
{ i8** @"\01??_7type_info@@6B@", i8* null, [9 x i8] c".?AUA2@@\00" }
+// X64: @"\01??_R3A2@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 1, i32 3, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([4 x i32]* @"\01??_R2A2@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2A2@@8" = linkonce_odr constant [4 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@A2@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@Z2@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R17?0A@EA@Y2@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@A2@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUA2@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 2, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3A2@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@?0A@EA@Z2@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUZ2@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3Z2@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUZ2@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\08" 
{ i8** @"\01??_7type_info@@6B@", i8* null, [9 x i8] c".?AUZ2@@\00" }
+// X64: @"\01??_R3Z2@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 1, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([2 x i32]* @"\01??_R2Z2@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2Z2@@8" = linkonce_odr constant [2 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@Z2@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R17?0A@EA@Y2@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUY2@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 8, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3Y2@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUY2@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\08" 
{ i8** @"\01??_7type_info@@6B@", i8* null, [9 x i8] c".?AUY2@@\00" }
+// X64: @"\01??_R3Y2@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 1, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([2 x i32]* @"\01??_R2Y2@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2Y2@@8" = linkonce_odr constant [2 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@Y2@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@Y2@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUY2@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3Y2@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@A@3EA@Z2@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUZ2@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 0, i32 4, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3Z2@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R17A@3EA@Y2@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUY2@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 8, i32 0, i32 4, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3Y2@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4B2@@6BY2@@@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 24, i32 12, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUB2@@@8" to i64), 
i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3B2@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4B2@@6BY2@@@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4A2@@6BZ2@@@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUA2@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3A2@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4A2@@6BZ2@@@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4A2@@6BY2@@@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 8, i32 0, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUA2@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3A2@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4A2@@6BY2@@@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4Y2@@6B@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUY2@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3Y2@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4Y2@@6B@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4Z2@@6B@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUZ2@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3Z2@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4Z2@@6B@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4B1@@6B@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 16, i32 4, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUB1@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3B1@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4B1@@6B@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUB1@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\08" 
{ i8** @"\01??_7type_info@@6B@", i8* null, [9 x i8] c".?AUB1@@\00" }
+// X64: @"\01??_R3B1@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 2, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([3 x i32]* @"\01??_R2B1@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2B1@@8" = linkonce_odr constant [3 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@B1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@A@3FA@A1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@B1@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUB1@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 1, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3B1@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@A@3FA@A1@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUA1@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 0, i32 4, i32 80, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3A1@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUA1@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\08" 
{ i8** @"\01??_7type_info@@6B@", i8* null, [9 x i8] c".?AUA1@@\00" }
+// X64: @"\01??_R3A1@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 1, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([2 x i32]* @"\01??_R2A1@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2A1@@8" = linkonce_odr constant [2 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@A1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@A1@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUA1@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3A1@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4A1@@6B@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUA1@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3A1@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4A1@@6B@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4Y1@@6B@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 8, i32 0, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUY1@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3Y1@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4Y1@@6B@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUY1@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\08" 
{ i8** @"\01??_7type_info@@6B@", i8* null, [9 x i8] c".?AUY1@@\00" }
+// X64: @"\01??_R3Y1@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 3, i32 6, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([7 x i32]* @"\01??_R2Y1@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2Y1@@8" = linkonce_odr constant [7 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@Y1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@W1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@A@3FA@V1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@A@3EA@X1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@A@3FA@V1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@A@3EA@X1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@Y1@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUY1@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 5, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3Y1@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@?0A@EA@W1@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUW1@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 2, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3W1@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUW1@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\08" 
{ i8** @"\01??_7type_info@@6B@", i8* null, [9 x i8] c".?AUW1@@\00" }
+// X64: @"\01??_R3W1@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 3, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([4 x i32]* @"\01??_R2W1@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2W1@@8" = linkonce_odr constant [4 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@W1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@A@3FA@V1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@A@3EA@X1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@A@3FA@V1@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUV1@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 1, i32 0, i32 0, i32 4, i32 80, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3V1@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUV1@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\08" 
{ i8** @"\01??_7type_info@@6B@", i8* null, [9 x i8] c".?AUV1@@\00" }
+// X64: @"\01??_R3V1@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 2, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([3 x i32]* @"\01??_R2V1@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2V1@@8" = linkonce_odr constant [3 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@V1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@X1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@V1@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUV1@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 1, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3V1@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@?0A@EA@X1@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUX1@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3X1@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUX1@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\08" 
{ i8** @"\01??_7type_info@@6B@", i8* null, [9 x i8] c".?AUX1@@\00" }
+// X64: @"\01??_R3X1@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 1, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([2 x i32]* @"\01??_R2X1@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2X1@@8" = linkonce_odr constant [2 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@X1@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@A@3EA@X1@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUX1@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 0, i32 4, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3X1@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4W1@@6B@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 8, i32 0, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUW1@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3W1@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4W1@@6B@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4V1@@6B@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUV1@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3V1@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4V1@@6B@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4X1@@6B@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\08"* @"\01??_R0?AUX1@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3X1@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4X1@@6B@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4C@@6B@" = linkonce_odr constant %MSRTTICompleteObjectLocator 
{ i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUC@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%MSRTTIClassHierarchyDescriptor* @"\01??_R3C@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%MSRTTICompleteObjectLocator* @"\01??_R4C@@6B@" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUC@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\07" { 
i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AUC@@\00" }
+// X64: @"\01??_R3C@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 3, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([4 x i32]* @"\01??_R2C@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2C@@8" = linkonce_odr constant [4 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@C@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R17?0A@EA@B@@8" to i64), 
i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R17?0A@EA@A@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@C@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUC@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 2, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3C@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R17?0A@EA@B@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUB@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 1, i32 8, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3B@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUB@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\07" { 
i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AUB@@\00" }
+// X64: @"\01??_R3B@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 2, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([3 x i32]* @"\01??_R2B@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2B@@8" = linkonce_odr constant [3 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@B@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@A@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@B@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUB@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 1, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3B@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@?0A@EA@A@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUA@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3A@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUA@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\07" { 
i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AUA@@\00" }
+// X64: @"\01??_R3A@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 1, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([2 x i32]* @"\01??_R2A@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2A@@8" = linkonce_odr constant [2 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@A@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R17?0A@EA@A@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUA@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 8, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3A@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4Y@@6BZ@@@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVY@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3Y@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4Y@@6BZ@@@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AVY@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\07" { 
i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AVY@@\00" }
+// X64: @"\01??_R3Y@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 3, i32 9, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([10 x i32]* @"\01??_R2Y@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2Y@@8" = linkonce_odr constant [10 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@Y@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EN@Z@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R17?0A@EN@W@@8" to i64), 
i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1BA@?0A@EN@M@@8" to i64), 
i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1BA@?0A@EN@N@@8" to i64), 
i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@73FN@V@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (!
 i64 sub n
 uw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@73EJ@X@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@73FN@V@@8" to i64), 
i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@73EJ@X@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@Y@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVY@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 8, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3Y@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@?0A@EN@Z@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVZ@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 -1, i32 0, i32 77, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3Z@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AVZ@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\07" { 
i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AVZ@@\00" }
+// X64: @"\01??_R3Z@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 1, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([2 x i32]* @"\01??_R2Z@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2Z@@8" = linkonce_odr constant [2 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@Z@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@Z@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVZ@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3Z@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R17?0A@EN@W@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVW@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 4, i32 8, i32 -1, i32 0, i32 77, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3W@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AVW@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\07" { 
i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AVW@@\00" }
+// X64: @"\01??_R3W@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 3, i32 5, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([6 x i32]* @"\01??_R2W@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2W@@8" = linkonce_odr constant [6 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@W@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R17?0A@EN@M@@8" to i64), 
i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R17?0A@EN@N@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@A@3FN@V@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@A@3EJ@X@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@W@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVW@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 4, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3W@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R17?0A@EN@M@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUM@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 1, i32 8, i32 -1, i32 0, i32 77, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3M@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUM@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\07" { 
i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AUM@@\00" }
+// X64: @"\01??_R3M@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 2, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([3 x i32]* @"\01??_R2M@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2M@@8" = linkonce_odr constant [3 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@M@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EN@N@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@M@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUM@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 1, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3M@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@?0A@EN@N@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUN@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 -1, i32 0, i32 77, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3N@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUN@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\07" { 
i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AUN@@\00" }
+// X64: @"\01??_R3N@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 1, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([2 x i32]* @"\01??_R2N@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2N@@8" = linkonce_odr constant [2 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@N@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@N@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUN@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3N@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R17?0A@EN@N@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUN@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 8, i32 -1, i32 0, i32 77, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3N@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@A@3FN@V@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVV@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 1, i32 0, i32 0, i32 4, i32 93, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3V@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AVV@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\07" { 
i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AVV@@\00" }
+// X64: @"\01??_R3V@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 2, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([3 x i32]* @"\01??_R2V@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2V@@8" = linkonce_odr constant [3 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@V@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@X@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@?0A@EA@V@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVV@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 1, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3V@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@?0A@EA@X@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUX@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 -1, i32 0, i32 64, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3X@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R0?AUX@@@8" = linkonce_odr global %"MSRTTITypeDescriptor\07" { 
i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AUX@@\00" }
+// X64: @"\01??_R3X@@8" = linkonce_odr constant 
%MSRTTIClassHierarchyDescriptor { i32 0, i32 0, i32 1, i32 trunc (i64 sub nuw 
nsw (i64 ptrtoint ([2 x i32]* @"\01??_R2X@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R2X@@8" = linkonce_odr constant [2 x i32] [i32 trunc (i64 sub 
nuw nsw (i64 ptrtoint (%MSRTTIBaseClassDescriptor* @"\01??_R1A@?0A@EA@X@@8" to 
i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0]
+// X64: @"\01??_R1A@A@3EJ@X@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUX@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 0, i32 4, i32 73, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3X@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1BA@?0A@EN@M@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUM@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 1, i32 16, i32 -1, i32 0, i32 77, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3M@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1BA@?0A@EN@N@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUN@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 16, i32 -1, i32 0, i32 77, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3N@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@73FN@V@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVV@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 1, i32 0, i32 8, i32 4, i32 93, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3V@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R1A@73EJ@X@@8" = linkonce_odr constant 
%MSRTTIBaseClassDescriptor { i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUX@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 0, i32 0, i32 8, i32 4, i32 73, i32 trunc 
(i64 sub nuw nsw (i64 ptrtoint (%MSRTTIClassHierarchyDescriptor* 
@"\01??_R3X@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4Y@@6BW@@@" = linkonce_odr constant 
%MSRTTICompleteObjectLocator { i32 1, i32 16, i32 0, i32 trunc (i64 sub nuw nsw 
(i64 ptrtoint (%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVY@@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTIClassHierarchyDescriptor* @"\01??_R3Y@@8" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 
ptrtoint (%MSRTTICompleteObjectLocator* @"\01??_R4Y@@6BW@@@" to i64), i64 
ptrtoint (i8* @__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4W@@6B@" = linkonce_odr constant %MSRTTICompleteObjectLocator 
{ i32 1, i32 8, i32 0, i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVW@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%MSRTTIClassHierarchyDescriptor* @"\01??_R3W@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%MSRTTICompleteObjectLocator* @"\01??_R4W@@6B@" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4Z@@6B@" = linkonce_odr constant %MSRTTICompleteObjectLocator 
{ i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVZ@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%MSRTTIClassHierarchyDescriptor* @"\01??_R3Z@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%MSRTTICompleteObjectLocator* @"\01??_R4Z@@6B@" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4V@@6B@" = linkonce_odr constant %MSRTTICompleteObjectLocator 
{ i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AVV@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%MSRTTIClassHierarchyDescriptor* @"\01??_R3V@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%MSRTTICompleteObjectLocator* @"\01??_R4V@@6B@" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }
+// X64: @"\01??_R4X@@6B@" = linkonce_odr constant %MSRTTICompleteObjectLocator 
{ i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%"MSRTTITypeDescriptor\07"* @"\01??_R0?AUX@@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%MSRTTIClassHierarchyDescriptor* @"\01??_R3X@@8" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint 
(%MSRTTICompleteObjectLocator* @"\01??_R4X@@6B@" to i64), i64 ptrtoint (i8* 
@__ImageBase to i64)) to i32) }


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to