[llvm-commits] [llvm] r41953 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp lib/Target/X86/X86ISelLowering.h test/CodeGen/X86/byval.ll
Author: rafael Date: Fri Sep 14 10:48:13 2007 New Revision: 41953 URL: http://llvm.org/viewvc/llvm-project?rev=41953view=rev Log: Add support for functions with byval arguments on x86 Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp llvm/trunk/lib/Target/X86/X86ISelLowering.h llvm/trunk/test/CodeGen/X86/byval.ll Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=41953r1=41952r2=41953view=diff == --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original) +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Fri Sep 14 10:48:13 2007 @@ -694,6 +694,23 @@ return VReg; } +SDOperand X86TargetLowering::LowerMemArgument(SDOperand Op, SelectionDAG DAG, + const CCValAssign VA, + MachineFrameInfo *MFI, + SDOperand Root, unsigned i) { + // Create the nodes corresponding to a load from this parameter slot. + int FI = MFI-CreateFixedObject(MVT::getSizeInBits(VA.getValVT())/8, + VA.getLocMemOffset()); + SDOperand FIN = DAG.getFrameIndex(FI, getPointerTy()); + + unsigned Flags = castConstantSDNode(Op.getOperand(3 + i))-getValue(); + + if (Flags ISD::ParamFlags::ByVal) +return FIN; + else +return DAG.getLoad(VA.getValVT(), Root, FIN, NULL, 0); +} + SDOperand X86TargetLowering::LowerCCCArguments(SDOperand Op, SelectionDAG DAG, bool isStdCall) { unsigned NumArgs = Op.Val-getNumValues() - 1; @@ -747,12 +764,7 @@ ArgValues.push_back(ArgValue); } else { assert(VA.isMemLoc()); - - // Create the nodes corresponding to a load from this parameter slot. - int FI = MFI-CreateFixedObject(MVT::getSizeInBits(VA.getValVT())/8, - VA.getLocMemOffset()); - SDOperand FIN = DAG.getFrameIndex(FI, getPointerTy()); - ArgValues.push_back(DAG.getLoad(VA.getValVT(), Root, FIN, NULL, 0)); + ArgValues.push_back(LowerMemArgument(Op, DAG, VA, MFI, Root, i)); } } @@ -1279,17 +1291,7 @@ ArgValues.push_back(ArgValue); } else { assert(VA.isMemLoc()); - - // Create the nodes corresponding to a load from this parameter slot. - int FI = MFI-CreateFixedObject(MVT::getSizeInBits(VA.getValVT())/8, - VA.getLocMemOffset()); - SDOperand FIN = DAG.getFrameIndex(FI, getPointerTy()); - - unsigned Flags = castConstantSDNode(Op.getOperand(3 + i))-getValue(); - if (Flags ISD::ParamFlags::ByVal) -ArgValues.push_back(FIN); - else -ArgValues.push_back(DAG.getLoad(VA.getValVT(), Root, FIN, NULL, 0)); + ArgValues.push_back(LowerMemArgument(Op, DAG, VA, MFI, Root, i)); } } Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=41953r1=41952r2=41953view=diff == --- llvm/trunk/lib/Target/X86/X86ISelLowering.h (original) +++ llvm/trunk/lib/Target/X86/X86ISelLowering.h Fri Sep 14 10:48:13 2007 @@ -380,6 +380,10 @@ unsigned CallingConv, SelectionDAG DAG); +SDOperand LowerMemArgument(SDOperand Op, SelectionDAG DAG, + const CCValAssign VA, MachineFrameInfo *MFI, + SDOperand Root, unsigned i); + SDOperand LowerMemOpCallTo(SDOperand Op, SelectionDAG DAG, const SDOperand StackPtr, const CCValAssign VA, SDOperand Chain, Modified: llvm/trunk/test/CodeGen/X86/byval.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/byval.ll?rev=41953r1=41952r2=41953view=diff == --- llvm/trunk/test/CodeGen/X86/byval.ll (original) +++ llvm/trunk/test/CodeGen/X86/byval.ll Fri Sep 14 10:48:13 2007 @@ -1,4 +1,7 @@ -; RUN: llvm-as %s | llc -march=x86-64 | grep movq.*8.*rsp.*rax +; RUN: llvm-as %s | llc -march=x86-64 | grep {movq 8(%rsp), %rax} +; RUN: llvm-as %s | llc -march=x86 %t +; RUN: grep {movl 8(%esp), %edx} %t +; RUN: grep {movl 4(%esp), %eax} %t %struct.s = type { i64, i64, i64 } ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] [llvm] r41775 - in /llvm/trunk: lib/Target/X86/X86InstrInfo.td lib/Target/X86/X86InstrSSE.td lib/Target/X86/X86InstrX86-64.td test/CodeGen/X86/zero-remat.ll
On Sep 10, 2007, at 1:48 PM, Dan Gohman wrote: Hi Dan, This is not safe because xor will clobber flags. It's a miscompilation if the user of the rematerialized value is a conditional move (e.g. cmovne). Thanks for spotting that! The current fix is to X86RegisterInfo::reMaterialize() should rematerialize it as a move instruction. Are you saying such a fix exists already, or that this is how a fix should work? If the latter, I'd prefer to just revert the change to the instructions that use xor so that they are not marked rematerializable for now (though the ones that use pxor/xorps/xorpd are ok). s/current/correct :-) I've already implemented it though. Why do you prefer to revert the change? Evan Dan -- Dan Gohman, Cray Inc. ___ 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] CVS: llvm-www/pubs/2007-SOSP-SVA.pdf
Changes in directory llvm-www/pubs: 2007-SOSP-SVA.pdf added (r1.1) --- Log message: SOSP 2007 paper. --- Diffs of the changes: (+0 -0) 2007-SOSP-SVA.pdf |0 1 files changed Index: llvm-www/pubs/2007-SOSP-SVA.pdf ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm-gcc-4.0] r41955 - in /llvm-gcc-4.0/trunk/gcc: llvm-convert.cpp llvm-types.cpp
Author: johannes Date: Fri Sep 14 13:51:50 2007 New Revision: 41955 URL: http://llvm.org/viewvc/llvm-project?rev=41955view=rev Log: Handle x86 long double in conversions. Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp llvm-gcc-4.0/trunk/gcc/llvm-types.cpp Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=41955r1=41954r2=41955view=diff == --- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Fri Sep 14 13:51:50 2007 @@ -5569,31 +5569,55 @@ int UArr[2]; double V; }; - REAL_VALUE_TO_TARGET_DOUBLE(TREE_REAL_CST(exp), RealArr); - - // Here's how this works: - // REAL_VALUE_TO_TARGET_DOUBLE() will generate the floating point number - // as an array of integers in the hosts's representation. Each integer - // in the array will hold 32 bits of the result REGARDLESS OF THE HOST'S - // INTEGER SIZE. - // - // This, then, makes the conversion pretty simple. The tricky part is - // getting the byte ordering correct and make sure you don't print any - // more than 32 bits per integer on platforms with ints 32 bits. - // - bool HostBigEndian = false; + if (Ty==Type::FloatTy || Ty==Type::DoubleTy) { +REAL_VALUE_TO_TARGET_DOUBLE(TREE_REAL_CST(exp), RealArr); + +// Here's how this works: +// REAL_VALUE_TO_TARGET_DOUBLE() will generate the floating point number +// as an array of integers in the hosts's representation. Each integer +// in the array will hold 32 bits of the result REGARDLESS OF THE HOST'S +// INTEGER SIZE. +// +// This, then, makes the conversion pretty simple. The tricky part is +// getting the byte ordering correct and make sure you don't print any +// more than 32 bits per integer on platforms with ints 32 bits. +// +bool HostBigEndian = false; #ifdef HOST_WORDS_BIG_ENDIAN - HostBigEndian = true; +HostBigEndian = true; #endif - - UArr[0] = RealArr[0]; // Long - int convert - UArr[1] = RealArr[1]; - if (WORDS_BIG_ENDIAN != HostBigEndian) -std::swap(UArr[0], UArr[1]); - - return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat((float)V) - : APFloat(V)); +UArr[0] = RealArr[0]; // Long - int convert +UArr[1] = RealArr[1]; + +if (WORDS_BIG_ENDIAN != HostBigEndian) + std::swap(UArr[0], UArr[1]); + +return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat((float)V) + : APFloat(V)); + } else if (Ty==Type::X86_FP80Ty) { + long RealArr[4]; + uint64_t UArr[2]; + REAL_VALUE_TO_TARGET_LONG_DOUBLE(TREE_REAL_CST(exp), RealArr); + +bool HostBigEndian = false; +#ifdef HOST_WORDS_BIG_ENDIAN +HostBigEndian = true; +#endif + +if (WORDS_BIG_ENDIAN != HostBigEndian) { +// FIXME +} else { + UArr[0] = ((uint64_t)((uint16_t)RealArr[2]) 48) | +((uint64_t)((uint32_t)RealArr[1]) 16) | +((uint64_t)((uint16_t)(RealArr[0] 16))); + UArr[1] = (uint16_t)RealArr[0]; + +return ConstantFP::get(Ty, APFloat(APInt(80, 2, UArr))); +} + } + assert(0 Floating point type not handled yet); + return 0; // outwit compiler warning } Constant *TreeConstantToLLVM::ConvertVECTOR_CST(tree exp) { Modified: llvm-gcc-4.0/trunk/gcc/llvm-types.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-types.cpp?rev=41955r1=41954r2=41955view=diff == --- llvm-gcc-4.0/trunk/gcc/llvm-types.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-types.cpp Fri Sep 14 13:51:50 2007 @@ -698,6 +698,7 @@ abort(); case 32: return SET_TYPE_LLVM(type, Type::FloatTy); case 64: return SET_TYPE_LLVM(type, Type::DoubleTy); +case 80: return SET_TYPE_LLVM(type, Type::X86_FP80Ty); case 128: // 128-bit long doubles map onto { double, double }. const Type *Ty = Type::DoubleTy; ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41775 - in /llvm/trunk: lib/Target/X86/X86InstrInfo.td lib/Target/X86/X86InstrSSE.td lib/Target/X86/X86InstrX86-64.td test/CodeGen/X86/zero-remat.ll
Are you saying such a fix exists already, or that this is how a fix should work? If the latter, I'd prefer to just revert the change to the instructions that use xor so that they are not marked rematerializable for now (though the ones that use pxor/xorps/xorpd are ok). s/current/correct :-) I've already implemented it though. Ok, thanks! Why do you prefer to revert the change? I don't, now that the fix is in. Dan -- Dan Gohman, Cray Inc. ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41956 - in /llvm/trunk: include/llvm/CodeGen/MachineInstr.h lib/CodeGen/MachineInstr.cpp lib/Support/APFloat.cpp lib/System/Unix/Program.inc utils/TableGen/CodeGenRegisters.h
Author: djg Date: Fri Sep 14 15:08:19 2007 New Revision: 41956 URL: http://llvm.org/viewvc/llvm-project?rev=41956view=rev Log: Remove spurious consts. This fixes warnings with compilers that are strict about such things. Modified: llvm/trunk/include/llvm/CodeGen/MachineInstr.h llvm/trunk/lib/CodeGen/MachineInstr.cpp llvm/trunk/lib/Support/APFloat.cpp llvm/trunk/lib/System/Unix/Program.inc llvm/trunk/utils/TableGen/CodeGenRegisters.h Modified: llvm/trunk/include/llvm/CodeGen/MachineInstr.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineInstr.h?rev=41956r1=41955r2=41956view=diff == --- llvm/trunk/include/llvm/CodeGen/MachineInstr.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineInstr.h Fri Sep 14 15:08:19 2007 @@ -363,7 +363,7 @@ /// getOpcode - Returns the opcode of this MachineInstr. /// - const int getOpcode() const; + int getOpcode() const; /// Access to explicit operands of the instruction. /// Modified: llvm/trunk/lib/CodeGen/MachineInstr.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=41956r1=41955r2=41956view=diff == --- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original) +++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Fri Sep 14 15:08:19 2007 @@ -116,7 +116,7 @@ /// getOpcode - Returns the opcode of this MachineInstr. /// -const int MachineInstr::getOpcode() const { +int MachineInstr::getOpcode() const { return TID-Opcode; } Modified: llvm/trunk/lib/Support/APFloat.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/APFloat.cpp?rev=41956r1=41955r2=41956view=diff == --- llvm/trunk/lib/Support/APFloat.cpp (original) +++ llvm/trunk/lib/Support/APFloat.cpp Fri Sep 14 15:08:19 2007 @@ -1629,7 +1629,7 @@ APInt APFloat::convertDoubleAPFloatToAPInt() const { - assert(semantics == (const llvm::fltSemantics* const)IEEEdouble); + assert(semantics == (const llvm::fltSemantics*)IEEEdouble); assert (partCount()==1); uint64_t myexponent, mysignificand; @@ -1659,7 +1659,7 @@ APInt APFloat::convertFloatAPFloatToAPInt() const { - assert(semantics == (const llvm::fltSemantics* const)IEEEsingle); + assert(semantics == (const llvm::fltSemantics*)IEEEsingle); assert (partCount()==1); uint32_t myexponent, mysignificand; Modified: llvm/trunk/lib/System/Unix/Program.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Program.inc?rev=41956r1=41955r2=41956view=diff == --- llvm/trunk/lib/System/Unix/Program.inc (original) +++ llvm/trunk/lib/System/Unix/Program.inc Fri Sep 14 15:08:19 2007 @@ -196,9 +196,9 @@ // Execute! if (envp != 0) -execve (path.c_str(), (char** const)args, (char**)envp); +execve (path.c_str(), (char**)args, (char**)envp); else -execv (path.c_str(), (char** const)args); +execv (path.c_str(), (char**)args); // If the execve() failed, we should exit and let the parent pick up // our non-zero exit status. exit (errno); Modified: llvm/trunk/utils/TableGen/CodeGenRegisters.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenRegisters.h?rev=41956r1=41955r2=41956view=diff == --- llvm/trunk/utils/TableGen/CodeGenRegisters.h (original) +++ llvm/trunk/utils/TableGen/CodeGenRegisters.h Fri Sep 14 15:08:19 2007 @@ -45,7 +45,7 @@ const std::vectorMVT::ValueType getValueTypes() const { return VTs; } unsigned getNumValueTypes() const { return VTs.size(); } -const MVT::ValueType getValueTypeNum(unsigned VTNum) const { +MVT::ValueType getValueTypeNum(unsigned VTNum) const { if (VTNum VTs.size()) return VTs[VTNum]; assert(0 VTNum greater than number of ValueTypes in RegClass!); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41957 - /llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp
Author: djg Date: Fri Sep 14 15:11:40 2007 New Revision: 41957 URL: http://llvm.org/viewvc/llvm-project?rev=41957view=rev Log: Change tmp. to tmp for temporaries created by ScalarEvolutionExpander for consistency with many other transforms. Modified: llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp Modified: llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp?rev=41957r1=41956r2=41957view=diff == --- llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp Fri Sep 14 15:11:40 2007 @@ -94,7 +94,7 @@ } // If we don't have - return BinaryOperator::create(Opcode, LHS, RHS, tmp., InsertPt); + return BinaryOperator::create(Opcode, LHS, RHS, tmp, InsertPt); } Value *SCEVExpander::visitMulExpr(SCEVMulExpr *S) { ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41958 - in /llvm/trunk: include/llvm/CodeGen/ lib/CodeGen/ lib/Target/ lib/Target/ARM/ lib/Target/PowerPC/ lib/Target/X86/
Author: djg Date: Fri Sep 14 15:33:02 2007 New Revision: 41958 URL: http://llvm.org/viewvc/llvm-project?rev=41958view=rev Log: Remove isReg, isImm, and isMBB, and change all their users to use isRegister, isImmediate, and isMachineBasicBlock, which are equivalent, and more popular. Modified: llvm/trunk/include/llvm/CodeGen/LiveVariables.h llvm/trunk/include/llvm/CodeGen/MachineInstr.h llvm/trunk/lib/CodeGen/AsmPrinter.cpp llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp llvm/trunk/lib/CodeGen/LiveVariables.cpp llvm/trunk/lib/CodeGen/LowerSubregs.cpp llvm/trunk/lib/CodeGen/MachineInstr.cpp llvm/trunk/lib/CodeGen/RegisterScavenging.cpp llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp llvm/trunk/lib/CodeGen/VirtRegMap.cpp llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp llvm/trunk/lib/Target/PowerPC/PPCBranchSelector.cpp llvm/trunk/lib/Target/TargetInstrInfo.cpp llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp llvm/trunk/lib/Target/X86/X86FloatingPoint.cpp llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Modified: llvm/trunk/include/llvm/CodeGen/LiveVariables.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveVariables.h?rev=41958r1=41957r2=41958view=diff == --- llvm/trunk/include/llvm/CodeGen/LiveVariables.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveVariables.h Fri Sep 14 15:33:02 2007 @@ -229,7 +229,7 @@ bool Removed = false; for (unsigned i = 0, e = MI-getNumOperands(); i != e; ++i) { MachineOperand MO = MI-getOperand(i); - if (MO.isReg() MO.isKill() MO.getReg() == reg) { + if (MO.isRegister() MO.isKill() MO.getReg() == reg) { MO.unsetIsKill(); Removed = true; break; @@ -266,7 +266,7 @@ bool Removed = false; for (unsigned i = 0, e = MI-getNumOperands(); i != e; ++i) { MachineOperand MO = MI-getOperand(i); - if (MO.isReg() MO.isDef() MO.getReg() == reg) { + if (MO.isRegister() MO.isDef() MO.getReg() == reg) { MO.unsetIsDead(); Removed = true; break; Modified: llvm/trunk/include/llvm/CodeGen/MachineInstr.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineInstr.h?rev=41958r1=41957r2=41958view=diff == --- llvm/trunk/include/llvm/CodeGen/MachineInstr.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineInstr.h Fri Sep 14 15:33:02 2007 @@ -131,10 +131,6 @@ /// Accessors that tell you what kind of MachineOperand you're looking at. /// - bool isReg() const { return opType == MO_Register; } - bool isImm() const { return opType == MO_Immediate; } - bool isMBB() const { return opType == MO_MachineBasicBlock; } - bool isRegister() const { return opType == MO_Register; } bool isImmediate() const { return opType == MO_Immediate; } bool isMachineBasicBlock() const { return opType == MO_MachineBasicBlock; } @@ -145,12 +141,12 @@ bool isExternalSymbol() const { return opType == MO_ExternalSymbol; } int64_t getImm() const { -assert(isImm() Wrong MachineOperand accessor); +assert(isImmediate() Wrong MachineOperand accessor); return contents.immedVal; } int64_t getImmedValue() const { -assert(isImm() Wrong MachineOperand accessor); +assert(isImmediate() Wrong MachineOperand accessor); return contents.immedVal; } MachineBasicBlock *getMBB() const { @@ -257,11 +253,11 @@ } void setImmedValue(int64_t immVal) { -assert(isImm() Wrong MachineOperand mutator); +assert(isImmediate() Wrong MachineOperand mutator); contents.immedVal = immVal; } void setImm(int64_t immVal) { -assert(isImm() Wrong MachineOperand mutator); +assert(isImmediate() Wrong MachineOperand mutator); contents.immedVal = immVal; } Modified: llvm/trunk/lib/CodeGen/AsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter.cpp?rev=41958r1=41957r2=41958view=diff == --- llvm/trunk/lib/CodeGen/AsmPrinter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter.cpp Fri Sep 14 15:33:02 2007 @@ -982,7 +982,7 @@ // Count the number of register definitions. unsigned NumDefs = 0; - for (; MI-getOperand(NumDefs).isReg() MI-getOperand(NumDefs).isDef(); + for (; MI-getOperand(NumDefs).isRegister() MI-getOperand(NumDefs).isDef(); ++NumDefs) assert(NumDefs != NumOperands-1 No asm string?); Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=41958r1=41957r2=41958view=diff == ---
[llvm-commits] [llvm] r41960 - in /llvm/trunk: include/llvm/ADT/FoldingSet.h lib/Support/FoldingSet.cpp
Author: djg Date: Fri Sep 14 15:48:42 2007 New Revision: 41960 URL: http://llvm.org/viewvc/llvm-project?rev=41960view=rev Log: And an FoldingSetImpl::NodeID::AddInteger overload for int64_t, to avoid ambiguity. Modified: llvm/trunk/include/llvm/ADT/FoldingSet.h llvm/trunk/lib/Support/FoldingSet.cpp Modified: llvm/trunk/include/llvm/ADT/FoldingSet.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/FoldingSet.h?rev=41960r1=41959r2=41960view=diff == --- llvm/trunk/include/llvm/ADT/FoldingSet.h (original) +++ llvm/trunk/include/llvm/ADT/FoldingSet.h Fri Sep 14 15:48:42 2007 @@ -149,6 +149,7 @@ void AddPointer(const void *Ptr); void AddInteger(signed I); void AddInteger(unsigned I); +void AddInteger(int64_t I); void AddInteger(uint64_t I); void AddFloat(float F); void AddDouble(double D); Modified: llvm/trunk/lib/Support/FoldingSet.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/FoldingSet.cpp?rev=41960r1=41959r2=41960view=diff == --- llvm/trunk/lib/Support/FoldingSet.cpp (original) +++ llvm/trunk/lib/Support/FoldingSet.cpp Fri Sep 14 15:48:42 2007 @@ -40,6 +40,9 @@ void FoldingSetImpl::NodeID::AddInteger(unsigned I) { Bits.push_back(I); } +void FoldingSetImpl::NodeID::AddInteger(int64_t I) { + AddInteger((uint64_t)I); +} void FoldingSetImpl::NodeID::AddInteger(uint64_t I) { Bits.push_back(unsigned(I)); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41959 - /llvm/trunk/test/CodeGen/PowerPC/fabs.ll
Author: djg Date: Fri Sep 14 15:37:18 2007 New Revision: 41959 URL: http://llvm.org/viewvc/llvm-project?rev=41959view=rev Log: Add explicit triples to avoid default behavior that varies by host. Modified: llvm/trunk/test/CodeGen/PowerPC/fabs.ll Modified: llvm/trunk/test/CodeGen/PowerPC/fabs.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/fabs.ll?rev=41959r1=41958r2=41959view=diff == --- llvm/trunk/test/CodeGen/PowerPC/fabs.ll (original) +++ llvm/trunk/test/CodeGen/PowerPC/fabs.ll Fri Sep 14 15:37:18 2007 @@ -1,4 +1,4 @@ -; RUN: llvm-as %s | llc -march=ppc32 | grep {fabs f1, f1} +; RUN: llvm-as %s | llc -march=ppc32 -mtriple=powerpc-apple-darwin | grep {fabs f1, f1} define double @fabs(double %f) { entry: ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41962 - in /llvm/trunk/lib/Target/X86: X86InstrFPStack.td X86InstrInfo.cpp X86InstrInfo.td X86InstrSSE.td X86InstrX86-64.td
Author: evancheng Date: Fri Sep 14 16:48:26 2007 New Revision: 41962 URL: http://llvm.org/viewvc/llvm-project?rev=41962view=rev Log: Add implicit def of EFLAGS on those instructions that may modify flags. Modified: llvm/trunk/lib/Target/X86/X86InstrFPStack.td llvm/trunk/lib/Target/X86/X86InstrInfo.cpp llvm/trunk/lib/Target/X86/X86InstrInfo.td llvm/trunk/lib/Target/X86/X86InstrSSE.td llvm/trunk/lib/Target/X86/X86InstrX86-64.td Modified: llvm/trunk/lib/Target/X86/X86InstrFPStack.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrFPStack.td?rev=41962r1=41961r2=41962view=diff == --- llvm/trunk/lib/Target/X86/X86InstrFPStack.td (original) +++ llvm/trunk/lib/Target/X86/X86InstrFPStack.td Fri Sep 14 16:48:26 2007 @@ -488,7 +488,7 @@ def UCOM_FpIr80: FpI_(outs), (ins RFP80:$lhs, RFP80:$rhs), CompareFP, [(X86cmp RFP80:$lhs, RFP80:$rhs)]; // CC = ST(0) cmp ST(i) -let Uses = [ST0] in { +let Defs = [EFLAGS], Uses = [ST0] in { def UCOM_Fr: FPI0xE0, AddRegFrm,// FPSW = cmp ST(0) with ST(i) (outs), (ins RST:$reg), fucom\t$reg, DD; Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=41962r1=41961r2=41962view=diff == --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Fri Sep 14 16:48:26 2007 @@ -182,7 +182,7 @@ break; } case X86::SHL64ri: { -assert(MI-getNumOperands() == 3 Unknown shift instruction!); +assert(MI-getNumOperands() = 3 Unknown shift instruction!); // NOTE: LEA doesn't produce flags like shift does, but LLVM never uses // the flags produced by a shift yet, so this is safe. unsigned Dest = MI-getOperand(0).getReg(); @@ -195,7 +195,7 @@ break; } case X86::SHL32ri: { -assert(MI-getNumOperands() == 3 Unknown shift instruction!); +assert(MI-getNumOperands() = 3 Unknown shift instruction!); // NOTE: LEA doesn't produce flags like shift does, but LLVM never uses // the flags produced by a shift yet, so this is safe. unsigned Dest = MI-getOperand(0).getReg(); @@ -210,7 +210,7 @@ break; } case X86::SHL16ri: { -assert(MI-getNumOperands() == 3 Unknown shift instruction!); +assert(MI-getNumOperands() = 3 Unknown shift instruction!); // NOTE: LEA doesn't produce flags like shift does, but LLVM never uses // the flags produced by a shift yet, so this is safe. unsigned Dest = MI-getOperand(0).getReg(); @@ -259,40 +259,40 @@ switch (MI-getOpcode()) { case X86::INC32r: case X86::INC64_32r: -assert(MI-getNumOperands() == 2 Unknown inc instruction!); +assert(MI-getNumOperands() = 2 Unknown inc instruction!); NewMI = addRegOffset(BuildMI(get(X86::LEA32r), Dest), Src, 1); break; case X86::INC16r: case X86::INC64_16r: if (DisableLEA16) return 0; -assert(MI-getNumOperands() == 2 Unknown inc instruction!); +assert(MI-getNumOperands() = 2 Unknown inc instruction!); NewMI = addRegOffset(BuildMI(get(X86::LEA16r), Dest), Src, 1); break; case X86::DEC32r: case X86::DEC64_32r: -assert(MI-getNumOperands() == 2 Unknown dec instruction!); +assert(MI-getNumOperands() = 2 Unknown dec instruction!); NewMI = addRegOffset(BuildMI(get(X86::LEA32r), Dest), Src, -1); break; case X86::DEC16r: case X86::DEC64_16r: if (DisableLEA16) return 0; -assert(MI-getNumOperands() == 2 Unknown dec instruction!); +assert(MI-getNumOperands() = 2 Unknown dec instruction!); NewMI = addRegOffset(BuildMI(get(X86::LEA16r), Dest), Src, -1); break; case X86::ADD32rr: -assert(MI-getNumOperands() == 3 Unknown add instruction!); +assert(MI-getNumOperands() = 3 Unknown add instruction!); NewMI = addRegReg(BuildMI(get(X86::LEA32r), Dest), Src, MI-getOperand(2).getReg()); break; case X86::ADD16rr: if (DisableLEA16) return 0; -assert(MI-getNumOperands() == 3 Unknown add instruction!); +assert(MI-getNumOperands() = 3 Unknown add instruction!); NewMI = addRegReg(BuildMI(get(X86::LEA16r), Dest), Src, MI-getOperand(2).getReg()); break; case X86::ADD32ri: case X86::ADD32ri8: -assert(MI-getNumOperands() == 3 Unknown add instruction!); +assert(MI-getNumOperands() = 3 Unknown add instruction!); if (MI-getOperand(2).isImmediate()) NewMI = addRegOffset(BuildMI(get(X86::LEA32r), Dest), Src, MI-getOperand(2).getImmedValue()); @@ -300,7 +300,7 @@ case X86::ADD16ri: case X86::ADD16ri8: if (DisableLEA16) return 0; -assert(MI-getNumOperands() == 3 Unknown add instruction!); +
[llvm-commits] [llvm-gcc-4.2] r41963 - in /llvm-gcc-4.2/trunk/gcc: llvm-convert.cpp llvm-types.cpp
Author: johannes Date: Fri Sep 14 16:53:34 2007 New Revision: 41963 URL: http://llvm.org/viewvc/llvm-project?rev=41963view=rev Log: Support x86 long double in conversions. Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp llvm-gcc-4.2/trunk/gcc/llvm-types.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=41963r1=41962r2=41963view=diff == --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Fri Sep 14 16:53:34 2007 @@ -5164,28 +5164,47 @@ int UArr[2]; double V; }; - REAL_VALUE_TO_TARGET_DOUBLE(TREE_REAL_CST(exp), RealArr); - - // Here's how this works: - // REAL_VALUE_TO_TARGET_DOUBLE() will generate the floating point number - // as an array of integers in the target's representation. Each integer - // in the array will hold 32 bits of the result REGARDLESS OF THE HOST'S - // INTEGER SIZE. - // - // This, then, makes the conversion pretty simple. The tricky part is - // getting the byte ordering correct and make sure you don't print any - // more than 32 bits per integer on platforms with ints 32 bits. - - UArr[0] = RealArr[0]; // Long - int convert - UArr[1] = RealArr[1]; - - // FIXME: verify on big-endian targets and cross from big- to little- endian - // targets - if (FLOAT_WORDS_BIG_ENDIAN) -std::swap(UArr[0], UArr[1]); + if (Ty==Type::FloatTy || Ty==Type::DoubleTy) { +REAL_VALUE_TO_TARGET_DOUBLE(TREE_REAL_CST(exp), RealArr); + +// Here's how this works: +// REAL_VALUE_TO_TARGET_DOUBLE() will generate the floating point number +// as an array of integers in the target's representation. Each integer +// in the array will hold 32 bits of the result REGARDLESS OF THE HOST'S +// INTEGER SIZE. +// +// This, then, makes the conversion pretty simple. The tricky part is +// getting the byte ordering correct and make sure you don't print any +// more than 32 bits per integer on platforms with ints 32 bits. + +UArr[0] = RealArr[0]; // Long - int convert +UArr[1] = RealArr[1]; + +// FIXME: verify on big-endian targets and cross from big- to little- endian +// targets +if (FLOAT_WORDS_BIG_ENDIAN) + std::swap(UArr[0], UArr[1]); + +return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat((float)V) + : APFloat(V)); + } else if (Ty==Type::X86_FP80Ty) { + long RealArr[4]; + uint64_t UArr[2]; + REAL_VALUE_TO_TARGET_LONG_DOUBLE(TREE_REAL_CST(exp), RealArr); + +if (FLOAT_WORDS_BIG_ENDIAN) { +// FIXME +} else { + UArr[0] = ((uint64_t)((uint16_t)RealArr[2]) 48) | +((uint64_t)((uint32_t)RealArr[1]) 16) | +((uint64_t)((uint16_t)(RealArr[0] 16))); + UArr[1] = (uint16_t)RealArr[0]; - return ConstantFP::get(Ty, Ty==Type::FloatTy ? APFloat((float)V) - : APFloat(V)); +return ConstantFP::get(Ty, APFloat(APInt(80, 2, UArr))); +} + } + assert(0 Floating point type not handled yet); + return 0; // outwit compiler warning } Constant *TreeConstantToLLVM::ConvertVECTOR_CST(tree exp) { Modified: llvm-gcc-4.2/trunk/gcc/llvm-types.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-types.cpp?rev=41963r1=41962r2=41963view=diff == --- llvm-gcc-4.2/trunk/gcc/llvm-types.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-types.cpp Fri Sep 14 16:53:34 2007 @@ -730,6 +730,7 @@ abort(); case 32: return SET_TYPE_LLVM(type, Type::FloatTy); case 64: return SET_TYPE_LLVM(type, Type::DoubleTy); +case 80: return SET_TYPE_LLVM(type, Type::X86_FP80Ty); case 128: // 128-bit long doubles map onto { double, double }. const Type *Ty = Type::DoubleTy; ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] remove libstdc++ from llvm-gcc configure targets
As it says. Tested on x86-darwin. -eric 2007-09-14 Eric Christopher [EMAIL PROTECTED] * configure.in (powerpc*-*-darwin*): Add target-libstdc++-v3 to noconfidirs. (*-*-darwin*): Ditto. * configure: Regenerate. Index: configure.in === --- configure.in(revision 41963) +++ configure.in(working copy) @@ -371,12 +371,12 @@ case ${target} in powerpc-*-darwin*) noconfigdirs=$noconfigdirs bfd binutils ld gas opcodes gdb gprof # APPLE LOCAL 64-bit bringup -noconfigdirs=$noconfigdirs target-libobjc +noconfigdirs=$noconfigdirs target-libobjc target-libstdc++-v3 ;; *-*-darwin*) noconfigdirs=$noconfigdirs bfd binutils ld gas opcodes gdb gprof # APPLE LOCAL 64-bit bringup -noconfigdirs=$noconfigdirs target-libobjc ${libgcj} +noconfigdirs=$noconfigdirs target-libobjc ${libgcj} target-libstdc++-v3 ;; *-*-freebsd[[12]] | *-*-freebsd[[12]].* | *-*-freebsd*aout*) noconfigdirs=$noconfigdirs target-newlib target-libgloss ${libgcj} ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm-gcc-4.0] r41965 - /llvm-gcc-4.0/trunk/configure.in
Author: lattner Date: Fri Sep 14 17:25:06 2007 New Revision: 41965 URL: http://llvm.org/viewvc/llvm-project?rev=41965view=rev Log: When building on darwin, automatically disable building libstdc++. Patch by Eric Christopher! Modified: llvm-gcc-4.0/trunk/configure.in Modified: llvm-gcc-4.0/trunk/configure.in URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/configure.in?rev=41965r1=41964r2=41965view=diff == --- llvm-gcc-4.0/trunk/configure.in (original) +++ llvm-gcc-4.0/trunk/configure.in Fri Sep 14 17:25:06 2007 @@ -371,12 +371,12 @@ powerpc-*-darwin*) noconfigdirs=$noconfigdirs bfd binutils ld gas opcodes gdb gprof # APPLE LOCAL 64-bit bringup -noconfigdirs=$noconfigdirs target-libobjc +noconfigdirs=$noconfigdirs target-libobjc target-libstdc++-v3 ;; *-*-darwin*) noconfigdirs=$noconfigdirs bfd binutils ld gas opcodes gdb gprof # APPLE LOCAL 64-bit bringup -noconfigdirs=$noconfigdirs target-libobjc ${libgcj} +noconfigdirs=$noconfigdirs target-libobjc ${libgcj} target-libstdc++-v3 ;; *-*-freebsd[[12]] | *-*-freebsd[[12]].* | *-*-freebsd*aout*) noconfigdirs=$noconfigdirs target-newlib target-libgloss ${libgcj} ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm-gcc-4.0] r41966 - /llvm-gcc-4.0/trunk/configure
Author: lattner Date: Fri Sep 14 17:25:19 2007 New Revision: 41966 URL: http://llvm.org/viewvc/llvm-project?rev=41966view=rev Log: regenerate. Modified: llvm-gcc-4.0/trunk/configure Modified: llvm-gcc-4.0/trunk/configure URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/configure?rev=41966r1=41965r2=41966view=diff == --- llvm-gcc-4.0/trunk/configure (original) +++ llvm-gcc-4.0/trunk/configure Fri Sep 14 17:25:19 2007 @@ -1162,12 +1162,12 @@ powerpc-*-darwin*) noconfigdirs=$noconfigdirs bfd binutils ld gas opcodes gdb gprof # APPLE LOCAL 64-bit bringup -noconfigdirs=$noconfigdirs target-libobjc +noconfigdirs=$noconfigdirs target-libobjc target-libstdc++-v3 ;; *-*-darwin*) noconfigdirs=$noconfigdirs bfd binutils ld gas opcodes gdb gprof # APPLE LOCAL 64-bit bringup -noconfigdirs=$noconfigdirs target-libobjc ${libgcj} +noconfigdirs=$noconfigdirs target-libobjc ${libgcj} target-libstdc++-v3 ;; *-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*) noconfigdirs=$noconfigdirs target-newlib target-libgloss ${libgcj} @@ -1269,10 +1269,6 @@ arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) noconfigdirs=$noconfigdirs target-libffi target-qthreads ;; - arm*-*-linux-gnueabi) -noconfigdirs=$noconfigdirs target-libffi target-qthreads -noconfigdirs=$noconfigdirs target-libjava target-libobjc -;; arm*-*-symbianelf*) noconfigdirs=$noconfigdirs ${libgcj} target-libiberty ;; @@ -1816,7 +1812,7 @@ # Extract the first word of gcc, so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n checking for $ac_word... $ac_c 16 -echo configure:1820: checking for $ac_word 5 +echo configure:1816: checking for $ac_word 5 if eval test \`echo '$''{'ac_cv_prog_CC'+set}'`\ = set; then echo $ac_n (cached) $ac_c 16 else @@ -1846,7 +1842,7 @@ # Extract the first word of cc, so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n checking for $ac_word... $ac_c 16 -echo configure:1850: checking for $ac_word 5 +echo configure:1846: checking for $ac_word 5 if eval test \`echo '$''{'ac_cv_prog_CC'+set}'`\ = set; then echo $ac_n (cached) $ac_c 16 else @@ -1897,7 +1893,7 @@ # Extract the first word of cl, so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n checking for $ac_word... $ac_c 16 -echo configure:1901: checking for $ac_word 5 +echo configure:1897: checking for $ac_word 5 if eval test \`echo '$''{'ac_cv_prog_CC'+set}'`\ = set; then echo $ac_n (cached) $ac_c 16 else @@ -1929,7 +1925,7 @@ fi echo $ac_n checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works... $ac_c 16 -echo configure:1933: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works 5 +echo configure:1929: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works 5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -1940,12 +1936,12 @@ cat conftest.$ac_ext EOF -#line 1944 configure +#line 1940 configure #include confdefs.h main(){return(0);} EOF -if { (eval echo configure:1949: \$ac_link\) 15; (eval $ac_link) 25; } test -s conftest${ac_exeext}; then +if { (eval echo configure:1945: \$ac_link\) 15; (eval $ac_link) 25; } test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2/dev/null; then @@ -1971,12 +1967,12 @@ { echo configure: error: installation or configuration problem: C compiler cannot create executables. 12; exit 1; } fi echo $ac_n checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler... $ac_c 16 -echo configure:1975: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler 5 +echo configure:1971: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler 5 echo $ac_t$ac_cv_prog_cc_cross 16 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n checking whether we are using GNU C... $ac_c 16 -echo configure:1980: checking whether we are using GNU C 5 +echo configure:1976: checking whether we are using GNU C 5 if eval test \`echo '$''{'ac_cv_prog_gcc'+set}'`\ = set; then echo $ac_n (cached) $ac_c 16 else @@ -1985,7 +1981,7 @@ yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1989: \$ac_try\) 15; (eval $ac_try) 25; }; } | egrep yes /dev/null 21; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1985: \$ac_try\) 15; (eval $ac_try) 25; }; } | egrep yes /dev/null 21; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -2004,7 +2000,7 @@ ac_save_CFLAGS=$CFLAGS CFLAGS= echo $ac_n checking whether ${CC-cc} accepts -g... $ac_c 16 -echo configure:2008: checking whether ${CC-cc} accepts -g 5 +echo configure:2004: checking whether ${CC-cc} accepts -g 5 if eval test \`echo
[llvm-commits] [llvm] r41967 - in /llvm/trunk: include/llvm/ADT/APInt.h include/llvm/ADT/FoldingSet.h include/llvm/Constants.h lib/CodeGen/SelectionDAG/LegalizeDAG.cpp lib/CodeGen/SelectionDAG/Selecti
Author: johannes Date: Fri Sep 14 17:26:36 2007 New Revision: 41967 URL: http://llvm.org/viewvc/llvm-project?rev=41967view=rev Log: Remove the assumption that FP's are either float or double from some of the many places in the optimizers it appears, and do something reasonable with x86 long double. Make APInt::dump() public, remove newline, use it to dump ConstantSDNode's. Allow APFloats in FoldingSet. Expand X86 backend handling of long doubles (conversions to/from int, mostly). Modified: llvm/trunk/include/llvm/ADT/APInt.h llvm/trunk/include/llvm/ADT/FoldingSet.h llvm/trunk/include/llvm/Constants.h llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp llvm/trunk/lib/Support/APInt.cpp llvm/trunk/lib/Support/FoldingSet.cpp llvm/trunk/lib/Target/CBackend/CBackend.cpp llvm/trunk/lib/Target/X86/X86ISelLowering.cpp llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp llvm/trunk/lib/VMCore/Constants.cpp Modified: llvm/trunk/include/llvm/ADT/APInt.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/APInt.h?rev=41967r1=41966r2=41967view=diff == --- llvm/trunk/include/llvm/ADT/APInt.h (original) +++ llvm/trunk/include/llvm/ADT/APInt.h Fri Sep 14 17:26:36 2007 @@ -153,11 +153,6 @@ const APInt RHS, uint32_t rhsWords, APInt *Quotient, APInt *Remainder); -#ifndef NDEBUG - /// @brief debug method - void dump() const; -#endif - public: /// @name Constructors /// @{ @@ -1165,6 +1160,11 @@ static void tcSetLeastSignificantBits(integerPart *, unsigned int, unsigned int bits); +#ifndef NDEBUG + /// @brief debug method + void dump() const; +#endif + /// @} }; Modified: llvm/trunk/include/llvm/ADT/FoldingSet.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/FoldingSet.h?rev=41967r1=41966r2=41967view=diff == --- llvm/trunk/include/llvm/ADT/FoldingSet.h (original) +++ llvm/trunk/include/llvm/ADT/FoldingSet.h Fri Sep 14 17:26:36 2007 @@ -18,6 +18,7 @@ #include llvm/Support/DataTypes.h #include llvm/ADT/SmallVector.h +#include llvm/ADT/APFloat.h #include string namespace llvm { @@ -153,6 +154,7 @@ void AddInteger(uint64_t I); void AddFloat(float F); void AddDouble(double D); +void AddAPFloat(const APFloat apf); void AddString(const std::string String); /// ComputeHash - Compute a strong hash value for this NodeID, used to Modified: llvm/trunk/include/llvm/Constants.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Constants.h?rev=41967r1=41966r2=41967view=diff == --- llvm/trunk/include/llvm/Constants.h (original) +++ llvm/trunk/include/llvm/Constants.h Fri Sep 14 17:26:36 2007 @@ -231,6 +231,9 @@ /// considers -0.0 to be null as well as 0.0. :( virtual bool isNullValue() const; + // Get a negative zero. + static ConstantFP *getNegativeZero(const Type* Ty); + /// isExactlyValue - We don't rely on operator== working on double values, as /// it returns true for things that are clearly not equal, like -0.0 and 0.0. /// As such, this method can be used to do an exact bit-for-bit comparison of Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=41967r1=41966r2=41967view=diff == --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Fri Sep 14 17:26:36 2007 @@ -486,15 +486,23 @@ // double. MVT::ValueType VT = CFP-getValueType(0); bool isDouble = VT == MVT::f64; - ConstantFP *LLVMC = ConstantFP::get(isDouble ? Type::DoubleTy : - Type::FloatTy, CFP-getValueAPF()); + ConstantFP *LLVMC = ConstantFP::get(VT==MVT::f64 ? Type::DoubleTy : + VT==MVT::f32 ? Type::FloatTy : + VT==MVT::f80 ? Type::X86_FP80Ty : + VT==MVT::f128 ? Type::FP128Ty : + VT==MVT::ppcf128 ? Type::PPC_FP128Ty : + Type::VoidTy, // error + CFP-getValueAPF()); if (!UseCP) { +if (VT!=MVT::f64 VT!=MVT::f32) + assert(0 Invalid type expansion); return DAG.getConstant(LLVMC-getValueAPF().convertToAPInt().getZExtValue(), isDouble ? MVT::i64 : MVT::i32);
Re: [llvm-commits] remove libstdc++ from llvm-gcc configure targets
On Sep 14, 2007, at 3:16 PM, Eric Christopher wrote: As it says. Tested on x86-darwin. -eric 2007-09-14 Eric Christopher [EMAIL PROTECTED] * configure.in (powerpc*-*-darwin*): Add target-libstdc++-v3 to noconfidirs. (*-*-darwin*): Ditto. * configure: Regenerate. Thanks! I applied your patch: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of- Mon-20070910/053528.html http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of- Mon-20070910/053529.html FYI, you don't need to produce a formal change log for LLVM, a description of what changed is sufficient. Thanks again! -Chris ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] [llvm-gcc-4.0] r41966 - /llvm-gcc-4.0/trunk/configure
@@ -1269,10 +1269,6 @@ arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) noconfigdirs=$noconfigdirs target-libffi target-qthreads ;; - arm*-*-linux-gnueabi) -noconfigdirs=$noconfigdirs target-libffi target-qthreads -noconfigdirs=$noconfigdirs target-libjava target-libobjc -;; FYI, Lauro, it looks like the linux-gnueabi portion here isn't in configure.in, only in configure. If it is important, please add it to both again, thanks! -Chris ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41968 - /llvm/trunk/lib/Transforms/Scalar/RedundantLoadElimination.cpp
Author: resistor Date: Fri Sep 14 17:33:52 2007 New Revision: 41968 URL: http://llvm.org/viewvc/llvm-project?rev=41968view=rev Log: Remove RLE. It is subsumed by GVN. Removed: llvm/trunk/lib/Transforms/Scalar/RedundantLoadElimination.cpp Removed: llvm/trunk/lib/Transforms/Scalar/RedundantLoadElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/RedundantLoadElimination.cpp?rev=41967view=auto == --- llvm/trunk/lib/Transforms/Scalar/RedundantLoadElimination.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/RedundantLoadElimination.cpp (removed) @@ -1,135 +0,0 @@ -//===- FastDLE.cpp - Fast Dead Load Elimination ---===// -// -// The LLVM Compiler Infrastructure -// -// This file was developed by Owen Anderson and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// -//===--===// -// -// This file implements a trivial dead load elimination that only considers -// basic-block local redundant load. -// -// FIXME: This should eventually be extended to be a post-dominator tree -// traversal. Doing so would be pretty trivial. -// -//===--===// - -#define DEBUG_TYPE rle -#include llvm/Transforms/Scalar.h -#include llvm/Function.h -#include llvm/Instructions.h -#include llvm/Pass.h -#include llvm/ADT/SmallPtrSet.h -#include llvm/ADT/Statistic.h -#include llvm/Analysis/MemoryDependenceAnalysis.h -#include llvm/Transforms/Utils/Local.h -#include llvm/Support/Compiler.h -using namespace llvm; - -STATISTIC(NumFastLoads, Number of loads deleted); - -namespace { - struct VISIBILITY_HIDDEN RLE : public FunctionPass { -static char ID; // Pass identification, replacement for typeid -RLE() : FunctionPass((intptr_t)ID) {} - -virtual bool runOnFunction(Function F) { - bool Changed = false; - for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) -Changed |= runOnBasicBlock(*I); - return Changed; -} - -bool runOnBasicBlock(BasicBlock BB); - -// getAnalysisUsage - We require post dominance frontiers (aka Control -// Dependence Graph) -virtual void getAnalysisUsage(AnalysisUsage AU) const { - AU.setPreservesCFG(); - AU.addRequiredMemoryDependenceAnalysis(); - AU.addPreservedMemoryDependenceAnalysis(); -} - }; - char RLE::ID = 0; - RegisterPassRLE X(rle, Redundant Load Elimination); -} - -FunctionPass *llvm::createRedundantLoadEliminationPass() { return new RLE(); } - -bool RLE::runOnBasicBlock(BasicBlock BB) { - MemoryDependenceAnalysis MD = getAnalysisMemoryDependenceAnalysis(); - - // Record the last-seen load from this pointer - DenseMapValue*, LoadInst* lastLoad; - - bool MadeChange = false; - - // Do a top-down walk on the BB - for (BasicBlock::iterator BBI = BB.begin(), BBE = BB.end(); - BBI != BBE; ++BBI) { -// If we find a store or a free... -if (LoadInst* L = dyn_castLoadInst(BBI)) { - // We can't delete volatile loads - if (L-isVolatile()) { -lastLoad[L-getPointerOperand()] = L; -continue; - } - - Value* pointer = L-getPointerOperand(); - LoadInst* last = lastLoad[pointer]; - - // ... to a pointer that has been loaded from before... - Instruction* dep = MD.getDependency(BBI); - bool deletedLoad = false; - - while (dep != MemoryDependenceAnalysis::None - dep != MemoryDependenceAnalysis::NonLocal - (isaLoadInst(dep) || isaStoreInst(dep))) { -// ... that depends on a store ... -if (StoreInst* S = dyn_castStoreInst(dep)) { - if (S-getPointerOperand() == pointer) { -// Remove it! -MD.removeInstruction(BBI); - -BBI--; -L-replaceAllUsesWith(S-getOperand(0)); -L-eraseFromParent(); -NumFastLoads++; -deletedLoad = true; -MadeChange = true; - } - - // Whether we removed it or not, we can't - // go any further - break; -} else if (!last) { - // If we don't depend on a store, and we haven't - // been loaded before, bail. - break; -} else if (dep == last) { - // Remove it! - MD.removeInstruction(BBI); - - BBI--; - L-replaceAllUsesWith(last); - L-eraseFromParent(); - deletedLoad = true; - NumFastLoads++; - MadeChange = true; - - break; -} else { - dep = MD.getDependency(BBI, dep); -} - } - - if (!deletedLoad) -last = L; -} - } - - return MadeChange; -} - -
[llvm-commits] [llvm-gcc-4.2] r41969 - in /llvm-gcc-4.2/trunk: configure configure.in
Author: asl Date: Fri Sep 14 17:35:36 2007 New Revision: 41969 URL: http://llvm.org/viewvc/llvm-project?rev=41969view=rev Log: Forward of r41965: When building on darwin, automatically disable building libstdc++. Patch by Eric Christopher! Modified: llvm-gcc-4.2/trunk/configure llvm-gcc-4.2/trunk/configure.in Modified: llvm-gcc-4.2/trunk/configure URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/configure?rev=41969r1=41968r2=41969view=diff == --- llvm-gcc-4.2/trunk/configure (original) +++ llvm-gcc-4.2/trunk/configure Fri Sep 14 17:35:36 2007 @@ -1210,12 +1210,12 @@ ;; powerpc-*-darwin* | i[3456789]86-*-darwin*) noconfigdirs=$noconfigdirs bfd binutils ld gas opcodes gdb gprof -noconfigdirs=$noconfigdirs sim target-rda +noconfigdirs=$noconfigdirs sim target-rda target-libstdc++-v3 ;; *-*-darwin*) noconfigdirs=$noconfigdirs ld gas gdb gprof noconfigdirs=$noconfigdirs sim target-rda -noconfigdirs=$noconfigdirs ${libgcj} +noconfigdirs=$noconfigdirs ${libgcj} target-libstdc++-v3 ;; *-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*) noconfigdirs=$noconfigdirs target-newlib target-libgloss ${libgcj} Modified: llvm-gcc-4.2/trunk/configure.in URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/configure.in?rev=41969r1=41968r2=41969view=diff == --- llvm-gcc-4.2/trunk/configure.in (original) +++ llvm-gcc-4.2/trunk/configure.in Fri Sep 14 17:35:36 2007 @@ -370,12 +370,12 @@ ;; powerpc-*-darwin* | i[[3456789]]86-*-darwin*) noconfigdirs=$noconfigdirs bfd binutils ld gas opcodes gdb gprof -noconfigdirs=$noconfigdirs sim target-rda +noconfigdirs=$noconfigdirs sim target-rda target-libstdc++-v3 ;; *-*-darwin*) noconfigdirs=$noconfigdirs ld gas gdb gprof noconfigdirs=$noconfigdirs sim target-rda -noconfigdirs=$noconfigdirs ${libgcj} +noconfigdirs=$noconfigdirs ${libgcj} target-libstdc++-v3 ;; *-*-freebsd[[12]] | *-*-freebsd[[12]].* | *-*-freebsd*aout*) noconfigdirs=$noconfigdirs target-newlib target-libgloss ${libgcj} ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41971 - in /llvm/trunk/include/llvm: LinkAllPasses.h Transforms/Scalar.h
Author: resistor Date: Fri Sep 14 17:54:46 2007 New Revision: 41971 URL: http://llvm.org/viewvc/llvm-project?rev=41971view=rev Log: Remove RLE from the headers, since the pass itself is gone now. Modified: llvm/trunk/include/llvm/LinkAllPasses.h llvm/trunk/include/llvm/Transforms/Scalar.h Modified: llvm/trunk/include/llvm/LinkAllPasses.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LinkAllPasses.h?rev=41971r1=41970r2=41971view=diff == --- llvm/trunk/include/llvm/LinkAllPasses.h (original) +++ llvm/trunk/include/llvm/LinkAllPasses.h Fri Sep 14 17:54:46 2007 @@ -61,7 +61,6 @@ (void) llvm::createDeadStoreEliminationPass(); (void) llvm::createDeadTypeEliminationPass(); (void) llvm::createEdgeProfilerPass(); - (void) llvm::createRedundantLoadEliminationPass(); (void) llvm::createFunctionInliningPass(); (void) llvm::createFunctionProfilerPass(); (void) llvm::createGCSEPass(); Modified: llvm/trunk/include/llvm/Transforms/Scalar.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Scalar.h?rev=41971r1=41970r2=41971view=diff == --- llvm/trunk/include/llvm/Transforms/Scalar.h (original) +++ llvm/trunk/include/llvm/Transforms/Scalar.h Fri Sep 14 17:54:46 2007 @@ -332,13 +332,6 @@ //===--===// // -// RedundantLoadElimination - This pass deletes loads that are dominated by -// must-aliased loads and are not stored to between the loads. -// -FunctionPass *createRedundantLoadEliminationPass(); - -//===--===// -// // GVN - This pass performs global value numbering and redundant load // elimination cotemporaneously. // ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41972 - /llvm/trunk/lib/Support/FoldingSet.cpp
Author: lattner Date: Fri Sep 14 17:57:00 2007 New Revision: 41972 URL: http://llvm.org/viewvc/llvm-project?rev=41972view=rev Log: fix a gcc warning: comparison between signed and unsigned integer expressions Modified: llvm/trunk/lib/Support/FoldingSet.cpp Modified: llvm/trunk/lib/Support/FoldingSet.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/FoldingSet.cpp?rev=41972r1=41971r2=41972view=diff == --- llvm/trunk/lib/Support/FoldingSet.cpp (original) +++ llvm/trunk/lib/Support/FoldingSet.cpp Fri Sep 14 17:57:00 2007 @@ -59,7 +59,7 @@ void FoldingSetImpl::NodeID::AddAPFloat(const APFloat apf) { APInt api = apf.convertToAPInt(); const uint64_t *p = api.getRawData(); - for (int i=0; iapi.getNumWords(); i++) + for (unsigned i=0; iapi.getNumWords(); i++) AddInteger(*p++); } void FoldingSetImpl::NodeID::AddString(const std::string String) { ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41975 - in /llvm/trunk/lib/Target/X86: X86InstrInfo.cpp X86InstrX86-64.td
Author: djg Date: Fri Sep 14 18:17:45 2007 New Revision: 41975 URL: http://llvm.org/viewvc/llvm-project?rev=41975view=rev Log: Add patterns for SHLD64* and SHRD64*. Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp llvm/trunk/lib/Target/X86/X86InstrX86-64.td Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=41975r1=41974r2=41975view=diff == --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Fri Sep 14 18:17:45 2007 @@ -338,7 +338,9 @@ case X86::SHRD16rri8: // A = SHRD16rri8 B, C, I - A = SHLD16rri8 C, B, (16-I) case X86::SHLD16rri8: // A = SHLD16rri8 B, C, I - A = SHRD16rri8 C, B, (16-I) case X86::SHRD32rri8: // A = SHRD32rri8 B, C, I - A = SHLD32rri8 C, B, (32-I) - case X86::SHLD32rri8:{// A = SHLD32rri8 B, C, I - A = SHRD32rri8 C, B, (32-I) + case X86::SHLD32rri8: // A = SHLD32rri8 B, C, I - A = SHRD32rri8 C, B, (32-I) + case X86::SHRD64rri8: // A = SHRD64rri8 B, C, I - A = SHLD64rri8 C, B, (64-I) + case X86::SHLD64rri8:{// A = SHLD64rri8 B, C, I - A = SHRD64rri8 C, B, (64-I) unsigned Opc; unsigned Size; switch (MI-getOpcode()) { @@ -347,6 +349,8 @@ case X86::SHLD16rri8: Size = 16; Opc = X86::SHRD16rri8; break; case X86::SHRD32rri8: Size = 32; Opc = X86::SHLD32rri8; break; case X86::SHLD32rri8: Size = 32; Opc = X86::SHRD32rri8; break; +case X86::SHRD64rri8: Size = 64; Opc = X86::SHLD64rri8; break; +case X86::SHLD64rri8: Size = 64; Opc = X86::SHRD64rri8; break; } unsigned Amt = MI-getOperand(3).getImmedValue(); unsigned A = MI-getOperand(0).getReg(); Modified: llvm/trunk/lib/Target/X86/X86InstrX86-64.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrX86-64.td?rev=41975r1=41974r2=41975view=diff == --- llvm/trunk/lib/Target/X86/X86InstrX86-64.td (original) +++ llvm/trunk/lib/Target/X86/X86InstrX86-64.td Fri Sep 14 18:17:45 2007 @@ -564,38 +564,50 @@ let isTwoAddress = 1 in { let Uses = [CL] in { def SHLD64rrCL : RI0xA5, MRMDestReg, (outs GR64:$dst), (ins GR64:$src1, GR64:$src2), -shld{q}\t{%cl, $src2, $dst|$dst, $src2, %CL}, [], TB; +shld{q}\t{%cl, $src2, $dst|$dst, $src2, %CL}, +[(set GR64:$dst, (X86shld GR64:$src1, GR64:$src2, CL))], TB; def SHRD64rrCL : RI0xAD, MRMDestReg, (outs GR64:$dst), (ins GR64:$src1, GR64:$src2), -shrd{q}\t{%cl, $src2, $dst|$dst, $src2, %CL}, [], TB; +shrd{q}\t{%cl, $src2, $dst|$dst, $src2, %CL}, +[(set GR64:$dst, (X86shrd GR64:$src1, GR64:$src2, CL))], TB; } let isCommutable = 1 in { // FIXME: Update X86InstrInfo::commuteInstruction def SHLD64rri8 : RIi80xA4, MRMDestReg, (outs GR64:$dst), (ins GR64:$src1, GR64:$src2, i8imm:$src3), - shld{q}\t{$src3, $src2, $dst|$dst, $src2, $src3}, [], - TB; + shld{q}\t{$src3, $src2, $dst|$dst, $src2, $src3}, + [(set GR64:$dst, (X86shld GR64:$src1, GR64:$src2, + (i8 imm:$src3)))], + TB; def SHRD64rri8 : RIi80xAC, MRMDestReg, (outs GR64:$dst), (ins GR64:$src1, GR64:$src2, i8imm:$src3), - shrd{q}\t{$src3, $src2, $dst|$dst, $src2, $src3}, [], + shrd{q}\t{$src3, $src2, $dst|$dst, $src2, $src3}, + [(set GR64:$dst, (X86shrd GR64:$src1, GR64:$src2, + (i8 imm:$src3)))], TB; } // isCommutable } // isTwoAddress -// Temporary hack: there is no patterns associated with these instructions -// so we have to tell tblgen that these do not produce results. let Uses = [CL] in { def SHLD64mrCL : RI0xA5, MRMDestMem, (outs), (ins i64mem:$dst, GR64:$src2), -shld{q}\t{%cl, $src2, $dst|$dst, $src2, %CL}, [], TB; +shld{q}\t{%cl, $src2, $dst|$dst, $src2, %CL}, +[(store (X86shld (loadi64 addr:$dst), GR64:$src2, CL), + addr:$dst)], TB; def SHRD64mrCL : RI0xAD, MRMDestMem, (outs), (ins i64mem:$dst, GR64:$src2), -shrd{q}\t{%cl, $src2, $dst|$dst, $src2, %CL}, [], TB; +shrd{q}\t{%cl, $src2, $dst|$dst, $src2, %CL}, +[(store (X86shrd (loadi64 addr:$dst), GR64:$src2, CL), + addr:$dst)], TB; } def SHLD64mri8 : RIi80xA4, MRMDestMem, (outs), (ins i64mem:$dst, GR64:$src2, i8imm:$src3), - shld{q}\t{$src3, $src2, $dst|$dst, $src2, $src3}, [], + shld{q}\t{$src3, $src2, $dst|$dst, $src2, $src3}, +
[llvm-commits] [llvm-gcc-4.0] r41976 - /llvm-gcc-4.0/trunk/README.LLVM
Author: tbrethou Date: Fri Sep 14 18:22:06 2007 New Revision: 41976 URL: http://llvm.org/viewvc/llvm-project?rev=41976view=rev Log: Suggest program prefix. Modified: llvm-gcc-4.0/trunk/README.LLVM Modified: llvm-gcc-4.0/trunk/README.LLVM URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/README.LLVM?rev=41976r1=41975r2=41976view=diff == --- llvm-gcc-4.0/trunk/README.LLVM (original) +++ llvm-gcc-4.0/trunk/README.LLVM Fri Sep 14 18:22:06 2007 @@ -119,7 +119,7 @@ $ mkdir obj $ mkdir install $ cd obj -$ ../llvm-gcc4-x.y.source/configure --prefix=`pwd`/../install \ +$ ../llvm-gcc4-x.y.source/configure --prefix=`pwd`/../install --program-prefix=llvm- \ --enable-llvm=$LLVMOBJDIR --enable-languages=c,c++$EXTRALANGS $TARGETOPTIONS $ make $BUILDOPTIONS $ make install ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [test-suite] r41977 - in /test-suite/trunk/SingleSource/UnitTests/Vector/Altivec: Makefile alti.isamax.c
Author: lattner Date: Fri Sep 14 23:43:12 2007 New Revision: 41977 URL: http://llvm.org/viewvc/llvm-project?rev=41977view=rev Log: some portability fixes Modified: test-suite/trunk/SingleSource/UnitTests/Vector/Altivec/Makefile test-suite/trunk/SingleSource/UnitTests/Vector/Altivec/alti.isamax.c Modified: test-suite/trunk/SingleSource/UnitTests/Vector/Altivec/Makefile URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/UnitTests/Vector/Altivec/Makefile?rev=41977r1=41976r2=41977view=diff == --- test-suite/trunk/SingleSource/UnitTests/Vector/Altivec/Makefile (original) +++ test-suite/trunk/SingleSource/UnitTests/Vector/Altivec/Makefile Fri Sep 14 23:43:12 2007 @@ -7,5 +7,5 @@ # FIXME: CBE doesn't support vectors: PR1126 DISABLE_CBE=1 -TARGET_FLAGS += -maltivec -LCCFLAGS += -maltivec +TARGET_FLAGS += -maltivec -faltivec +LCCFLAGS += -maltivec -faltivec Modified: test-suite/trunk/SingleSource/UnitTests/Vector/Altivec/alti.isamax.c URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/UnitTests/Vector/Altivec/alti.isamax.c?rev=41977r1=41976r2=41977view=diff == --- test-suite/trunk/SingleSource/UnitTests/Vector/Altivec/alti.isamax.c (original) +++ test-suite/trunk/SingleSource/UnitTests/Vector/Altivec/alti.isamax.c Fri Sep 14 23:43:12 2007 @@ -2,7 +2,7 @@ #include math.h #include float.h #include altivec.h -#define N 1027 +#define N 1028 main() { /* @@ -12,7 +12,7 @@ Oxford Univ. Press, 2004 wpp 5/8/2002 */ - float x[N]; + float x[N] __attribute__((aligned(16))); float xb; int err,flag,i,im,k,ki,kl,ib,n0,n; int isamax(int,float *); @@ -43,6 +43,7 @@ kl = 4;// for n 1, 3 steps of increase in n } if(flag==0) printf( All n tests pass\n); + return 0; } #define NS 12 int isamax(int n, float *x) @@ -55,7 +56,9 @@ vector float V7 = (vector float) (0.0,1.0,2.0,3.0); const vector float incr_4 = (vector float) (4.0,4.0,4.0,4.0); const vector float minus0 = (vector float) (-0.0,-0.0,-0.0,-0.0); - float big,xbig[4],indx[4]; + float big; + float xbig[4] __attribute__((aligned(16))); + float indx[4] __attribute__((aligned(16))); // n NS done in scalar mode if(n NS){ ibig = 0; ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41978 - /llvm/branches/release_21/test/CodeGen/PowerPC/fabs.ll
Author: tbrethou Date: Fri Sep 14 23:47:06 2007 New Revision: 41978 URL: http://llvm.org/viewvc/llvm-project?rev=41978view=rev Log: Merge from mainline to fix make check error on x86. Modified: llvm/branches/release_21/test/CodeGen/PowerPC/fabs.ll Modified: llvm/branches/release_21/test/CodeGen/PowerPC/fabs.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_21/test/CodeGen/PowerPC/fabs.ll?rev=41978r1=41977r2=41978view=diff == --- llvm/branches/release_21/test/CodeGen/PowerPC/fabs.ll (original) +++ llvm/branches/release_21/test/CodeGen/PowerPC/fabs.ll Fri Sep 14 23:47:06 2007 @@ -1,4 +1,4 @@ -; RUN: llvm-as %s | llc -march=ppc32 | grep {fabs f1, f1} +; RUN: llvm-as %s | llc -march=ppc32 -mtriple=powerpc-apple-darwin | grep {fabs f1, f1} define double @fabs(double %f) { entry: ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r41979 - /llvm/trunk/test/CFrontend/2007-09-14-NegatePointer.c
Author: lattner Date: Sat Sep 15 00:46:41 2007 New Revision: 41979 URL: http://llvm.org/viewvc/llvm-project?rev=41979view=rev Log: New testcase for PR1662. GCC trees are horrible :( Added: llvm/trunk/test/CFrontend/2007-09-14-NegatePointer.c Added: llvm/trunk/test/CFrontend/2007-09-14-NegatePointer.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CFrontend/2007-09-14-NegatePointer.c?rev=41979view=auto == --- llvm/trunk/test/CFrontend/2007-09-14-NegatePointer.c (added) +++ llvm/trunk/test/CFrontend/2007-09-14-NegatePointer.c Sat Sep 15 00:46:41 2007 @@ -0,0 +1,7 @@ +// RUN: %llvmgcc -S %s -o - +// PR1662 + +int foo(unsigned char *test) { + return 0U - (unsigned int )test; +} + ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm-gcc-4.0] r41980 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
Author: lattner Date: Sat Sep 15 00:47:04 2007 New Revision: 41980 URL: http://llvm.org/viewvc/llvm-project?rev=41980view=rev Log: Fix PR1662 by handling pointer NEGATE_EXPR. Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=41980r1=41979r2=41980view=diff == --- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Sat Sep 15 00:47:04 2007 @@ -3156,8 +3156,17 @@ } Value *TreeToLLVM::EmitNEGATE_EXPR(tree exp, Value *DestLoc) { - if (!DestLoc) -return Builder.CreateNeg(Emit(TREE_OPERAND(exp, 0), 0), tmp); + if (!DestLoc) { +Value *V = Emit(TREE_OPERAND(exp, 0), 0); +if (!isaPointerType(V-getType())) + return Builder.CreateNeg(V, tmp); + +// GCC allows NEGATE_EXPR on pointers as well. Cast to int, negate, cast +// back. +V = CastToAnyType(V, false, TD.getIntPtrType(), false); +V = Builder.CreateNeg(V, tmp); +return CastToType(Instruction::IntToPtr, V, ConvertType(TREE_TYPE(exp))); + } // Emit the operand to a temporary. const Type *ComplexTy=castPointerType(DestLoc-getType())-getElementType(); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm-gcc-4.2] r41981 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Author: lattner Date: Sat Sep 15 00:47:38 2007 New Revision: 41981 URL: http://llvm.org/viewvc/llvm-project?rev=41981view=rev Log: Fix PR1662 by handling pointer negate_expr. Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=41981r1=41980r2=41981view=diff == --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Sat Sep 15 00:47:38 2007 @@ -2683,8 +2683,17 @@ } Value *TreeToLLVM::EmitNEGATE_EXPR(tree exp, Value *DestLoc) { - if (!DestLoc) -return Builder.CreateNeg(Emit(TREE_OPERAND(exp, 0), 0), tmp); + if (!DestLoc) { +Value *V = Emit(TREE_OPERAND(exp, 0), 0); +if (!isaPointerType(V-getType())) + return Builder.CreateNeg(V, tmp); + +// GCC allows NEGATE_EXPR on pointers as well. Cast to int, negate, cast +// back. +V = CastToAnyType(V, false, TD.getIntPtrType(), false); +V = Builder.CreateNeg(V, tmp); +return CastToType(Instruction::IntToPtr, V, ConvertType(TREE_TYPE(exp))); + } // Emit the operand to a temporary. const Type *ComplexTy=castPointerType(DestLoc-getType())-getElementType(); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits