[PATCH] D25494: Move x86-64 builtins from SemaChecking.cpp to BuiltinsX86_64.def
agutowski updated this revision to Diff 74398. agutowski added a comment. add -fno-spell-checking to tests https://reviews.llvm.org/D25494 Files: include/clang/Basic/BuiltinsX86.def include/clang/Basic/BuiltinsX86_64.def lib/Basic/Targets.cpp lib/Sema/SemaChecking.cpp test/CodeGen/builtins-x86-disabled.c test/Sema/builtins-x86_64.c Index: lib/Sema/SemaChecking.cpp === --- lib/Sema/SemaChecking.cpp +++ lib/Sema/SemaChecking.cpp @@ -1590,58 +1590,6 @@ return false; } -static bool isX86_64Builtin(unsigned BuiltinID) { - // These builtins only work on x86-64 targets. - switch (BuiltinID) { - case X86::BI__builtin_ia32_addcarryx_u64: - case X86::BI__builtin_ia32_addcarry_u64: - case X86::BI__builtin_ia32_subborrow_u64: - case X86::BI__builtin_ia32_readeflags_u64: - case X86::BI__builtin_ia32_writeeflags_u64: - case X86::BI__builtin_ia32_bextr_u64: - case X86::BI__builtin_ia32_bextri_u64: - case X86::BI__builtin_ia32_bzhi_di: - case X86::BI__builtin_ia32_pdep_di: - case X86::BI__builtin_ia32_pext_di: - case X86::BI__builtin_ia32_crc32di: - case X86::BI__builtin_ia32_fxsave64: - case X86::BI__builtin_ia32_fxrstor64: - case X86::BI__builtin_ia32_xsave64: - case X86::BI__builtin_ia32_xrstor64: - case X86::BI__builtin_ia32_xsaveopt64: - case X86::BI__builtin_ia32_xrstors64: - case X86::BI__builtin_ia32_xsavec64: - case X86::BI__builtin_ia32_xsaves64: - case X86::BI__builtin_ia32_rdfsbase64: - case X86::BI__builtin_ia32_rdgsbase64: - case X86::BI__builtin_ia32_wrfsbase64: - case X86::BI__builtin_ia32_wrgsbase64: - case X86::BI__builtin_ia32_pbroadcastq512_gpr_mask: - case X86::BI__builtin_ia32_pbroadcastq256_gpr_mask: - case X86::BI__builtin_ia32_pbroadcastq128_gpr_mask: - case X86::BI__builtin_ia32_vcvtsd2si64: - case X86::BI__builtin_ia32_vcvtsd2usi64: - case X86::BI__builtin_ia32_vcvtss2si64: - case X86::BI__builtin_ia32_vcvtss2usi64: - case X86::BI__builtin_ia32_vcvttsd2si64: - case X86::BI__builtin_ia32_vcvttsd2usi64: - case X86::BI__builtin_ia32_vcvttss2si64: - case X86::BI__builtin_ia32_vcvttss2usi64: - case X86::BI__builtin_ia32_cvtss2si64: - case X86::BI__builtin_ia32_cvttss2si64: - case X86::BI__builtin_ia32_cvtsd2si64: - case X86::BI__builtin_ia32_cvttsd2si64: - case X86::BI__builtin_ia32_cvtsi2sd64: - case X86::BI__builtin_ia32_cvtsi2ss64: - case X86::BI__builtin_ia32_cvtusi2sd64: - case X86::BI__builtin_ia32_cvtusi2ss64: - case X86::BI__builtin_ia32_rdseed64_step: -return true; - } - - return false; -} - // Check if the rounding mode is legal. bool Sema::CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall) { // Indicates if this instruction has rounding control or just SAE. @@ -1838,12 +1786,6 @@ if (BuiltinID == X86::BI__builtin_ms_va_start) return SemaBuiltinMSVAStart(TheCall); - // Check for 64-bit only builtins on a 32-bit target. - const llvm::Triple = Context.getTargetInfo().getTriple(); - if (TT.getArch() != llvm::Triple::x86_64 && isX86_64Builtin(BuiltinID)) -return Diag(TheCall->getCallee()->getLocStart(), -diag::err_x86_builtin_32_bit_tgt); - // If the intrinsic has rounding or SAE make sure its valid. if (CheckX86BuiltinRoundingOrSAE(BuiltinID, TheCall)) return true; Index: lib/Basic/Targets.cpp === --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -2362,6 +2362,8 @@ #define BUILTIN(ID, TYPE, ATTRS) \ { #ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, nullptr }, +#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \ + { #ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, FEATURE }, #define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANGS, FEATURE) \ { #ID, TYPE, ATTRS, HEADER, LANGS, FEATURE }, #include "clang/Basic/BuiltinsX86_64.def" Index: include/clang/Basic/BuiltinsX86_64.def === --- include/clang/Basic/BuiltinsX86_64.def +++ include/clang/Basic/BuiltinsX86_64.def @@ -14,6 +14,10 @@ // The format of this database matches clang/Basic/Builtins.def. +#if defined(BUILTIN) && !defined(TARGET_BUILTIN) +# define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS) +#endif + #if defined(BUILTIN) && !defined(TARGET_HEADER_BUILTIN) # define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) BUILTIN(ID, TYPE, ATTRS) #endif @@ -25,6 +29,50 @@ TARGET_HEADER_BUILTIN(__faststorefence, "v", "nh", "intrin.h", ALL_MS_LANGUAGES, "") +TARGET_BUILTIN(__builtin_ia32_readeflags_u64, "ULLi", "n", "") +TARGET_BUILTIN(__builtin_ia32_writeeflags_u64, "vULLi", "n", "") +TARGET_BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cvttss2si64, "LLiV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cvtsd2si64, "LLiV2d", "", "sse2")
[PATCH] D25494: Move x86-64 builtins from SemaChecking.cpp to BuiltinsX86_64.def
rnk accepted this revision. rnk added a comment. This revision is now accepted and ready to land. lgtm Comment at: test/Sema/builtins-x86_64.c:17 + v8ll vec8longlongs; + (void)__builtin_ia32_readeflags_u64(); // expected-error{{use of unknown builtin}} expected-note 0+ {{}} + (void)__builtin_ia32_writeeflags_u64(4); // expected-error{{use of unknown builtin}} expected-note 0+ {{}} agutowski wrote: > Is there some way to ignore all notes? I needed to handle typo-correction > notes (like: `did you mean '__builtin_ia32_readeflags_u32'`). If it's all typo correction, I recommend testing with -fno-spell-checking. https://reviews.llvm.org/D25494 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D25494: Move x86-64 builtins from SemaChecking.cpp to BuiltinsX86_64.def
agutowski added inline comments. Comment at: test/Sema/builtins-x86_64.c:17 + v8ll vec8longlongs; + (void)__builtin_ia32_readeflags_u64(); // expected-error{{use of unknown builtin}} expected-note 0+ {{}} + (void)__builtin_ia32_writeeflags_u64(4); // expected-error{{use of unknown builtin}} expected-note 0+ {{}} Is there some way to ignore all notes? I needed to handle typo-correction notes (like: `did you mean '__builtin_ia32_readeflags_u32'`). https://reviews.llvm.org/D25494 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D25494: Move x86-64 builtins from SemaChecking.cpp to BuiltinsX86_64.def
agutowski created this revision. agutowski added reviewers: rnk, hans, thakis. agutowski added a subscriber: cfe-commits. Follow-up to https://reviews.llvm.org/D24598 (separating builtins for x84-64 and i386). https://reviews.llvm.org/D25494 Files: include/clang/Basic/BuiltinsX86.def include/clang/Basic/BuiltinsX86_64.def lib/Basic/Targets.cpp lib/Sema/SemaChecking.cpp test/CodeGen/builtins-x86-disabled.c test/Sema/builtins-x86_64.c Index: lib/Sema/SemaChecking.cpp === --- lib/Sema/SemaChecking.cpp +++ lib/Sema/SemaChecking.cpp @@ -1590,58 +1590,6 @@ return false; } -static bool isX86_64Builtin(unsigned BuiltinID) { - // These builtins only work on x86-64 targets. - switch (BuiltinID) { - case X86::BI__builtin_ia32_addcarryx_u64: - case X86::BI__builtin_ia32_addcarry_u64: - case X86::BI__builtin_ia32_subborrow_u64: - case X86::BI__builtin_ia32_readeflags_u64: - case X86::BI__builtin_ia32_writeeflags_u64: - case X86::BI__builtin_ia32_bextr_u64: - case X86::BI__builtin_ia32_bextri_u64: - case X86::BI__builtin_ia32_bzhi_di: - case X86::BI__builtin_ia32_pdep_di: - case X86::BI__builtin_ia32_pext_di: - case X86::BI__builtin_ia32_crc32di: - case X86::BI__builtin_ia32_fxsave64: - case X86::BI__builtin_ia32_fxrstor64: - case X86::BI__builtin_ia32_xsave64: - case X86::BI__builtin_ia32_xrstor64: - case X86::BI__builtin_ia32_xsaveopt64: - case X86::BI__builtin_ia32_xrstors64: - case X86::BI__builtin_ia32_xsavec64: - case X86::BI__builtin_ia32_xsaves64: - case X86::BI__builtin_ia32_rdfsbase64: - case X86::BI__builtin_ia32_rdgsbase64: - case X86::BI__builtin_ia32_wrfsbase64: - case X86::BI__builtin_ia32_wrgsbase64: - case X86::BI__builtin_ia32_pbroadcastq512_gpr_mask: - case X86::BI__builtin_ia32_pbroadcastq256_gpr_mask: - case X86::BI__builtin_ia32_pbroadcastq128_gpr_mask: - case X86::BI__builtin_ia32_vcvtsd2si64: - case X86::BI__builtin_ia32_vcvtsd2usi64: - case X86::BI__builtin_ia32_vcvtss2si64: - case X86::BI__builtin_ia32_vcvtss2usi64: - case X86::BI__builtin_ia32_vcvttsd2si64: - case X86::BI__builtin_ia32_vcvttsd2usi64: - case X86::BI__builtin_ia32_vcvttss2si64: - case X86::BI__builtin_ia32_vcvttss2usi64: - case X86::BI__builtin_ia32_cvtss2si64: - case X86::BI__builtin_ia32_cvttss2si64: - case X86::BI__builtin_ia32_cvtsd2si64: - case X86::BI__builtin_ia32_cvttsd2si64: - case X86::BI__builtin_ia32_cvtsi2sd64: - case X86::BI__builtin_ia32_cvtsi2ss64: - case X86::BI__builtin_ia32_cvtusi2sd64: - case X86::BI__builtin_ia32_cvtusi2ss64: - case X86::BI__builtin_ia32_rdseed64_step: -return true; - } - - return false; -} - // Check if the rounding mode is legal. bool Sema::CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall) { // Indicates if this instruction has rounding control or just SAE. @@ -1838,12 +1786,6 @@ if (BuiltinID == X86::BI__builtin_ms_va_start) return SemaBuiltinMSVAStart(TheCall); - // Check for 64-bit only builtins on a 32-bit target. - const llvm::Triple = Context.getTargetInfo().getTriple(); - if (TT.getArch() != llvm::Triple::x86_64 && isX86_64Builtin(BuiltinID)) -return Diag(TheCall->getCallee()->getLocStart(), -diag::err_x86_builtin_32_bit_tgt); - // If the intrinsic has rounding or SAE make sure its valid. if (CheckX86BuiltinRoundingOrSAE(BuiltinID, TheCall)) return true; Index: lib/Basic/Targets.cpp === --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -2362,6 +2362,8 @@ #define BUILTIN(ID, TYPE, ATTRS) \ { #ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, nullptr }, +#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \ + { #ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, FEATURE }, #define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANGS, FEATURE) \ { #ID, TYPE, ATTRS, HEADER, LANGS, FEATURE }, #include "clang/Basic/BuiltinsX86_64.def" Index: include/clang/Basic/BuiltinsX86_64.def === --- include/clang/Basic/BuiltinsX86_64.def +++ include/clang/Basic/BuiltinsX86_64.def @@ -14,6 +14,10 @@ // The format of this database matches clang/Basic/Builtins.def. +#if defined(BUILTIN) && !defined(TARGET_BUILTIN) +# define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS) +#endif + #if defined(BUILTIN) && !defined(TARGET_HEADER_BUILTIN) # define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) BUILTIN(ID, TYPE, ATTRS) #endif @@ -25,6 +29,50 @@ TARGET_HEADER_BUILTIN(__faststorefence, "v", "nh", "intrin.h", ALL_MS_LANGUAGES, "") +TARGET_BUILTIN(__builtin_ia32_readeflags_u64, "ULLi", "n", "") +TARGET_BUILTIN(__builtin_ia32_writeeflags_u64, "vULLi", "n", "") +TARGET_BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cvttss2si64, "LLiV4f",