File tree Expand file tree Collapse file tree 3 files changed +31
-1
lines changed Expand file tree Collapse file tree 3 files changed +31
-1
lines changed Original file line number Diff line number Diff line change @@ -686,6 +686,26 @@ void ExprAnalysis::analyzeExpr(const CXXConstructExpr *Ctor) {
686
686
}
687
687
}
688
688
689
+ void ExprAnalysis::analyzeExpr (const CXXDependentScopeMemberExpr *CDSME) {
690
+ if (auto AE = dyn_cast<ArraySubscriptExpr>(CDSME->getBase ())) {
691
+ auto Base = AE->getBase ();
692
+ if (auto BT =
693
+ dyn_cast<DependentSizedArrayType>(Base->getType ().getTypePtr ())) {
694
+ auto ET = BT->getElementType ();
695
+ if (isTypeInAnalysisScope (ET.getTypePtr ()))
696
+ return ;
697
+ std::string BaseType = dpct::DpctGlobalInfo::getUnqualifiedTypeName (ET);
698
+ if (MapNamesLang::SupportedVectorTypes.find (BaseType) !=
699
+ MapNamesLang::SupportedVectorTypes.end ()) {
700
+ std::string MemberName = CDSME->getMemberNameInfo ().getAsString ();
701
+ if (MapNames::replaceName (MapNamesLang::MemberNamesMap, MemberName)) {
702
+ addReplacement (CDSME->getMemberLoc (), CDSME->getEndLoc (), MemberName);
703
+ }
704
+ }
705
+ }
706
+ }
707
+ }
708
+
689
709
void ExprAnalysis::analyzeExpr (const MemberExpr *ME) {
690
710
const auto BaseType = getBaseTypeRemoveTemplateArguments (ME);
691
711
Original file line number Diff line number Diff line change @@ -631,7 +631,7 @@ class ExprAnalysis {
631
631
inline void analyzeExpr (const ExprWithCleanups *EWC) {
632
632
dispatch (EWC->getSubExpr ());
633
633
}
634
-
634
+ void analyzeExpr ( const CXXDependentScopeMemberExpr *CDSME);
635
635
void analyzeExpr (const CXXConstructExpr *Ctor);
636
636
void analyzeExpr (const CXXTemporaryObjectExpr *Temp);
637
637
void analyzeExpr (const CXXUnresolvedConstructExpr *Ctor);
Original file line number Diff line number Diff line change @@ -14,6 +14,16 @@ void func_char1(char1 a) {
14
14
__global__ void kernel_char1 (char1 *a, char1 *b) {
15
15
}
16
16
17
+ template <int np> __global__ void kernel_foo () {
18
+ constexpr int nmeta = np;
19
+ float2 meta[nmeta];
20
+ float KQ_cmn;
21
+ for (int imeta = 1 ; imeta < nmeta; ++imeta) {
22
+ // CHECK: KQ_cmn = sycl::fmax(KQ_cmn, (float)(meta[imeta].x()));
23
+ KQ_cmn = fmaxf (KQ_cmn, meta[imeta].x );
24
+ }
25
+ }
26
+
17
27
int main_char1 () {
18
28
// range default constructor does the right thing.
19
29
// CHECK: int8_t char1_a;
You can’t perform that action at this time.
0 commit comments