xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-2012-01-11-ComparisonDAGCrash.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=arm64
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; The target lowering for integer comparisons was replacing some DAG nodes
4*9880d681SAndroid Build Coastguard Worker; during operation legalization, which resulted in dangling pointers,
5*9880d681SAndroid Build Coastguard Worker; cycles in DAGs, and eventually crashes.  This is the testcase for
6*9880d681SAndroid Build Coastguard Worker; one of those crashes. (rdar://10653656)
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine void @test(i1 zeroext %IsArrow) nounwind ssp align 2 {
9*9880d681SAndroid Build Coastguard Workerentry:
10*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %return, label %lor.lhs.false
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerlor.lhs.false:
13*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %return, label %if.end
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerif.end:
16*9880d681SAndroid Build Coastguard Worker  %tmp.i = load i64, i64* undef, align 8
17*9880d681SAndroid Build Coastguard Worker  %and.i.i.i = and i64 %tmp.i, -16
18*9880d681SAndroid Build Coastguard Worker  br i1 %IsArrow, label %if.else_crit_edge, label %if.end32
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerif.else_crit_edge:
21*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.end32, label %return
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerif.end32:
24*9880d681SAndroid Build Coastguard Worker  %0 = icmp ult i32 undef, 3
25*9880d681SAndroid Build Coastguard Worker  %1 = zext i64 %tmp.i to i320
26*9880d681SAndroid Build Coastguard Worker  %.pn.v = select i1 %0, i320 128, i320 64
27*9880d681SAndroid Build Coastguard Worker  %.pn = shl i320 %1, %.pn.v
28*9880d681SAndroid Build Coastguard Worker  %ins346392 = or i320 %.pn, 0
29*9880d681SAndroid Build Coastguard Worker  store i320 %ins346392, i320* undef, align 8
30*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %sw.bb.i.i, label %exit
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workersw.bb.i.i:
33*9880d681SAndroid Build Coastguard Worker  unreachable
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerexit:
36*9880d681SAndroid Build Coastguard Worker  unreachable
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerreturn:
39*9880d681SAndroid Build Coastguard Worker  ret void
40*9880d681SAndroid Build Coastguard Worker}
41