Skip to content

Commit a844e19

Browse files
committed
[ValueTracking] Add pre-commit tests. NFC.
1 parent 0c47363 commit a844e19

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
@@ -343,5 +343,131 @@ exit:
343343
ret i8 %or2
344344
}
345345

346+
define i32 @test_icmp_trunc1(i32 %x){
347+
; CHECK-LABEL: @test_icmp_trunc1(
348+
; CHECK-NEXT: entry:
349+
; CHECK-NEXT: [[Y:%.*]] = trunc i32 [[X:%.*]] to i16
350+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i16 [[Y]], 7
351+
; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
352+
; CHECK: then:
353+
; CHECK-NEXT: [[Z:%.*]] = and i32 [[X]], 15
354+
; CHECK-NEXT: ret i32 [[Z]]
355+
; CHECK: else:
356+
; CHECK-NEXT: ret i32 0
357+
;
358+
entry:
359+
%y = trunc i32 %x to i16
360+
%cmp = icmp eq i16 %y, 7
361+
br i1 %cmp, label %then, label %else
362+
then:
363+
%z = and i32 %x, 15
364+
ret i32 %z
365+
else:
366+
ret i32 0
367+
}
368+
369+
define i64 @test_icmp_trunc2(i64 %x) {
370+
; CHECK-LABEL: @test_icmp_trunc2(
371+
; CHECK-NEXT: [[CONV:%.*]] = trunc i64 [[X:%.*]] to i32
372+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[CONV]], 12
373+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
374+
; CHECK: if.then:
375+
; CHECK-NEXT: [[SEXT:%.*]] = shl i64 [[X]], 32
376+
; CHECK-NEXT: [[RET:%.*]] = ashr exact i64 [[SEXT]], 32
377+
; CHECK-NEXT: ret i64 [[RET]]
378+
; CHECK: if.else:
379+
; CHECK-NEXT: ret i64 0
380+
;
381+
%conv = trunc i64 %x to i32
382+
%cmp = icmp sgt i32 %conv, 12
383+
br i1 %cmp, label %if.then, label %if.else
384+
385+
if.then:
386+
%sext = shl i64 %x, 32
387+
%ret = ashr exact i64 %sext, 32
388+
ret i64 %ret
389+
if.else:
390+
ret i64 0
391+
}
392+
393+
define i64 @test_icmp_trunc3(i64 %n) {
394+
; CHECK-LABEL: @test_icmp_trunc3(
395+
; CHECK-NEXT: entry:
396+
; CHECK-NEXT: [[CONV:%.*]] = trunc i64 [[N:%.*]] to i32
397+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[CONV]], 96
398+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
399+
; CHECK: if.then:
400+
; CHECK-NEXT: [[RET:%.*]] = and i64 [[N]], 4294967295
401+
; CHECK-NEXT: ret i64 [[RET]]
402+
; CHECK: if.else:
403+
; CHECK-NEXT: ret i64 0
404+
;
405+
entry:
406+
%conv = trunc i64 %n to i32
407+
%cmp = icmp ult i32 %conv, 96
408+
br i1 %cmp, label %if.then, label %if.else
409+
410+
if.then:
411+
%ret = and i64 %n, 4294967295
412+
ret i64 %ret
413+
414+
if.else:
415+
ret i64 0
416+
}
417+
418+
define i8 @test_icmp_trunc4(i64 %n) {
419+
; CHECK-LABEL: @test_icmp_trunc4(
420+
; CHECK-NEXT: [[CONV:%.*]] = trunc i64 [[N:%.*]] to i32
421+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[CONV]], 10
422+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
423+
; CHECK: if.then:
424+
; CHECK-NEXT: [[CONV2:%.*]] = trunc i64 [[N]] to i8
425+
; CHECK-NEXT: [[ADD:%.*]] = add i8 [[CONV2]], 48
426+
; CHECK-NEXT: ret i8 [[ADD]]
427+
; CHECK: if.else:
428+
; CHECK-NEXT: ret i8 0
429+
;
430+
%conv = trunc i64 %n to i32
431+
%cmp = icmp ult i32 %conv, 10
432+
br i1 %cmp, label %if.then, label %if.else
433+
434+
if.then:
435+
%conv2 = trunc i64 %n to i8
436+
%add = add i8 %conv2, 48
437+
ret i8 %add
438+
439+
if.else:
440+
ret i8 0
441+
}
442+
443+
define i64 @test_icmp_trunc5(i64 %n) {
444+
; CHECK-LABEL: @test_icmp_trunc5(
445+
; CHECK-NEXT: entry:
446+
; CHECK-NEXT: [[SHR:%.*]] = ashr i64 [[N:%.*]], 47
447+
; CHECK-NEXT: [[CONV1:%.*]] = trunc i64 [[SHR]] to i32
448+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[CONV1]], -13
449+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
450+
; CHECK: if.then:
451+
; CHECK-NEXT: [[AND:%.*]] = and i64 [[SHR]], 4294967295
452+
; CHECK-NEXT: [[NOT:%.*]] = xor i64 [[AND]], 4294967295
453+
; CHECK-NEXT: ret i64 [[NOT]]
454+
; CHECK: if.else:
455+
; CHECK-NEXT: ret i64 13
456+
;
457+
entry:
458+
%shr = ashr i64 %n, 47
459+
%conv1 = trunc i64 %shr to i32
460+
%cmp = icmp ugt i32 %conv1, -13
461+
br i1 %cmp, label %if.then, label %if.else
462+
463+
if.then:
464+
%and = and i64 %shr, 4294967295
465+
%not = xor i64 %and, 4294967295
466+
ret i64 %not
467+
468+
if.else:
469+
ret i64 13
470+
}
471+
346472
declare void @use(i1)
347473
declare void @sink(i8)

0 commit comments

Comments
 (0)