From patchwork Sun Mar 3 01:48:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iain Buclaw X-Patchwork-Id: 209272 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp727275dyc; Sat, 2 Mar 2024 17:51:52 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVQ68JympstcJdqN/EXyhwtIojlZR4pRlOTkXmkJBKluM8dXISshiDMyuoKWGfpADUmLP9mzzoLQh771JBE6KdKue3lZw== X-Google-Smtp-Source: AGHT+IFO+dBhdkVd0pq+odUd3aE2DzFo6ShAy9VLn/iDavIOtx2jCoeFD1+DX1F861qMq82g7TJd X-Received: by 2002:a05:620a:2402:b0:787:d4c6:2296 with SMTP id d2-20020a05620a240200b00787d4c62296mr15144896qkn.28.1709430711850; Sat, 02 Mar 2024 17:51:51 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709430711; cv=pass; d=google.com; s=arc-20160816; b=ZsWH1kGq2vtAzCAZzfev1OheYDA1b4onuey/FDxrxIvvw39kuEojA6f+QgBOiV7Tr/ SxAKArsqX//7O9UO0BhT6tmeM/ShFpLdwFguk62lE5b8YwtUwHeq9oefvBMCQ5ALYPvc pa46aqJ/VeoMJv6M/QiS2YBYbqn0pu0L2NBT7NpJl08Ew4E7HkgeUlj+JqReAb7eEuIh F8tOsizjhqrlVppA8r2gUMtebWb8p4lkNRU5akHiZVtiG7E6f0stpuUf2SG3c075b7W8 zI0LgSfKgUQhTVUeOueoMAKjA2d8XkW0D+s7h3Noq/sx9GJkjLheLUMbWbn4+JqJniqq pNiQ== 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:cc:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=uSWoCedVcIKkUgHMxS4QUyX/k0ivRiWS0CZyHT49ycI=; fh=D2tRalIjW6KCgVuqwFHStdMb9uqe8HSQc2WEvRJ6uLE=; b=fyxqivSfBm9kLdiwUTGx+ZSKVYLjOV6Pt+u4+wLeDCjF5kbCP347LAOnmTEXY6uBNF ElOhyv4KKY56+Lqq/QwuXN8EZy8r+nEExk3BBANebEm3lvStj2sA3ek+ULg/jMwFa93n zkxttJoLAnUjKHrrHmrdPg7lYRHJDtUP+TsgwLHp8K+Uw4BSs05c2nn4dO/RSgpMtHoa QJODFqD8qP7l0ILs+LHkVhA/EFO//NbtWors542nfwc9h4R/n3x6bcPU1AF5hjbmW/Zb hwhaBJQy6eYW7o9XL68fpOHuSGxP9N425GU5xKyl0uc5HGJbH5UMYARErVW7YIgxwito xfMw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gdcproject.org header.s=MBO0001 header.b="WE4/3DkX"; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=gdcproject.org Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id bl41-20020a05620a1aa900b00788205afd09si1468707qkb.558.2024.03.02.17.51.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Mar 2024 17:51:51 -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=@gdcproject.org header.s=MBO0001 header.b="WE4/3DkX"; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=gdcproject.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7FA023858429 for ; Sun, 3 Mar 2024 01:51:50 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mout-p-202.mailbox.org (mout-p-202.mailbox.org [80.241.56.172]) by sourceware.org (Postfix) with ESMTPS id CE1E33858C31 for ; Sun, 3 Mar 2024 01:48:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CE1E33858C31 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=gdcproject.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gdcproject.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org CE1E33858C31 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=80.241.56.172 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709430534; cv=none; b=sCh7uttayUqJJs11x5DHg/YsCHgQdIXiVKl+53kfaPRU1fM6rtUJtaMDAiJEhCThWpI4J+NMyeddka+ZN98Fi7q6gxWTcwevtoabl1x9J1ond7vvOkqWC7VkDckTNWDVqA6juujhElSUMpN9kF1FVuI6Xs/9vNgen4R6t7v27kk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709430534; c=relaxed/simple; bh=Bh1UlWx2Z3uEhC2e981QhYRN15OoWF6FBrtN/7O4I9g=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=NhmCmQCALADxawqDX6HNolUWbVQhulk58/9PQF02Lpyoj00DFkIDC/JYaYlDJHrtmgF4RTHQkotJyo9zzoaXFVVefhUUpLAnBtskP696Hj20OnOsdbE3+UjbuaQJS2O0XBT/Xff3i0q9Gigr+uBlLx8kCi9R6l7Vw21ol31qiLM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from smtp102.mailbox.org (smtp102.mailbox.org [10.196.197.102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4TnPqq69xtz9t7w; Sun, 3 Mar 2024 02:48:39 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gdcproject.org; s=MBO0001; t=1709430519; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=uSWoCedVcIKkUgHMxS4QUyX/k0ivRiWS0CZyHT49ycI=; b=WE4/3DkXzJdcBNgiMbzmpqQg8TYaxz99mRqCHHhIjI5cHCr82ztuiRhW6SMN7DwWFSmME1 qwOWW7Itzdx8wW/q1OqXe8rZIl1D3lxSyODYMB9eFN5smjSdFrX+upxSpGOk0+pK5hQ6Ce d7nx5X5TxFnf8uZzdmLz9HNow5pdsgnZeE9JaQcXq3Knb2+K9SK9Gy/OQpzF4h2UF9jNGC 6mRd7AsuM/w41MpHnUdjrGgK/VHbqn5Yn4uKbR9wLn2wzZoSScFncZYbFSVvaD0aT5fhhf EWELUZ/n4TcB5JaCbd7CyzNzcUMR8myA7ASwtYdxE0gSOixmcL4v1Rd2qqekpQ== From: Iain Buclaw To: gcc-patches@gcc.gnu.org Cc: Iain Buclaw Subject: [committed] d: Fix gdc -O2 -mavx generates misaligned vmovdqa instruction [PR114171] Date: Sun, 3 Mar 2024 02:48:37 +0100 Message-Id: <20240303014837.808610-1-ibuclaw@gdcproject.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, 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: 1792468018131897113 X-GMAIL-MSGID: 1792468018131897113 Hi, This patch fixes a wrong code issue in the D front-end where lowered struct comparisons would reinterpret fields with a different (usually bigger) alignment than the original. Use `build_aligned_type' to preserve the alignment when casting away for such comparisons. Bootstrapped and regression tested on x86_64-linux-gnu/-m32, committed to mainline, and backported to releases/gcc-13, releases/gcc-12, and releases/gcc-11. Regards, Iain. --- PR d/114171 gcc/d/ChangeLog: * d-codegen.cc (lower_struct_comparison): Keep alignment of original type in reinterpret cast for comparison. gcc/testsuite/ChangeLog: * gdc.dg/torture/pr114171.d: New test. --- gcc/d/d-codegen.cc | 1 + gcc/testsuite/gdc.dg/torture/pr114171.d | 29 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 gcc/testsuite/gdc.dg/torture/pr114171.d diff --git a/gcc/d/d-codegen.cc b/gcc/d/d-codegen.cc index 5bc233928aa..43d7739f8fc 100644 --- a/gcc/d/d-codegen.cc +++ b/gcc/d/d-codegen.cc @@ -1006,6 +1006,7 @@ lower_struct_comparison (tree_code code, StructDeclaration *sd, if (tmode == NULL_TREE) tmode = make_unsigned_type (GET_MODE_BITSIZE (mode.require ())); + tmode = build_aligned_type (tmode, TYPE_ALIGN (stype)); t1ref = build_vconvert (tmode, t1ref); t2ref = build_vconvert (tmode, t2ref); diff --git a/gcc/testsuite/gdc.dg/torture/pr114171.d b/gcc/testsuite/gdc.dg/torture/pr114171.d new file mode 100644 index 00000000000..0f9ffcab916 --- /dev/null +++ b/gcc/testsuite/gdc.dg/torture/pr114171.d @@ -0,0 +1,29 @@ +// { dg-do run } +// { dg-additional-options "-mavx" { target avx_runtime } } +// { dg-skip-if "needs gcc/config.d" { ! d_runtime } } +import gcc.builtins; + +struct S1 +{ + string label; +} + +struct S2 +{ + ulong pad; + S1 label; +} + +pragma(inline, false) +auto newitem() +{ + void *p = __builtin_malloc(S2.sizeof); + __builtin_memset(p, 0, S2.sizeof); + return cast(S2*) p; +} + +int main() +{ + auto bn = newitem(); + return bn.label is S1.init ? 0 : 1; +}