diff options
author | Kaveh R. Ghazi <ghazi@caip.rutgers.edu> | 2004-03-25 17:55:13 +0000 |
---|---|---|
committer | Kaveh Ghazi <ghazi@gcc.gnu.org> | 2004-03-25 17:55:13 +0000 |
commit | 740e5b6f17ebc8b0bd2dbf68051855a2a849177a (patch) | |
tree | 3db4f1c155cf3a143f90e5dc2df9c840cbedb918 /gcc | |
parent | e19f6bded7ebdab435f14256f33376d36ee94b1c (diff) | |
download | gcc-740e5b6f17ebc8b0bd2dbf68051855a2a849177a.zip gcc-740e5b6f17ebc8b0bd2dbf68051855a2a849177a.tar.gz gcc-740e5b6f17ebc8b0bd2dbf68051855a2a849177a.tar.bz2 |
builtins.def: Add ctype builtins.
* builtins.def: Add ctype builtins.
* doc/extend.texi: Likewise.
testsuite:
* gcc.dg/torture/builtin-ctype-1.c: New test.
From-SVN: r79960
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/builtins.def | 18 | ||||
-rw-r--r-- | gcc/doc/extend.texi | 113 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/builtin-ctype-1.c | 44 |
5 files changed, 137 insertions, 47 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d314638..071d036 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2004-03-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + * builtins.def: Add ctype builtins. + * doc/extend.texi: Likewise. + +2004-03-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + * builtins.c (fold_builtin): Add new builtin optimizations for sqrt and/or cbrt. * fold-const.c (fold): Likewise. diff --git a/gcc/builtins.def b/gcc/builtins.def index 6148c41..24118dd 100644 --- a/gcc/builtins.def +++ b/gcc/builtins.def @@ -491,6 +491,24 @@ DEF_C99_BUILTIN (BUILT_IN_VSNPRINTF, "vsnprintf", BT_FN_INT_STRING_SIZE_C DEF_LIB_BUILTIN (BUILT_IN_VSPRINTF, "vsprintf", BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0) DEF_C99_BUILTIN (BUILT_IN_VSSCANF, "vsscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_2_0) +/* Category: ctype builtins. */ +DEF_LIB_BUILTIN (BUILT_IN_ISALNUM, "isalnum", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_ISALPHA, "isalpha", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_EXT_LIB_BUILTIN (BUILT_IN_ISASCII, "isascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST) +DEF_C99_BUILTIN (BUILT_IN_ISBLANK, "isblank", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_ISCNTRL, "iscntrl", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_ISDIGIT, "isdigit", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_ISGRAPH, "isgraph", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_ISLOWER, "islower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_ISPRINT, "isprint", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_ISPUNCT, "ispunct", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_ISSPACE, "isspace", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_ISUPPER, "isupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_ISXDIGIT, "isxdigit", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_EXT_LIB_BUILTIN (BUILT_IN_TOASCII, "toascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_TOLOWER, "tolower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) +DEF_LIB_BUILTIN (BUILT_IN_TOUPPER, "toupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LIST) + /* Category: miscellaneous builtins. */ DEF_LIB_BUILTIN (BUILT_IN_ABORT, "abort", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LIST) DEF_LIB_BUILTIN (BUILT_IN_ABS, "abs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LIST) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 37bbc5c..9eb3b7c 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -4886,6 +4886,19 @@ v4si f (v4si a, v4si b, v4si c) @findex ilogbl @findex imaxabs @findex index +@findex isalnum +@findex isalpha +@findex isascii +@findex isblank +@findex iscntrl +@findex isdigit +@findex isgraph +@findex islower +@findex isprint +@findex ispunct +@findex isspace +@findex isupper +@findex isxdigit @findex j0 @findex j0f @findex j0l @@ -5026,6 +5039,9 @@ v4si f (v4si a, v4si b, v4si c) @findex tgamma @findex tgammaf @findex tgammal +@findex toascii +@findex tolower +@findex toupper @findex trunc @findex truncf @findex truncl @@ -5072,15 +5088,16 @@ Outside strict ISO C mode (@option{-ansi}, @option{-std=c89} or @code{drem}, @code{exp10f}, @code{exp10l}, @code{exp10}, @code{ffsll}, @code{ffsl}, @code{ffs}, @code{fprintf_unlocked}, @code{fputs_unlocked}, @code{gammaf}, @code{gammal}, @code{gamma}, @code{gettext}, -@code{index}, @code{j0f}, @code{j0l}, @code{j0}, @code{j1f}, @code{j1l}, -@code{j1}, @code{jnf}, @code{jnl}, @code{jn}, @code{mempcpy}, -@code{pow10f}, @code{pow10l}, @code{pow10}, @code{printf_unlocked}, -@code{rindex}, @code{scalbf}, @code{scalbl}, @code{scalb}, -@code{signbit}, @code{signbitf}, @code{signbitl}, +@code{index}, @code{isascii}, @code{j0f}, @code{j0l}, @code{j0}, +@code{j1f}, @code{j1l}, @code{j1}, @code{jnf}, @code{jnl}, @code{jn}, +@code{mempcpy}, @code{pow10f}, @code{pow10l}, @code{pow10}, +@code{printf_unlocked}, @code{rindex}, @code{scalbf}, @code{scalbl}, +@code{scalb}, @code{signbit}, @code{signbitf}, @code{signbitl}, @code{significandf}, @code{significandl}, @code{significand}, @code{sincosf}, @code{sincosl}, @code{sincos}, @code{stpcpy}, -@code{strdup}, @code{strfmon}, @code{y0f}, @code{y0l}, @code{y0}, -@code{y1f}, @code{y1l}, @code{y1}, @code{ynf}, @code{ynl} and @code{yn} +@code{strdup}, @code{strfmon}, @code{toascii}, @code{y0f}, @code{y0l}, +@code{y0}, @code{y1f}, @code{y1l}, @code{y1}, @code{ynf}, @code{ynl} and +@code{yn} may be handled as built-in functions. All these functions have corresponding versions prefixed with @code{__builtin_}, which may be used even in strict C89 @@ -5097,36 +5114,35 @@ The ISO C99 functions @code{catanl}, @code{catan}, @code{cbrtf}, @code{cbrtl}, @code{cbrt}, @code{ccosf}, @code{ccoshf}, @code{ccoshl}, @code{ccosh}, @code{ccosl}, @code{ccos}, @code{cexpf}, @code{cexpl}, @code{cexp}, @code{cimagf}, -@code{cimagl}, @code{cimag}, -@code{conjf}, @code{conjl}, @code{conj}, @code{copysignf}, -@code{copysignl}, @code{copysign}, @code{cpowf}, @code{cpowl}, -@code{cpow}, @code{cprojf}, @code{cprojl}, @code{cproj}, @code{crealf}, -@code{creall}, @code{creal}, @code{csinf}, @code{csinhf}, @code{csinhl}, -@code{csinh}, @code{csinl}, @code{csin}, @code{csqrtf}, @code{csqrtl}, -@code{csqrt}, @code{ctanf}, @code{ctanhf}, @code{ctanhl}, @code{ctanh}, -@code{ctanl}, @code{ctan}, @code{erfcf}, @code{erfcl}, @code{erfc}, -@code{erff}, @code{erfl}, @code{erf}, @code{exp2f}, @code{exp2l}, -@code{exp2}, @code{expm1f}, @code{expm1l}, @code{expm1}, @code{fdimf}, -@code{fdiml}, @code{fdim}, @code{fmaf}, @code{fmal}, @code{fmaxf}, -@code{fmaxl}, @code{fmax}, @code{fma}, @code{fminf}, @code{fminl}, -@code{fmin}, @code{hypotf}, @code{hypotl}, @code{hypot}, @code{ilogbf}, -@code{ilogbl}, @code{ilogb}, @code{imaxabs}, @code{lgammaf}, -@code{lgammal}, @code{lgamma}, @code{llabs}, @code{llrintf}, -@code{llrintl}, @code{llrint}, @code{llroundf}, @code{llroundl}, -@code{llround}, @code{log1pf}, @code{log1pl}, @code{log1p}, -@code{log2f}, @code{log2l}, @code{log2}, @code{logbf}, @code{logbl}, -@code{logb}, @code{lrintf}, @code{lrintl}, @code{lrint}, @code{lroundf}, -@code{lroundl}, @code{lround}, @code{nearbyintf}, @code{nearbyintl}, -@code{nearbyint}, @code{nextafterf}, @code{nextafterl}, -@code{nextafter}, @code{nexttowardf}, @code{nexttowardl}, -@code{nexttoward}, @code{remainderf}, @code{remainderl}, -@code{remainder}, @code{remquof}, @code{remquol}, @code{remquo}, -@code{rintf}, @code{rintl}, @code{rint}, @code{roundf}, @code{roundl}, -@code{round}, @code{scalblnf}, @code{scalblnl}, @code{scalbln}, -@code{scalbnf}, @code{scalbnl}, @code{scalbn}, @code{snprintf}, -@code{tgammaf}, @code{tgammal}, @code{tgamma}, @code{truncf}, -@code{truncl}, @code{trunc}, @code{vfscanf}, @code{vscanf}, -@code{vsnprintf} and @code{vsscanf} +@code{cimagl}, @code{cimag}, @code{conjf}, @code{conjl}, @code{conj}, +@code{copysignf}, @code{copysignl}, @code{copysign}, @code{cpowf}, +@code{cpowl}, @code{cpow}, @code{cprojf}, @code{cprojl}, @code{cproj}, +@code{crealf}, @code{creall}, @code{creal}, @code{csinf}, @code{csinhf}, +@code{csinhl}, @code{csinh}, @code{csinl}, @code{csin}, @code{csqrtf}, +@code{csqrtl}, @code{csqrt}, @code{ctanf}, @code{ctanhf}, @code{ctanhl}, +@code{ctanh}, @code{ctanl}, @code{ctan}, @code{erfcf}, @code{erfcl}, +@code{erfc}, @code{erff}, @code{erfl}, @code{erf}, @code{exp2f}, +@code{exp2l}, @code{exp2}, @code{expm1f}, @code{expm1l}, @code{expm1}, +@code{fdimf}, @code{fdiml}, @code{fdim}, @code{fmaf}, @code{fmal}, +@code{fmaxf}, @code{fmaxl}, @code{fmax}, @code{fma}, @code{fminf}, +@code{fminl}, @code{fmin}, @code{hypotf}, @code{hypotl}, @code{hypot}, +@code{ilogbf}, @code{ilogbl}, @code{ilogb}, @code{imaxabs}, +@code{isblank}, @code{lgammaf}, @code{lgammal}, @code{lgamma}, +@code{llabs}, @code{llrintf}, @code{llrintl}, @code{llrint}, +@code{llroundf}, @code{llroundl}, @code{llround}, @code{log1pf}, +@code{log1pl}, @code{log1p}, @code{log2f}, @code{log2l}, @code{log2}, +@code{logbf}, @code{logbl}, @code{logb}, @code{lrintf}, @code{lrintl}, +@code{lrint}, @code{lroundf}, @code{lroundl}, @code{lround}, +@code{nearbyintf}, @code{nearbyintl}, @code{nearbyint}, +@code{nextafterf}, @code{nextafterl}, @code{nextafter}, +@code{nexttowardf}, @code{nexttowardl}, @code{nexttoward}, +@code{remainderf}, @code{remainderl}, @code{remainder}, @code{remquof}, +@code{remquol}, @code{remquo}, @code{rintf}, @code{rintl}, @code{rint}, +@code{roundf}, @code{roundl}, @code{round}, @code{scalblnf}, +@code{scalblnl}, @code{scalbln}, @code{scalbnf}, @code{scalbnl}, +@code{scalbn}, @code{snprintf}, @code{tgammaf}, @code{tgammal}, +@code{tgamma}, @code{truncf}, @code{truncl}, @code{trunc}, +@code{vfscanf}, @code{vscanf}, @code{vsnprintf} and @code{vsscanf} are handled as built-in functions except in strict ISO C90 mode (@option{-ansi} or @option{-std=c89}). @@ -5148,16 +5164,19 @@ The ISO C90 functions @code{abort}, @code{abs}, @code{acos}, @code{asin}, @code{atan2}, @code{atan}, @code{calloc}, @code{ceil}, @code{cosh}, @code{cos}, @code{exit}, @code{exp}, @code{fabs}, @code{floor}, @code{fmod}, -@code{fprintf}, @code{fputs}, @code{frexp}, @code{fscanf}, @code{labs}, -@code{ldexp}, @code{log10}, @code{log}, @code{malloc}, @code{memcmp}, -@code{memcpy}, @code{memset}, @code{modf}, @code{pow}, @code{printf}, -@code{putchar}, @code{puts}, @code{scanf}, @code{sinh}, @code{sin}, -@code{snprintf}, @code{sprintf}, @code{sqrt}, @code{sscanf}, -@code{strcat}, @code{strchr}, @code{strcmp}, @code{strcpy}, -@code{strcspn}, @code{strlen}, @code{strncat}, @code{strncmp}, -@code{strncpy}, @code{strpbrk}, @code{strrchr}, @code{strspn}, -@code{strstr}, @code{tanh}, @code{tan}, @code{vfprintf}, @code{vprintf} -and @code{vsprintf} +@code{fprintf}, @code{fputs}, @code{frexp}, @code{fscanf}, +@code{isalnum}, @code{isalpha}, @code{iscntrl}, @code{isdigit}, +@code{isgraph}, @code{islower}, @code{isprint}, @code{ispunct}, +@code{isspace}, @code{isupper}, @code{isxdigit}, @code{tolower}, +@code{toupper}, @code{labs}, @code{ldexp}, @code{log10}, @code{log}, +@code{malloc}, @code{memcmp}, @code{memcpy}, @code{memset}, @code{modf}, +@code{pow}, @code{printf}, @code{putchar}, @code{puts}, @code{scanf}, +@code{sinh}, @code{sin}, @code{snprintf}, @code{sprintf}, @code{sqrt}, +@code{sscanf}, @code{strcat}, @code{strchr}, @code{strcmp}, +@code{strcpy}, @code{strcspn}, @code{strlen}, @code{strncat}, +@code{strncmp}, @code{strncpy}, @code{strpbrk}, @code{strrchr}, +@code{strspn}, @code{strstr}, @code{tanh}, @code{tan}, @code{vfprintf}, +@code{vprintf} and @code{vsprintf} are all recognized as built-in functions unless @option{-fno-builtin} is specified (or @option{-fno-builtin-@var{function}} is specified for an individual function). All of these functions have diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index afbf937..7e44e7e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2004-03-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + * gcc.dg/torture/builtin-ctype-1.c: New test. + +2004-03-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + * gcc.dg/torture/builtin-explog-1.c: Add new cases. * gcc.dg/torture/builtin-math-1.c: Likewise. * builtin-power-1.c: New test. diff --git a/gcc/testsuite/gcc.dg/torture/builtin-ctype-1.c b/gcc/testsuite/gcc.dg/torture/builtin-ctype-1.c new file mode 100644 index 0000000..ad6fc1c --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/builtin-ctype-1.c @@ -0,0 +1,44 @@ +/* Copyright (C) 2004 Free Software Foundation. + + Verify that built-in ctype function attributes are correctly set by + the compiler. + + Written by Kaveh Ghazi, 2004-03-23. */ + +/* { dg-do link } */ + + +void test(int i) +{ + /* All of these ctype functions should be const/pure and thus + eliminated. */ +#define TEST_CTYPE(FN) \ + extern int FN(int); \ + extern void link_failure_##FN(void); \ + if (FN(i) != FN(i)) \ + link_failure_##FN() + +#ifdef __OPTIMIZE__ + TEST_CTYPE(isalnum); + TEST_CTYPE(isalpha); + TEST_CTYPE(isascii); + TEST_CTYPE(isblank); + TEST_CTYPE(iscntrl); + TEST_CTYPE(isdigit); + TEST_CTYPE(isgraph); + TEST_CTYPE(islower); + TEST_CTYPE(isprint); + TEST_CTYPE(ispunct); + TEST_CTYPE(isspace); + TEST_CTYPE(isupper); + TEST_CTYPE(isxdigit); + TEST_CTYPE(toascii); + TEST_CTYPE(tolower); + TEST_CTYPE(toupper); +#endif /* __OPTIMIZE__ */ +} + +int main (void) +{ + return 0; +} |