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