[Mesa-dev] [PATCH] clover: Don't extend illegal integer types.

Jan Vesely jan.vesely at rutgers.edu
Wed Jul 25 00:16:31 UTC 2018


It's OK to pass them in memory, which is what kernel invocation needs.
Fixes AMDGCN regressions since llvm r337535 ("Reapply "AMDGPU: Fix handling of alignment padding in DAG argument lowering"):
	scalar-arithmetic-char
	scalar-arithmetic-uchar
	scalar-arithemtic-short
	scalar-arithmetic-ushort
	scalar-comparison-char
	scalar-comparison-uchar
	scalar-comparison-short
	scalar-comparison-ushort

Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
---
 src/gallium/state_trackers/clover/llvm/codegen/common.cpp |  3 +--
 src/gallium/state_trackers/clover/llvm/compat.hpp         | 12 ++++++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/clover/llvm/codegen/common.cpp b/src/gallium/state_trackers/clover/llvm/codegen/common.cpp
index ddf2083f37..ca5f78940d 100644
--- a/src/gallium/state_trackers/clover/llvm/codegen/common.cpp
+++ b/src/gallium/state_trackers/clover/llvm/codegen/common.cpp
@@ -85,8 +85,7 @@ namespace {
          const unsigned arg_store_size = dl.getTypeStoreSize(arg_type);
          const unsigned arg_api_size = dl.getTypeAllocSize(arg_type);
 
-         const auto target_type = !arg_type->isIntegerTy() ? arg_type :
-            dl.getSmallestLegalIntType(mod.getContext(), arg_store_size * 8);
+         const auto target_type = compat::get_abi_type(arg_type, mod);
          const unsigned target_size = dl.getTypeStoreSize(target_type);
          const unsigned target_align = dl.getABITypeAlignment(target_type);
 
diff --git a/src/gallium/state_trackers/clover/llvm/compat.hpp b/src/gallium/state_trackers/clover/llvm/compat.hpp
index 60270d1529..975012cbda 100644
--- a/src/gallium/state_trackers/clover/llvm/compat.hpp
+++ b/src/gallium/state_trackers/clover/llvm/compat.hpp
@@ -153,6 +153,18 @@ namespace clover {
 		return tm.addPassesToEmitFile(pm, os, nullptr, ft);
 #else
 		return tm.addPassesToEmitFile(pm, os, ft);
+#endif
+	}
+
+	template<typename T, typename M>
+	T get_abi_type(const T &arg_type, const M &mod) {
+#if HAVE_LLVM >= 0x0700
+          return arg_type;
+#else
+          ::llvm::DataLayout dl(&mod);
+          const unsigned arg_store_size = dl.getTypeStoreSize(arg_type);
+          return !arg_type->isIntegerTy() ? arg_type :
+            dl.getSmallestLegalIntType(mod.getContext(), arg_store_size * 8);
 #endif
 	}
       }
-- 
2.16.4



More information about the mesa-dev mailing list