https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100316

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-11 branch has been updated by Kito Cheng <k...@gcc.gnu.org>:

https://gcc.gnu.org/g:aa827fa170d3e61d17c3daaf4d5008a3c674a005

commit r11-9170-gaa827fa170d3e61d17c3daaf4d5008a3c674a005
Author: Kito Cheng <kito.ch...@sifive.com>
Date:   Thu Oct 7 16:17:13 2021 +0800

    [PR/target 100316] Allow constant address for __builtin___clear_cache.

    __builtin___clear_cache was able to accept constant address for the
    argument, but it seems no longer accept recently, and it even not
    accept constant address which is hold in variable when optimization is
    enable:

    ```
    void foo3(){
      void *yy = (void*)0x1000;
      __builtin___clear_cache(yy, yy);
    }
    ```

    So this patch make BEGIN and END accept VOIDmode, like cselib_lookup_mem
did per
    Jim Wilson's suggestion.

    ```
    static cselib_val *
    cselib_lookup_mem (rtx x, int create)
    {
      ...
      addr_mode = GET_MODE (XEXP (x, 0));
      if (addr_mode == VOIDmode)
        addr_mode = Pmode;
    ```

    Changes v2 -> v3:
    - Use gcc_assert rather than error, maybe_emit_call_builtin___clear_cache
is
    internal use only, and we already checked the type in other place.

    Changes v1 -> v2:
    - Check is CONST_INT intead of cehck mode, no new testcase, since
      constant value with other type like CONST_DOUBLE will catched by
      front-end.
    e.g.
    Code:
    ```c
    void foo(){
      __builtin___clear_cache(1.11, 0);
    }
    ```
    Error message:
    ```
    clearcache-double.c: In function 'foo':
    clearcache-double.c:2:27: error: incompatible type for argument 1 of
'__builtin___clear_cache'
        2 |   __builtin___clear_cache(1.11, 0);
          |                           ^~~~
          |                           |
          |                           double
    clearcache-double.c:2:27: note: expected 'void *' but argument is of type
'double'
    ```

    gcc/ChangeLog:

            PR target/100316
            * builtins.c (maybe_emit_call_builtin___clear_cache): Allow
            CONST_INT for BEGIN and END, and use gcc_assert rather than
            error.

    gcc/testsuite/ChangeLog:

            PR target/100316
            * gcc.c-torture/compile/pr100316.c: New.

    (cherry picked from commit 4e5bc4e4506a7ae7bb88fc925a425652a1da6b2d)

Reply via email to