[llvm-commits] [llvm] r46251 - /llvm/trunk/include/llvm/Support/Compiler.h
Author: asl Date: Tue Jan 22 05:01:23 2008 New Revision: 46251 URL: http://llvm.org/viewvc/llvm-project?rev=46251&view=rev Log: Silence a warning. Should we turn this into configure-time check? Modified: llvm/trunk/include/llvm/Support/Compiler.h Modified: llvm/trunk/include/llvm/Support/Compiler.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Compiler.h?rev=46251&r1=46250&r2=46251&view=diff == --- llvm/trunk/include/llvm/Support/Compiler.h (original) +++ llvm/trunk/include/llvm/Support/Compiler.h Tue Jan 22 05:01:23 2008 @@ -17,7 +17,7 @@ // The VISIBILITY_HIDDEN macro, used for marking classes with the GCC-specific // visibility("hidden") attribute. -#if __GNUC__ >= 4 +#if (__GNUC__ >= 4) && !defined(__MINGW32__) #define VISIBILITY_HIDDEN __attribute__ ((visibility("hidden"))) #else #define VISIBILITY_HIDDEN ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r46250 - /llvm/trunk/utils/TableGen/Record.h
Author: asl Date: Tue Jan 22 05:00:07 2008 New Revision: 46250 URL: http://llvm.org/viewvc/llvm-project?rev=46250&view=rev Log: Add interator interface to DAGInit also Modified: llvm/trunk/utils/TableGen/Record.h Modified: llvm/trunk/utils/TableGen/Record.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/Record.h?rev=46250&r1=46249&r2=46250&view=diff == --- llvm/trunk/utils/TableGen/Record.h (original) +++ llvm/trunk/utils/TableGen/Record.h Tue Jan 22 05:00:07 2008 @@ -898,6 +898,28 @@ virtual Init *resolveReferences(Record &R, const RecordVal *RV); virtual std::string getAsString() const; + + typedef std::vector::iterator arg_iterator; + typedef std::vector::const_iterator const_arg_iterator; + typedef std::vector::iterator name_iterator; + typedef std::vector::const_iterator const_name_iterator; + + inline arg_iteratorarg_begin() { return Args.begin(); } + inline const_arg_iterator arg_begin() const { return Args.begin(); } + inline arg_iteratorarg_end () { return Args.end(); } + inline const_arg_iterator arg_end () const { return Args.end(); } + + inline size_t arg_size () const { return Args.size(); } + inline boolarg_empty() const { return Args.empty(); } + + inline name_iterator name_begin() { return ArgNames.begin(); } + inline const_name_iterator name_begin() const { return ArgNames.begin(); } + inline name_iterator name_end () { return ArgNames.end(); } + inline const_name_iterator name_end () const { return ArgNames.end(); } + + inline size_t name_size () const { return ArgNames.size(); } + inline boolname_empty() const { return ArgNames.empty(); } + }; //===--===// ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] [llvm] r46251 - /llvm/trunk/include/llvm/Support/Compiler.h
On Jan 22, 2008, at 3:01 AM, Anton Korobeynikov wrote: > Silence a warning. Should we turn this into configure-time check? Probably. There's a custom one in gcc already (gcc/configure.ac). -eric ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] a question about type conversion propagation and elimination
I am a newbie to LLVM, so I have to say sorry if I asked the question in the wrong place. In some cases when I generate LLVM IR from machine assembly(with limited type information) I have to convert the pointers to I32, after the standard mem2reg pass there still are things like: inttoptr i32 %1 to i8* While in fact this can be replaced by the I8* operations, because the I8* can be unsigned compared, and get rid of the redundant Instrs, Is there any pass can do this, or is there any tricks to avoid these redundant conversions while retain the meaning of the program? define i8* @tag_on(i8* %ptr, i8* %end, i8 %tag) { Entry: ptrtoint i8* %end to i32; :0 [#uses=2] ptrtoint i8* %ptr to i32; :1 [#uses=4] icmp ugt i32 %0, %1 ; :2 [#uses=1] br i1 %2, label %B1, label %B2 B1: ; preds = %Entry inttoptr i32 %1 to i8* ; :3 [#uses=1] store i8 1, i8* %3 add i32 %1, 1 ; :4 [#uses=1] br label %B2 B2: ; preds = %Entry, %B1 %eax.0 = phi i32 [ %4, %B1 ], [ %1, %Entry ]; [#uses=4] icmp ugt i32 %0, %eax.0 ; :5 [#uses=1] br i1 %5, label %B3, label %exit B3: ; preds = %B2 inttoptr i32 %eax.0 to i8* ; :6 [#uses=1] store i8 1, i8* %6 add i32 %eax.0, 1 ; :7 [#uses=1] br label %exit exit: ; preds = %B2, %B3 %eax.1 = phi i32 [ %7, %B3 ], [ %eax.0, %B2 ] ; [#uses=1] inttoptr i32 %eax.1 to i8* ; :8 [#uses=1] ret i8* %8 } humeafo 2008-01-22 ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] a question about type conversion propagation and elimination
On Jan 22, 2008, at 2:10 AM, humeafo wrote: I am a newbie to LLVM, so I have to say sorry if I asked the question in the wrong place. In some cases when I generate LLVM IR from machine assembly(with limited type information) I have to convert the pointers to I32, after the standard mem2reg pass there still are things like: inttoptr i32 %1 to i8* While in fact this can be replaced by the I8* operations, because the I8* can be unsigned compared, and get rid of the redundant Instrs, Is there any pass can do this, or is there any tricks to avoid these redundant conversions while retain the meaning of the program? Sure, the instcombine pass will do this. Make sure to add the correct target data string though. For example, if I add the datalayout string for x86-32 darwin: target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32- i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64- f80:128:128" Instcombine produces: define i8* @tag_on(i8* %ptr, i8* %end, i8 %tag) { Entry: icmp ugt i8* %end, %ptr ; :0 [#uses=1] br i1 %0, label %B1, label %B2 B1: ; preds = %Entry store i8 1, i8* %ptr %ctg2 = getelementptr i8* %ptr, i32 1 ; [#uses=1] br label %B2 B2: ; preds = %B1, %Entry %eax.0.in = phi i8* [ %ctg2, %B1 ], [ %ptr, %Entry ]; [#uses=4] icmp ult i8* %eax.0.in, %end; :1 [#uses=1] br i1 %1, label %B3, label %exit B3: ; preds = %B2 store i8 1, i8* %eax.0.in %ctg21 = getelementptr i8* %eax.0.in, i32 1 ; [#uses=1] br label %exit exit: ; preds = %B3, %B2 %eax.1.in = phi i8* [ %ctg21, %B3 ], [ %eax.0.in, %B2 ] ; [#uses=1] ret i8* %eax.1.in } Note that it eliminated all the ptrtoint casts (in this case) and infered some getelementptrs. I'm sending this to the llvmdev list, which is a better place for high- level questions than llvm-commits. -Chris define i8* @tag_on(i8* %ptr, i8* %end, i8 %tag) { Entry: ptrtoint i8* %end to i32; :0 [#uses=2] ptrtoint i8* %ptr to i32; :1 [#uses=4] icmp ugt i32 %0, %1 ; :2 [#uses=1] br i1 %2, label %B1, label %B2 B1: ; preds = %Entry inttoptr i32 %1 to i8* ; :3 [#uses=1] store i8 1, i8* %3 add i32 %1, 1 ; :4 [#uses=1] br label %B2 B2: ; preds = %Entry, %B1 %eax.0 = phi i32 [ %4, %B1 ], [ %1, %Entry ]; [#uses=4] icmp ugt i32 %0, %eax.0 ; :5 [#uses=1] br i1 %5, label %B3, label %exit B3: ; preds = %B2 inttoptr i32 %eax.0 to i8* ; :6 [#uses=1] store i8 1, i8* %6 add i32 %eax.0, 1 ; :7 [#uses=1] br label %exit exit: ; preds = %B2, %B3 %eax.1 = phi i32 [ %7, %B3 ], [ %eax.0, %B2 ] ; [#uses=1] inttoptr i32 %eax.1 to i8* ; :8 [#uses=1] ret i8* %8 } humeafo 2008-01-22 ___ 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] r46254 - /llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
Author: lattner Date: Tue Jan 22 13:09:33 2008 New Revision: 46254 URL: http://llvm.org/viewvc/llvm-project?rev=46254&view=rev Log: Simplify SelectionDAG::getNode so that a big switch stmt is not #ifndef NDEBUG. This is in response to a really nasty bug I introduced that Dale tracked down, hopefully this won't happen in the future. Many thanks Dale. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=46254&r1=46253&r2=46254&view=diff == --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Tue Jan 22 13:09:33 2008 @@ -1859,15 +1859,34 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT, SDOperand N1, SDOperand N2) { -#ifndef NDEBUG + ConstantSDNode *N1C = dyn_cast(N1.Val); + ConstantSDNode *N2C = dyn_cast(N2.Val); switch (Opcode) { + default: break; case ISD::TokenFactor: assert(VT == MVT::Other && N1.getValueType() == MVT::Other && N2.getValueType() == MVT::Other && "Invalid token factor!"); +// Fold trivial token factors. +if (N1.getOpcode() == ISD::EntryToken) return N2; +if (N2.getOpcode() == ISD::EntryToken) return N1; break; case ISD::AND: +assert(MVT::isInteger(VT) && N1.getValueType() == N2.getValueType() && + N1.getValueType() == VT && "Binary operator types must match!"); +// (X & 0) -> 0. This commonly occurs when legalizing i64 values, so it's +// worth handling here. +if (N2C && N2C->getValue() == 0) + return N2; +break; case ISD::OR: case ISD::XOR: +assert(MVT::isInteger(VT) && N1.getValueType() == N2.getValueType() && + N1.getValueType() == VT && "Binary operator types must match!"); +// (X ^| 0) -> X. This commonly occurs when legalizing i64 values, so it's +// worth handling here. +if (N2C && N2C->getValue() == 0) + return N1; +break; case ISD::UDIV: case ISD::UREM: case ISD::MULHU: @@ -1879,8 +1898,6 @@ case ISD::MUL: case ISD::SDIV: case ISD::SREM: -assert(MVT::isInteger(N1.getValueType()) && "Should use F* for FP ops"); -// fall through. case ISD::FADD: case ISD::FSUB: case ISD::FMUL: @@ -1912,6 +1929,7 @@ "Cannot FP_ROUND_INREG integer types"); assert(MVT::getSizeInBits(EVT) <= MVT::getSizeInBits(VT) && "Not rounding down!"); +if (cast(N2)->getVT() == VT) return N1; // Not actually rounding. break; } case ISD::FP_ROUND: @@ -1919,33 +1937,83 @@ MVT::isFloatingPoint(N1.getValueType()) && MVT::getSizeInBits(VT) <= MVT::getSizeInBits(N1.getValueType()) && isa(N2) && "Invalid FP_ROUND!"); +if (N1.getValueType() == VT) return N1; // noop conversion. break; case ISD::AssertSext: - case ISD::AssertZext: - case ISD::SIGN_EXTEND_INREG: { + case ISD::AssertZext: { MVT::ValueType EVT = cast(N2)->getVT(); assert(VT == N1.getValueType() && "Not an inreg extend!"); assert(MVT::isInteger(VT) && MVT::isInteger(EVT) && "Cannot *_EXTEND_INREG FP types"); assert(MVT::getSizeInBits(EVT) <= MVT::getSizeInBits(VT) && "Not extending!"); +break; } + case ISD::SIGN_EXTEND_INREG: { +MVT::ValueType EVT = cast(N2)->getVT(); +assert(VT == N1.getValueType() && "Not an inreg extend!"); +assert(MVT::isInteger(VT) && MVT::isInteger(EVT) && + "Cannot *_EXTEND_INREG FP types"); +assert(MVT::getSizeInBits(EVT) <= MVT::getSizeInBits(VT) && + "Not extending!"); +if (EVT == VT) return N1; // Not actually extending - default: break; - } -#endif - - ConstantSDNode *N1C = dyn_cast(N1.Val); - ConstantSDNode *N2C = dyn_cast(N2.Val); - if (N1C) { -if (Opcode == ISD::SIGN_EXTEND_INREG) { +if (N1C) { int64_t Val = N1C->getValue(); unsigned FromBits = MVT::getSizeInBits(cast(N2)->getVT()); Val <<= 64-FromBits; Val >>= 64-FromBits; return getConstant(Val, VT); } +break; + } + case ISD::EXTRACT_VECTOR_ELT: +assert(N2C && "Bad EXTRACT_VECTOR_ELT!"); + +// EXTRACT_VECTOR_ELT of CONCAT_VECTORS is often formed while lowering is +// expanding copies of large vectors from registers. +if (N1.getOpcode() == ISD::CONCAT_VECTORS && +N1.getNumOperands() > 0) { + unsigned Factor = +MVT::getVectorNumElements(N1.getOperand(0).getValueType()); + return getNode(ISD::EXTRACT_VECTOR_ELT, VT, + N1.getOperand(N2C->getValue() / Factor), + getConstant(N2C->getValue() % Factor, N2.getValueType())); +} + +// EXTRACT_VECTOR_ELT of BUILD_VECTOR is often formed while lowering is +// exp
Re: [llvm-commits] [llvm] r46220 - /llvm/trunk/test/CFrontend/2008-01-21-PackedStructField.c
This fails with llvm-gcc-4.0, darwin 8, x86. ../../src/gcc/llvm-types.cpp:82: failed assertion `(!TYPE_SIZE(Tr) || !Ty->isSized() || !isInt64(TYPE_SIZE(Tr), true) || getInt64 (TYPE_SIZE(Tr), true) == getTargetData().getABITypeSizeInBits(Ty)) && "LLVM type size doesn't match GCC type size!"' 2008-01-21-PackedBitFields.c is also failing for me. -Tanya On Jan 21, 2008, at 2:15 PM, Devang Patel wrote: > Author: dpatel > Date: Mon Jan 21 16:15:58 2008 > New Revision: 46220 > > URL: http://llvm.org/viewvc/llvm-project?rev=46220&view=rev > Log: > New test. > > Added: > llvm/trunk/test/CFrontend/2008-01-21-PackedStructField.c > > Added: llvm/trunk/test/CFrontend/2008-01-21-PackedStructField.c > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CFrontend/ > 2008-01-21-PackedStructField.c?rev=46220&view=auto > > == > > --- llvm/trunk/test/CFrontend/2008-01-21-PackedStructField.c (added) > +++ llvm/trunk/test/CFrontend/2008-01-21-PackedStructField.c Mon > Jan 21 16:15:58 2008 > @@ -0,0 +1,5 @@ > +// RUN: %llvmgcc %s -S -o - > + > +struct X { long double b; unsigned char c; double __attribute__ > ((packed)) d; }; > +struct X x = { 3.0L, 5, 3.0 }; > + > > > ___ > 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-gcc-4.2] r46261 - /llvm-gcc-4.2/trunk/gcc/objc/objc-act.c
Author: void Date: Tue Jan 22 17:06:58 2008 New Revision: 46261 URL: http://llvm.org/viewvc/llvm-project?rev=46261&view=rev Log: We were getting this error: embedding a directive within macro arguments is not portable build_tree_list is a macro... Modified: llvm-gcc-4.2/trunk/gcc/objc/objc-act.c Modified: llvm-gcc-4.2/trunk/gcc/objc/objc-act.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/objc/objc-act.c?rev=46261&r1=46260&r2=46261&view=diff == --- llvm-gcc-4.2/trunk/gcc/objc/objc-act.c (original) +++ llvm-gcc-4.2/trunk/gcc/objc/objc-act.c Tue Jan 22 17:06:58 2008 @@ -10867,14 +10867,14 @@ /* LLVM LOCAL begin make initializer size match type size */ /* APPLE LOCAL ObjC new abi */ - initlist = build_tree_list (NULL_TREE, build_int_cst ( #ifdef OBJCPLUS - NULL_TREE, + initlist = build_tree_list (NULL_TREE, + build_int_cst (NULL_TREE, init_val)); #else - newabi ? NULL_TREE : ptr_type_node, + initlist = build_tree_list (NULL_TREE, + build_int_cst (newabi ? NULL_TREE : ptr_type_node, +init_val)); #endif - -init_val)); /* LLVM LOCAL end */ initlist = tree_cons (NULL_TREE, build_int_cst (NULL_TREE, size), initlist); initlist = tree_cons (NULL_TREE, list, initlist); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r46262 - in /llvm/trunk: lib/Target/X86/X86CallingConv.td test/CodeGen/X86/sse-varargs.ll
Author: evancheng Date: Tue Jan 22 17:26:53 2008 New Revision: 46262 URL: http://llvm.org/viewvc/llvm-project?rev=46262&view=rev Log: SSE varargs arguments are passed in memory. Added: llvm/trunk/test/CodeGen/X86/sse-varargs.ll Modified: llvm/trunk/lib/Target/X86/X86CallingConv.td Modified: llvm/trunk/lib/Target/X86/X86CallingConv.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86CallingConv.td?rev=46262&r1=46261&r2=46262&view=diff == --- llvm/trunk/lib/Target/X86/X86CallingConv.td (original) +++ llvm/trunk/lib/Target/X86/X86CallingConv.td Tue Jan 22 17:26:53 2008 @@ -190,8 +190,8 @@ CCIfType<[f80], CCAssignToStack<0, 4>>, // The first 4 vector arguments are passed in XMM registers. - CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], - CCAssignToReg<[XMM0, XMM1, XMM2, XMM3]>>, + CCIfNotVarArg>>, // Other vectors get 16-byte stack slots that are 16-byte aligned. CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToStack<16, 16>>, Added: llvm/trunk/test/CodeGen/X86/sse-varargs.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/sse-varargs.ll?rev=46262&view=auto == --- llvm/trunk/test/CodeGen/X86/sse-varargs.ll (added) +++ llvm/trunk/test/CodeGen/X86/sse-varargs.ll Tue Jan 22 17:26:53 2008 @@ -0,0 +1,9 @@ +; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep xmm | grep esp + +define i32 @t() nounwind { +entry: + tail call void (i32, ...)* @foo( i32 1, <4 x i32> < i32 10, i32 11, i32 12, i32 13 > ) nounwind + ret i32 0 +} + +declare void @foo(i32, ...) ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r46263 - /llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp
Author: resistor Date: Tue Jan 22 17:58:54 2008 New Revision: 46263 URL: http://llvm.org/viewvc/llvm-project?rev=46263&view=rev Log: Fix an iterator invalidation issue. Modified: llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp Modified: llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp?rev=46263&r1=46262&r2=46263&view=diff == --- llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp (original) +++ llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp Tue Jan 22 17:58:54 2008 @@ -751,11 +751,17 @@ // FIXME: Insert last-minute copies // Remove PHIs - for (MachineFunction::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) + std::vector phis; + for (MachineFunction::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) { for (MachineBasicBlock::iterator BI = I->begin(), BE = I->end(); BI != BE; ++BI) if (BI->getOpcode() == TargetInstrInfo::PHI) -BI->eraseFromParent(); +phis.push_back(BI); + } + + for (std::vector::iterator I = phis.begin(), E = phis.end(); + I != E; ++I) +(*I)->eraseFromParent(); return false; } ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm-gcc-4.0] r46264 - in /llvm-gcc-4.0/trunk/gcc: llvm-internal.h llvm-types.cpp
Author: dpatel Date: Tue Jan 22 18:07:02 2008 New Revision: 46264 URL: http://llvm.org/viewvc/llvm-project?rev=46264&view=rev Log: Backport patches(r46210 and r46212) from llvm-gcc-4.2 Modified: llvm-gcc-4.0/trunk/gcc/llvm-internal.h llvm-gcc-4.0/trunk/gcc/llvm-types.cpp Modified: llvm-gcc-4.0/trunk/gcc/llvm-internal.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-internal.h?rev=46264&r1=46263&r2=46264&view=diff == --- llvm-gcc-4.0/trunk/gcc/llvm-internal.h (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-internal.h Tue Jan 22 18:07:02 2008 @@ -157,7 +157,7 @@ private: const Type *ConvertRECORD(tree_node *type, tree_node *orig_type); const Type *ConvertUNION(tree_node *type, tree_node *orig_type); - void DecodeStructFields(tree_node *Field, StructTypeConversionInfo &Info); + bool DecodeStructFields(tree_node *Field, StructTypeConversionInfo &Info); void DecodeStructBitField(tree_node *Field, StructTypeConversionInfo &Info); }; 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=46264&r1=46263&r2=46264&view=diff == --- llvm-gcc-4.0/trunk/gcc/llvm-types.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-types.cpp Tue Jan 22 18:07:02 2008 @@ -1180,6 +1180,8 @@ ExtraBitsAvailable = E; } + bool isPacked() { return Packed; } + void markAsPacked() { Packed = true; } @@ -1427,37 +1429,9 @@ void addNewBitField(unsigned Size, unsigned FirstUnallocatedByte); - void convertToPacked(); - void dump() const; }; -// LLVM disagrees as to where to put field natural field ordering. -// ordering. Therefore convert to a packed struct. -void StructTypeConversionInfo::convertToPacked() { - assert (!Packed && "Packing a packed struct!"); - Packed = true; - - // Fill the padding that existed from alignment restrictions - // with byte arrays to ensure the same layout when converting - // to a packed struct. - for (unsigned x = 1; x < ElementOffsetInBytes.size(); ++x) { -if (ElementOffsetInBytes[x-1] + ElementSizeInBytes[x-1] -< ElementOffsetInBytes[x]) { - uint64_t padding = ElementOffsetInBytes[x] -- ElementOffsetInBytes[x-1] - ElementSizeInBytes[x-1]; - const Type *Pad = Type::Int8Ty; - Pad = ArrayType::get(Pad, padding); - ElementOffsetInBytes.insert(ElementOffsetInBytes.begin() + x, - ElementOffsetInBytes[x-1] + - ElementSizeInBytes[x-1]); - ElementSizeInBytes.insert(ElementSizeInBytes.begin() + x, padding); - Elements.insert(Elements.begin() + x, Pad); - PaddingElement.insert(PaddingElement.begin() + x, true); -} - } -} - // Add new element which is a bit field. Size is not the size of bit filed, // but size of bits required to determine type of new Field which will be // used to access this bit field. @@ -1545,17 +1519,18 @@ /// DecodeStructFields - This method decodes the specified field, if it is a /// FIELD_DECL, adding or updating the specified StructTypeConversionInfo to -/// reflect it. -void TypeConverter::DecodeStructFields(tree Field, +/// reflect it. Return tree if field is decode correctly. Otherwise return +/// false. +bool TypeConverter::DecodeStructFields(tree Field, StructTypeConversionInfo &Info) { if (TREE_CODE(Field) != FIELD_DECL || TREE_CODE(DECL_FIELD_OFFSET(Field)) != INTEGER_CST) -return; +return true; // Handle bit-fields specially. if (DECL_BIT_FIELD_TYPE(Field)) { DecodeStructBitField(Field, Info); -return; +return true; } Info.allFieldsAreNotBitFields(); @@ -1573,12 +1548,19 @@ if (!Info.ResizeLastElementIfOverlapsWith(StartOffsetInBytes, Field, Ty)) { // LLVM disagrees as to where this field should go in the natural field // ordering. Therefore convert to a packed struct and try again. -Info.convertToPacked(); -DecodeStructFields(Field, Info); +return false; + } + else if (TYPE_USER_ALIGN(TREE_TYPE(Field)) + && DECL_ALIGN_UNIT(Field) != Info.getTypeAlignment(Ty) + && !Info.isPacked()) { +// If Field has user defined alignment and it does not match Ty alignment +// then convert to a packed struct and try again. +return false; } else // At this point, we know that adding the element will happen at the right // offset. Add it. Info.addElement(Ty, StartOffsetInBytes, Info.getTypeSize(Ty)); + return true; } /// DecodeStructBitField - This method decodes the specified bit-field, adding @@ -1735,8 +1717,24 @@ // Convert over all of the elements of the struct. - for (tree Field = TYPE_FIELDS(type); Field; Field = TREE_CHAIN(Field)) -DecodeStru
[llvm-commits] [llvm-gcc-4.2] r46265 - /llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
Author: johannes Date: Tue Jan 22 18:48:04 2008 New Revision: 46265 URL: http://llvm.org/viewvc/llvm-project?rev=46265&view=rev Log: Fix handling of CONST_DECL with section information. Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=46265&r1=46264&r2=46265&view=diff == --- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Tue Jan 22 18:48:04 2008 @@ -919,15 +919,6 @@ GV->setSection(Section); #endif } -#ifdef LLVM_IMPLICIT_TARGET_GLOBAL_VAR_SECTION -else if (TREE_CODE(decl) == CONST_DECL) { - if (const char *Section = - LLVM_IMPLICIT_TARGET_GLOBAL_VAR_SECTION(decl)) { -GV->setSection(Section); - } -} -#endif - // Set the alignment for the global if one of the following condition is met // 1) DECL_ALIGN_UNIT does not match alignment as per ABI specification @@ -947,8 +938,16 @@ // Add annotate attributes for globals if (DECL_ATTRIBUTES(decl)) AddAnnotateAttrsToGlobal(GV, decl); - } +#ifdef LLVM_IMPLICIT_TARGET_GLOBAL_VAR_SECTION + } else if (TREE_CODE(decl) == CONST_DECL) { +if (const char *Section = +LLVM_IMPLICIT_TARGET_GLOBAL_VAR_SECTION(decl)) { + GV->setSection(Section); +} +#endif + } + if (TheDebugInfo) TheDebugInfo->EmitGlobalVariable(GV, decl); TREE_ASM_WRITTEN(decl) = 1; ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm-gcc-4.2] r46266 - /llvm-gcc-4.2/trunk/gcc/config/darwin.c
Author: johannes Date: Tue Jan 22 18:48:48 2008 New Revision: 46266 URL: http://llvm.org/viewvc/llvm-project?rev=46266&view=rev Log: Cosmetic changes to placate gcc testsuite. Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.c Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/darwin.c?rev=46266&r1=46265&r2=46266&view=diff == --- llvm-gcc-4.2/trunk/gcc/config/darwin.c (original) +++ llvm-gcc-4.2/trunk/gcc/config/darwin.c Tue Jan 22 18:48:48 2008 @@ -1527,11 +1527,11 @@ if (!strcmp(IDENTIFIER_POINTER(typename), "__builtin_ObjCString")) { if (flag_next_runtime) -return "__OBJC,__cstring_object,regular,no_dead_strip"; +return "__OBJC, __cstring_object,regular,no_dead_strip"; else -return "__OBJC,__string_object,no_dead_strip"; +return "__OBJC, __string_object,no_dead_strip"; } else if (!strcmp(IDENTIFIER_POINTER(typename), "__builtin_CFString")) { - return "__DATA,__cfstring"; + return "__DATA, __cfstring"; } else { return 0; } @@ -1580,7 +1580,7 @@ return "__OBJC,__module_info,regular,no_dead_strip"; else if (!strncmp (name, "IMAGE_INFO", 10)) return (flag_objc_abi == 1 ? -"__OBJC,__image_info,regular" /*,no_dead_strip";*/ : +"__OBJC, __image_info,regular" /*,no_dead_strip";*/ : "__DATA, __objc_imageinfo, regular, no_dead_strip"); else if (!strncmp (name, "PROTOCOL_INSTANCE_METHODS_", 26)) return "__OBJC,__cat_inst_meth,regular,no_dead_strip"; ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r46267 - in /llvm/trunk/lib/Target: ARM/ARMAsmPrinter.cpp PowerPC/PPCAsmPrinter.cpp X86/X86AsmPrinter.cpp
Author: johannes Date: Tue Jan 22 18:58:14 2008 New Revision: 46267 URL: http://llvm.org/viewvc/llvm-project?rev=46267&view=rev Log: Honor explicit section information on Darwin. Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=46267&r1=46266&r2=46267&view=diff == --- llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp Tue Jan 22 18:58:14 2008 @@ -908,6 +908,10 @@ std::string SectionName = ".section " + I->getSection(); SectionName += ",\"aw\",%progbits"; SwitchToDataSection(SectionName.c_str()); + } else if (I->hasSection() && Subtarget->isTargetDarwin()) { +// Honor all section names on Darwin; ObjC uses this +std::string SectionName = ".section " + I->getSection(); +SwitchToDataSection(SectionName.c_str()); } else { if (C->isNullValue() && !NoZerosInBSS && TAI->getBSSSection()) SwitchToDataSection(I->isThreadLocal() ? TAI->getTLSBSSSection() : Modified: llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp?rev=46267&r1=46266&r2=46267&view=diff == --- llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp Tue Jan 22 18:58:14 2008 @@ -958,8 +958,11 @@ break; } } - -if (!I->isConstant()) +if (I->hasSection()) { + // Honor all section names on Darwin; ObjC uses this + std::string SectionName = ".section " + I->getSection(); + SwitchToDataSection(SectionName.c_str()); +} else if (!I->isConstant()) SwitchToDataSection(TAI->getDataSection(), I); else { // Read-only data. Modified: llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp?rev=46267&r1=46266&r2=46267&view=diff == --- llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp Tue Jan 22 18:58:14 2008 @@ -275,7 +275,10 @@ assert(!Subtarget->isTargetDarwin()); SectionName += ",\"aw\",@progbits"; } - +SwitchToDataSection(SectionName.c_str()); + } else if (I->hasSection() && Subtarget->isTargetDarwin()) { +// Honor all section names on Darwin; ObjC uses this +std::string SectionName = ".section " + I->getSection(); SwitchToDataSection(SectionName.c_str()); } else { if (C->isNullValue() && !NoZerosInBSS && TAI->getBSSSection()) ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm-gcc-4.2] r46269 - in /llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg: const-cfstring-4-64bit.mm const-cfstring-4.mm const-str-10.mm const-str-11.mm const-str-9.mm objc-gc-section-1.m
Author: johannes Date: Tue Jan 22 19:40:15 2008 New Revision: 46269 URL: http://llvm.org/viewvc/llvm-project?rev=46269&view=rev Log: Enhance some more tests to take functionally equivalent llvm syntax. Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4-64bit.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-10.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-11.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-9.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/objc-gc-section-1.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/objc-gc-section-2.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/objc2-protocol-ext-1.mm Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4-64bit.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/const-cfstring-4-64bit.mm?rev=46269&r1=46268&r2=46269&view=diff == --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4-64bit.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4-64bit.mm Tue Jan 22 19:40:15 2008 @@ -8,4 +8,5 @@ CFStringRef appKey = (CFStringRef) @"com.apple.soundpref"; /* { dg-final { scan-assembler ".section __DATA, __cfstring" } } */ -/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t19\n\t.data" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space( |\t)4\n\t.quad\t.*\n\t.quad\t19\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/const-cfstring-4.mm?rev=46269&r1=46268&r2=46269&view=diff == --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4.mm Tue Jan 22 19:40:15 2008 @@ -10,4 +10,5 @@ CFStringRef appKey = (CFStringRef) @"com.apple.soundpref"; /* { dg-final { scan-assembler ".section __DATA, __cfstring" } } */ -/* { dg-final { scan-assembler ".long\t___CFConstantStringClassReference\n\t.long\t1992\n\t.long\t.*\n\t.long\t19\n\t.data" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".long\t___CFConstantStringClassReference\n\t.long\t1992\n\t.long\t.*\n\t.long\t19\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-10.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/const-str-10.mm?rev=46269&r1=46268&r2=46269&view=diff == --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-10.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-10.mm Tue Jan 22 19:40:15 2008 @@ -31,4 +31,5 @@ const NSConstantString *appKey = @"MyApp"; /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ -/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-11.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/const-str-11.mm?rev=46269&r1=46268&r2=46269&view=diff == --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-11.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-11.mm Tue Jan 22 19:40:15 2008 @@ -30,4 +30,5 @@ const XStr *appKey = @"MyApp"; /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ -/* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-9.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/const-str-9.mm?rev=46269&r1=46268&r2=46269&view=diff == --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-9.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-9.mm Tue Jan 22 19:40:15 2008 @@ -23,4 +23,5 @@ const NSConstantString *appKey = @"MyApp"; /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ -/* { dg-final { scan-assembler ".long\t__NSConstantStringCl
[llvm-commits] [llvm-gcc-4.2] r46270 - in /llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg: const-cfstring-4-64bit.m const-cfstring-4.m const-str-10-64bit.m const-str-10.m const-str-11-64bit.m const-str-11.m
Author: johannes Date: Tue Jan 22 19:42:09 2008 New Revision: 46270 URL: http://llvm.org/viewvc/llvm-project?rev=46270&view=rev Log: Yet more test enhancements to take functionally equivalent llvm syntax. Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4-64bit.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10-64bit.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11-64bit.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9-64bit.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/image-info.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc2-alignment-test-1.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc2-const-str-64bit-1.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc2-protocol-ext-1.m Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4-64bit.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4-64bit.m?rev=46270&r1=46269&r2=46270&view=diff == --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4-64bit.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4-64bit.m Tue Jan 22 19:42:09 2008 @@ -8,4 +8,5 @@ static CFStringRef appKey = (CFStringRef) @"com.apple.soundpref"; /* { dg-final { scan-assembler ".section __DATA, __cfstring" } } */ -/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t19\n\t.data" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space( |\t)4\n\t.quad\t.*\n\t.quad\t19\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4.m?rev=46270&r1=46269&r2=46270&view=diff == --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4.m Tue Jan 22 19:42:09 2008 @@ -10,4 +10,5 @@ static CFStringRef appKey = (CFStringRef) @"com.apple.soundpref"; /* { dg-final { scan-assembler ".section __DATA, __cfstring" } } */ -/* { dg-final { scan-assembler ".long\t___CFConstantStringClassReference\n\t.long\t1992\n\t.long\t.*\n\t.long\t19\n\t.data" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".long\t___CFConstantStringClassReference\n\t.long\t1992\n\t.long\t.*\n\t.long\t19\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10-64bit.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10-64bit.m?rev=46270&r1=46269&r2=46270&view=diff == --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10-64bit.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10-64bit.m Tue Jan 22 19:42:09 2008 @@ -30,4 +30,5 @@ const NSConstantString *appKey = @"MyApp"; /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ -/* { dg-final { scan-assembler ".quad\t__NSConstantStringClassReference\n\t.quad\t.*\n\t.long\t5\n\t.space 4\n\t.data" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".quad\t__NSConstantStringClassReference\n\t.quad\t.*\n\t.long\t5\n\t.space( |\t)4\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10.m?rev=46270&r1=46269&r2=46270&view=diff == --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10.m Tue Jan 22 19:42:09 2008 @@ -33,4 +33,5 @@ const NSConstantString *appKey = @"MyApp"; /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ -/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11-64bit.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11-64bit.m?rev=46270&r1=46269&r2=46270&view=diff == --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11-64bit.m (original) +++ llvm-gcc-4.2/trunk/
[llvm-commits] [llvm-gcc-4.2] r46271 - in /llvm-gcc-4.2/trunk/gcc: config/i386/i386.c toplev.c
Author: evancheng Date: Tue Jan 22 20:49:24 2008 New Revision: 46271 URL: http://llvm.org/viewvc/llvm-project?rev=46271&view=rev Log: Need to call init_regs() from backend_init() to ensure TYPE_MODE for user-defined vector types are set up correctly; remove the workaround from i386.c. Modified: llvm-gcc-4.2/trunk/gcc/config/i386/i386.c llvm-gcc-4.2/trunk/gcc/toplev.c Modified: llvm-gcc-4.2/trunk/gcc/config/i386/i386.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/i386.c?rev=46271&r1=46270&r2=46271&view=diff == --- llvm-gcc-4.2/trunk/gcc/config/i386/i386.c (original) +++ llvm-gcc-4.2/trunk/gcc/config/i386/i386.c Tue Jan 22 20:49:24 2008 @@ -3270,16 +3270,9 @@ int offset = tree_low_cst (BINFO_OFFSET (base_binfo), 0) * 8; tree type = BINFO_TYPE (base_binfo); -/* LLVM local */ -#ifdef ENABLE_LLVM - num = classify_argument (type_natural_mode (type), - type, subclasses, - (offset + bit_offset) % 256); -#else num = classify_argument (TYPE_MODE (type), type, subclasses, (offset + bit_offset) % 256); -#endif if (!num) return 0; for (i = 0; i < num; i++) @@ -3315,18 +3308,10 @@ } else { -/* LLVM local */ -#ifdef ENABLE_LLVM - num = classify_argument (type_natural_mode (TREE_TYPE (field)), - TREE_TYPE (field), subclasses, - (int_bit_position (field) - + bit_offset) % 256); -#else num = classify_argument (TYPE_MODE (TREE_TYPE (field)), TREE_TYPE (field), subclasses, (int_bit_position (field) + bit_offset) % 256); -#endif if (!num) return 0; for (i = 0; i < num; i++) @@ -3345,14 +3330,8 @@ /* Arrays are handled as small records. */ { int num; -/* LLVM local */ -#ifdef ENABLE_LLVM - num = classify_argument (type_natural_mode (TREE_TYPE (type)), -TREE_TYPE (type), subclasses, bit_offset); -#else num = classify_argument (TYPE_MODE (TREE_TYPE (type)), TREE_TYPE (type), subclasses, bit_offset); -#endif if (!num) return 0; @@ -3384,16 +3363,9 @@ if (TREE_TYPE (field) == error_mark_node) continue; -/* LLVM local */ -#ifdef ENABLE_LLVM - num = classify_argument (type_natural_mode (TREE_TYPE (field)), - TREE_TYPE (field), subclasses, - bit_offset); -#else num = classify_argument (TYPE_MODE (TREE_TYPE (field)), TREE_TYPE (field), subclasses, bit_offset); -#endif if (!num) return 0; for (i = 0; i < num; i++) Modified: llvm-gcc-4.2/trunk/gcc/toplev.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/toplev.c?rev=46271&r1=46270&r2=46271&view=diff == --- llvm-gcc-4.2/trunk/gcc/toplev.c (original) +++ llvm-gcc-4.2/trunk/gcc/toplev.c Tue Jan 22 20:49:24 2008 @@ -2052,6 +2052,9 @@ /* LLVM LOCAL begin */ #ifdef ENABLE_LLVM + /* note: stor-layout.c:layout_type() uses have_regs_of_mode[] to initialize + TYPE_MODE field for user specified vector types. */ + init_regs (); /* note: we need init_emit_once above to initialize ptr_mode and friends. */ llvm_initialize_backend(); return; ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r46272 - /llvm/branches/release_22/lib/Target/Mips/MipsRegisterInfo.cpp
Author: tbrethou Date: Tue Jan 22 21:56:34 2008 New Revision: 46272 URL: http://llvm.org/viewvc/llvm-project?rev=46272&view=rev Log: Merge from mainline. Trivial patch to fix two warnings Modified: llvm/branches/release_22/lib/Target/Mips/MipsRegisterInfo.cpp Modified: llvm/branches/release_22/lib/Target/Mips/MipsRegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_22/lib/Target/Mips/MipsRegisterInfo.cpp?rev=46272&r1=46271&r2=46272&view=diff == --- llvm/branches/release_22/lib/Target/Mips/MipsRegisterInfo.cpp (original) +++ llvm/branches/release_22/lib/Target/Mips/MipsRegisterInfo.cpp Tue Jan 22 21:56:34 2008 @@ -292,6 +292,9 @@ FPOffset = NumBytes; RAOffset = 0; NumBytes += 4; + } else { +// No calls and no fp. +RAOffset = FPOffset = 0; } MFI->setObjectOffset(MFI->CreateStackObject(4,4), FPOffset); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] [llvm] r46220 - /llvm/trunk/test/CFrontend/2008-01-21-PackedStructField.c
On Jan 22, 2008, at 3:02 PM, Tanya Lattner wrote: > This fails with llvm-gcc-4.0, darwin 8, x86. > > ../../src/gcc/llvm-types.cpp:82: failed assertion `(!TYPE_SIZE(Tr) > || !Ty->isSized() || !isInt64(TYPE_SIZE(Tr), true) || getInt64 > (TYPE_SIZE(Tr), true) == getTargetData().getABITypeSizeInBits(Ty)) && > "LLVM type size doesn't match GCC type size!"' > > 2008-01-21-PackedBitFields.c is also failing for me. Does it work with 4.2? If llvm 2.2 will be the last release that includes llvm-gcc 4.0, I don't think this is a problem. -chris > > > -Tanya > > On Jan 21, 2008, at 2:15 PM, Devang Patel wrote: > >> Author: dpatel >> Date: Mon Jan 21 16:15:58 2008 >> New Revision: 46220 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=46220&view=rev >> Log: >> New test. >> >> Added: >>llvm/trunk/test/CFrontend/2008-01-21-PackedStructField.c >> >> Added: llvm/trunk/test/CFrontend/2008-01-21-PackedStructField.c >> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CFrontend/ >> 2008-01-21-PackedStructField.c?rev=46220&view=auto >> >> = >> = >> >> --- llvm/trunk/test/CFrontend/2008-01-21-PackedStructField.c (added) >> +++ llvm/trunk/test/CFrontend/2008-01-21-PackedStructField.c Mon >> Jan 21 16:15:58 2008 >> @@ -0,0 +1,5 @@ >> +// RUN: %llvmgcc %s -S -o - >> + >> +struct X { long double b; unsigned char c; double __attribute__ >> ((packed)) d; }; >> +struct X x = { 3.0L, 5, 3.0 }; >> + >> >> >> ___ >> 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
Re: [llvm-commits] [llvm] r46187 - in /llvm/trunk: include/llvm/ADT/FoldingSet.h lib/Support/FoldingSet.cpp
On Jan 18, 2008, at 8:22 PM, Ted Kremenek wrote: > Author: kremenek > Date: Fri Jan 18 22:22:50 2008 > New Revision: 46187 > > URL: http://llvm.org/viewvc/llvm-project?rev=46187&view=rev > Log: > Made 'FoldingSetNodeID' a proper class instead of a nested class in > 'FoldingSetNodeImpl' (previously 'FoldingSetNodeID' was a typedef of > 'FoldingSetNodeImpl::NodeID'). > > Why? Clients can now easily forward declare 'FoldingSetNodeID' > without having > to include FoldingSet.h. Whoa, craziness! Thanks Ted, -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.2] r46164 - in /llvm-gcc-4.2/trunk/gcc/config/i386: llvm-i386-target.h llvm-i386.cpp
On Jan 19, 2008, at 12:47 AM, Duncan Sands wrote: >> i32 / i64 all integer structs are not passed byval. > > What about integer arrays? This is an optimization, not a correctness issue. Can you give an example that you mean? -Chris ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm-gcc-4.2] r46273 - in /llvm-gcc-4.2/branches/release_22: configure configure.in
Author: tbrethou Date: Tue Jan 22 23:47:49 2008 New Revision: 46273 URL: http://llvm.org/viewvc/llvm-project?rev=46273&view=rev Log: Disable bootstrap. Modified: llvm-gcc-4.2/branches/release_22/configure llvm-gcc-4.2/branches/release_22/configure.in Modified: llvm-gcc-4.2/branches/release_22/configure URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/release_22/configure?rev=46273&r1=46272&r2=46273&view=diff == --- llvm-gcc-4.2/branches/release_22/configure (original) +++ llvm-gcc-4.2/branches/release_22/configure Tue Jan 22 23:47:49 2008 @@ -45,7 +45,7 @@ --with-build-sysroot=sysroot use sysroot as the system root during the build" ac_help="$ac_help - --enable-bootstrap Enable bootstrapping [yes if native build]" + --enable-bootstrap Enable bootstrapping [no]" ac_help="$ac_help --enable-serial-[{host,target,build}-]configure Force sequential configuration of @@ -3172,7 +3172,7 @@ # Default behavior. Enable bootstrap if we have a compiler # and we are in a native configuration. yes:$build:$build:default) -enable_bootstrap=yes ;; +enable_bootstrap=no ;; *:*:*:default) enable_bootstrap=no ;; Modified: llvm-gcc-4.2/branches/release_22/configure.in URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/release_22/configure.in?rev=46273&r1=46272&r2=46273&view=diff == --- llvm-gcc-4.2/branches/release_22/configure.in (original) +++ llvm-gcc-4.2/branches/release_22/configure.in Tue Jan 22 23:47:49 2008 @@ -1865,7 +1865,7 @@ # not to nest @if/@endif pairs, because configure will not warn you at all. AC_ARG_ENABLE([bootstrap], -[ --enable-bootstrap Enable bootstrapping [yes if native build]],, +[ --enable-bootstrap Enable bootstrapping [no]],, enable_bootstrap=default) # Issue errors and warnings for invalid/strange bootstrap combinations. @@ -1880,7 +1880,7 @@ # Default behavior. Enable bootstrap if we have a compiler # and we are in a native configuration. yes:$build:$build:default) -enable_bootstrap=yes ;; +enable_bootstrap=no ;; *:*:*:default) enable_bootstrap=no ;; ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] [llvm-gcc-4.2] r46164 - in /l lvm-gcc-4.2/trunk/gcc/config/i386: llvm-i386-ta rget.h llvm-i386.cpp
> > What about integer arrays? > > This is an optimization, not a correctness issue. Can you give an > example that you mean? According to the x86-64 ABI, arrays of integers that are not more than 8 bytes long are passed in integer registers. Likewise for structs. So it looks like a correctness issue as well as an optimization :) CIao, Duncan. ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] [llvm-gcc-4.2] r46164 - in /llvm-gcc-4.2/trunk/gcc/config/i386: llvm-i386-target.h llvm-i386.cpp
On Jan 22, 2008, at 10:03 PM, Duncan Sands wrote: >>> What about integer arrays? >> >> This is an optimization, not a correctness issue. Can you give an >> example that you mean? > > According to the x86-64 ABI, arrays of integers that are not more > than 8 bytes long are passed in integer registers. Likewise for > structs. So it looks like a correctness issue as well as an > optimization :) Okay, well we already get many other x86-64 issues wrong already, but Evan is chipping away at it. How do you pass an array by value in C? Example please, -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.2] r46164 - in /l lvm-gcc-4.2/trunk/gcc/config/i386: llvm-i386-ta rget.h llvm-i386.cpp
> Okay, well we already get many other x86-64 issues wrong already, but > Evan is chipping away at it. How do you pass an array by value in C? > Example please, I find the x86-64 ABI hard to interpret, but it seems to say that aggregates are classified recursively, so it looks like a struct containing a small integer array should be passed in integer registers. Also, it is easy in Ada: the compiler passes small arrays by value, for example: package Arr is type ByValArray is array (1 .. 2) of Short_Integer; function PassArrayByVal (A : ByValArray) return Short_Integer; end; package body Arr is function PassArrayByVal (A : ByValArray) return Short_Integer is begin return A(1) + A(2); end; end; -> define i16 @arr__passarraybyval(i32 %a.0.0) signext nounwind { (Here presumably the i32 was synthesized by llvm-convert from the two element array of shorts passed by value). Can you please clarify the roles of llvm-gcc and the code generators in getting ABI compatibility. When generating IR for x86-64, llvm-gcc sometimes chops by-value structs into pieces, and sometimes passes the struct as a byval parameter. Since it chops up all-integer structs, and this corresponds more or less to what the ABI says, I assumed this was an attempt to get ABI correctness. Especially as the code generators don't seem to bother themselves with following the details of the ABI (yet), and just push byval parameters onto the stack. Since you say >> This is an optimization, not a correctness issue I guess this means that the plan is to teach the codegenerators how to pass any aggregate byval in an ABI conformant way (not the case right now), but still do some chopping up in the front-end to help the optimizers. Of course this chopping up needs to be done carefully so the final result squirted out by the codegenerators (once they are ABI conformant) is the same as if the chopping had not been done... Is this chopping really a big win? Is it not possible to get an equivalent level of optimization by enhancing alias analysis? Ciao, Duncan. ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits