[llvm-commits] [llvm] r45862 - /llvm/tags/Apple/llvmCore-2007/
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/
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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