GCN: Restore build with GCC 4.8 (was: [committed 1/6] amdgcn: add multiple vector sizes)

Message ID 87v8oihc0c.fsf@euler.schwinge.homeip.net
State Committed
Headers
Series GCN: Restore build with GCC 4.8 (was: [committed 1/6] amdgcn: add multiple vector sizes) |

Commit Message

Thomas Schwinge Oct. 17, 2022, 12:26 p.m. UTC
  Hi!

On 2022-10-11T12:02:03+0100, Andrew Stubbs <ams@codesourcery.com> wrote:
> --- a/gcc/config/gcn/gcn.cc
> +++ b/gcc/config/gcn/gcn.cc

> +/* Return a vector mode with N lanes of MODE.  */
> +
> +static machine_mode
> +VnMODE (int n, machine_mode mode)
> +{
> +  switch (mode)
> +    {
> +    case QImode:

Pushed to master branch commit 612de72b0d2904b5a5a2b487ce4cb907c768a947
"GCN: Restore build with GCC 4.8", see attached.

Cherry-picked pushed to devel/omp/gcc-12 branch in
commit 38e4f4f55a6823d028b8f5332c500b7267ad320b
"GCN: Restore build with GCC 4.8", see attached.


Grüße
 Thomas


> +      switch (n)
> +     {
> +     case 2: return V2QImode;
> +     case 4: return V4QImode;
> +     case 8: return V8QImode;
> +     case 16: return V16QImode;
> +     case 32: return V32QImode;
> +     case 64: return V64QImode;
> +     }
> +      break;
> +    case HImode:
> +      switch (n)
> +     {
> +     case 2: return V2HImode;
> +     case 4: return V4HImode;
> +     case 8: return V8HImode;
> +     case 16: return V16HImode;
> +     case 32: return V32HImode;
> +     case 64: return V64HImode;
> +     }
> +      break;
> +    case HFmode:
> +      switch (n)
> +     {
> +     case 2: return V2HFmode;
> +     case 4: return V4HFmode;
> +     case 8: return V8HFmode;
> +     case 16: return V16HFmode;
> +     case 32: return V32HFmode;
> +     case 64: return V64HFmode;
> +     }
> +      break;
> +    case SImode:
> +      switch (n)
> +     {
> +     case 2: return V2SImode;
> +     case 4: return V4SImode;
> +     case 8: return V8SImode;
> +     case 16: return V16SImode;
> +     case 32: return V32SImode;
> +     case 64: return V64SImode;
> +     }
> +      break;
> +    case SFmode:
> +      switch (n)
> +     {
> +     case 2: return V2SFmode;
> +     case 4: return V4SFmode;
> +     case 8: return V8SFmode;
> +     case 16: return V16SFmode;
> +     case 32: return V32SFmode;
> +     case 64: return V64SFmode;
> +     }
> +      break;
> +    case DImode:
> +      switch (n)
> +     {
> +     case 2: return V2DImode;
> +     case 4: return V4DImode;
> +     case 8: return V8DImode;
> +     case 16: return V16DImode;
> +     case 32: return V32DImode;
> +     case 64: return V64DImode;
> +     }
> +      break;
> +    case DFmode:
> +      switch (n)
> +     {
> +     case 2: return V2DFmode;
> +     case 4: return V4DFmode;
> +     case 8: return V8DFmode;
> +     case 16: return V16DFmode;
> +     case 32: return V32DFmode;
> +     case 64: return V64DFmode;
> +     }
> +      break;
> +    default:
> +      break;
> +    }
> +
> +  return VOIDmode;
> +}


-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
  

Patch

From 38e4f4f55a6823d028b8f5332c500b7267ad320b Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <thomas@codesourcery.com>
Date: Sat, 15 Oct 2022 00:10:29 +0200
Subject: [PATCH] GCN: Restore build with GCC 4.8
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

