[Mesa-dev] [PATCH 07/20] swr/rast: Add debugging type support for function types.

George Kyriazis george.kyriazis at intel.com
Fri Jan 19 21:47:02 UTC 2018


---
 .../drivers/swr/rasterizer/jitter/JitManager.cpp     | 20 ++++++++++++++++++++
 .../drivers/swr/rasterizer/jitter/JitManager.h       |  1 +
 2 files changed, 21 insertions(+)

diff --git a/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp b/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp
index a3bda61..b0f9d2f 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp
@@ -254,11 +254,31 @@ DIType* JitManager::GetDebugType(Type* pTy)
     case Type::ArrayTyID: return GetDebugArrayType(pTy); break;
     case Type::PointerTyID: return builder.createPointerType(GetDebugType(pTy->getPointerElementType()), 64, 64); break;
     case Type::VectorTyID: return GetDebugVectorType(pTy); break;
+    case Type::FunctionTyID: return GetDebugFunctionType(pTy); break;
     default: SWR_ASSERT(false, "Unimplemented llvm type");
     }
     return nullptr;
 }
 
+// Create a DISubroutineType from an llvm FunctionType
+DIType* JitManager::GetDebugFunctionType(Type* pTy)
+{
+    SmallVector<Metadata*, 8> ElemTypes;
+    FunctionType* pFuncTy = cast<FunctionType>(pTy);
+    DIBuilder builder(*mpCurrentModule);
+
+    // Add result type
+    ElemTypes.push_back(GetDebugType(pFuncTy->getReturnType()));
+
+    // Add arguments
+    for (auto& param : pFuncTy->params())
+    {
+        ElemTypes.push_back(GetDebugType(param));
+    }
+
+    return builder.createSubroutineType(builder.getOrCreateTypeArray(ElemTypes));
+}
+
 DIType* JitManager::GetDebugIntegerType(Type* pTy)
 {
     DIBuilder builder(*mpCurrentModule);
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/JitManager.h b/src/gallium/drivers/swr/rasterizer/jitter/JitManager.h
index fb20a36..50b9d82 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/JitManager.h
+++ b/src/gallium/drivers/swr/rasterizer/jitter/JitManager.h
@@ -175,6 +175,7 @@ struct JitManager
     llvm::DIType* GetDebugIntegerType(llvm::Type* pTy);
     llvm::DIType* GetDebugArrayType(llvm::Type* pTy);
     llvm::DIType* GetDebugVectorType(llvm::Type* pTy);
+    llvm::DIType* GetDebugFunctionType(llvm::Type* pTy);
 
     llvm::DIType* GetDebugStructType(llvm::Type* pType)
     {
-- 
2.7.4



More information about the mesa-dev mailing list