I guess till the morning CST :) Appeased in r232638. I suggest the testcase might be split to 32-bit and 64-bit.
2015-03-19 0:06 GMT+09:00 Anastasia Stulova <[email protected]>: > Investigating the fix now. > > What's is the acceptable latency for repair? > > -----Original Message----- > From: NAKAMURA Takumi [mailto:[email protected]] > Sent: 18 March 2015 14:54 > To: Anastasia Stulova > Cc: cfe-commits > Subject: Re: r232631 - OpenCL: CL2.0 atomic types > > The test fails for targeting 32-bit i686-* and hexagon-* > > 2015-03-18 21:55 GMT+09:00 Anastasia Stulova <[email protected]>: >> Author: stulova >> Date: Wed Mar 18 07:55:29 2015 >> New Revision: 232631 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=232631&view=rev >> Log: >> OpenCL: CL2.0 atomic types >> >> OpenCL C Spec v2.0 Section 6.13.11 >> >> - Made c11 _Atomic being not accepted for OpenCL >> >> - Implemented CL2.0 atomics by aliasing them to the corresponding c11 >> atomic types using implicit typedef >> >> - Added diagnostics for atomics Khronos extension enabling >> >> >> Added: >> cfe/trunk/test/Parser/opencl-atomics-cl20.cl >> Modified: >> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> cfe/trunk/include/clang/Basic/TokenKinds.def >> cfe/trunk/lib/Basic/IdentifierTable.cpp >> cfe/trunk/lib/Sema/Sema.cpp >> cfe/trunk/lib/Sema/SemaType.cpp >> >> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Diag >> nosticSemaKinds.td?rev=232631&r1=232630&r2=232631&view=diff >> ====================================================================== >> ======== >> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) >> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Mar 18 >> +++ 07:55:29 2015 >> @@ -7124,8 +7124,8 @@ def ext_c99_array_usage : Extension< def >> err_c99_array_usage_cxx : Error< >> "%select{qualifier in |static |}0array size %select{||'[*] '}0is a C99 " >> "feature, not permitted in C++">; >> -def err_double_requires_fp64 : Error< >> - "use of type 'double' requires cl_khr_fp64 extension to be >> enabled">; >> + def err_type_requires_extension : Error< "use of type %0 requires >> + %1 extension to be enabled">; >> def err_int128_unsupported : Error< >> "__int128 is not supported on this target">; def >> err_nsconsumed_attribute_mismatch : Error< >> >> Modified: cfe/trunk/include/clang/Basic/TokenKinds.def >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Toke >> nKinds.def?rev=232631&r1=232630&r2=232631&view=diff >> ====================================================================== >> ======== >> --- cfe/trunk/include/clang/Basic/TokenKinds.def (original) >> +++ cfe/trunk/include/clang/Basic/TokenKinds.def Wed Mar 18 07:55:29 >> +++ 2015 >> @@ -228,6 +228,7 @@ PUNCTUATOR(greatergreatergreater, ">>>") >> // KEYNOMS18 - This is a keyword that must never be enabled under >> // MSVC <= v18. >> // KEYOPENCL - This is a keyword in OpenCL >> +// KEYNOOPENCL - This is a keyword that is not supported in OpenCL >> // KEYALTIVEC - This is a keyword in AltiVec >> // KEYBORLAND - This is a keyword if Borland extensions are enabled >> // BOOLSUPPORT - This is a keyword if 'bool' is a built-in type >> @@ -270,7 +271,7 @@ KEYWORD(volatile , KE >> KEYWORD(while , KEYALL) >> KEYWORD(_Alignas , KEYALL) >> KEYWORD(_Alignof , KEYALL) >> -KEYWORD(_Atomic , KEYALL|KEYNOMS18) >> +KEYWORD(_Atomic , KEYALL|KEYNOMS18|KEYNOOPENCL) >> KEYWORD(_Bool , KEYNOCXX) >> KEYWORD(_Complex , KEYALL) >> KEYWORD(_Generic , KEYALL) >> >> Modified: cfe/trunk/lib/Basic/IdentifierTable.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/IdentifierTabl >> e.cpp?rev=232631&r1=232630&r2=232631&view=diff >> ====================================================================== >> ======== >> --- cfe/trunk/lib/Basic/IdentifierTable.cpp (original) >> +++ cfe/trunk/lib/Basic/IdentifierTable.cpp Wed Mar 18 07:55:29 2015 >> @@ -106,9 +106,11 @@ namespace { >> KEYC11 = 0x400, >> KEYARC = 0x800, >> KEYNOMS18 = 0x01000, >> - WCHARSUPPORT = 0x02000, >> - HALFSUPPORT = 0x04000, >> - KEYALL = (0xffff & ~KEYNOMS18) // Because KEYNOMS18 is used to exclude. >> + KEYNOOPENCL = 0x02000, >> + WCHARSUPPORT = 0x04000, >> + HALFSUPPORT = 0x08000, >> + KEYALL = (0xffff & ~KEYNOMS18 & >> + ~KEYNOOPENCL) // KEYNOMS18 and KEYNOOPENCL are used to >> exclude. >> }; >> >> /// \brief How a keyword is treated in the selected standard. >> @@ -156,7 +158,12 @@ static void AddKeyword(StringRef Keyword >> // Don't add this keyword under MSVCCompat. >> if (LangOpts.MSVCCompat && (Flags & KEYNOMS18) && >> !LangOpts.isCompatibleWithMSVC(19)) >> - return; >> + return; >> + >> + // Don't add this keyword under OpenCL. >> + if (LangOpts.OpenCL && (Flags & KEYNOOPENCL)) >> + return; >> + >> // Don't add this keyword if disabled in this language. >> if (AddResult == KS_Disabled) return; >> >> >> Modified: cfe/trunk/lib/Sema/Sema.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.cpp?rev=23 >> 2631&r1=232630&r2=232631&view=diff >> ====================================================================== >> ======== >> --- cfe/trunk/lib/Sema/Sema.cpp (original) >> +++ cfe/trunk/lib/Sema/Sema.cpp Wed Mar 18 07:55:29 2015 >> @@ -212,6 +212,29 @@ void Sema::Initialize() { >> addImplicitTypedef("image3d_t", Context.OCLImage3dTy); >> addImplicitTypedef("sampler_t", Context.OCLSamplerTy); >> addImplicitTypedef("event_t", Context.OCLEventTy); >> + if (getLangOpts().OpenCLVersion >= 200) { >> + addImplicitTypedef("atomic_int", >> Context.getAtomicType(Context.IntTy)); >> + addImplicitTypedef("atomic_uint", >> + Context.getAtomicType(Context.UnsignedIntTy)); >> + addImplicitTypedef("atomic_long", >> Context.getAtomicType(Context.LongTy)); >> + addImplicitTypedef("atomic_ulong", >> + Context.getAtomicType(Context.UnsignedLongTy)); >> + addImplicitTypedef("atomic_float", >> + Context.getAtomicType(Context.FloatTy)); >> + addImplicitTypedef("atomic_double", >> + Context.getAtomicType(Context.DoubleTy)); >> + // OpenCLC v2.0, s6.13.11.6 requires that atomic_flag is implemented >> as >> + // 32-bit integer and OpenCLC v2.0, s6.1.1 int is always 32-bit wide. >> + addImplicitTypedef("atomic_flag", >> Context.getAtomicType(Context.IntTy)); >> + addImplicitTypedef("atomic_intptr_t", >> + Context.getAtomicType(Context.getIntPtrType())); >> + addImplicitTypedef("atomic_uintptr_t", >> + Context.getAtomicType(Context.getUIntPtrType())); >> + addImplicitTypedef("atomic_size_t", >> + Context.getAtomicType(Context.getSizeType())); >> + addImplicitTypedef("atomic_ptrdiff_t", >> + >> Context.getAtomicType(Context.getPointerDiffType())); >> + } >> } >> >> DeclarationName BuiltinVaList = >> &Context.Idents.get("__builtin_va_list"); >> >> Modified: cfe/trunk/lib/Sema/SemaType.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaType.cpp?re >> v=232631&r1=232630&r2=232631&view=diff >> ====================================================================== >> ======== >> --- cfe/trunk/lib/Sema/SemaType.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaType.cpp Wed Mar 18 07:55:29 2015 >> @@ -871,7 +871,8 @@ static QualType ConvertDeclSpecToType(Ty >> if (S.getLangOpts().OpenCL && >> !((S.getLangOpts().OpenCLVersion >= 120) || >> S.getOpenCLOptions().cl_khr_fp64)) { >> - S.Diag(DS.getTypeSpecTypeLoc(), diag::err_double_requires_fp64); >> + S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_requires_extension) >> + << Result << "cl_khr_fp64"; >> declarator.setInvalidType(true); >> } >> break; >> @@ -947,6 +948,30 @@ static QualType ConvertDeclSpecToType(Ty >> << DS.getSourceRange(); >> declarator.setInvalidType(true); >> } >> + } else if (S.getLangOpts().OpenCL) { >> + if (const AtomicType *AT = Result->getAs<AtomicType>()) { >> + const BuiltinType *BT = AT->getValueType()->getAs<BuiltinType>(); >> + bool NoExtTypes = BT && (BT->getKind() == BuiltinType::Int || >> + BT->getKind() == BuiltinType::UInt || >> + BT->getKind() == BuiltinType::Float); >> + if (!S.getOpenCLOptions().cl_khr_int64_base_atomics && !NoExtTypes) >> { >> + S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_requires_extension) >> + << Result << "cl_khr_int64_base_atomics"; >> + declarator.setInvalidType(true); >> + } >> + if (!S.getOpenCLOptions().cl_khr_int64_extended_atomics && >> + !NoExtTypes) { >> + S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_requires_extension) >> + << Result << "cl_khr_int64_extended_atomics"; >> + declarator.setInvalidType(true); >> + } >> + if (!S.getOpenCLOptions().cl_khr_fp64 && BT && >> + BT->getKind() == BuiltinType::Double) { >> + S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_requires_extension) >> + << Result << "cl_khr_fp64"; >> + declarator.setInvalidType(true); >> + } >> + } >> } >> >> // TypeQuals handled by caller. >> >> Added: cfe/trunk/test/Parser/opencl-atomics-cl20.cl >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/opencl-atomi >> cs-cl20.cl?rev=232631&view=auto >> ====================================================================== >> ======== >> --- cfe/trunk/test/Parser/opencl-atomics-cl20.cl (added) >> +++ cfe/trunk/test/Parser/opencl-atomics-cl20.cl Wed Mar 18 07:55:29 >> +++ 2015 >> @@ -0,0 +1,56 @@ >> +// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only // RUN: >> +%clang_cc1 %s -verify -fsyntax-only -cl-std=CL2.0 -DCL20 // RUN: >> +%clang_cc1 %s -verify -fsyntax-only -cl-std=CL2.0 -DCL20 -DEXT >> + >> +#ifdef EXT >> +#pragma OPENCL EXTENSION cl_khr_int64_base_atomics:enable #pragma >> +OPENCL EXTENSION cl_khr_int64_extended_atomics:enable >> +#pragma OPENCL EXTENSION cl_khr_fp64:enable #endif >> + >> +void atomic_types_test() { >> +// OpenCL v2.0 s6.13.11.6 defines supported atomic types. >> + atomic_int i; >> + atomic_uint ui; >> + atomic_long l; >> + atomic_ulong ul; >> + atomic_float f; >> + atomic_double d; >> + atomic_flag fl; >> + atomic_intptr_t ip; >> + atomic_uintptr_t uip; >> + atomic_size_t s; >> + atomic_ptrdiff_t pd; >> +// OpenCL v2.0 s6.13.11.8, _Atomic type specifier and _Atomic type >> +qualifier // are not supported by OpenCL. >> + _Atomic int i; // expected-error {{use of undeclared identifier >> +'_Atomic'}} } #ifndef CL20 // expected-error@-16 {{use of undeclared >> +identifier 'atomic_int'}} // expected-error@-16 {{use of undeclared >> +identifier 'atomic_uint'}} // expected-error@-16 {{use of undeclared >> +identifier 'atomic_long'}} // expected-error@-16 {{use of undeclared >> +identifier 'atomic_ulong'}} // expected-error@-16 {{use of undeclared >> +identifier 'atomic_float'}} // expected-error@-16 {{use of undeclared >> +identifier 'atomic_double'}} // expected-error@-16 {{use of >> +undeclared identifier 'atomic_flag'}} // expected-error@-16 {{use of >> +undeclared identifier 'atomic_intptr_t'}} // expected-error@-16 {{use >> +of undeclared identifier 'atomic_uintptr_t'}} // expected-error@-16 >> +{{use of undeclared identifier 'atomic_size_t'}} // >> +expected-error@-16 {{use of undeclared identifier >> +'atomic_ptrdiff_t'}} #elif !EXT // expected-error@-26 {{use of type >> +'atomic_long' (aka '_Atomic(long)') requires >> +cl_khr_int64_base_atomics extension to be enabled}} // >> +expected-error@-27 {{use of type 'atomic_long' (aka '_Atomic(long)') >> +requires cl_khr_int64_extended_atomics extension to be enabled}} // >> +expected-error@-27 {{use of type 'atomic_ulong' (aka >> +'_Atomic(unsigned long)') requires cl_khr_int64_base_atomics >> +extension to be enabled}} // expected-error@-28 {{use of type >> +'atomic_ulong' (aka '_Atomic(unsigned long)') requires >> +cl_khr_int64_extended_atomics extension to be enabled}} // >> +expected-error@-27 {{use of type 'atomic_double' (aka >> +'_Atomic(double)') requires cl_khr_int64_base_atomics extension to be >> +enabled}} // expected-error@-28 {{use of type 'atomic_double' (aka >> +'_Atomic(double)') requires cl_khr_int64_extended_atomics extension >> +to be enabled}} // expected-error@-29 {{use of type 'atomic_double' >> +(aka '_Atomic(double)') requires cl_khr_fp64 extension to be >> +enabled}} // expected-error-re@-28 {{use of type 'atomic_intptr_t' >> +(aka '_Atomic({{.+}})') requires cl_khr_int64_base_atomics extension >> +to be enabled}} // expected-error-re@-29 {{use of type >> +'atomic_intptr_t' (aka '_Atomic({{.+}})') requires >> +cl_khr_int64_extended_atomics extension to be enabled}} // >> +expected-error-re@-29 {{use of type 'atomic_uintptr_t' (aka >> +'_Atomic({{.+}})') requires cl_khr_int64_base_atomics extension to be >> +enabled}} // expected-error-re@-30 {{use of type 'atomic_uintptr_t' >> +(aka '_Atomic({{.+}})') requires cl_khr_int64_extended_atomics >> +extension to be enabled}} // expected-error-re@-30 {{use of type >> +'atomic_size_t' (aka '_Atomic({{.+}})') requires >> +cl_khr_int64_base_atomics extension to be enabled}} // >> +expected-error-re@-31 {{use of type 'atomic_size_t' (aka >> +'_Atomic({{.+}})') requires cl_khr_int64_extended_atomics extension >> +to be enabled}} // expected-error-re@-31 {{use of type >> +'atomic_ptrdiff_t' (aka '_Atomic({{.+}})') requires >> +cl_khr_int64_base_atomics extension to be enabled}} // >> +expected-error-re@-32 {{use of type 'atomic_ptrdiff_t' (aka >> +'_Atomic({{.+}})') requires cl_khr_int64_extended_atomics extension >> +to be enabled}} #endif >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > > > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
