xref: /aosp_15_r20/external/llvm/test/Transforms/IndVarSimplify/signed-trip-count.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -indvars -S > %t
2*9880d681SAndroid Build Coastguard Worker; RUN: not grep sext %t
3*9880d681SAndroid Build Coastguard Worker; RUN: grep phi %t | count 1
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; Provide legal integer types.
6*9880d681SAndroid Build Coastguard Workertarget datalayout = "n8:16:32:64"
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdefine void @foo(i64* nocapture %x, i32 %n) nounwind {
10*9880d681SAndroid Build Coastguard Workerentry:
11*9880d681SAndroid Build Coastguard Worker	%tmp102 = icmp sgt i32 %n, 0		; <i1> [#uses=1]
12*9880d681SAndroid Build Coastguard Worker	br i1 %tmp102, label %bb.nph, label %return
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerbb.nph:		; preds = %entry
15*9880d681SAndroid Build Coastguard Worker	br label %bb
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerbb:		; preds = %bb7, %bb.nph
18*9880d681SAndroid Build Coastguard Worker	%i.01 = phi i32 [ %tmp6, %bb7 ], [ 0, %bb.nph ]		; <i32> [#uses=3]
19*9880d681SAndroid Build Coastguard Worker	%tmp1 = sext i32 %i.01 to i64		; <i64> [#uses=1]
20*9880d681SAndroid Build Coastguard Worker	%tmp4 = getelementptr i64, i64* %x, i32 %i.01		; <i64*> [#uses=1]
21*9880d681SAndroid Build Coastguard Worker	store i64 %tmp1, i64* %tmp4, align 8
22*9880d681SAndroid Build Coastguard Worker	%tmp6 = add i32 %i.01, 1		; <i32> [#uses=2]
23*9880d681SAndroid Build Coastguard Worker	br label %bb7
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerbb7:		; preds = %bb
26*9880d681SAndroid Build Coastguard Worker	%tmp10 = icmp slt i32 %tmp6, %n		; <i1> [#uses=1]
27*9880d681SAndroid Build Coastguard Worker	br i1 %tmp10, label %bb, label %bb7.return_crit_edge
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Workerbb7.return_crit_edge:		; preds = %bb7
30*9880d681SAndroid Build Coastguard Worker	br label %return
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerreturn:		; preds = %bb7.return_crit_edge, %entry
33*9880d681SAndroid Build Coastguard Worker	ret void
34*9880d681SAndroid Build Coastguard Worker}
35