xref: /aosp_15_r20/external/llvm/test/Transforms/IndVarSimplify/2002-09-09-PointerIndVar.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Induction variable pass is doing bad things with pointer induction vars,
2*9880d681SAndroid Build Coastguard Worker; trying to do arithmetic on them directly.
3*9880d681SAndroid Build Coastguard Worker;
4*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -indvars
5*9880d681SAndroid Build Coastguard Worker;
6*9880d681SAndroid Build Coastguard Workerdefine void @test(i32 %A, i32 %S, i8* %S.upgrd.1) {
7*9880d681SAndroid Build Coastguard Worker; <label>:0
8*9880d681SAndroid Build Coastguard Worker        br label %Loop
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard WorkerLoop:           ; preds = %Loop, %0
11*9880d681SAndroid Build Coastguard Worker        %PIV = phi i8* [ %S.upgrd.1, %0 ], [ %PIVNext.upgrd.3, %Loop ]          ; <i8*> [#uses=1]
12*9880d681SAndroid Build Coastguard Worker        %PIV.upgrd.2 = ptrtoint i8* %PIV to i64         ; <i64> [#uses=1]
13*9880d681SAndroid Build Coastguard Worker        %PIVNext = add i64 %PIV.upgrd.2, 8              ; <i64> [#uses=1]
14*9880d681SAndroid Build Coastguard Worker        %PIVNext.upgrd.3 = inttoptr i64 %PIVNext to i8*         ; <i8*> [#uses=1]
15*9880d681SAndroid Build Coastguard Worker        br label %Loop
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18