<div dir="ltr"><div>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><br></div><div>Some options I've explored but have been missing some crucial step/concept:</div><div>- tablegen matching?</div><div>- 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>- X86ISelLowering -- same confusion as above</div><div><br></div><div>Here's how the dag currently looks (before erroring out, since I haven't handled the intrinsic)</div><div><a href="https://drive.google.com/file/d/0B5G4m_mQneSjRWQzRVltdDJOQnM/view?usp=sharing">https://drive.google.com/file/d/0B5G4m_mQneSjRWQzRVltdDJOQnM/view?usp=sharing</a><br></div><div>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><br></div><div>Opcode definition (Target/Target.td)<br></div><div>==============</div><div><div>+def PATCHABLE_LOG_CALL : Instruction {</div><div>+  let OutOperandList = (outs);</div><div>+  let InOperandList = (ins unknown:$entry);</div><div>+  let AsmString = "# XRay Custom Log.";</div><div>+  let usesCustomInserter = 1;</div><div>+  let hasSideEffects = 1;</div><div>+}</div></div><div><br></div><div>Example IR for the graph above</div><div>===========</div><div>define i32 @caller() nounwind noinline uwtable "function-instrument"="xray-always" {</div><div>    %logentryptr = alloca i8</div><div>    call void @llvm.xray.customlog(i8* %logentryptr)</div><div>    ret i32 0</div><div>}</div><div><br></div><div>declare void @llvm.xray.customlog(i8*)</div></div>