[llvm-commits] [llvm] r42717 - /llvm/trunk/include/llvm/ADT/SparseBitVector.h
Author: dannyb Date: Sat Oct 6 23:47:57 2007 New Revision: 42717 URL: http://llvm.org/viewvc/llvm-project?rev=42717&view=rev Log: Some more problems noticed by Curtis Modified: llvm/trunk/include/llvm/ADT/SparseBitVector.h Modified: llvm/trunk/include/llvm/ADT/SparseBitVector.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SparseBitVector.h?rev=42717&r1=42716&r2=42717&view=diff == --- llvm/trunk/include/llvm/ADT/SparseBitVector.h (original) +++ llvm/trunk/include/llvm/ADT/SparseBitVector.h Sat Oct 6 23:47:57 2007 @@ -648,8 +648,8 @@ ElementListIter Iter1 = Elements.begin(); ElementListConstIter Iter2 = RHS.Elements.begin(); -// Check if they are both empty -if (Elements.empty() && RHS.Elements.empty()) +// If either our bitmap or RHS is empty, we are done +if (Elements.empty() || RHS.Elements.empty()) return false; // Loop through, intersecting as we go, erasing elements when necessary. @@ -692,8 +692,9 @@ ElementListConstIter Iter1 = RHS1.Elements.begin(); ElementListConstIter Iter2 = RHS2.Elements.begin(); -// Check if they are both empty. -if (RHS1.empty() && RHS2.empty()) +// If RHS1 is empty, we are done +// If RHS2 is empty, we still have to copy RHS1 +if (RHS1.Elements.empty()) return; // Loop through, intersecting as we go, erasing elements when necessary. @@ -716,6 +717,9 @@ ++Iter1; ++Iter2; } else { +SparseBitVectorElement *NewElement = + new SparseBitVectorElement(*Iter1); +Elements.push_back(NewElement); ++Iter1; } } ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] [llvm] r42699 - /llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project?rev=42699&view=rev > Log: > Move merge code into new helper function. Nice: > +// mergeSPUpdatesUp - Merge two stack-manipulating instructions > upper iterator. > +static > +void mergeSPUpdatesUp(MachineBasicBlock &MBB, > MachineBasicBlock::iterator &MBBI, > + unsigned StackPtr, uint64_t *NumBytes = NULL) { > + if (MBBI != MBB.begin()) { How about starting this out with: if (MBBI == MBB.begin()) return; to unnest the function body one level? -Chris ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] [test-suite] r42694 - in /test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm: config.h toast.c
On Oct 6, 2007, at 3:55 AM, Anton Korobeynikov wrote: > Author: asl > Date: Sat Oct 6 05:55:20 2007 > New Revision: 42694 > > URL: http://llvm.org/viewvc/llvm-project?rev=42694&view=rev > Log: > Unbreak toast again for mingw32. > Funny, but we have two toast's in in llvm-test. Maybe we should > drop one? Where is the other toast? -Chris ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r42713 - in /llvm/trunk: bindings/ocaml/llvm/llvm.ml bindings/ocaml/llvm/llvm.mli bindings/ocaml/llvm/llvm_ocaml.c include/llvm-c/Core.h lib/VMCore/Core.cpp test/Bindings/Ocaml/v
Author: gordon Date: Sat Oct 6 19:13:35 2007 New Revision: 42713 URL: http://llvm.org/viewvc/llvm-project?rev=42713&view=rev Log: C and Objective Caml bindings for PATypeHolder. Modified: llvm/trunk/bindings/ocaml/llvm/llvm.ml llvm/trunk/bindings/ocaml/llvm/llvm.mli llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c llvm/trunk/include/llvm-c/Core.h llvm/trunk/lib/VMCore/Core.cpp llvm/trunk/test/Bindings/Ocaml/vmcore.ml Modified: llvm/trunk/bindings/ocaml/llvm/llvm.ml URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.ml?rev=42713&r1=42712&r2=42713&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm.ml (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm.ml Sat Oct 6 19:13:35 2007 @@ -16,6 +16,7 @@ (* These abstract types correlate directly to the LLVM VMCore classes. *) type llmodule type lltype +type lltypehandle type llvalue type llbasicblock (* These are actually values, but benefit from type checking. *) @@ -176,6 +177,11 @@ let void_type = _void_type () let label_type = _label_type () +(*--... Operations on type handles .--*) +external handle_to_type : lltype -> lltypehandle = "llvm_handle_to_type" +external type_of_handle : lltypehandle -> lltype = "llvm_type_of_handle" +external refine_type : lltype -> lltype -> unit = "llvm_refine_type" + (*===-- Values ===*) Modified: llvm/trunk/bindings/ocaml/llvm/llvm.mli URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.mli?rev=42713&r1=42712&r2=42713&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm.mli (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm.mli Sat Oct 6 19:13:35 2007 @@ -16,6 +16,7 @@ (* These abstract types correlate directly to the LLVM VMCore classes. *) type llmodule type lltype +type lltypehandle type llvalue type llbasicblock (* These are actually values, but benefit from type checking. *) @@ -160,6 +161,11 @@ val void_type : lltype val label_type : lltype +(*--... Operations on type handles .--*) +external handle_to_type : lltype -> lltypehandle = "llvm_handle_to_type" +external type_of_handle : lltypehandle -> lltype = "llvm_type_of_handle" +external refine_type : lltype -> lltype -> unit = "llvm_refine_type" + (*===-- Values ===*) external type_of : llvalue -> lltype = "llvm_type_of" Modified: llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c?rev=42713&r1=42712&r2=42713&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c Sat Oct 6 19:13:35 2007 @@ -195,6 +195,38 @@ return LLVMOpaqueType(); } +/*--... Operations on type handles .--*/ + +#define Typehandle_val(v) (*(LLVMTypeHandleRef *)(Data_custom_val(v))) + +void llvm_finalize_handle(value TH) { + LLVMDisposeTypeHandle(Typehandle_val(TH)); +} + +static struct custom_operations typehandle_ops = { + (char *) "LLVMTypeHandle", + llvm_finalize_handle, + custom_compare_default, + custom_hash_default, + custom_serialize_default, + custom_deserialize_default +}; + +CAMLprim value llvm_handle_to_type(LLVMTypeRef PATy) { + value TH = alloc_custom(&typehandle_ops, sizeof(LLVMBuilderRef), 0, 1); + Typehandle_val(TH) = LLVMCreateTypeHandle(PATy); + return TH; +} + +CAMLprim LLVMTypeRef llvm_type_of_handle(value TH) { + return LLVMResolveTypeHandle(Typehandle_val(TH)); +} + +CAMLprim value llvm_refine_type(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy){ + LLVMRefineAbstractType(AbstractTy, ConcreteTy); + return Val_unit; +} + /*===-- VALUES ===*/ Modified: llvm/trunk/include/llvm-c/Core.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/Core.h?rev=42713&r1=42712&r2=42713&view=diff == --- llvm/trunk/include/llvm-c/Core.h (original) +++ llvm/trunk/include/llvm-c/Core.h Sat Oct 6 19:13:35 2007 @@ -47,6 +47,7 @@ /* Opaque types. */ typedef struct LLVMOpaqueModule *LLVMModuleRef; typedef struct LLVMOpaqueType *LLVMTypeRef; +typedef struct LLVMOpaqueTypeHandle *LLVMTypeHandleRef; typedef struct LLVMOpaqueValue *LLVMValueRef; typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef; typedef struct LLVMOpaqueBuilder *LLVMBuilderRef; @@ -204,6 +205,12 @@ LLVMTypeRef LLVMLabelType(); LLVMTypeRef LLVMOpaqueType(); +/* Operations on type handles */ +LLVMTypeH
Re: [llvm-commits] [llvm] r42677 - in /llvm/trunk/lib: CodeGen/SelectionDAG/DAGCombiner.cpp Target/X86/X86InstrSSE.td
On Oct 5, 2007, at 10:11 PM, Chris Lattner <[EMAIL PROTECTED]> wrote: > Evan, it looks like you missed a commit. Would a similar approach be > suitable to implement this X86/README-SSE.txt entry?: Looks that way. Some of the x86 specific shuffle optmizations (and missing ones like this) probably should move to the combiner. Evan > > > + > +These functions should produce the same code: > + > +#include > + > +typedef long long __m128i __attribute__ ((__vector_size__ (16))); > + > +int foo(__m128i* val) { > + return __builtin_ia32_vec_ext_v4si(*val, 1); > +} > +int bar(__m128i* val) { > + union vs { > +__m128i *_v; > +int* _s; > + } v = {val}; > + return v._s[1]; > +} > + > +We currently produce (with -m64): > + > +_foo: > +pshufd $1, (%rdi), %xmm0 > +movd %xmm0, %eax > +ret > +_bar: > +movl 4(%rdi), %eax > +ret > + > > -Chris > > > On Oct 5, 2007, at 7:46 PM, Evan Cheng wrote: > >> Author: evancheng >> Date: Fri Oct 5 21:46:29 2007 >> New Revision: 42677 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=42677&view=rev >> Log: >> Added DAG xforms. e.g. >> (vextract (v4f32 s2v (f32 load $addr)), 0) -> (f32 load $addr) >> (vextract (v4i32 bc (v4f32 s2v (f32 load $addr))), 0) -> (i32 load >> $addr) >> Remove x86 specific patterns. >> >> Modified: >>llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp >>llvm/trunk/lib/Target/X86/X86InstrSSE.td >> >> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp >> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ >> SelectionDAG/DAGCombiner.cpp?rev=42677&r1=42676&r2=42677&view=diff >> >> === >> === >> >> --- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original) >> +++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Fri Oct 5 >> 21:46:29 2007 >> @@ -263,6 +263,7 @@ >> SDOperand visitLOAD(SDNode *N); >> SDOperand visitSTORE(SDNode *N); >> SDOperand visitINSERT_VECTOR_ELT(SDNode *N); >> +SDOperand visitEXTRACT_VECTOR_ELT(SDNode *N); >> SDOperand visitBUILD_VECTOR(SDNode *N); >> SDOperand visitCONCAT_VECTORS(SDNode *N); >> SDOperand visitVECTOR_SHUFFLE(SDNode *N); >> @@ -682,6 +683,7 @@ >> case ISD::LOAD: return visitLOAD(N); >> case ISD::STORE: return visitSTORE(N); >> case ISD::INSERT_VECTOR_ELT: return visitINSERT_VECTOR_ELT(N); >> + case ISD::EXTRACT_VECTOR_ELT: return visitEXTRACT_VECTOR_ELT(N); >> case ISD::BUILD_VECTOR: return visitBUILD_VECTOR(N); >> case ISD::CONCAT_VECTORS: return visitCONCAT_VECTORS(N); >> case ISD::VECTOR_SHUFFLE: return visitVECTOR_SHUFFLE(N); >> @@ -2907,9 +2909,8 @@ >> return DAG.getNode(ISD::BIT_CONVERT, VT, N0.getOperand(0)); >> >> // fold (conv (load x)) -> (load (conv*)x) >> - // If the resultant load doesn't need a higher alignment than >> the original! >> - if (ISD::isNON_EXTLoad(N0.Val) && N0.hasOneUse() && >> - ISD::isUNINDEXEDLoad(N0.Val) && >> + // If the resultant load doesn't need a higher alignment than >> the original! >> + if (ISD::isNormalLoad(N0.Val) && N0.hasOneUse() && >> TLI.isOperationLegal(ISD::LOAD, VT)) { >> LoadSDNode *LN0 = cast(N0); >> unsigned Align = TLI.getTargetMachine().getTargetData()-> >> @@ -3901,6 +3902,54 @@ >> return SDOperand(); >> } >> >> +SDOperand DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) { >> + SDOperand InVec = N->getOperand(0); >> + SDOperand EltNo = N->getOperand(1); >> + >> + // (vextract (v4f32 s2v (f32 load $addr)), 0) -> (f32 load $addr) >> + // (vextract (v4i32 bc (v4f32 s2v (f32 load $addr))), 0) -> (i32 >> load $addr) >> + if (isa(EltNo)) { >> +unsigned Elt = cast(EltNo)->getValue(); >> +bool NewLoad = false; >> +if (Elt == 0) { >> + MVT::ValueType VT = InVec.getValueType(); >> + MVT::ValueType EVT = MVT::getVectorElementType(VT); >> + MVT::ValueType LVT = EVT; >> + unsigned NumElts = MVT::getVectorNumElements(VT); >> + if (InVec.getOpcode() == ISD::BIT_CONVERT) { >> +MVT::ValueType BCVT = InVec.getOperand(0).getValueType(); >> +if (NumElts != MVT::getVectorNumElements(BCVT)) >> + return SDOperand(); >> +InVec = InVec.getOperand(0); >> +EVT = MVT::getVectorElementType(BCVT); >> +NewLoad = true; >> + } >> + if (InVec.getOpcode() == ISD::SCALAR_TO_VECTOR && >> + InVec.getOperand(0).getValueType() == EVT && >> + ISD::isNormalLoad(InVec.getOperand(0).Val) && >> + InVec.getOperand(0).hasOneUse()) { >> +LoadSDNode *LN0 = cast(InVec.getOperand(0)); >> +unsigned Align = LN0->getAlignment(); >> +if (NewLoad) { >> + // Check the resultant load doesn't need a higher >> alignment than the >> + // original load. >> + unsigned NewAlign = TLI.getTargetMachine().getTargetData >> ()-> >> +getABITypeAlignment(MVT::getTypeForV
Re: [llvm-commits] [llvm] r42661 - in /llvm/trunk/lib/Target/X86: X86InstrInfo.cpp X86InstrInfo.td X86InstrX86-64.td
Not crazy at all. If I had any sense at all I would have done that back then. :) I'll make that clean up one of these days. Evan On Oct 5, 2007, at 4:45 PM, Chris Lattner <[EMAIL PROTECTED]> wrote: >> URL: http://llvm.org/viewvc/llvm-project?rev=42661&view=rev >> Log: >> Commute x86 cmove instructions by swapping the operands and change >> the condition >> to its inverse. >> Testing this as llcbeta > > Random crazy idea: > >> +def CMOVB16rm : I<0x42, MRMSrcMem, // if > + (outs GR16:$dst), (ins GR16:$src1, i16mem:$src2), >> + "cmovb\t{$src2, $dst|$dst, $src2}", >> + [(set GR16:$dst, (X86cmov GR16:$src1, (loadi16 >> addr:$src2), >> + X86_COND_B, EFLAGS))]>, >> + TB, OpSize; > > Instead of having one instruction for each comparison code, would it > make sense to have one "CMOV16rm" that took the condcode as an > immediate argument? If you had that, you could change the comparison > just by twiddling the immediate operand and wouldn't have a bazillion > CMOV instructions. > > -Chris > > > ___ > 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] r42707 - in /llvm/trunk: Xcode/LLVM.xcodeproj/project.pbxproj bindings/ocaml/Makefile bindings/ocaml/Makefile.ocaml bindings/ocaml/analysis/ bindings/ocaml/analysis/Makefile bind
Author: gordon Date: Sat Oct 6 16:00:36 2007 New Revision: 42707 URL: http://llvm.org/viewvc/llvm-project?rev=42707&view=rev Log: Bindings for the verifier. Added: llvm/trunk/bindings/ocaml/analysis/ (with props) llvm/trunk/bindings/ocaml/analysis/Makefile llvm/trunk/bindings/ocaml/analysis/analysis_ocaml.c llvm/trunk/bindings/ocaml/analysis/llvm_analysis.ml llvm/trunk/bindings/ocaml/analysis/llvm_analysis.mli llvm/trunk/include/llvm-c/Analysis.h llvm/trunk/lib/Analysis/Analysis.cpp llvm/trunk/test/Bindings/Ocaml/analysis.ml Modified: llvm/trunk/Xcode/LLVM.xcodeproj/project.pbxproj llvm/trunk/bindings/ocaml/Makefile llvm/trunk/bindings/ocaml/Makefile.ocaml llvm/trunk/bindings/ocaml/bitwriter/Makefile llvm/trunk/bindings/ocaml/llvm/Makefile llvm/trunk/lib/Bitcode/Writer/BitWriter.cpp Modified: llvm/trunk/Xcode/LLVM.xcodeproj/project.pbxproj URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Xcode/LLVM.xcodeproj/project.pbxproj?rev=42707&r1=42706&r2=42707&view=diff == --- llvm/trunk/Xcode/LLVM.xcodeproj/project.pbxproj (original) +++ llvm/trunk/Xcode/LLVM.xcodeproj/project.pbxproj Sat Oct 6 16:00:36 2007 @@ -137,6 +137,11 @@ 9F7794870C73D51000551F9C /* LLVMBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LLVMBuilder.h; sourceTree = ""; }; 9F7794880C73D51000551F9C /* MemoryBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryBuffer.h; sourceTree = ""; }; 9F7794890C73D51000551F9C /* Streams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Streams.h; sourceTree = ""; }; + 9F7C23E50CB81C2100498408 /* Analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Analysis.h; sourceTree = ""; }; + 9F7C23E60CB81C2B00498408 /* Analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Analysis.cpp; sourceTree = ""; }; + 9F7C240C0CB81ECD00498408 /* analysis_ocaml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = analysis_ocaml.c; sourceTree = ""; }; + 9F7C240D0CB81ECD00498408 /* llvm_analysis.ml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = llvm_analysis.ml; sourceTree = ""; }; + 9F7C240E0CB81ECD00498408 /* llvm_analysis.mli */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = llvm_analysis.mli; sourceTree = ""; }; 9FA638D90C77B184007F12AE /* AutoUpgrade.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AutoUpgrade.h; sourceTree = ""; }; 9FA638DA0C77B184007F12AE /* GlobalAlias.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GlobalAlias.h; sourceTree = ""; }; 9FA638DB0C77B1AB007F12AE /* APInt.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = APInt.h; sourceTree = ""; }; @@ -166,7 +171,6 @@ 9FE25D900CAB166D005383FC /* APFloat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APFloat.h; sourceTree = ""; }; 9FE25D910CAB166D005383FC /* SparseBitVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SparseBitVector.h; sourceTree = ""; }; 9FE25D920CAB169F005383FC /* RegisterCoalescer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterCoalescer.h; sourceTree = ""; }; - 9FE25D930CAB16D8005383FC /* PostDominatorCalculation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PostDominatorCalculation.h; sourceTree = ""; }; 9FE25D940CAB16FB005383FC /* RegisterCoalescer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegisterCoalescer.cpp; sourceTree = ""; }; 9FE25D950CAB1724005383FC /* APFloat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = APFloat.cpp; sourceTree = ""; }; 9FE25D960CAB1759005383FC /* TargetCallingConv.td */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TargetCallingConv.td; sourceTree = ""; }; @@ -1156,6 +1160,16 @@ path = MSIL; sourceTree = ""; }; + 9F7C240B0CB81ECD00498408 /* analysis */ = { + isa = PBXGroup; + children = ( + 9F7C240C0CB81ECD
[llvm-commits] [llvm] r42702 - in /llvm/trunk/bindings/ocaml/llvm: llvm.ml llvm.mli llvm_ocaml.c
Author: gordon Date: Sat Oct 6 12:10:44 2007 New Revision: 42702 URL: http://llvm.org/viewvc/llvm-project?rev=42702&view=rev Log: Deleting some unnecessary glue. Modified: llvm/trunk/bindings/ocaml/llvm/llvm.ml llvm/trunk/bindings/ocaml/llvm/llvm.mli llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c Modified: llvm/trunk/bindings/ocaml/llvm/llvm.ml URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.ml?rev=42702&r1=42701&r2=42702&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm.ml (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm.ml Sat Oct 6 12:10:44 2007 @@ -150,7 +150,7 @@ external var_arg_function_type : lltype -> lltype array -> lltype = "llvm_var_arg_function_type" external is_var_arg : lltype -> bool = "llvm_is_var_arg" -external return_type : lltype -> lltype = "llvm_return_type" +external return_type : lltype -> lltype = "LLVMGetReturnType" external param_types : lltype -> lltype array = "llvm_param_types" (*--... Operations on struct types .--*) @@ -161,10 +161,10 @@ (*--... Operations on pointer, vector, and array types .--*) external array_type : lltype -> int -> lltype = "llvm_array_type" -external pointer_type : lltype -> lltype = "llvm_pointer_type" +external pointer_type : lltype -> lltype = "LLVMPointerType" external vector_type : lltype -> int -> lltype = "llvm_vector_type" -external element_type : lltype -> lltype = "llvm_element_type" +external element_type : lltype -> lltype = "LLVMGetElementType" external array_length : lltype -> int = "llvm_array_length" external vector_size : lltype -> int = "llvm_vector_size" Modified: llvm/trunk/bindings/ocaml/llvm/llvm.mli URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.mli?rev=42702&r1=42701&r2=42702&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm.mli (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm.mli Sat Oct 6 12:10:44 2007 @@ -137,7 +137,7 @@ external var_arg_function_type : lltype -> lltype array -> lltype = "llvm_var_arg_function_type" external is_var_arg : lltype -> bool = "llvm_is_var_arg" -external return_type : lltype -> lltype = "llvm_return_type" +external return_type : lltype -> lltype = "LLVMGetReturnType" external param_types : lltype -> lltype array = "llvm_param_types" (*--... Operations on struct types .--*) @@ -148,10 +148,10 @@ (*--... Operations on pointer, vector, and array types .--*) external array_type : lltype -> int -> lltype = "llvm_array_type" -external pointer_type : lltype -> lltype = "llvm_pointer_type" +external pointer_type : lltype -> lltype = "LLVMPointerType" external vector_type : lltype -> int -> lltype = "llvm_vector_type" -external element_type : lltype -> lltype = "llvm_element_type" +external element_type : lltype -> lltype = "LLVMGetElementType" external array_length : lltype -> int = "llvm_array_length" external vector_size : lltype -> int = "llvm_vector_size" Modified: llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c?rev=42702&r1=42701&r2=42702&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c Sat Oct 6 12:10:44 2007 @@ -129,11 +129,6 @@ return Val_bool(LLVMIsFunctionVarArg(FunTy)); } -/* lltype -> lltype */ -CAMLprim LLVMTypeRef llvm_return_type(LLVMTypeRef FunTy) { - return LLVMGetReturnType(FunTy); -} - /* lltype -> lltype array */ CAMLprim value llvm_param_types(LLVMTypeRef FunTy) { value Tys = alloc(LLVMCountParamTypes(FunTy), 0); @@ -174,21 +169,11 @@ return LLVMArrayType(ElementTy, Int_val(Count)); } -/* lltype -> lltype */ -CAMLprim LLVMTypeRef llvm_pointer_type(LLVMTypeRef ElementTy) { - return LLVMPointerType(ElementTy); -} - /* lltype -> int -> lltype */ CAMLprim LLVMTypeRef llvm_vector_type(LLVMTypeRef ElementTy, value Count) { return LLVMVectorType(ElementTy, Int_val(Count)); } -/* lltype -> lltype */ -CAMLprim LLVMTypeRef llvm_element_type(LLVMTypeRef Ty) { - return LLVMGetElementType(Ty); -} - /* lltype -> int */ CAMLprim value llvm_array_length(LLVMTypeRef ArrayTy) { return Val_int(LLVMGetArrayLength(ArrayTy)); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r42701 - in /llvm/trunk: bindings/ocaml/llvm/llvm.ml bindings/ocaml/llvm/llvm.mli bindings/ocaml/llvm/llvm_ocaml.c test/Bindings/Ocaml/vmcore.ml
Author: gordon Date: Sat Oct 6 11:56:09 2007 New Revision: 42701 URL: http://llvm.org/viewvc/llvm-project?rev=42701&view=rev Log: Adopting a uniform naming convention for type constructors in bindings (part le deux). Modified: llvm/trunk/bindings/ocaml/llvm/llvm.ml llvm/trunk/bindings/ocaml/llvm/llvm.mli llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c llvm/trunk/test/Bindings/Ocaml/vmcore.ml Modified: llvm/trunk/bindings/ocaml/llvm/llvm.ml URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.ml?rev=42701&r1=42700&r2=42701&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm.ml (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm.ml Sat Oct 6 11:56:09 2007 @@ -128,7 +128,7 @@ let i32_type = _i32_type () let i64_type = _i64_type () -external make_integer_type : int -> lltype = "llvm_make_integer_type" +external integer_type : int -> lltype = "llvm_integer_type" external integer_bitwidth : lltype -> int = "llvm_integer_bitwidth" (*--... Operations on real types ...--*) @@ -146,29 +146,30 @@ (*--... Operations on function types ...--*) (* FIXME: handle parameter attributes *) -external make_function_type : lltype -> lltype array -> bool -> lltype -= "llvm_make_function_type" +external function_type : lltype -> lltype array -> lltype = "llvm_function_type" +external var_arg_function_type : lltype -> lltype array -> lltype + = "llvm_var_arg_function_type" external is_var_arg : lltype -> bool = "llvm_is_var_arg" external return_type : lltype -> lltype = "llvm_return_type" external param_types : lltype -> lltype array = "llvm_param_types" (*--... Operations on struct types .--*) -external make_struct_type : lltype array -> bool -> lltype - = "llvm_make_struct_type" +external struct_type : lltype array -> lltype = "llvm_struct_type" +external packed_struct_type : lltype array -> lltype = "llvm_packed_struct_type" external element_types : lltype -> lltype array = "llvm_element_types" external is_packed : lltype -> bool = "llvm_is_packed" (*--... Operations on pointer, vector, and array types .--*) -external make_array_type : lltype -> int -> lltype = "llvm_make_array_type" -external make_pointer_type : lltype -> lltype = "llvm_make_pointer_type" -external make_vector_type : lltype -> int -> lltype = "llvm_make_vector_type" +external array_type : lltype -> int -> lltype = "llvm_array_type" +external pointer_type : lltype -> lltype = "llvm_pointer_type" +external vector_type : lltype -> int -> lltype = "llvm_vector_type" external element_type : lltype -> lltype = "llvm_element_type" external array_length : lltype -> int = "llvm_array_length" external vector_size : lltype -> int = "llvm_vector_size" (*--... Operations on other types ..--*) -external make_opaque_type : unit -> lltype = "llvm_make_opaque_type" +external opaque_type : unit -> lltype = "llvm_opaque_type" external _void_type : unit -> lltype = "llvm_void_type" external _label_type : unit -> lltype = "llvm_label_type" Modified: llvm/trunk/bindings/ocaml/llvm/llvm.mli URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.mli?rev=42701&r1=42700&r2=42701&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm.mli (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm.mli Sat Oct 6 11:56:09 2007 @@ -121,7 +121,7 @@ val i16_type : lltype val i32_type : lltype val i64_type : lltype -external make_integer_type : int -> lltype = "llvm_make_integer_type" +external integer_type : int -> lltype = "llvm_integer_type" external integer_bitwidth : lltype -> int = "llvm_integer_bitwidth" (*--... Operations on real types ...--*) @@ -133,29 +133,30 @@ (*--... Operations on function types ...--*) (* FIXME: handle parameter attributes *) -external make_function_type : lltype -> lltype array -> bool -> lltype -= "llvm_make_function_type" +external function_type : lltype -> lltype array -> lltype = "llvm_function_type" +external var_arg_function_type : lltype -> lltype array -> lltype + = "llvm_var_arg_function_type" external is_var_arg : lltype -> bool = "llvm_is_var_arg" external return_type : lltype -> lltype = "llvm_return_type" external param_types : lltype -> lltype array = "llvm_param_types" (*--... Operations on struct types .--*) -external make_struct_type : lltype array -> bool -> lltype - = "llvm_make_struct_
[llvm-commits] [llvm] r42700 - /llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
Author: asl Date: Sat Oct 6 11:39:43 2007 New Revision: 42700 URL: http://llvm.org/viewvc/llvm-project?rev=42700&view=rev Log: Oops, I really wanted to commit this part also :) Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=42700&r1=42699&r2=42700&view=diff == --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Sat Oct 6 11:39:43 2007 @@ -1500,6 +1500,31 @@ } } +// mergeSPUpdatesUp - Merge two stack-manipulating instructions lower iterator. +static +void mergeSPUpdatesDown(MachineBasicBlock &MBB,MachineBasicBlock::iterator &MBBI, +unsigned StackPtr, uint64_t *NumBytes = NULL) { + if (MBBI != MBB.end()) { +MachineBasicBlock::iterator NI = next(MBBI); +unsigned Opc = NI->getOpcode(); +if ((Opc == X86::ADD64ri32 || Opc == X86::ADD64ri8 || + Opc == X86::ADD32ri || Opc == X86::ADD32ri8) && +NI->getOperand(0).getReg() == StackPtr) { + if (NumBytes) +*NumBytes -= NI->getOperand(2).getImm(); + MBB.erase(NI); + MBBI = NI; +} else if ((Opc == X86::SUB64ri32 || Opc == X86::SUB64ri8 || +Opc == X86::SUB32ri || Opc == X86::SUB32ri8) && + NI->getOperand(0).getReg() == StackPtr) { + if (NumBytes) +*NumBytes += NI->getOperand(2).getImm(); + MBB.erase(NI); + MBBI = NI; +} + } +} + void X86RegisterInfo::emitPrologue(MachineFunction &MF) const { MachineBasicBlock &MBB = MF.front(); // Prolog goes in entry BB MachineFrameInfo *MFI = MF.getFrameInfo(); @@ -1585,9 +1610,9 @@ MBB.insert(MBBI, MI); } } else { - // If there is an ADD32ri or SUB32ri of ESP immediately before this + // If there is an ADD32ri or SUB32ri of ESP immediately after this // instruction, merge the two instructions. - mergeSPUpdatesUp(MBB, MBBI, StackPtr, &NumBytes); + mergeSPUpdatesDown(MBB, MBBI, StackPtr, &NumBytes); if (NumBytes) emitSPUpdate(MBB, MBBI, StackPtr, -(int64_t)NumBytes, Is64Bit, TII); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r42699 - /llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
Author: asl Date: Sat Oct 6 11:17:49 2007 New Revision: 42699 URL: http://llvm.org/viewvc/llvm-project?rev=42699&view=rev Log: Move merge code into new helper function. Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=42699&r1=42698&r2=42699&view=diff == --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Sat Oct 6 11:17:49 2007 @@ -1477,6 +1477,29 @@ } } +// mergeSPUpdatesUp - Merge two stack-manipulating instructions upper iterator. +static +void mergeSPUpdatesUp(MachineBasicBlock &MBB, MachineBasicBlock::iterator &MBBI, + unsigned StackPtr, uint64_t *NumBytes = NULL) { + if (MBBI != MBB.begin()) { +MachineBasicBlock::iterator PI = prior(MBBI); +unsigned Opc = PI->getOpcode(); +if ((Opc == X86::ADD64ri32 || Opc == X86::ADD64ri8 || + Opc == X86::ADD32ri || Opc == X86::ADD32ri8) && +PI->getOperand(0).getReg() == StackPtr) { + if (NumBytes) +*NumBytes += PI->getOperand(2).getImm(); + MBB.erase(PI); +} else if ((Opc == X86::SUB64ri32 || Opc == X86::SUB64ri8 || +Opc == X86::SUB32ri || Opc == X86::SUB32ri8) && + PI->getOperand(0).getReg() == StackPtr) { + if (NumBytes) +*NumBytes -= PI->getOperand(2).getImm(); + MBB.erase(PI); +} + } +} + void X86RegisterInfo::emitPrologue(MachineFunction &MF) const { MachineBasicBlock &MBB = MF.front(); // Prolog goes in entry BB MachineFrameInfo *MFI = MF.getFrameInfo(); @@ -1562,26 +1585,10 @@ MBB.insert(MBBI, MI); } } else { - // If there is an ADD32ri or SUB32ri of ESP immediately after this + // If there is an ADD32ri or SUB32ri of ESP immediately before this // instruction, merge the two instructions. - if (MBBI != MBB.end()) { -MachineBasicBlock::iterator NI = next(MBBI); -unsigned Opc = MBBI->getOpcode(); -if ((Opc == X86::ADD64ri32 || Opc == X86::ADD64ri8 || - Opc == X86::ADD32ri || Opc == X86::ADD32ri8) && -MBBI->getOperand(0).getReg() == StackPtr) { - NumBytes -= MBBI->getOperand(2).getImm(); - MBB.erase(MBBI); - MBBI = NI; -} else if ((Opc == X86::SUB64ri32 || Opc == X86::SUB64ri8 || -Opc == X86::SUB32ri || Opc == X86::SUB32ri8) && - MBBI->getOperand(0).getReg() == StackPtr) { - NumBytes += MBBI->getOperand(2).getImm(); - MBB.erase(MBBI); - MBBI = NI; -} - } - + mergeSPUpdatesUp(MBB, MBBI, StackPtr, &NumBytes); + if (NumBytes) emitSPUpdate(MBB, MBBI, StackPtr, -(int64_t)NumBytes, Is64Bit, TII); } @@ -1702,31 +1709,15 @@ --MBBI; } - if (NumBytes || MFI->hasVarSizedObjects()) { -// If there is an ADD32ri or SUB32ri of ESP immediately before this -// instruction, merge the two instructions. -if (MBBI != MBB.begin()) { - MachineBasicBlock::iterator PI = prior(MBBI); - unsigned Opc = PI->getOpcode(); - if ((Opc == X86::ADD64ri32 || Opc == X86::ADD64ri8 || - Opc == X86::ADD32ri || Opc == X86::ADD32ri8) && - PI->getOperand(0).getReg() == StackPtr) { -NumBytes += PI->getOperand(2).getImm(); -MBB.erase(PI); - } else if ((Opc == X86::SUB64ri32 || Opc == X86::SUB64ri8 || - Opc == X86::SUB32ri || Opc == X86::SUB32ri8) && - PI->getOperand(0).getReg() == StackPtr) { -NumBytes -= PI->getOperand(2).getImm(); -MBB.erase(PI); - } -} - } - - // If dynamic alloca is used, then reset esp to point to the last - // callee-saved slot before popping them off! - // Also, if it's main() on Cygwin/Mingw32 we aligned stack in the prologue, - revert - // stack changes back. Note: we're assuming, that frame pointer was forced - // for main() + // If there is an ADD32ri or SUB32ri of ESP immediately before this + // instruction, merge the two instructions. + if (NumBytes || MFI->hasVarSizedObjects()) +mergeSPUpdatesUp(MBB, MBBI, StackPtr, &NumBytes); + + // If dynamic alloca is used, then reset esp to point to the last callee-saved + // slot before popping them off! Also, if it's main() on Cygwin/Mingw32 we + // aligned stack in the prologue, - revert stack changes back. Note: we're + // assuming, that frame pointer was forced for main() if (MFI->hasVarSizedObjects() || (Fn->hasExternalLinkage() && Fn->getName() == "main" && Subtarget->isTargetCygMing())) { ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r42698 - in /llvm/trunk: bindings/ocaml/llvm/llvm_ocaml.c include/llvm-c/Core.h lib/VMCore/Core.cpp
Author: gordon Date: Sat Oct 6 11:05:20 2007 New Revision: 42698 URL: http://llvm.org/viewvc/llvm-project?rev=42698&view=rev Log: Adopting a uniform naming convention for type constructors in bindings. Modified: llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c llvm/trunk/include/llvm-c/Core.h llvm/trunk/lib/VMCore/Core.cpp Modified: llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c?rev=42698&r1=42697&r2=42698&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c Sat Oct 6 11:05:20 2007 @@ -74,7 +74,7 @@ /* int -> lltype */ CAMLprim LLVMTypeRef llvm_make_integer_type(value Width) { - return LLVMCreateIntType(Int_val(Width)); + return LLVMIntType(Int_val(Width)); } /* lltype -> int */ @@ -114,9 +114,9 @@ /* lltype -> lltype array -> bool -> lltype */ CAMLprim LLVMTypeRef llvm_make_function_type(LLVMTypeRef RetTy, value ParamTys, value IsVarArg) { - return LLVMCreateFunctionType(RetTy, (LLVMTypeRef *) ParamTys, -Wosize_val(ParamTys), -Bool_val(IsVarArg)); + return LLVMFunctionType(RetTy, (LLVMTypeRef *) ParamTys, + Wosize_val(ParamTys), + Bool_val(IsVarArg)); } /* lltype -> bool */ @@ -140,9 +140,9 @@ /* lltype array -> bool -> lltype */ CAMLprim LLVMTypeRef llvm_make_struct_type(value ElementTypes, value Packed) { - return LLVMCreateStructType((LLVMTypeRef *) ElementTypes, - Wosize_val(ElementTypes), - Bool_val(Packed)); + return LLVMStructType((LLVMTypeRef *) ElementTypes, +Wosize_val(ElementTypes), +Bool_val(Packed)); } /* lltype -> lltype array */ @@ -161,17 +161,17 @@ /* lltype -> int -> lltype */ CAMLprim LLVMTypeRef llvm_make_array_type(LLVMTypeRef ElementTy, value Count) { - return LLVMCreateArrayType(ElementTy, Int_val(Count)); + return LLVMArrayType(ElementTy, Int_val(Count)); } /* lltype -> lltype */ CAMLprim LLVMTypeRef llvm_make_pointer_type(LLVMTypeRef ElementTy) { - return LLVMCreatePointerType(ElementTy); + return LLVMPointerType(ElementTy); } /* lltype -> int -> lltype */ CAMLprim LLVMTypeRef llvm_make_vector_type(LLVMTypeRef ElementTy, value Count) { - return LLVMCreateVectorType(ElementTy, Int_val(Count)); + return LLVMVectorType(ElementTy, Int_val(Count)); } /* lltype -> lltype */ @@ -197,7 +197,7 @@ /* unit -> lltype */ CAMLprim LLVMTypeRef llvm_make_opaque_type(value Unit) { - return LLVMCreateOpaqueType(); + return LLVMOpaqueType(); } Modified: llvm/trunk/include/llvm-c/Core.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/Core.h?rev=42698&r1=42697&r2=42698&view=diff == --- llvm/trunk/include/llvm-c/Core.h (original) +++ llvm/trunk/include/llvm-c/Core.h Sat Oct 6 11:05:20 2007 @@ -164,7 +164,7 @@ LLVMTypeRef LLVMInt16Type(); LLVMTypeRef LLVMInt32Type(); LLVMTypeRef LLVMInt64Type(); -LLVMTypeRef LLVMCreateIntType(unsigned NumBits); +LLVMTypeRef LLVMIntType(unsigned NumBits); unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy); /* Operations on real types */ @@ -175,25 +175,25 @@ LLVMTypeRef LLVMPPCFP128Type(); /* Operations on function types */ -LLVMTypeRef LLVMCreateFunctionType(LLVMTypeRef ReturnType, - LLVMTypeRef *ParamTypes, unsigned ParamCount, - int IsVarArg); +LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType, + LLVMTypeRef *ParamTypes, unsigned ParamCount, + int IsVarArg); int LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy); LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy); unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy); void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest); /* Operations on struct types */ -LLVMTypeRef LLVMCreateStructType(LLVMTypeRef *ElementTypes, - unsigned ElementCount, int Packed); +LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount, + int Packed); unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy); void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest); int LLVMIsPackedStruct(LLVMTypeRef StructTy); /* Operations on array, pointer, and vector types (sequence types) */ -LLVMTypeRef LLVMCreateArrayType(LLVMTypeRef ElementType, unsigned ElementCount); -LLVMTypeRef LLVMCreatePointerType(LLVMTypeRef ElementType); -LLVMTypeRef LLVMCreateVectorType(LLVMTypeRef ElementType,unsigned ElementCount); +LLVMTypeRef LLVMArrayType(LLVMTypeRef E
[llvm-commits] [llvm] r42697 - in /llvm/trunk: bindings/ocaml/llvm/llvm.ml bindings/ocaml/llvm/llvm.mli bindings/ocaml/llvm/llvm_ocaml.c include/llvm-c/Core.h lib/VMCore/Core.cpp test/Bindings/Ocaml/v
Author: gordon Date: Sat Oct 6 10:11:06 2007 New Revision: 42697 URL: http://llvm.org/viewvc/llvm-project?rev=42697&view=rev Log: Adopting a uniform naming convention for constant constructors in bindings. Modified: llvm/trunk/bindings/ocaml/llvm/llvm.ml llvm/trunk/bindings/ocaml/llvm/llvm.mli llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c llvm/trunk/include/llvm-c/Core.h llvm/trunk/lib/VMCore/Core.cpp llvm/trunk/test/Bindings/Ocaml/vmcore.ml Modified: llvm/trunk/bindings/ocaml/llvm/llvm.ml URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.ml?rev=42697&r1=42696&r2=42697&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm.ml (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm.ml Sat Oct 6 10:11:06 2007 @@ -185,32 +185,29 @@ (*--... Operations on constants of (mostly) any type ...--*) external is_constant : llvalue -> bool = "llvm_is_constant" -external make_null : lltype -> llvalue = "LLVMGetNull" -external make_all_ones : (*int|vec*)lltype -> llvalue = "LLVMGetAllOnes" -external make_undef : lltype -> llvalue = "LLVMGetUndef" +external const_null : lltype -> llvalue = "LLVMConstNull" +external const_all_ones : (*int|vec*)lltype -> llvalue = "LLVMConstAllOnes" +external undef : lltype -> llvalue = "LLVMGetUndef" external is_null : llvalue -> bool = "llvm_is_null" external is_undef : llvalue -> bool = "llvm_is_undef" (*--... Operations on scalar constants .--*) -external make_int_constant : lltype -> int -> bool -> llvalue - = "llvm_make_int_constant" -external make_int64_constant : lltype -> Int64.t -> bool -> llvalue - = "llvm_make_int64_constant" -external make_real_constant : lltype -> float -> llvalue -= "llvm_make_real_constant" +external const_int : lltype -> int -> llvalue = "llvm_const_int" +external const_of_int64 : lltype -> Int64.t -> bool -> llvalue += "llvm_const_of_int64" +external const_float : lltype -> float -> llvalue = "llvm_const_float" (*--... Operations on composite constants ..--*) -external make_string_constant : string -> bool -> llvalue - = "llvm_make_string_constant" -external make_array_constant : lltype -> llvalue array -> llvalue - = "llvm_make_array_constant" -external make_struct_constant : llvalue array -> bool -> llvalue - = "llvm_make_struct_constant" -external make_vector_constant : llvalue array -> llvalue - = "llvm_make_vector_constant" +external const_string : string -> llvalue = "llvm_const_string" +external const_stringz : string -> llvalue = "llvm_const_stringz" +external const_array : lltype -> llvalue array -> llvalue = "llvm_const_array" +external const_struct : llvalue array -> llvalue = "llvm_const_struct" +external const_packed_struct : llvalue array -> llvalue + = "llvm_const_packed_struct" +external const_vector : llvalue array -> llvalue = "llvm_const_vector" (*--... Constant expressions ...--*) -external sizeof : lltype -> llvalue = "LLVMSizeOf" +external size_of : lltype -> llvalue = "LLVMSizeOf" external const_neg : llvalue -> llvalue = "LLVMConstNeg" external const_not : llvalue -> llvalue = "LLVMConstNot" external const_add : llvalue -> llvalue -> llvalue = "LLVMConstAdd" Modified: llvm/trunk/bindings/ocaml/llvm/llvm.mli URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.mli?rev=42697&r1=42696&r2=42697&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm.mli (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm.mli Sat Oct 6 10:11:06 2007 @@ -168,32 +168,29 @@ (*--... Operations on constants of (mostly) any type ...--*) external is_constant : llvalue -> bool = "llvm_is_constant" -external make_null : lltype -> llvalue = "LLVMGetNull" -external make_all_ones : (*int|vec*)lltype -> llvalue = "LLVMGetAllOnes" -external make_undef : lltype -> llvalue = "LLVMGetUndef" +external const_null : lltype -> llvalue = "LLVMConstNull" +external const_all_ones : (*int|vec*)lltype -> llvalue = "LLVMConstAllOnes" +external undef : lltype -> llvalue = "LLVMGetUndef" external is_null : llvalue -> bool = "llvm_is_null" external is_undef : llvalue -> bool = "llvm_is_undef" (*--... Operations on scalar constants .--*) -external make_int_constant : lltype -> int -> bool -> llvalue - = "llvm_make_int_constant" -external make_int64_constant : lltype -> Int64.t -> bool -> llvalue - = "llvm_make_int64_constant" -external make_real_cons
[llvm-commits] [llvm] r42696 - in /llvm/trunk: bindings/ocaml/llvm/llvm.ml bindings/ocaml/llvm/llvm.mli bindings/ocaml/llvm/llvm_ocaml.c include/llvm-c/Core.h include/llvm/Constants.h lib/VMCore/Const
Author: gordon Date: Sat Oct 6 09:29:36 2007 New Revision: 42696 URL: http://llvm.org/viewvc/llvm-project?rev=42696&view=rev Log: Adding C and Ocaml bindings for ConstantExpr. Modified: llvm/trunk/bindings/ocaml/llvm/llvm.ml llvm/trunk/bindings/ocaml/llvm/llvm.mli llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c llvm/trunk/include/llvm-c/Core.h llvm/trunk/include/llvm/Constants.h llvm/trunk/lib/VMCore/Constants.cpp llvm/trunk/lib/VMCore/Core.cpp llvm/trunk/test/Bindings/Ocaml/vmcore.ml Modified: llvm/trunk/bindings/ocaml/llvm/llvm.ml URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.ml?rev=42696&r1=42695&r2=42696&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm.ml (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm.ml Sat Oct 6 09:29:36 2007 @@ -209,6 +209,51 @@ external make_vector_constant : llvalue array -> llvalue = "llvm_make_vector_constant" +(*--... Constant expressions ...--*) +external sizeof : lltype -> llvalue = "LLVMSizeOf" +external const_neg : llvalue -> llvalue = "LLVMConstNeg" +external const_not : llvalue -> llvalue = "LLVMConstNot" +external const_add : llvalue -> llvalue -> llvalue = "LLVMConstAdd" +external const_sub : llvalue -> llvalue -> llvalue = "LLVMConstSub" +external const_mul : llvalue -> llvalue -> llvalue = "LLVMConstMul" +external const_udiv : llvalue -> llvalue -> llvalue = "LLVMConstUDiv" +external const_sdiv : llvalue -> llvalue -> llvalue = "LLVMConstSDiv" +external const_fdiv : llvalue -> llvalue -> llvalue = "LLVMConstFDiv" +external const_urem : llvalue -> llvalue -> llvalue = "LLVMConstURem" +external const_srem : llvalue -> llvalue -> llvalue = "LLVMConstSRem" +external const_frem : llvalue -> llvalue -> llvalue = "LLVMConstFRem" +external const_and : llvalue -> llvalue -> llvalue = "LLVMConstAnd" +external const_or : llvalue -> llvalue -> llvalue = "LLVMConstOr" +external const_xor : llvalue -> llvalue -> llvalue = "LLVMConstXor" +external const_icmp : int_predicate -> llvalue -> llvalue -> llvalue += "llvm_const_icmp" +external const_fcmp : real_predicate -> llvalue -> llvalue -> llvalue += "llvm_const_fcmp" +external const_shl : llvalue -> llvalue -> llvalue = "LLVMConstShl" +external const_lshr : llvalue -> llvalue -> llvalue = "LLVMConstLShr" +external const_ashr : llvalue -> llvalue -> llvalue = "LLVMConstAShr" +external const_gep : llvalue -> llvalue array -> llvalue = "llvm_const_gep" +external const_trunc : llvalue -> lltype -> llvalue = "LLVMConstTrunc" +external const_sext : llvalue -> lltype -> llvalue = "LLVMConstSExt" +external const_zext : llvalue -> lltype -> llvalue = "LLVMConstZExt" +external const_fptrunc : llvalue -> lltype -> llvalue = "LLVMConstFPTrunc" +external const_fpext : llvalue -> lltype -> llvalue = "LLVMConstFPExt" +external const_uitofp : llvalue -> lltype -> llvalue = "LLVMConstUIToFP" +external const_sitofp : llvalue -> lltype -> llvalue = "LLVMConstSIToFP" +external const_fptoui : llvalue -> lltype -> llvalue = "LLVMConstFPToUI" +external const_fptosi : llvalue -> lltype -> llvalue = "LLVMConstFPToSI" +external const_ptrtoint : llvalue -> lltype -> llvalue = "LLVMConstPtrToInt" +external const_inttoptr : llvalue -> lltype -> llvalue = "LLVMConstIntToPtr" +external const_bitcast : llvalue -> lltype -> llvalue = "LLVMConstBitCast" +external const_select : llvalue -> llvalue -> llvalue -> llvalue + = "LLVMConstSelect" +external const_extractelement : llvalue -> llvalue -> llvalue + = "LLVMConstExtractElement" +external const_insertelement : llvalue -> llvalue -> llvalue -> llvalue + = "LLVMConstInsertElement" +external const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue + = "LLVMConstShuffleVector" + (*--... Operations on global variables, functions, and aliases (globals) ...--*) external is_declaration : llvalue -> bool = "llvm_is_declaration" external linkage : llvalue -> linkage = "llvm_linkage" Modified: llvm/trunk/bindings/ocaml/llvm/llvm.mli URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.mli?rev=42696&r1=42695&r2=42696&view=diff == --- llvm/trunk/bindings/ocaml/llvm/llvm.mli (original) +++ llvm/trunk/bindings/ocaml/llvm/llvm.mli Sat Oct 6 09:29:36 2007 @@ -192,6 +192,51 @@ external make_vector_constant : llvalue array -> llvalue = "llvm_make_vector_constant" +(*--... Constant expressions ...--*) +external sizeof : lltype -> llvalue = "LLVMSizeOf" +external const_neg : llvalue -> llvalue = "LLVMConstNeg" +external const_not : llvalue -> llvalue = "LLVMConstNot" +external
[llvm-commits] [llvm] r42695 - /llvm/trunk/include/llvm/Pass.h
Author: asl Date: Sat Oct 6 08:07:11 2007 New Revision: 42695 URL: http://llvm.org/viewvc/llvm-project?rev=42695&view=rev Log: Include DataTypes.h to provide intptr_t type. This fixes OpenBSD compilation of this file. Inspired by Laurence Tratt's patch Modified: llvm/trunk/include/llvm/Pass.h Modified: llvm/trunk/include/llvm/Pass.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Pass.h?rev=42695&r1=42694&r2=42695&view=diff == --- llvm/trunk/include/llvm/Pass.h (original) +++ llvm/trunk/include/llvm/Pass.h Sat Oct 6 08:07:11 2007 @@ -29,6 +29,7 @@ #ifndef LLVM_PASS_H #define LLVM_PASS_H +#include "llvm/Support/DataTypes.h" #include "llvm/Support/Streams.h" #include #include ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [test-suite] r42694 - in /test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm: config.h toast.c
Author: asl Date: Sat Oct 6 05:55:20 2007 New Revision: 42694 URL: http://llvm.org/viewvc/llvm-project?rev=42694&view=rev Log: Unbreak toast again for mingw32. Funny, but we have two toast's in in llvm-test. Maybe we should drop one? Modified: test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm/config.h test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm/toast.c Modified: test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm/config.h URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm/config.h?rev=42694&r1=42693&r2=42694&view=diff == --- test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm/config.h (original) +++ test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm/config.h Sat Oct 6 05:55:20 2007 @@ -18,8 +18,13 @@ /*efineHAS_ERRNO_DECL 1 /* errno.h declares errno */ #defineHAS_FSTAT 1 /* fstat syscall */ +#ifndef __MINGW32__ #defineHAS_FCHMOD 1 /* fchmod syscall */ #defineHAS_FCHOWN 1 /* fchown syscall */ +#else +#undef HAS_FCHMOD +#undef HAS_FCHOWN +#endif #defineHAS_STRING_H1 /* /usr/include/string.h */ /*efineHAS_STRINGS_H 1 /* /usr/include/strings.h */ Modified: test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm/toast.c URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm/toast.c?rev=42694&r1=42693&r2=42694&view=diff == --- test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm/toast.c (original) +++ test-suite/trunk/MultiSource/Benchmarks/MiBench/telecomm-gsm/toast.c Sat Oct 6 05:55:20 2007 @@ -339,7 +339,9 @@ #ifdef HAS_FCHOWN (void)fchown(fileno(out), instat.st_uid, instat.st_gid); #else +#ifndef __MINGW32__ (void)chown(outname, instat.st_uid, instat.st_gid); +#endif #endif /* HAS_FCHOWN */ } ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [test-suite] r42693 - in /test-suite/trunk/MultiSource/Benchmarks/mediabench/gsm/toast: config.h toast.c
Author: asl Date: Sat Oct 6 05:37:39 2007 New Revision: 42693 URL: http://llvm.org/viewvc/llvm-project?rev=42693&view=rev Log: Unbreak mediabench on mingw32 Modified: test-suite/trunk/MultiSource/Benchmarks/mediabench/gsm/toast/config.h test-suite/trunk/MultiSource/Benchmarks/mediabench/gsm/toast/toast.c Modified: test-suite/trunk/MultiSource/Benchmarks/mediabench/gsm/toast/config.h URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/mediabench/gsm/toast/config.h?rev=42693&r1=42692&r2=42693&view=diff == --- test-suite/trunk/MultiSource/Benchmarks/mediabench/gsm/toast/config.h (original) +++ test-suite/trunk/MultiSource/Benchmarks/mediabench/gsm/toast/config.h Sat Oct 6 05:37:39 2007 @@ -18,8 +18,13 @@ /*efineHAS_ERRNO_DECL 1 /* errno.h declares errno */ #defineHAS_FSTAT 1 /* fstat syscall */ +#ifndef __MINGW32__ #defineHAS_FCHMOD 1 /* fchmod syscall */ #defineHAS_FCHOWN 1 /* fchown syscall */ +#else +#undef HAS_FCHMOD +#undef HAS_FCHOWN +#endif #defineHAS_STRING_H1 /* /usr/include/string.h */ /*efineHAS_STRINGS_H 1 /* /usr/include/strings.h */ Modified: test-suite/trunk/MultiSource/Benchmarks/mediabench/gsm/toast/toast.c URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/mediabench/gsm/toast/toast.c?rev=42693&r1=42692&r2=42693&view=diff == --- test-suite/trunk/MultiSource/Benchmarks/mediabench/gsm/toast/toast.c (original) +++ test-suite/trunk/MultiSource/Benchmarks/mediabench/gsm/toast/toast.c Sat Oct 6 05:37:39 2007 @@ -338,8 +338,10 @@ if (!instat.st_nlink) return; /* couldn't stat in */ #ifdef HAS_FCHOWN (void)fchown(fileno(out), instat.st_uid, instat.st_gid); -#else +#else +#ifndef __MINGW32__ (void)chown(outname, instat.st_uid, instat.st_gid); +#endif #endif /* HAS_FCHOWN */ } ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r42692 - /llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Author: evancheng Date: Sat Oct 6 03:19:55 2007 New Revision: 42692 URL: http://llvm.org/viewvc/llvm-project?rev=42692&view=rev Log: Reapply 42677. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=42692&r1=42691&r2=42692&view=diff == --- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Sat Oct 6 03:19:55 2007 @@ -263,6 +263,7 @@ SDOperand visitLOAD(SDNode *N); SDOperand visitSTORE(SDNode *N); SDOperand visitINSERT_VECTOR_ELT(SDNode *N); +SDOperand visitEXTRACT_VECTOR_ELT(SDNode *N); SDOperand visitBUILD_VECTOR(SDNode *N); SDOperand visitCONCAT_VECTORS(SDNode *N); SDOperand visitVECTOR_SHUFFLE(SDNode *N); @@ -682,6 +683,7 @@ case ISD::LOAD: return visitLOAD(N); case ISD::STORE: return visitSTORE(N); case ISD::INSERT_VECTOR_ELT: return visitINSERT_VECTOR_ELT(N); + case ISD::EXTRACT_VECTOR_ELT: return visitEXTRACT_VECTOR_ELT(N); case ISD::BUILD_VECTOR: return visitBUILD_VECTOR(N); case ISD::CONCAT_VECTORS: return visitCONCAT_VECTORS(N); case ISD::VECTOR_SHUFFLE: return visitVECTOR_SHUFFLE(N); @@ -2907,9 +2909,8 @@ return DAG.getNode(ISD::BIT_CONVERT, VT, N0.getOperand(0)); // fold (conv (load x)) -> (load (conv*)x) - // If the resultant load doesn't need a higher alignment than the original! - if (ISD::isNON_EXTLoad(N0.Val) && N0.hasOneUse() && - ISD::isUNINDEXEDLoad(N0.Val) && + // If the resultant load doesn't need a higher alignment than the original! + if (ISD::isNormalLoad(N0.Val) && N0.hasOneUse() && TLI.isOperationLegal(ISD::LOAD, VT)) { LoadSDNode *LN0 = cast(N0); unsigned Align = TLI.getTargetMachine().getTargetData()-> @@ -3901,6 +3902,54 @@ return SDOperand(); } +SDOperand DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) { + SDOperand InVec = N->getOperand(0); + SDOperand EltNo = N->getOperand(1); + + // (vextract (v4f32 s2v (f32 load $addr)), 0) -> (f32 load $addr) + // (vextract (v4i32 bc (v4f32 s2v (f32 load $addr))), 0) -> (i32 load $addr) + if (isa(EltNo)) { +unsigned Elt = cast(EltNo)->getValue(); +bool NewLoad = false; +if (Elt == 0) { + MVT::ValueType VT = InVec.getValueType(); + MVT::ValueType EVT = MVT::getVectorElementType(VT); + MVT::ValueType LVT = EVT; + unsigned NumElts = MVT::getVectorNumElements(VT); + if (InVec.getOpcode() == ISD::BIT_CONVERT) { +MVT::ValueType BCVT = InVec.getOperand(0).getValueType(); +if (NumElts != MVT::getVectorNumElements(BCVT)) + return SDOperand(); +InVec = InVec.getOperand(0); +EVT = MVT::getVectorElementType(BCVT); +NewLoad = true; + } + if (InVec.getOpcode() == ISD::SCALAR_TO_VECTOR && + InVec.getOperand(0).getValueType() == EVT && + ISD::isNormalLoad(InVec.getOperand(0).Val) && + InVec.getOperand(0).hasOneUse()) { +LoadSDNode *LN0 = cast(InVec.getOperand(0)); +unsigned Align = LN0->getAlignment(); +if (NewLoad) { + // Check the resultant load doesn't need a higher alignment than the + // original load. + unsigned NewAlign = TLI.getTargetMachine().getTargetData()-> +getABITypeAlignment(MVT::getTypeForValueType(LVT)); + if (!TLI.isOperationLegal(ISD::LOAD, LVT) || NewAlign > Align) +return SDOperand(); + Align = NewAlign; +} + +return DAG.getLoad(LVT, LN0->getChain(), LN0->getBasePtr(), + LN0->getSrcValue(), LN0->getSrcValueOffset(), + LN0->isVolatile(), Align); + } +} + } + return SDOperand(); +} + + SDOperand DAGCombiner::visitBUILD_VECTOR(SDNode *N) { unsigned NumInScalars = N->getNumOperands(); MVT::ValueType VT = N->getValueType(0); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r42691 - /llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h
Author: evancheng Date: Sat Oct 6 03:09:29 2007 New Revision: 42691 URL: http://llvm.org/viewvc/llvm-project?rev=42691&view=rev Log: Oops. Forgot this. Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=42691&r1=42690&r2=42691&view=diff == --- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original) +++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Sat Oct 6 03:09:29 2007 @@ -1651,6 +1651,16 @@ }; namespace ISD { + /// isNormalLoad - Returns true if the specified node is a non-extending + /// and unindexed load. + inline bool isNormalLoad(const SDNode *N) { +if (N->getOpcode() != ISD::LOAD) + return false; +const LoadSDNode *Ld = cast(N); +return Ld->getExtensionType() == ISD::NON_EXTLOAD && + Ld->getAddressingMode() == ISD::UNINDEXED; + } + /// isNON_EXTLoad - Returns true if the specified node is a non-extending /// load. inline bool isNON_EXTLoad(const SDNode *N) { ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] [llvm] r42690 - /llvm/trunk/lib/Support/APFloat.cpp
Author: neil Date: Sat Oct 6 02:29:25 2007 New Revision: 42690 URL: http://llvm.org/viewvc/llvm-project?rev=42690&view=rev Log: Cleaner, more general exponent output. Modified: llvm/trunk/lib/Support/APFloat.cpp Modified: llvm/trunk/lib/Support/APFloat.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/APFloat.cpp?rev=42690&r1=42689&r2=42690&view=diff == --- llvm/trunk/lib/Support/APFloat.cpp (original) +++ llvm/trunk/lib/Support/APFloat.cpp Sat Oct 6 02:29:25 2007 @@ -252,32 +252,33 @@ return result; } - /* Write out a decimal exponent. */ + /* Write out an unsigned decimal integer. */ static char * - writeDecimalExponent (char *dst, int exponent) + writeUnsignedDecimal (char *dst, unsigned int n) { -assert (exponent >= -65536 && exponent <= 65535); +char buff[40], *p; -if (exponent < 0) { - *dst++ = '-'; - exponent = -exponent; -} - -if (exponent == 0) { - *dst++ = '0'; -} else { - char buff[12], *p; +p = buff; +do + *p++ = '0' + n % 10; +while (n /= 10); + +do + *dst++ = *--p; +while (p != buff); - p = buff; - while (exponent) { -*p++ = '0' + exponent % 10; -exponent /= 10; - } +return dst; + } - do -*dst++ = *--p; - while (p != buff); -} + /* Write out a signed decimal integer. */ + static char * + writeSignedDecimal (char *dst, int value) + { +if (value < 0) { + *dst++ = '-'; + dst = writeUnsignedDecimal(dst, -(unsigned) value); +} else + dst = writeUnsignedDecimal(dst, value); return dst; } @@ -1865,7 +1866,7 @@ /* Finally output the exponent. */ *dst++ = upperCase ? 'P': 'p'; - return writeDecimalExponent (dst, exponent); + return writeSignedDecimal (dst, exponent); } // For good performance it is desirable for different APFloats ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits