[llvm-commits] [llvm] r45862 - /llvm/tags/Apple/llvmCore-2007/

2008-01-11 Thread Bill Wendling
Author: void
Date: Fri Jan 11 02:32:54 2008
New Revision: 45862

URL: http://llvm.org/viewvc/llvm-project?rev=45862&view=rev
Log:
Creating llvmCore-2007 branch

Added:
llvm/tags/Apple/llvmCore-2007/
  - copied from r45861, llvm/trunk/

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r45863 - /llvm-gcc-4.2/tags/Apple/llvmgcc42-2007/

2008-01-11 Thread Bill Wendling
Author: void
Date: Fri Jan 11 02:35:19 2008
New Revision: 45863

URL: http://llvm.org/viewvc/llvm-project?rev=45863&view=rev
Log:
Creating llvmgcc42-2007 branch

Added:
llvm-gcc-4.2/tags/Apple/llvmgcc42-2007/
  - copied from r45862, llvm-gcc-4.2/trunk/

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45864 - /llvm/trunk/lib/Target/CBackend/CBackend.cpp

2008-01-11 Thread Evan Cheng
Author: evancheng
Date: Fri Jan 11 03:12:49 2008
New Revision: 45864

URL: http://llvm.org/viewvc/llvm-project?rev=45864&view=rev
Log:
Some C backend ByVal parameter attribute support. Not yet complete.

Modified:
llvm/trunk/lib/Target/CBackend/CBackend.cpp

Modified: llvm/trunk/lib/Target/CBackend/CBackend.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=45864&r1=45863&r2=45864&view=diff

==
--- llvm/trunk/lib/Target/CBackend/CBackend.cpp (original)
+++ llvm/trunk/lib/Target/CBackend/CBackend.cpp Fri Jan 11 03:12:49 2008
@@ -87,6 +87,7 @@
 std::map TypeNames;
 std::map FPConstantMap;
 std::set intrinsicPrototypesAlreadyGenerated;
+std::set ByValParams;
 
   public:
 static char ID;
@@ -113,14 +114,16 @@
   printFloatingPointConstants(F);
 
   printFunction(F);
-  FPConstantMap.clear();
   return false;
 }
 
 virtual bool doFinalization(Module &M) {
   // Free memory...
   delete Mang;
+  FPConstantMap.clear();
   TypeNames.clear();
+  intrinsicPrototypesAlreadyGenerated.clear();
+  ByValParams.clear();
   return false;
 }
 
@@ -370,6 +373,10 @@
 if (PrintedType)
   FunctionInnards << ", ";
 const Type *ArgTy = *I;
+if (PAL && PAL->paramHasAttr(Idx, ParamAttr::ByVal)) {
+  assert(isa(ArgTy));
+  ArgTy = cast(ArgTy)->getElementType();
+}
 printType(FunctionInnards, ArgTy,
 /*isSigned=*/PAL && PAL->paramHasAttr(Idx, ParamAttr::SExt), "");
 PrintedType = true;
@@ -1885,6 +1892,12 @@
 else
   ArgName = "";
 const Type *ArgTy = I->getType();
+if (PAL && PAL->paramHasAttr(Idx, ParamAttr::ByVal)) {
+  assert(isa(ArgTy));
+  ArgTy = cast(ArgTy)->getElementType();
+  const Value *Arg = &(*I);
+  ByValParams.insert(Arg);
+}
 printType(FunctionInnards, ArgTy,
 /*isSigned=*/PAL && PAL->paramHasAttr(Idx, ParamAttr::SExt),
 ArgName);
@@ -2384,6 +2397,13 @@
   // Make sure we really get a sext from bool by subtracing the bool from 0
   Out << "0-";
 }
+// If it's a byval parameter being casted, then takes its address.
+bool isByVal = ByValParams.count(I.getOperand(0));
+if (isByVal) {
+  assert(I.getOpcode() == Instruction::BitCast &&
+ "ByVal aggregate parameter must ptr type");
+  Out << '&';
+}
 writeOperand(I.getOperand(0));
 if (DstTy == Type::Int1Ty && 
 (I.getOpcode() == Instruction::Trunc ||
@@ -2675,7 +2695,12 @@
 /*isSigned=*/PAL && PAL->paramHasAttr(Idx, ParamAttr::SExt));
   Out << ')';
 }
-writeOperand(*AI);
+// If call is expecting argument to be passed by value, then do not
+// take its address.
+if (PAL && PAL->paramHasAttr(Idx, ParamAttr::ByVal))
+  writeOperandInternal(*AI);
+else
+  writeOperand(*AI);
 PrintedArg = true;
   }
   Out << ')';
@@ -2869,7 +2894,9 @@
 
 // Print out the -> operator if possible...
 if (TmpI != E && isa(*TmpI)) {
-  Out << (HasImplicitAddress ? "." : "->");
+  // Check if it's actually an aggregate parameter passed by value.
+  bool isByVal = ByValParams.count(Ptr);
+  Out << ((HasImplicitAddress || isByVal) ? "." : "->");
   Out << "field" << cast(TmpI.getOperand())->getZExtValue();
   I = ++TmpI;
 }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r45850 - /llvm/trunk/lib/VMCore/Verifier.cpp

2008-01-11 Thread Evan Cheng
One more. When llvm-extract remove a function with byval parameters,  
it also drops the attribute.

Just in case you are interested. :-) If you don't get to it soon,  
I'll hack on it tomorrow.

Thanks,

Evan

On Jan 10, 2008, at 10:43 PM, Duncan Sands wrote:

> Hi Evan,
>
>> Allow parameter attributes on varargs function parameters.
>
> there are some issues that need to be fixed:
> (1) the asm parser drops parameter attributes specified on the varargs
> part of a call/invoke;
> (2) when the DAE pass drops varargs call arguments, the parameter
> attributes need to be trimmed, since otherwise you can have attributes
> that don't correspond to a call argument any more;
> (3) when instcombine resolves calls to a bitcast of a function into
> a direct call, then parameter attributes will be lost on any varargs
> part of a call.
>
> You need this for byval support, right?
>
> D.

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45865 - /llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

2008-01-11 Thread Arnold Schwaighofer
Author: arnolds
Date: Fri Jan 11 08:34:56 2008
New Revision: 45865

URL: http://llvm.org/viewvc/llvm-project?rev=45865&view=rev
Log:
Correct a copy and paste error.

Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=45865&r1=45864&r2=45865&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Fri Jan 11 08:34:56 2008
@@ -1441,7 +1441,7 @@
 
 if (!MemOpChains2.empty())
   Chain = DAG.getNode(ISD::TokenFactor, MVT::Other,
-  &MemOpChains2[0], MemOpChains.size());
+  &MemOpChains2[0], MemOpChains2.size());
 
 // Store the return address to the appropriate stack slot.
 if (FPDiff)


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45867 - in /llvm/trunk/lib/Target/X86: README.txt X86ISelLowering.cpp

2008-01-11 Thread Arnold Schwaighofer
Author: arnolds
Date: Fri Jan 11 10:49:42 2008
New Revision: 45867

URL: http://llvm.org/viewvc/llvm-project?rev=45867&view=rev
Log:
Improve tail call optimized call's argument lowering. Before this
commit all arguments where moved to the stack slot where they would
reside on a normal function call before the lowering to the tail call
stack slot. This was done to prevent arguments overwriting each other.
Now only arguments sourcing from a FORMAL_ARGUMENTS node or a
CopyFromReg node with virtual register (could also be a caller's
argument) are lowered indirectly.

 --This line, and those below, will be ignored--

MX86/X86ISelLowering.cpp
MX86/README.txt

Modified:
llvm/trunk/lib/Target/X86/README.txt
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

Modified: llvm/trunk/lib/Target/X86/README.txt
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/README.txt?rev=45867&r1=45866&r2=45867&view=diff

==
--- llvm/trunk/lib/Target/X86/README.txt (original)
+++ llvm/trunk/lib/Target/X86/README.txt Fri Jan 11 10:49:42 2008
@@ -1330,10 +1330,11 @@
 
 Tail call optimization improvements: Tail call optimization currently
 pushes all arguments on the top of the stack (their normal place for
-non-tail call optimized calls) before moving them to actual stack
-slot. This is done to prevent overwriting of parameters (see example
-below) that might be used, since the arguments of the callee
-overwrites caller's arguments.
+non-tail call optimized calls) that source from the callers arguments
+or  that source from a virtual register (also possibly sourcing from
+callers arguments).
+This is done to prevent overwriting of parameters (see example
+below) that might be used later.
 
 example:  
 
@@ -1352,13 +1353,6 @@
 
 Possible optimizations:
 
- - Only push those arguments to the top of the stack that are actual
-   parameters of the caller function and have no local value in the
-   caller.
-
-   In the above example local does not need to be pushed onto the top
-   of the stack as it is definitely not a caller's function
-   parameter.
 
  - Analyse the actual parameters of the callee to see which would
overwrite a caller parameter which is used by the callee and only
@@ -1380,35 +1374,6 @@
Here we need to push the arguments because they overwrite each
other.
 
-
-   Code for lowering directly onto callers arguments:
-+  SmallVector, 8> RegsToPass;
-+  SmallVector MemOpChains;
-+
-+  SDOperand FramePtr;
-+  SDOperand PtrOff;
-+  SDOperand FIN;
-+  int FI = 0;
-+  // Walk the register/memloc assignments, inserting copies/loads.
-+  for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) {
-+CCValAssign &VA = ArgLocs[i];
-+SDOperand Arg = Op.getOperand(5+2*VA.getValNo());
-+
-+
-+
-+if (VA.isRegLoc()) {
-+  RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg));
-+} else {
-+  assert(VA.isMemLoc());
-+  // create frame index
-+  int32_t Offset = VA.getLocMemOffset()+FPDiff;
-+  uint32_t OpSize = (MVT::getSizeInBits(VA.getLocVT())+7)/8;
-+  FI = MF.getFrameInfo()->CreateFixedObject(OpSize, Offset);
-+  FIN = DAG.getFrameIndex(FI, MVT::i32);
-+  // store relative to framepointer
-+  MemOpChains.push_back(DAG.getStore(Chain, Arg, FIN, NULL, 0));
-+}
-+  }
 //===-===//
 
 main ()

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=45867&r1=45866&r2=45867&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Fri Jan 11 10:49:42 2008
@@ -1007,6 +1007,45 @@
   return None;
 }
 
+
+// IsPossiblyOverriddenArgumentOfTailCall - Check if the operand could possibly
+// be overridden when lowering the outgoing arguments in a tail call. Currently
+// the implementation of this call is very conservative and assumes all
+// arguments sourcing from FORMAL_ARGUMENTS or a CopyFromReg with virtual
+// registers would be overridden by direct lowering. 
+// Possible improvement:
+// Check FORMAL_ARGUMENTS corresponding MERGE_VALUES for CopyFromReg nodes
+// indicating inreg passed arguments which also need not be lowered to a safe
+// stack slot.
+static bool IsPossiblyOverriddenArgumentOfTailCall(SDOperand Op) {
+  RegisterSDNode * OpReg = NULL;
+  if (Op.getOpcode() == ISD::FORMAL_ARGUMENTS ||
+  (Op.getOpcode()== ISD::CopyFromReg &&
+   (OpReg = cast(Op.getOperand(1))) &&
+   OpReg->getReg() >= MRegisterInfo::FirstVirtualRegister))
+return true;
+  return false;
+}
+
+// GetMemCpyWithFlags - Create a MemCpy using function's parameter flag.
+static SDOperand 
+GetMemCpyWithFlags(SelectionDAG &DAG, unsigned Flags, SDOperand From,
+   

[llvm-commits] [llvm] r45868 - /llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

2008-01-11 Thread Arnold Schwaighofer
Author: arnolds
Date: Fri Jan 11 11:10:15 2008
New Revision: 45868

URL: http://llvm.org/viewvc/llvm-project?rev=45868&view=rev
Log:
hrm - correct spelling.
Actually were not riding any arguments. Sadly there is no semantic spell 
checker that is going to safe you from such a mistake.


Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=45868&r1=45867&r2=45868&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Fri Jan 11 11:10:15 2008
@@ -1008,16 +1008,16 @@
 }
 
 
-// IsPossiblyOverriddenArgumentOfTailCall - Check if the operand could possibly
-// be overridden when lowering the outgoing arguments in a tail call. Currently
+// IsPossiblyOverwrittenArgumentOfTailCall - Check if the operand could 
possibly
+// be overwritten when lowering the outgoing arguments in a tail call. 
Currently
 // the implementation of this call is very conservative and assumes all
 // arguments sourcing from FORMAL_ARGUMENTS or a CopyFromReg with virtual
-// registers would be overridden by direct lowering. 
+// registers would be overwritten by direct lowering.  
 // Possible improvement:
 // Check FORMAL_ARGUMENTS corresponding MERGE_VALUES for CopyFromReg nodes
 // indicating inreg passed arguments which also need not be lowered to a safe
 // stack slot.
