[Bf-committers] LIBMV: Workaround for Internal Compiler error on VS2012

Brecht Van Lommel brechtvanlommel at pandora.be
Tue May 14 23:21:22 CEST 2013


Probably Sergey can judge this best, I don't know how important these
files are to performance. Maybe there's a specific function or line of
code that is causing the issue that we can tweak as well.

On Tue, May 14, 2013 at 8:42 PM, Jürgen Herrmann <shadowrom at me.com> wrote:
> Hi again,
>
> still trying to fix this nasty ICE on VS 2012 64bit and I think I found a way to work around this issue without losing too much speed.
>
> Instead of turning optimizations off globally for these 2 files I found a way to reduce optimization level slightly by doing this:
>
> ------------PATCH----------------
> Index: extern/libmv/libmv/tracking/esm_region_tracker.cc
> ===================================================================
> --- extern/libmv/libmv/tracking/esm_region_tracker.cc   (revision 56800)
> +++ extern/libmv/libmv/tracking/esm_region_tracker.cc   (working copy)
> @@ -61,6 +61,13 @@
>    return true;
>  }
>
> +/* Ugly but necessary fix for compilation on VS2012
> +/* this file causes an Internal Compiler Error */
> +// TODO: check regularly if ICE is fixed by MS!
> +#if (_MSC_VER >= 1700 && _WIN64)
> +#pragma optimize("sp", on)
> +#endif
> +
>  // This is implemented from "Lukas and Kanade 20 years on: Part 1. Page 42,
>  // figure 14: the Levenberg-Marquardt-Inverse Compositional Algorithm".
>  bool EsmRegionTracker::Track(const FloatImage &image1,
> Index: extern/libmv/libmv/tracking/lmicklt_region_tracker.cc
> ===================================================================
> --- extern/libmv/libmv/tracking/lmicklt_region_tracker.cc       (revision 56800)
> +++ extern/libmv/libmv/tracking/lmicklt_region_tracker.cc       (working copy)
> @@ -52,6 +52,13 @@
>    return true;
>  }
>
> +/* Ugly but necessary fix for compilation on VS2012
> +/* this file causes an Internal Compiler Error */
> +// TODO: check regularly if ICE is fixed by MS!
> +#if (_MSC_VER >= 1700 && _WIN64)
> +#pragma optimize("sp", on)
> +#endif
> +
>  // Estimate "reasonable" error by computing autocorrelation for a small shift.
>  static double EstimateReasonableError(const FloatImage &image,
>                                 double x, double y,
> ------------PATCH----------------
>
>
> -----Ursprüngliche Nachricht-----
> Von: bf-committers-bounces at blender.org [mailto:bf-committers-bounces at blender.org] Im Auftrag von Jürgen Herrmann
> Gesendet: Dienstag, 14. Mai 2013 16:05
> An: bf-committers at blender.org
> Betreff: [Bf-committers] [Proposal] LIBMV: Workaround for Internal Compiler error on VS2012
>
> Hey ;)
>
> we have a problem, when compiling extern_libmv on VS2012 x64 the compiler crashes.
> It seems that this inlining problem is known to MS and they are working on a fix.
> This does not happen on x86 builds though.
> I could not find a real fix for this yet.
> So I'd like to commit the following workaround patch, any suggestions or comments?
>
>
> ---------------SNIP--------------
> Index: extern/libmv/libmv/tracking/esm_region_tracker.cc
> ===================================================================
> --- extern/libmv/libmv/tracking/esm_region_tracker.cc    (revision 56794)
> +++ extern/libmv/libmv/tracking/esm_region_tracker.cc    (working copy)
> @@ -32,7 +32,12 @@
>  #include "libmv/tracking/track_region.h"
>
>  namespace libmv {
> -
> +/* Ugly but necessary fix for compilation on VS2012
> +/* this file causes an Internal Compiler Error */ // TODO: check
> +regularly if ICE is fixed by MS!
> +#if (_MSC_VER >= 1700 && _WIN64)
> +#pragma optimize("", off)
> +#endif
>  // TODO(keir): Reduce duplication between here and the other region trackers.
>  static bool RegionIsInBounds(const FloatImage &image1,
>                        double x, double y,
> Index: extern/libmv/libmv/tracking/lmicklt_region_tracker.cc
> ===================================================================
> --- extern/libmv/libmv/tracking/lmicklt_region_tracker.cc    (revision 56794)
> +++ extern/libmv/libmv/tracking/lmicklt_region_tracker.cc    (working copy)
> @@ -27,7 +27,12 @@
>  #include "libmv/numeric/numeric.h"
>
>  namespace libmv {
> -
> +/* Ugly but necessary fix for compilation on VS2012
> +/* this file causes an Internal Compiler Error */ // TODO: check
> +regularly if ICE is fixed by MS!
> +#if (_MSC_VER >= 1700 && _WIN64)
> +#pragma optimize("", off)
> +#endif
>  // TODO(keir): Reduce duplication between here and the other region trackers.
>  static bool RegionIsInBounds(const FloatImage &image1,
>                        double x, double y,
> ---------------SNIP--------------
>
> Best regards
>
> /Jürgen
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers


More information about the Bf-committers mailing list