summaryrefslogtreecommitdiffstats
path: root/libcxxabi/src
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2012-01-12 21:06:12 +0000
committerHoward Hinnant <hhinnant@apple.com>2012-01-12 21:06:12 +0000
commitb7d59ec6e15b2462df20ef166ac74bf9dc11de58 (patch)
tree0c4a0aa02f5aeff85a6e0cce70e7156739f06109 /libcxxabi/src
parent9479c1b42afd9621ae8e1992a0762aede6c88b5e (diff)
downloadbcm5719-llvm-b7d59ec6e15b2462df20ef166ac74bf9dc11de58.tar.gz
bcm5719-llvm-b7d59ec6e15b2462df20ef166ac74bf9dc11de58.zip
Put debug print statments under a flag so that I can get a first glimpse at performance. So far I haven't noticed any performance difference between this new __dynamic_cast and gcc's implementation. But I've barely started looking. Also adding a couple of tests which come straight out of the standard.
llvm-svn: 148046
Diffstat (limited to 'libcxxabi/src')
-rw-r--r--libcxxabi/src/private_typeinfo.cpp16
-rw-r--r--libcxxabi/src/private_typeinfo.h8
2 files changed, 22 insertions, 2 deletions
diff --git a/libcxxabi/src/private_typeinfo.cpp b/libcxxabi/src/private_typeinfo.cpp
index 4f0b5bb664a..7b3ab5bc24e 100644
--- a/libcxxabi/src/private_typeinfo.cpp
+++ b/libcxxabi/src/private_typeinfo.cpp
@@ -9,9 +9,10 @@
#include "private_typeinfo.h"
+#ifdef DEBUG
// temporary headers
#include <iostream>
-#include <cassert>
+#endif
namespace std
{
@@ -156,11 +157,13 @@ __class_type_info::search2(__dynamic_cast_info* info, const void* dynamic_ptr,
return 1;
}
+#ifdef DEBUG
void
__class_type_info::display(const void* obj) const
{
std::cout << "\n__class_type_info::this = " << obj << " " << name() << '\n';
}
+#endif
// __si_class_type_info
@@ -238,12 +241,14 @@ __si_class_type_info::search2(__dynamic_cast_info* info, const void* dynamic_ptr
return __base_type->search2(info, dynamic_ptr, path_below);
}
+#ifdef DEBUG
void
__si_class_type_info::display(const void* obj) const
{
std::cout << "\n__si_class_type_info::this = " << obj << " " << name() << '\n';
__base_type->display(obj);
}
+#endif
// __vmi_class_type_info
@@ -392,6 +397,8 @@ __base_class_type_info::search2(__dynamic_cast_info* info, const void* dynamic_p
not_public_path);
}
+#ifdef DEBUG
+
void
__vmi_class_type_info::display(const void* obj) const
{
@@ -421,6 +428,8 @@ __base_class_type_info::display(const void* obj) const
__base_type->display((char*)obj + offset_to_base);
}
+#endif
+
// __pbase_type_info
__pbase_type_info::~__pbase_type_info()
@@ -514,18 +523,21 @@ __dynamic_cast(const void* static_ptr,
const __class_type_info* dst_type,
std::ptrdiff_t src2dst_offset)
{
+#ifdef DEBUG
std::cout << "static_ptr = " << static_ptr << '\n';
std::cout << "static_type = " << static_type << '\n';
std::cout << "dst_type = " << dst_type << '\n';
std::cout << "src2dst_offset = " << src2dst_offset << '\n';
+#endif
void** vtable = *(void***)static_ptr;
ptrdiff_t offset_to_derived = (ptrdiff_t)vtable[-2];
const void* dynamic_ptr = (const char*)static_ptr + offset_to_derived;
const __class_type_info* dynamic_type = (const __class_type_info*)vtable[-1];
+#ifdef DEBUG
std::cout << "dynamic_ptr = " << dynamic_ptr << '\n';
std::cout << "dynamic_type = " << dynamic_type << '\n';
dynamic_type->display(dynamic_ptr);
-
+#endif
const void* dst_ptr = 0;
__dynamic_cast_info info = {dst_type, static_ptr, static_type, src2dst_offset, 0};
if (dynamic_type == dst_type)
diff --git a/libcxxabi/src/private_typeinfo.h b/libcxxabi/src/private_typeinfo.h
index 0035836a31f..9c3ad20bf69 100644
--- a/libcxxabi/src/private_typeinfo.h
+++ b/libcxxabi/src/private_typeinfo.h
@@ -96,7 +96,9 @@ public:
virtual int search1(__dynamic_cast_info*, const void*, int) const;
virtual int search2(__dynamic_cast_info*, const void*, int) const;
+#ifdef DEBUG
virtual void display(const void* obj) const;
+#endif
};
// Has one non-virtual public base class at offset zero
@@ -110,7 +112,9 @@ public:
virtual int search1(__dynamic_cast_info*, const void*, int) const;
virtual int search2(__dynamic_cast_info*, const void*, int) const;
+#ifdef DEBUG
virtual void display(const void* obj) const;
+#endif
};
struct __base_class_type_info
@@ -128,7 +132,9 @@ public:
int search1(__dynamic_cast_info*, const void*, int) const;
int search2(__dynamic_cast_info*, const void*, int) const;
+#ifdef DEBUG
void display(const void* obj) const;
+#endif
};
// Has one or more base classes
@@ -152,7 +158,9 @@ public:
virtual int search1(__dynamic_cast_info*, const void*, int) const;
virtual int search2(__dynamic_cast_info*, const void*, int) const;
+#ifdef DEBUG
virtual void display(const void* obj) const;
+#endif
};
class __pbase_type_info
OpenPOWER on IntegriCloud