From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1005) id 196C03857803; Thu, 3 Nov 2022 02:12:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 196C03857803 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1667441569; bh=ndcM9Kp4nZbUWzOjoPXfElyADL4Y7jRt2qG8Ds7Vb5Q=; h=From:To:Subject:Date:From; b=jboMSCHT6JS0S8gIgEYMytpN/v9/jqDExrnUCYF1PtTz5sfBiXztGyfWTHTVkLVta esmiUo7kRkLaOF3RX1pESRbop/OtzMzKZcZYBjan6YuAylJtY5jRI/yd5hhA74V6Ub sMKD1kqJP0r8dKTq+JTfjNXpOV3x00ilKQJvCbjU= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Michael Meissner To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/meissner/heads/dmf002)] Make wD match either FLOAT_REGS or DM_REGS. X-Act-Checkin: gcc X-Git-Author: Michael Meissner X-Git-Refname: refs/users/meissner/heads/dmf002 X-Git-Oldrev: 4746170d9175a271f0684ca428c62c4779762258 X-Git-Newrev: ba5e4e4c7e70b417eb82f118613aa8dd83f1c2cf Message-Id: <20221103021249.196C03857803@sourceware.org> Date: Thu, 3 Nov 2022 02:12:49 +0000 (GMT) List-Id: https://gcc.gnu.org/g:ba5e4e4c7e70b417eb82f118613aa8dd83f1c2cf commit ba5e4e4c7e70b417eb82f118613aa8dd83f1c2cf Author: Michael Meissner Date: Wed Nov 2 22:12:30 2022 -0400 Make wD match either FLOAT_REGS or DM_REGS. 2022-11-02 Michael Meissner gcc/ * config/rs6000/constraint.md (wD): Match FLOAT_REGS on power10, DM_REGS if dense math. * config/rs6000/rs6000.md (rs6000_debug_reg_global): For -mdebug=reg, print the register class for wD. (rs6000_init_hard_regno_mode_ok): Set the register class for wD. * config/rs6000/rs6000.h (enum r6000_reg_class_enum): New enumaation value for wD. * doc/md.texi (PowerPC constraints): Document wD constraint. Diff: --- gcc/config/rs6000/constraints.md | 4 ++-- gcc/config/rs6000/rs6000.cc | 11 ++++++++++- gcc/config/rs6000/rs6000.h | 1 + gcc/doc/md.texi | 3 +++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gcc/config/rs6000/constraints.md b/gcc/config/rs6000/constraints.md index 809f117c1c4..82856b8e8c2 100644 --- a/gcc/config/rs6000/constraints.md +++ b/gcc/config/rs6000/constraints.md @@ -107,8 +107,8 @@ (match_test "TARGET_P8_VECTOR") (match_operand 0 "s5bit_cint_operand"))) -(define_register_constraint "wD" "DM_REGS" - "DMR register.") +(define_register_constraint "wD" "rs6000_constraints[RS6000_CONSTRAINT_wD]" + "Accumulator register.") (define_constraint "wE" "@internal Vector constant that can be loaded with the XXSPLTIB instruction." diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index 901ae345ce5..b37110841c6 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -2369,6 +2369,7 @@ rs6000_debug_reg_global (void) "wr reg_class = %s\n" "wx reg_class = %s\n" "wA reg_class = %s\n" + "wD reg_class = %s\n" "\n", reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_d]], reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_v]], @@ -2376,7 +2377,8 @@ rs6000_debug_reg_global (void) reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_we]], reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wr]], reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wx]], - reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wA]]); + reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wA]], + reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wD]]); nl = "\n"; for (m = 0; m < NUM_MACHINE_MODES; ++m) @@ -3060,6 +3062,13 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p) if (TARGET_DIRECT_MOVE_128) rs6000_constraints[RS6000_CONSTRAINT_we] = VSX_REGS; + /* Support for the accumulator registers, either FPR registers (aka original + mma) or DMR registers (dense math). */ + if (TARGET_DENSE_MATH) + rs6000_constraints[RS6000_CONSTRAINT_wD] = DM_REGS; + else if (TARGET_MMA) + rs6000_constraints[RS6000_CONSTRAINT_wD] = FLOAT_REGS; + /* Set up the reload helper and direct move functions. */ if (TARGET_VSX || TARGET_ALTIVEC) { diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 5d38257ebff..dd132a5945e 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1221,6 +1221,7 @@ enum r6000_reg_class_enum { RS6000_CONSTRAINT_wr, /* GPR register if 64-bit */ RS6000_CONSTRAINT_wx, /* FPR register for STFIWX */ RS6000_CONSTRAINT_wA, /* BASE_REGS if 64-bit. */ + RS6000_CONSTRAINT_wD, /* Accumulator regs if MMA/Dense Math. */ RS6000_CONSTRAINT_MAX }; diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index d0a71ecbb80..65ccb1de667 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -3264,6 +3264,9 @@ Like @code{d}, if @option{-mpowerpc-gfxopt} is used; otherwise, @code{NO_REGS}. @item wA Like @code{b}, if @option{-mpowerpc64} is used; otherwise, @code{NO_REGS}. +@item wD +Accumulator register for either @option{-mma} or @option{-mdense-math}. + @item wB Signed 5-bit constant integer that can be loaded into an Altivec register.