comparison llvm/test/Transforms/IndVarSimplify/lftr-multi-exit.ll @ 173:0572611fdcc8 llvm10 llvm12

reorgnization done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 11:55:54 +0900
parents 1d019706d866
children 2e18cbf3894f
comparison
equal deleted inserted replaced
172:9fbae9c8bf63 173:0572611fdcc8
126 ; Note: This slightly odd form is what indvars itself produces for multiple 126 ; Note: This slightly odd form is what indvars itself produces for multiple
127 ; exits without a side effect between them. 127 ; exits without a side effect between them.
128 define void @compound_early_exit(i32 %n, i32 %m) { 128 define void @compound_early_exit(i32 %n, i32 %m) {
129 ; CHECK-LABEL: @compound_early_exit( 129 ; CHECK-LABEL: @compound_early_exit(
130 ; CHECK-NEXT: entry: 130 ; CHECK-NEXT: entry:
131 ; CHECK-NEXT: br label [[LOOP:%.*]] 131 ; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[M:%.*]], [[N:%.*]]
132 ; CHECK: loop: 132 ; CHECK-NEXT: [[UMIN:%.*]] = select i1 [[TMP0]], i32 [[M]], i32 [[N]]
133 ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LATCH:%.*]] ] 133 ; CHECK-NEXT: br label [[LOOP:%.*]]
134 ; CHECK-NEXT: [[EARLYCND:%.*]] = icmp ult i32 [[IV]], [[N:%.*]] 134 ; CHECK: loop:
135 ; CHECK-NEXT: [[EARLYCND2:%.*]] = icmp ult i32 [[IV]], [[M:%.*]] 135 ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LATCH:%.*]] ]
136 ; CHECK-NEXT: [[AND:%.*]] = and i1 [[EARLYCND]], [[EARLYCND2]] 136 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i32 [[IV]], [[UMIN]]
137 ; CHECK-NEXT: br i1 [[AND]], label [[LATCH]], label [[EXIT:%.*]] 137 ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LATCH]], label [[EXIT:%.*]]
138 ; CHECK: latch: 138 ; CHECK: latch:
139 ; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1 139 ; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
140 ; CHECK-NEXT: store volatile i32 [[IV]], i32* @A 140 ; CHECK-NEXT: store volatile i32 [[IV]], i32* @A
141 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i32 [[IV_NEXT]], 1000 141 ; CHECK-NEXT: [[EXITCOND1:%.*]] = icmp ne i32 [[IV_NEXT]], 1000
142 ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[EXIT]] 142 ; CHECK-NEXT: br i1 [[EXITCOND1]], label [[LOOP]], label [[EXIT]]
143 ; CHECK: exit: 143 ; CHECK: exit:
144 ; CHECK-NEXT: ret void 144 ; CHECK-NEXT: ret void
145 ; 145 ;
146 entry: 146 entry:
147 br label %loop 147 br label %loop