diff --git a/clang/include/clang/Tooling/Core/Replacement.h b/clang/include/clang/Tooling/Core/Replacement.h index c44a1ac44458..0dbd374961c2 100644 --- a/clang/include/clang/Tooling/Core/Replacement.h +++ b/clang/include/clang/Tooling/Core/Replacement.h @@ -44,7 +44,14 @@ enum class ConstantFlagType : int { Default = 0, Host = 1, Device = 2, - HostDevice = 3 + /// HostDevice means this constant flag is used in both host code and device code. + /// It has been processed by the AST matcher step and all the related replacement + /// or warning has been generated yet. + HostDevice = 3, + /// HostDeviceInOnePass means in PPCallback step, the tool detected this constant + /// flag is used in both host code and device code. But it has not been processed + /// in AST matcher step yet. + HostDeviceInOnePass = 4 }; enum class HelperFileEnum : unsigned int; } diff --git a/clang/lib/DPCT/ASTTraversal.cpp b/clang/lib/DPCT/ASTTraversal.cpp index 4c234cf2ee4e..af9567af535d 100644 --- a/clang/lib/DPCT/ASTTraversal.cpp +++ b/clang/lib/DPCT/ASTTraversal.cpp @@ -357,9 +357,17 @@ void IncludesCallbacks::MacroExpands(const Token &MacroNameTok, if (auto TM = DpctGlobalInfo::getInstance().findConstantMacroTMInfo(Loc)) { TM->setLineBeginOffset(getOffsetOfLineBegin(Loc, SM)); if (MI->getNumTokens() == 0) { - TM->setConstantFlag(dpct::ConstantFlagType::Host); + if (TM->getConstantFlag() == dpct::ConstantFlagType::Default || + TM->getConstantFlag() == dpct::ConstantFlagType::Host) + TM->setConstantFlag(dpct::ConstantFlagType::Host); + else + TM->setConstantFlag(dpct::ConstantFlagType::HostDeviceInOnePass); } else { - TM->setConstantFlag(dpct::ConstantFlagType::Device); + if (TM->getConstantFlag() == dpct::ConstantFlagType::Default || + TM->getConstantFlag() == dpct::ConstantFlagType::Device) + TM->setConstantFlag(dpct::ConstantFlagType::Device); + else + TM->setConstantFlag(dpct::ConstantFlagType::HostDeviceInOnePass); } } } @@ -10081,7 +10089,8 @@ bool MemVarRule::currentIsDevice(const VarDecl *MemVar, for (auto &TM : S) { if (TM == nullptr) continue; - if (TM->getConstantFlag() == dpct::ConstantFlagType::Device && + if ((TM->getConstantFlag() == dpct::ConstantFlagType::Device || + TM->getConstantFlag() == dpct::ConstantFlagType::HostDeviceInOnePass) && TM->getLineBeginOffset() == OffsetOfLineBegin) { TM->setIgnoreTM(true); // current __constant__ variable used in device, using @@ -10094,7 +10103,8 @@ bool MemVarRule::currentIsDevice(const VarDecl *MemVar, auto &M = FileInfo->getRepls()->getReplMap(); bool RemoveWarning = false; for (auto &R : M) { - if (R.second->getConstantFlag() == dpct::ConstantFlagType::Host && + if ((R.second->getConstantFlag() == dpct::ConstantFlagType::Host || + R.second->getConstantFlag() == dpct::ConstantFlagType::HostDeviceInOnePass) && R.second->getConstantOffset() == TM->getConstantOffset()) { // using flag and the offset of __constant__ to link // R(dcpt::constant_memery) and R(reomving __constant__) from @@ -10193,7 +10203,8 @@ bool MemVarRule::currentIsHost(const VarDecl *VD, std::string VarName) { for (auto &TM : S) { if (TM == nullptr) continue; - if (TM->getConstantFlag() == dpct::ConstantFlagType::Host && + if ((TM->getConstantFlag() == dpct::ConstantFlagType::Host || + TM->getConstantFlag() == dpct::ConstantFlagType::HostDeviceInOnePass) && TM->getLineBeginOffset() == OffsetOfLineBegin) { // current __constant__ variable used in host, using OffsetOfLineBegin // link the R(reomving __constant__) and here @@ -10204,7 +10215,8 @@ bool MemVarRule::currentIsHost(const VarDecl *VD, std::string VarName) { return false; auto &M = FileInfo->getRepls()->getReplMap(); for (auto &R : M) { - if (R.second->getConstantFlag() == dpct::ConstantFlagType::Device && + if ((R.second->getConstantFlag() == dpct::ConstantFlagType::Device || + R.second->getConstantFlag() == dpct::ConstantFlagType::HostDeviceInOnePass) && R.second->getConstantOffset() == TM->getConstantOffset()) { // using flag and the offset of __constant__ to link previous // execution of previous is device, current is host: diff --git a/clang/lib/DPCT/MigrationAction.cpp b/clang/lib/DPCT/MigrationAction.cpp index a2abbb882718..06bc52eaec0d 100644 --- a/clang/lib/DPCT/MigrationAction.cpp +++ b/clang/lib/DPCT/MigrationAction.cpp @@ -137,6 +137,7 @@ void DpctToolAction::runPass(PassKind Pass) { StaticsInfo::printReplacements(Transforms, Context); } + Transforms.clear(); } if (Pass == PassKind::PK_Analysis) { int RetJmp = 0; diff --git a/clang/test/dpct/d_dh_constant_db.cpp b/clang/test/dpct/d_dh_constant_db.cpp index 30962f15e8e1..016f861a1979 100644 --- a/clang/test/dpct/d_dh_constant_db.cpp +++ b/clang/test/dpct/d_dh_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir d_dh_constant_db diff --git a/clang/test/dpct/d_dh_constant_db_win.cpp b/clang/test/dpct/d_dh_constant_db_win.cpp index d70e3f519afb..0fc1b0d45142 100644 --- a/clang/test/dpct/d_dh_constant_db_win.cpp +++ b/clang/test/dpct/d_dh_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir d_dh_constant_db_win // RUN: cd d_dh_constant_db_win diff --git a/clang/test/dpct/d_hd_constant_db.cpp b/clang/test/dpct/d_hd_constant_db.cpp index 4d1d32aa8e71..4cd7bbd40cd9 100644 --- a/clang/test/dpct/d_hd_constant_db.cpp +++ b/clang/test/dpct/d_hd_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir d_hd_constant_db diff --git a/clang/test/dpct/d_hd_constant_db_win.cpp b/clang/test/dpct/d_hd_constant_db_win.cpp index 72a9e87de49d..3a53e998c9fb 100644 --- a/clang/test/dpct/d_hd_constant_db_win.cpp +++ b/clang/test/dpct/d_hd_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir d_hd_constant_db_win // RUN: cd d_hd_constant_db_win diff --git a/clang/test/dpct/dh_constant_db.cpp b/clang/test/dpct/dh_constant_db.cpp index a8936a011c64..863780801575 100644 --- a/clang/test/dpct/dh_constant_db.cpp +++ b/clang/test/dpct/dh_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir dh_constant_db diff --git a/clang/test/dpct/dh_constant_db_win.cpp b/clang/test/dpct/dh_constant_db_win.cpp index 7c74050fba67..ad6cedd4075d 100644 --- a/clang/test/dpct/dh_constant_db_win.cpp +++ b/clang/test/dpct/dh_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir dh_constant_db_win // RUN: cd dh_constant_db_win diff --git a/clang/test/dpct/dh_d_constant_db.cpp b/clang/test/dpct/dh_d_constant_db.cpp index 3abb4619ed3c..b285337f6fa5 100644 --- a/clang/test/dpct/dh_d_constant_db.cpp +++ b/clang/test/dpct/dh_d_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir dh_d_constant_db diff --git a/clang/test/dpct/dh_d_constant_db_win.cpp b/clang/test/dpct/dh_d_constant_db_win.cpp index d6fd5cd7dc8b..18be2d3e7f5f 100644 --- a/clang/test/dpct/dh_d_constant_db_win.cpp +++ b/clang/test/dpct/dh_d_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir dh_d_constant_db_win // RUN: cd dh_d_constant_db_win diff --git a/clang/test/dpct/dh_h_constant_db.cpp b/clang/test/dpct/dh_h_constant_db.cpp index edcc938d94eb..9f3a7d3c349f 100644 --- a/clang/test/dpct/dh_h_constant_db.cpp +++ b/clang/test/dpct/dh_h_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir dh_h_constant_db diff --git a/clang/test/dpct/dh_h_constant_db_win.cpp b/clang/test/dpct/dh_h_constant_db_win.cpp index 73555a26011e..7fd49990557d 100644 --- a/clang/test/dpct/dh_h_constant_db_win.cpp +++ b/clang/test/dpct/dh_h_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir dh_h_constant_db_win // RUN: cd dh_h_constant_db_win diff --git a/clang/test/dpct/dhd_constant_db.cpp b/clang/test/dpct/dhd_constant_db.cpp index 958f60e4877b..7827bcd5a7d2 100644 --- a/clang/test/dpct/dhd_constant_db.cpp +++ b/clang/test/dpct/dhd_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir dhd_constant_db diff --git a/clang/test/dpct/dhd_constant_db_win.cpp b/clang/test/dpct/dhd_constant_db_win.cpp index fde79cc7631a..edfd586dd338 100644 --- a/clang/test/dpct/dhd_constant_db_win.cpp +++ b/clang/test/dpct/dhd_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir dhd_constant_db_win // RUN: cd dhd_constant_db_win diff --git a/clang/test/dpct/dhh_constant_db.cpp b/clang/test/dpct/dhh_constant_db.cpp index ba92b04425d5..2a2357f207bb 100644 --- a/clang/test/dpct/dhh_constant_db.cpp +++ b/clang/test/dpct/dhh_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir dhh_constant_db diff --git a/clang/test/dpct/dhh_constant_db_win.cpp b/clang/test/dpct/dhh_constant_db_win.cpp index d3ecefa4ed57..371934103ac4 100644 --- a/clang/test/dpct/dhh_constant_db_win.cpp +++ b/clang/test/dpct/dhh_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir dhh_constant_db_win // RUN: cd dhh_constant_db_win diff --git a/clang/test/dpct/h_dh_constant_db.cpp b/clang/test/dpct/h_dh_constant_db.cpp index a63ef842b314..fba7f47f57d1 100644 --- a/clang/test/dpct/h_dh_constant_db.cpp +++ b/clang/test/dpct/h_dh_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir h_dh_constant_db diff --git a/clang/test/dpct/h_dh_constant_db_win.cpp b/clang/test/dpct/h_dh_constant_db_win.cpp index e1910d7e79c7..b1b1071374fe 100644 --- a/clang/test/dpct/h_dh_constant_db_win.cpp +++ b/clang/test/dpct/h_dh_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir h_dh_constant_db_win // RUN: cd h_dh_constant_db_win diff --git a/clang/test/dpct/h_hd_constant_db.cpp b/clang/test/dpct/h_hd_constant_db.cpp index 3fe84535ca8c..1920636e09ad 100644 --- a/clang/test/dpct/h_hd_constant_db.cpp +++ b/clang/test/dpct/h_hd_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir h_hd_constant_db diff --git a/clang/test/dpct/h_hd_constant_db_win.cpp b/clang/test/dpct/h_hd_constant_db_win.cpp index 86d050bfba3b..8cf5c8441cb9 100644 --- a/clang/test/dpct/h_hd_constant_db_win.cpp +++ b/clang/test/dpct/h_hd_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir h_hd_constant_db_win // RUN: cd h_hd_constant_db_win diff --git a/clang/test/dpct/hd_constant_db.cpp b/clang/test/dpct/hd_constant_db.cpp index 216570e1d35a..4465c6a78e8f 100644 --- a/clang/test/dpct/hd_constant_db.cpp +++ b/clang/test/dpct/hd_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir hd_constant_db diff --git a/clang/test/dpct/hd_constant_db_win.cpp b/clang/test/dpct/hd_constant_db_win.cpp index 662677a8ff27..ad13fcfe7b93 100644 --- a/clang/test/dpct/hd_constant_db_win.cpp +++ b/clang/test/dpct/hd_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir hd_constant_db_win // RUN: cd hd_constant_db_win diff --git a/clang/test/dpct/hd_d_constant_db.cpp b/clang/test/dpct/hd_d_constant_db.cpp index 836c5b5c686e..fb477654847c 100644 --- a/clang/test/dpct/hd_d_constant_db.cpp +++ b/clang/test/dpct/hd_d_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir hd_d_constant_db diff --git a/clang/test/dpct/hd_d_constant_db_win.cpp b/clang/test/dpct/hd_d_constant_db_win.cpp index 79d5e8e1112e..7cb26679d8ae 100644 --- a/clang/test/dpct/hd_d_constant_db_win.cpp +++ b/clang/test/dpct/hd_d_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir hd_d_constant_db_win // RUN: cd hd_d_constant_db_win diff --git a/clang/test/dpct/hd_h_constant_db.cpp b/clang/test/dpct/hd_h_constant_db.cpp index e2de1d29b9e9..cd346b3f8060 100644 --- a/clang/test/dpct/hd_h_constant_db.cpp +++ b/clang/test/dpct/hd_h_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir hd_h_constant_db diff --git a/clang/test/dpct/hd_h_constant_db_win.cpp b/clang/test/dpct/hd_h_constant_db_win.cpp index ad4254988055..6bfa1a4cb233 100644 --- a/clang/test/dpct/hd_h_constant_db_win.cpp +++ b/clang/test/dpct/hd_h_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir hd_h_constant_db_win // RUN: cd hd_h_constant_db_win diff --git a/clang/test/dpct/hdd_constant_db.cpp b/clang/test/dpct/hdd_constant_db.cpp index bd988eeb76b1..077afe283ebd 100644 --- a/clang/test/dpct/hdd_constant_db.cpp +++ b/clang/test/dpct/hdd_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir hdd_constant_db diff --git a/clang/test/dpct/hdd_constant_db_win.cpp b/clang/test/dpct/hdd_constant_db_win.cpp index 7be5b6f97ce5..6d319ae6cac4 100644 --- a/clang/test/dpct/hdd_constant_db_win.cpp +++ b/clang/test/dpct/hdd_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir hdd_constant_db_win // RUN: cd hdd_constant_db_win diff --git a/clang/test/dpct/hdh_constant_db.cpp b/clang/test/dpct/hdh_constant_db.cpp index 3d137531700c..737bdb503f9d 100644 --- a/clang/test/dpct/hdh_constant_db.cpp +++ b/clang/test/dpct/hdh_constant_db.cpp @@ -1,4 +1,3 @@ -// UNSUPPORTED: -linux- // UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir hdh_constant_db diff --git a/clang/test/dpct/hdh_constant_db_win.cpp b/clang/test/dpct/hdh_constant_db_win.cpp index e89ae5fba84e..19a3b7c9496f 100644 --- a/clang/test/dpct/hdh_constant_db_win.cpp +++ b/clang/test/dpct/hdh_constant_db_win.cpp @@ -1,5 +1,4 @@ // UNSUPPORTED: -linux- -// UNSUPPORTED: -windows- // RUN: cd %T // RUN: mkdir hdh_constant_db_win // RUN: cd hdh_constant_db_win