1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; The comparison uses the pre-inc value, which could lead LSR to 5*9880d681SAndroid Build Coastguard Worker; try to compute -INT64_MIN. 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; CHECK: movabsq $-9223372036854775808, %rax 8*9880d681SAndroid Build Coastguard Worker; CHECK: cmpq %rax, 9*9880d681SAndroid Build Coastguard Worker; CHECK: sete %al 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdeclare i64 @bar() 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerdefine i1 @foo() nounwind { 14*9880d681SAndroid Build Coastguard Workerentry: 15*9880d681SAndroid Build Coastguard Worker br label %for.cond.i 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerfor.cond.i: 18*9880d681SAndroid Build Coastguard Worker %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %for.cond.i ] 19*9880d681SAndroid Build Coastguard Worker %t = call i64 @bar() 20*9880d681SAndroid Build Coastguard Worker %indvar.next = add i64 %indvar, 1 21*9880d681SAndroid Build Coastguard Worker %s = icmp ne i64 %indvar.next, %t 22*9880d681SAndroid Build Coastguard Worker br i1 %s, label %for.cond.i, label %__ABContainsLabel.exit 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker__ABContainsLabel.exit: 25*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i64 %indvar, 9223372036854775807 26*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine void @func_37() noreturn nounwind readonly { 30*9880d681SAndroid Build Coastguard Workerentry: 31*9880d681SAndroid Build Coastguard Worker br label %for.body 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.inc8, %entry 34*9880d681SAndroid Build Coastguard Worker %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %for.inc8 ] 35*9880d681SAndroid Build Coastguard Worker %sub.i = add i64 undef, %indvar 36*9880d681SAndroid Build Coastguard Worker %cmp.i = icmp eq i64 %sub.i, -9223372036854775808 37*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.inc8, label %for.cond4 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerfor.cond4: ; preds = %for.cond4, %for.body 40*9880d681SAndroid Build Coastguard Worker br label %for.cond4 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerfor.inc8: ; preds = %for.body 43*9880d681SAndroid Build Coastguard Worker %indvar.next = add i64 %indvar, 1 44*9880d681SAndroid Build Coastguard Worker br label %for.body 45*9880d681SAndroid Build Coastguard Worker} 46