Results in far smaller and useful IR output.
---
 .../swr/rasterizer/codegen/templates/gen_llvm.hpp  | 23 ++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_llvm.hpp 
b/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_llvm.hpp
index 18ea781713..574ee5aaa7 100644
--- a/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_llvm.hpp
+++ b/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_llvm.hpp
@@ -40,15 +40,22 @@ namespace SwrJit
     INLINE static StructType *Gen_${type['name']}(JitManager* pJitMgr)
     {
         LLVMContext& ctx = pJitMgr->mContext;
-        std::vector<Type*> members;
-        <%
-            (max_type_len, max_name_len) = calc_max_len(type['members'])
-        %>
-        %for member in type['members']:
-        /* ${member['name']} ${pad(len(member['name']), max_name_len)}*/ 
members.push_back( ${member['type']} );
-        %endfor
 
-        return StructType::get(ctx, members, false);
+        StructType* pRetType = 
pJitMgr->mpCurrentModule->getTypeByName("${type['name']}");
+        if (pRetType == nullptr)
+        {
+            std::vector<Type*> members;
+            <%
+                (max_type_len, max_name_len) = calc_max_len(type['members'])
+            %>
+            %for member in type['members']:
+            /* ${member['name']} ${pad(len(member['name']), max_name_len)}*/ 
members.push_back(${ member['type'] });
+            %endfor
+
+            pRetType = StructType::create(members, "${type['name']}", false);
+        }
+
+        return pRetType;
     }
 
     %for member in type['members']:
-- 
2.14.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to