Skip to content

Commit cb4d6f2

Browse files
committed
[InstCombine] Pre-commit tests (NFC)
1 parent 4f663cc commit cb4d6f2

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed

llvm/test/Transforms/InstCombine/saturating-add-sub.ll

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2350,4 +2350,65 @@ define i8 @fold_add_umax_to_usub_multiuse(i8 %a) {
23502350
ret i8 %sel
23512351
}
23522352

2353+
define i32 @uadd_with_zext(i32 %x, i32 %y) {
2354+
; CHECK-LABEL: @uadd_with_zext(
2355+
; CHECK-NEXT: [[CONV:%.*]] = zext i32 [[X:%.*]] to i64
2356+
; CHECK-NEXT: [[CONV1:%.*]] = zext i32 [[Y:%.*]] to i64
2357+
; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i64 [[CONV]], [[CONV1]]
2358+
; CHECK-NEXT: [[COND1:%.*]] = call i64 @llvm.umin.i64(i64 [[ADD]], i64 4294967295)
2359+
; CHECK-NEXT: [[COND:%.*]] = trunc nuw i64 [[COND1]] to i32
2360+
; CHECK-NEXT: ret i32 [[COND]]
2361+
;
2362+
%conv = zext i32 %x to i64
2363+
%conv1 = zext i32 %y to i64
2364+
%add = add i64 %conv, %conv1
2365+
%cmp = icmp ugt i64 %add, 4294967295
2366+
%conv4 = trunc i64 %add to i32
2367+
%cond = select i1 %cmp, i32 -1, i32 %conv4
2368+
ret i32 %cond
2369+
}
2370+
2371+
define i32 @uadd_with_zext_multi_use(i32 %x, i32 %y) {
2372+
; CHECK-LABEL: @uadd_with_zext_multi_use(
2373+
; CHECK-NEXT: [[CONV:%.*]] = zext i32 [[X:%.*]] to i64
2374+
; CHECK-NEXT: [[CONV1:%.*]] = zext i32 [[Y:%.*]] to i64
2375+
; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i64 [[CONV]], [[CONV1]]
2376+
; CHECK-NEXT: [[TRUNCADD:%.*]] = trunc i64 [[ADD]] to i32
2377+
; CHECK-NEXT: call void @usei32(i32 [[TRUNCADD]])
2378+
; CHECK-NEXT: [[COND1:%.*]] = call i64 @llvm.umin.i64(i64 [[ADD]], i64 4294967295)
2379+
; CHECK-NEXT: [[COND:%.*]] = trunc nuw i64 [[COND1]] to i32
2380+
; CHECK-NEXT: ret i32 [[COND]]
2381+
;
2382+
%conv = zext i32 %x to i64
2383+
%conv1 = zext i32 %y to i64
2384+
%add = add i64 %conv, %conv1
2385+
%truncAdd = trunc i64 %add to i32
2386+
call void @usei32(i32 %truncAdd)
2387+
%cmp = icmp ugt i64 %add, 4294967295
2388+
%cond = select i1 %cmp, i32 -1, i32 %truncAdd
2389+
ret i32 %cond
2390+
}
2391+
2392+
define i32 @uadd_with_zext_neg_use(i32 %x, i32 %y) {
2393+
; CHECK-LABEL: @uadd_with_zext_neg_use(
2394+
; CHECK-NEXT: [[CONV:%.*]] = zext i32 [[X:%.*]] to i64
2395+
; CHECK-NEXT: [[CONV1:%.*]] = zext i32 [[Y:%.*]] to i64
2396+
; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i64 [[CONV]], [[CONV1]]
2397+
; CHECK-NEXT: call void @usei64(i64 [[ADD]])
2398+
; CHECK-NEXT: [[COND1:%.*]] = call i64 @llvm.umin.i64(i64 [[ADD]], i64 4294967295)
2399+
; CHECK-NEXT: [[COND:%.*]] = trunc nuw i64 [[COND1]] to i32
2400+
; CHECK-NEXT: ret i32 [[COND]]
2401+
;
2402+
%conv = zext i32 %x to i64
2403+
%conv1 = zext i32 %y to i64
2404+
%add = add i64 %conv, %conv1
2405+
call void @usei64(i64 %add)
2406+
%cmp = icmp ugt i64 %add, 4294967295
2407+
%conv4 = trunc i64 %add to i32
2408+
%cond = select i1 %cmp, i32 -1, i32 %conv4
2409+
ret i32 %cond
2410+
}
2411+
2412+
declare void @usei64(i64)
2413+
declare void @usei32(i32)
23532414
declare void @usei8(i8)

llvm/test/Transforms/InstCombine/uadd-with-overflow.ll

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,3 +147,41 @@ define { <2 x i32>, <2 x i1> } @fold_simple_splat_constant_with_or_fail(<2 x i32
147147
%b = tail call { <2 x i32>, <2 x i1> } @llvm.uadd.with.overflow.v2i32(<2 x i32> %a, <2 x i32> <i32 30, i32 30>)
148148
ret { <2 x i32>, <2 x i1> } %b
149149
}
150+
151+
define i32 @uadd_with_zext(i32 %x, i32 %y) {
152+
; CHECK-LABEL: @uadd_with_zext(
153+
; CHECK-NEXT: [[CONV:%.*]] = zext i32 [[X:%.*]] to i64
154+
; CHECK-NEXT: [[CONV1:%.*]] = zext i32 [[Y:%.*]] to i64
155+
; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i64 [[CONV]], [[CONV1]]
156+
; CHECK-NEXT: [[CMP:%.*]] = icmp samesign ugt i64 [[ADD]], 4294967295
157+
; CHECK-NEXT: [[COND:%.*]] = zext i1 [[CMP]] to i32
158+
; CHECK-NEXT: ret i32 [[COND]]
159+
;
160+
%conv = zext i32 %x to i64
161+
%conv1 = zext i32 %y to i64
162+
%add = add i64 %conv, %conv1
163+
%cmp = icmp ugt i64 %add, 4294967295
164+
%cond = zext i1 %cmp to i32
165+
ret i32 %cond
166+
}
167+
168+
define i32 @uadd_with_zext_neg_use(i32 %x, i32 %y) {
169+
; CHECK-LABEL: @uadd_with_zext_neg_use(
170+
; CHECK-NEXT: [[CONV:%.*]] = zext i32 [[X:%.*]] to i64
171+
; CHECK-NEXT: [[CONV1:%.*]] = zext i32 [[Y:%.*]] to i64
172+
; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i64 [[CONV]], [[CONV1]]
173+
; CHECK-NEXT: call void @usei64(i64 [[ADD]])
174+
; CHECK-NEXT: [[CMP:%.*]] = icmp samesign ugt i64 [[ADD]], 4294967295
175+
; CHECK-NEXT: [[COND:%.*]] = zext i1 [[CMP]] to i32
176+
; CHECK-NEXT: ret i32 [[COND]]
177+
;
178+
%conv = zext i32 %x to i64
179+
%conv1 = zext i32 %y to i64
180+
%add = add i64 %conv, %conv1
181+
call void @usei64(i64 %add)
182+
%cmp = icmp ugt i64 %add, 4294967295
183+
%cond = zext i1 %cmp to i32
184+
ret i32 %cond
185+
}
186+
187+
declare void @usei64(i64)

0 commit comments

Comments
 (0)