For example, for "g++-4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4", the recent
commit r13-3220-g45381d6f9f4e7b5c7b062f5ad8cc9788091c2d07
"amdgcn: add multiple vector sizes" broke the build:

    In file included from [...]/source-gcc/gcc/coretypes.h:458:0,
                     from [...]/source-gcc/gcc/config/gcn/gcn.cc:24:
    [...]/source-gcc/gcc/config/gcn/gcn.cc: In function ‘machine_mode VnMODE(int, machine_mode)’:
    ./insn-modes.h:42:71: error: temporary of non-literal type ‘scalar_int_mode’ in a constant expression
     #define QImode (scalar_int_mode ((scalar_int_mode::from_int) E_QImode))
                                                                           ^
    [...]/source-gcc/gcc/config/gcn/gcn.cc:405:10: note: in expansion of macro ‘QImode’
         case QImode:
              ^
    In file included from [...]/source-gcc/gcc/coretypes.h:478:0,
                     from [...]/source-gcc/gcc/config/gcn/gcn.cc:24:
    [...]/source-gcc/gcc/machmode.h:410:7: note: ‘scalar_int_mode’ is not literal because:
     class scalar_int_mode
           ^
    [...]/source-gcc/gcc/machmode.h:410:7: note:   ‘scalar_int_mode’ is not an aggregate, does not have a trivial default constructor, and has no constexpr constructor that is not a copy or move constructor
    [...]

Addressing this like simiar issues have been addressed in the past.

	gcc/
	* config/gcn/gcn.cc (VnMODE): Use 'case E_QImode:' instead of
	'case QImode:', etc.

(cherry picked from commit 612de72b0d2904b5a5a2b487ce4cb907c768a947)
---
 gcc/ChangeLog.omp     |  8 ++++++++
 gcc/config/gcn/gcn.cc | 14 +++++++-------
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp
index c34d0ec7c77..527a9850dba 100644
--- a/gcc/ChangeLog.omp
+++ b/gcc/ChangeLog.omp
@@ -1,3 +1,11 @@ 
+2022-10-17  Thomas Schwinge  <thomas@codesourcery.com>
+
+	Backported from master:
+	2022-10-17  Thomas Schwinge  <thomas@codesourcery.com>
+
+	* config/gcn/gcn.cc (VnMODE): Use 'case E_QImode:' instead of
+	'case QImode:', etc.
+
 2022-10-14  Julian Brown  <julian@codesourcery.com>
 
 	* omp-low.cc (oacc_privatization_candidate_p): Artificial vars are not
diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc
index b01131c0dc2..9c2fd4c5b8a 100644
--- a/gcc/config/gcn/gcn.cc
+++ b/gcc/config/gcn/gcn.cc
@@ -412,7 +412,7 @@  VnMODE (int n, machine_mode mode)
 {
   switch (mode)
     {
-    case QImode:
+    case E_QImode:
       switch (n)
 	{
 	case 2: return V2QImode;
@@ -423,7 +423,7 @@  VnMODE (int n, machine_mode mode)
 	case 64: return V64QImode;
 	}
       break;
-    case HImode:
+    case E_HImode:
       switch (n)
 	{
 	case 2: return V2HImode;
@@ -434,7 +434,7 @@  VnMODE (int n, machine_mode mode)
 	case 64: return V64HImode;
 	}
       break;
-    case HFmode:
+    case E_HFmode:
       switch (n)
 	{
 	case 2: return V2HFmode;
@@ -445,7 +445,7 @@  VnMODE (int n, machine_mode mode)
 	case 64: return V64HFmode;
 	}
       break;
-    case SImode:
+    case E_SImode:
       switch (n)
 	{
 	case 2: return V2SImode;
@@ -456,7 +456,7 @@  VnMODE (int n, machine_mode mode)
 	case 64: return V64SImode;
 	}
       break;
-    case SFmode:
+    case E_SFmode:
       switch (n)
 	{
 	case 2: return V2SFmode;
@@ -467,7 +467,7 @@  VnMODE (int n, machine_mode mode)
 	case 64: return V64SFmode;
 	}
       break;
-    case DImode:
+    case E_DImode:
       switch (n)
 	{
 	case 2: return V2DImode;
@@ -478,7 +478,7 @@  VnMODE (int n, machine_mode mode)
 	case 64: return V64DImode;
 	}
       break;
-    case DFmode:
+    case E_DFmode:
       switch (n)
 	{
 	case 2: return V2DFmode;
-- 
2.35.1