From b69f7afa67f4b3bf0a7195e60f4b30e92bb5e63a Mon Sep 17 00:00:00 2001 From: Evgeny Mankov Date: Sun, 15 Sep 2019 15:18:58 +0300 Subject: [PATCH] [HIPIFY][perl] Generate sub warnUnsupportedDeviceFunctions --- hipamd/hipify-clang/src/main.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/hipamd/hipify-clang/src/main.cpp b/hipamd/hipify-clang/src/main.cpp index d6a53b170d..68dddb5025 100644 --- a/hipamd/hipify-clang/src/main.cpp +++ b/hipamd/hipify-clang/src/main.cpp @@ -150,6 +150,33 @@ bool generatePerl(bool Generate = true) { } } } + + unsigned int num = 0; + std::stringstream sUnsupported; + const std::string space = " "; + const std::string double_space = space + space; + const std::string triple_space = double_space + space; + for (auto& ma : CUDA_DEVICE_FUNC_MAP) { + if (Statistics::isUnsupported(ma.second)) { + sUnsupported << (num ? ",\n" : "") << double_space << "\"" << ma.first.str() << "\""; + num++; + } + } + if (num) { + *perlStreamPtr.get() << "\nsub warnUnsupportedDeviceFunctions\n" << "{\n" << space << "my $line_num = shift;\n" << space << "my $m = 0;\n" << space << "foreach $func (\n"; + *perlStreamPtr.get() << sUnsupported.str() << "\n" << space << ")\n"; + *perlStreamPtr.get() << space << "{\n"; + *perlStreamPtr.get() << double_space << "# match math at the beginning of a word, but not if it already has a namespace qualifier ('::') :\n"; + *perlStreamPtr.get() << double_space << "my $mt = m/[:]?[:]?\\b($func)\\b(\\w*\\()/g;\n"; + *perlStreamPtr.get() << double_space << "if ($mt) {\n"; + *perlStreamPtr.get() << triple_space << "$m += $mt;\n"; + *perlStreamPtr.get() << triple_space << "print STDERR \" warning: $fileName:#$line_num : unsupported device function : $_\\n\";\n"; + *perlStreamPtr.get() << double_space << "}\n"; + *perlStreamPtr.get() << space << "}\n"; + *perlStreamPtr.get() << space << "return $m;\n"; + *perlStreamPtr.get() << "}\n"; + } + perlStreamPtr.get()->flush(); bool ret = true; EC = sys::fs::copy_file(tmpFile, dstPerlMap);