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

Robert Baruch via llvm-dev llvm-dev at lists.llvm.org
Sat Nov 4 20:00:01 PDT 2017


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171105/c703543e/attachment.html>


More information about the llvm-dev mailing list