(original) (raw)
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@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@gmail.com> wrote:Do you have a pattern for loading an i16 immediate into a 16-bit register?\~CraigOn Sat, Nov 4, 2017 at 8:00 PM, Robert Baruch <robert.c.baruch@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 optnonedefine 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 = EntryTokent3: 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:1ISEL: Starting pattern match on root node: t4: ch = TMS9900ISD::Ret t3, Register:i16 %R5, t3:1Morphed node: t4: ch,glue = Retr Register:i16 %R5, t3ISEL: Match complete!Selecting: t3: ch,glue = CopyToReg t0, Register:i16 %R5, Constant:i16<127>Selecting: t2: i16 = Register %R5Selecting: t1: i16 = Constant<127>ISEL: Starting pattern match on root node: t1: i16 = Constant<127>Initial Opcode index to 0Match failed at index 0LLVM ERROR: Cannot select: t1: i16 = Constant<127>In function: my\_funcOn Sat, Nov 4, 2017 at 7:22 PM Craig Topper <craig.topper@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@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@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
--\~Craig
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
LLVM Developers mailing list
llvm-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Wei-Ren Chen (陳韋任)
Homepage: https://people.cs.nctu.edu.tw/\~chenwj
Homepage: https://people.cs.nctu.edu.tw/\~chenwj