Skip to content

Commit 133c225

Browse files
committed
[ValueTracking] Add pre-commit tests. NFC.
1 parent 13acb3a commit 133c225

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed

llvm/test/Transforms/InstCombine/known-bits.ll

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,5 +284,131 @@ exit:
284284
ret i8 %or2
285285
}
286286

287+
define i32 @test_icmp_trunc1(i32 %x){
288+
; CHECK-LABEL: @test_icmp_trunc1(
289+
; CHECK-NEXT: entry:
290+
; CHECK-NEXT: [[Y:%.*]] = trunc i32 [[X:%.*]] to i16
291+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i16 [[Y]], 7
292+
; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
293+
; CHECK: then:
294+
; CHECK-NEXT: [[Z:%.*]] = and i32 [[X]], 15
295+
; CHECK-NEXT: ret i32 [[Z]]
296+
; CHECK: else:
297+
; CHECK-NEXT: ret i32 0
298+
;
299+
entry:
300+
%y = trunc i32 %x to i16
301+
%cmp = icmp eq i16 %y, 7
302+
br i1 %cmp, label %then, label %else
303+
then:
304+
%z = and i32 %x, 15
305+
ret i32 %z
306+
else:
307+
ret i32 0
308+
}
309+
310+
define i64 @test_icmp_trunc2(i64 %x) {
311+
; CHECK-LABEL: @test_icmp_trunc2(
312+
; CHECK-NEXT: [[CONV:%.*]] = trunc i64 [[X:%.*]] to i32
313+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[CONV]], 12
314+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
315+
; CHECK: if.then:
316+
; CHECK-NEXT: [[SEXT:%.*]] = shl i64 [[X]], 32
317+
; CHECK-NEXT: [[RET:%.*]] = ashr exact i64 [[SEXT]], 32
318+
; CHECK-NEXT: ret i64 [[RET]]
319+
; CHECK: if.else:
320+
; CHECK-NEXT: ret i64 0
321+
;
322+
%conv = trunc i64 %x to i32
323+
%cmp = icmp sgt i32 %conv, 12
324+
br i1 %cmp, label %if.then, label %if.else
325+
326+
if.then:
327+
%sext = shl i64 %x, 32
328+
%ret = ashr exact i64 %sext, 32
329+
ret i64 %ret
330+
if.else:
331+
ret i64 0
332+
}
333+
334+
define i64 @test_icmp_trunc3(i64 %n) {
335+
; CHECK-LABEL: @test_icmp_trunc3(
336+
; CHECK-NEXT: entry:
337+
; CHECK-NEXT: [[CONV:%.*]] = trunc i64 [[N:%.*]] to i32
338+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[CONV]], 96
339+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
340+
; CHECK: if.then:
341+
; CHECK-NEXT: [[RET:%.*]] = and i64 [[N]], 4294967295
342+
; CHECK-NEXT: ret i64 [[RET]]
343+
; CHECK: if.else:
344+
; CHECK-NEXT: ret i64 0
345+
;
346+
entry:
347+
%conv = trunc i64 %n to i32
348+
%cmp = icmp ult i32 %conv, 96
349+
br i1 %cmp, label %if.then, label %if.else
350+
351+
if.then:
352+
%ret = and i64 %n, 4294967295
353+
ret i64 %ret
354+
355+
if.else:
356+
ret i64 0
357+
}
358+
359+
define i8 @test_icmp_trunc4(i64 %n) {
360+
; CHECK-LABEL: @test_icmp_trunc4(
361+
; CHECK-NEXT: [[CONV:%.*]] = trunc i64 [[N:%.*]] to i32
362+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[CONV]], 10
363+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
364+
; CHECK: if.then:
365+
; CHECK-NEXT: [[CONV2:%.*]] = trunc i64 [[N]] to i8
366+
; CHECK-NEXT: [[ADD:%.*]] = add i8 [[CONV2]], 48
367+
; CHECK-NEXT: ret i8 [[ADD]]
368+
; CHECK: if.else:
369+
; CHECK-NEXT: ret i8 0
370+
;
371+
%conv = trunc i64 %n to i32
372+
%cmp = icmp ult i32 %conv, 10
373+
br i1 %cmp, label %if.then, label %if.else
374+
375+
if.then:
376+
%conv2 = trunc i64 %n to i8
377+
%add = add i8 %conv2, 48
378+
ret i8 %add
379+
380+
if.else:
381+
ret i8 0
382+
}
383+
384+
define i64 @test_icmp_trunc5(i64 %n) {
385+
; CHECK-LABEL: @test_icmp_trunc5(
386+
; CHECK-NEXT: entry:
387+
; CHECK-NEXT: [[SHR:%.*]] = ashr i64 [[N:%.*]], 47
388+
; CHECK-NEXT: [[CONV1:%.*]] = trunc i64 [[SHR]] to i32
389+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[CONV1]], -13
390+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
391+
; CHECK: if.then:
392+
; CHECK-NEXT: [[AND:%.*]] = and i64 [[SHR]], 4294967295
393+
; CHECK-NEXT: [[NOT:%.*]] = xor i64 [[AND]], 4294967295
394+
; CHECK-NEXT: ret i64 [[NOT]]
395+
; CHECK: if.else:
396+
; CHECK-NEXT: ret i64 13
397+
;
398+
entry:
399+
%shr = ashr i64 %n, 47
400+
%conv1 = trunc i64 %shr to i32
401+
%cmp = icmp ugt i32 %conv1, -13
402+
br i1 %cmp, label %if.then, label %if.else
403+
404+
if.then:
405+
%and = and i64 %shr, 4294967295
406+
%not = xor i64 %and, 4294967295
407+
ret i64 %not
408+
409+
if.else:
410+
ret i64 13
411+
}
412+
287413
declare void @use(i1)
288414
declare void @sink(i8)

0 commit comments

Comments
 (0)