[llvm-dev] What pattern string corresponds to CopyToReg?

陳韋任 via llvm-dev llvm-dev at lists.llvm.org
Sun Nov 5 01:22:16 PDT 2017


Try match your instruction with (set REG16:$dst, i16imm:$src). Just give it
a shot. :)

2017-11-05 12:56 GMT+08:00 Robert Baruch via llvm-dev <
llvm-dev at lists.llvm.org>:

> Well, that's the thing: I thought that was CopyToReg. I don't know what
> the name of the node is to load one value into a register, so I don't know
> how to construct such a pattern.
>
> On Sat, Nov 4, 2017 at 9:23 PM Craig Topper <craig.topper at gmail.com>
> wrote:
>
>> Do you have a pattern for loading an i16 immediate into a 16-bit register?
>>
>> ~Craig
>>
>> On Sat, Nov 4, 2017 at 8:00 PM, Robert Baruch <robert.c.baruch at gmail.com>
>> wrote:
>>
>>> Hmm, okay. Then what's the problem being reported here? I'm not sure
>>> what I'm supposed to do with "LLVM ERROR: Cannot select: t1: i16 =
>>> Constant<127>".BTW, the function is:
>>>
>>> ; ModuleID = 'return.c'
>>> source_filename = "return.c"
>>> target datalayout = "E-m:e-p:16:16:16-i1:16:16-i8:
>>> 16:16-i16:16:16-i32:16:16-i64:16:16-S16-n16"
>>> target triple = "tms9900"
>>>
>>> ; Function Attrs: noinline nounwind optnone
>>> define signext i16 @my_func() #0 {
>>> entry:
>>>   ret i16 127
>>> }
>>>
>>> ------- debug output --------
>>>
>>> Optimized legalized selection DAG: BB#0 'my_func:entry'
>>> SelectionDAG has 5 nodes:
>>>     t0: ch = EntryToken
>>>   t3: ch,glue = CopyToReg t0, Register:i16 %R5, Constant:i16<127>
>>>   t4: ch = TMS9900ISD::Ret t3, Register:i16 %R5, t3:1
>>>
>>> ===== Instruction selection begins: BB#0 'entry'
>>> Selecting: t4: ch = TMS9900ISD::Ret t3, Register:i16 %R5, t3:1
>>>
>>> ISEL: Starting pattern match on root node: t4: ch = TMS9900ISD::Ret t3,
>>> Register:i16 %R5, t3:1
>>>
>>>   Morphed node: t4: ch,glue = Retr Register:i16 %R5, t3
>>>
>>> ISEL: Match complete!
>>> Selecting: t3: ch,glue = CopyToReg t0, Register:i16 %R5,
>>> Constant:i16<127>
>>>
>>> Selecting: t2: i16 = Register %R5
>>>
>>> Selecting: t1: i16 = Constant<127>
>>>
>>> ISEL: Starting pattern match on root node: t1: i16 = Constant<127>
>>>
>>>   Initial Opcode index to 0
>>>   Match failed at index 0
>>> LLVM ERROR: Cannot select: t1: i16 = Constant<127>
>>> In function: my_func
>>>
>>>
>>> On Sat, Nov 4, 2017 at 7:22 PM Craig Topper <craig.topper at gmail.com>
>>> wrote:
>>>
>>>> CopyToReg is not handle by patterns. It should be passed through isel
>>>> unchanged. It’s part of a special list of ISD opcodes that don’t change in
>>>> SelectioDAGISel::SelectCodeCommon
>>>>
>>>> It will then be turned into a TargetOpcode::COPY in
>>>> InstrEmitter::EmitSpecialNode when the DAG is turned into MachineInstrs.
>>>>
>>>> On Sat, Nov 4, 2017 at 7:02 PM Robert Baruch via llvm-dev <
>>>> llvm-dev at lists.llvm.org> wrote:
>>>>
>>>>> So there's a DAG that looks like this in the debug output:
>>>>>
>>>>>   Selecting: t3: ch,glue = CopyToReg t0, Register:i16 %R5,
>>>>> Constant:i16<127>
>>>>>
>>>>> In the instruction selection phase, what pattern would that match?
>>>>> I've constructed this so far:
>>>>>
>>>>>   (??? REG16:$dst, i16imm:$src)
>>>>>
>>>>> but the problem is, I can't determine what to use as ???. There is an
>>>>> ISD::CopyToReg enum value, but I don't know how that translates to
>>>>> the string to use in the pattern.
>>>>>
>>>>> And more generally, how do I find out from a DAG diagram like the ones
>>>>> output by -view-isel-dags which node type corresponds to which
>>>>> pattern string?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> --Rob
>>>>>
>>>>> _______________________________________________
>>>>> LLVM Developers mailing list
>>>>> llvm-dev at lists.llvm.org
>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>>
>>>> --
>>>> ~Craig
>>>>
>>>
>>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>


-- 
Wei-Ren Chen (陳韋任)
Homepage: https://people.cs.nctu.edu.tw/~chenwj
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171105/307bbf20/attachment.html>


More information about the llvm-dev mailing list