From patchwork Thu Jan 18 16:39:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikael Pettersson X-Patchwork-Id: 84358 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 4149B3858C3A for ; Thu, 18 Jan 2024 16:41:50 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) by sourceware.org (Postfix) with ESMTPS id 131E2385840C for ; Thu, 18 Jan 2024 16:41:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 131E2385840C 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 131E2385840C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::136 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705596070; cv=none; b=VGNWXNIe70qfecfyPe1ANtoQS0DEEmVcsX13O1hzouP3sA8fA8R/1SIJ+bFykEC+OUT29aQy+Nz1ZDJG7WTKa1K8Y4Fa9y0o7a2q3lwgdvTjGoTGTjEw/joUBiQuJPQEWrC4jNPrBb3OtvX5ebKEOSvLEF9uZHGx38SYYDDj0ko= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705596070; c=relaxed/simple; bh=F3pnyZtQuLsSA+IRMcxn/JJkWEglgJcEvtpsX0H+9YY=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=eA1DwQxbNqsj93cbaMoqXjusfson/QRXixrPeaUc7zs3cVjEcuWh28+owoLDyuRr/6/XdGVEzl6hYSTpGtfEsw0czG3mzO8qJVIGOdCWv2ipkR0GakHKfAyte94WRjAN/lbxEdGETWaDWCu0/Hj92RWl4V2UrxWZU6TH+9ensoI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-50eabfac2b7so15032808e87.0 for ; Thu, 18 Jan 2024 08:41:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705596065; x=1706200865; 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=xQtRnUkF59asjvLw97VuwkNB0psq/ryLSwOJJ9AxSzg=; b=TzWe789LefU+l7CzXRIuMwMMkPd6qnHrLIIWDyGnA5ukx/ENAMXa8Gg/CaTW0L30uP PfgAClDi8G92XkIuyOhpZr3Hy8UIgk9Mzmy7QSwogzoo2k8mPp2q7SRXtF+taT6uAMn3 L5+MryrfXuSKoQ9S35RR9uzhwoiaZSrJAeChq/gyuqWllfXjsrt0ZNd7rWXvCeYjJmCd APGpJB8gi+TkW+reD7o3wRMet3jeC3Ku5w5ghEc/h2QbhNFqGJgf16x9VCuSmd9CY/p8 cQtimHygZfSETiIEBxUTiAhSCPW67Y1Flhqcb7o5y/i5EUav66L6du61aM4MtaxMAGfC w0zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705596065; x=1706200865; 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=xQtRnUkF59asjvLw97VuwkNB0psq/ryLSwOJJ9AxSzg=; b=brYEXehZPSIq9tG4ILF9m1/ix4VjpnrrT9dRGlBSlrf+Y6yY5/dQG9/ALN00M3pU2S zEYe4MylWSfVEtEoGoCBGm1zW/LLQPAc9MC+ilVRjAnUBrZ2tWIfcaOOWwdIX3a9BNPG AReJRpB/tZUWDFZkKVSQ4eySxCvCKiuMiVYYEDPSeqYL1CNH2xw/tP+QuVFNgmyO5BzQ F1AuZGyOPV47KzOt2zMSvTMHhuzIq8BO26tPGdVAg3+ZIJoHXTrX+LFzCx4B1lgqmyvD GzehOtCe5VHP6EScmDOdNV3GIM+BiSZbLTSbVx1Kwf3wtQj6WcLAeOtVMVaV/A/7AU1a TACw== X-Gm-Message-State: AOJu0YylS1YjXAwQF2qqeGt8UxFVl7nPxztgWS4bnfYcEnwaoABHbLDG u50o7gvyydiFfCM36hRmpS2Ohb9rhuYn0m2+5Vz67CUPek3dj3MmzZLsiZiJpNM= X-Google-Smtp-Source: AGHT+IFE9NYTZlSXMaPLiZTQNVQCpFHx7ubHIu3iI/UuCgFGYsCwM+NaqY+5bbQs010r53ZxLxynGA== X-Received: by 2002:a05:6512:3b2c:b0:50e:73fe:c4ab with SMTP id f44-20020a0565123b2c00b0050e73fec4abmr796293lfv.94.1705596065132; Thu, 18 Jan 2024 08:41:05 -0800 (PST) Received: from hallertau.. (ip006.net-192-176-117.koping.net. [192.176.117.6]) by smtp.gmail.com with ESMTPSA id p9-20020a056512234900b0050e3615f608sm691367lfu.209.2024.01.18.08.41.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jan 2024 08:41:04 -0800 (PST) From: Mikael Pettersson To: gcc-patches@gcc.gnu.org Subject: [PATCH] Avoid ICE in single-bit logical RMWs on m68k-uclinux [PR108640] Date: Thu, 18 Jan 2024 17:39:26 +0100 Message-ID: <20240118164052.11548-1-mikpelinux@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Spam-Status: No, score=-11.2 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+patchwork=sourceware.org@gcc.gnu.org When generating RMW logical operations on m68k, the backend recognizes single-bit operations and rewrites them as bit instructions on operands adjusted to address the intended byte. When offsetting the addresses the backend keeps the modes as SImode, even though the actual access will be in QImode. The uclinux target defines M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P which adds a check that the adjusted operand is within the bounds of the original object. Since the address has been offset it is not, and the compiler ICEs. The bug is that the modes of the adjusted operands should have been narrowed to QImode, which is that this patch does. Nearby code which narrows to HImode gets that right. Bootstrapped and regression tested on m68k-linux-gnu. Ok for master? (Note: I don't have commit rights.) gcc/ PR target/108640 * config/m68k/m68k.cc (output_andsi3): Use QImode for address adjusted for 1-byte RMW access. (output_iorsi3): Likewise. (output_xorsi3): Likewise. gcc/testsuite/ PR target/108640 * gcc.target/m68k/pr108640.c: New test. --- gcc/config/m68k/m68k.cc | 6 +++--- gcc/testsuite/gcc.target/m68k/pr108640.c | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.target/m68k/pr108640.c diff --git a/gcc/config/m68k/m68k.cc b/gcc/config/m68k/m68k.cc index e9325686b92..6cd45b53406 100644 --- a/gcc/config/m68k/m68k.cc +++ b/gcc/config/m68k/m68k.cc @@ -5471,7 +5471,7 @@ output_andsi3 (rtx *operands) operands[1] = GEN_INT (logval); else { - operands[0] = adjust_address (operands[0], SImode, 3 - (logval / 8)); + operands[0] = adjust_address (operands[0], QImode, 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } return "bclr %1,%0"; @@ -5510,7 +5510,7 @@ output_iorsi3 (rtx *operands) operands[1] = GEN_INT (logval); else { - operands[0] = adjust_address (operands[0], SImode, 3 - (logval / 8)); + operands[0] = adjust_address (operands[0], QImode, 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } return "bset %1,%0"; @@ -5548,7 +5548,7 @@ output_xorsi3 (rtx *operands) operands[1] = GEN_INT (logval); else { - operands[0] = adjust_address (operands[0], SImode, 3 - (logval / 8)); + operands[0] = adjust_address (operands[0], QImode, 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } return "bchg %1,%0"; diff --git a/gcc/testsuite/gcc.target/m68k/pr108640.c b/gcc/testsuite/gcc.target/m68k/pr108640.c new file mode 100644 index 00000000000..5f3e8b49d42 --- /dev/null +++ b/gcc/testsuite/gcc.target/m68k/pr108640.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { do-options "-O1" } */ + +int x; +void andsi3(void) { x &= ~(1 << 16); } +void iorsi3(void) { x |= (1 << 16); } +void xorsi3(void) { x ^= (1 << 16); }