@@ -142,40 +142,42 @@ define i64 @test_normalization_failure_in_any_extend(ptr %i, i64 %i1, i8 %i25) {
142
142
; CHECK: loop.1.header:
143
143
; CHECK-NEXT: [[IV_1:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_1_NEXT:%.*]], [[LOOP_1_LATCH:%.*]] ]
144
144
; CHECK-NEXT: [[IV_2:%.*]] = phi i64 [ [[I1]], [[ENTRY]] ], [ [[TMP1:%.*]], [[LOOP_1_LATCH]] ]
145
+ ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[IV_2]], 2
145
146
; CHECK-NEXT: br label [[LOOP_2:%.*]]
146
147
; CHECK: loop.2:
147
148
; CHECK-NEXT: [[LSR_IV:%.*]] = phi i32 [ [[LSR_IV_NEXT:%.*]], [[LOOP_2]] ], [ 2, [[LOOP_1_HEADER]] ]
148
149
; CHECK-NEXT: [[LSR_IV_NEXT]] = add nsw i32 [[LSR_IV]], -1
149
150
; CHECK-NEXT: [[C_1:%.*]] = icmp sgt i32 [[LSR_IV_NEXT]], 0
150
151
; CHECK-NEXT: br i1 [[C_1]], label [[LOOP_2]], label [[LOOP_3_PREHEADER:%.*]]
151
152
; CHECK: loop.3.preheader:
152
- ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[IV_2]], 1
153
153
; CHECK-NEXT: br label [[LOOP_3:%.*]]
154
154
; CHECK: loop.3:
155
- ; CHECK-NEXT: [[LSR_IV5:%.*]] = phi i64 [ [[TMP0]] , [[LOOP_3_PREHEADER]] ], [ [[LSR_IV_NEXT6:%.*]], [[LOOP_3]] ]
155
+ ; CHECK-NEXT: [[LSR_IV5:%.*]] = phi i64 [ 0 , [[LOOP_3_PREHEADER]] ], [ [[LSR_IV_NEXT6:%.*]], [[LOOP_3]] ]
156
156
; CHECK-NEXT: [[LSR_IV1:%.*]] = phi i64 [ 2, [[LOOP_3_PREHEADER]] ], [ [[LSR_IV_NEXT2:%.*]], [[LOOP_3]] ]
157
157
; CHECK-NEXT: [[IV_5:%.*]] = phi i32 [ [[IV_5_NEXT:%.*]], [[LOOP_3]] ], [ 1, [[LOOP_3_PREHEADER]] ]
158
158
; CHECK-NEXT: [[IV_5_NEXT]] = add nsw i32 [[IV_5]], -1
159
159
; CHECK-NEXT: [[LSR:%.*]] = trunc i32 [[IV_5_NEXT]] to i8
160
160
; CHECK-NEXT: [[LSR_IV_NEXT2]] = add nsw i64 [[LSR_IV1]], -1
161
161
; CHECK-NEXT: [[TMP:%.*]] = trunc i64 [[LSR_IV_NEXT2]] to i32
162
- ; CHECK-NEXT: [[LSR_IV_NEXT6]] = add i64 [[LSR_IV5]], 1
162
+ ; CHECK-NEXT: [[LSR_IV_NEXT6]] = add nsw i64 [[LSR_IV5]], - 1
163
163
; CHECK-NEXT: [[C_2:%.*]] = icmp sgt i32 [[TMP]], 0
164
164
; CHECK-NEXT: br i1 [[C_2]], label [[LOOP_3]], label [[LOOP_1_LATCH]]
165
165
; CHECK: loop.1.latch:
166
166
; CHECK-NEXT: [[IV_1_NEXT]] = add nuw nsw i32 [[IV_1]], 1
167
- ; CHECK-NEXT: [[TMP1]] = add i64 [[LSR_IV_NEXT6 ]], 1
167
+ ; CHECK-NEXT: [[TMP1]] = sub i64 [[TMP0 ]], [[LSR_IV_NEXT6]]
168
168
; CHECK-NEXT: [[C_3:%.*]] = icmp eq i32 [[IV_1_NEXT]], 8
169
169
; CHECK-NEXT: br i1 [[C_3]], label [[EXIT:%.*]], label [[LOOP_1_HEADER]]
170
170
; CHECK: exit:
171
171
; CHECK-NEXT: call void @use.i32(i32 [[IV_5_NEXT]])
172
- ; CHECK-NEXT: call void @use(i64 [[LSR_IV_NEXT6]])
172
+ ; CHECK-NEXT: [[TMP2:%.*]] = add i64 [[IV_2]], 1
173
+ ; CHECK-NEXT: [[TMP3:%.*]] = sub i64 [[TMP2]], [[LSR_IV_NEXT6]]
174
+ ; CHECK-NEXT: call void @use(i64 [[TMP3]])
173
175
; CHECK-NEXT: call void @use(i64 [[LSR_IV_NEXT2]])
174
- ; CHECK-NEXT: [[TMP2 :%.*]] = udiv i32 [[IV_5_NEXT]], 53
175
- ; CHECK-NEXT: [[TMP3 :%.*]] = trunc i32 [[TMP2 ]] to i8
176
- ; CHECK-NEXT: [[TMP4 :%.*]] = mul i8 [[TMP3 ]], 53
177
- ; CHECK-NEXT: [[TMP5 :%.*]] = sub i8 [[LSR]], [[TMP4 ]]
178
- ; CHECK-NEXT: call void @use.i8(i8 [[TMP5 ]])
176
+ ; CHECK-NEXT: [[TMP4 :%.*]] = udiv i32 [[IV_5_NEXT]], 53
177
+ ; CHECK-NEXT: [[TMP5 :%.*]] = trunc i32 [[TMP4 ]] to i8
178
+ ; CHECK-NEXT: [[TMP6 :%.*]] = mul i8 [[TMP5 ]], 53
179
+ ; CHECK-NEXT: [[TMP7 :%.*]] = sub i8 [[LSR]], [[TMP6 ]]
180
+ ; CHECK-NEXT: call void @use.i8(i8 [[TMP7 ]])
179
181
; CHECK-NEXT: [[I26:%.*]] = xor i8 [[I25]], 5
180
182
; CHECK-NEXT: [[I27:%.*]] = zext i8 [[I26]] to i64
181
183
; CHECK-NEXT: ret i64 [[I27]]
0 commit comments