<div dir="ltr"><div>Hi!</div><div> </div><div>There is doc</div><div><a href="http://llvm.org/docs/WritingAnLLVMBackend.html">http://llvm.org/docs/WritingAnLLVMBackend.html</a><br>look for ComplexPattern:</div><div> </div>
<div>> def STrr  : F3_1< 3, 0b000100, (outs), (ins MEMrr:$addr, IntRegs:$src),<br>>                  "st $src, [$addr]", [(store i32:$src, ADDRrr:$addr)]>;<br>>ADDRrr is a memory mode that is also defined in SparcInstrInfo.td:<br>
>def ADDRrr : ComplexPattern<i32, 2, "SelectADDRrr", [], []>;</div><div> </div><div>Maybe ComplexPattern is what you want...</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Jun 7, 2014 at 12:04 PM, Ramin Guner <span dir="ltr"><<a href="mailto:webvlkn@gmail.com" target="_blank">webvlkn@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi all,<br><br>I  started to write an LLVM backend for custom CPU. I 
created XXXInstrInfo but there are some problems. I searched for it but I
 couldn't find anything. Can anyone help me?<br><br>include "XXXInstrFormats.td"<br>def simm16 : Operand<i32> {<br>    let DecoderMethod = "DecodeSimm16";<br>}<br>def mem : Operand<i32> {<br>

    let PrintMethod = "printMemOperand";<br>    let MIOperandInfo = (ops GPRegs, GPRegs);<br>    let EncoderMethod = "getMemEncoding";<br>}<br>def addr : ComplexPattern<i32, 2, "SelectAddr", [frameindex], [SDNPWantParent]>;<br>

 <br>def LDRAM : FG1<0b000001, (outs GPRegs:$dst), (ins mem:$src), "ldram $dst,$src", [(set GPRegs:$dst, (load addr:$src))]>;<br>def STRAM : FG1<0b000010, (outs), (ins GPRegs:$src, mem:$dst), "stram $dst,$src", [(store GPRegs:$src, addr:$dst)]>;<br>

def
 ADD : FG2<0b000000, (outs GPRegs:$dst), (ins GPRegs:$src1, 
GPRegs:$src2), "add $dst,$src1,$src2", [(set GPRegs:$dst, (add 
GPRegs:$src1, GPRegs:$src2))]>;<br><br>Error Message:<br>LDRAM: (set 
GPRegs:{i32:f32}:$dst, (ld:{i32:f32} 
addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)<br>Included from /home/jwon/Desktop/llvmTest/llvm-3.4/lib/Target/XXX/XXXOther.td:10:<br>Included from /home/jwon/Desktop/llvmTest/llvm-3.4/lib/Target/XXX/XXX.td:1:<br>

/home/jwon/Desktop/llvmTest/llvm-3.4/lib/Target/XXX/XXXInstrInfo.td:34:1: error: In LDRAM: Could not infer all types in pattern!<br>def LDRAM : FG1<0b000001, (outs GPRegs:$dst), (ins mem:$src), "ldram $dst,$src", [(set GPRegs:$dst, (load addr:$src))]>;<br>

^<br>STRAM: (st GPRegs:{i32:f32}:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>><br>Included from /home/jwon/Desktop/llvmTest/llvm-3.4/lib/Target/XXX/XXXOther.td:10:<br>Included from /home/jwon/Desktop/llvmTest/llvm-3.4/lib/Target/XXX/XXX.td:1:<br>

/home/jwon/Desktop/llvmTest/llvm-3.4/lib/Target/XXX/XXXInstrInfo.td:36:1: error: In STRAM: Could not infer all types in pattern!<br>def STRAM : FG1<0b000010, (outs), (ins GPRegs:$src, mem:$dst), "stram $dst,$src", [(store GPRegs:$src, addr:$dst)]>;<br>

^<br><br>Thanks in advance.<br><br><br></div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br></blockquote></div><br></div>