[Beignet] [PATCH v2] Use CreateCall instead of CreateCall2.

Song, Ruiling ruiling.song at intel.com
Thu Nov 19 18:41:31 PST 2015


The llvm function prototype is CreateCall((Value *Callee, ArrayRef<Value *> Args = None, const Twine &Name = "")
Cast from std::initializer_list to ArrayRef<> is not supported on older llvm version.
Please try:
       /* Add the timestamp store function call. */
       // __gen_ocl_store_timestamp(int nth, int type);
-      builder->CreateCall2(cast<llvm::Function>(module->getOrInsertFunction(
+      Value *Args[2] = {ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType)};
+      builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
               "__gen_ocl_calc_timestamp", Type::getVoidTy(module->getContext()),
               IntegerType::getInt32Ty(module->getContext()),
               IntegerType::getInt32Ty(module->getContext()),
               NULL)),
-          /* the args */ ConstantInt::get(intTy, pointNum++), ConstantInt::get(intTy, profilingType));
+              ArrayRef<Value*>(Args));
     }
     /* We insert one store_profiling at the end of the last block to hold the place. */
     llvm::Function::iterator BE = F.end();
@@ -190,12 +191,14 @@ namespace gbe
     BasicBlock::iterator retInst = BE->end();
     retInst--;
     builder->SetInsertPoint(retInst);
-    builder->CreateCall2(cast<llvm::Function>(module->getOrInsertFunction(
+    Value *Args2[2] = {profilingBuf, ConstantInt::get(intTy, profilingType)};
+
+    builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
             "__gen_ocl_store_profiling", Type::getVoidTy(module->getContext()),
             ptrTy,
             IntegerType::getInt32Ty(module->getContext()),
             NULL)),
-        /* the args */profilingBuf, ConstantInt::get(intTy, profilingType));
+            ArrayRef<Value*>(Args2));

It works at least on llvm 3.6. it should also work on llvm 3.5.
Thanks!
Ruiling

> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Yang, Rong R
> Sent: Thursday, November 19, 2015 3:55 PM
> To: Yan Wang <yan.wang at linux.intel.com>; beignet at lists.freedesktop.org
> Subject: Re: [Beignet] [PATCH v2] Use CreateCall instead of CreateCall2.
> 
> Build fail in LLVM3.5.2.
> 
> > -----Original Message-----
> > From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf
> Of
> > Yan Wang
> > Sent: Thursday, November 19, 2015 10:41
> > To: beignet at lists.freedesktop.org
> > Cc: Yan Wang
> > Subject: [Beignet] [PATCH v2] Use CreateCall instead of CreateCall2.
> >
> > Signed-off-by: Yan Wang <yan.wang at linux.intel.com>
> > ---
> >  backend/src/llvm/llvm_profiling.cpp | 8 ++++----
> >  1 file changed, 4 insertions(+), 4 deletions(-)
> >
> > diff --git a/backend/src/llvm/llvm_profiling.cpp
> > b/backend/src/llvm/llvm_profiling.cpp
> > index 8c9157c..3fbd00d 100644
> > --- a/backend/src/llvm/llvm_profiling.cpp
> > +++ b/backend/src/llvm/llvm_profiling.cpp
> > @@ -177,12 +177,12 @@ namespace gbe
> >        builder->SetInsertPoint(instI);
> >        /* Add the timestamp store function call. */
> >        // __gen_ocl_store_timestamp(int nth, int type);
> > -      builder->CreateCall2(cast<llvm::Function>(module-
> > >getOrInsertFunction(
> > +
> > + builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
> >                "__gen_ocl_calc_timestamp", Type::getVoidTy(module-
> > >getContext()),
> >                IntegerType::getInt32Ty(module->getContext()),
> >                IntegerType::getInt32Ty(module->getContext()),
> >                NULL)),
> > -          /* the args */ ConstantInt::get(intTy, pointNum++),
> > ConstantInt::get(intTy, profilingType));
> > +          /* the args */ {ConstantInt::get(intTy, pointNum++),
> > + ConstantInt::get(intTy, profilingType)});
> >      }
> >      /* We insert one store_profiling at the end of the last block to hold the
> > place. */
> >      llvm::Function::iterator BE = F.end(); @@ -190,12 +190,12 @@
> namespace
> > gbe
> >      BasicBlock::iterator retInst = BE->end();
> >      retInst--;
> >      builder->SetInsertPoint(retInst);
> > -    builder->CreateCall2(cast<llvm::Function>(module-
> >getOrInsertFunction(
> > +
> > + builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction(
> >              "__gen_ocl_store_profiling", Type::getVoidTy(module-
> >getContext()),
> >              ptrTy,
> >              IntegerType::getInt32Ty(module->getContext()),
> >              NULL)),
> > -        /* the args */profilingBuf, ConstantInt::get(intTy, profilingType));
> > +        /* the args */{profilingBuf, ConstantInt::get(intTy,
> > + profilingType)});
> >
> >      delete builder;
> >      return changed;
> > --
> > 2.5.0
> >
> > _______________________________________________
> > Beignet mailing list
> > Beignet at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/beignet
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list