From patchwork Tue Sep 12 10:07:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sylvain Noiry X-Patchwork-Id: 75722 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 34B6A3856244 for ; Tue, 12 Sep 2023 10:08:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 34B6A3856244 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1694513290; bh=70t4VpE7AQPmw7csUa2aDZRW5QczXYryjpZ0mY5c/t8=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=RYpCPZ+acDBvMx3u1Uxlt6rlpqa+EyLFUab/oCfezcp94E3ro5AHdryULrQNNt9Zn vbjCVp4ev/l6RQxYDKzbCfkidgjcPME13TCouuyuLfOo0Xc6+GazBUTJhBMhSv+k7U c39co+9AKZxof+3L6lCsCsI/6LsvfqhYv2eVpbQA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtpout30.security-mail.net (smtpout30.security-mail.net [85.31.212.36]) by sourceware.org (Postfix) with ESMTPS id 19564385843E for ; Tue, 12 Sep 2023 10:07:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 19564385843E Received: from localhost (fx306.security-mail.net [127.0.0.1]) by fx306.security-mail.net (Postfix) with ESMTP id 261CA35CFAA for ; Tue, 12 Sep 2023 12:07:34 +0200 (CEST) Received: from fx306 (fx306.security-mail.net [127.0.0.1]) by fx306.security-mail.net (Postfix) with ESMTP id B927035CF74 for ; Tue, 12 Sep 2023 12:07:33 +0200 (CEST) Received: from FRA01-MR2-obe.outbound.protection.outlook.com (mail-mr2fra01on0106.outbound.protection.outlook.com [104.47.25.106]) by fx306.security-mail.net (Postfix) with ESMTPS id 4514435CDDF for ; Tue, 12 Sep 2023 12:07:33 +0200 (CEST) Received: from PR1P264MB3448.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:184::6) by MRZP264MB2442.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:7::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.35; Tue, 12 Sep 2023 10:07:32 +0000 Received: from PR1P264MB3448.FRAP264.PROD.OUTLOOK.COM ([fe80::ad9:f173:8a66:3461]) by PR1P264MB3448.FRAP264.PROD.OUTLOOK.COM ([fe80::ad9:f173:8a66:3461%7]) with mapi id 15.20.6768.029; Tue, 12 Sep 2023 10:07:32 +0000 X-Virus-Scanned: E-securemail Secumail-id: ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SKk+olIj8kijUKARs5VDUD9QP/uNRwE+Yiy3wefFieEqUpSXfhS5hzf6iWLTUxmXcidZAvPZB1v8WBeBKjJQiqB5R09OIJUMiTIjq9VO4Ow9U9/jTZ+N8IRDwNdqkOSJ1YDM6c6uYbukbwYDR2LDRPkrxnCJ8QJ9+7FTuA0inhmqus9Vj65gPfja/ENZSxHBfprHPPjj/QZj5yr6VH8+teyiuAAGOqqCPxSZIiwvZDrprF5RAOZjYexzn6z7amdULdEoZp3WvUTlCD/yrVxtgy9PJyYB6tVFOCQZiFTiivNDqzYSsTz4/tdxH0TjRZ3FX19lW2+GyIufawHIM65sRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=70t4VpE7AQPmw7csUa2aDZRW5QczXYryjpZ0mY5c/t8=; b=MxZQ11146oZEGVW2+23DnWRAo2IyBKSWdq+7HIovf4XDedQBuaPA3Vq+jCed0ypE9/a98RDO09ZSGJ811b0z1xi4nBP9cI2To1NvxIVJP5YxeoDlgEMwBKjVgMZ/smOFnS6g2AYUSay1+SVHPYQ43mzqtSlf2r0tGrQ7AGcPLirKw4o6PTBvgyYZZtzDbPncAB+YYeYb6nx2vu/o20bGl8+sT0Z8ET7l6eXLgDU4gVqV94BHnQIwXjAYXqR+t/2vCMXPJYP+5ubYEZSrD347Qk9InTeLErNIYaFOur9EHNMDGIWz4LI5lXVmNZPg9WbVCC+/E7XKOiVbkhjeWKrYvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=kalrayinc.com; dmarc=pass action=none header.from=kalrayinc.com; dkim=pass header.d=kalrayinc.com; arc=none To: gcc-patches@gcc.gnu.org Cc: Sylvain Noiry Subject: [PATCH v2 03/11] Native complex ops: Add gen_rtx_complex hook Date: Tue, 12 Sep 2023 12:07:05 +0200 Message-ID: <20230912100713.1074-4-snoiry@kalrayinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230912100713.1074-1-snoiry@kalrayinc.com> References: <20230717090250.4645-10-snoiry@kalrayinc.com> <20230912100713.1074-1-snoiry@kalrayinc.com> X-ClientProxiedBy: LNXP123CA0020.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:d2::32) To PR1P264MB3448.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:184::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PR1P264MB3448:EE_|MRZP264MB2442:EE_ X-MS-Office365-Filtering-Correlation-Id: 98de96f0-dcca-4d57-152f-08dbb3781426 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6vrNjtEBTos3nbDIr0SgMnQMEAtRNxP4ueswCICxNPYlPeWYBXit6sGncW6riYzJkDtoV//5HW7bnbaEBtKADtitDeIi2/62Cu26bdyRJB/pFg/KRBEM9oyt018iAXesL01VC13TANl8LtySCcdchtkBgLwNxG6rUy5N1za1MDmegUAwKzXyuzZWk8kiCbzmxUkIAg3rX+RrMrx7PL8yod2QvQ2z74qO0nQXs5iIVzXQbBBAiP53nW5T/ty7aH/pBC3HO8fx3Dqa5cLEn1ScKKpvpnBsSAWp/CD7h748xdKf6/DaR7jtTlXS55D51b9P2TdASgA8G5flb5B/Tcw6AE2hlRTkSCeRJgeV/d9se4YiDzqC2coGHhY58Ck/+Bx5mPa2AHl+IKe2XMBoQl+T2/0hEYUpRpEFy1i6DGuDF0XbEwlaRMMFt1GWlL3kWNLCN3jJx7dGG+7F38L69ZObdi96w54EH9kuQb7efDXVjWoCw5JCAdt3IYqQhMFmYmHd9A5TfvAidUbbt+3w/mg9FppL5zkGiSJ1pGEWPgBK9+OjWAKlw6H9nz2S8JuMqhlP X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PR1P264MB3448.FRAP264.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230031)(136003)(366004)(376002)(346002)(396003)(39860400002)(451199024)(186009)(1800799009)(1076003)(107886003)(2616005)(5660300002)(4326008)(8936002)(8676002)(6512007)(26005)(6486002)(6666004)(6506007)(83380400001)(66476007)(66556008)(66946007)(38100700002)(478600001)(41300700001)(6916009)(316002)(36756003)(86362001)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xmC+lCYjyqDyFDTdB/v2wPpmal66jiKWw0LMhPi3gCuNMG6YtGBFHIEfa14j6XPedOzfb0tkEirxkNBgUYQrpNq/MdZ4Mm2f1T2yk4PhaR+AbijRgjtn/qVnlniv3mIeXOjrUavtJeG0bNntxwqdiEP+Zdm8tBGdtLdhmyNW3pn7FjFFiyIddowgXU811ffN4G6yvezbDmfMwFwyPrMwVFa+uxk4UG6NWgdEKOzLjdNKQQtFLMY5sLUGNJJU9AxvE2eVs/S3CleODx/89A46oBpxCcdrnSYsIfspQnkQLFbOAk8nOAyT4MGRJsne7VL77So1pWNPSAqwFYtKXnBDE8OCqNmIGMa6gdkjCrL1KCa3HOJJ4loSm1p6bYu76/fAerWp2PO80UDq0Fgfb7Y9CQ448aUDNhy9u0753fCy9XraYMsqU27wY/r36glvjDLI1sUpRwE/XPLRJmCZUku/6FBKwGFqDEGqtwoL+j+G9WlsVLm1NkSPN4B4vDbE4cnG3A9hrJtksFM8sgWL97zUYvoouni7gYnv9fCJ8J0jga6iqNNatIhNLthZSyXH9mRQ98a1LKxqTE54R3+5Rk3DdZInghQWI8dMVFHEb7UciLGUPQMtRqHKe96AR7NMNAo223uvCYwJoptZegfBvoRxWCqTl5mISc7JXbWPjnlJpo2NDxeBZ0c02UmSJzlNKSe/TcC9lqV46WIiy7zI3wVh6UwvkG92VGh1w77pEMIAOvRmvstRMScJar4ii9uJAG7/SVa81s+AmLZMuOy6XoTdpjTRKatNlKl69DzyhCaW/VBw55CMiPDJybi4pRXIrY7izkEcqvX2tjLSro0hYWWpvppKT3DxNw21CosISe4XwdCz7+hMmjCpZ/Sbu+1uZ6qYrneWmJ2qgoKDPTZj4Ysf56+yYrxI9mzTQqO8S4khfJLSR57LHbZiTnE5U5mkF42M jVKwyEDQXxNsPTc42IHBFDEEOtSZQjclapzuoZ6P56bpymBXyRjDtw50WPguA8ltMsgc8AipABTJ6ltts5pU5bGcctZtnG0DksfcO0f+82RMXFklEN+fPt9DYnCSjVM53v/Ug3FXN01bHvcfLfNL3HAU0L715scxEdmrrJ0LiJ2yTtcliSWZbVbmDVk/Kk3EfIqvSXOxBaKCUOAy3HEg/7tkPxMhJUSEaQjiIW5xiLlxrhZN/ltB4I+M9tawgsAjHLojnlZNEWYqPiNyT9XLeMQpmMyK/YV0QQb8j96YVnwjwKHc7FlSUogOapDovfuvlArz4FdJOvh7IVnJ5tVBbNe/tae069X22ulMrqKQso1vBayhASVi2PKwwfuzaHya6EufFZe0cr5b09/wQ9P/1q8wGrdFV6c4OY0y+IdOw5184ktITjM3S3ZVRoIbiX+3a85wAHgBQ0MusMIrI5Hl7SVb78NYWQcj+GX95GX76QkcFcxaoO/2UO3aGaLKpvKCPU4fAsgWq/p9WO4HXZx0EjTwM+3FWiZXlD0nbtkbndqNYnD92a1L3xMKnmOXmSQ3hAbdVSHRidcZhiNWHW2QU/SqGNx/CbktNjGrfxA+6iEC/X98Ta7xO4Dyfe5H4gypgitmsU5UjDW6nPhEFZ4uOA== X-OriginatorOrg: kalrayinc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 98de96f0-dcca-4d57-152f-08dbb3781426 X-MS-Exchange-CrossTenant-AuthSource: PR1P264MB3448.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Sep 2023 10:07:31.9416 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8931925d-7620-4a64-b7fe-20afd86363d3 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BYvaY7Q5ckGDbROkAl12V2EcgOnVwh8/gGAdPGtS/jScxdEaICndITSGwvTrjOVl0pTZE3vM8c0VTY/lvvvR8Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MRZP264MB2442 X-ALTERMIMEV2_out: done X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Sylvain Noiry via Gcc-patches From: Sylvain Noiry Reply-To: Sylvain Noiry Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Summary: Add a new target hook for complex element creation during the expand pass, called gen_rtx_complex. The default implementation calls gen_rtx_CONCAT like before. Then calls to gen_rtx_CONCAT for complex handling are replaced by calls to targetm.gen_rtx_complex. gcc/ChangeLog: * target.def: Add gen_rtx_complex target hook * targhooks.cc (default_gen_rtx_complex): New: Default implementation for gen_rtx_complex * targhooks.h: Add default_gen_rtx_complex * doc/tm.texi: Document TARGET_GEN_RTX_COMPLEX * doc/tm.texi.in: Add TARGET_GEN_RTX_COMPLEX * emit-rtl.cc (gen_reg_rtx): Replace call to gen_rtx_CONCAT by call to gen_rtx_complex (init_emit_once): Likewise * expmed.cc (flip_storage_order): Likewise * optabs.cc (expand_doubleword_mod): Likewise --- gcc/doc/tm.texi | 6 ++++++ gcc/doc/tm.texi.in | 2 ++ gcc/emit-rtl.cc | 26 +++++++++----------------- gcc/expmed.cc | 2 +- gcc/optabs.cc | 11 ++++++----- gcc/target.def | 10 ++++++++++ gcc/targhooks.cc | 27 +++++++++++++++++++++++++++ gcc/targhooks.h | 2 ++ 8 files changed, 63 insertions(+), 23 deletions(-) diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index c4f935b5746..470497a3ade 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -4620,6 +4620,12 @@ to return a nonzero value when it is required, the compiler will run out of spill registers and print a fatal error message. @end deftypefn +@deftypefn {Target Hook} rtx TARGET_GEN_RTX_COMPLEX (machine_mode @var{mode}, rtx @var{real_part}, rtx @var{imag_part}) +This hook should return an rtx representing a complex of mode @var{machine_mode} built from @var{real_part} and @var{imag_part}. + If both arguments are @code{NULL}, create them as registers. + The default is @code{gen_rtx_CONCAT}. +@end deftypefn + @deftypefn {Target Hook} rtx TARGET_READ_COMPLEX_PART (rtx @var{cplx}, complex_part_t @var{part}) This hook should return the rtx representing the specified @var{part} of the complex given by @var{cplx}. @var{part} can be the real part, the imaginary part, or both of them. diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index b8970761c8d..27a0b321fe0 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -3392,6 +3392,8 @@ stack. @hook TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P +@hook TARGET_GEN_RTX_COMPLEX + @hook TARGET_READ_COMPLEX_PART @hook TARGET_WRITE_COMPLEX_PART diff --git a/gcc/emit-rtl.cc b/gcc/emit-rtl.cc index f6276a2d0b6..22012bfea13 100644 --- a/gcc/emit-rtl.cc +++ b/gcc/emit-rtl.cc @@ -1190,19 +1190,7 @@ gen_reg_rtx (machine_mode mode) if (generating_concat_p && (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT || GET_MODE_CLASS (mode) == MODE_COMPLEX_INT)) - { - /* For complex modes, don't make a single pseudo. - Instead, make a CONCAT of two pseudos. - This allows noncontiguous allocation of the real and imaginary parts, - which makes much better code. Besides, allocating DCmode - pseudos overstrains reload on some machines like the 386. */ - rtx realpart, imagpart; - machine_mode partmode = GET_MODE_INNER (mode); - - realpart = gen_reg_rtx (partmode); - imagpart = gen_reg_rtx (partmode); - return gen_rtx_CONCAT (mode, realpart, imagpart); - } + return targetm.gen_rtx_complex (mode, NULL, NULL); /* Do not call gen_reg_rtx with uninitialized crtl. */ gcc_assert (crtl->emit.regno_pointer_align_length); @@ -6274,14 +6262,18 @@ init_emit_once (void) FOR_EACH_MODE_IN_CLASS (mode, MODE_COMPLEX_INT) { - rtx inner = const_tiny_rtx[0][(int)GET_MODE_INNER (mode)]; - const_tiny_rtx[0][(int) mode] = gen_rtx_CONCAT (mode, inner, inner); + machine_mode imode = GET_MODE_INNER (mode); + rtx inner = const_tiny_rtx[0][(int) imode]; + const_tiny_rtx[0][(int) mode] = + targetm.gen_rtx_complex (mode, inner, inner); } FOR_EACH_MODE_IN_CLASS (mode, MODE_COMPLEX_FLOAT) { - rtx inner = const_tiny_rtx[0][(int)GET_MODE_INNER (mode)]; - const_tiny_rtx[0][(int) mode] = gen_rtx_CONCAT (mode, inner, inner); + machine_mode imode = GET_MODE_INNER (mode); + rtx inner = const_tiny_rtx[0][(int) imode]; + const_tiny_rtx[0][(int) mode] = + targetm.gen_rtx_complex (mode, inner, inner); } FOR_EACH_MODE_IN_CLASS (mode, MODE_VECTOR_BOOL) diff --git a/gcc/expmed.cc b/gcc/expmed.cc index 973c16a14d3..ce935951781 100644 --- a/gcc/expmed.cc +++ b/gcc/expmed.cc @@ -400,7 +400,7 @@ flip_storage_order (machine_mode mode, rtx x) real = flip_storage_order (GET_MODE_INNER (mode), real); imag = flip_storage_order (GET_MODE_INNER (mode), imag); - return gen_rtx_CONCAT (mode, real, imag); + return targetm.gen_rtx_complex (mode, real, imag); } if (UNLIKELY (reverse_storage_order_supported < 0)) diff --git a/gcc/optabs.cc b/gcc/optabs.cc index 32ff379ffc3..429a20f9cd7 100644 --- a/gcc/optabs.cc +++ b/gcc/optabs.cc @@ -1001,16 +1001,17 @@ expand_doubleword_mod (machine_mode mode, rtx op0, rtx op1, bool unsignedp) machine_mode cmode = TYPE_MODE (ctype); rtx op00 = operand_subword_force (op0, 0, mode); rtx op01 = operand_subword_force (op0, 1, mode); - rtx cres = gen_rtx_CONCAT (cmode, gen_reg_rtx (word_mode), - gen_reg_rtx (word_mode)); + rtx cres = targetm.gen_rtx_complex (cmode, gen_reg_rtx (word_mode), + gen_reg_rtx (word_mode)); tree lhs = make_tree (ctype, cres); tree arg0 = make_tree (wtype, op00); tree arg1 = make_tree (wtype, op01); expand_addsub_overflow (UNKNOWN_LOCATION, PLUS_EXPR, lhs, arg0, arg1, true, true, true, false, NULL); - sum = expand_simple_binop (word_mode, PLUS, XEXP (cres, 0), - XEXP (cres, 1), NULL_RTX, 1, - OPTAB_DIRECT); + sum = expand_simple_binop (word_mode, PLUS, + read_complex_part (cres, REAL_P), + read_complex_part (cres, IMAG_P), + NULL_RTX, 1, OPTAB_DIRECT); if (sum == NULL_RTX) return NULL_RTX; } diff --git a/gcc/target.def b/gcc/target.def index f99df939776..d63dacbbb8f 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -3313,6 +3313,16 @@ a pointer to int.", bool, (ao_ref *ref), default_ref_may_alias_errno) +/* Return the rtx representation of a complex with a specified mode. */ +DEFHOOK +(gen_rtx_complex, + "This hook should return an rtx representing a complex of mode @var{machine_mode} built from @var{real_part} and @var{imag_part}.\n\ + If both arguments are @code{NULL}, create them as registers.\n\ + The default is @code{gen_rtx_CONCAT}.", + rtx, + (machine_mode mode, rtx real_part, rtx imag_part), + default_gen_rtx_complex) + /* Returns the value corresponding to the specified part of a complex. */ DEFHOOK (read_complex_part, diff --git a/gcc/targhooks.cc b/gcc/targhooks.cc index df852eb18e3..f6e7bc6c141 100644 --- a/gcc/targhooks.cc +++ b/gcc/targhooks.cc @@ -1533,6 +1533,33 @@ default_preferred_simd_mode (scalar_mode) return word_mode; } +/* By default, call gen_rtx_CONCAT. */ + +rtx +default_gen_rtx_complex (machine_mode mode, rtx real_part, rtx imag_part) +{ + /* For complex modes, don't make a single pseudo. + Instead, make a CONCAT of two pseudos. + This allows noncontiguous allocation of the real and imaginary parts, + which makes much better code. Besides, allocating DCmode + pseudos overstrains reload on some machines like the 386. */ + machine_mode imode = GET_MODE_INNER (mode); + + if (real_part == NULL) + real_part = gen_reg_rtx (imode); + else + gcc_assert ((GET_MODE (real_part) == imode) + || (GET_MODE (real_part) == E_VOIDmode)); + + if (imag_part == NULL) + imag_part = gen_reg_rtx (imode); + else + gcc_assert ((GET_MODE (imag_part) == imode) + || (GET_MODE (imag_part) == E_VOIDmode)); + + return gen_rtx_CONCAT (mode, real_part, imag_part); +} + /* By default, extract one of the components of the complex value CPLX. Extract the real part if part is REAL_P, and the imaginary part if it is IMAG_P. If part is BOTH_P, return cplx directly. */ diff --git a/gcc/targhooks.h b/gcc/targhooks.h index dcacc725e27..cf37eea24b5 100644 --- a/gcc/targhooks.h +++ b/gcc/targhooks.h @@ -124,6 +124,8 @@ extern opt_machine_mode default_get_mask_mode (machine_mode); extern bool default_empty_mask_is_expensive (unsigned); extern vector_costs *default_vectorize_create_costs (vec_info *, bool); +extern rtx default_gen_rtx_complex (machine_mode mode, rtx real_part, + rtx imag_part); extern rtx default_read_complex_part (rtx cplx, complex_part_t part); extern void default_write_complex_part (rtx cplx, rtx val, complex_part_t part);