New user self-registration is currently disabled. Please email eigen-core-team @ if you need an account.
Bug 898 - const_cast_ptr is not inlined on MSVC 2013
const_cast_ptr is not inlined on MSVC 2013
Product: Eigen
Classification: Unclassified
Component: Core - general
x86 - general Windows
: Normal Performance Problem
Assigned To: Nobody
Depends on:
  Show dependency treegraph
Reported: 2014-10-21 17:49 UTC by Emily
Modified: 2014-10-28 14:53 UTC (History)
3 users (show)


Description Emily 2014-10-21 17:49:00 UTC
Visual Studio has a thing where it will some times refuse to inline even the most obvious functions unless you specify that is should, by using the `inline` keyword.

In an optimized build I get non-inlined calls to:


template<typename T>
T* const_cast_ptr(const T* ptr)
  return const_cast<T*>(ptr);

Related ASM:
--- d:\work\include\eigen\src\core\util\xprhelper.h --------------------
 mov         rax,rcx

 lea         rcx,[rax+rcx*8]  
 call        Eigen::internal::const_cast_ptr<double> (013F4C8215h)  
 mov         r14,qword ptr [r14+8]

I propose to add the `inline` keyword to const_cast_ptr to make MSVC inline it. I have done it locally and it has the intended effect.
Comment 1 Christoph Hertzberg 2014-10-28 14:53:45 UTC
That change appears harmless enough. Pushed to default and 3.2 branches:

Note You need to log in before you can comment on or make changes to this bug.