[llvm-dev] mysterious assert in SelectionDAGLegalize::LegalizeOp()
Lawerence, Peter via llvm-dev
llvm-dev at lists.llvm.org
Wed Oct 14 17:19:00 PDT 2015
I'm writing a new Target in 3.6.2, I'm getting this assert
src/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1166: void {anonymous}::SelectionDAGLegalize::LegalizeOp(llvm::SDNode*): Assertion `TLI.getTypeAction(*DAG.getContext(), Node->getValueType(i)) == TargetLowering::TypeLegal && "Unexpected illegal type!"' failed.
which gdb shows having come from
#4 0x0000000001afce5b in SelectionDAGLegalize::LegalizeOp (this=0x7fffffffd0f0, Node=0x3571be0)
I did my run with -debug-only=isel, so I got the output at the bottom,
the question is, why is Node=0x3571be0 being examined at all ?
in particular that Node got replaced (and deleted ?) a long time ago ?
that node's last appearance in the DAG was in the output titled
Optimized lowered selection DAG: BB#0 'foobar:entry'
and we are two phases later, in what would be titled
Legalized selection DAG: BB#2 'foobar:entry'
were we to finished the phase we're in,
0x3571be0: i8 = Constant<1> original, which got replaced, by CurDAG->LegalizeTypes(), with
0x3571690: i16 = Constant<1> replacement, but later CurDAG->Legalize() is somehow examining the original ???
TIA, Peter Lawrence.
FYI:
def SLL : FMT_I3 <0x7200, (outs datareg:$dst), (ins datareg:$rs1, i16imm:$imm),
"sll $dst,$rs1,$imm",
[(set i16:$dst, (shl i16:$rs1, i16:$imm))]>;
int foobar(int A)
{
return A << 1;
}
Optimized lowered selection DAG: BB#0 'foobar:entry'
SelectionDAG has 11 nodes:
0x35455b0: ch = EntryToken
0x35455b0: <multiple use>
0x3571360: i16 = Register %vreg0
0x3571470: i16,ch = CopyFromReg 0x35455b0, 0x3571360 [ORD=1]
0x3571e00: i16 = Register %R0
0x35455b0: <multiple use>
0x3571470: <multiple use>
0x3571580: i16 = FrameIndex<0>
0x35717a0: i16 = undef
0x35718b0: ch = store 0x35455b0, 0x3571470, 0x3571580, 0x35717a0 <ST2[%A.addr]> [ORD=3]
0x3571e00: <multiple use>
0x3571470: <multiple use>
0x3571be0: i8 = Constant<1>
0x3571cf0: i16 = shl 0x3571470, 0x3571be0 [ORD=5]
0x3571f10: ch,glue = CopyToReg 0x35718b0, 0x3571e00, 0x3571cf0 [ORD=6]
0x3571f10: <multiple use>
0x3571e00: <multiple use>
0x3571f10: <multiple use>
0x3572020: ch = XmcISD::RET 0x3571f10, 0x3571e00, 0x3571f10:1 [ORD=6]
Type-legalized selection DAG: BB#0 'foobar:entry'
SelectionDAG has 11 nodes:
0x35455b0: ch = EntryToken [ID=-3]
0x35455b0: <multiple use>
0x3571360: i16 = Register %vreg0 [ID=-3]
0x3571470: i16,ch = CopyFromReg 0x35455b0, 0x3571360 [ORD=1] [ID=-3]
0x3571e00: i16 = Register %R0 [ID=-3]
0x35455b0: <multiple use>
0x3571470: <multiple use>
0x3571580: i16 = FrameIndex<0> [ID=-3]
0x35717a0: i16 = undef [ID=-3]
0x35718b0: ch = store 0x35455b0, 0x3571470, 0x3571580, 0x35717a0 <ST2[%A.addr]> [ORD=3] [ID=-3]
0x3571e00: <multiple use>
0x3571470: <multiple use>
0x3571690: i16 = Constant<1> [ID=-3]
0x35719c0: i16 = shl 0x3571470, 0x3571690 [ORD=5] [ID=-3]
0x3571f10: ch,glue = CopyToReg 0x35718b0, 0x3571e00, 0x35719c0 [ORD=6] [ID=-3]
0x3571f10: <multiple use>
0x3571e00: <multiple use>
0x3571f10: <multiple use>
0x3572020: ch = XmcISD::RET 0x3571f10, 0x3571e00, 0x3571f10:1 [ORD=6] [ID=-3]
Optimized type-legalized selection DAG: BB#0 'foobar:entry'
SelectionDAG has 11 nodes:
0x35455b0: ch = EntryToken [ID=-3]
0x35455b0: <multiple use>
0x3571360: i16 = Register %vreg0 [ID=-3]
0x3571470: i16,ch = CopyFromReg 0x35455b0, 0x3571360 [ORD=1] [ID=-3]
0x3571e00: i16 = Register %R0 [ID=-3]
0x35455b0: <multiple use>
0x3571470: <multiple use>
0x3571580: i16 = FrameIndex<0> [ID=-3]
0x35717a0: i16 = undef [ID=-3]
0x35718b0: ch = store 0x35455b0, 0x3571470, 0x3571580, 0x35717a0 <ST2[%A.addr]> [ORD=3] [ID=-3]
0x3571e00: <multiple use>
0x3571470: <multiple use>
0x3571690: i16 = Constant<1> [ID=-3]
0x35719c0: i16 = shl 0x3571470, 0x3571690 [ORD=5] [ID=-3]
0x3571f10: ch,glue = CopyToReg 0x35718b0, 0x3571e00, 0x35719c0 [ORD=6] [ID=-3]
0x3571f10: <multiple use>
0x3571e00: <multiple use>
0x3571f10: <multiple use>
0x3572020: ch = XmcISD::RET 0x3571f10, 0x3571e00, 0x3571f10:1 [ORD=6] [ID=-3]
llc: /projects/Firmware/plawrenc/xllvm/llvm-3.6.2.src/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1166: void {anonymous}::SelectionDAGLegalize::LegalizeOp(llvm::SDNode*): Assertion `TLI.getTypeAction(*DAG.getContext(), Node->getValueType(i)) == TargetLowering::TypeLegal && "Unexpected illegal type!"' failed.
Program received signal SIGABRT, Aborted.
0x0000003d9f035c55 in raise () from /lib64/libc.so.6
(gdb) where
#0 0x0000003d9f035c55 in raise () from /lib64/libc.so.6
#1 0x0000003d9f037408 in abort () from /lib64/libc.so.6
#2 0x0000003d9f02e972 in __assert_fail_base () from /lib64/libc.so.6
#3 0x0000003d9f02ea22 in __assert_fail () from /lib64/libc.so.6
#4 0x0000000001afce5b in (anonymous namespace)::SelectionDAGLegalize::LegalizeOp (this=0x7fffffffd0f0, Node=0x3571be0)
at /projects/Firmware/plawrenc/xllvm/llvm-3.6.2.src/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1164
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151015/5fabdb24/attachment.html>
More information about the llvm-dev
mailing list