annotate llvm/test/Transforms/IndVarSimplify/pr28705.ll @ 150:1d019706d866

LLVM10
author anatofuz
date Thu, 13 Feb 2020 15:10:13 +0900
parents
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
anatofuz
parents:
diff changeset
2 ; PR28705
anatofuz
parents:
diff changeset
3 ; RUN: opt < %s -indvars -S | FileCheck %s
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 ; Check IndVarSimplify doesn't replace external use of the induction var
anatofuz
parents:
diff changeset
6 ; "%inc.i.i" with "%.sroa.speculated + 1" because it is not profitable.
anatofuz
parents:
diff changeset
7 ;
anatofuz
parents:
diff changeset
8 ;
anatofuz
parents:
diff changeset
9 define void @foo(i32 %sub.ptr.div.i, i8* %ref.i1174) local_unnamed_addr {
anatofuz
parents:
diff changeset
10 ; CHECK-LABEL: @foo(
anatofuz
parents:
diff changeset
11 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
12 ; CHECK-NEXT: [[CMP_I1137:%.*]] = icmp ugt i32 [[SUB_PTR_DIV_I:%.*]], 3
anatofuz
parents:
diff changeset
13 ; CHECK-NEXT: [[DOTSROA_SPECULATED:%.*]] = select i1 [[CMP_I1137]], i32 3, i32 [[SUB_PTR_DIV_I]]
anatofuz
parents:
diff changeset
14 ; CHECK-NEXT: [[CMP6483126:%.*]] = icmp eq i32 [[DOTSROA_SPECULATED]], 0
anatofuz
parents:
diff changeset
15 ; CHECK-NEXT: br i1 [[CMP6483126]], label [[XZ_EXIT:%.*]], label [[FOR_BODY650_LR_PH:%.*]]
anatofuz
parents:
diff changeset
16 ; CHECK: for.body650.lr.ph:
anatofuz
parents:
diff changeset
17 ; CHECK-NEXT: br label [[FOR_BODY650:%.*]]
anatofuz
parents:
diff changeset
18 ; CHECK: loopexit:
anatofuz
parents:
diff changeset
19 ; CHECK-NEXT: [[INC_I_I_LCSSA:%.*]] = phi i32 [ [[INC_I_I:%.*]], [[FOR_BODY650]] ]
anatofuz
parents:
diff changeset
20 ; CHECK-NEXT: br label [[XZ_EXIT]]
anatofuz
parents:
diff changeset
21 ; CHECK: XZ.exit:
anatofuz
parents:
diff changeset
22 ; CHECK-NEXT: [[DB_SROA_9_0_LCSSA:%.*]] = phi i32 [ 1, [[ENTRY:%.*]] ], [ [[INC_I_I_LCSSA]], [[LOOPEXIT:%.*]] ]
anatofuz
parents:
diff changeset
23 ; CHECK-NEXT: br label [[END:%.*]]
anatofuz
parents:
diff changeset
24 ; CHECK: for.body650:
anatofuz
parents:
diff changeset
25 ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[FOR_BODY650_LR_PH]] ], [ [[INC655:%.*]], [[FOR_BODY650]] ]
anatofuz
parents:
diff changeset
26 ; CHECK-NEXT: [[IV2:%.*]] = phi i32 [ 1, [[FOR_BODY650_LR_PH]] ], [ [[INC_I_I]], [[FOR_BODY650]] ]
anatofuz
parents:
diff changeset
27 ; CHECK-NEXT: [[ARRAYIDX_I_I1105:%.*]] = getelementptr inbounds i8, i8* [[REF_I1174:%.*]], i32 [[IV2]]
anatofuz
parents:
diff changeset
28 ; CHECK-NEXT: store i8 7, i8* [[ARRAYIDX_I_I1105]], align 1
anatofuz
parents:
diff changeset
29 ; CHECK-NEXT: [[INC_I_I]] = add nuw nsw i32 [[IV2]], 1
anatofuz
parents:
diff changeset
30 ; CHECK-NEXT: [[INC655]] = add nuw nsw i32 [[IV]], 1
anatofuz
parents:
diff changeset
31 ; CHECK-NEXT: [[CMP648:%.*]] = icmp eq i32 [[INC655]], [[DOTSROA_SPECULATED]]
anatofuz
parents:
diff changeset
32 ; CHECK-NEXT: br i1 [[CMP648]], label [[LOOPEXIT]], label [[FOR_BODY650]]
anatofuz
parents:
diff changeset
33 ; CHECK: end:
anatofuz
parents:
diff changeset
34 ; CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
35 ;
anatofuz
parents:
diff changeset
36 entry:
anatofuz
parents:
diff changeset
37 %cmp.i1137 = icmp ugt i32 %sub.ptr.div.i, 3
anatofuz
parents:
diff changeset
38 %.sroa.speculated = select i1 %cmp.i1137, i32 3, i32 %sub.ptr.div.i
anatofuz
parents:
diff changeset
39 %cmp6483126 = icmp eq i32 %.sroa.speculated, 0
anatofuz
parents:
diff changeset
40 br i1 %cmp6483126, label %XZ.exit, label %for.body650.lr.ph
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 for.body650.lr.ph:
anatofuz
parents:
diff changeset
43 br label %for.body650
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 loopexit:
anatofuz
parents:
diff changeset
46 %inc.i.i.lcssa = phi i32 [ %inc.i.i, %for.body650 ]
anatofuz
parents:
diff changeset
47 br label %XZ.exit
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 XZ.exit:
anatofuz
parents:
diff changeset
50 %DB.sroa.9.0.lcssa = phi i32 [ 1, %entry ], [ %inc.i.i.lcssa, %loopexit ]
anatofuz
parents:
diff changeset
51 br label %end
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53 for.body650:
anatofuz
parents:
diff changeset
54 %iv = phi i32 [ 0, %for.body650.lr.ph ], [ %inc655, %for.body650 ]
anatofuz
parents:
diff changeset
55 %iv2 = phi i32 [ 1, %for.body650.lr.ph ], [ %inc.i.i, %for.body650 ]
anatofuz
parents:
diff changeset
56 %arrayidx.i.i1105 = getelementptr inbounds i8, i8* %ref.i1174, i32 %iv2
anatofuz
parents:
diff changeset
57 store i8 7, i8* %arrayidx.i.i1105, align 1
anatofuz
parents:
diff changeset
58 %inc.i.i = add i32 %iv2, 1
anatofuz
parents:
diff changeset
59 %inc655 = add i32 %iv, 1
anatofuz
parents:
diff changeset
60 %cmp648 = icmp eq i32 %inc655, %.sroa.speculated
anatofuz
parents:
diff changeset
61 br i1 %cmp648, label %loopexit, label %for.body650
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 end:
anatofuz
parents:
diff changeset
64 ret void
anatofuz
parents:
diff changeset
65 }