<div dir="ltr">Hi Philip, thanks for the response. No, I don't need to vary the pseudo op -- I did follow the other intrinsics but what happens now (after tinkering some more) is that my instruction actually gets optimized out (after debugging by showing the selection dag after various rounds of optimization). It might help if I send a patch along -- I uploaded it to phabricator with a link to selectiondagbuilder.<div><br></div><div><a href="https://reviews.llvm.org/D27503#58aa05e8">https://reviews.llvm.org/D27503#58aa05e8</a><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Fri, Dec 2, 2016 at 5:35 PM Philip Reames <<a href="mailto:listmail@philipreames.com">listmail@philipreames.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000" class="gmail_msg">
<div class="m_7768144006507966684moz-cite-prefix gmail_msg">On 12/01/2016 04:01 PM, Louis Li via
llvm-dev wrote:<br class="gmail_msg">
</div>
<blockquote type="cite" class="gmail_msg">
<div dir="ltr" class="gmail_msg">
<div class="gmail_msg">Hi, I'm trying to implement a target-agnostic intrinsic,
first targeting X86. I'm trying to map the intrinsic SD node
to an instruction with a certain target opcode that I've
introduced. The issue that I'm running into is what the
correct way to lower the argument is. I've done a couple loops
on the docs so any help would be appreciated!</div>
</div>
</blockquote></div><div bgcolor="#FFFFFF" text="#000000" class="gmail_msg">
I'm really confused by the way you're asking the question. Assuming
you're adding code to SelectionDAGBuilder, handling the argument
should just be a getValue(Value*) call. Take a look at the lowering
for ctlz (or one of many other examples), how are your arguments
different than what's done here? Do you need to vary the psuedo op
emitted depending on the argument or something like that?<br class="gmail_msg">
<blockquote type="cite" class="gmail_msg"></blockquote></div><div bgcolor="#FFFFFF" text="#000000" class="gmail_msg"><blockquote type="cite" class="gmail_msg">
<div dir="ltr" class="gmail_msg">
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">Some options I've explored but have been missing some
crucial step/concept:</div>
<div class="gmail_msg">- tablegen matching?</div>
<div class="gmail_msg">- SelectionDAGBuilder.cpp + BuildMI call (but then this
runs into the issue of lowering the argument correctly - not
sure if that's feasible at this point in instruction
selection)</div>
<div class="gmail_msg">- X86ISelLowering -- same confusion as above</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">Here's how the dag currently looks (before erroring out,
since I haven't handled the intrinsic)</div>
<div class="gmail_msg"><a href="https://drive.google.com/file/d/0B5G4m_mQneSjRWQzRVltdDJOQnM/view?usp=sharing" class="gmail_msg" target="_blank">https://drive.google.com/file/d/0B5G4m_mQneSjRWQzRVltdDJOQnM/view?usp=sharing</a><br class="gmail_msg">
</div>
<div class="gmail_msg">Would it be problematic if I somehow extracted the pointer
address arg to the intrisic from TargetConstant and passed it
as MachineOperand to the MachineInstruction?</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">Opcode definition (Target/Target.td)<br class="gmail_msg">
</div>
<div class="gmail_msg">==============</div>
<div class="gmail_msg">
<div class="gmail_msg">+def PATCHABLE_LOG_CALL : Instruction {</div>
<div class="gmail_msg">+ let OutOperandList = (outs);</div>
<div class="gmail_msg">+ let InOperandList = (ins unknown:$entry);</div>
<div class="gmail_msg">+ let AsmString = "# XRay Custom Log.";</div>
<div class="gmail_msg">+ let usesCustomInserter = 1;</div>
<div class="gmail_msg">+ let hasSideEffects = 1;</div>
<div class="gmail_msg">+}</div>
</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">Example IR for the graph above</div>
<div class="gmail_msg">===========</div>
<div class="gmail_msg">define i32 @caller() nounwind noinline uwtable
"function-instrument"="xray-always" {</div>
<div class="gmail_msg"> %logentryptr = alloca i8</div>
<div class="gmail_msg"> call void @llvm.xray.customlog(i8* %logentryptr)</div>
<div class="gmail_msg"> ret i32 0</div>
<div class="gmail_msg">}</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">declare void @llvm.xray.customlog(i8*)</div>
</div>
<br class="gmail_msg">
<fieldset class="m_7768144006507966684mimeAttachmentHeader gmail_msg"></fieldset>
<br class="gmail_msg">
</blockquote></div><div bgcolor="#FFFFFF" text="#000000" class="gmail_msg"><blockquote type="cite" class="gmail_msg"><pre class="gmail_msg">_______________________________________________
LLVM Developers mailing list
<a class="m_7768144006507966684moz-txt-link-abbreviated gmail_msg" href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<a class="m_7768144006507966684moz-txt-link-freetext gmail_msg" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
</blockquote></div></blockquote></div>