-static bool IsPossiblyOverriddenArgumentOfTailCall(SDOperand Op) {
+static bool IsPossiblyOverwrittenArgumentOfTailCall(SDOperand Op) {
   RegisterSDNode * OpReg = NULL;
   if (Op.getOpcode() == ISD::FORMAL_ARGUMENTS ||
   (Op.getOpcode()== ISD::CopyFromReg &&
@@ -1359,7 +1359,7 @@
 if (VA.isRegLoc()) {
   RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg));
 } else {
-  if (!IsTailCall || IsPossiblyOverriddenArgumentOfTailCall(Arg)) {
+  if (!IsTailCall || IsPossiblyOverwrittenArgumentOfTailCall(Arg)) {
 assert(VA.isMemLoc());
 if (StackPtr.Val == 0)
   StackPtr = DAG.getCopyFromReg(Chain, X86StackPtr, getPointerTy());
@@ -1438,7 +1438,7 @@
 FI = MF.getFrameInfo()->CreateFixedObject(OpSize, Offset);
 FIN = DAG.getFrameIndex(FI, MVT::i32);
 SDOperand Source = Arg;
-if (IsPossiblyOverriddenArgumentOfTailCall(Arg)){
+if (IsPossiblyOverwrittenArgumentOfTailCall(Arg)){
   // Copy from stack slots to stack slot of a tail called function. 
This
   // needs to be done because if we would lower the arguments directly
   // to their real stack slot we might end up overwriting each other.


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45872 - /llvm/trunk/include/llvm/ADT/SmallVector.h

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 12:42:02 2008
New Revision: 45872

URL: http://llvm.org/viewvc/llvm-project?rev=45872&view=rev
Log:
add operator==/!= to smallvector.

Modified:
llvm/trunk/include/llvm/ADT/SmallVector.h

Modified: llvm/trunk/include/llvm/ADT/SmallVector.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SmallVector.h?rev=45872&r1=45871&r2=45872&view=diff

==
--- llvm/trunk/include/llvm/ADT/SmallVector.h (original)
+++ llvm/trunk/include/llvm/ADT/SmallVector.h Fri Jan 11 12:42:02 2008
@@ -294,6 +294,16 @@
   
   const SmallVectorImpl &operator=(const SmallVectorImpl &RHS);
   
+  bool operator==(const SmallVectorImpl &RHS) const {
+if (size() != RHS.size()) return false;
+for (T *This = Begin, *That = RHS.Begin, *End = Begin+size(); 
+ This != End; ++This, ++That)
+  if (*This != *That)
+return false;
+return true;
+  }
+  bool operator!=(const SmallVectorImpl &RHS) const { return !(*this == RHS); }
+  
 private:
   /// isSmall - Return true if this is a smallvector which has not had dynamic
   /// memory allocated for it.


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r45850 - /llvm/trunk/lib/VMCore/Verifier.cpp

2008-01-11 Thread Chris Lattner

On Jan 10, 2008, at 11:45 PM, Evan Cheng wrote:

>
> On Jan 10, 2008, at 10:43 PM, Duncan Sands wrote:
>
>> Hi Evan,
>>
>>> Allow parameter attributes on varargs function parameters.
>>
>> there are some issues that need to be fixed:
>> (1) the asm parser drops parameter attributes specified on the  
>> varargs
>> part of a call/invoke;
>> (2) when the DAE pass drops varargs call arguments, the parameter
>> attributes need to be trimmed, since otherwise you can have  
>> attributes
>> that don't correspond to a call argument any more;
>> (3) when instcombine resolves calls to a bitcast of a function into
>> a direct call, then parameter attributes will be lost on any varargs
>> part of a call.
>>
>> You need this for byval support, right?
>
> Yep.

Evan, if you send me a testcase for the DAE problem, I'll fix it.  I'm  
taking a look at argpromote now to see if it needs to be tweaked.

-Chris
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45876 - /llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 13:20:39 2008
New Revision: 45876

URL: http://llvm.org/viewvc/llvm-project?rev=45876&view=rev
Log:
Update this code to use eraseFromParent where possible.  Compute
whether an argument is byval and pass into isSafeToPromoteArgument.

Modified:
llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=45876&r1=45875&r2=45876&view=diff

==
--- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Fri Jan 11 13:20:39 2008
@@ -69,9 +69,9 @@
 
   private:
 bool PromoteArguments(CallGraphNode *CGN);
-bool isSafeToPromoteArgument(Argument *Arg) const;
+bool isSafeToPromoteArgument(Argument *Arg, bool isByVal) const;
 Function *DoPromotion(Function *F, 
-  SmallVectorImpl &ArgsToPromote);
+  SmallPtrSet &ArgsToPromote);
   };
 
   char ArgPromotion::ID = 0;
@@ -109,10 +109,12 @@
   if (!F || !F->hasInternalLinkage()) return false;
 
   // First check: see if there are any pointer arguments!  If not, quick exit.
-  SmallVector PointerArgs;
-  for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(); I != E; 
++I)
+  SmallVector, 16> PointerArgs;
+  unsigned ArgNo = 0;
+  for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end();
+   I != E; ++I, ++ArgNo)
 if (isa(I->getType()))
-  PointerArgs.push_back(I);
+  PointerArgs.push_back(std::pair(I, ArgNo));
   if (PointerArgs.empty()) return false;
 
   // Second check: make sure that all callers are direct callers.  We can't
@@ -129,19 +131,19 @@
   return false;
   }
 
-  // Check to see which arguments are promotable.  If an argument is not
-  // promotable, remove it from the PointerArgs vector.
-  for (unsigned i = 0; i != PointerArgs.size(); ++i)
-if (!isSafeToPromoteArgument(PointerArgs[i])) {
-  std::swap(PointerArgs[i--], PointerArgs.back());
-  PointerArgs.pop_back();
-}
-
+  // Check to see which arguments are promotable.  If an argument is 
promotable,
+  // add it to ArgsToPromote.
+  SmallPtrSet ArgsToPromote;
+  for (unsigned i = 0; i != PointerArgs.size(); ++i) {
+bool isByVal = F->paramHasAttr(PointerArgs[i].second, ParamAttr::ByVal);
+if (isSafeToPromoteArgument(PointerArgs[i].first, isByVal))
+  ArgsToPromote.insert(PointerArgs[i].first);
+  }
+  
   // No promotable pointer arguments.
-  if (PointerArgs.empty()) return false;
+  if (ArgsToPromote.empty()) return false;
 
-  // Okay, promote all of the arguments and rewrite the callees!
-  Function *NewF = DoPromotion(F, PointerArgs);
+  Function *NewF = DoPromotion(F, ArgsToPromote);
 
   // Update the call graph to know that the function has been transformed.
   getAnalysis().changeFunction(F, NewF);
@@ -188,7 +190,7 @@
 /// This method limits promotion of aggregates to only promote up to three
 /// elements of the aggregate in order to avoid exploding the number of
 /// arguments passed in.
-bool ArgPromotion::isSafeToPromoteArgument(Argument *Arg) const {
+bool ArgPromotion::isSafeToPromoteArgument(Argument *Arg, bool isByVal) const {
   // We can only promote this argument if all of the uses are loads, or are GEP
   // instructions (with constant indices) that are subsequently loaded.
   bool HasLoadInEntryBlock = false;
@@ -206,8 +208,8 @@
 // Dead GEP's cause trouble later.  Just remove them if we run into
 // them.
 getAnalysis().deleteValue(GEP);
-GEP->getParent()->getInstList().erase(GEP);
-return isSafeToPromoteArgument(Arg);
+GEP->eraseFromParent();
+return isSafeToPromoteArgument(Arg, isByVal);
   }
   // Ensure that all of the indices are constants.
   SmallVector Operands;
@@ -326,8 +328,7 @@
 /// arguments, and returns the new function.  At this point, we know that it's
 /// safe to do so.
 Function *ArgPromotion::DoPromotion(Function *F,
-SmallVectorImpl &Args2Prom) {
-  SmallPtrSet ArgsToPromote(Args2Prom.begin(), Args2Prom.end());
+SmallPtrSet &ArgsToPromote) {
 
   // Start by computing a new prototype for the function, which is the same as
   // the old function, but has modified arguments.
@@ -497,7 +498,7 @@
 
 // Finally, remove the old call from the program, reducing the use-count of
 // F.
-Call->getParent()->getInstList().erase(Call);
+Call->eraseFromParent();
   }
 
   // Since we have now created the new function, splice the body of the old
@@ -532,7 +533,7 @@
   I2->setName(I->getName()+".val");
   LI->replaceAllUsesWith(I2);
   AA.replaceWithNewValue(LI, I2);
-  LI->getParent()->getInstList().erase(LI);
+  LI->eraseFromParent()

[llvm-commits] [llvm] r45882 - in /llvm/trunk: lib/Target/CellSPU/SPUISelDAGToDAG.cpp lib/Target/CellSPU/SPUISelLowering.cpp test/CodeGen/CellSPU/call_indirect.ll test/CodeGen/CellSPU/struct_1.ll test

2008-01-11 Thread Scott Michel
Author: pingbak
Date: Fri Jan 11 15:01:19 2008
New Revision: 45882

URL: http://llvm.org/viewvc/llvm-project?rev=45882&view=rev
Log:
More CellSPU refinements:

- struct_2.ll: Completely unaligned load/store testing

- call_indirect.ll, struct_1.ll: Add test lines to exercise
   X-form [$reg($reg)] addressing

At this point, loads and stores should be under control (he says
in an optimistic tone of voice.)

Added:
llvm/trunk/test/CodeGen/CellSPU/struct_2.ll
Modified:
llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp
llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp
llvm/trunk/test/CodeGen/CellSPU/call_indirect.ll
llvm/trunk/test/CodeGen/CellSPU/struct_1.ll

Modified: llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp?rev=45882&r1=45881&r2=45882&view=diff

==
--- llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp (original)
+++ llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp Fri Jan 11 15:01:19 2008
@@ -456,8 +456,9 @@
 const SDOperand Op0 = N.getOperand(0); // Frame index/base
 const SDOperand Op1 = N.getOperand(1); // Offset within base
 
-if (Op1.getOpcode() == ISD::Constant
-|| Op1.getOpcode() == ISD::TargetConstant) {
+if ((Op1.getOpcode() == ISD::Constant
+|| Op1.getOpcode() == ISD::TargetConstant)
+   && Op0.getOpcode() != SPUISD::XFormAddr) {
   ConstantSDNode *CN = dyn_cast(Op1);
   assert(CN != 0 && "SelectDFormAddr: Expected a constant");
 
@@ -499,12 +500,19 @@
 } else
   return false;
   } else if (Opc == SPUISD::DFormAddr) {
-// D-Form address: This is pretty straightforward, naturally...
-ConstantSDNode *CN = cast(N.getOperand(1));
-assert(CN != 0 && "SelectDFormAddr/SPUISD::DFormAddr expecting constant"); 
-Base = CurDAG->getTargetConstant(CN->getValue(), PtrTy);
-Index = N.getOperand(0);
-return true;
+// D-Form address: This is pretty straightforward,
+// naturally... but make sure that this isn't a D-form address
+// with a X-form address embedded within:
+const SDOperand Op0 = N.getOperand(0); // Frame index/base
+const SDOperand Op1 = N.getOperand(1); // Offset within base
+
+if (Op0.getOpcode() != SPUISD::XFormAddr) {
+  ConstantSDNode *CN = cast(Op1);
+  assert(CN != 0 && "SelectDFormAddr/SPUISD::DFormAddr expecting 
constant"); 
+  Base = CurDAG->getTargetConstant(CN->getValue(), PtrTy);
+  Index = Op0;
+  return true;
+}
   } else if (Opc == ISD::FrameIndex) {
 // Stack frame index must be less than 512 (divided by 16):
 FrameIndexSDNode *FI = dyn_cast(N);
@@ -564,6 +572,12 @@
 Base = N;
 Index = N.getOperand(1);
 return true;
+  } else if (Opc == SPUISD::DFormAddr) {
+// Must be a D-form address with an X-form address embedded
+// within:
+Base = N.getOperand(0);
+Index = N.getOperand(1);
+return true;
   } else if (N.getNumOperands() == 2) {
 SDOperand N1 = N.getOperand(0);
 SDOperand N2 = N.getOperand(1);
@@ -578,14 +592,14 @@
   /*UNREACHED*/
 } else {
   cerr << "SelectXFormAddr: 2-operand unhandled operand:\n";
-  N.Val->dump();
+  N.Val->dump(CurDAG);
   cerr << "\n";
   abort();
 /*UNREACHED*/
 }
   } else {
 cerr << "SelectXFormAddr: Unhandled operand type:\n";
-N.Val->dump();
+N.Val->dump(CurDAG);
 cerr << "\n";
 abort();
 /*UNREACHED*/

Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp?rev=45882&r1=45881&r2=45882&view=diff

==
--- llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp Fri Jan 11 15:01:19 2008
@@ -90,13 +90,11 @@
 const unsigned Opc = Op.getOpcode();
 return (Opc == ISD::GlobalAddress
 || Opc == ISD::GlobalTLSAddress
-/* || Opc ==  ISD::FrameIndex */
 || Opc == ISD::JumpTable
 || Opc == ISD::ConstantPool
 || Opc == ISD::ExternalSymbol
 || Opc == ISD::TargetGlobalAddress
 || Opc == ISD::TargetGlobalTLSAddress
-/* || Opc == ISD::TargetFrameIndex */
 || Opc == ISD::TargetJumpTable
 || Opc == ISD::TargetConstantPool
 || Opc == ISD::TargetExternalSymbol
@@ -566,7 +564,7 @@
 // Rotate the chunk if necessary
 if (rotamt < 0)
   rotamt += 16;
-if (rotamt != 0) {
+if (rotamt != 0 || !was16aligned) {
   SDVTList vecvts = DAG.getVTList(MVT::v16i8, MVT::Other);
 
   if (was16aligned) {
@@ -574,10 +572,12 @@
 Ops[1] = result;
 Ops[2] = DAG.getConstant(rotamt, MVT::i16);
   } else {
+   MVT::ValueType PtrVT = DAG.getTargetLoweringInfo().

[llvm-commits] [test-suite] r45883 - in /test-suite/trunk: External/SPEC/Makefile.spec Makefile.programs Makefile.rules Makefile.tests MultiSource/Makefile.multisrc SingleSource/Makefile.singlesrc TES

2008-01-11 Thread Evan Cheng
Author: evancheng
Date: Fri Jan 11 15:20:45 2008
New Revision: 45883

URL: http://llvm.org/viewvc/llvm-project?rev=45883&view=rev
Log:
- Clean up.
- Added DISABLE_LTO option to disable link time optimization. If this is not
  set, each file is compiled with -O0 and optimization is performed with
  opt -std-compile-opts and llvm-ld. If it is set, each file is compiled with
  -O3 (same as gcc, g++) and -disable-inlining and -disable-opt are passed to
  opt and llvm-ld. This is useful for performance comparison and finding ABI
  problems.

Modified:
test-suite/trunk/External/SPEC/Makefile.spec
test-suite/trunk/Makefile.programs
test-suite/trunk/Makefile.rules
test-suite/trunk/Makefile.tests
test-suite/trunk/MultiSource/Makefile.multisrc
test-suite/trunk/SingleSource/Makefile.singlesrc
test-suite/trunk/TEST.nightly.Makefile

Modified: test-suite/trunk/External/SPEC/Makefile.spec
URL: 
http://llvm.org/viewvc/llvm-project/test-suite/trunk/External/SPEC/Makefile.spec?rev=45883&r1=45882&r2=45883&view=diff

==
--- test-suite/trunk/External/SPEC/Makefile.spec (original)
+++ test-suite/trunk/External/SPEC/Makefile.spec Fri Jan 11 15:20:45 2008
@@ -7,10 +7,6 @@
 
 include $(LEVEL)/MultiSource/Makefile.multisrc
 
-# Do not pass -Wall to compile commands...
-LCCFLAGS  := -O3
-LCXXFLAGS := -O3
-
 CPPFLAGS += -I $(SPEC_BENCH_DIR)/src/
 SPEC_SANDBOX := $(PROGDIR)/External/SPEC/Sandbox.sh
 

Modified: test-suite/trunk/Makefile.programs
URL: 
http://llvm.org/viewvc/llvm-project/test-suite/trunk/Makefile.programs?rev=45883&r1=45882&r2=45883&view=diff

==
--- test-suite/trunk/Makefile.programs (original)
+++ test-suite/trunk/Makefile.programs Fri Jan 11 15:20:45 2008
@@ -348,7 +348,7 @@
 
 $(PROGRAMS_TO_TEST:%=Output/%.cbe): \
 Output/%.cbe: Output/%.cbe.c
-   -$(CC) $< -o $@ $(LDFLAGS) $(CFLAGS) -fno-strict-aliasing -O2 
-fno-inline $(TARGET_FLAGS) $(LIBS)
+   -$(CC) $< -o $@ $(LDFLAGS) $(CFLAGS) -fno-strict-aliasing -fno-inline 
$(TARGET_FLAGS) $(LIBS)
 
 #
 # Compile a linked program to machine code with LLC.

Modified: test-suite/trunk/Makefile.rules
URL: 
http://llvm.org/viewvc/llvm-project/test-suite/trunk/Makefile.rules?rev=45883&r1=45882&r2=45883&view=diff

==
--- test-suite/trunk/Makefile.rules (original)
+++ test-suite/trunk/Makefile.rules Fri Jan 11 15:20:45 2008
@@ -350,6 +350,11 @@
 CPPFLAGS += -DSMALL_PROBLEM_SIZE
 endif
 
+ifdef DISABLE_LTO
+EXTRA_LOPT_OPTIONS += -disable-opt -disable-inlining
+EXTRA_LINKTIME_OPT_FLAGS += -disable-opt -disable-inlining
+endif
+
 #
 # Compile commands with libtool.
 #

Modified: test-suite/trunk/Makefile.tests
URL: 
http://llvm.org/viewvc/llvm-project/test-suite/trunk/Makefile.tests?rev=45883&r1=45882&r2=45883&view=diff

==
--- test-suite/trunk/Makefile.tests (original)
+++ test-suite/trunk/Makefile.tests Fri Jan 11 15:20:45 2008
@@ -34,9 +34,23 @@
 .PRECIOUS: Output/%.llvm.bc
 .PRECIOUS: Output/%.llvm
 
-LCCFLAGS  += -O2
-LCXXFLAGS += -O2
-LLCFLAGS =
+ifndef CFLAGS
+CFLAGS = -O3
+endif
+ifndef CXXFLAGS
+CXXFLAGS = -O3
+endif
+
+# If LTO is on, compile each .c .cpp file with -O0 and optimize with
+# opt and llvm-ld.
+ifndef DISABLE_LTO
+LCCFLAGS := -O0 $(CPPFLAGS)
+LCXXFLAGS := -O0 $(CPPFLAGS)
+else
+LCCFLAGS := $(CFLAGS) $(CPPFLAGS)
+LCXXFLAGS := $(CXXFLAGS) $(CPPFLAGS)
+endif
+
 FAILURE  = $(LLVM_SRC_ROOT)/test/Failure.sh
 LLCLIBS := $(LLCLIBS) -lm
 
@@ -46,22 +60,22 @@
 
 # Compile from X.c to Output/X.ll
 Output/%.bc: %.c $(LCC1) Output/.dir $(INCLUDES)
-   -$(LLVMGCC) $(CPPFLAGS) $(LCCFLAGS) $(TARGET_FLAGS) -O0 -c $< -o $@ 
-emit-llvm
+   -$(LLVMGCC) $(CPPFLAGS) $(LCCFLAGS) $(TARGET_FLAGS) -c $< -o $@ 
-emit-llvm
-$(call UPGRADE_LL,$@)
 
 # Compile from X.cpp to Output/X.ll
 Output/%.bc: %.cpp $(LCC1XX) Output/.dir $(INCLUDES)
-   -$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) $(TARGET_FLAGS) -O0 -c $< -o $@ 
-emit-llvm
+   -$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) $(TARGET_FLAGS) -c $< -o $@ 
-emit-llvm
-$(call UPGRADE_LL,$@)
 
 # Compile from X.cc to Output/X.ll
 Output/%.bc: %.cc $(LCC1XX) Output/.dir $(INCLUDES)
-   -$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) $(TARGET_FLAGS) -O0 -c $< -o $@ 
-emit-llvm
+   -$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) $(TARGET_FLAGS) -c $< -o $@ 
-emit-llvm
-$(call UPGRADE_LL,$@)
 
 # Compile from X.C to Output/X.ll
 Output/%.bc: %.C $(LCC1XX) Output/.dir $(INCLUDES)
-   -$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) $(TARGET_FLAGS) -O0 -c $< -o $@ 
-emit-llvm
+   -$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) $(TARGET_FLAGS) -c $< -o $@ 
-emit-llvm
-$(call UPGRADE_LL,$@)
 
 # LLVM Assemble from X.ll to Output/X.bc.  Because we are coming directly from

Modified: test-suite/trunk/MultiSource

[llvm-commits] [llvm] r45884 - in /llvm/trunk: lib/AsmParser/llvmAsmParser.y test/Assembler/2008-01-11-VarargAttrs.ll

2008-01-11 Thread Duncan Sands
Author: baldrick
Date: Fri Jan 11 15:23:39 2008
New Revision: 45884

URL: http://llvm.org/viewvc/llvm-project?rev=45884&view=rev
Log:
If there are attributes on the varargs part of a
call, don't discard them.

Added:
llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll
Modified:
llvm/trunk/lib/AsmParser/llvmAsmParser.y

Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y?rev=45884&r1=45883&r2=45884&view=diff

==
--- llvm/trunk/lib/AsmParser/llvmAsmParser.y (original)
+++ llvm/trunk/lib/AsmParser/llvmAsmParser.y Fri Jan 11 15:23:39 2008
@@ -2675,8 +2675,15 @@
 
   if (Ty->isVarArg()) {
 if (I == E)
-  for (; ArgI != ArgE; ++ArgI)
+  for (; ArgI != ArgE; ++ArgI, ++index) {
 Args.push_back(ArgI->Val); // push the remaining varargs
+if (ArgI->Attrs != ParamAttr::None) {
+  ParamAttrsWithIndex PAWI;
+  PAWI.index = index;
+  PAWI.attrs = ArgI->Attrs;
+  Attrs.push_back(PAWI);
+}
+  }
   } else if (I != E || ArgI != ArgE)
 GEN_ERROR("Invalid number of parameters detected");
 }
@@ -3006,8 +3013,15 @@
   }
   if (Ty->isVarArg()) {
 if (I == E)
-  for (; ArgI != ArgE; ++ArgI)
+  for (; ArgI != ArgE; ++ArgI, ++index) {
 Args.push_back(ArgI->Val); // push the remaining varargs
+if (ArgI->Attrs != ParamAttr::None) {
+  ParamAttrsWithIndex PAWI;
+  PAWI.index = index;
+  PAWI.attrs = ArgI->Attrs;
+  Attrs.push_back(PAWI);
+}
+  }
   } else if (I != E || ArgI != ArgE)
 GEN_ERROR("Invalid number of parameters detected");
 }

