From 203451d5ea5352e75da27dcf8259cc8dd7880512 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Fri, 3 Sep 2021 10:53:00 +0200 Subject: [PATCH] flag_complex_method: support optimize attribute gcc/ChangeLog: * opts.c (finish_options): Move flag_complex_method setting from ... * toplev.c (process_options): ... here. gcc/testsuite/ChangeLog: * gcc.c-torture/compile/attr-complex-method.c: New test. --- gcc/opts.c | 8 ++++++++ .../gcc.c-torture/compile/attr-complex-method.c | 10 ++++++++++ gcc/toplev.c | 8 -------- 3 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/attr-complex-method.c diff --git a/gcc/opts.c b/gcc/opts.c index e0501551ef5..2ac1a932f38 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -1323,6 +1323,14 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set, = (opts->x_flag_unroll_loops || opts->x_flag_peel_loops || opts->x_optimize >= 3); + + /* With -fcx-limited-range, we do cheap and quick complex arithmetic. */ + if (opts->x_flag_cx_limited_range) + flag_complex_method = 0; + + /* With -fcx-fortran-rules, we do something in-between cheap and C99. */ + if (opts->x_flag_cx_fortran_rules) + flag_complex_method = 1; } #define LEFT_COLUMN 27 diff --git a/gcc/testsuite/gcc.c-torture/compile/attr-complex-method.c b/gcc/testsuite/gcc.c-torture/compile/attr-complex-method.c new file mode 100644 index 00000000000..f08b72e273f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/attr-complex-method.c @@ -0,0 +1,10 @@ +/* { dg-additional-options "-fdump-tree-optimized" } */ + +#pragma GCC optimize "-fcx-limited-range" + +void do_div (_Complex double *a, _Complex double *b) +{ + *a = *b / (4.0 - 5.0fi); +} + +/* { dg-final { scan-tree-dump-not "__divdc3" "optimized" } } */ diff --git a/gcc/toplev.c b/gcc/toplev.c index 14d1335e79e..e1688aae724 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1695,14 +1695,6 @@ process_options (void) flag_stack_check = NO_STACK_CHECK; } - /* With -fcx-limited-range, we do cheap and quick complex arithmetic. */ - if (flag_cx_limited_range) - flag_complex_method = 0; - - /* With -fcx-fortran-rules, we do something in-between cheap and C99. */ - if (flag_cx_fortran_rules) - flag_complex_method = 1; - /* Targets must be able to place spill slots at lower addresses. If the target already uses a soft frame pointer, the transition is trivial. */ if (!FRAME_GROWS_DOWNWARD && flag_stack_protect) -- 2.33.0