1*9880d681SAndroid Build Coastguard Worker; RUN: opt -indvars -S < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine void @infer_via_ranges(i32 *%arr, i32 %n) { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @infer_via_ranges 5*9880d681SAndroid Build Coastguard Worker entry: 6*9880d681SAndroid Build Coastguard Worker %first.itr.check = icmp sgt i32 %n, 0 7*9880d681SAndroid Build Coastguard Worker %start = sub i32 %n, 1 8*9880d681SAndroid Build Coastguard Worker br i1 %first.itr.check, label %loop, label %exit 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker loop: 11*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: loop: 12*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ %start, %entry ] , [ %idx.dec, %in.bounds ] 13*9880d681SAndroid Build Coastguard Worker %idx.dec = sub i32 %idx, 1 14*9880d681SAndroid Build Coastguard Worker %abc = icmp sge i32 %idx, 0 15*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %in.bounds, label %out.of.bounds 16*9880d681SAndroid Build Coastguard Worker br i1 %abc, label %in.bounds, label %out.of.bounds 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker in.bounds: 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: in.bounds: 20*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %arr, i32 %idx 21*9880d681SAndroid Build Coastguard Worker store i32 0, i32* %addr 22*9880d681SAndroid Build Coastguard Worker %next = icmp sgt i32 %idx.dec, -1 23*9880d681SAndroid Build Coastguard Worker br i1 %next, label %loop, label %exit 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker out.of.bounds: 26*9880d681SAndroid Build Coastguard Worker ret void 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker exit: 29*9880d681SAndroid Build Coastguard Worker ret void 30*9880d681SAndroid Build Coastguard Worker} 31