From: Vikram S. Adve Date: Tue, 10 Dec 2002 13:08:48 +0000 (+0000) Subject: External routines used to identify Cilk operations inserted by the X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d86deb689bfec6cd3f0f2a0003dbbf3214f3cd4d;p=oota-llvm.git External routines used to identify Cilk operations inserted by the parallelization pass. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4965 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/IPO/Cilkifier.cpp b/lib/Transforms/IPO/Cilkifier.cpp new file mode 100644 index 00000000000..498c58b6fd8 --- /dev/null +++ b/lib/Transforms/IPO/Cilkifier.cpp @@ -0,0 +1,54 @@ +//===- Cilkifier.cpp - Support routines for Cilk code gen. ------*- C++ -*-===// +// +// This is located here so that the code generator (dis) does not have to +// include and link with the libtipo.a archive containing class Cilkifier +// and the rest of the automatic parallelization code. +//===----------------------------------------------------------------------===// + + +#include "llvm/Support/Cilkifier.h" +#include "llvm/Function.h" +#include "llvm/iOther.h" +#include "llvm/DerivedTypes.h" +#include + + +//---------------------------------------------------------------------------- +// Global constants used in marking Cilk functions and function calls. +// These should be used only by the auto-parallelization pass. +//---------------------------------------------------------------------------- + +const std::string CilkSuffix(".llvm2cilk"); +const std::string DummySyncFuncName("__sync.llvm2cilk"); + +//---------------------------------------------------------------------------- +// Routines to identify Cilk functions, calls to Cilk functions, and syncs. +//---------------------------------------------------------------------------- + +bool isCilk(const Function& F) +{ + assert(F.hasName()); + return (F.getName().rfind(CilkSuffix) == + F.getName().size() - CilkSuffix.size()); +} + +bool isCilkMain(const Function& F) +{ + assert(F.hasName()); + return (F.getName() == std::string("main") + CilkSuffix); +} + + +bool isCilk(const CallInst& CI) +{ + return (CI.getCalledFunction() != NULL && isCilk(*CI.getCalledFunction())); +} + +bool isSync(const CallInst& CI) +{ + return (CI.getCalledFunction() != NULL && + CI.getCalledFunction()->getName() == DummySyncFuncName); +} + + +//---------------------------------------------------------------------------- diff --git a/lib/Transforms/IPO/Cilkifier.h b/lib/Transforms/IPO/Cilkifier.h new file mode 100644 index 00000000000..be79ab6b222 --- /dev/null +++ b/lib/Transforms/IPO/Cilkifier.h @@ -0,0 +1,35 @@ +//===- Cilkifier.h - Support routines for Cilk code generation --*- C++ -*-===// +// +// This is located here so that the code generator (dis) does not have to +// include and link with the libtipo.a archive containing class Cilkifier +// and the rest of the automatic parallelization code. +//===----------------------------------------------------------------------===// + +#ifndef LLVM_SUPPORT_CILKIFIER_H +#define LLVM_SUPPORT_CILKIFIER_H + +#include +class Function; +class CallInst; + + +//---------------------------------------------------------------------------- +// Global constants used in marking Cilk functions and function calls. +// These should be used only by the auto-parallelization pass. +//---------------------------------------------------------------------------- + +extern const std::string CilkSuffix; +extern const std::string DummySyncFuncName; + +//---------------------------------------------------------------------------- +// Routines to identify Cilk functions, calls to Cilk functions, and syncs. +//---------------------------------------------------------------------------- + +extern bool isCilk (const Function& F); +extern bool isCilkMain (const Function& F); +extern bool isCilk (const CallInst& CI); +extern bool isSync (const CallInst& CI); + +//===----------------------------------------------------------------------===// + +#endif