[Beignet] [PATCH 1/6] Add two special register for printf output buffer usage
junyan.he at inbox.com
junyan.he at inbox.com
Mon Jun 9 21:52:37 PDT 2014
From: Junyan He <junyan.he at linux.intel.com>
printfiptr for printf index buffer pointer in curbe
and printfbptr for printf output buffer pointer in curbe.
Signed-off-by: Junyan He <junyan.he at linux.intel.com>
---
backend/src/backend/gen_context.cpp | 2 ++
backend/src/backend/program.h | 2 ++
backend/src/ir/profile.cpp | 3 +++
backend/src/ir/profile.hpp | 4 +++-
backend/src/llvm/llvm_gen_backend.cpp | 11 +++++++++++
backend/src/llvm/llvm_gen_ocl_function.hxx | 5 +++++
backend/src/ocl_stdlib.tmpl.h | 5 +++++
7 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/backend/src/backend/gen_context.cpp b/backend/src/backend/gen_context.cpp
index b1bacc5..d53bfe2 100644
--- a/backend/src/backend/gen_context.cpp
+++ b/backend/src/backend/gen_context.cpp
@@ -1842,6 +1842,8 @@ namespace gbe
INSERT_REG(numgroup1, GROUP_NUM_Y)
INSERT_REG(numgroup2, GROUP_NUM_Z)
INSERT_REG(stackptr, STACK_POINTER)
+ INSERT_REG(printfbptr, PRINTF_BUF_POINTER);
+ INSERT_REG(printfiptr, PRINTF_INDEX_POINTER);
do {} while(0);
}
});
diff --git a/backend/src/backend/program.h b/backend/src/backend/program.h
index 8727966..7876db4 100644
--- a/backend/src/backend/program.h
+++ b/backend/src/backend/program.h
@@ -72,6 +72,8 @@ enum gbe_curbe_type {
GBE_CURBE_WORK_DIM,
GBE_CURBE_IMAGE_INFO,
GBE_CURBE_STACK_POINTER,
+ GBE_CURBE_PRINTF_BUF_POINTER,
+ GBE_CURBE_PRINTF_INDEX_POINTER,
GBE_CURBE_KERNEL_ARGUMENT,
GBE_CURBE_EXTRA_ARGUMENT,
GBE_CURBE_BLOCK_IP,
diff --git a/backend/src/ir/profile.cpp b/backend/src/ir/profile.cpp
index d583df9..dfe2baa 100644
--- a/backend/src/ir/profile.cpp
+++ b/backend/src/ir/profile.cpp
@@ -42,6 +42,7 @@ namespace ir {
"barrier_id", "thread_number", "work_dimension",
"zero", "one",
"retVal", "slm_offset"
+ "printf_buffer_pointer", "printf_index_buffer_pointer"
};
#if GBE_DEBUG
@@ -82,6 +83,8 @@ namespace ir {
DECL_NEW_REG(FAMILY_DWORD, one, 1);
DECL_NEW_REG(FAMILY_WORD, retVal, 1);
DECL_NEW_REG(FAMILY_WORD, slmoffset, 1);
+ DECL_NEW_REG(FAMILY_DWORD, printfbptr, 1);
+ DECL_NEW_REG(FAMILY_DWORD, printfiptr, 1);
}
#undef DECL_NEW_REG
diff --git a/backend/src/ir/profile.hpp b/backend/src/ir/profile.hpp
index 4a8062b..c15a792 100644
--- a/backend/src/ir/profile.hpp
+++ b/backend/src/ir/profile.hpp
@@ -69,7 +69,9 @@ namespace ir {
static const Register one = Register(25); // scalar register holds one.
static const Register retVal = Register(26); // helper register to do data flow analysis.
static const Register slmoffset = Register(27); // Group's SLM offset in total 64K SLM
- static const uint32_t regNum = 28; // number of special registers
+ static const Register printfbptr = Register(28); // printf buffer address .
+ static const Register printfiptr = Register(29); // printf index buffer address.
+ static const uint32_t regNum = 30; // number of special registers
extern const char *specialRegMean[]; // special register name.
} /* namespace ocl */
diff --git a/backend/src/llvm/llvm_gen_backend.cpp b/backend/src/llvm/llvm_gen_backend.cpp
index db9e73c..7802818 100644
--- a/backend/src/llvm/llvm_gen_backend.cpp
+++ b/backend/src/llvm/llvm_gen_backend.cpp
@@ -2238,6 +2238,10 @@ namespace gbe
regTranslator.newScalarProxy(ir::ocl::goffset2, dst); break;
case GEN_OCL_GET_WORK_DIM:
regTranslator.newScalarProxy(ir::ocl::workdim, dst); break;
+ case GEN_OCL_PRINTF_BUF_ADDR:
+ regTranslator.newScalarProxy(ir::ocl::printfbptr, dst); break;
+ case GEN_OCL_PRINTF_INDEX_BUF_ADDR:
+ regTranslator.newScalarProxy(ir::ocl::printfiptr, dst); break;
case GEN_OCL_FBH:
case GEN_OCL_FBL:
case GEN_OCL_COS:
@@ -2384,6 +2388,8 @@ namespace gbe
case GEN_OCL_SIMD_ALL:
this->newRegister(&I);
break;
+ case GEN_OCL_PRINTF:
+ break;
default:
GBE_ASSERTM(false, "Function call are not supported yet");
};
@@ -2962,6 +2968,11 @@ namespace gbe
ctx.F32TO16(ir::TYPE_U16, ir::TYPE_FLOAT, getRegister(&I), getRegister(I.getOperand(0)));
break;
#undef DEF
+
+ case GEN_OCL_PRINTF:
+ break;
+ case GEN_OCL_PRINTF_BUF_ADDR:
+ case GEN_OCL_PRINTF_INDEX_BUF_ADDR:
default: break;
}
}
diff --git a/backend/src/llvm/llvm_gen_ocl_function.hxx b/backend/src/llvm/llvm_gen_ocl_function.hxx
index 4236298..a74803b 100644
--- a/backend/src/llvm/llvm_gen_ocl_function.hxx
+++ b/backend/src/llvm/llvm_gen_ocl_function.hxx
@@ -179,3 +179,8 @@ DECL_LLVM_GEN_FUNCTION(CONV_F32_TO_F16, __gen_ocl_f32to16)
// SIMD level function for internal usage
DECL_LLVM_GEN_FUNCTION(SIMD_ANY, __gen_ocl_simd_any)
DECL_LLVM_GEN_FUNCTION(SIMD_ALL, __gen_ocl_simd_all)
+
+// printf function
+DECL_LLVM_GEN_FUNCTION(PRINTF, __gen_ocl_printf)
+DECL_LLVM_GEN_FUNCTION(PRINTF_BUF_ADDR, __gen_ocl_printf_get_buf_addr)
+DECL_LLVM_GEN_FUNCTION(PRINTF_INDEX_BUF_ADDR, __gen_ocl_printf_get_index_buf_addr)
diff --git a/backend/src/ocl_stdlib.tmpl.h b/backend/src/ocl_stdlib.tmpl.h
index 01bb337..6fab974 100755
--- a/backend/src/ocl_stdlib.tmpl.h
+++ b/backend/src/ocl_stdlib.tmpl.h
@@ -4953,4 +4953,9 @@ INLINE_OVERLOADABLE float __gen_ocl_internal_fastpath_tanh (float x)
#undef CONST
#undef OVERLOADABLE
#undef INLINE
+
+/* The printf function. */
+int __gen_ocl_printf_stub(const char * format, ...);
+#define printf __gen_ocl_printf_stub
+
#endif /* __GEN_OCL_STDLIB_H__ */
--
1.8.3.2
More information about the Beignet
mailing list