diff options
author | Richard Biener <rguenther@suse.de> | 2024-04-17 11:22:00 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2024-04-30 13:03:55 +0200 |
commit | ab785f9a3901ca29710592a2d5480b5a44328bf2 (patch) | |
tree | 260b1976de76c005c2063c43019c8bdc03b43a8e | |
parent | 667c19de86b33648f5f4599f589a5e02adbb35cb (diff) | |
download | gcc-ab785f9a3901ca29710592a2d5480b5a44328bf2.zip gcc-ab785f9a3901ca29710592a2d5480b5a44328bf2.tar.gz gcc-ab785f9a3901ca29710592a2d5480b5a44328bf2.tar.bz2 |
Support {CEIL,FLOOR,ROUND}_{DIV,MOD}_EXPR and EXACT_DIV_EXPR in GIMPLE FE
The following adds support for the various division and modulo operators
to the GIMPLE frontend via __{CEIL,FLOOR,ROUND}_{DIV,MOD} and
__EXACT_DIV operators.
gcc/c/
* gimple-parser.cc (c_parser_gimple_binary_expression):
Parse __{CEIL,FLOOR,ROUND}_{DIV,MOD} and __EXACT_DIV.
gcc/testsuite/
* gcc.dg/gimplefe-53.c: New testcase.
-rw-r--r-- | gcc/c/gimple-parser.cc | 35 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/gimplefe-53.c | 16 |
2 files changed, 51 insertions, 0 deletions
diff --git a/gcc/c/gimple-parser.cc b/gcc/c/gimple-parser.cc index 2dac41a..d156d83 100644 --- a/gcc/c/gimple-parser.cc +++ b/gcc/c/gimple-parser.cc @@ -1055,6 +1055,41 @@ c_parser_gimple_binary_expression (gimple_parser &parser, tree ret_type) code = LTGT_EXPR; break; } + else if (strcmp (IDENTIFIER_POINTER (id), "__FLOOR_DIV") == 0) + { + code = FLOOR_DIV_EXPR; + break; + } + else if (strcmp (IDENTIFIER_POINTER (id), "__ROUND_DIV") == 0) + { + code = ROUND_DIV_EXPR; + break; + } + else if (strcmp (IDENTIFIER_POINTER (id), "__EXACT_DIV") == 0) + { + code = EXACT_DIV_EXPR; + break; + } + else if (strcmp (IDENTIFIER_POINTER (id), "__CEIL_DIV") == 0) + { + code = CEIL_DIV_EXPR; + break; + } + else if (strcmp (IDENTIFIER_POINTER (id), "__FLOOR_MOD") == 0) + { + code = FLOOR_MOD_EXPR; + break; + } + else if (strcmp (IDENTIFIER_POINTER (id), "__ROUND_MOD") == 0) + { + code = ROUND_MOD_EXPR; + break; + } + else if (strcmp (IDENTIFIER_POINTER (id), "__CEIL_MOD") == 0) + { + code = CEIL_MOD_EXPR; + break; + } } /* Fallthru. */ default: diff --git a/gcc/testsuite/gcc.dg/gimplefe-53.c b/gcc/testsuite/gcc.dg/gimplefe-53.c new file mode 100644 index 0000000..926c77c --- /dev/null +++ b/gcc/testsuite/gcc.dg/gimplefe-53.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-fgimple" } */ + +int __GIMPLE +foo (int a, int b) +{ + int tem; + tem = a __EXACT_DIV b; + tem = tem __CEIL_DIV b; + tem = tem __FLOOR_DIV b; + tem = tem __ROUND_DIV b; + tem = tem __FLOOR_MOD b; + tem = tem __CEIL_MOD b; + tem = tem __ROUND_MOD b; + return tem; +} |