Robert Baruch via llvm-dev
2017-Nov-05 03:00 UTC
[llvm-dev] What pattern string corresponds to CopyToReg?
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>
Craig Topper via llvm-dev
2017-Nov-05 04:23 UTC
[llvm-dev] What pattern string corresponds to CopyToReg?
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 >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171104/1d361183/attachment.html>
Robert Baruch via llvm-dev
2017-Nov-05 04:56 UTC
[llvm-dev] What pattern string corresponds to CopyToReg?
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 >>> >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171105/73ce6bc1/attachment.html>