Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / Analysis / ScalarEvolution / sext-add-inreg-loop.ll
blob1345aa4e6411764d6459beada22e9df8fc3523fa
1 ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 2
2 ; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s
4 @.str = private unnamed_addr constant [3 x i8] c"%x\00", align 1
6 define dso_local i32 @test_loop(ptr nocapture noundef readonly %x) {
7 ; CHECK-LABEL: 'test_loop'
8 ; CHECK-NEXT:  Classifying expressions for: @test_loop
9 ; CHECK-NEXT:    %i.03 = phi i64 [ 1, %entry ], [ %inc, %for.body ]
10 ; CHECK-NEXT:    --> {1,+,1}<nuw><nsw><%for.body> U: [1,10) S: [1,10) Exits: 9 LoopDispositions: { %for.body: Computable }
11 ; CHECK-NEXT:    %conv = shl nuw nsw i64 %i.03, 32
12 ; CHECK-NEXT:    --> {4294967296,+,4294967296}<nuw><nsw><%for.body> U: [4294967296,38654705665) S: [4294967296,38654705665) Exits: 38654705664 LoopDispositions: { %for.body: Computable }
13 ; CHECK-NEXT:    %sext = add nsw i64 %conv, -4294967296
14 ; CHECK-NEXT:    --> {0,+,4294967296}<nuw><nsw><%for.body> U: [0,34359738369) S: [0,34359738369) Exits: 34359738368 LoopDispositions: { %for.body: Computable }
15 ; CHECK-NEXT:    %idxprom = ashr exact i64 %sext, 32
16 ; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%for.body> U: [0,9) S: [0,9) Exits: 8 LoopDispositions: { %for.body: Computable }
17 ; CHECK-NEXT:    %arrayidx = getelementptr inbounds i32, ptr %x, i64 %idxprom
18 ; CHECK-NEXT:    --> {%x,+,4}<nuw><%for.body> U: full-set S: full-set Exits: (32 + %x) LoopDispositions: { %for.body: Computable }
19 ; CHECK-NEXT:    %0 = load i32, ptr %arrayidx, align 4
20 ; CHECK-NEXT:    --> %0 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %for.body: Variant }
21 ; CHECK-NEXT:    %call = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %0)
22 ; CHECK-NEXT:    --> %call U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %for.body: Variant }
23 ; CHECK-NEXT:    %inc = add nuw nsw i64 %i.03, 1
24 ; CHECK-NEXT:    --> {2,+,1}<nuw><nsw><%for.body> U: [2,11) S: [2,11) Exits: 10 LoopDispositions: { %for.body: Computable }
25 ; CHECK-NEXT:  Determining loop execution counts for: @test_loop
26 ; CHECK-NEXT:  Loop %for.body: backedge-taken count is 8
27 ; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is 8
28 ; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is 8
29 ; CHECK-NEXT:  Loop %for.body: Predicated backedge-taken count is 8
30 ; CHECK-NEXT:   Predicates:
31 ; CHECK-NEXT:  Loop %for.body: Trip multiple is 9
33 entry:
34   br label %for.body
36 for.cond.cleanup:                                 ; preds = %for.body
37   ret i32 0
39 for.body:                                         ; preds = %entry, %for.body
40   %i.03 = phi i64 [ 1, %entry ], [ %inc, %for.body ]
41   %conv = shl nuw nsw i64 %i.03, 32
42   %sext = add nsw i64 %conv, -4294967296
43   %idxprom = ashr exact i64 %sext, 32
44   %arrayidx = getelementptr inbounds i32, ptr %x, i64 %idxprom
45   %0 = load i32, ptr %arrayidx, align 4
46   %call = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %0)
47   %inc = add nuw nsw i64 %i.03, 1
48   %exitcond.not = icmp eq i64 %inc, 10
49   br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
52 declare noundef i32 @printf(ptr nocapture noundef readonly, ...)