Added: llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll?rev=45884&view=auto

==
--- llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll (added)
+++ llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll Fri Jan 11 15:23:39 2008
@@ -0,0 +1,10 @@
+; RUN: llvm-as < %s | llvm-dis | grep byval | count 2
+
+   %struct = type {  }
+
+declare void @foo(...)
+
+define void @bar() {
+   call void (...)* @foo(%struct* byval null, %struct* byval null )
+   ret void
+}


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45875 - /llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 12:55:10 2008
New Revision: 45875

URL: http://llvm.org/viewvc/llvm-project?rev=45875&view=rev
Log:
replace a loop with a constant time check.

Modified:
llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=45875&r1=45874&r2=45875&view=diff

==
--- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Fri Jan 11 12:55:10 2008
@@ -125,9 +125,8 @@
 
 // Ensure that this call site is CALLING the function, not passing it as
 // an argument.
-for (CallSite::arg_iterator AI = CS.arg_begin(), E = CS.arg_end();
- AI != E; ++AI)
-  if (*AI == F) return false;   // Passing the function address in!
+if (UI.getOperandNo() != 0) 
+  return false;
   }
 
   // Check to see which arguments are promotable.  If an argument is not


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45874 - /llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 12:47:45 2008
New Revision: 45874

URL: http://llvm.org/viewvc/llvm-project?rev=45874&view=rev
Log:
another minor datastructure tweak.

Modified:
llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=45874&r1=45873&r2=45874&view=diff

==
--- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Fri Jan 11 12:47:45 2008
@@ -328,7 +328,7 @@
 /// safe to do so.
 Function *ArgPromotion::DoPromotion(Function *F,
 SmallVectorImpl &Args2Prom) {
-  std::set ArgsToPromote(Args2Prom.begin(), Args2Prom.end());
+  SmallPtrSet ArgsToPromote(Args2Prom.begin(), Args2Prom.end());
 
   // Start by computing a new prototype for the function, which is the same as
   // the old function, but has modified arguments.


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [test-suite] r45879 - /test-suite/trunk/MultiSource/Applications/minisat/Main.cpp

2008-01-11 Thread Evan Cheng
Author: evancheng
Date: Fri Jan 11 14:06:43 2008
New Revision: 45879

URL: http://llvm.org/viewvc/llvm-project?rev=45879&view=rev
Log:
Fix bad bad code.

Modified:
test-suite/trunk/MultiSource/Applications/minisat/Main.cpp

Modified: test-suite/trunk/MultiSource/Applications/minisat/Main.cpp
URL: 
http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Applications/minisat/Main.cpp?rev=45879&r1=45878&r2=45879&view=diff

==
--- test-suite/trunk/MultiSource/Applications/minisat/Main.cpp (original)
+++ test-suite/trunk/MultiSource/Applications/minisat/Main.cpp Fri Jan 11 
14:06:43 2008
@@ -224,7 +224,7 @@
 {
 int len = strlen(prefix);
 if (strncmp(str, prefix, len) == 0)
-return str + len;
+return strdup(str + len);
 else
 return NULL;
 }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45873 - /llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 12:43:58 2008
New Revision: 45873

URL: http://llvm.org/viewvc/llvm-project?rev=45873&view=rev
Log:
start using smallvector to avoid vector heap thrashing.

Modified:
llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=45873&r1=45872&r2=45873&view=diff

==
--- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Fri Jan 11 12:43:58 2008
@@ -70,7 +70,8 @@
   private:
 bool PromoteArguments(CallGraphNode *CGN);
 bool isSafeToPromoteArgument(Argument *Arg) const;
-Function *DoPromotion(Function *F, std::vector &ArgsToPromote);
+Function *DoPromotion(Function *F, 
+  SmallVectorImpl &ArgsToPromote);
   };
 
   char ArgPromotion::ID = 0;
@@ -108,7 +109,7 @@
   if (!F || !F->hasInternalLinkage()) return false;
 
   // First check: see if there are any pointer arguments!  If not, quick exit.
-  std::vector PointerArgs;
+  SmallVector PointerArgs;
   for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(); I != E; 
++I)
 if (isa(I->getType()))
   PointerArgs.push_back(I);
@@ -193,8 +194,8 @@
   // instructions (with constant indices) that are subsequently loaded.
   bool HasLoadInEntryBlock = false;
   BasicBlock *EntryBlock = Arg->getParent()->begin();
-  std::vector Loads;
-  std::vector > GEPIndices;
+  SmallVector Loads;
+  std::vector > GEPIndices;
   for (Value::use_iterator UI = Arg->use_begin(), E = Arg->use_end();
UI != E; ++UI)
 if (LoadInst *LI = dyn_cast(*UI)) {
@@ -210,7 +211,7 @@
 return isSafeToPromoteArgument(Arg);
   }
   // Ensure that all of the indices are constants.
-  std::vector Operands;
+  SmallVector Operands;
   for (unsigned i = 1, e = GEP->getNumOperands(); i != e; ++i)
 if (ConstantInt *C = dyn_cast(GEP->getOperand(i)))
   Operands.push_back(C);
