You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I think the issue is that when searching for cycles we pre-insert the vector-building node into Visited (AArch64ISelLowering.cpp:10695). This has the effect of terminating the search if that node is seen, which isn't right because it can be part of a cycle.
The corresponding code in DAGCombiner.cpp inserts the base address, which I think is a performance optimization: since it's known to be a cycle-free predecessor of everything we care about we can stop looking if we see it. I think that's what we should be doing here too.
Extended Description
Reproduce with:
llc -march=aarch64 -mcpu=thunderxt88 < aarch64-sdag-cycle-reduced.ll
Full error message:
Detected cycle in SelectionDAG
Offending node:
t659: v4f32,i64,ch = AArch64ISD::LD1DUPpost<(load 4 from %ir.96)> t489, t460, t120
t460: i64,ch = load<(load 8 from %ir."&context.constants_ptr[]7")> t456, t2, undef:i64
t2: i64,ch = CopyFromReg t0, Register:i64 %7
t1: i64 = Register %7
t11: i64 = undef
t120: i64 = shl t118, Constant:i64<2>
t118: i64 = sign_extend t117
t117: i32 = extract_vector_elt t589, Constant:i64<0>
t589: v4i32 = and t584, t587
t584: v4i32 = AArch64ISD::VSHL t407, Constant:i32<2>
t407: v4i32 = add t582, t655
t582: v4i32 = AArch64ISD::VSHL t96, Constant:i32<1>
t96: v4i32 = bitcast t659
t659: v4f32,i64,ch = AArch64ISD::LD1DUPpost<(load 4 from %ir.96)> t489, t460, t120
The text was updated successfully, but these errors were encountered: