summaryrefslogtreecommitdiff
path: root/test/Transforms/IndVarsSimplify/complex-scev.ll
blob: 7d7e8a3562f3a514f2e4da46b0f1ccbf89253a4a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
; The i induction variable looks like a wrap-around, but it really is just
; a simple affine IV.  Make sure that indvars eliminates it.

; RUN: llvm-upgrade < %s | llvm-as | opt -indvars | llvm-dis | grep phi | count 1

void %foo() {
entry:
	br label %bb6

bb6:		; preds = %cond_true, %entry
	%j.0 = phi int [ 1, %entry ], [ %tmp5, %cond_true ]		; <int> [#uses=3]
	%i.0 = phi int [ 0, %entry ], [ %j.0, %cond_true ]		; <int> [#uses=1]
	%tmp7 = call int (...)* %foo2( )		; <int> [#uses=1]
	%tmp = setne int %tmp7, 0		; <bool> [#uses=1]
	br bool %tmp, label %cond_true, label %return

cond_true:		; preds = %bb6
	%tmp2 = call int (...)* %bar( int %i.0, int %j.0 )		; <int> [#uses=0]
	%tmp5 = add int %j.0, 1		; <int> [#uses=1]
	br label %bb6

return:		; preds = %bb6
	ret void
}

declare int %bar(...)

declare int %foo2(...)