From patchwork Wed Jan 17 17:03:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikael Pettersson X-Patchwork-Id: 188904 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:30f:b0:101:a8e8:374 with SMTP id ia15csp61776dyb; Wed, 17 Jan 2024 09:26:56 -0800 (PST) X-Google-Smtp-Source: AGHT+IEaC8veBvspAZMta1SJ68yRGINZJQNP1KuxeRJBlmS+DBrHGfBiutjV7Fm/u0j/7QWrCSdA X-Received: by 2002:a9d:7d04:0:b0:6dd:dbda:539e with SMTP id v4-20020a9d7d04000000b006dddbda539emr9903460otn.16.1705512416125; Wed, 17 Jan 2024 09:26:56 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1705512416; cv=pass; d=google.com; s=arc-20160816; b=C4IZCoewPtQaRGrdu7B3/9NWEYPvu9i9ulyRYKuyJqJ/UF71LVn8vOJfjvdBiPorgG b9PkwicdtyNLu2N2bDFU8mT9YdFhx9WESg+RqfYdt/msVavQNe7o9eh96Bz9aNohmTAq P7BjNZhjWEHsB2sVVYSAB3or5WkAlpQ03ydhWyCXoQmsuDACgz7NRX5x/Fj87SyAsXJZ HjBihrtUCe32DVDEAsA6j4dsqFsRFvT7HA9q9orguepv+NxPtzBRGvVzGzTSAERBdDQi LKlhQv7mwkcDNR+mYSl9KeczfpAWXof+IRvRGtSvNDqaCs51MpfgrS4yWIu2QUW0GZ8e 6yoA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:message-id:date:subject:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=BqhUiKS4bWHlcr4/uq8h0XWPp7y6W+LrsjYxpu2+jWk=; fh=hPrbWPhweUx4V0GV9uXJqbyAzg2ABmTz7kczrAQqMmM=; b=v7X3fZC7vP37OHUG8/n5l03Nb127sXLVe8o/3dHdHA4YQzAoNgwXnZFglGtbeUgLtt 16rjRp0LmOh58pq+Px4vmdXpUcqejdbCQ8HHxt2FGvBZfQYSHKeIa/R7zSFfXJCjVfPE OEQqMI11e1RouB9f9ZF2W7L+5mphP8I7Nk2ad11h8aAeDhJd3SAwQWxgjGMzXQqUkylJ O3yS2XPfTp5bp4KexCBjbb4VwXdjJD2PwFrTh17hVqJdicQtluTuT8G1PytPIzRovEfz z+pkgjS1rz1CgwzekNiQjMTAYtkAz4ORyBfrosfHbEx3J8LmmImENLmNDvo3qM1Vd5qH c7Kg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=WtxSUVxS; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id c21-20020a05622a025500b00429b3fb163fsi11826853qtx.569.2024.01.17.09.26.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jan 2024 09:26:56 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=WtxSUVxS; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C7FC63858C2C for ; Wed, 17 Jan 2024 17:26:55 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) by sourceware.org (Postfix) with ESMTPS id DC08C3858415 for ; Wed, 17 Jan 2024 17:25:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DC08C3858415 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org DC08C3858415 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::132 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705512351; cv=none; b=cBX9D6T/WsDb04ZmdOLjYWtyKGRnsuBJTVrPrA0Aiax83/bvhNcjzQAYaU7yuU62+XaMm6hQJB27PHQkNL5cD+qAAk67ihP7/LilzrbQeh0g5gwuS22FZRIitwlGI1gRdDNNyh21FzEqU3rObJ3SYgH/ohNRq9rOq48+Whoz8AA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705512351; c=relaxed/simple; bh=q8ZjnhMECMEBzDuCQTDxKBmR2IPbY9dU5rPLLGJkT2s=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=trb+MzaOVOyKLOxFQ++xm8VP79gdc9zvvX9qVn4qfesN55kZydvkbGfLNizCuk2sLwVlMQCNdnCdCkPRoGFb9Jh1gMr+gnXS+gPw4fFZKng69jvsmjXzECf2GgwnKdvc/rtc/13TN/c0EcVjXwg9lUDInvChU4SSou2KMphBcek= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-50ea98440a7so12115142e87.1 for ; Wed, 17 Jan 2024 09:25:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705512347; x=1706117147; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=BqhUiKS4bWHlcr4/uq8h0XWPp7y6W+LrsjYxpu2+jWk=; b=WtxSUVxSOY/H8T9FjXKzGJk2oZ/fqwNae+wb5R+y5BulYHmYrohdmBqB+gRhTr6R9H j+Q4rRWy3D1xIWIRjqWdXSAnJxXQ2DXo3erSLILA5QTk9ktlUFuRx054aIKy9BeqUerP tY0Ip1cu0LlnNqpNg9NazE3Ddlzywt0X1Bh9+jjHUFI+pO8U/xd4TAXp9dZCo2+99eLO VFoWleWkthYKZuR1c26UrRYcp9nrwN2Aegzt7X127By4QMZiR7d6Lb1FTD9qWpLBza14 qvguxOCZg9XxvQHwV2CxRLD/prnWk8b0XmLVrG2BkkRriRiNzUVybNxMK03+N25y1HVj jCjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705512347; x=1706117147; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=BqhUiKS4bWHlcr4/uq8h0XWPp7y6W+LrsjYxpu2+jWk=; b=kQmlBI95ARCTU2P2jDMfcXPpkMht7VeHQt9f46y0S7003vJoSpFVvlIgSYoIOZ1ETj 7YwxrNpFh738iH4UrYUL4+XG0/5Fr9Q3J6qIqxNwmOXpJ4420R5gjeciRpUfrXeiX5B6 UulN8QQztGCiZHgtfN5SlsqcUTDOiUoDxAI+pQIYdwbJXgrq/56PwLmrc90aq4xSJUQx tgxwT3PUuiBHtN0eTxWE73DQRj8z4LWU1/zidBJb6fz7wetu0/1zn9j2h/L3WsTaKI+x YOgsYk1kRfGSCfcU2Vai32CHavMJwn1tXmLTrffv7u8M2OIe1jcK4oasakA2fO2bC0L2 Amdw== X-Gm-Message-State: AOJu0Yxxak0Oero+TFPNUV5UfyLwdSjzpZo8qIYCPRtpu0cXeiFM2y5x xV77Oz4BNsmeniQBUVwzUZiWAK10hj/veA== X-Received: by 2002:a05:6512:3a8c:b0:50e:75ec:26ed with SMTP id q12-20020a0565123a8c00b0050e75ec26edmr3431155lfu.47.1705512346569; Wed, 17 Jan 2024 09:25:46 -0800 (PST) Received: from hallertau.. (ip006.net-192-176-117.koping.net. [192.176.117.6]) by smtp.gmail.com with ESMTPSA id g22-20020a056512119600b0050e7a97ae32sm308559lfr.78.2024.01.17.09.25.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jan 2024 09:25:45 -0800 (PST) From: Mikael Pettersson To: gcc-patches@gcc.gnu.org Subject: [PATCH] Avoid ICE on m68k -fzero-call-used-regs -fpic [PR110934] Date: Wed, 17 Jan 2024 18:03:11 +0100 Message-ID: <20240117172527.27233-1-mikpelinux@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788359386853726093 X-GMAIL-MSGID: 1788359386853726093 PR110934 is a problem on m68k where -fzero-call-used-regs -fpic ICEs when clearing an FP register. The generic code generates an XFmode move of zero to that register, which becomes an XFmode load from initialized data, which due to -fpic uses a non-constant address, which the backend rejects. The zero-call-used-regs pass runs very late, after register allocation and frame layout, and at that point we can't allow new uses of the PIC register or new pseudos. To clear an FP register on m68k it's enough to do the move in SFmode, but the generic code can't be told to do that, so this patch updates m68k to use its own TARGET_ZERO_CALL_USED_REGS. Bootstrapped and regression tested on m68k-linux-gnu. Ok for master? (I don't have commit rights.) gcc/ PR target/110934 * config/m68k/m68k.cc (m68k_zero_call_used_regs): New function. (TARGET_ZERO_CALL_USED_REGS): Define. gcc/testsuite/ PR target/110934 * gcc.target/m68k/pr110934.c: New test. --- gcc/config/m68k/m68k.cc | 46 ++++++++++++++++++++++++ gcc/testsuite/gcc.target/m68k/pr110934.c | 9 +++++ 2 files changed, 55 insertions(+) create mode 100644 gcc/testsuite/gcc.target/m68k/pr110934.c diff --git a/gcc/config/m68k/m68k.cc b/gcc/config/m68k/m68k.cc index e9325686b92..72a29d772ea 100644 --- a/gcc/config/m68k/m68k.cc +++ b/gcc/config/m68k/m68k.cc @@ -197,6 +197,7 @@ static bool m68k_modes_tieable_p (machine_mode, machine_mode); static machine_mode m68k_promote_function_mode (const_tree, machine_mode, int *, const_tree, int); static void m68k_asm_final_postscan_insn (FILE *, rtx_insn *insn, rtx [], int); +static HARD_REG_SET m68k_zero_call_used_regs (HARD_REG_SET need_zeroed_hardregs); /* Initialize the GCC target structure. */ @@ -361,6 +362,9 @@ static void m68k_asm_final_postscan_insn (FILE *, rtx_insn *insn, rtx [], int); #undef TARGET_ASM_FINAL_POSTSCAN_INSN #define TARGET_ASM_FINAL_POSTSCAN_INSN m68k_asm_final_postscan_insn +#undef TARGET_ZERO_CALL_USED_REGS +#define TARGET_ZERO_CALL_USED_REGS m68k_zero_call_used_regs + TARGET_GNU_ATTRIBUTES (m68k_attribute_table, { /* { name, min_len, max_len, decl_req, type_req, fn_type_req, @@ -7166,4 +7170,46 @@ m68k_promote_function_mode (const_tree type, machine_mode mode, return mode; } +/* Implement TARGET_ZERO_CALL_USED_REGS. */ + +static HARD_REG_SET +m68k_zero_call_used_regs (HARD_REG_SET need_zeroed_hardregs) +{ + rtx zero_fpreg = NULL_RTX; + + for (unsigned int regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) + if (TEST_HARD_REG_BIT (need_zeroed_hardregs, regno)) + { + rtx reg, zero; + + if (INT_REGNO_P (regno)) + { + reg = regno_reg_rtx[regno]; + zero = CONST0_RTX (SImode); + } + else if (FP_REGNO_P (regno)) + { + reg = gen_raw_REG (SFmode, regno); + if (zero_fpreg == NULL_RTX) + { + /* On the 040/060 clearing an FP reg loads a large + immediate. To reduce code size use the first + cleared FP reg to clear remaing ones. Don't do + this on cores which use fmovecr. */ + zero = CONST0_RTX (SFmode); + if (TUNE_68040_60) + zero_fpreg = reg; + } + else + zero = zero_fpreg; + } + else + gcc_unreachable (); + + emit_move_insn (reg, zero); + } + + return need_zeroed_hardregs; +} + #include "gt-m68k.h" diff --git a/gcc/testsuite/gcc.target/m68k/pr110934.c b/gcc/testsuite/gcc.target/m68k/pr110934.c new file mode 100644 index 00000000000..8c21d46f660 --- /dev/null +++ b/gcc/testsuite/gcc.target/m68k/pr110934.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { do-options "-fzero-call-used-regs=used -fpic -O2" } */ + +extern double clobber_fp0 (void); + +void foo (void) +{ + clobber_fp0 (); +}