[Beignet] [PATCH] GBE: Fix some bugs under LLVM 3.5

Ruiling Song ruiling.song at intel.com
Wed Jun 18 23:01:23 PDT 2014


1. use_iterator point to 'Use' now instead of 'User'.
2. all c-string are in constant address space now, which follows OCL Spec.

Signed-off-by: Ruiling Song <ruiling.song at intel.com>
---
 backend/src/llvm/llvm_gen_backend.cpp |   10 ++++++++--
 backend/src/ocl_stdlib.tmpl.h         |    5 +++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/backend/src/llvm/llvm_gen_backend.cpp b/backend/src/llvm/llvm_gen_backend.cpp
index 1bf59a1..a5aa038 100644
--- a/backend/src/llvm/llvm_gen_backend.cpp
+++ b/backend/src/llvm/llvm_gen_backend.cpp
@@ -1524,8 +1524,14 @@ namespace gbe
     // one instruction that use the local variable, simply return.
     const Instruction *insn = NULL;
     for(Value::const_use_iterator iter = v->use_begin(); iter != v->use_end(); ++iter) {
-      if(isa<Instruction>(*iter)) return cast<const Instruction>(*iter);
-      insn = getInstructionUseLocal(*iter);
+    // After LLVM 3.5, use_iterator points to 'Use' instead of 'User', which is more straightforward.
+#if (LLVM_VERSION_MAJOR == 3) && (LLVM_VERSION_MINOR < 5)
+      const User *theUser = *iter;
+#else
+      const User *theUser = iter->getUser();
+#endif
+      if(isa<Instruction>(theUser)) return cast<const Instruction>(theUser);
+      insn = getInstructionUseLocal(theUser);
       if(insn != NULL) break;
     }
     return insn;
diff --git a/backend/src/ocl_stdlib.tmpl.h b/backend/src/ocl_stdlib.tmpl.h
index a4bdfbd..c2eca7c 100755
--- a/backend/src/ocl_stdlib.tmpl.h
+++ b/backend/src/ocl_stdlib.tmpl.h
@@ -5018,7 +5018,12 @@ INLINE_OVERLOADABLE float __gen_ocl_internal_fastpath_tanh (float x)
 #undef INLINE
 
 /* The printf function. */
+/* From LLVM 3.5, c string are all in constant address space */
+#if 100*__clang_major__ + __clang_minor__ < 305
 int __gen_ocl_printf_stub(const char * format, ...);
+#else
+int __gen_ocl_printf_stub(constant char * format, ...);
+#endif
 #define printf __gen_ocl_printf_stub
 
 #endif /* __GEN_OCL_STDLIB_H__ */
-- 
1.7.10.4



More information about the Beignet mailing list