<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><div><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class="">Your opinion is very important, thank you very much. I want to ask you,</span></span> if there are some learning materials about how to add an trinsics in x86 or <span id="result_box" class="short_text" tabindex="-1" lang="en"><span class="">these are your accumulated experience. The documenmation(</span></span><span style="font-size: 13px;">Extending LLVM: Adding instructions, intrinsics, types, etc.</span><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class=""></span></span><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class=""> <a href="https://llvm.org/docs/ExtendingLLVM.html)" _src="https://llvm.org/docs/ExtendingLLVM.html)">https://llvm.org/docs/ExtendingLLVM.html)</a> doesn't tell </span></span><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class=""><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class="">much content£¬I think.</span></span> </span></span><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class=""></span></span></div><div><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class="">I still have a question which I hope you answer.</span></span></div><div><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class="">In X86Instrindo.td, I define the </span></span><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class=""><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class="">max_qb as fllowing<br></span></span></span></span></div><div><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class="">def max_qb : I<0xff,RawFrm, (outs  GR32:$Rd), (ins GR32:$src1,GR32:$src2),"max_qb\t $Rd ,$src1 $src2", []>,  OpSize32;<br></span></span></div><div>When I make the llvm,"Unexpected number of operands for RawFrm" <span id="result_box" class="short_text" tabindex="-1" lang="en"><span class="">appears.</span></span></div><div><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class="">How can I do to </span></span><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class=""><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class="">convert trinsics to binary instructions£¿</span></span></span></span></div><div><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class=""><span id="result_box" class="short_text" tabindex="-1" lang="en"><span class="">Thanks a lot.<br></span></span></span></span></div><br><br><div style="position:relative;zoom:1"></div><div id="divNeteaseMailCard"></div><br>At 2018-09-07 00:46:05, "Craig Topper" <craig.topper@gmail.com> wrote:<br> <blockquote id="isReplyContent" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><div dir="ltr"><div>Your builtin shouldn't use <span style="color:rgb(0,0,0);font-family:monospace;font-size:14px;white-space:pre-wrap">"V2iV2iV2i", V2i means it take a vector of two 32-bit integers. You just want "iii". You also don't need code in CGBuiltin.cpp if you have a GCCBuiltin name in Intrinsics.td.</span></div><div><span style="color:rgb(0,0,0);font-family:monospace;font-size:14px;white-space:pre-wrap"><br></span></div><div><span style="color:rgb(0,0,0);font-family:monospace;font-size:14px;white-space:pre-wrap">In your C code you need to call </span><span style="color:rgb(0,0,0);font-family:Arial;font-size:14px;white-space:pre-wrap">__builtin_x86_max_</span><span style="color:rgb(0,0,0);font-family:Arial;font-size:14px;white-space:pre-wrap">qb not </span><span style="color:rgb(0,0,0);font-family:Arial;font-size:14px;white-space:pre-wrap">int_x86_max_qb. </span><span style="color:rgb(0,0,0);font-family:Arial;font-size:14px;white-space:pre-wrap">int_x86_max_qb(really llvm.x86.max.qb) is the name in LLVM IR. Clang's C parser knows it as </span><span style="color:rgb(0,0,0);font-family:Arial;font-size:14px;white-space:pre-wrap">__builtin_x86_max_</span><span style="color:rgb(0,0,0);font-family:Arial;font-size:14px;white-space:pre-wrap">qb because that's the name in clangs BuiltinsX86.def.</span></div><div><br></div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Sep 6, 2018 at 4:19 AM ÉòÌìºÀ via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">Hi Everyone£¡<br><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span>I am a newbie at llvm. So the question may be </span></span><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span><span class="m_955447239092302440m"></span>fundamental but difficult to me.</span></span></div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span>I want to add an  trinsics in x86 and</span></span><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span> make the following changes.I want that max_qb can find the max </span></span><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span>of two Integers and return it. </span></span></div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span>In src/include/llvm/IR/</span></span>Intrinsics.td :<br>  let TargetPrefix = "x86" in {<br>      def int_x86_max_qb: GCCBuiltin<"__builtin_x86_max_qb">,<br>      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [<code class="m_955447239092302440language-cpp m_955447239092302440hljs">IntrNoMem</code>]>;<br>  }</div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">In src//tools/clang/include/clang/Basic/BuiltinsX86.def</div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><code class="m_955447239092302440hljs m_955447239092302440java"> TARGET_BUILTIN(__builtin_x86_max_qb, "V2iV2iV2i", "ncV:64:", "") //</code><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span>I don't know the meaning of these parameters, just write according to the add function.</span></span></div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">In src/tools/clang/lib/CodeGen/CGBuiltin.cpp. in function EmitX86BuiltinExpr</div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">  case X86::BI__builtin_x86_max_qb:{<br>     return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_max_qb));<br>  }<br>Then I do a simple test£¬just like this£º</div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">#include <stdlib.h><br>#include <stdio.h> <br>int main()<br>{<br>  int a, b, c;<br>  a=1;b=2;<br>  c = int_x86_max_qb(a, b); <br>}<br><code class="m_955447239092302440hljs m_955447239092302440java"></code></div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">When I use clang to <span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span> compile£¬there is a warning:implicit declaration of function 'int_x86_max_qb' is invalid in C99 [-Wimplicit-function-declaration].</span></span></div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span>So I add the </span></span><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span>definition in src/lib/Target/X86/X86InstrInfo.td</span></span></div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span>def MAX_QB : I<0xff,RawFrm, (outs  GR32:$Rd), (ins GR32:$src1,GR32:$src2),"max_qb \t $Rd $src1 $src2", []>,  OpSize32;</span></span></div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span>But it doesn't work.</span></span><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span>What should I do to make it correct? please tell me.Thanks.</span></span></span></span></div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span><br></span></span></span></span></div><div style="white-space:pre-wrap;color:rgb(0,0,0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><span id="m_955447239092302440result_box" class="m_955447239092302440short_text" lang="en"><span><br></span></span></div></div><br><br><span title="neteasefooter"><p><br> </p></span>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>
</blockquote></div><br><br><span title="neteasefooter"><p><br/> </p></span>