Mercurial > hg > CbC > CbC_llvm
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 |