From f0c48b5b3dac36e5e17e3715cc4990453b16f3d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene.hess@iwr.uni-heidelberg.de>
Date: Fri, 15 Jun 2018 13:57:22 +0200
Subject: [PATCH] Add option to throw error if program was not fully vectorized

---
 python/dune/perftool/options.py               | 1 +
 python/dune/perftool/sumfact/vectorization.py | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/python/dune/perftool/options.py b/python/dune/perftool/options.py
index 7853bb54..a30ec5f7 100644
--- a/python/dune/perftool/options.py
+++ b/python/dune/perftool/options.py
@@ -80,6 +80,7 @@ class PerftoolFormOptionsArray(ImmutableRecord):
     sumfact = PerftoolOption(default=False, helpstr="Use sumfactorization")
     vectorization_quadloop = PerftoolOption(default=False, helpstr="whether to generate code with explicit vectorization")
     vectorization_strategy = PerftoolOption(default="none", helpstr="The identifier of the vectorization cost model. Possible values: none|explicit|model")
+    vectorization_not_fully_vectorized_error = PerftoolOption(default=False, helpstr="throw an error if nonquadloop vectorization did not fully vectorize")
     vectorization_horizontal = PerftoolOption(default=None, helpstr="an explicit value for horizontal vectorization read by the 'explicit' strategy")
     vectorization_vertical = PerftoolOption(default=None, helpstr="an explicit value for vertical vectorization read by the 'explicit' strategy")
     vectorization_padding = PerftoolOption(default=None, helpstr="an explicit value for the allowed padding in vectorization")
diff --git a/python/dune/perftool/sumfact/vectorization.py b/python/dune/perftool/sumfact/vectorization.py
index 78822934..3e79419d 100644
--- a/python/dune/perftool/sumfact/vectorization.py
+++ b/python/dune/perftool/sumfact/vectorization.py
@@ -32,6 +32,9 @@ import math
 
 @generator_factory(item_tags=("vecinfo", "dryrundata"), cache_key_generator=lambda o, n: o)
 def _cache_vectorization_info(old, new):
+    if get_form_option("vectorization_not_fully_vectorized_error"):
+        if not isinstance(new, VectorizedSumfactKernel):
+            raise PerftoolVectorizationError("Did not fully vectorize!")
     if new is None:
         raise PerftoolVectorizationError("Vectorization info for sum factorization kernel was not gathered correctly!")
     return new
-- 
GitLab