From nobody Sat Dec 25 11:56:25 2021 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id E2AB618F3DF1; Sat, 25 Dec 2021 11:56:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (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 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4JLj7t70pfz4lT5; Sat, 25 Dec 2021 11:56:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 42FF9164FB; Sat, 25 Dec 2021 11:56:25 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1BPBuPA5007463; Sat, 25 Dec 2021 11:56:25 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1BPBuPs4007462; Sat, 25 Dec 2021 11:56:25 GMT (envelope-from git) Date: Sat, 25 Dec 2021 11:56:25 GMT Message-Id: <202112251156.1BPBuPs4007462@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dimitry Andric Subject: git: 9b7616cc4748 - stable/12 - Fix "Bad machine code" when building world for mips or mips64 List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dim X-Git-Repository: src X-Git-Refname: refs/heads/stable/12 X-Git-Reftype: branch X-Git-Commit: 9b7616cc4748d228caa645d1af344febde04d584 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1640433387; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XM4Xyo6uYh43SM+5YIUtRX/Sxz1wM2aS5JqWVBbm6hU=; b=kS/EWoH7Tv1CK1VStLmY3q1st1aoK4ABCsZ+nteR22kGODs8vh75lYQ3QfYVgNepdP9PYn d4GUviYa9+RKBI/MFgekfnIhmstFkjQHwR6DzaHEGutA5DUt/A4EeLIeYZu563Mvdbnugz 3IngXL1RUUt3/hhAKFCmwdHrxxHyeBu0mlxHMKF0xeVVhTLp16PN3RMQpXK8fCKQx+nmhN Q9JNFMnhBlPUGG5CWYyvkVO9vcIVbTz9ZSA5WTxNSHoAk6RjVm7sPGHK+gJDji8w8NrN/P Z2G+QwV3Pw0DKyDtxNJQmnN6tQA43G0ikVxLQxkeWT+sNB91cBAM1tJyxMfCNQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1640433387; a=rsa-sha256; cv=none; b=AQnCP0tZGLylNk0M6RuJ2LmAUfqdC6+X/MznDxdl9/Gqmpl1t3SvESelL4VKwmJwSPFamf hWRu0m+qW1nWQ8WYR44OrmLperOU8XrI/sBW2EBm36UBOJ44tVMmJynMW4Zsi/aYenvV/K EBQwVmP/pnchHvLj/WiQb4M5QTWIfoO8s8kmnAjr7n5mcUDQqYo6h522QuK9ak4zTCszhL sOsjLWpJirtKz4JIA+4D/TF7ZoGnWxRFyRSuLEYwUCTYW0Id60m9cjhFsNrVBAu4gmA7g1 0frtY5l+BhZIOjgvT7aU4d4AfJ3NUz0NWt1UZ4/FqWPDQYZXqrrbWMT7yeOVWw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/12 has been updated by dim: URL: https://cgit.FreeBSD.org/src/commit/?id=9b7616cc4748d228caa645d1af344febde04d584 commit 9b7616cc4748d228caa645d1af344febde04d584 Author: Dimitry Andric AuthorDate: 2021-10-18 14:50:24 +0000 Commit: Dimitry Andric CommitDate: 2021-12-25 11:51:39 +0000 Fix "Bad machine code" when building world for mips or mips64 Merge commit f5755c0849a5 from llvm git (by Jessica Clarke): [Mips] Add glue between CopyFromReg, CopyToReg and RDHWR nodes for TLS The MIPS ABI requires the thread pointer be accessed via rdhwr $3, $r29. This is currently represented by (CopyToReg $3, (RDHWR $29)) followed by a (CopyFromReg $3). However, there is no glue between these, meaning scheduling can break those apart. In particular, PR51691 is a report where PseudoSELECT_I was moved to between the CopyToReg and CopyFromReg, and since its expansion uses branches, it split the def and use of the physical register between two basic blocks, resulting in the def being eliminated and the use having no def. It also seems possible that a similar situation could arise splitting up the CopyToReg from the RDHWR, causing the RDHWR to use a destination register other than $3, violating the ABI requirement. Thus, add glue between all three nodes to ensure they aren't split up during instruction selection. No regression test is added since any test would be implictly relying on specific scheduling behaviour, so whilst it might be testing that glue is preventing reordering today, changes to scheduling behaviour could result in the test no longer being able to catch a regression here, as the reordering might no longer happen for other unrelated reasons. Fixes PR51691. Reviewed By: atanasyan, dim Differential Revision: https://reviews.llvm.org/D111967 (cherry picked from commit 4e117af10caf2b6f95c7ef44b08aa7a812a37286) --- contrib/llvm-project/llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/contrib/llvm-project/llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp b/contrib/llvm-project/llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp index 7be5fc33a0af..04a835f08855 100644 --- a/contrib/llvm-project/llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp +++ b/contrib/llvm-project/llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp @@ -1027,12 +1027,13 @@ bool MipsSEDAGToDAGISel::trySelect(SDNode *Node) { } SDNode *Rdhwr = - CurDAG->getMachineNode(RdhwrOpc, DL, Node->getValueType(0), + CurDAG->getMachineNode(RdhwrOpc, DL, Node->getValueType(0), MVT::Glue, CurDAG->getRegister(Mips::HWR29, MVT::i32), CurDAG->getTargetConstant(0, DL, MVT::i32)); SDValue Chain = CurDAG->getCopyToReg(CurDAG->getEntryNode(), DL, DestReg, - SDValue(Rdhwr, 0)); - SDValue ResNode = CurDAG->getCopyFromReg(Chain, DL, DestReg, PtrVT); + SDValue(Rdhwr, 0), SDValue(Rdhwr, 1)); + SDValue ResNode = CurDAG->getCopyFromReg(Chain, DL, DestReg, PtrVT, + Chain.getValue(1)); ReplaceNode(Node, ResNode.getNode()); return true; }