New user self-registration is disabled due to spam. Please email eigen-core-team @ lists.tuxfamily.org if you need an account.
Bug 898 - const_cast_ptr is not inlined on MSVC 2013
Summary: const_cast_ptr is not inlined on MSVC 2013
Status: RESOLVED FIXED
Alias: None
Product: Eigen
Classification: Unclassified
Component: Core - general (show other bugs)
Version: 3.2
Hardware: x86 - general Windows
: Normal Performance Problem
Assignee: Nobody
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-10-21 17:49 UTC by Emily
Modified: 2014-10-28 14:53 UTC (History)
3 users (show)



Attachments

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:

src\core\util\xprhelper.h:343

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
 ret  

Callsite:
 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:
https://bitbucket.org/eigen/eigen/commits/aeb79a9
https://bitbucket.org/eigen/eigen/commits/8b6f110

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