From owner-svn-src-all@FreeBSD.ORG Sat Feb 7 16:57:33 2015 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 8A67D160; Sat, 7 Feb 2015 16:57:33 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 75FA4D24; Sat, 7 Feb 2015 16:57:33 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t17GvXE6092529; Sat, 7 Feb 2015 16:57:33 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t17GvXW9092528; Sat, 7 Feb 2015 16:57:33 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201502071657.t17GvXW9092528@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sat, 7 Feb 2015 16:57:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r278361 - in head/contrib/llvm: lib/Target/X86 patches X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Feb 2015 16:57:33 -0000 Author: dim Date: Sat Feb 7 16:57:32 2015 New Revision: 278361 URL: https://svnweb.freebsd.org/changeset/base/278361 Log: Back out r278349 and r278350 for now, since this apparently blows up the kernel build in sys/dev/hptmv/hptproc.c for some people. Reported by: sbruno, Matthew Fuller Deleted: head/contrib/llvm/patches/patch-32-llvm-r224884-invalid-reg-replacement.diff Modified: head/contrib/llvm/lib/Target/X86/X86FastISel.cpp Modified: head/contrib/llvm/lib/Target/X86/X86FastISel.cpp ============================================================================== --- head/contrib/llvm/lib/Target/X86/X86FastISel.cpp Sat Feb 7 14:31:51 2015 (r278360) +++ head/contrib/llvm/lib/Target/X86/X86FastISel.cpp Sat Feb 7 16:57:32 2015 (r278361) @@ -2699,9 +2699,6 @@ bool X86FastISel::FastLowerCall(CallLowe TM.Options.GuaranteedTailCallOpt)) return false; - SmallVector OutVTs; - SmallVector ArgRegs; - // If this is a constant i1/i8/i16 argument, promote to i32 to avoid an extra // instruction. This is safe because it is common to all FastISel supported // calling conventions on x86. @@ -2719,34 +2716,28 @@ bool X86FastISel::FastLowerCall(CallLowe // Passing bools around ends up doing a trunc to i1 and passing it. // Codegen this as an argument + "and 1". - MVT VT; - auto *TI = dyn_cast(Val); - unsigned ResultReg; - if (TI && TI->getType()->isIntegerTy(1) && CLI.CS && - (TI->getParent() == CLI.CS->getInstruction()->getParent()) && - TI->hasOneUse()) { - Value *PrevVal = TI->getOperand(0); - ResultReg = getRegForValue(PrevVal); - - if (!ResultReg) - return false; + if (auto *TI = dyn_cast(Val)) { + if (TI->getType()->isIntegerTy(1) && CLI.CS && + (TI->getParent() == CLI.CS->getInstruction()->getParent()) && + TI->hasOneUse()) { + Val = cast(Val)->getOperand(0); + unsigned ResultReg = getRegForValue(Val); - if (!isTypeLegal(PrevVal->getType(), VT)) - return false; + if (!ResultReg) + return false; - ResultReg = - FastEmit_ri(VT, VT, ISD::AND, ResultReg, hasTrivialKill(PrevVal), 1); + MVT ArgVT; + if (!isTypeLegal(Val->getType(), ArgVT)) + return false; - if (!ResultReg) - return false; - } else { - if (!isTypeLegal(Val->getType(), VT)) - return false; - ResultReg = getRegForValue(Val); - } + ResultReg = + FastEmit_ri(ArgVT, ArgVT, ISD::AND, ResultReg, Val->hasOneUse(), 1); - ArgRegs.push_back(ResultReg); - OutVTs.push_back(VT); + if (!ResultReg) + return false; + UpdateValueMap(Val, ResultReg); + } + } } // Analyze operands of the call, assigning locations to each operand. @@ -2758,6 +2749,13 @@ bool X86FastISel::FastLowerCall(CallLowe if (IsWin64) CCInfo.AllocateStack(32, 8); + SmallVector OutVTs; + for (auto *Val : OutVals) { + MVT VT; + if (!isTypeLegal(Val->getType(), VT)) + return false; + OutVTs.push_back(VT); + } CCInfo.AnalyzeCallOperands(OutVTs, OutFlags, CC_X86); // Get a count of how many bytes are to be pushed on the stack. @@ -2779,7 +2777,9 @@ bool X86FastISel::FastLowerCall(CallLowe if (ArgVT == MVT::x86mmx) return false; - unsigned ArgReg = ArgRegs[VA.getValNo()]; + unsigned ArgReg = getRegForValue(ArgVal); + if (!ArgReg) + return false; // Promote the value if needed. switch (VA.getLocInfo()) {