1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -S -indvars -loop-unroll | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; PR15570: SEGV: SCEV back-edge info invalid after dead code removal. 4*9880d681SAndroid Build Coastguard Worker; 5*9880d681SAndroid Build Coastguard Worker; Indvars creates a SCEV expression for the loop's back edge taken 6*9880d681SAndroid Build Coastguard Worker; count, then determines that the comparison is always true and 7*9880d681SAndroid Build Coastguard Worker; removes it. 8*9880d681SAndroid Build Coastguard Worker; 9*9880d681SAndroid Build Coastguard Worker; When loop-unroll asks for the expression, it contains a NULL 10*9880d681SAndroid Build Coastguard Worker; SCEVUnknkown (as a CallbackVH). 11*9880d681SAndroid Build Coastguard Worker; 12*9880d681SAndroid Build Coastguard Worker; forgetMemoizedResults should invalidate the backedge taken count expression. 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; CHECK: @test 15*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: phi 16*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: icmp 17*9880d681SAndroid Build Coastguard Worker; CHECK: ret void 18*9880d681SAndroid Build Coastguard Workerdefine void @test() { 19*9880d681SAndroid Build Coastguard Workerentry: 20*9880d681SAndroid Build Coastguard Worker %xor1 = xor i32 0, 1 21*9880d681SAndroid Build Coastguard Worker br label %b17 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerb17: 24*9880d681SAndroid Build Coastguard Worker br i1 undef, label %b22, label %b18 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerb18: 27*9880d681SAndroid Build Coastguard Worker %phi1 = phi i32 [ %add1, %b18 ], [ %xor1, %b17 ] 28*9880d681SAndroid Build Coastguard Worker %add1 = add nsw i32 %phi1, -1 29*9880d681SAndroid Build Coastguard Worker %cmp1 = icmp sgt i32 %add1, 0 30*9880d681SAndroid Build Coastguard Worker br i1 %cmp1, label %b18, label %b22 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerb22: 33*9880d681SAndroid Build Coastguard Worker ret void 34*9880d681SAndroid Build Coastguard Worker} 35