Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 7 Feb 2015 16:57:33 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
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
Message-ID:  <201502071657.t17GvXW9092528@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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 <fullermd@over-yonder.net>

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<MVT, 16> OutVTs;
-  SmallVector<unsigned, 16> 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<TruncInst>(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<TruncInst>(Val)) {
+      if (TI->getType()->isIntegerTy(1) && CLI.CS &&
+          (TI->getParent() == CLI.CS->getInstruction()->getParent()) &&
+          TI->hasOneUse()) {
+        Val = cast<TruncInst>(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<MVT, 16> 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()) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201502071657.t17GvXW9092528>