From patchwork Mon Nov 13 21:49:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Uros Bizjak X-Patchwork-Id: 1863388 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=DteSQnNz; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4STjl45KLbz1yR8 for ; Tue, 14 Nov 2023 08:49:52 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3E9C4388EC2C for ; Mon, 13 Nov 2023 21:49: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 578F73857C43 for ; Mon, 13 Nov 2023 21:49:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 578F73857C43 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 578F73857C43 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=1699912178; cv=none; b=dcffuxJGGFi0cokkXLcEAEFMa9eBwrVqotUZl2+c0NTThBA2h/VuvNrVolI34XYNRdPu8paFJdlr2W/UlWdLkX8s2HaN9VSgMdT2GLxdBaFv1hHwx9mYCwDxet2KKSZTXctJSYBbQk1/1SSUH8Ph9xAFECYTUc1agOwzuJo4nQI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699912178; c=relaxed/simple; bh=ovWErq8uCeUaKmoxQYuzwcKhfDpR3EL1iPkgBtKaGn4=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=jLzgc4FTncE2jWEFIvbbHP6N1xJ8Un6yZyE3FuLZdFs/l3+7LdrTqIfX76E9tSx1jRqDY9vGsKL5TSzcTHQQ6sjuNrfzAkW73FwLls1ip6uG4DwlDE41loTtMOhf3Jp8IND5SZVa7LsGlxXhJAE5yqQm3XdVCjsbFHpl//rP/kw= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-50943ccbbaeso7077150e87.2 for ; Mon, 13 Nov 2023 13:49:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699912175; x=1700516975; darn=gcc.gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=hFp3PLo1yWK/BPvgUKIbhLQeKnONGRAqi8qiqE1fM/8=; b=DteSQnNzuJBGhoM4slfXoRY8nfLKQmqTJM3wd+dm1nxTkvU+DKR2m6IsYJnWaen0yK bfP9L9QcsMCcmxBzNbhi8V9kUg+WLGrOLwuqCD2hFAdYspc05VQMkremnBuQ7BkF5BU6 xCB/lOQhdbfB/f5tko7veFZkM8FT9UsORjdVs4BC1xAZM1GA4T0j5pwxKr38ycgjo7ul dPJC7IYDKa7IlLhdFYEd7mGGGsnVFel2SLgPdj4xhyONRavVQTds5e2yt3AzQ+dpK2p+ UO4K10FMoUFe1rOupDMKhNwDf6L7iMTND21HAxB6qdXl6M5RyXnhNoHLg/OvPSajYQub J8Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699912175; x=1700516975; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=hFp3PLo1yWK/BPvgUKIbhLQeKnONGRAqi8qiqE1fM/8=; b=GZYeaSNj5U2nWqDZo9Nwl5QmVrsIOg7UACqw/8bCyHL6GjpyHQ39HUGBzOsiXAXvGZ FYE/rgohD9O1LAsH6P7etFwLmiLuq0bu44cXAzRztbHCyX/o+DrzkKj25bBWJpJJlJmd +1svWnlQaLHQ6p5OOfGeGY6rvW726SdRhbjd3flE/CEZzmEwyIsJqNJ/08Hp62lGDJu6 VYLCzOI3vD29BI+JNplu6B3sUrBozlDotRvvvTi23m6OYW0LYrpR/woMLDPvky6mFklx 55nHnvfjSZAN0I4FopjJ7Cjya/W+HPMJIVUXAAz6o1cA5mdPXKEdragYCLUwlRIkO9uJ Bujw== X-Gm-Message-State: AOJu0YwVkf9m2EODdt5wwvCo1N207flSgZSzxx0OmJ0Sq7nGrpQzNtqC hkoy3g4IbRR1v77yzuczHHcHIcI0YC9ZwhzcGa0BZ74ULexzHw== X-Google-Smtp-Source: AGHT+IGjPvMQwZWug4/4rAZBNG5ZBrGnWnGwFt5pgUKFVhDIdCxs5IqkP1pJfQ5fniNgHgpmFKZpaGFZg8djXV5GtIw= X-Received: by 2002:a19:e041:0:b0:509:4025:1ac6 with SMTP id g1-20020a19e041000000b0050940251ac6mr5239311lfj.54.1699912175225; Mon, 13 Nov 2023 13:49:35 -0800 (PST) MIME-Version: 1.0 From: Uros Bizjak Date: Mon, 13 Nov 2023 22:49:23 +0100 Message-ID: Subject: [committed] i386: Return CCmode from ix86_cc_mode for unknown RTX code [PR112494] To: "gcc-patches@gcc.gnu.org" X-Spam-Status: No, score=-7.7 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+incoming=patchwork.ozlabs.org@gcc.gnu.org Combine wants to combine following instructions into an insn that can perform both an (arithmetic) operation and set the condition code. During the conversion a new RTX is created, and combine passes the RTX code of the innermost RTX expression of the CC use insn in which CC reg is used to SELECT_CC_MODE, to determine the new mode of the comparison: Trying 5 -> 8: 5: r98:DI=0xd7 8: flags:CCZ=cmp(r98:DI,0) REG_EQUAL cmp(0xd7,0) Failed to match this instruction: (parallel [ (set (reg:CC 17 flags) (compare:CC (const_int 215 [0xd7]) (const_int 0 [0]))) (set (reg/v:DI 98 [ flags ]) (const_int 215 [0xd7])) ]) where: (insn 5 2 6 2 (set (reg/v:DI 98 [ flags ]) (const_int 215 [0xd7])) "pr112494.c":8:8 84 {*movdi_internal} (nil)) (insn 8 7 11 2 (set (reg:CCZ 17 flags) (compare:CCZ (reg/v:DI 98 [ flags ]) (const_int 0 [0]))) "pr112494.c":11:9 8 {*cmpdi_ccno_1} (expr_list:REG_EQUAL (compare:CCZ (const_int 215 [0xd7]) (const_int 0 [0])) (nil))) x86_cc_mode (AKA SELECT_CC_MODE) is not prepared to handle random RTX codes and triggers gcc_unreachable() when SET RTX code is passed to it. The patch removes gcc_unreachable() and returns CCmode for unknown RTX codes, so combine can try various combinations involving CC reg without triggering ICE. Please note that x86 MOV instructions do not set flags, so the above combination is not recognized as a valid x86 instruction. PR target/112494 gcc/ChangeLog: * config/i386/i386.cc (ix86_cc_mode) [default]: Return CCmode. gcc/testsuite/ChangeLog: * gcc.target/i386/pr112494.c: New test. Patch was bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Uros. diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index 2c80fd8ebf3..176ca650aa2 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -16469,12 +16469,9 @@ ix86_cc_mode (enum rtx_code code, rtx op0, rtx op1) return CCNOmode; else return CCGCmode; - /* strcmp pattern do (use flags) and combine may ask us for proper - mode. */ - case USE: - return CCmode; default: - gcc_unreachable (); + /* CCmode should be used in all other cases. */ + return CCmode; } } diff --git a/gcc/testsuite/gcc.target/i386/pr112494.c b/gcc/testsuite/gcc.target/i386/pr112494.c new file mode 100644 index 00000000000..e9482f5d075 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr112494.c @@ -0,0 +1,17 @@ +/* PR target/112494 */ +/* { dg-options "-Og -fno-tree-copy-prop -fno-tree-fre -fno-tree-ccp -fno-tree-forwprop" } */ + +#include + +int main() +{ + long flags = 0xD7; + + __writeeflags(0xD7); + flags && !__readeflags(); + + if ((flags && (!__readeflags())) != 0xD7) + ; + + return 0; +}