[Beignet] [PATCH 3/3] do not use C++11 features inside libgbeinterp

Guo Yejun yejun.guo at intel.com
Sun Dec 28 05:23:19 PST 2014


some embedded systems have not upgraded the c/c++ environment, it
makes the request to remove the C++11 features. It is possible for
the CL_EMBEDDED_PROFILE with some more changes (to be done later).
This change modifies the keyword auto and nullptr.

btw, C++ new feature is a must for libgbe (the OpenCL compiler)
which depends on LLVM/clang

Signed-off-by: Guo Yejun <yejun.guo at intel.com>
---
 backend/src/backend/program.cpp | 17 ++++---
 backend/src/backend/program.hpp |  6 +--
 backend/src/ir/constant.cpp     |  3 +-
 backend/src/ir/constant.hpp     |  5 ++-
 backend/src/ir/function.hpp     | 22 +++++++--
 backend/src/ir/image.cpp        | 98 ++++++++++++++++++++---------------------
 backend/src/ir/liveness.hpp     |  8 ++--
 backend/src/ir/printf.cpp       | 12 ++---
 backend/src/ir/printf.hpp       |  6 ++-
 backend/src/ir/sampler.cpp      | 14 +++---
 backend/src/ir/sampler.hpp      |  4 +-
 backend/src/ir/unit.hpp         |  3 +-
 12 files changed, 111 insertions(+), 87 deletions(-)

diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
index abdb1e4..8ccf115 100644
--- a/backend/src/backend/program.cpp
+++ b/backend/src/backend/program.cpp
@@ -106,7 +106,8 @@ namespace gbe {
 
   Program::Program(void) : constantSet(NULL) {}
   Program::~Program(void) {
-    for (auto &kernel : kernels) GBE_DELETE(kernel.second);
+    for (map<std::string, Kernel*>::iterator it = kernels.begin(); it != kernels.end(); ++it)
+      GBE_DELETE(it->second);
     if (constantSet) delete constantSet;
   }
 
@@ -191,8 +192,8 @@ namespace gbe {
     }
 
     OUT_UPDATE_SZ(ker_num);
-    for (auto ker : kernels) {
-      size_t sz = ker.second->serializeToBin(outs);
+    for (map<std::string, Kernel*>::iterator it = kernels.begin(); it != kernels.end(); ++it) {
+      size_t sz = it->second->serializeToBin(outs);
       if (!sz)
         return 0;
 
@@ -275,7 +276,8 @@ namespace gbe {
     }
 
     OUT_UPDATE_SZ(patches.size());
-    for (auto patch : patches) {
+    for (size_t i = 0; i < patches.size(); ++i) {
+      PatchInfo& patch = patches[i];
       unsigned int tmp;
       tmp = patch.type;
       OUT_UPDATE_SZ(tmp);
@@ -446,8 +448,8 @@ namespace gbe {
       constantSet->printStatus(indent + 4, outs);
     }
 
-    for (auto ker : kernels) {
-      ker.second->printStatus(indent + 4, outs);
+    for (map<std::string, Kernel*>::iterator it = kernels.begin(); it != kernels.end(); ++it) {
+      it->second->printStatus(indent + 4, outs);
     }
 
     outs << spaces << "================ End Program ================" << "\n";
@@ -481,7 +483,8 @@ namespace gbe {
 
     outs << spaces_nl << "  Patches Number is " << patches.size() << "\n";
     num = 0;
-    for (auto patch : patches) {
+    for (size_t i = 0; i < patches.size(); ++i) {
+      PatchInfo& patch = patches[i];
       num++;
       outs << spaces_nl << "  patch " << num << ":\n";
       outs << spaces_nl << "      type value: "<< patch.type << "\n";
diff --git a/backend/src/backend/program.hpp b/backend/src/backend/program.hpp
index 446c521..66f90aa 100644
--- a/backend/src/backend/program.hpp
+++ b/backend/src/backend/program.hpp
@@ -250,7 +250,7 @@ namespace gbe {
     uint32_t getKernelNum(void) const { return kernels.size(); }
     /*! Get the kernel from its name */
     Kernel *getKernel(const std::string &name) const {
-      auto it = kernels.find(name);
+      map<std::string, Kernel*>::const_iterator it = kernels.find(name);
       if (it == kernels.end())
         return NULL;
       else
@@ -260,9 +260,9 @@ namespace gbe {
     Kernel *getKernel(uint32_t ID) const {
       uint32_t currID = 0;
       Kernel *kernel = NULL;
-      for (const auto &pair : kernels) {
+      for (map<std::string, Kernel*>::const_iterator it = kernels.begin(); it != kernels.end(); ++it) {
         if (currID == ID) {
-          kernel = pair.second;
+          kernel = it->second;
           break;
         }
         currID++;
diff --git a/backend/src/ir/constant.cpp b/backend/src/ir/constant.cpp
index 6ef8ea6..fa4e14a 100644
--- a/backend/src/ir/constant.cpp
+++ b/backend/src/ir/constant.cpp
@@ -56,7 +56,8 @@ namespace ir {
     }
 
     OUT_UPDATE_SZ(constants.size());
-    for (auto const &cnst : constants) {
+    for (size_t i = 0; i < constants.size(); ++i) {
+      Constant& cnst = constants[i];
       size_t bytes = sizeof(cnst.getName().size())        //name length self
                      + cnst.getName().size()*sizeof(char) //name
                      + sizeof(cnst.getSize())             //size
diff --git a/backend/src/ir/constant.hpp b/backend/src/ir/constant.hpp
index f5f172d..0891d7b 100644
--- a/backend/src/ir/constant.hpp
+++ b/backend/src/ir/constant.hpp
@@ -76,12 +76,13 @@ namespace ir {
     Constant& getConstant(size_t i) { return constants[i]; }
     /*! Get a special constant */
     Constant& getConstant(const std::string & name) {
-      for (auto & c : constants) {
+      for (size_t i = 0; i < constants.size(); ++i) {
+        Constant& c = constants[i];
         if (c.getName() == name)
           return c;
       }
       GBE_ASSERT(false);
-      return *(Constant *)nullptr;
+      return *(Constant *)NULL;
     }
     /*! Number of bytes of serialized constant data */
     size_t getDataSize(void) const { return data.size(); }
diff --git a/backend/src/ir/function.hpp b/backend/src/ir/function.hpp
index 4aea087..5d00cca 100644
--- a/backend/src/ir/function.hpp
+++ b/backend/src/ir/function.hpp
@@ -353,12 +353,20 @@ namespace ir {
      *  this is not an input argument
      */
     INLINE const FunctionArgument *getArg(const Register &reg) const {
-      for (auto arg : args) if (arg->reg == reg) return arg;
+      for (size_t i = 0; i < args.size(); ++i) {
+        const FunctionArgument* arg = args[i];
+        if (arg->reg == reg)
+          return arg;
+      }
       return NULL;
     }
 
     INLINE FunctionArgument *getArg(const Register &reg) {
-      for (auto arg : args) if (arg->reg == reg) return arg;
+      for (size_t i = 0; i < args.size(); ++i) {
+        FunctionArgument* arg = args[i];
+        if (arg->reg == reg)
+          return arg;
+      }
       return NULL;
     }
 
@@ -417,12 +425,18 @@ namespace ir {
     /*! Apply the given functor on all basic blocks */
     template <typename T>
     INLINE void foreachBlock(const T &functor) const {
-      for (auto block : blocks) functor(*block);
+      for (size_t i = 0; i < blocks.size(); ++i) {
+        BasicBlock* block = blocks[i];
+        functor(*block);
+      }
     }
     /*! Apply the given functor on all instructions */
     template <typename T>
     INLINE void foreachInstruction(const T &functor) const {
-      for (auto block : blocks) block->foreach(functor);
+      for (size_t i = 0; i < blocks.size(); ++i) {
+        BasicBlock* block = blocks[i];
+        block->foreach(functor);
+      }
     }
     /*! Does it use SLM */
     INLINE bool getUseSLM(void) const { return this->useSLM; }
diff --git a/backend/src/ir/image.cpp b/backend/src/ir/image.cpp
index d28a72a..8976a68 100644
--- a/backend/src/ir/image.cpp
+++ b/backend/src/ir/image.cpp
@@ -58,7 +58,7 @@ namespace ir {
 
   void ImageSet::appendInfo(ImageInfoKey key, uint32_t offset)
   {
-    auto it = indexMap.find(key.index);
+    map<uint32_t, struct ImageInfo *>::iterator it = indexMap.find(key.index);
     assert(it != indexMap.end());
     struct ImageInfo *imageInfo = it->second;
     setInfoOffset4Type(imageInfo, key.type, offset);
@@ -67,8 +67,8 @@ namespace ir {
   void ImageSet::clearInfo()
   {
     struct ImageInfo *imageInfo;
-    for(auto &it : indexMap) {
-      imageInfo = it.second;
+    for (map<uint32_t, struct ImageInfo *>::iterator it = indexMap.begin(); it != indexMap.end(); ++it) {
+      imageInfo = it->second;
       imageInfo->wSlot = -1;
       imageInfo->hSlot = -1;
       imageInfo->depthSlot = -1;
@@ -78,7 +78,7 @@ namespace ir {
   }
   int32_t ImageSet::getInfoOffset(ImageInfoKey key) const
   {
-    auto it = indexMap.find(key.index);
+    map<uint32_t, struct ImageInfo *>::const_iterator it = indexMap.find(key.index);
     if (it == indexMap.end())
       return -1;
     struct ImageInfo *imageInfo = it->second;
@@ -87,20 +87,20 @@ namespace ir {
 
   uint32_t ImageSet::getIdx(const Register imageReg) const
   {
-    auto it = regMap.find(imageReg);
+    map<Register, struct ImageInfo *>::const_iterator it = regMap.find(imageReg);
     GBE_ASSERT(it != regMap.end());
     return it->second->idx;
   }
 
   void ImageSet::getData(struct ImageInfo *imageInfos) const {
       int id = 0;
-      for(auto &it : regMap)
-        imageInfos[id++] = *it.second;
+      for (map<Register, struct ImageInfo *>::const_iterator it = regMap.begin(); it != regMap.end(); ++it)
+        imageInfos[id++] = *(it->second);
   }
 
   ImageSet::~ImageSet() {
-    for(auto &it : regMap)
-      GBE_DELETE(it.second);
+    for (map<Register, struct ImageInfo *>::const_iterator it = regMap.begin(); it != regMap.end(); ++it)
+      GBE_DELETE(it->second);
   }
 
 #define OUT_UPDATE_SZ(elt) SERIALIZE_OUT(elt, outs, ret_size)
@@ -113,29 +113,29 @@ namespace ir {
     OUT_UPDATE_SZ(magic_begin);
 
     OUT_UPDATE_SZ(regMap.size());
-    for (auto iter : regMap) {
-      OUT_UPDATE_SZ(iter.first);
-      OUT_UPDATE_SZ(iter.second->arg_idx);
-      OUT_UPDATE_SZ(iter.second->idx);
-      OUT_UPDATE_SZ(iter.second->wSlot);
-      OUT_UPDATE_SZ(iter.second->hSlot);
-      OUT_UPDATE_SZ(iter.second->depthSlot);
-      OUT_UPDATE_SZ(iter.second->dataTypeSlot);
-      OUT_UPDATE_SZ(iter.second->channelOrderSlot);
-      OUT_UPDATE_SZ(iter.second->dimOrderSlot);
+    for (map<Register, struct ImageInfo *>::const_iterator it = regMap.begin(); it != regMap.end(); ++it) {
+      OUT_UPDATE_SZ(it->first);
+      OUT_UPDATE_SZ(it->second->arg_idx);
+      OUT_UPDATE_SZ(it->second->idx);
+      OUT_UPDATE_SZ(it->second->wSlot);
+      OUT_UPDATE_SZ(it->second->hSlot);
+      OUT_UPDATE_SZ(it->second->depthSlot);
+      OUT_UPDATE_SZ(it->second->dataTypeSlot);
+      OUT_UPDATE_SZ(it->second->channelOrderSlot);
+      OUT_UPDATE_SZ(it->second->dimOrderSlot);
     }
 
     OUT_UPDATE_SZ(indexMap.size());
-    for (auto iter : indexMap) {
-      OUT_UPDATE_SZ(iter.first);
-      OUT_UPDATE_SZ(iter.second->arg_idx);
-      OUT_UPDATE_SZ(iter.second->idx);
-      OUT_UPDATE_SZ(iter.second->wSlot);
-      OUT_UPDATE_SZ(iter.second->hSlot);
-      OUT_UPDATE_SZ(iter.second->depthSlot);
-      OUT_UPDATE_SZ(iter.second->dataTypeSlot);
-      OUT_UPDATE_SZ(iter.second->channelOrderSlot);
-      OUT_UPDATE_SZ(iter.second->dimOrderSlot);
+    for (map<uint32_t, struct ImageInfo *>::iterator it = indexMap.begin(); it != indexMap.end(); ++it) {
+      OUT_UPDATE_SZ(it->first);
+      OUT_UPDATE_SZ(it->second->arg_idx);
+      OUT_UPDATE_SZ(it->second->idx);
+      OUT_UPDATE_SZ(it->second->wSlot);
+      OUT_UPDATE_SZ(it->second->hSlot);
+      OUT_UPDATE_SZ(it->second->depthSlot);
+      OUT_UPDATE_SZ(it->second->dataTypeSlot);
+      OUT_UPDATE_SZ(it->second->channelOrderSlot);
+      OUT_UPDATE_SZ(it->second->dimOrderSlot);
     }
 
     OUT_UPDATE_SZ(magic_end);
@@ -211,31 +211,31 @@ namespace ir {
     outs << spaces_nl  << "  ImageSet Map: [reg, arg_idx, idx, wSlot, hSlot, depthSlot, "
                 "dataTypeSlot, channelOrderSlot, dimOrderSlot]\n";
     outs << spaces_nl << "     regMap size: " << regMap.size() << "\n";
-    for (auto iter : regMap) {
-      outs << spaces_nl << "         [" << iter.first << ", "
-           << iter.second->arg_idx << ", "
-           << iter.second->idx << ", "
-           << iter.second->wSlot << ", "
-           << iter.second->hSlot << ", "
-           << iter.second->depthSlot << ", "
-           << iter.second->dataTypeSlot << ", "
-           << iter.second->channelOrderSlot << ", "
-           << iter.second->dimOrderSlot << "]" << "\n";
+    for (map<Register, struct ImageInfo *>::const_iterator it = regMap.begin(); it != regMap.end(); ++it) {
+      outs << spaces_nl << "         [" << it->first << ", "
+           << it->second->arg_idx << ", "
+           << it->second->idx << ", "
+           << it->second->wSlot << ", "
+           << it->second->hSlot << ", "
+           << it->second->depthSlot << ", "
+           << it->second->dataTypeSlot << ", "
+           << it->second->channelOrderSlot << ", "
+           << it->second->dimOrderSlot << "]" << "\n";
    }
 
    outs << spaces_nl << "  ImageSet Map: [index, arg_idx, idx, wSlot, hSlot, depthSlot, "
            "dataTypeSlot, channelOrderSlot, dimOrderSlot]\n";
    outs << spaces_nl << "     regMap size: " << indexMap.size() << "\n";
-   for (auto iter : indexMap) {
-     outs << spaces_nl << "         [" << iter.first << ", "
-          << iter.second->arg_idx << ", "
-          << iter.second->idx << ", "
-          << iter.second->wSlot << ", "
-          << iter.second->hSlot << ", "
-          << iter.second->depthSlot << ", "
-          << iter.second->dataTypeSlot << ", "
-          << iter.second->channelOrderSlot << ", "
-          << iter.second->dimOrderSlot << ", " << "\n";
+   for (map<uint32_t, struct ImageInfo *>::iterator it = indexMap.begin(); it != indexMap.end(); ++it) {
+     outs << spaces_nl << "         [" << it->first << ", "
+          << it->second->arg_idx << ", "
+          << it->second->idx << ", "
+          << it->second->wSlot << ", "
+          << it->second->hSlot << ", "
+          << it->second->depthSlot << ", "
+          << it->second->dataTypeSlot << ", "
+          << it->second->channelOrderSlot << ", "
+          << it->second->dimOrderSlot << ", " << "\n";
    }
 
    outs << spaces << "------------- End ImageSet -------------" << "\n";
diff --git a/backend/src/ir/liveness.hpp b/backend/src/ir/liveness.hpp
index 1bc66fe..4a7dc4e 100644
--- a/backend/src/ir/liveness.hpp
+++ b/backend/src/ir/liveness.hpp
@@ -100,8 +100,8 @@ namespace ir {
     template <DataFlowDirection dir, typename T>
     void foreach(const T &functor) {
       // Iterate on all blocks
-      for (const auto &pair : liveness) {
-        BlockInfo &info = *pair.second;
+      for (Info::iterator pair = liveness.begin(); pair != liveness.end(); ++pair) {
+        BlockInfo &info = *(pair->second);
         const BasicBlock &bb = info.bb;
         const BlockSet *set = NULL;
         if (dir == DF_SUCC)
@@ -109,8 +109,8 @@ namespace ir {
         else
           set = &bb.getPredecessorSet();
         // Iterate over all successors
-        for (auto other : *set) {
-          auto otherInfo = liveness.find(other);
+        for (BlockSet::iterator other = (*set).begin(); other != (*set).end(); ++other) {
+          Info::iterator otherInfo = liveness.find(*other);
           GBE_ASSERT(otherInfo != liveness.end() && otherInfo->second != NULL);
           functor(info, *otherInfo->second);
         }
diff --git a/backend/src/ir/printf.cpp b/backend/src/ir/printf.cpp
index 7b670f7..0e9f81c 100644
--- a/backend/src/ir/printf.cpp
+++ b/backend/src/ir/printf.cpp
@@ -35,11 +35,11 @@ namespace gbe
     {
       fmts.push_back(*fmt);
 
-      for (auto &f : fmts.back()) {
-        if (f.type == PRINTF_SLOT_TYPE_STRING)
+      for (PrintfFmt::iterator f = fmts.back().begin(); f != fmts.back().end(); ++f) {
+        if (f->type == PRINTF_SLOT_TYPE_STRING)
           continue;
 
-        slots.push_back(&f);
+        slots.push_back(&(*f));
       }
 
       /* Update the total size of size. */
@@ -121,14 +121,16 @@ namespace gbe
       std::string pf_str;
       int stmt = 0;
 
-      for (auto &pf : fmts) {
+      for (size_t count = 0; count < fmts.size(); ++count) {
+        PrintfFmt& pf = fmts[count];
         for (i = 0; i < global_wk_sz0; i++) {
           for (j = 0; j < global_wk_sz1; j++) {
             for (k = 0; k < global_wk_sz2; k++) {
               int loop_num = ((int *)index_addr)[stmt*global_wk_sz0*global_wk_sz1*global_wk_sz2
                                                  + k*global_wk_sz0*global_wk_sz1 + j*global_wk_sz0 + i];
               for (int n = 0; n < loop_num; n++) {
-                for (auto &slot : pf) {
+                for (PrintfFmt::iterator pfit = pf.begin(); pfit != pf.end(); ++pfit) {
+                  PrintfSlot& slot = *pfit;
                   pf_str = "";
                   int vec_num;
 
diff --git a/backend/src/ir/printf.hpp b/backend/src/ir/printf.hpp
index b9f7619..8639644 100644
--- a/backend/src/ir/printf.hpp
+++ b/backend/src/ir/printf.hpp
@@ -146,11 +146,13 @@ namespace gbe
     {
     public:
       PrintfSet(const PrintfSet& other) {
-        for (auto &f : other.fmts) {
+        for (size_t i = 0; i < other.fmts.size(); ++i) {
+          const PrintfFmt& f = other.fmts[i];
           fmts.push_back(f);
         }
 
-        for (auto &s : other.slots) {
+        for (size_t i = 0; i < other.fmts.size(); ++i) {
+          PrintfSlot* s = other.slots[i];
           slots.push_back(s);
         }
 
diff --git a/backend/src/ir/sampler.cpp b/backend/src/ir/sampler.cpp
index e4accca..a4e1ddd 100644
--- a/backend/src/ir/sampler.cpp
+++ b/backend/src/ir/sampler.cpp
@@ -53,7 +53,7 @@ namespace ir {
     int32_t id = ctx->getFunction().getArgID(arg);
     GBE_ASSERT(id < (1 << __CLK_SAMPLER_ARG_BITS));
 
-    auto it = samplerMap.find(SAMPLER_ID(id));
+    map<uint32_t, uint32_t>::iterator it = samplerMap.find(SAMPLER_ID(id));
     if (it != samplerMap.end()) {
       return it->second;
     }
@@ -71,9 +71,9 @@ namespace ir {
     OUT_UPDATE_SZ(magic_begin);
 
     OUT_UPDATE_SZ(samplerMap.size());
-    for (auto iter : samplerMap) {
-      OUT_UPDATE_SZ(iter.first);
-      OUT_UPDATE_SZ(iter.second);
+    for (map<uint32_t, uint32_t>::iterator it = samplerMap.begin(); it != samplerMap.end(); ++it) {
+      OUT_UPDATE_SZ(it->first);
+      OUT_UPDATE_SZ(it->second);
     }
 
     OUT_UPDATE_SZ(magic_end);
@@ -123,9 +123,9 @@ namespace ir {
     outs << spaces_nl << "  SamplerSet Map: [index, sampler_reg, sampler_slot]\n";
     outs << spaces_nl << "     samplerMap size: " << samplerMap.size() << "\n";
 
-    for (auto iter : samplerMap) {
-      outs << spaces_nl <<  "     [" << iter.first << ", "
-           << iter.second << "]\n";
+    for (map<uint32_t, uint32_t>::iterator it = samplerMap.begin(); it != samplerMap.end(); ++it) {
+      outs << spaces_nl <<  "     [" << it->first << ", "
+           << it->second << "]\n";
     }
 
     outs << spaces << "------------- End SamplerSet -------------" << "\n";
diff --git a/backend/src/ir/sampler.hpp b/backend/src/ir/sampler.hpp
index a23f871..85e6d54 100644
--- a/backend/src/ir/sampler.hpp
+++ b/backend/src/ir/sampler.hpp
@@ -48,8 +48,8 @@ namespace ir {
     size_t getDataSize(void) { return samplerMap.size(); }
     size_t getDataSize(void) const { return samplerMap.size(); }
     void getData(uint32_t *samplers) const {
-      for(auto &it : samplerMap)
-        samplers[it.second] = it.first;
+      for (map<uint32_t, uint32_t>::const_iterator it = samplerMap.begin(); it != samplerMap.end(); ++it)
+        samplers[it->second] = it->first;
     }
 
     void operator = (const SamplerSet& other) {
diff --git a/backend/src/ir/unit.hpp b/backend/src/ir/unit.hpp
index e2ccbe8..8ff858d 100644
--- a/backend/src/ir/unit.hpp
+++ b/backend/src/ir/unit.hpp
@@ -56,7 +56,8 @@ namespace ir {
     /*! Apply the given functor on all the functions */
     template <typename T>
     INLINE void apply(const T &functor) const {
-      for (const auto &pair : functions) functor(*pair.second);
+      for (FunctionSet::const_iterator it = functions.begin(); it != functions.end(); ++it)
+        functor(*(it->second));
     }
     /*! Return the size of the pointers manipulated */
     INLINE PointerSize getPointerSize(void) const { return pointerSize; }
-- 
1.9.1



More information about the Beignet mailing list