From patchwork Tue Jul 7 10:47:05 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikael Pettersson X-Patchwork-Id: 138648 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1780C4BA2E13 for ; Tue, 7 Jul 2026 10:52:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1780C4BA2E13 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=EBYJKFEr X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [IPv6:2a00:1450:4864:20::12c]) by sourceware.org (Postfix) with ESMTPS id 4147D4BA5435 for ; Tue, 7 Jul 2026 10:51:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4147D4BA5435 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 4147D4BA5435 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::12c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1783421519; cv=none; b=F82DxxF87Uw15MSRxiTajjNzo4bx/bAsTzvCNpLHWXVt33rKstQXV989GhiuCFmRlzbKUnPXaoEb17BF3rvYYKSg7IichUDoJJIO2s8mZ4hfdXt3fis+NaQZwnm5wXeyjHYrOAud7irR3mHcvg1R2zCt2IeUGQ3pz+k8baJ7wfg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1783421519; c=relaxed/simple; bh=Isv6Qyi4ygvyfqbuwGqtfVy3Mt0DqxyrolFLrcxjN1Y=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=xauuZLNyTlffGPBGPWz5+kx3Ez1arw2QOSIBGGzRz6FpqzjiZm5Lv+kFAVgYP/VVHVXFhM4FKnM+Pgvop+lEHssJ5/zfnN1J8zNYgfS3PwgyT5FERX+ZnbnXxEnxjz0suSvMzjqn7gSOLPnGXlttHpwVVeqFaAKZpqVDQqTrtfQ= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=EBYJKFEr DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4147D4BA5435 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-5aeb36ed873so2830617e87.0 for ; Tue, 07 Jul 2026 03:51:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783421518; x=1784026318; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=YShm33KnTv+5sh6opyBCvuwVF21SGdq1k3lSdrRVyXk=; b=EBYJKFErQtHWlxm07FXLiomhvj42ZdpB4Rf11rY5xTPz3rlFQGT0GhAZPmqDRHqgYK Qnd6Mz2j2DQpIBAmzgppsGVs37Y+jvuicFttMyuSMUBowP4EohHbb/BCB2QOLLozvEwR kXTQnGTK1c7JSDztZEM4z+gicxrJZdgdjRixjLn5oZ0AGNzhGRzvfpE26llWbwsmkYtd chSbojbGoRSoXZDAYaIu/sIjc1XptUkwhwrW8eFdw1yOgTcYU6qrVWDzTEeSc14RyYHK jjveSPEDwjQfZfNyvMwA/OmyQrep0D+ZpZi6Bo85dYb7qUEuSo48hoN3pS+HLTgEqJFY 7GBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783421518; x=1784026318; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YShm33KnTv+5sh6opyBCvuwVF21SGdq1k3lSdrRVyXk=; b=o9Q0qk8G3huoCzYpdCaFZwbcIL8/mi6CF5fn0WwUFUDTJsp0GkJS2D1nm8n4gzEO/q wq05HH+2fdl+/fi9SvBbgeSJnXyM9RihMN+P2zGDlvfQIkh/Sbr1lREp44uoHWR7ruLs 91KgWJAs7z5HdsgexROfaiYFqwvzfFhOXtuv2hHDyu6rczeSmhyME9mGtKtn/3FtjSbi d12SqbJYqWGKZjS+Lf6RgObosQY+PzZhs9pP0Lt+W/3MQATFvkSz3U5QT/fSvNxa84GC 4owLqXbCXbhnnPVtyyCtfDP6aEnXIzUYFx1Etk0yPKoHRXc0YNZ0YWrTc4MsXgkpsjZB 7Yzw== X-Gm-Message-State: AOJu0Yz67Z+qFtpgg/lV90EKOtj0wFd1b6GuEfZ7sUWrGGPcxL7FH0eS zVN5dOYw+Ux0fJX4UGQiiVymwIxO94g+pUYLQwOWUtVOanEDOEeinfUfsj9IXUAy X-Gm-Gg: AfdE7cmJY0tZzRqLHLtxMDeQI2d6QSrTATDPDsaomirCtErv5yd2msJFEb7IOIj85xR Tgz4OtGA+zthnGK3wdRcARYVjHMJ4gwX24R3rWlarwwnB3YBp+QCnOtTxdJqYu7sKEbU+8g0HvR faunWxtTntBSl0O/bo0GgzmdRgswRo+YzYHk1JKcOu9I9jmFXFZ6xl2Fh1epXPQbWWCxv6vhZ83 JgMGNv8BfH8V+DpEUoIMt/qedv0rZn8m2cVdQglBUtS5Tsjn3V4n4j8Io2Ln0KMNqE9XHuCytxO 45/EyAj6sAqdRneP0nZ/i4jrgkJ+VvAzA6jpCpwkc2yj7aQdPhzXmGn7d8vN35Sjuhaq3CilhFS C0OsOLFnRO4gh6wsbPlGvq8+2iB1wl7FHst92gS9F7Xoa3XO/NUWXsEikT9MFSG//EQsZHpH68b 2XH0ndM/lvzj6Op2UyzXMZ4BQ7grreNXtvevDg2y1nDswHp2NdNOzDy3bc5pGwcJLhqx3558gX X-Received: by 2002:a05:6512:65ca:b0:5ae:b688:8b9e with SMTP id 2adb3069b0e04-5b007b96343mr815485e87.21.1783421517497; Tue, 07 Jul 2026 03:51:57 -0700 (PDT) Received: from hallertau (ip072.net-81-16-170.koping.net. [81.16.170.72]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5aed13c8a90sm3582172e87.78.2026.07.07.03.51.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 03:51:57 -0700 (PDT) From: Mikael Pettersson To: gcc-patches@gcc.gnu.org Cc: Mikael Pettersson Subject: [PATCH] m68k: prevent moves with pre-dec src overlapping with dst (PR123853) Date: Tue, 7 Jul 2026 12:47:05 +0200 Message-ID: <20260707104821.64917-2-mikpelinux@gmail.com> X-Mailer: git-send-email 2.54.0 MIME-Version: 1.0 X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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~patchwork=sourceware.org@gcc.gnu.org Since gcc-15 combine can produce moves from a PRE_DEC source to a destination that uses the same register, causing wrong code on m68k. In particular the glibc build is broken. This adjusts the m68k backend to reject such moves: move.l -(%a0),(%a0,%d0.l) and instead emit: lea (%a0,%d0.l),%a1 move.l -(%a0),(%a1) Bootstrapped and regression tested on m68k-linux-gnu, no regressions. Ok for trunk? And maybe gcc-16/15 after a week? gcc/ 2026-07-07 Mikael Pettersson PR rtl-optimization/123853 * config/m68k/m68k-protos.h (check_move_simode): Declare. * config/m68k/m68k.cc (check_move_simode): New, reject moves from a pre-dec source mem whose reg occurs in the destination address. * config/m68k/m68k.md (*movsi_m68k): Add check_move_simode to condition. (*movsi_m68k2): Likewise. --- gcc/config/m68k/m68k-protos.h | 1 + gcc/config/m68k/m68k.cc | 25 +++++++++++++++++++++++++ gcc/config/m68k/m68k.md | 4 ++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/gcc/config/m68k/m68k-protos.h b/gcc/config/m68k/m68k-protos.h index abb8e9b061d..248414eb167 100644 --- a/gcc/config/m68k/m68k-protos.h +++ b/gcc/config/m68k/m68k-protos.h @@ -26,6 +26,7 @@ extern HOST_WIDE_INT m68k_initial_elimination_offset (int from, int to); extern void split_di (rtx[], int, rtx[], rtx[]); extern bool valid_mov3q_const (HOST_WIDE_INT); +extern bool check_move_simode (const rtx *); extern const char *output_move_simode (rtx *); extern const char *output_move_himode (rtx *); extern const char *output_move_qimode (rtx *); diff --git a/gcc/config/m68k/m68k.cc b/gcc/config/m68k/m68k.cc index b6134892883..e95b83f5e18 100644 --- a/gcc/config/m68k/m68k.cc +++ b/gcc/config/m68k/m68k.cc @@ -3227,6 +3227,31 @@ valid_mov3q_const (HOST_WIDE_INT i) return TARGET_ISAB && (i == -1 || IN_RANGE (i, 1, 7)); } +/* Return true if OPERANDS[] are valid for output_move_simode. + In particular, if OPERANDS[1] is a MEM with PRE_DEC adressing + and its REG is mentioned in OPERANDS[0], it's invalid. */ + +bool +check_move_simode (const rtx *operands) +{ + rtx src = operands[1]; + if (MEM_P (src)) + { + rtx src1 = XEXP (src, 0); + if (GET_CODE (src1) == PRE_DEC) + { + rtx src2 = XEXP (src1, 0); + if (REG_P (src2)) + { + rtx dst = operands[0]; + if (reg_overlap_mentioned_p (src2, dst)) + return false; + } + } + } + return true; +} + /* Return an instruction to move CONST_INT OPERANDS[1] into OPERANDS[0]. I is the value of OPERANDS[1]. */ diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index e77ac13cf1b..f8b6a2f79dd 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -993,7 +993,7 @@ ;; We don't allow f-regs since fixed point cannot go in them. [(set (match_operand:SI 0 "nonimmediate_operand" "=g,d,a<") (match_operand:SI 1 "general_src_operand" "damSnT,n,i"))] - "!TARGET_COLDFIRE && reload_completed" + "!TARGET_COLDFIRE && reload_completed && check_move_simode (operands)" { return output_move_simode (operands); } @@ -1006,7 +1006,7 @@ [(set (match_operand:SI 0 "nonimmediate_operand" "=g,d,a<") (match_operand:SI 1 "general_src_operand" "damSKT,n,i"))] - "!TARGET_COLDFIRE" + "!TARGET_COLDFIRE && check_move_simode (operands)" { return output_move_simode (operands); }