<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I have created the function prototype with the following code:<div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; "><span style="color: rgb(155, 0, 100); ">const</span> <span style="color: rgb(126, 29, 174); ">uintmax_t</span> methodNameSize = <span style="color: rgb(44, 0, 255); ">1024</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; color: rgb(174, 0, 15); "><span style="color: rgb(155, 0, 100); ">const</span><span style="color: rgb(0, 0, 0); "> </span><span style="color: rgb(155, 0, 100); ">char</span><span style="color: rgb(0, 0, 0); "> methodNameTemplate[] = </span>"llvm.memcpy.p0i%llu.p0i%llu.i%llu"<span style="color: rgb(0, 0, 0); ">;</span></div></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; "><span style="color: rgb(155, 0, 100); ">char</span> methodName[methodNameSize];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; min-height: 21px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; color: rgb(0, 134, 39); ">// Create the methodName.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; "><span style="color: rgb(71, 0, 133); ">memset</span>(methodName, <span style="color: rgb(44, 0, 255); ">0</span>, methodNameSize);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; "><span style="color: rgb(71, 0, 133); ">sprintf</span>(methodName, methodNameTemplate,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">        dstSize,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">        srcSize,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">        lengthSize);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; min-height: 21px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; color: rgb(0, 134, 39); ">// Search for the function or create it.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; "><span style="color: rgb(155, 0, 100); ">if</span>((function = <span style="color: rgb(71, 0, 133); ">LLVMGetNamedFunction</span>(module, methodName)) == <span style="color: rgb(155, 0, 100); ">NULL</span>) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">    <span style="color: rgb(126, 29, 174); ">LLVMTypeRef</span> paramTypes [] = {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">        dstType,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">        srcType,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">        lengthType,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; color: rgb(71, 0, 133); "><span style="color: rgb(0, 0, 0); ">        </span>LLVMInt32TypeInContext<span style="color: rgb(0, 0, 0); ">(context),</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; color: rgb(71, 0, 133); "><span style="color: rgb(0, 0, 0); ">        </span>LLVMInt1TypeInContext<span style="color: rgb(0, 0, 0); ">(context),</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">    };</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; min-height: 21px; ">    <br class="webkit-block-placeholder"></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; color: rgb(71, 0, 133); "><span style="color: rgb(0, 0, 0); ">    functionType = </span>LLVMFunctionType<span style="color: rgb(0, 0, 0); ">(</span>LLVMVoidTypeInContext<span style="color: rgb(0, 0, 0); ">(context),</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">                                    paramTypes, numberOfArguments, <span style="color: rgb(155, 0, 100); ">false</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; min-height: 21px; ">    <br class="webkit-block-placeholder"></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">    function = <span style="color: rgb(71, 0, 133); ">LLVMAddFunction</span>(module, methodName, functionType);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; color: rgb(71, 0, 133); "><span style="color: rgb(0, 0, 0); ">    </span>LLVMRemoveAttribute<span style="color: rgb(0, 0, 0); ">(</span>LLVMGetParam<span style="color: rgb(0, 0, 0); ">(function, </span><span style="color: rgb(44, 0, 255); ">0</span><span style="color: rgb(0, 0, 0); ">), </span>LLVMNoCaptureAttribute<span style="color: rgb(0, 0, 0); ">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; color: rgb(71, 0, 133); "><span style="color: rgb(0, 0, 0); ">    </span>LLVMRemoveAttribute<span style="color: rgb(0, 0, 0); ">(</span>LLVMGetParam<span style="color: rgb(0, 0, 0); ">(function, </span><span style="color: rgb(44, 0, 255); ">1</span><span style="color: rgb(0, 0, 0); ">), </span>LLVMNoCaptureAttribute<span style="color: rgb(0, 0, 0); ">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">}</div></div><div><br></div><div>And then invoked it with this:</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; color: rgb(126, 29, 174); ">LLVMValueRef<span style="color: rgb(0, 0, 0); "> args[] = {</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">        sourcePtr,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">        destinationPtr,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">        lengthInteger,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; color: rgb(71, 0, 133); "><span style="color: rgb(0, 0, 0); ">        </span>LLVMConstInt<span style="color: rgb(0, 0, 0); ">(</span>LLVMInt32TypeInContext<span style="color: rgb(0, 0, 0); ">(context), </span><span style="color: rgb(44, 0, 255); ">0</span><span style="color: rgb(0, 0, 0); ">, </span><span style="color: rgb(155, 0, 100); ">true</span><span style="color: rgb(0, 0, 0); ">),</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; color: rgb(71, 0, 133); "><span style="color: rgb(0, 0, 0); ">        </span>LLVMConstInt<span style="color: rgb(0, 0, 0); ">(</span>LLVMInt1TypeInContext<span style="color: rgb(0, 0, 0); ">(context), (</span><span style="color: rgb(155, 0, 100); ">unsigned</span><span style="color: rgb(0, 0, 0); "> </span><span style="color: rgb(155, 0, 100); ">long</span><span style="color: rgb(0, 0, 0); "> </span><span style="color: rgb(155, 0, 100); ">long</span><span style="color: rgb(0, 0, 0); ">)</span><span style="color: rgb(155, 0, 100); ">false</span><span style="color: rgb(0, 0, 0); ">, </span><span style="color: rgb(155, 0, 100); ">true</span><span style="color: rgb(0, 0, 0); ">),</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">    };</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; min-height: 21px; ">    <br class="webkit-block-placeholder"></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Menlo; ">    <span style="color: rgb(71, 0, 133); ">LLVMBuildCall</span>(builder, function, args, numberOfArguments, <span style="color: rgb(174, 0, 15); ">""</span>);</div></div><div><br></div><div><br></div><div>Then you end up with the following prototype:</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 32px; text-indent: -32px; font: normal normal normal 14px/normal Menlo; "><b>declare void @llvm.memcpy.p0i64.p0i64.i64(i64*, i64*, i64, i32, i1) nounwind</b></div></div><div><br></div><div>and this code will invoke the copy:</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 32px; text-indent: -32px; font: normal normal normal 14px/normal Menlo; "><b>reallocBlock:                                     ; preds = %entry</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 48px; text-indent: -48px; font: normal normal normal 14px/normal Menlo; "><b>  %5 = getelementptr inbounds %0* %0, i32 0, i32 2 ; <i64*> [#uses=1]</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 48px; text-indent: -48px; font: normal normal normal 14px/normal Menlo; "><b>  %6 = load i64* %5                               ; <i64> [#uses=1]</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 48px; text-indent: -48px; font: normal normal normal 14px/normal Menlo; "><b>  %7 = add i64 %6, 25                             ; <i64> [#uses=2]</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 48px; text-indent: -48px; font: normal normal normal 14px/normal Menlo; "><b>  %8 = getelementptr inbounds %0* %0, i32 0, i32 0 ; <i64**> [#uses=1]</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 48px; text-indent: -48px; font: normal normal normal 14px/normal Menlo; "><b>  %9 = load i64** %8                              ; <i64*> [#uses=1]</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 48px; text-indent: -48px; font: normal normal normal 14px/normal Menlo; "><b>  %10 = trunc i64 %7 to i32                       ; <i32> [#uses=1]</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 48px; text-indent: -48px; font: normal normal normal 14px/normal Menlo; "><b>  %mallocsize = mul i32 %10, ptrtoint (i64* getelementptr (i64* null, i32 1) to i32) ; <i32> [#uses=1]</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 48px; text-indent: -48px; font: normal normal normal 14px/normal Menlo; "><b>  %malloccall = tail call i8* @malloc(i32 %mallocsize) ; <i8*> [#uses=1]</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 48px; text-indent: -48px; font: normal normal normal 14px/normal Menlo; "><b>  %11 = bitcast i8* %malloccall to i64*           ; <i64*> [#uses=1]</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 48px; text-indent: -48px; font: normal normal normal 14px/normal Menlo; "><b>  call void @llvm.memcpy.p0i64.p0i64.i64(i64* %9, i64* %11, i64 %7, i32 0, i1 false)</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 48px; text-indent: -48px; font: normal normal normal 14px/normal Menlo; "><b>  br label %exit</b></div></div><div><br></div><div><br></div><div>Any ideas on what I am doing wrong here ?</div><div><br></div><div><div><br></div><div><br></div><div>On 07 Sep 2010, at 19:55, Eric Christopher wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><br>On Sep 7, 2010, at 8:03 AM, F van der Meeren wrote:<br><br><blockquote type="cite">Hello,<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">I have a question, what is wrong with the following code?<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">declare void @llvm.memcpy.p0i64.p0i64.i8(i64*, i64*, i8, i32, i1) nounwind<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">...<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">call void @llvm.memcpy.p0i64.p0i64.i8(i64* %19, i64* %21, i8 %17, i32 0, i1 false)<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">...<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">According to the compiler this is the error, but I seem to miss where exactly my fault is.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Intrinsic prototype has incorrect number of arguments!<br></blockquote><blockquote type="cite">void (i64*, i64*, i8, i32, i1)* @llvm.memcpy.p0i64.p0i64.i8<br></blockquote><blockquote type="cite"><br></blockquote><br>Something is wonky in the error message since it's the right number of arguments... in general.  I don't know that your prototype is correct.  What's the corresponding code?<br><br>Can you send the module on and whatever you did to construct it?<br><br>-eric<br><br><br></div></blockquote></div><br></body></html>