xref: /llvm-project/llvm/test/Transforms/LoopStrengthReduce/different-type-ivs.ll (revision cee313d288a4faf0355d76fb6e0e927e211d08a5)
1; RUN: opt < %s -loop-reduce -disable-output
2; Test to make sure that loop-reduce never crashes on IV's
3; with different types but identical strides.
4
5define void @foo() {
6entry:
7	br label %no_exit
8no_exit:		; preds = %no_exit, %entry
9	%indvar = phi i32 [ 0, %entry ], [ %indvar.next, %no_exit ]		; <i32> [#uses=3]
10	%indvar.upgrd.1 = trunc i32 %indvar to i16		; <i16> [#uses=1]
11	%X.0.0 = mul i16 %indvar.upgrd.1, 1234		; <i16> [#uses=1]
12	%tmp. = mul i32 %indvar, 1234		; <i32> [#uses=1]
13	%tmp.5 = sext i16 %X.0.0 to i32		; <i32> [#uses=1]
14	%tmp.3 = call i32 (...) @bar( i32 %tmp.5, i32 %tmp. )		; <i32> [#uses=0]
15	%tmp.0 = call i1 @pred( )		; <i1> [#uses=1]
16	%indvar.next = add i32 %indvar, 1		; <i32> [#uses=1]
17	br i1 %tmp.0, label %return, label %no_exit
18return:		; preds = %no_exit
19	ret void
20}
21
22declare i1 @pred()
23
24declare i32 @bar(...)
25
26