@@ -326,7 +327,7 @@
 /// arguments, and returns the new function.  At this point, we know that it's
 /// safe to do so.
 Function *ArgPromotion::DoPromotion(Function *F,
-std::vector &Args2Prom) {
+SmallVectorImpl &Args2Prom) {
   std::set ArgsToPromote(Args2Prom.begin(), Args2Prom.end());
 
   // Start by computing a new prototype for the function, which is the same as


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45869 - /llvm/trunk/lib/Target/X86/README.txt

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 12:00:13 2008
New Revision: 45869

URL: http://llvm.org/viewvc/llvm-project?rev=45869&view=rev
Log:
add a note, remove a done deed.

Modified:
llvm/trunk/lib/Target/X86/README.txt

Modified: llvm/trunk/lib/Target/X86/README.txt
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/README.txt?rev=45869&r1=45868&r2=45869&view=diff

==
--- llvm/trunk/lib/Target/X86/README.txt (original)
+++ llvm/trunk/lib/Target/X86/README.txt Fri Jan 11 12:00:13 2008
@@ -998,24 +998,6 @@
 
 //===-===//
 
-For code like:
-phi (undef, x)
-
-We get an implicit def on the undef side. If the phi is spilled, we then get:
-implicitdef xmm1
-store xmm1 -> stack
-
-It should be possible to teach the x86 backend to "fold" the store into the
-implicitdef, which just deletes the implicit def.
-
-These instructions should go away:
-#IMPLICIT_DEF %xmm1 
-movaps %xmm1, 192(%esp) 
-movaps %xmm1, 224(%esp) 
-movaps %xmm1, 176(%esp)
-
-//===-===//
-
 This is a "commutable two-address" register coallescing deficiency:
 
 define <4 x float> @test1(<4 x float> %V) {
@@ -1510,6 +1492,9 @@
 
 if the flags of the xor are dead.
 
+Likewise, we isel "x<<1" into "add reg,reg".  If reg is spilled, this should
+be folded into: shl [mem], 1
+
 //===-===//
 
 This testcase misses a read/modify/write opportunity (from PR1425):


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45870 - in /llvm/trunk/lib/Target/X86: X86Instr64bit.td X86InstrInfo.cpp X86InstrInfo.td

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 12:00:50 2008
New Revision: 45870

URL: http://llvm.org/viewvc/llvm-project?rev=45870&view=rev
Log:
remove xchg and shift-reg-by-1 instructions, which are dead.

Modified:
llvm/trunk/lib/Target/X86/X86Instr64bit.td
llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
llvm/trunk/lib/Target/X86/X86InstrInfo.td

Modified: llvm/trunk/lib/Target/X86/X86Instr64bit.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Instr64bit.td?rev=45870&r1=45869&r2=45870&view=diff

==
--- llvm/trunk/lib/Target/X86/X86Instr64bit.td (original)
+++ llvm/trunk/lib/Target/X86/X86Instr64bit.td Fri Jan 11 12:00:50 2008
@@ -161,17 +161,6 @@
 def BSWAP64r : RI<0xC8, AddRegFrm, (outs GR64:$dst), (ins GR64:$src),
   "bswap{q}\t$dst", 
   [(set GR64:$dst, (bswap GR64:$src))]>, TB;
-// Exchange
-let neverHasSideEffects = 1 in {
-def XCHG64rr : RI<0x87, MRMDestReg, (outs), (ins GR64:$src1, GR64:$src2),
-  "xchg{q}\t{$src2|$src1}, {$src1|$src2}", []>;
-let mayLoad = 1, mayStore = 1 in {
-def XCHG64mr : RI<0x87, MRMDestMem, (outs), (ins i64mem:$src1, GR64:$src2),
-  "xchg{q}\t{$src2|$src1}, {$src1|$src2}", []>;
-def XCHG64rm : RI<0x87, MRMSrcMem, (outs), (ins GR64:$src1, i64mem:$src2),
-  "xchg{q}\t{$src2|$src1}, {$src1|$src2}", []>;
-}
-}
 
 // Bit scan instructions.
 let Defs = [EFLAGS] in {
@@ -526,9 +515,8 @@
 def SHL64ri  : RIi8<0xC1, MRM4r, (outs GR64:$dst), (ins GR64:$src1, 
i8imm:$src2),
 "shl{q}\t{$src2, $dst|$dst, $src2}",
 [(set GR64:$dst, (shl GR64:$src1, (i8 imm:$src2)))]>;
-let neverHasSideEffects = 1 in
-def SHL64r1  : RI<0xD1, MRM4r, (outs GR64:$dst), (ins GR64:$src1),
- "shl{q}\t$dst", []>;
+// NOTE: We don't use shifts of a register by one, because 'add reg,reg' is
+// cheaper.
 } // isTwoAddress
 
 let Uses = [CL] in

Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=45870&r1=45869&r2=45870&view=diff

==
--- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Fri Jan 11 12:00:50 2008
@@ -145,16 +145,12 @@
 { X86::SBB64ri32,   X86::SBB64mi32 },
 { X86::SBB64ri8,X86::SBB64mi8 },
 { X86::SBB64rr, X86::SBB64mr },
-{ X86::SHL16r1, X86::SHL16m1 },
 { X86::SHL16rCL,X86::SHL16mCL },
 { X86::SHL16ri, X86::SHL16mi },
-{ X86::SHL32r1, X86::SHL32m1 },
 { X86::SHL32rCL,X86::SHL32mCL },
 { X86::SHL32ri, X86::SHL32mi },
-{ X86::SHL64r1, X86::SHL64m1 },
 { X86::SHL64rCL,X86::SHL64mCL },
 { X86::SHL64ri, X86::SHL64mi },
-{ X86::SHL8r1,  X86::SHL8m1 },
 { X86::SHL8rCL, X86::SHL8mCL },
 { X86::SHL8ri,  X86::SHL8mi },
 { X86::SHLD16rrCL,  X86::SHLD16mrCL },
@@ -286,11 +282,7 @@
 { X86::TEST16ri,X86::TEST16mi, 1 },
 { X86::TEST32ri,X86::TEST32mi, 1 },
 { X86::TEST64ri32,  X86::TEST64mi32, 1 },
-{ X86::TEST8ri, X86::TEST8mi, 1 },
-{ X86::XCHG16rr,X86::XCHG16mr, 0 },
-{ X86::XCHG32rr,X86::XCHG32mr, 0 },
-{ X86::XCHG64rr,X86::XCHG64mr, 0 },
-{ X86::XCHG8rr, X86::XCHG8mr, 0 }
+{ X86::TEST8ri, X86::TEST8mi, 1 }
   };
 
   for (unsigned i = 0, e = array_lengthof(OpTbl0); i != e; ++i) {
@@ -417,11 +409,7 @@
 { X86::TEST8rr, X86::TEST8rm },
 // FIXME: TEST*rr EAX,EAX ---> CMP [mem], 0
 { X86::UCOMISDrr,   X86::UCOMISDrm },
-{ X86::UCOMISSrr,   X86::UCOMISSrm },
-{ X86::XCHG16rr,X86::XCHG16rm },
-{ X86::XCHG32rr,X86::XCHG32rm },
-{ X86::XCHG64rr,X86::XCHG64rm },
-{ X86::XCHG8rr, X86::XCHG8rm }
+{ X86::UCOMISSrr,   X86::UCOMISSrm }
   };
 
   for (unsigned i = 0, e = array_lengthof(OpTbl1); i != e; ++i) {

Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=45870&r1=45869&r2=45870&view=diff

==
--- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Fri Jan 11 12:00:50 2008
@@ -418,39 +418,6 @@
"bswap{l}\t$dst", 
[(set GR32:$dst, (bswap GR32:$src))]>, TB;
 
-// FIXME: Model xchg* as two address instructions?
-let neverHasSideEffects = 1 in {
-def XCHG8rr  : I<0x86, MRMDestReg,// xchg GR8, GR8
- (outs), (ins GR8:$src1, GR8:$src2),
- "xchg{b}\t{$src2|$src1}, {$src1|$src2}", []>;
-def XCHG16rr : I<0x87, MRMDestReg,// xchg GR16, GR16
- (outs), (ins GR16:$src1, GR16:$src2),
-

[llvm-commits] [llvm] r45871 - in /llvm/trunk: include/llvm/CodeGen/MachineInstr.h lib/Target/ARM/ARMConstantIslandPass.cpp lib/Target/ARM/ARMInstrInfo.cpp lib/Target/ARM/ARMLoadStoreOptimizer.cpp lib

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 12:10:50 2008
New Revision: 45871

URL: http://llvm.org/viewvc/llvm-project?rev=45871&view=rev
Log:
rename MachineInstr::setInstrDescriptor -> setDesc

Modified:
llvm/trunk/include/llvm/CodeGen/MachineInstr.h
llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp
llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp
llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp
llvm/trunk/lib/Target/ARM/ARMRegisterInfo.cpp
llvm/trunk/lib/Target/Alpha/AlphaBranchSelector.cpp
llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp
llvm/trunk/lib/Target/Sparc/FPMover.cpp
llvm/trunk/lib/Target/X86/X86FloatingPoint.cpp
llvm/trunk/lib/Target/X86/X86InstrInfo.cpp

Modified: llvm/trunk/include/llvm/CodeGen/MachineInstr.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineInstr.h?rev=45871&r1=45870&r2=45871&view=diff

==
--- llvm/trunk/include/llvm/CodeGen/MachineInstr.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineInstr.h Fri Jan 11 12:10:50 2008
@@ -163,10 +163,10 @@
   /// (before the first implicit operand). 
   void addOperand(const MachineOperand &Op);
   
-  /// setInstrDescriptor - Replace the instruction descriptor (thus opcode) of
+  /// setDesc - Replace the instruction descriptor (thus opcode) of
   /// the current instruction with a new one.
   ///
-  void setInstrDescriptor(const TargetInstrDesc &tid) { TID = &tid; }
+  void setDesc(const TargetInstrDesc &tid) { TID = &tid; }
 
   /// RemoveOperand - Erase an operand  from an instruction, leaving it with 
one
   /// fewer operand than it started with.

Modified: llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp?rev=45871&r1=45870&r2=45871&view=diff

==
--- llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp Fri Jan 11 12:10:50 2008
@@ -1162,7 +1162,7 @@
 
   // Use BL to implement far jump.
   Br.MaxDisp = (1 << 21) * 2;
-  MI->setInstrDescriptor(TII->get(ARM::tBfar));
+  MI->setDesc(TII->get(ARM::tBfar));
   BBSizes[MBB->getNumber()] += 2;
   AdjustBBOffsetsAfter(MBB, 2);
   HasFarJump = true;

Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp?rev=45871&r1=45870&r2=45871&view=diff

==
--- llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp Fri Jan 11 12:10:50 2008
@@ -635,7 +635,7 @@
   if (isVarArg)
 continue;
   Reg = ARM::PC;
-  PopMI->setInstrDescriptor(get(ARM::tPOP_RET));
+  PopMI->setDesc(get(ARM::tPOP_RET));
   MBB.erase(MI);
 }
 PopMI->addOperand(MachineOperand::CreateReg(Reg, true));
@@ -792,7 +792,7 @@
 const std::vector &Pred) const 
{
   unsigned Opc = MI->getOpcode();
   if (Opc == ARM::B || Opc == ARM::tB) {
-MI->setInstrDescriptor(get(Opc == ARM::B ? ARM::Bcc : ARM::tBcc));
+MI->setDesc(get(Opc == ARM::B ? ARM::Bcc : ARM::tBcc));
 MI->addOperand(MachineOperand::CreateImm(Pred[0].getImm()));
 MI->addOperand(MachineOperand::CreateReg(Pred[1].getReg(), false));
 return true;

Modified: llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp?rev=45871&r1=45870&r2=45871&view=diff

==
--- llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp Fri Jan 11 12:10:50 2008
@@ -741,7 +741,7 @@
 if (PrevMI->getOpcode() == ARM::LDM) {
   MachineOperand &MO = PrevMI->getOperand(PrevMI->getNumOperands()-1);
   if (MO.getReg() == ARM::LR) {
-PrevMI->setInstrDescriptor(TII->get(ARM::LDM_RET));
+PrevMI->setDesc(TII->get(ARM::LDM_RET));
 MO.setReg(ARM::PC);
 MBB.erase(MBBI);
 return true;

Modified: llvm/trunk/lib/Target/ARM/ARMRegisterInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMRegisterInfo.cpp?rev=45871&r1=45870&r2=45871&view=diff

==
--- llvm/trunk/lib/Target/ARM/ARMRegisterInfo.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMRegisterInfo.cpp Fri Jan 11 12:10:50 2008
@@ -589,14 +589,14 @@
 Offset += MI.getOperand(i+1).getImm();
 if (Offset == 0) {
   // Turn it into a move.
-  MI.setInstrDescriptor(TII.get(ARM::MOVr));
+  MI.setDesc(TII.get(ARM::MOVr));
   MI.getOperand(i).ChangeToRegister(FrameReg, false);
   MI.RemoveOperand(i+1);
   return;
 } 

[llvm-commits] [llvm] r45878 - /llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 13:36:30 2008
New Revision: 45878

URL: http://llvm.org/viewvc/llvm-project?rev=45878&view=rev
Log:
Use smallptrset instead of std::set for efficiency.

Modified:
llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=45878&r1=45877&r2=45878&view=diff

==
--- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Fri Jan 11 13:36:30 2008
@@ -282,7 +282,7 @@
 
   // Because there could be several/many load instructions, remember which
   // blocks we know to be transparent to the load.
-  std::set TranspBlocks;
+  SmallPtrSet TranspBlocks;
 
   AliasAnalysis &AA = getAnalysis();
   TargetData &TD = getAnalysis();
@@ -304,7 +304,8 @@
 // To do this, we perform a depth first search on the inverse CFG from the
 // loading block.
 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
-  for (idf_ext_iterator I = idf_ext_begin(*PI, TranspBlocks),
+  for (idf_ext_iterator >
+ I = idf_ext_begin(*PI, TranspBlocks),
  E = idf_ext_end(*PI, TranspBlocks); I != E; ++I)
 if (AA.canBasicBlockModify(**I, Arg, LoadSize))
   return false;


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45877 - /llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 13:34:32 2008
New Revision: 45877

URL: http://llvm.org/viewvc/llvm-project?rev=45877&view=rev
Log:
a byval argument is guaranteed to be valid to load.

Modified:
llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=45877&r1=45876&r2=45877&view=diff

==
--- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Fri Jan 11 13:34:32 2008
@@ -193,7 +193,15 @@
 bool ArgPromotion::isSafeToPromoteArgument(Argument *Arg, bool isByVal) const {
   // We can only promote this argument if all of the uses are loads, or are GEP
   // instructions (with constant indices) that are subsequently loaded.
-  bool HasLoadInEntryBlock = false;
+
+  // We can also only promote the load if we can guarantee that it will happen.
+  // Promoting a load causes the load to be unconditionally executed in the
+  // caller, so we can't turn a conditional load into an unconditional load in
+  // general.
+  bool SafeToUnconditionallyLoad = false;
+  if (isByVal)   // ByVal arguments are always safe to load from.
+SafeToUnconditionallyLoad = true;
+  
   BasicBlock *EntryBlock = Arg->getParent()->begin();
   SmallVector Loads;
   std::vector > GEPIndices;
@@ -202,7 +210,10 @@
 if (LoadInst *LI = dyn_cast(*UI)) {
   if (LI->isVolatile()) return false;  // Don't hack volatile loads
   Loads.push_back(LI);
-  HasLoadInEntryBlock |= LI->getParent() == EntryBlock;
+  
+  // If this load occurs in the entry block, then the pointer is 
+  // unconditionally loaded.
+  SafeToUnconditionallyLoad |= LI->getParent() == EntryBlock;
 } else if (GetElementPtrInst *GEP = dyn_cast(*UI)) {
   if (GEP->use_empty()) {
 // Dead GEP's cause trouble later.  Just remove them if we run into
@@ -225,7 +236,10 @@
 if (LoadInst *LI = dyn_cast(*UI)) {
   if (LI->isVolatile()) return false;  // Don't hack volatile loads
   Loads.push_back(LI);
-  HasLoadInEntryBlock |= LI->getParent() == EntryBlock;
+  
+  // If this load occurs in the entry block, then the pointer is 
+  // unconditionally loaded.
+  SafeToUnconditionallyLoad |= LI->getParent() == EntryBlock;
 } else {
   return false;
 }
@@ -257,7 +271,8 @@
   // of the pointer in the entry block of the function) or if we can prove that
   // all pointers passed in are always to legal locations (for example, no null
   // pointers are passed in, no pointers to free'd memory, etc).
-  if (!HasLoadInEntryBlock && !AllCalleesPassInValidPointerForArgument(Arg))
+  if (!SafeToUnconditionallyLoad &&
+  !AllCalleesPassInValidPointerForArgument(Arg))
 return false;   // Cannot prove that this is safe!!
 
   // Okay, now we know that the argument is only used by load instructions and


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [test-suite] r45883 - in /test-suite/trunk: External/SPEC/Makefile.spec Makefile.programs Makefile.rules Makefile.tests MultiSource/Makefile.multisrc SingleSource/Makefile.singlesrc

2008-01-11 Thread Tanya Lattner
Switching the nightly tester makefile to be -O3 is going to mess with  
performance data over time (was it O2 always before?). The nightly  
testers probably should be modified so that this information is  
propagated to the tester databases and also you should be able to set  
it when you run the nightly tester.

-Tanya

On Jan 11, 2008, at 1:20 PM, Evan Cheng wrote:

> Author: evancheng
> Date: Fri Jan 11 15:20:45 2008
> New Revision: 45883
>
> URL: http://llvm.org/viewvc/llvm-project?rev=45883&view=rev
> Log:
> - Clean up.
> - Added DISABLE_LTO option to disable link time optimization. If  
> this is not
>   set, each file is compiled with -O0 and optimization is performed  
> with
>   opt -std-compile-opts and llvm-ld. If it is set, each file is  
> compiled with
>   -O3 (same as gcc, g++) and -disable-inlining and -disable-opt are  
> passed to
>   opt and llvm-ld. This is useful for performance comparison and  
> finding ABI
>   problems.
>
> Modified:
> test-suite/trunk/External/SPEC/Makefile.spec
> test-suite/trunk/Makefile.programs
> test-suite/trunk/Makefile.rules
> test-suite/trunk/Makefile.tests
> test-suite/trunk/MultiSource/Makefile.multisrc
> test-suite/trunk/SingleSource/Makefile.singlesrc
> test-suite/trunk/TEST.nightly.Makefile
>
> Modified: test-suite/trunk/External/SPEC/Makefile.spec
> URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/External/ 
> SPEC/Makefile.spec?rev=45883&r1=45882&r2=45883&view=diff
>
> == 
> 
> --- test-suite/trunk/External/SPEC/Makefile.spec (original)
> +++ test-suite/trunk/External/SPEC/Makefile.spec Fri Jan 11  
> 15:20:45 2008
> @@ -7,10 +7,6 @@
>
>  include $(LEVEL)/MultiSource/Makefile.multisrc
>
> -# Do not pass -Wall to compile commands...
> -LCCFLAGS  := -O3
> -LCXXFLAGS := -O3
> -
>  CPPFLAGS += -I $(SPEC_BENCH_DIR)/src/
>  SPEC_SANDBOX := $(PROGDIR)/External/SPEC/Sandbox.sh
>
>
> Modified: test-suite/trunk/Makefile.programs
> URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ 
> Makefile.programs?rev=45883&r1=45882&r2=45883&view=diff
>
> == 
> 
> --- test-suite/trunk/Makefile.programs (original)
> +++ test-suite/trunk/Makefile.programs Fri Jan 11 15:20:45 2008
> @@ -348,7 +348,7 @@
>
>  $(PROGRAMS_TO_TEST:%=Output/%.cbe): \
>  Output/%.cbe: Output/%.cbe.c
> - -$(CC) $< -o $@ $(LDFLAGS) $(CFLAGS) -fno-strict-aliasing -O2 - 
> fno-inline $(TARGET_FLAGS) $(LIBS)
> + -$(CC) $< -o $@ $(LDFLAGS) $(CFLAGS) -fno-strict-aliasing -fno- 
> inline $(TARGET_FLAGS) $(LIBS)
>
>  #
>  # Compile a linked program to machine code with LLC.
>
> Modified: test-suite/trunk/Makefile.rules
> URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ 
> Makefile.rules?rev=45883&r1=45882&r2=45883&view=diff
>
> == 
> 
> --- test-suite/trunk/Makefile.rules (original)
> +++ test-suite/trunk/Makefile.rules Fri Jan 11 15:20:45 2008
> @@ -350,6 +350,11 @@
>  CPPFLAGS += -DSMALL_PROBLEM_SIZE
>  endif
>
> +ifdef DISABLE_LTO
> +EXTRA_LOPT_OPTIONS += -disable-opt -disable-inlining
> +EXTRA_LINKTIME_OPT_FLAGS += -disable-opt -disable-inlining
> +endif
> +
>  #
>  # Compile commands with libtool.
>  #
>
> Modified: test-suite/trunk/Makefile.tests
> URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ 
> Makefile.tests?rev=45883&r1=45882&r2=45883&view=diff
>
> == 
> 
> --- test-suite/trunk/Makefile.tests (original)
> +++ test-suite/trunk/Makefile.tests Fri Jan 11 15:20:45 2008
> @@ -34,9 +34,23 @@
>  .PRECIOUS: Output/%.llvm.bc
>  .PRECIOUS: Output/%.llvm
>
> -LCCFLAGS  += -O2
> -LCXXFLAGS += -O2
> -LLCFLAGS =
> +ifndef CFLAGS
> +CFLAGS = -O3
> +endif
> +ifndef CXXFLAGS
> +CXXFLAGS = -O3
> +endif
> +
> +# If LTO is on, compile each .c .cpp file with -O0 and optimize with
> +# opt and llvm-ld.
> +ifndef DISABLE_LTO
> +LCCFLAGS := -O0 $(CPPFLAGS)
> +LCXXFLAGS := -O0 $(CPPFLAGS)
> +else
> +LCCFLAGS := $(CFLAGS) $(CPPFLAGS)
> +LCXXFLAGS := $(CXXFLAGS) $(CPPFLAGS)
> +endif
> +
>  FAILURE  = $(LLVM_SRC_ROOT)/test/Failure.sh
>  LLCLIBS := $(LLCLIBS) -lm
>
> @@ -46,22 +60,22 @@
>
>  # Compile from X.c to Output/X.ll
>  Output/%.bc: %.c $(LCC1) Output/.dir $(INCLUDES)
> - -$(LLVMGCC) $(CPPFLAGS) $(LCCFLAGS) $(TARGET_FLAGS) -O0 -c $< -o  
> $@ -emit-llvm
> + -$(LLVMGCC) $(CPPFLAGS) $(LCCFLAGS) $(TARGET_FLAGS) -c $< -o $@ - 
> emit-llvm
>   -$(call UPGRADE_LL,$@)
>
>  # Compile from X.cpp to Output/X.ll
>  Output/%.bc: %.cpp $(LCC1XX) Output/.dir $(INCLUDES)
> - -$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) $(TARGET_FLAGS) -O0 -c $< -o  
> $@ -emit-llvm
> + -$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) $(TARGET_FLAGS) -c $< -o $@ - 
> emit-llvm
>   -$(call UPGRADE_LL,$@)
>
>  # Compile from X.cc to Output/X.ll
>  Output/%.bc: %.cc $(LCC1XX) 

[llvm-commits] [llvm] r45885 - /llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll

2008-01-11 Thread Duncan Sands
Author: baldrick
Date: Fri Jan 11 15:46:24 2008
New Revision: 45885

URL: http://llvm.org/viewvc/llvm-project?rev=45885&view=rev
Log:
Two occurrences on one line count as one...

Modified:
llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll

Modified: llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll?rev=45885&r1=45884&r2=45885&view=diff

==
--- llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll (original)
+++ llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll Fri Jan 11 15:46:24 2008
@@ -1,10 +1,10 @@
-; RUN: llvm-as < %s | llvm-dis | grep byval | count 2
+; RUN: llvm-as < %s | llvm-dis | grep byval
 
%struct = type {  }
 
 declare void @foo(...)
 
 define void @bar() {
-   call void (...)* @foo(%struct* byval null, %struct* byval null )
+   call void (...)* @foo(%struct* byval null )
ret void
 }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45881 - /llvm/trunk/test/CodeGen/X86/aligned-comm.ll

2008-01-11 Thread Dale Johannesen
Author: johannes
Date: Fri Jan 11 14:47:33 2008
New Revision: 45881

URL: http://llvm.org/viewvc/llvm-project?rev=45881&view=rev
Log:
Disable for now.


Modified:
llvm/trunk/test/CodeGen/X86/aligned-comm.ll

Modified: llvm/trunk/test/CodeGen/X86/aligned-comm.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/aligned-comm.ll?rev=45881&r1=45880&r2=45881&view=diff

==
--- llvm/trunk/test/CodeGen/X86/aligned-comm.ll (original)
+++ llvm/trunk/test/CodeGen/X86/aligned-comm.ll Fri Jan 11 14:47:33 2008
@@ -2,6 +2,9 @@
 ; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin10 | grep {array,16512,7}
 ; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin9 | grep {array,16512,7}
 ; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin8 | not grep {7}
+; XFAIL: *
+
+; Currently there is no construct which generates .comm, so test is xfail'ed.
 
 ; Darwin 9+ should get alignment on common symbols.  Darwin8 does 
 ; not support this.


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r45884 - in /llvm/trunk: lib/AsmParser/llvmAsmParser.y test/Assembler/2008-01-11-VarargAttrs.ll

2008-01-11 Thread Evan Cheng
Thanks Duncan!

Evan
On Jan 11, 2008, at 1:23 PM, Duncan Sands wrote:

> Author: baldrick
> Date: Fri Jan 11 15:23:39 2008
> New Revision: 45884
>
> URL: http://llvm.org/viewvc/llvm-project?rev=45884&view=rev
> Log:
> If there are attributes on the varargs part of a
> call, don't discard them.
>
> Added:
> llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll
> Modified:
> llvm/trunk/lib/AsmParser/llvmAsmParser.y
>
> Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/ 
> llvmAsmParser.y?rev=45884&r1=45883&r2=45884&view=diff
>
> == 
> 
> --- llvm/trunk/lib/AsmParser/llvmAsmParser.y (original)
> +++ llvm/trunk/lib/AsmParser/llvmAsmParser.y Fri Jan 11 15:23:39 2008
> @@ -2675,8 +2675,15 @@
>
>if (Ty->isVarArg()) {
>  if (I == E)
> -  for (; ArgI != ArgE; ++ArgI)
> +  for (; ArgI != ArgE; ++ArgI, ++index) {
>  Args.push_back(ArgI->Val); // push the remaining varargs
> +if (ArgI->Attrs != ParamAttr::None) {
> +  ParamAttrsWithIndex PAWI;
> +  PAWI.index = index;
> +  PAWI.attrs = ArgI->Attrs;
> +  Attrs.push_back(PAWI);
> +}
> +  }
>} else if (I != E || ArgI != ArgE)
>  GEN_ERROR("Invalid number of parameters detected");
>  }
> @@ -3006,8 +3013,15 @@
>}
>if (Ty->isVarArg()) {
>  if (I == E)
> -  for (; ArgI != ArgE; ++ArgI)
> +  for (; ArgI != ArgE; ++ArgI, ++index) {
>  Args.push_back(ArgI->Val); // push the remaining varargs
> +if (ArgI->Attrs != ParamAttr::None) {
> +  ParamAttrsWithIndex PAWI;
> +  PAWI.index = index;
> +  PAWI.attrs = ArgI->Attrs;
> +  Attrs.push_back(PAWI);
> +}
> +  }
>} else if (I != E || ArgI != ArgE)
>  GEN_ERROR("Invalid number of parameters detected");
>  }
>
> Added: llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/ 
> 2008-01-11-VarargAttrs.ll?rev=45884&view=auto
>
> == 
> 
> --- llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll (added)
> +++ llvm/trunk/test/Assembler/2008-01-11-VarargAttrs.ll Fri Jan 11  
> 15:23:39 2008
> @@ -0,0 +1,10 @@
> +; RUN: llvm-as < %s | llvm-dis | grep byval | count 2
> +
> + %struct = type {  }
> +
> +declare void @foo(...)
> +
> +define void @bar() {
> + call void (...)* @foo(%struct* byval null, %struct* byval null )
> + ret void
> +}
>
>
> ___
> llvm-commits mailing list
> llvm-commits@cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45887 - in /llvm/trunk: include/llvm/ParameterAttributes.h lib/VMCore/Verifier.cpp test/Verifier/2008-01-11-VarargAttrs.ll

2008-01-11 Thread Duncan Sands
Author: baldrick
Date: Fri Jan 11 16:36:48 2008
New Revision: 45887

URL: http://llvm.org/viewvc/llvm-project?rev=45887&view=rev
Log:
Do not allow attributes beyond a function's last
parameter, even if it is a varargs function.  Do
allow attributes on the varargs part of a call,
but not beyond the last argument.  Only allow
selected attributes to be on the varargs part of
a call (currently only 'byval' is allowed).  The
reasoning here is that most attributes, eg inreg,
simply make no sense here.

Added:
llvm/trunk/test/Verifier/2008-01-11-VarargAttrs.ll
Modified:
llvm/trunk/include/llvm/ParameterAttributes.h
llvm/trunk/lib/VMCore/Verifier.cpp

Modified: llvm/trunk/include/llvm/ParameterAttributes.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ParameterAttributes.h?rev=45887&r1=45886&r2=45887&view=diff

==
--- llvm/trunk/include/llvm/ParameterAttributes.h (original)
+++ llvm/trunk/include/llvm/ParameterAttributes.h Fri Jan 11 16:36:48 2008
@@ -52,6 +52,9 @@
 /// @brief Attributes that only apply to function return values.
 const uint16_t ReturnOnly = NoReturn | NoUnwind | ReadNone | ReadOnly;
 
+/// @brief Attributes that can apply to vararg call arguments.
+const uint16_t VarArgsCompatible = ByVal;
+
 /// @brief Attributes that are mutually incompatible.
 const uint16_t MutuallyIncompatible[3] = {
   ByVal | InReg | Nest  | StructRet,

Modified: llvm/trunk/lib/VMCore/Verifier.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Verifier.cpp?rev=45887&r1=45886&r2=45887&view=diff

==
--- llvm/trunk/lib/VMCore/Verifier.cpp (original)
+++ llvm/trunk/lib/VMCore/Verifier.cpp Fri Jan 11 16:36:48 2008
@@ -390,11 +390,6 @@
   if (!Attrs)
 return;
 
-  Assert1(FT->isVarArg() ||
-  (Attrs->size() &&
-   Attrs->getParamIndex(Attrs->size()-1) <= FT->getNumParams()),
-  "Attributes after end of type!", V);
-
   bool SawNest = false;
 
   for (unsigned Idx = 0; Idx <= FT->getNumParams(); ++Idx) {
@@ -450,8 +445,15 @@
   Assert1(!F.isStructReturn() || FT->getReturnType() == Type::VoidTy,
   "Invalid struct-return function!", &F);
 
+  const ParamAttrsList *Attrs = F.getParamAttrs();
+
+  Assert1(!Attrs ||
+  (Attrs->size() &&
+   Attrs->getParamIndex(Attrs->size()-1) <= FT->getNumParams()),
+  "Attributes after last parameter!", &F);
+
   // Check function attributes.
-  VerifyParamAttrs(FT, F.getParamAttrs(), &F);
+  VerifyParamAttrs(FT, Attrs, &F);
 
   // Check that this function meets the restrictions on this calling 
convention.
   switch (F.getCallingConv()) {
@@ -847,8 +849,24 @@
 "Call parameter type does not match function signature!",
 CS.getArgument(i), FTy->getParamType(i), I);
 
+  const ParamAttrsList *Attrs = CS.getParamAttrs();
+
+  Assert1(!Attrs ||
+  (Attrs->size() &&
+   Attrs->getParamIndex(Attrs->size()-1) <= CS.arg_size()),
+  "Attributes after last argument!", I);
+
   // Verify call attributes.
-  VerifyParamAttrs(FTy, CS.getParamAttrs(), I);
+  VerifyParamAttrs(FTy, Attrs, I);
+
+  if (Attrs && FTy->isVarArg())
+// Check attributes on the varargs part.
+for (unsigned Idx = 1 + FTy->getNumParams(); Idx <= CS.arg_size(); ++Idx) {
+  uint16_t Attr = Attrs->getParamAttrs(Idx);
+  uint16_t VArgI = Attr & ~ParamAttr::VarArgsCompatible;
+  Assert1(!VArgI, "Attribute " + Attrs->getParamAttrsText(VArgI) +
+  "cannot be used for vararg call arguments!", I);
+}
 
   visitInstruction(*I);
 }

Added: llvm/trunk/test/Verifier/2008-01-11-VarargAttrs.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Verifier/2008-01-11-VarargAttrs.ll?rev=45887&view=auto

==
--- llvm/trunk/test/Verifier/2008-01-11-VarargAttrs.ll (added)
+++ llvm/trunk/test/Verifier/2008-01-11-VarargAttrs.ll Fri Jan 11 16:36:48 2008
@@ -0,0 +1,10 @@
+; RUN: not llvm-as < %s
+
+   %struct = type {  }
+
+declare void @foo(...)
+
+define void @bar() {
+   call void (...)* @foo(%struct* inreg null )
+   ret void
+}


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [test-suite] r45883 - in /test-suite/trunk: External/SPEC/Makefile.spec Makefile.programs Makefile.rules Makefile.tests MultiSource/Makefile.multisrc SingleSource/Makefile.singlesrc

2008-01-11 Thread Evan Cheng

On Jan 11, 2008, at 1:43 PM, Tanya Lattner wrote:

> Switching the nightly tester makefile to be -O3 is going to mess with
> performance data over time (was it O2 always before?). The nightly
> testers probably should be modified so that this information is
> propagated to the tester databases and also you should be able to set
> it when you run the nightly tester.

No, it won't. Native has always been compiled with -O3. And up to now  
we have not been testing with LTO turned off. So each .c and .cpp  
files have been compiled with -O0 and optimization is performed at  
link time. This patch won't change that.

Evan

>
> -Tanya
>
> On Jan 11, 2008, at 1:20 PM, Evan Cheng wrote:
>
>> Author: evancheng
>> Date: Fri Jan 11 15:20:45 2008
>> New Revision: 45883
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=45883&view=rev
>> Log:
>> - Clean up.
>> - Added DISABLE_LTO option to disable link time optimization. If
>> this is not
>>   set, each file is compiled with -O0 and optimization is performed
>> with
>>   opt -std-compile-opts and llvm-ld. If it is set, each file is
>> compiled with
>>   -O3 (same as gcc, g++) and -disable-inlining and -disable-opt are
>> passed to
>>   opt and llvm-ld. This is useful for performance comparison and
>> finding ABI
>>   problems.
>>
>> Modified:
>> test-suite/trunk/External/SPEC/Makefile.spec
>> test-suite/trunk/Makefile.programs
>> test-suite/trunk/Makefile.rules
>> test-suite/trunk/Makefile.tests
>> test-suite/trunk/MultiSource/Makefile.multisrc
>> test-suite/trunk/SingleSource/Makefile.singlesrc
>> test-suite/trunk/TEST.nightly.Makefile
>>
>> Modified: test-suite/trunk/External/SPEC/Makefile.spec
>> URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/External/
>> SPEC/Makefile.spec?rev=45883&r1=45882&r2=45883&view=diff
>>
>> = 
>> =
>> 
>> --- test-suite/trunk/External/SPEC/Makefile.spec (original)
>> +++ test-suite/trunk/External/SPEC/Makefile.spec Fri Jan 11
>> 15:20:45 2008
>> @@ -7,10 +7,6 @@
>>
>>  include $(LEVEL)/MultiSource/Makefile.multisrc
>>
>> -# Do not pass -Wall to compile commands...
>> -LCCFLAGS  := -O3
>> -LCXXFLAGS := -O3
>> -
>>  CPPFLAGS += -I $(SPEC_BENCH_DIR)/src/
>>  SPEC_SANDBOX := $(PROGDIR)/External/SPEC/Sandbox.sh
>>
>>
>> Modified: test-suite/trunk/Makefile.programs
>> URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/
>> Makefile.programs?rev=45883&r1=45882&r2=45883&view=diff
>>
>> = 
>> =
>> 
>> --- test-suite/trunk/Makefile.programs (original)
>> +++ test-suite/trunk/Makefile.programs Fri Jan 11 15:20:45 2008
>> @@ -348,7 +348,7 @@
>>
>>  $(PROGRAMS_TO_TEST:%=Output/%.cbe): \
>>  Output/%.cbe: Output/%.cbe.c
>> --$(CC) $< -o $@ $(LDFLAGS) $(CFLAGS) -fno-strict-aliasing -O2 -
>> fno-inline $(TARGET_FLAGS) $(LIBS)
>> +-$(CC) $< -o $@ $(LDFLAGS) $(CFLAGS) -fno-strict-aliasing -fno-
>> inline $(TARGET_FLAGS) $(LIBS)
>>
>>  #
>>  # Compile a linked program to machine code with LLC.
>>
>> Modified: test-suite/trunk/Makefile.rules
>> URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/
>> Makefile.rules?rev=45883&r1=45882&r2=45883&view=diff
>>
>> = 
>> =
>> 
>> --- test-suite/trunk/Makefile.rules (original)
>> +++ test-suite/trunk/Makefile.rules Fri Jan 11 15:20:45 2008
>> @@ -350,6 +350,11 @@
>>  CPPFLAGS += -DSMALL_PROBLEM_SIZE
>>  endif
>>
>> +ifdef DISABLE_LTO
>> +EXTRA_LOPT_OPTIONS += -disable-opt -disable-inlining
>> +EXTRA_LINKTIME_OPT_FLAGS += -disable-opt -disable-inlining
>> +endif
>> +
>>  #
>>  # Compile commands with libtool.
>>  #
>>
>> Modified: test-suite/trunk/Makefile.tests
>> URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/
>> Makefile.tests?rev=45883&r1=45882&r2=45883&view=diff
>>
>> = 
>> =
>> 
>> --- test-suite/trunk/Makefile.tests (original)
>> +++ test-suite/trunk/Makefile.tests Fri Jan 11 15:20:45 2008
>> @@ -34,9 +34,23 @@
>>  .PRECIOUS: Output/%.llvm.bc
>>  .PRECIOUS: Output/%.llvm
>>
>> -LCCFLAGS  += -O2
>> -LCXXFLAGS += -O2
>> -LLCFLAGS =
>> +ifndef CFLAGS
>> +CFLAGS = -O3
>> +endif
>> +ifndef CXXFLAGS
>> +CXXFLAGS = -O3
>> +endif
>> +
>> +# If LTO is on, compile each .c .cpp file with -O0 and optimize with
>> +# opt and llvm-ld.
>> +ifndef DISABLE_LTO
>> +LCCFLAGS := -O0 $(CPPFLAGS)
>> +LCXXFLAGS := -O0 $(CPPFLAGS)
>> +else
>> +LCCFLAGS := $(CFLAGS) $(CPPFLAGS)
>> +LCXXFLAGS := $(CXXFLAGS) $(CPPFLAGS)
>> +endif
>> +
>>  FAILURE  = $(LLVM_SRC_ROOT)/test/Failure.sh
>>  LLCLIBS := $(LLCLIBS) -lm
>>
>> @@ -46,22 +60,22 @@
>>
>>  # Compile from X.c to Output/X.ll
>>  Output/%.bc: %.c $(LCC1) Output/.dir $(INCLUDES)
>> --$(LLVMGCC) $(CPPFLAGS) $(LCCFLAGS) $(TARGET_FLAGS) -O0 -c $< -o
>> $@ -emit-llvm
>> +-$(LLVMGCC) $(CPPFLAGS) $(LCCFLAGS) $(TARGET_F

[llvm-commits] [llvm] r45886 - in /llvm/trunk: lib/Transforms/IPO/ArgumentPromotion.cpp test/Transforms/ArgumentPromotion/byval.ll

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 16:31:41 2008
New Revision: 45886

URL: http://llvm.org/viewvc/llvm-project?rev=45886&view=rev
Log:
Teach argpromote to ruthlessly hack small byval structs when it can
get away with it, which exposes opportunities to eliminate the memory
objects entirely.  For example, we now compile byval.ll to:

define internal void @f1(i32 %b.0, i64 %b.1) {
entry:
%tmp2 = add i32 %b.0, 1 ;  [#uses=0]
ret void
}

define i32 @main() nounwind  {
entry:
call void @f1( i32 1, i64 2 )
ret i32 0
}

This seems like it would trigger a lot for code that passes around small
structs (e.g. SDOperand's or _Complex)...


Added:
llvm/trunk/test/Transforms/ArgumentPromotion/byval.ll
Modified:
llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp

Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=45886&r1=45885&r2=45886&view=diff

==
--- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Fri Jan 11 16:31:41 2008
@@ -51,6 +51,7 @@
 
 STATISTIC(NumArgumentsPromoted , "Number of pointer arguments promoted");
 STATISTIC(NumAggregatesPromoted, "Number of aggregate arguments promoted");
+STATISTIC(NumByValArgsPromoted , "Number of byval arguments promoted");
 STATISTIC(NumArgumentsDead , "Number of dead pointer args eliminated");
 
 namespace {
@@ -71,7 +72,8 @@
 bool PromoteArguments(CallGraphNode *CGN);
 bool isSafeToPromoteArgument(Argument *Arg, bool isByVal) const;
 Function *DoPromotion(Function *F, 
-  SmallPtrSet &ArgsToPromote);
+  SmallPtrSet &ArgsToPromote,
+  SmallPtrSet &ByValArgsToTransform);
   };
 
   char ArgPromotion::ID = 0;
@@ -134,16 +136,44 @@
   // Check to see which arguments are promotable.  If an argument is 
promotable,
   // add it to ArgsToPromote.
   SmallPtrSet ArgsToPromote;
+  SmallPtrSet ByValArgsToTransform;
   for (unsigned i = 0; i != PointerArgs.size(); ++i) {
-bool isByVal = F->paramHasAttr(PointerArgs[i].second, ParamAttr::ByVal);
-if (isSafeToPromoteArgument(PointerArgs[i].first, isByVal))
-  ArgsToPromote.insert(PointerArgs[i].first);
+bool isByVal = F->paramHasAttr(PointerArgs[i].second+1, ParamAttr::ByVal);
+
+// If this is a byval argument, and if the aggregate type is small, just
+// pass the elements, which is always safe.
+Argument *PtrArg = PointerArgs[i].first;
+if (isByVal) {
+  const Type *AgTy = 
cast(PtrArg->getType())->getElementType();
+  if (const StructType *STy = dyn_cast(AgTy))
+if (STy->getNumElements() <= 3) {
+  // If all the elements are first class types, we can promote it.
+  bool AllSimple = true;
+  for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i)
+if (!STy->getElementType(i)->isFirstClassType()) {
+  AllSimple = false;
+  break;
+}
+  
+  // Safe to transform, don't even bother trying to "promote" it.
+  // Passing the elements as a scalar will allow scalarrepl to hack on
+  // the new alloca we introduce.
+  if (AllSimple) {
+ByValArgsToTransform.insert(PtrArg);
+continue;
+  }
+}
+}
+
+// Otherwise, see if we can promote the pointer to its value.
+if (isSafeToPromoteArgument(PtrArg, isByVal))
+  ArgsToPromote.insert(PtrArg);
   }
   
   // No promotable pointer arguments.
-  if (ArgsToPromote.empty()) return false;
+  if (ArgsToPromote.empty() && ByValArgsToTransform.empty()) return false;
 
-  Function *NewF = DoPromotion(F, ArgsToPromote);
+  Function *NewF = DoPromotion(F, ArgsToPromote, ByValArgsToTransform);
 
   // Update the call graph to know that the function has been transformed.
   getAnalysis().changeFunction(F, NewF);
@@ -344,7 +374,8 @@
 /// arguments, and returns the new function.  At this point, we know that it's
 /// safe to do so.
 Function *ArgPromotion::DoPromotion(Function *F,
-SmallPtrSet &ArgsToPromote) {
+SmallPtrSet &ArgsToPromote,
+  SmallPtrSet &ByValArgsToTransform) 
{
 
   // Start by computing a new prototype for the function, which is the same as
   // the old function, but has modified arguments.
@@ -375,15 +406,18 @@
 
   unsigned index = 1;
   for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(); I != E;
-   ++I, ++index)
-if (!ArgsToPromote.count(I)) {
+   ++I, ++index) {
+if (ByValArgsToTransform.count(I)) {
+  // Just add all the struct element types.
+  const Type *AgTy = cast(I->getType())->getElementType();
+  const StructType *STy = cast(AgTy);
+  

[llvm-commits] [llvm] r45888 - /llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 17:04:14 2008
New Revision: 45888

URL: http://llvm.org/viewvc/llvm-project?rev=45888&view=rev
Log:
new testcase

Added:
llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp

Added: llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/C%2B%2BFrontend/2008-01-11-BadWarning.cpp?rev=45888&view=auto

==
--- llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp (added)
+++ llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp Fri Jan 11 17:04:14 
2008
@@ -0,0 +1,6 @@
+// RUN: %llvmgcc -xc++ %s -S -o /dev/null |& not grep warning
+// rdar://5683899
+void** f(void **Buckets, unsigned NumBuckets) {
+  return Buckets + NumBuckets;
+}
+


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r45889 - /llvm-gcc-4.2/trunk/gcc/cp/typeck.c

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 17:05:10 2008
New Revision: 45889

URL: http://llvm.org/viewvc/llvm-project?rev=45889&view=rev
Log:
Do not emit a warning for code like this:
void** f(void **Buckets, unsigned NumBuckets) {
  return Buckets + NumBuckets;
}

This was already fixed in the C FE, but the C++ FE needed a matching fix.

Testcase here: test/C++Frontend/2008-01-11-BadWarning.cpp

Modified:
llvm-gcc-4.2/trunk/gcc/cp/typeck.c

Modified: llvm-gcc-4.2/trunk/gcc/cp/typeck.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/typeck.c?rev=45889&r1=45888&r2=45889&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/cp/typeck.c (original)
+++ llvm-gcc-4.2/trunk/gcc/cp/typeck.c Fri Jan 11 17:05:10 2008
@@ -6764,7 +6764,17 @@
 
   while (TREE_CODE (whats_returned) == COMPONENT_REF
 || TREE_CODE (whats_returned) == ARRAY_REF)
+  /* LLVM LOCAL begin */
+  {
+#ifdef ENABLE_LLVM
+if (TREE_CODE (whats_returned) == ARRAY_REF
+&& (TREE_CODE (TREE_TYPE (TREE_OPERAND (whats_returned, 0)))
+!= ARRAY_TYPE))
+  break;/* Ignore pointer base of array ref extension. */
+#endif
 whats_returned = TREE_OPERAND (whats_returned, 0);
+  }
+  /* LLVM LOCAL end */
 
   if (DECL_P (whats_returned)
   && DECL_NAME (whats_returned)


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45890 - /llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 17:06:56 2008
New Revision: 45890

URL: http://llvm.org/viewvc/llvm-project?rev=45890&view=rev
Log:
llvm-g++ 4.0 has completely different code for this warning,
just xfail it.

Modified:
llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp

Modified: llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/C%2B%2BFrontend/2008-01-11-BadWarning.cpp?rev=45890&r1=45889&r2=45890&view=diff

==
--- llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp (original)
+++ llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp Fri Jan 11 17:06:56 
2008
@@ -1,5 +1,6 @@
 // RUN: %llvmgcc -xc++ %s -S -o /dev/null |& not grep warning
 // rdar://5683899
+// XFAIL: llvmgcc4.0.1
 void** f(void **Buckets, unsigned NumBuckets) {
   return Buckets + NumBuckets;
 }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45892 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2007-12-20-ParamAttrs.ll

2008-01-11 Thread Duncan Sands
Author: baldrick
Date: Fri Jan 11 17:13:45 2008
New Revision: 45892

URL: http://llvm.org/viewvc/llvm-project?rev=45892&view=rev
Log:
When DAE drops the varargs part of a function, ensure any
attributes on the vararg call arguments are also dropped.

Modified:
llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp
llvm/trunk/test/Transforms/DeadArgElim/2007-12-20-ParamAttrs.ll

Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp?rev=45892&r1=45891&r2=45892&view=diff

==
--- llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Fri Jan 11 
17:13:45 2008
@@ -175,16 +175,29 @@
 // Pass all the same arguments.
 Args.assign(CS.arg_begin(), CS.arg_begin()+NumArgs);
 
+// Drop any attributes that were on the vararg arguments.
+const ParamAttrsList *PAL = CS.getParamAttrs();
+if (PAL && PAL->getParamIndex(PAL->size() - 1) > NumArgs) {
+  ParamAttrsVector ParamAttrsVec;
+  for (unsigned i = 0; PAL->getParamIndex(i) <= NumArgs; ++i) {
+ParamAttrsWithIndex PAWI;
+PAWI = ParamAttrsWithIndex::get(PAL->getParamIndex(i),
+PAL->getParamAttrsAtIndex(i));
+ParamAttrsVec.push_back(PAWI);
+  }
+  PAL = ParamAttrsList::get(ParamAttrsVec);
+}
+
 Instruction *New;
 if (InvokeInst *II = dyn_cast(Call)) {
   New = new InvokeInst(NF, II->getNormalDest(), II->getUnwindDest(),
Args.begin(), Args.end(), "", Call);
   cast(New)->setCallingConv(CS.getCallingConv());
-  cast(New)->setParamAttrs(CS.getParamAttrs());
+  cast(New)->setParamAttrs(PAL);
 } else {
   New = new CallInst(NF, Args.begin(), Args.end(), "", Call);
   cast(New)->setCallingConv(CS.getCallingConv());
-  cast(New)->setParamAttrs(CS.getParamAttrs());
+  cast(New)->setParamAttrs(PAL);
   if (cast(Call)->isTailCall())
 cast(New)->setTailCall();
 }

Modified: llvm/trunk/test/Transforms/DeadArgElim/2007-12-20-ParamAttrs.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadArgElim/2007-12-20-ParamAttrs.ll?rev=45892&r1=45891&r2=45892&view=diff

==
--- llvm/trunk/test/Transforms/DeadArgElim/2007-12-20-ParamAttrs.ll (original)
+++ llvm/trunk/test/Transforms/DeadArgElim/2007-12-20-ParamAttrs.ll Fri Jan 11 
17:13:45 2008
@@ -2,6 +2,9 @@
 ; RUN: llvm-as < %s | opt -deadargelim | llvm-dis | grep signext | count 2
 ; RUN: llvm-as < %s | opt -deadargelim | llvm-dis | not grep inreg
 ; RUN: llvm-as < %s | opt -deadargelim | llvm-dis | not grep zeroext
+; RUN: llvm-as < %s | opt -deadargelim | llvm-dis | not grep byval
+
+   %struct = type { }
 
 @g = global i8 0
 
@@ -11,6 +14,6 @@
 }
 
 define i32 @bar() {
-   %A = call i8(i8*, i8, ...)* @foo(i8* inreg null, i8 signext 1, i8 2) 
zeroext nounwind
+   %A = call i8(i8*, i8, ...)* @foo(i8* inreg null, i8 signext 1, %struct* 
byval null ) zeroext nounwind
ret i32 0
 }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45893 - /llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 17:25:16 2008
New Revision: 45893

URL: http://llvm.org/viewvc/llvm-project?rev=45893&view=rev
Log:
remove some incorrect classof's.

Modified:
llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h

Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=45893&r1=45892&r2=45893&view=diff

==
--- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original)
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Fri Jan 11 17:25:16 2008
@@ -1543,7 +1543,6 @@
   MVT::ValueType getLoadedVT() const { return LoadedVT; }
 
   static bool classof(const LoadSDNode *) { return true; }
-  static bool classof(const LSBaseSDNode *N) { return true; }
   static bool classof(const SDNode *N) {
 return N->getOpcode() == ISD::LOAD;
   }
@@ -1586,7 +1585,6 @@
   MVT::ValueType getStoredVT() const { return StoredVT; }
 
   static bool classof(const StoreSDNode *) { return true; }
-  static bool classof(const LSBaseSDNode *N) { return true; }
   static bool classof(const SDNode *N) {
 return N->getOpcode() == ISD::STORE;
   }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45891 - /llvm/trunk/lib/Target/CBackend/CBackend.cpp

2008-01-11 Thread Evan Cheng
Author: evancheng
Date: Fri Jan 11 17:10:11 2008
New Revision: 45891

URL: http://llvm.org/viewvc/llvm-project?rev=45891&view=rev
Log:
More cbe byval fixes.

Modified:
llvm/trunk/lib/Target/CBackend/CBackend.cpp

Modified: llvm/trunk/lib/Target/CBackend/CBackend.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=45891&r1=45890&r2=45891&view=diff

==
--- llvm/trunk/lib/Target/CBackend/CBackend.cpp (original)
+++ llvm/trunk/lib/Target/CBackend/CBackend.cpp Fri Jan 11 17:10:11 2008
@@ -1908,18 +1908,24 @@
   } else {
 // Loop over the arguments, printing them.
 FunctionType::param_iterator I = FT->param_begin(), E = FT->param_end();
+unsigned Idx = 1;
 
 // If this is a struct-return function, don't print the hidden
 // struct-return argument.
 if (isStructReturn) {
   assert(I != E && "Invalid struct return function!");
   ++I;
+  ++Idx;
 }
 
-unsigned Idx = 1;
 for (; I != E; ++I) {
   if (PrintedArg) FunctionInnards << ", ";
-  printType(FunctionInnards, *I,
+  const Type *ArgTy = *I;
+  if (PAL && PAL->paramHasAttr(Idx, ParamAttr::ByVal)) {
+assert(isa(ArgTy));
+ArgTy = cast(ArgTy)->getElementType();
+  }
+  printType(FunctionInnards, ArgTy,
  /*isSigned=*/PAL && PAL->paramHasAttr(Idx, ParamAttr::SExt));
   PrintedArg = true;
   ++Idx;
@@ -2628,9 +2634,11 @@
   const ParamAttrsList *PAL = I.getParamAttrs();
   bool isStructRet = I.isStructReturn();
   if (isStructRet) {
-Out << "*(";
+bool isByVal = ByValParams.count(I.getOperand(1));
+if (!isByVal) Out << "*(";
 writeOperand(I.getOperand(1));
-Out << ") = ";
+if (!isByVal) Out << ")";
+Out << " = ";
   }
   
   if (I.isTailCall()) Out << " /*tail*/ ";
@@ -2685,22 +2693,26 @@
   }
   
   bool PrintedArg = false;
-  unsigned Idx = 1;
-  for (; AI != AE; ++AI, ++ArgNo, ++Idx) {
+  for (; AI != AE; ++AI, ++ArgNo) {
 if (PrintedArg) Out << ", ";
 if (ArgNo < NumDeclaredParams &&
 (*AI)->getType() != FTy->getParamType(ArgNo)) {
   Out << '(';
   printType(Out, FTy->getParamType(ArgNo), 
-/*isSigned=*/PAL && PAL->paramHasAttr(Idx, ParamAttr::SExt));
+/*isSigned=*/PAL && PAL->paramHasAttr(ArgNo+1, ParamAttr::SExt));
   Out << ')';
 }
-// If call is expecting argument to be passed by value, then do not
-// take its address.
-if (PAL && PAL->paramHasAttr(Idx, ParamAttr::ByVal))
-  writeOperandInternal(*AI);
-else
-  writeOperand(*AI);
+// Check if the argument is expected to be passed by value.
+bool isOutByVal = PAL && PAL->paramHasAttr(ArgNo+1, ParamAttr::ByVal);
+// Check if this argument itself is passed in by reference. 
+bool isInByVal = ByValParams.count(*AI);
+if (isOutByVal && !isInByVal)
+  Out << "*(";
+else if (!isOutByVal && isInByVal)
+  Out << "&(";
+writeOperand(*AI);
+if (isOutByVal ^ isInByVal)
+  Out << ")";
 PrintedArg = true;
   }
   Out << ')';


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45894 - /llvm/trunk/lib/CodeGen/MachineSink.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 18:17:41 2008
New Revision: 45894

URL: http://llvm.org/viewvc/llvm-project?rev=45894&view=rev
Log:
implement support for sinking a load out the bottom of a block that
has no stores between the load and the end of block.  This works 
great and sinks hundreds of stores, but we can't turn it on because
machineinstrs don't have volatility information and we don't want to
sink volatile stores :(

Modified:
llvm/trunk/lib/CodeGen/MachineSink.cpp

Modified: llvm/trunk/lib/CodeGen/MachineSink.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineSink.cpp?rev=45894&r1=45893&r2=45894&view=diff

==
--- llvm/trunk/lib/CodeGen/MachineSink.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineSink.cpp Fri Jan 11 18:17:41 2008
@@ -47,7 +47,7 @@
 }
   private:
 bool ProcessBlock(MachineBasicBlock &MBB);
-bool SinkInstruction(MachineInstr *MI);
+bool SinkInstruction(MachineInstr *MI, bool &SawStore);
 bool AllUsesDominatedByBlock(unsigned Reg, MachineBasicBlock *MBB) const;
   };
   
@@ -115,10 +115,11 @@
   // Can't sink anything out of a block that has less than two successors.
   if (MBB.succ_size() <= 1) return false;
   
-  // Walk the basic block bottom-up
+  // Walk the basic block bottom-up.  Remember if we saw a store.
+  bool SawStore = false;
   for (MachineBasicBlock::iterator I = MBB.end(); I != MBB.begin(); ){
 MachineBasicBlock::iterator LastIt = I;
-if (SinkInstruction(--I)) {
+if (SinkInstruction(--I, SawStore)) {
   I = LastIt;
   ++NumSunk;
 }
@@ -129,24 +130,30 @@
 
 /// SinkInstruction - Determine whether it is safe to sink the specified 
machine
 /// instruction out of its current block into a successor.
-bool MachineSinking::SinkInstruction(MachineInstr *MI) {
+bool MachineSinking::SinkInstruction(MachineInstr *MI, bool &SawStore) {
   const TargetInstrDesc &TID = MI->getDesc();
   
   // Ignore stuff that we obviously can't sink.
-  if (TID.mayStore() || TID.isCall() || TID.isReturn() || TID.isBranch() ||
-  TID.hasUnmodeledSideEffects())
+  if (TID.mayStore() || TID.isCall()) {
+SawStore = true;
+return false;
+  }
+  if (TID.isReturn() || TID.isBranch() || TID.hasUnmodeledSideEffects())
 return false;
 
-  if (TID.mayLoad()) {
-// Okay, this instruction does a load.  As a refinement, allow the target
-// to decide whether the loaded value is actually a constant.  If so, we
-// can actually use it as a load.
-if (!TII->isInvariantLoad(MI)) {
-  // FIXME: we should be able to sink loads with no other side effects if
-  // there is nothing that can change memory from here until the end of
-  // block.  This is a trivial form of alias analysis.
-  return false;
-}
+  // See if this instruction does a load.  If so, we have to guarantee that the
+  // loaded value doesn't change between the load and the end of block.  The
+  // check for isInvariantLoad gives the targe the chance to classify the load
+  // as always returning a constant, e.g. a constant pool load.
+  if (TID.mayLoad() && !TII->isInvariantLoad(MI)) {
+// Otherwise, this is a real load.  If there is a store between the load 
and
+// end of block, we can't sink the load.
+//
+// FIXME: we can't do this transformation until we know that the load is
+// not volatile, and machineinstrs don't keep this info. :(
+//
+//if (SawStore) 
+return false;
   }
   
   // FIXME: This should include support for sinking instructions within the


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r45895 - /llvm/trunk/lib/Target/X86/X86InstrInfo.cpp

2008-01-11 Thread Gordon Henriksen
On 2008-01-11, at 19:35, Chris Lattner wrote:

> +  // operand and base are analysis on it.  This is safe because the  
> address of

Spello.

— Gordon


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45895 - /llvm/trunk/lib/Target/X86/X86InstrInfo.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 18:35:08 2008
New Revision: 45895

URL: http://llvm.org/viewvc/llvm-project?rev=45895&view=rev
Log:
Any x86 instruction that reads from an invariant location is invariant.
This allows us to sink things like:
cvtsi2sd32(%esp), %xmm1
when reading from the argument area, for example.


Modified:
llvm/trunk/lib/Target/X86/X86InstrInfo.cpp

Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=45895&r1=45894&r2=45895&view=diff

==
--- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Fri Jan 11 18:35:08 2008
@@ -758,54 +758,35 @@
 /// only return true of *all* loads the instruction does are invariant (if it
 /// does multiple loads).
 bool X86InstrInfo::isInvariantLoad(MachineInstr *MI) const {
-  // FIXME: This should work with any X86 instruction that does a load, for
-  // example, all load+op instructions.
-  switch (MI->getOpcode()) {
-  default: break;
-  case X86::MOV32rm:
-// Loads from stubs of global addresses are invariant.
-if (MI->getOperand(1).isReg() &&
-MI->getOperand(2).isImm() && MI->getOperand(3).isReg() &&
-MI->getOperand(4).isGlobal() &&
-TM.getSubtarget().GVRequiresExtraLoad
-  (MI->getOperand(4).getGlobal(), TM, false) &&
-MI->getOperand(2).getImm() == 1 &&
-MI->getOperand(3).getReg() == 0)
-  return true;
-// FALLTHROUGH
-  case X86::MOV8rm:
-  case X86::MOV16rm:
-  case X86::MOV16_rm:
-  case X86::MOV32_rm:
-  case X86::MOV64rm:
-  case X86::LD_Fp64m:
-  case X86::MOVSSrm:
-  case X86::MOVSDrm:
-  case X86::MOVAPSrm:
-  case X86::MOVAPDrm:
-  case X86::MMX_MOVD64rm:
-  case X86::MMX_MOVQ64rm:
+  // This code cares about loads from three cases: constant pool entries,
+  // invariant argument slots, and global stubs.  In order to handle these 
cases
+  // for all of the myriad of X86 instructions, we just scan for a CP/FI/GV
+  // operand and base are analysis on it.  This is safe because the address of
+  // none of these three cases is ever used as anything other than a load base
+  // and X86 doesn't have any instructions that load from multiple places.
+  
+  for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
+const MachineOperand &MO = MI->getOperand(i);
 // Loads from constant pools are trivially invariant.
-if (MI->getOperand(1).isReg() && MI->getOperand(2).isImm() &&
-MI->getOperand(3).isReg() && MI->getOperand(4).isCPI() &&
-MI->getOperand(1).getReg() == 0 &&
-MI->getOperand(2).getImm() == 1 &&
-MI->getOperand(3).getReg() == 0)
+if (MO.isCPI())
   return true;
-  
-// If this is a load from a fixed argument slot, we know the value is
-// invariant across the whole function, because we don't redefine argument
-// values.
-MachineFunction *MF = MI->getParent()->getParent();
-if (MI->getOperand(1).isFI()) {
-  const MachineFrameInfo &MFI = *MF->getFrameInfo();
-  int Idx = MI->getOperand(1).getIndex();
+
+if (MO.isGlobal()) {
+  if (TM.getSubtarget().GVRequiresExtraLoad(MO.getGlobal(),
+  TM, false))
+return true;
+  return false;
+}
+
+// If this is a load from an invariant stack slot, the load is a constant.
+if (MO.isFI()) {
+  const MachineFrameInfo &MFI =
+*MI->getParent()->getParent()->getFrameInfo();
+  int Idx = MO.getIndex();
   return MFI.isFixedObjectIndex(Idx) && MFI.isImmutableObjectIndex(Idx);
 }
-  
-return false;
   }
-
+  
   // All other instances of these instructions are presumed to have other
   // issues.
   return false;


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45896 - /llvm/trunk/lib/Target/X86/X86InstrInfo.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 18:53:16 2008
New Revision: 45896

URL: http://llvm.org/viewvc/llvm-project?rev=45896&view=rev
Log:
fix a wordo that gordon noticed :)

Modified:
llvm/trunk/lib/Target/X86/X86InstrInfo.cpp

Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=45896&r1=45895&r2=45896&view=diff

==
--- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Fri Jan 11 18:53:16 2008
@@ -761,7 +761,7 @@
   // This code cares about loads from three cases: constant pool entries,
   // invariant argument slots, and global stubs.  In order to handle these 
cases
   // for all of the myriad of X86 instructions, we just scan for a CP/FI/GV
-  // operand and base are analysis on it.  This is safe because the address of
+  // operand and base our analysis on it.  This is safe because the address of
   // none of these three cases is ever used as anything other than a load base
   // and X86 doesn't have any instructions that load from multiple places.
   


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45898 - /llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

2008-01-11 Thread Evan Cheng
Author: evancheng
Date: Fri Jan 11 19:08:07 2008
New Revision: 45898

URL: http://llvm.org/viewvc/llvm-project?rev=45898&view=rev
Log:
Code clean up.

Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=45898&r1=45897&r2=45898&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Fri Jan 11 19:08:07 2008
@@ -1027,23 +1027,21 @@
   return false;
 }
 
-// GetMemCpyWithFlags - Create a MemCpy using function's parameter flag.
+// CreateCopyOfByValArgument - Make a copy of an aggregate at address specified
+// by "Src" to address "Dst" with size and alignment information specified by
+// the specific parameter attribute. The copy will be passed as a byval 
function
+// parameter.
 static SDOperand 
-GetMemCpyWithFlags(SelectionDAG &DAG, unsigned Flags, SDOperand From,
-   SDOperand To, SDOperand Chain) {
-
-  unsigned Align = 1 << ((Flags & ISD::ParamFlags::ByValAlign) >>
- ISD::ParamFlags::ByValAlignOffs);
-
-  unsigned  Size = (Flags & ISD::ParamFlags::ByValSize) >>
+CreateCopyOfByValArgument(SDOperand Src, SDOperand Dst, SDOperand Chain,
+  unsigned Flags, SelectionDAG &DAG) {
+  unsigned Align = 1 <<
+((Flags & ISD::ParamFlags::ByValAlign) >> ISD::ParamFlags::ByValAlignOffs);
+  unsigned Size = (Flags & ISD::ParamFlags::ByValSize) >>
 ISD::ParamFlags::ByValSizeOffs;
-
-  SDOperand AlignNode = DAG.getConstant(Align, MVT::i32);
-  SDOperand  SizeNode = DAG.getConstant(Size, MVT::i32);
+  SDOperand AlignNode= DAG.getConstant(Align, MVT::i32);
+  SDOperand SizeNode = DAG.getConstant(Size, MVT::i32);
   SDOperand AlwaysInline = DAG.getConstant(1, MVT::i32);
-
-  return DAG.getMemcpy(Chain, To, From, SizeNode, AlignNode,
-   AlwaysInline);
+  return DAG.getMemcpy(Chain, Dst, Src, SizeNode, AlignNode, AlwaysInline);
 }
 
 SDOperand X86TargetLowering::LowerMemArgument(SDOperand Op, SelectionDAG &DAG,
@@ -1260,10 +1258,9 @@
   SDOperand FlagsOp = Op.getOperand(6+2*VA.getValNo());
   unsigned Flags= cast(FlagsOp)->getValue();
   if (Flags & ISD::ParamFlags::ByVal) {
-return GetMemCpyWithFlags(DAG, Flags, Arg, PtrOff, Chain);
-  } else {
-return DAG.getStore(Chain, Arg, PtrOff, NULL, 0);
+return CreateCopyOfByValArgument(Arg, PtrOff, Chain, Flags, DAG);
   }
+  return DAG.getStore(Chain, Arg, PtrOff, NULL, 0);
 }
 
 SDOperand X86TargetLowering::LowerCALL(SDOperand Op, SelectionDAG &DAG) {
@@ -1438,7 +1435,7 @@
 FI = MF.getFrameInfo()->CreateFixedObject(OpSize, Offset);
 FIN = DAG.getFrameIndex(FI, MVT::i32);
 SDOperand Source = Arg;
-if (IsPossiblyOverwrittenArgumentOfTailCall(Arg)){
+if (IsPossiblyOverwrittenArgumentOfTailCall(Arg)) {
   // Copy from stack slots to stack slot of a tail called function. 
This
   // needs to be done because if we would lower the arguments directly
   // to their real stack slot we might end up overwriting each other.
@@ -1452,12 +1449,12 @@
 } 
 
 if (Flags & ISD::ParamFlags::ByVal) {
-// Copy relative to framepointer.
-MemOpChains2.
-  push_back(GetMemCpyWithFlags(DAG, Flags, Source, FIN, Chain));
+  // Copy relative to framepointer.
+  MemOpChains2.push_back(CreateCopyOfByValArgument(Source, FIN, Chain,
+   Flags, DAG));
 } else {
-// Store relative to framepointer.
-MemOpChains2.push_back(DAG.getStore(Chain, Source, FIN, NULL, 0));
+  // Store relative to framepointer.
+  MemOpChains2.push_back(DAG.getStore(Chain, Source, FIN, NULL, 0));
 }
   }
 }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45897 - /llvm/trunk/utils/TableGen/CallingConvEmitter.cpp

2008-01-11 Thread Evan Cheng
Author: evancheng
Date: Fri Jan 11 19:07:41 2008
New Revision: 45897

URL: http://llvm.org/viewvc/llvm-project?rev=45897&view=rev
Log:
ByVal arguments are passed on stack. Make sure to allocate a slot using size 
and alignment information on the parameter attribute.

Modified:
llvm/trunk/utils/TableGen/CallingConvEmitter.cpp

Modified: llvm/trunk/utils/TableGen/CallingConvEmitter.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CallingConvEmitter.cpp?rev=45897&r1=45896&r2=45897&view=diff

==
--- llvm/trunk/utils/TableGen/CallingConvEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/CallingConvEmitter.cpp Fri Jan 11 19:07:41 2008
@@ -115,19 +115,32 @@
   int Size = Action->getValueAsInt("Size");
   int Align = Action->getValueAsInt("Align");
 
-  O << IndentStr << "unsigned Offset" << ++Counter
-<< " = State.AllocateStack(";
+  O << IndentStr << "unsigned Size = ";
   if (Size)
-O << Size << ", ";
+O << Size;
   else
-O << "\n" << IndentStr << "  State.getTarget().getTargetData()"
-  "->getABITypeSize(MVT::getTypeForValueType(LocVT)), ";
+O << "State.getTarget().getTargetData()"
+  "->getABITypeSize(MVT::getTypeForValueType(LocVT))";
+  O << ";\n"
+<< IndentStr << "unsigned Align = ";
   if (Align)
 O << Align;
   else
-O << "\n" << IndentStr << "  State.getTarget().getTargetData()"
+O << "State.getTarget().getTargetData()"
   "->getABITypeAlignment(MVT::getTypeForValueType(LocVT))";
-  O << ");\n" << IndentStr
+  O << ";\n";
+  O << IndentStr << "if (ArgFlags & ISD::ParamFlags::ByVal) {\n";
+  O << IndentStr << "  " <<
+"Size = (ArgFlags & ISD::ParamFlags::ByValSize) >> "
+"ISD::ParamFlags::ByValSizeOffs;\n";
+  O << IndentStr << "  " <<
+"unsigned ParamAlign = 1 << ((ArgFlags & ISD::ParamFlags::ByValAlign) "
+">> ISD::ParamFlags::ByValAlignOffs);\n";
+  O << IndentStr << "  Align = std::max(Align, ParamAlign);\n"
+<< IndentStr << "}\n";
+  O << IndentStr << "unsigned Offset" << ++Counter
+<< " = State.AllocateStack(Size, Align);\n";
+  O << IndentStr
 << "State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset"
 << Counter << ", LocVT, LocInfo));\n";
   O << IndentStr << "return false;\n";


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r45890 - /llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp

2008-01-11 Thread Tanya Lattner
It XPASSes with llvm-gcc4.0. I don't think xfail is what you want.  I  
don't think there is a way to specify a test for pass/fail for a  
specific version of llvm-gcc. I think this was on my todo list awhile  
back. File a bug.

-Tanya


On Jan 11, 2008, at 3:06 PM, Chris Lattner wrote:

> Author: lattner
> Date: Fri Jan 11 17:06:56 2008
> New Revision: 45890
>
> URL: http://llvm.org/viewvc/llvm-project?rev=45890&view=rev
> Log:
> llvm-g++ 4.0 has completely different code for this warning,
> just xfail it.
>
> Modified:
> llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp
>
> Modified: llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/C%2B% 
> 2BFrontend/2008-01-11-BadWarning.cpp? 
> rev=45890&r1=45889&r2=45890&view=diff
>
> == 
> 
> --- llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp (original)
> +++ llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp Fri Jan  
> 11 17:06:56 2008
> @@ -1,5 +1,6 @@
>  // RUN: %llvmgcc -xc++ %s -S -o /dev/null |& not grep warning
>  // rdar://5683899
> +// XFAIL: llvmgcc4.0.1
>  void** f(void **Buckets, unsigned NumBuckets) {
>return Buckets + NumBuckets;
>  }
>
>
> ___
> llvm-commits mailing list
> llvm-commits@cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r45890 - /llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp

2008-01-11 Thread Chris Lattner

On Jan 11, 2008, at 5:11 PM, Tanya Lattner wrote:

> It XPASSes with llvm-gcc4.0. I don't think xfail is what you want.  I
> don't think there is a way to specify a test for pass/fail for a
> specific version of llvm-gcc. I think this was on my todo list awhile
> back. File a bug.

Actually, that's a good thing.  I've verified it passes with 4.0 and  
4.2, so I can just remove the XFAIL line.  Thanks!

-Chris

>
> -Tanya
>
>
> On Jan 11, 2008, at 3:06 PM, Chris Lattner wrote:
>
>> Author: lattner
>> Date: Fri Jan 11 17:06:56 2008
>> New Revision: 45890
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=45890&view=rev
>> Log:
>> llvm-g++ 4.0 has completely different code for this warning,
>> just xfail it.
>>
>> Modified:
>>llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp
>>
>> Modified: llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/C%2B%
>> 2BFrontend/2008-01-11-BadWarning.cpp?
>> rev=45890&r1=45889&r2=45890&view=diff
>>
>> = 
>> =
>> 
>> --- llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp (original)
>> +++ llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp Fri Jan
>> 11 17:06:56 2008
>> @@ -1,5 +1,6 @@
>> // RUN: %llvmgcc -xc++ %s -S -o /dev/null |& not grep warning
>> // rdar://5683899
>> +// XFAIL: llvmgcc4.0.1
>> void** f(void **Buckets, unsigned NumBuckets) {
>>   return Buckets + NumBuckets;
>> }
>>
>>
>> ___
>> llvm-commits mailing list
>> llvm-commits@cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
> ___
> llvm-commits mailing list
> llvm-commits@cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45899 - /llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Fri Jan 11 19:45:22 2008
New Revision: 45899

URL: http://llvm.org/viewvc/llvm-project?rev=45899&view=rev
Log:
this actually does pass with 4.0

Modified:
llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp

Modified: llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/C%2B%2BFrontend/2008-01-11-BadWarning.cpp?rev=45899&r1=45898&r2=45899&view=diff

==
--- llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp (original)
+++ llvm/trunk/test/C++Frontend/2008-01-11-BadWarning.cpp Fri Jan 11 19:45:22 
2008
@@ -1,6 +1,5 @@
 // RUN: %llvmgcc -xc++ %s -S -o /dev/null |& not grep warning
 // rdar://5683899
-// XFAIL: llvmgcc4.0.1
 void** f(void **Buckets, unsigned NumBuckets) {
   return Buckets + NumBuckets;
 }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45900 - /llvm/trunk/utils/NewNightlyTest.pl

2008-01-11 Thread Evan Cheng
Author: evancheng
Date: Fri Jan 11 22:27:18 2008
New Revision: 45900

URL: http://llvm.org/viewvc/llvm-project?rev=45900&view=rev
Log:
Add -disable-lto optimization.

Modified:
llvm/trunk/utils/NewNightlyTest.pl

Modified: llvm/trunk/utils/NewNightlyTest.pl
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/NewNightlyTest.pl?rev=45900&r1=45899&r2=45900&view=diff

==
--- llvm/trunk/utils/NewNightlyTest.pl (original)
+++ llvm/trunk/utils/NewNightlyTest.pl Fri Jan 11 22:27:18 2008
@@ -35,6 +35,7 @@
 #  -disable-llc Disable LLC tests in the nightly tester.
 #  -disable-jit Disable JIT tests in the nightly tester.
 #  -disable-cbe Disable C backend tests in the nightly tester.
+#  -disable-lto Disable link time optimization.
 #  -verbose Turn on some debug output
 #  -debug   Print information useful only to maintainers of this 
script.
 #  -niceCheckout/Configure/Build with "nice" to reduce impact
@@ -152,6 +153,7 @@
   if (/^-disable-jit$/){ $PROGTESTOPTS .= " DISABLE_JIT=1";
  $CONFIGUREARGS .= " --disable-jit"; next; }
   if (/^-disable-cbe$/){ $PROGTESTOPTS .= " DISABLE_CBE=1"; next; }
+  if (/^-disable-lto$/){ $PROGTESTOPTS .= " DISABLE_LTO=1"; next; }
   if (/^-test-opts$/)  { $PROGTESTOPTS .= "$ARGV[0]"; shift; next; }
   if (/^-verbose$/){ $VERBOSE = 1; next; }
   if (/^-debug$/)  { $DEBUG = 1; next; }


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45902 - /llvm/trunk/lib/Target/CBackend/CBackend.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Sat Jan 12 00:46:09 2008
New Revision: 45902

URL: http://llvm.org/viewvc/llvm-project?rev=45902&view=rev
Log:
Add support for NetBSD, patch by Krister Walfridsson!


Modified:
llvm/trunk/lib/Target/CBackend/CBackend.cpp

Modified: llvm/trunk/lib/Target/CBackend/CBackend.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=45902&r1=45901&r2=45902&view=diff

==
--- llvm/trunk/lib/Target/CBackend/CBackend.cpp (original)
+++ llvm/trunk/lib/Target/CBackend/CBackend.cpp Sat Jan 12 00:46:09 2008
@@ -1323,7 +1323,7 @@
   << "extern void *__builtin_alloca(unsigned int);\n"
   << "#endif\n"
   << "#define alloca(x) __builtin_alloca(x)\n"
-  << "#elif defined(__FreeBSD__) || defined(__OpenBSD__)\n"
+  << "#elif defined(__FreeBSD__) || defined(__NetBSD__) || 
defined(__OpenBSD__)\n"
   << "#define alloca(x) __builtin_alloca(x)\n"
   << "#elif defined(_MSC_VER)\n"
   << "#define inline _inline\n"


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r45903 - in /llvm/trunk: include/llvm/Transforms/IPO.h include/llvm/Transforms/IPO/InlinerPass.h lib/Transforms/IPO/InlineSimple.cpp lib/Transforms/IPO/Inliner.cpp

2008-01-11 Thread Chris Lattner
Author: lattner
Date: Sat Jan 12 00:49:13 2008
New Revision: 45903

URL: http://llvm.org/viewvc/llvm-project?rev=45903&view=rev
Log:
Allow clients to specify the inline threshold when creating
the inliner pass.  Patch by Robert Zeh.

Modified:
llvm/trunk/include/llvm/Transforms/IPO.h
llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h
llvm/trunk/lib/Transforms/IPO/InlineSimple.cpp
llvm/trunk/lib/Transforms/IPO/Inliner.cpp

Modified: llvm/trunk/include/llvm/Transforms/IPO.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/IPO.h?rev=45903&r1=45902&r2=45903&view=diff

==
--- llvm/trunk/include/llvm/Transforms/IPO.h (original)
+++ llvm/trunk/include/llvm/Transforms/IPO.h Sat Jan 12 00:49:13 2008
@@ -91,6 +91,7 @@
 /// to inline direct function calls to small functions.
 ///
 Pass *createFunctionInliningPass();
+Pass *createFunctionInliningPass(int Threshold);
 
 
//===--===//
 /// createPruneEHPass - Return a new pass object which transforms invoke

Modified: llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h?rev=45903&r1=45902&r2=45903&view=diff

==
--- llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h (original)
+++ llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h Sat Jan 12 00:49:13 
2008
@@ -27,6 +27,7 @@
 ///
 struct Inliner : public CallGraphSCCPass {
   explicit Inliner(const void *ID);
+  explicit Inliner(const void *ID, int Threshold);
 
   /// getAnalysisUsage - For this class, we declare that we require and 
preserve
   /// the call graph.  If the derived class implements this method, it should

Modified: llvm/trunk/lib/Transforms/IPO/InlineSimple.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/InlineSimple.cpp?rev=45903&r1=45902&r2=45903&view=diff

==
--- llvm/trunk/lib/Transforms/IPO/InlineSimple.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/InlineSimple.cpp Sat Jan 12 00:49:13 2008
@@ -35,6 +35,7 @@
 InlineCostAnalyzer CA;
   public:
 SimpleInliner() : Inliner(&ID) {}
+SimpleInliner(int Threshold) : Inliner(&ID, Threshold) {}
 static char ID; // Pass identification, replacement for typeid
 int getInlineCost(CallSite CS) {
   return CA.getInlineCost(CS, NeverInline);
@@ -47,6 +48,10 @@
 
 Pass *llvm::createFunctionInliningPass() { return new SimpleInliner(); }
 
+Pass *llvm::createFunctionInliningPass(int Threshold) { 
+  return new SimpleInliner(Threshold);
+}
+
 // doInitialization - Initializes the vector of functions that have been
 // annotated with the noinline attribute.
 bool SimpleInliner::doInitialization(CallGraph &CG) {

Modified: llvm/trunk/lib/Transforms/IPO/Inliner.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Inliner.cpp?rev=45903&r1=45902&r2=45903&view=diff

==
--- llvm/trunk/lib/Transforms/IPO/Inliner.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/Inliner.cpp Sat Jan 12 00:49:13 2008
@@ -39,6 +39,9 @@
 Inliner::Inliner(const void *ID) 
   : CallGraphSCCPass((intptr_t)ID), InlineThreshold(InlineLimit) {}
 
+Inliner::Inliner(const void *ID, int Threshold) 
+  : CallGraphSCCPass((intptr_t)ID), InlineThreshold(Threshold) {}
+
 /// getAnalysisUsage - For this class, we declare that we require and preserve
 /// the call graph.  If the derived class implements this method, it should
 /// always explicitly call the implementation here.


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm-www/Users.html

2008-01-11 Thread Chris Lattner


Changes in directory llvm-www:

Users.html updated: 1.24 -> 1.25
---
Log message:

add another academic institute, thanks to Pertti Kellomaki


---
Diffs of the changes:  (+11 -5)

 Users.html |   16 +++-
 1 files changed, 11 insertions(+), 5 deletions(-)


Index: llvm-www/Users.html
diff -u llvm-www/Users.html:1.24 llvm-www/Users.html:1.25
--- llvm-www/Users.html:1.24Wed Oct 31 09:29:25 2007
+++ llvm-www/Users.html Sat Jan 12 01:21:08 2008
@@ -118,17 +118,23 @@
   http://users.ugent.be/~badams/aspicere2/";>Aspicere2
   
 
+  
+  
+http://www.nyu.edu";>New York University
+Anna Zaks 
+Validation of interprocedural optimizations
+  
+
   
 http://www.rice.edu";>Rice University
 Keith Cooper's Research Group
 
   
 
-  
   
-http://www.nyu.edu";>New York University
-Anna Zaks 
-Validation of interprocedural optimizations
+http://www.tut.fi";>Tampere University of Technology
+http://www.tkt.cs.tut.fi/index-english.html";>Jarmo Takala's 
research group, Department of Computer Systems
+http://tce.cs.tut.fi";>The TTA Based Codesign Environment 
(TCE) project
   
 
   
@@ -272,6 +278,6 @@
   src="http://www.w3.org/Icons/valid-html401"; alt="Valid HTML 4.01!">
 
 mailto:[EMAIL PROTECTED]">LLVM Development List
-  Last modified: $Date: 2007/10/31 14:29:25 $
+  Last modified: $Date: 2008/01/12 07:21:08 $
 
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits