Maybe handle reduction targets, too?
authorPhil Miller <mille121@illinois.edu>
Sat, 31 Mar 2012 15:48:16 +0000 (10:48 -0500)
committerPhil Miller <mille121@illinois.edu>
Thu, 5 Apr 2012 21:17:54 +0000 (16:17 -0500)
src/xlat-i/sdag/CSdagConstruct.C
src/xlat-i/xi-symbol.C
src/xlat-i/xi-symbol.h
tests/charm++/method_templates/mylib.ci
tests/charm++/method_templates/pgm.C

index ba693fbb0ba426505d028a12db30059959fbd2ca..adfb4a3735911051662399ceb0c9c77cc93d9996 100644 (file)
@@ -1174,6 +1174,12 @@ void SdagConstruct::generateAtomic(XStr& decls, XStr& defs, Entry* entry)
   endMethod(defs);
 }
 
+void generateSignature(XStr& str,
+                       const XStr* name, const char* suffix,
+                       TList<CStateVar*>* params)
+{
+
+}
 void generateSignature(XStr& decls, XStr& defs,
                        const Entry* entry, bool declareStatic, const char* returnType,
                        const XStr* name, bool isEnd,
index c4aff5dd6ede209a2d2dd311356f994031132a27..0e30ee19a3d830fe25b9c18202053b790cb29ffc 100644 (file)
@@ -3090,13 +3090,15 @@ XStr Entry::chareIdx(int fromProxy)
 // this Member's container with the given return type, e.g.
 // template<int N,class foo> void CProxy_bar<N,foo>
 // Works with non-templated Chares as well.
-XStr Member::makeDecl(const XStr &returnType, int forProxy)
+XStr Member::makeDecl(const XStr &returnType, int forProxy, bool isStatic)
 {
   XStr str;
 
   if (container->isTemplated())
     str << container->tspec() << "\n";
   str << generateTemplateSpec(tspec) << "\n";
+  if (isStatic)
+    str << "static ";
   str << returnType<<" ";
   if (forProxy)
        str<<container->proxyName();
@@ -4282,14 +4284,18 @@ void Entry::genIndexDecls(XStr& str)
 
   if (isReductionTarget()) {
       str << "\n    // Entry point registration at startup"
+          << templateSpecLine
           << "\n    static int reg_"<<name<<"_redn_wrapper();" ///< @note: Should this be generated as private?
           << "\n    // Entry point index lookup"
+          << templateSpecLine
           << "\n    inline static int idx_" << name << "_redn_wrapper() {"
           << "\n      static int epidx = reg_"<<name<<"_redn_wrapper();"
           << "\n      return epidx;"
           << "\n    }"
+          << templateSpecLine
           << "\n    static int " << name << "_redn_wrapper"
           << "(CkReductionMsg* impl_msg) { return idx_" << name << "_redn_wrapper(); }"
+          << templateSpecLine
           << "\n    static void _" << name << "_redn_wrapper(void* impl_msg, "
           << container->baseName() <<"* impl_obj);\n";
   }
@@ -4600,7 +4606,8 @@ void Entry::genDefs(XStr& str)
   if (container->isMainChare() || container->isChare() || container->isForElement()) {
       if (isReductionTarget()) {
           XStr retStr; retStr<<retType;
-          str << retType << " " << indexName(); //makeDecl(retStr, 1)
+          str << makeDecl(retStr);
+          //str << retType << " " << indexName(); //makeDecl(retStr, 1)
           str << "::_" << name << "_redn_wrapper(void* impl_msg, "
               << container->baseName() << "* impl_obj)\n{\n"
               << "  char* impl_buf = (char*)((CkReductionMsg*)impl_msg)->getData();\n";
index e84cdb97a110e9823dd9ddb5f811019b8cf39bb0..cff56920fbfd5d229f96fc1213ece744354fce16 100644 (file)
@@ -636,7 +636,7 @@ class Member : public Construct {
     virtual void setChare(Chare *c) { container = c; }
     virtual int isSdag(void) { return 0; }
     virtual void collectSdagCode(CParsedFile *, int&) { return; }
-    XStr makeDecl(const XStr &returnType,int forProxy=0);
+    XStr makeDecl(const XStr &returnType,int forProxy=0, bool isStatic = false);
     virtual void genPythonDecls(XStr& ) {}
     virtual void genIndexDecls(XStr& ) {}
     virtual void genPythonDefs(XStr& ) {}
index 0d83841f824d4743915278abb4132d6801ec2174..88fecf489ea1dba3312a93dc00507cb137ddd823 100644 (file)
@@ -3,7 +3,7 @@ module mylib {
     array [1D] libArray {
         entry libArray();
         template <typename T>
-        entry void doSomething(T t);
+        entry [reductiontarget] void doSomething(T t);
     };
 };
 
index 803c565053e33517311e2da179711bf3e1ca5d84..bec2ea7b7a161eac902366b52d552cb409444616 100644 (file)
@@ -45,8 +45,8 @@ void register_instantiations()
 {
     count< std::less<int> >  comparator;
     avg avger;
-    CkIndex_libArray::doSomething< count<std::less<int> > >(comparator);
-    CkIndex_libArray::doSomething<avg>(avger);
+    CkIndex_libArray::doSomething(comparator);
+    CkIndex_libArray::doSomething(avger);
 };