; RUN: llvm-as < %s | opt -disable-output -scalar-evolution -analyze \
; RUN:  | grep { -->  (sext i. \{.\*,+,.\*\}<bb1> to i64)} | count 5

; Don't convert (sext {...,+,...}) to {sext(...),+,sext(...)} in cases
; where the trip count is not within range.

target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
target triple = "x86_64-unknown-linux-gnu"

define void @foo0(double* nocapture %x) nounwind {
bb1.thread:
	br label %bb1

bb1:		; preds = %bb1, %bb1.thread
	%i.0.reg2mem.0 = phi i64 [ -128, %bb1.thread ], [ %8, %bb1 ]		; <i64> [#uses=3]
	%0 = trunc i64 %i.0.reg2mem.0 to i7		; <i8> [#uses=1]
	%1 = trunc i64 %i.0.reg2mem.0 to i9		; <i8> [#uses=1]
	%2 = sext i9 %1 to i64		; <i64> [#uses=1]
	%3 = getelementptr double* %x, i64 %2		; <double*> [#uses=1]
	%4 = load double* %3, align 8		; <double> [#uses=1]
	%5 = fmul double %4, 3.900000e+00		; <double> [#uses=1]
	%6 = sext i7 %0 to i64		; <i64> [#uses=1]
	%7 = getelementptr double* %x, i64 %6		; <double*> [#uses=1]
	store double %5, double* %7, align 8
	%8 = add i64 %i.0.reg2mem.0, 1		; <i64> [#uses=2]
	%9 = icmp sgt i64 %8, 127		; <i1> [#uses=1]
	br i1 %9, label %return, label %bb1

return:		; preds = %bb1
	ret void
}

define void @foo1(double* nocapture %x) nounwind {
bb1.thread:
	br label %bb1

bb1:		; preds = %bb1, %bb1.thread
	%i.0.reg2mem.0 = phi i64 [ -128, %bb1.thread ], [ %8, %bb1 ]		; <i64> [#uses=3]
	%0 = trunc i64 %i.0.reg2mem.0 to i8		; <i8> [#uses=1]
	%1 = trunc i64 %i.0.reg2mem.0 to i9		; <i8> [#uses=1]
	%2 = sext i9 %1 to i64		; <i64> [#uses=1]
	%3 = getelementptr double* %x, i64 %2		; <double*> [#uses=1]
	%4 = load double* %3, align 8		; <double> [#uses=1]
	%5 = fmul double %4, 3.900000e+00		; <double> [#uses=1]
	%6 = sext i8 %0 to i64		; <i64> [#uses=1]
	%7 = getelementptr double* %x, i64 %6		; <double*> [#uses=1]
	store double %5, double* %7, align 8
	%8 = add i64 %i.0.reg2mem.0, 1		; <i64> [#uses=2]
	%9 = icmp sgt i64 %8, 128		; <i1> [#uses=1]
	br i1 %9, label %return, label %bb1

return:		; preds = %bb1
	ret void
}

define void @foo2(double* nocapture %x) nounwind {
bb1.thread:
	br label %bb1

bb1:		; preds = %bb1, %bb1.thread
	%i.0.reg2mem.0 = phi i64 [ -129, %bb1.thread ], [ %8, %bb1 ]		; <i64> [#uses=3]
	%0 = trunc i64 %i.0.reg2mem.0 to i8		; <i8> [#uses=1]
	%1 = trunc i64 %i.0.reg2mem.0 to i9		; <i8> [#uses=1]
	%2 = sext i9 %1 to i64		; <i64> [#uses=1]
	%3 = getelementptr double* %x, i64 %2		; <double*> [#uses=1]
	%4 = load double* %3, align 8		; <double> [#uses=1]
	%5 = fmul double %4, 3.900000e+00		; <double> [#uses=1]
	%6 = sext i8 %0 to i64		; <i64> [#uses=1]
	%7 = getelementptr double* %x, i64 %6		; <double*> [#uses=1]
	store double %5, double* %7, align 8
	%8 = add i64 %i.0.reg2mem.0, 1		; <i64> [#uses=2]
	%9 = icmp sgt i64 %8, 127		; <i1> [#uses=1]
	br i1 %9, label %return, label %bb1

return:		; preds = %bb1
	ret void
}

define void @foo3(double* nocapture %x) nounwind {
bb1.thread:
	br label %bb1

bb1:		; preds = %bb1, %bb1.thread
	%i.0.reg2mem.0 = phi i64 [ -128, %bb1.thread ], [ %8, %bb1 ]		; <i64> [#uses=3]
	%0 = trunc i64 %i.0.reg2mem.0 to i8		; <i8> [#uses=1]
	%1 = trunc i64 %i.0.reg2mem.0 to i9		; <i8> [#uses=1]
	%2 = sext i9 %1 to i64		; <i64> [#uses=1]
	%3 = getelementptr double* %x, i64 %2		; <double*> [#uses=1]
	%4 = load double* %3, align 8		; <double> [#uses=1]
	%5 = fmul double %4, 3.900000e+00		; <double> [#uses=1]
	%6 = sext i8 %0 to i64		; <i64> [#uses=1]
	%7 = getelementptr double* %x, i64 %6		; <double*> [#uses=1]
	store double %5, double* %7, align 8
	%8 = add i64 %i.0.reg2mem.0, -1		; <i64> [#uses=2]
	%9 = icmp sgt i64 %8, 127		; <i1> [#uses=1]
	br i1 %9, label %return, label %bb1

return:		; preds = %bb1
	ret void
}
