Re: svn commit: r278361 - in head/contrib/llvm: lib/Target/X86 patches

2015-02-08 Thread Roman Divacky
Fwiw, FastISel is only used for -O0, maybe the right way to "fix"
the breakage is to not use -O0 ?

On Sat, Feb 07, 2015 at 04:57:33PM +, Dimitry Andric wrote:
> 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()) {
___
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r278361 - in head/contrib/llvm: lib/Target/X86 patches

2015-02-07 Thread Dimitry Andric
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.cppSat Feb  7 14:31:51 
2015(r278360)
+++ head/contrib/llvm/lib/Target/X86/X86FastISel.cppSat 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()) {
___
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"