[llvm-commits] [llvm] r55570 - 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/vmcore.ml

Jim Grosbach grosbach at apple.com
Wed Sep 10 11:35:06 PDT 2008


I'm seeing build failures with this patch on OSX 10.5.4.

$ ocaml -version
The Objective Caml toplevel, version 3.10.0

Build excerpt:

llvm[4]: Compiling llvm_analysis.mli for Debug-Asserts build
llvm[4]: Compiling optimized llvm_analysis.ml for Debug-Asserts build
llvm[4]: Compiling llvm_analysis.ml for Debug-Asserts build
Corrupted compiled interface
/Volumes/jhg-data/grosbaj/build-roots/llvmCore.roots/llvmCore~obj/obj- 
llvm/Debug-Asserts/lib/ocaml/llvm_analysis.cmi
make[4]: *** [/Volumes/jhg-data/grosbaj/build-roots/llvmCore.roots/ 
llvmCore~obj/obj-llvm/bindings/ocaml/analysis/Debug-Asserts/ 
llvm_analysis.cmx] Error 2

I'm doing a clean build from ToT with no local patches.


On Aug 30, 2008, at 9:34 AM, Gordon Henriksen wrote:

> Author: gordon
> Date: Sat Aug 30 11:34:54 2008
> New Revision: 55570
>
> URL: http://llvm.org/viewvc/llvm-project?rev=55570&view=rev
> Log:
> PR2731: C and Ocaml bindings for setTailCall and isTailCall.
>
> Based on patch by Giorgos Korfiatis.
>
> 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=55570&r1=55569&r2=55570&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/bindings/ocaml/llvm/llvm.ml (original)
> +++ llvm/trunk/bindings/ocaml/llvm/llvm.ml Sat Aug 30 11:34:54 2008
> @@ -586,6 +586,10 @@
> external set_instruction_call_conv: int -> llvalue -> unit
>                                   = "llvm_set_instruction_call_conv"
>
> +(*--... Operations on call instructions  
> (only) .............................--*)
> +external is_tail_call : llvalue -> bool = "llvm_is_tail_call"
> +external set_tail_call : bool -> llvalue -> unit =  
> "llvm_set_tail_call"
> +
> (*--... Operations on phi  
> nodes ............................................--*)
> external add_incoming : (llvalue * llbasicblock) -> llvalue -> unit
>                       = "llvm_add_incoming"
>
> Modified: llvm/trunk/bindings/ocaml/llvm/llvm.mli
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.mli?rev=55570&r1=55569&r2=55570&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/bindings/ocaml/llvm/llvm.mli (original)
> +++ llvm/trunk/bindings/ocaml/llvm/llvm.mli Sat Aug 30 11:34:54 2008
> @@ -1126,6 +1126,17 @@
> external set_instruction_call_conv: int -> llvalue -> unit
>                                   = "llvm_set_instruction_call_conv"
>
> +(** {Operations on call instructions (only)} *)
> +
> +(** [is_tail_call ci] is [true] if the call instruction [ci] is  
> flagged as
> +    eligible for tail call optimization, [false] otherwise.
> +    See the method [llvm::CallInst::isTailCall]. *)
> +external is_tail_call : llvalue -> bool = "llvm_is_tail_call"
> +
> +(** [set_tail_call tc ci] flags the call instruction [ci] as  
> eligible for tail
> +    call optimization if [tc] is [true], clears otherwise.
> +    See the method [llvm::CallInst::setTailCall]. *)
> +external set_tail_call : bool -> llvalue -> unit =  
> "llvm_set_tail_call"
>
> (** {7 Operations on phi nodes} *)
>
>
> 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=55570&r1=55569&r2=55570&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c (original)
> +++ llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c Sat Aug 30 11:34:54  
> 2008
> @@ -733,6 +733,20 @@
>   return Val_unit;
> }
>
> +/*--... Operations on call instructions  
> (only) .............................--*/
> +
> +/* llvalue -> bool */
> +CAMLprim value llvm_is_tail_call(LLVMValueRef CallInst) {
> +  return Val_bool(LLVMIsTailCall(CallInst));
> +}
> +
> +/* bool -> llvalue -> unit */
> +CAMLprim value llvm_set_tail_call(value IsTailCall,
> +                                  LLVMValueRef CallInst) {
> +  LLVMSetTailCall(CallInst, Bool_val(IsTailCall));
> +  return Val_unit;
> +}
> +
> /*--... Operations on phi  
> nodes ............................................--*/
>
> /* (llvalue * llbasicblock) -> llvalue -> unit */
>
> Modified: llvm/trunk/include/llvm-c/Core.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/Core.h?rev=55570&r1=55569&r2=55570&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/include/llvm-c/Core.h (original)
> +++ llvm/trunk/include/llvm-c/Core.h Sat Aug 30 11:34:54 2008
> @@ -460,6 +460,10 @@
> void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
>                                 unsigned align);
>
> +/* Operations on call instructions (only) */
> +int LLVMIsTailCall(LLVMValueRef CallInst);
> +void LLVMSetTailCall(LLVMValueRef CallInst, int IsTailCall);
> +
> /* Operations on phi nodes */
> void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef  
> *IncomingValues,
>                      LLVMBasicBlockRef *IncomingBlocks, unsigned  
> Count);
>
> Modified: llvm/trunk/lib/VMCore/Core.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Core.cpp?rev=55570&r1=55569&r2=55570&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/VMCore/Core.cpp (original)
> +++ llvm/trunk/lib/VMCore/Core.cpp Sat Aug 30 11:34:54 2008
> @@ -963,6 +963,16 @@
>         ParamAttr::constructAlignmentFromInt(align)));
> }
>
> +/*--.. Operations on call instructions  
> (only) ..............................--*/
> +
> +int LLVMIsTailCall(LLVMValueRef Call) {
> +  return unwrap<CallInst>(Call)->isTailCall();
> +}
> +
> +void LLVMSetTailCall(LLVMValueRef Call, int isTailCall) {
> +  unwrap<CallInst>(Call)->setTailCall(isTailCall);
> +}
> +
> /*--.. Operations on phi  
> nodes .............................................--*/
>
> void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef  
> *IncomingValues,
>
> Modified: llvm/trunk/test/Bindings/Ocaml/vmcore.ml
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bindings/Ocaml/vmcore.ml?rev=55570&r1=55569&r2=55570&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/test/Bindings/Ocaml/vmcore.ml (original)
> +++ llvm/trunk/test/Bindings/Ocaml/vmcore.ml Sat Aug 30 11:34:54 2008
> @@ -979,11 +979,15 @@
>      * RUN: grep {Inst49.*extractelement.*Vec1.*P2} < %t.ll
>      * RUN: grep {Inst50.*insertelement.*Vec1.*P1.*P2} < %t.ll
>      * RUN: grep {Inst51.*shufflevector.*Vec1.*Vec2.*1.*1.*0.*0} <  
> %t.ll
> +     * RUN: grep {CallInst.*tail call} < %t.ll
>      *)
>     let ci = build_call fn [| p2; p1 |] "CallInst" atentry in
>     insist (CallConv.c = instruction_call_conv ci);
>     set_instruction_call_conv 63 ci;
>     insist (63 = instruction_call_conv ci);
> +    insist (not (is_tail_call ci));
> +    set_tail_call true ci;
> +    insist (is_tail_call ci);
>
>     let inst46 = build_icmp Icmp.Eq p1 p2 "Inst46" atentry in
>          ignore (build_select inst46 p1 p2 "Inst47" atentry);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list