CodeGen: Implement hint values for dynamic_cast as described in the Itanium C++ ABI.
authorBenjamin Kramer <benny.kra@googlemail.com>
Sun, 3 Feb 2013 19:59:25 +0000 (19:59 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Sun, 3 Feb 2013 19:59:25 +0000 (19:59 +0000)
commitd9c8455adfbd2d453ac5ff5465a6895961cd2596
tree4bd7bae98915c3637589a5cd0d01f6a3618c4c35
parent325d74566faabcdb2a5e37965954c6dbf17f8dc0
CodeGen: Implement hint values for dynamic_cast as described in the Itanium C++ ABI.

This can yield dramatic speedups of dynamic_cast for simple inheritance trees,
at least with libsupc++. Neither libcxxabi nor libcxxrt make use of this
hint currently, it was never implemented because clang didn't support it.

There was some concern about the number of class hierarchy walks this change
introduces. If it turns out to be an issue we can add caching either at the cast
pair level or even deeper, but we also do a lot of walks in Sema so this
codepath is probably fairly optimized already.

llvm-svn: 174293
clang/lib/CodeGen/CGExprCXX.cpp
clang/test/CodeGenCXX/dynamic-cast-hint.cpp [new file with mode: 0644]