public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/111937] New: [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx`  made `lto_input_mode_table` unable to parse binary gimple data.
@ 2023-10-23 14:06 mxlol233 at outlook dot com
  2023-10-23 17:12 ` [Bug target/111937] " tschwinge at gcc dot gnu.org
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: mxlol233 at outlook dot com @ 2023-10-23 14:06 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 111937
           Summary: [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1,
                    the `poly_xxx`  made `lto_input_mode_table` unable to
                    parse binary gimple data.
           Product: gcc
           Version: 13.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mxlol233 at outlook dot com
  Target Milestone: ---

Recently, I wanted to port an open source gpgpu target (a custom modification
of RISCV) to GCC/openmp (Following the approach of gcu and nvptx, using
offloading (https://gcc.gnu.org/wiki/Offloading)). However, the upstream after
this patch
(https://github.com/mxlol233-ventus/gcc/commit/3496ca4e6566fc3c5f1093a0290bb88c34d368f8#diff-98b71abedd6e59eb80cb43e75ebb507ffa8bf540ee88aa099c6c7fe7cf90ae3e),
NUM_POLY_INT_COEFFS became greater than 1, while for the x86-64-*-* target,
NUM_POLY_INT_COEFFS=1. This makes it impossible for a RISC-V*-*-* lto1 to parse
the data in the LTO sections (e.g. gnu.offload_lto_*) of the object files
generated by x86-64-*-*.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/111937] [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx`  made `lto_input_mode_table` unable to parse binary gimple data.
  2023-10-23 14:06 [Bug target/111937] New: [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx` made `lto_input_mode_table` unable to parse binary gimple data mxlol233 at outlook dot com
@ 2023-10-23 17:12 ` tschwinge at gcc dot gnu.org
  2023-10-24  1:55 ` mxlol233 at outlook dot com
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: tschwinge at gcc dot gnu.org @ 2023-10-23 17:12 UTC (permalink / raw)
  To: gcc-bugs

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

Thomas Schwinge <tschwinge at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |tschwinge at gcc dot gnu.org

--- Comment #1 from Thomas Schwinge <tschwinge at gcc dot gnu.org> ---
Created attachment 56178
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=56178&action=edit
0001-WIP-STATIC_ASSERT-MAX_MACHINE_MODE-256.patch

(In reply to Xiao Ma from comment #0)
> Recently, I wanted to port an open source gpgpu target (a custom
> modification of RISCV) to GCC/openmp (Following the approach of gcu and
> nvptx, using offloading (https://gcc.gnu.org/wiki/Offloading)).

Interesting!  Please keep us posted how this works out.

> However, the
> upstream after this patch
> (https://github.com/mxlol233-ventus/gcc/commit/
> 3496ca4e6566fc3c5f1093a0290bb88c34d368f8#diff-
> 98b71abedd6e59eb80cb43e75ebb507ffa8bf540ee88aa099c6c7fe7cf90ae3e),
> NUM_POLY_INT_COEFFS became greater than 1, while for the x86-64-*-* target,
> NUM_POLY_INT_COEFFS=1. This makes it impossible for a RISC-V*-*-* lto1 to
> parse the data in the LTO sections (e.g. gnu.offload_lto_*) of the object
> files generated by x86-64-*-*.

I'm not sure about your initial analysis; I'm not familiar with the
code/changes you cite.

However, please try building with the attached
'0001-WIP-STATIC_ASSERT-MAX_MACHINE_MODE-256.patch'.  If that triggers, we've
(likely...) found (one of) your issue(s).

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/111937] [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx`  made `lto_input_mode_table` unable to parse binary gimple data.
  2023-10-23 14:06 [Bug target/111937] New: [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx` made `lto_input_mode_table` unable to parse binary gimple data mxlol233 at outlook dot com
  2023-10-23 17:12 ` [Bug target/111937] " tschwinge at gcc dot gnu.org
@ 2023-10-24  1:55 ` mxlol233 at outlook dot com
  2023-10-24  5:42 ` mxlol233 at outlook dot com
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: mxlol233 at outlook dot com @ 2023-10-24  1:55 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Xiao Ma <mxlol233 at outlook dot com> ---
(In reply to Thomas Schwinge from comment #1)
> Created attachment 56178 [details]
> 0001-WIP-STATIC_ASSERT-MAX_MACHINE_MODE-256.patch
> 
> (In reply to Xiao Ma from comment #0)

> I'm not sure about your initial analysis; I'm not familiar with the
> code/changes you cite.
> 
> However, please try building with the attached
> '0001-WIP-STATIC_ASSERT-MAX_MACHINE_MODE-256.patch'.  If that triggers,
> we've (likely...) found (one of) your issue(s).

Thanks for your advice, I will check this out, and attach a patch to show how
to reproduce it, under the upstream gcc.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/111937] [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx`  made `lto_input_mode_table` unable to parse binary gimple data.
  2023-10-23 14:06 [Bug target/111937] New: [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx` made `lto_input_mode_table` unable to parse binary gimple data mxlol233 at outlook dot com
  2023-10-23 17:12 ` [Bug target/111937] " tschwinge at gcc dot gnu.org
  2023-10-24  1:55 ` mxlol233 at outlook dot com
@ 2023-10-24  5:42 ` mxlol233 at outlook dot com
  2023-10-24  7:27 ` rguenth at gcc dot gnu.org
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: mxlol233 at outlook dot com @ 2023-10-24  5:42 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Xiao Ma <mxlol233 at outlook dot com> ---
Created attachment 56185
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=56185&action=edit
a patch on releases/gcc-13 to reproduce the bug.

steps:
1. git clone -b releases/gcc-13 https://github.com/gcc-mirror/gcc.git
2. cd gcc
3. #apply this patch
4. mkdir .build_accel && cd .build_accel && ../configure --target=rvgpu-none
--enable-languages=c --enable-as-accelerator-for=x86_64-pc-linux-gnu && make
all-gcc -j16
5. cd ../
6. mkdir .build_host && cd .build_host && ../configure --enable-languages=c
--enable-offload-targets=rvgpu-none=`pwd`/../../.install/rvgpu-none/ && make
all-gcc -j16
7. cd ../ && mkdir .tmp && cd .tmp
8. # touch a file:

```
/* { dg-do run } */


int
main (void)
{
  int i2, l = 0, r = 0, l2 = 0;
  int a[3][3][3];


  #pragma acc parallel
  #pragma acc loop collapse(4 - 1)
    for (int i = 0; i < 2; i++)
      for (int j = 0; j < 2; j++)
        for (int k = 0; k < 2; k++)
          a[i][j][k] = i + j * 4 + k * 16;
#pragma acc parallel
    {
      #pragma acc loop collapse(2) reduction(|:l)
        for (i2 = 0; i2 < 2; i2++)
          for (int j = 0; j < 2; j++)
            for (int k = 0; k < 2; k++)
              if (a[i2][j][k] != i2 + j * 4 + k * 16)
                l += 1;
    }

  /*  Test loop with >= condition.  */
#pragma acc parallel
    {
      #pragma acc loop collapse(2) reduction(|:l2)
        for (i2 = 0; i2 < 2; i2++)
          for (int j = 1; j >= 0; j--)
            for (int k = 0; k < 2; k++)
              if (a[i2][j][k] != i2 + j * 4 + k * 16)
                l2 += 1;
    }

    for (i2 = 0; i2 < 2; i2++)
      for (int j = 0; j < 2; j++)
        for (int k = 0; k < 2; k++)
          if (a[i2][j][k] != i2 + j * 4 + k * 16)
            r += 1;


  return 0;
}


```
9. ../.build_host/gcc/cc1 -fopenacc  -quiet  -o a.s a.c
# you will see the log like this:
```NUM_POLY_INT_COEFFS=1
```
10. as --64 -o a.o a.s

11. ../.build_accel/gcc/lto1 -quiet  -o a.o.s a.o                               
# you will see the log like this:
```
NUM_POLY_INT_COEFFS=2
‘
Segmentation fault
0xbf3e83 crash_signal
        ../../gcc/toplev.cc:314
0x7f92986f608f ???
       
/build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0
0x7f929883b6e5 ???
        ../sysdeps/x86_64/multiarch/strlen-avx2.S:65
0x1773512 pp_quoted_string
        ../../gcc/pretty-print.cc:1845
0x177435a pp_format(pretty_printer*, text_info*)
        ../../gcc/pretty-print.cc:1359
0x176495f diagnostic_report_diagnostic(diagnostic_context*, diagnostic_info*)
        ../../gcc/diagnostic.cc:1592
0x1765149 diagnostic_impl
        ../../gcc/diagnostic.cc:1756
0x1767236 fatal_error(unsigned int, char const*, ...)
        ../../gcc/diagnostic.cc:2141
0xa90e11 lto_input_mode_table(lto_file_decl_data*)
        ../../gcc/lto-streamer-in.cc:2103
0x748626 lto_file_finalize
        ../../gcc/lto/lto-common.cc:2275
0x748626 lto_create_files_from_ids
        ../../gcc/lto/lto-common.cc:2298
0x748626 lto_file_read
        ../../gcc/lto/lto-common.cc:2353
0x748626 read_cgraph_and_symbols(unsigned int, char const**)
        ../../gcc/lto/lto-common.cc:2801
0x735356 lto_main()
        ../../gcc/lto/lto.cc:654
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
```

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/111937] [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx`  made `lto_input_mode_table` unable to parse binary gimple data.
  2023-10-23 14:06 [Bug target/111937] New: [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx` made `lto_input_mode_table` unable to parse binary gimple data mxlol233 at outlook dot com
                   ` (2 preceding siblings ...)
  2023-10-24  5:42 ` mxlol233 at outlook dot com
@ 2023-10-24  7:27 ` rguenth at gcc dot gnu.org
  2023-10-24  7:39 ` mxlol233 at outlook dot com
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-10-24  7:27 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rguenth at gcc dot gnu.org,
                   |                            |rsandifo at gcc dot gnu.org

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
The host and the target compiler have to be "similar" enough for the LTO
bytecode to be transferable.  May I suggest to use aarch64 with SVE as host
instead?

I fear differing NUM_POLY_INT_COEFFS is almost impossible to support.  Well,
we could maybe stream NUM_POLY_INT_COEFFS and adjust reading to rewrite to
the target supported number - rewriting from 1 to 2 should be possible but
I'm not sure how to handle the reverse ...

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/111937] [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx`  made `lto_input_mode_table` unable to parse binary gimple data.
  2023-10-23 14:06 [Bug target/111937] New: [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx` made `lto_input_mode_table` unable to parse binary gimple data mxlol233 at outlook dot com
                   ` (3 preceding siblings ...)
  2023-10-24  7:27 ` rguenth at gcc dot gnu.org
@ 2023-10-24  7:39 ` mxlol233 at outlook dot com
  2024-04-09  1:14 ` pinskia at gcc dot gnu.org
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: mxlol233 at outlook dot com @ 2023-10-24  7:39 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from Xiao Ma <mxlol233 at outlook dot com> ---
yes. handle the lto reading process is simple: just make the binary block jump
steps is same  as the host's  num_poly value.



获取Outlook for Android<https://aka.ms/AAb9ysg>
________________________________
From: rguenth at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
Sent: Tuesday, October 24, 2023 3:27:52 PM
To: mxlol233@outlook.com <mxlol233@outlook.com>
Subject: [Bug target/111937] [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` >
1, the `poly_xxx` made `lto_input_mode_table` unable to parse binary gimple
data.

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rguenth at gcc dot gnu.org,
                   |                            |rsandifo at gcc dot gnu.org

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
The host and the target compiler have to be "similar" enough for the LTO
bytecode to be transferable.  May I suggest to use aarch64 with SVE as host
instead?

I fear differing NUM_POLY_INT_COEFFS is almost impossible to support.  Well,
we could maybe stream NUM_POLY_INT_COEFFS and adjust reading to rewrite to
the target supported number - rewriting from 1 to 2 should be possible but
I'm not sure how to handle the reverse ...

--
You are receiving this mail because:
You are on the CC list for the bug.
You reported the bug.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/111937] [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx`  made `lto_input_mode_table` unable to parse binary gimple data.
  2023-10-23 14:06 [Bug target/111937] New: [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx` made `lto_input_mode_table` unable to parse binary gimple data mxlol233 at outlook dot com
                   ` (4 preceding siblings ...)
  2023-10-24  7:39 ` mxlol233 at outlook dot com
@ 2024-04-09  1:14 ` pinskia at gcc dot gnu.org
  2024-04-09  1:15 ` [Bug target/111937] offloading from x86_64-linux-gnu to riscv*-linux-gnu will have issues pinskia at gcc dot gnu.org
  2024-08-07 18:21 ` [Bug ipa/111937] " cvs-commit at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-04-09  1:14 UTC (permalink / raw)
  To: gcc-bugs

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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |DUPLICATE

--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Dup.

*** This bug has been marked as a duplicate of bug 96265 ***

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/111937] offloading from x86_64-linux-gnu to riscv*-linux-gnu will have issues
  2023-10-23 14:06 [Bug target/111937] New: [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx` made `lto_input_mode_table` unable to parse binary gimple data mxlol233 at outlook dot com
                   ` (5 preceding siblings ...)
  2024-04-09  1:14 ` pinskia at gcc dot gnu.org
@ 2024-04-09  1:15 ` pinskia at gcc dot gnu.org
  2024-08-07 18:21 ` [Bug ipa/111937] " cvs-commit at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-04-09  1:15 UTC (permalink / raw)
  To: gcc-bugs

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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2024-04-09
             Status|RESOLVED                    |NEW
         Resolution|DUPLICATE                   |---
            Summary|[RISCV][lto][offload] When  |offloading from
                   |`NUM_POLY_INT_COEFFS` > 1,  |x86_64-linux-gnu to
                   |the `poly_xxx`  made        |riscv*-linux-gnu will have
                   |`lto_input_mode_table`      |issues
                   |unable to parse binary      |
                   |gimple data.                |

--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Actually this is the opposite way as PR 96265.

Confirmed.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug ipa/111937] offloading from x86_64-linux-gnu to riscv*-linux-gnu will have issues
  2023-10-23 14:06 [Bug target/111937] New: [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx` made `lto_input_mode_table` unable to parse binary gimple data mxlol233 at outlook dot com
                   ` (6 preceding siblings ...)
  2024-04-09  1:15 ` [Bug target/111937] offloading from x86_64-linux-gnu to riscv*-linux-gnu will have issues pinskia at gcc dot gnu.org
@ 2024-08-07 18:21 ` cvs-commit at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-08-07 18:21 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Prathamesh Kulkarni
<prathamesh3492@gcc.gnu.org>:

https://gcc.gnu.org/g:38900247f3880d6eca2e364a000e5898f8deae64

commit r15-2801-g38900247f3880d6eca2e364a000e5898f8deae64
Author: Prathamesh Kulkarni <prathameshk@nvidia.com>
Date:   Wed Aug 7 23:45:38 2024 +0530

    Partially support streaming of poly_int for offloading.

    When offloading is enabled, the patch streams out host
    NUM_POLY_INT_COEFFS, and changes streaming in as follows:

    if (host_num_poly_int_coeffs <= NUM_POLY_INT_COEFFS)
    {
      for (i = 0; i < host_num_poly_int_coeffs; i++)
        poly_int.coeffs[i] = stream_in coeff;
      for (; i < NUM_POLY_INT_COEFFS; i++)
        poly_int.coeffs[i] = 0;
    }
    else
    {
      for (i = 0; i < NUM_POLY_INT_COEFFS; i++)
        poly_int.coeffs[i] = stream_in coeff;

      /* Ensure that degree of poly_int <= accel NUM_POLY_INT_COEFFS.  */
      for (; i < host_num_poly_int_coeffs; i++)
        {
          val = stream_in coeff;
          if (val != 0)
            error ();
        }
    }

    gcc/ChangeLog:
            PR ipa/96265
            PR ipa/111937
            * data-streamer-in.cc (streamer_read_poly_uint64): Remove code for
            streaming, and call poly_int_read_common instead.
            (streamer_read_poly_int64): Likewise.
            * data-streamer.cc (host_num_poly_int_coeffs): Conditionally define
            new variable if ACCEL_COMPILER is defined.
            * data-streamer.h (host_num_poly_int_coeffs): Declare.
            (poly_int_read_common): New function template.
            (bp_unpack_poly_value): Remove code for streaming and call
            poly_int_read_common instead.
            * lto-streamer-in.cc (lto_input_mode_table): Stream-in host
            NUM_POLY_INT_COEFFS into host_num_poly_int_coeffs if ACCEL_COMPILER
            is defined.
            * lto-streamer-out.cc (lto_write_mode_table): Stream out
            NUM_POLY_INT_COEFFS if offloading is enabled.
            * poly-int.h (MAX_NUM_POLY_INT_COEFFS_BITS): New macro.
            * tree-streamer-in.cc (lto_input_ts_poly_tree_pointers): Adjust
            streaming-in of poly_int.

    Signed-off-by: Prathamesh Kulkarni <prathameshk@nvidia.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-08-07 18:21 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-23 14:06 [Bug target/111937] New: [RISCV][lto][offload] When `NUM_POLY_INT_COEFFS` > 1, the `poly_xxx` made `lto_input_mode_table` unable to parse binary gimple data mxlol233 at outlook dot com
2023-10-23 17:12 ` [Bug target/111937] " tschwinge at gcc dot gnu.org
2023-10-24  1:55 ` mxlol233 at outlook dot com
2023-10-24  5:42 ` mxlol233 at outlook dot com
2023-10-24  7:27 ` rguenth at gcc dot gnu.org
2023-10-24  7:39 ` mxlol233 at outlook dot com
2024-04-09  1:14 ` pinskia at gcc dot gnu.org
2024-04-09  1:15 ` [Bug target/111937] offloading from x86_64-linux-gnu to riscv*-linux-gnu will have issues pinskia at gcc dot gnu.org
2024-08-07 18:21 ` [Bug ipa/111937] " cvs-commit at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).