Skip to content

Commit 2646790

Browse files
committed
[ValueTracking] Add tests for xor/disjoint or in isKnownNonZero; NFC
1 parent 0c57a2e commit 2646790

File tree

1 file changed

+68
-0
lines changed
  • llvm/test/Transforms/InstSimplify

1 file changed

+68
-0
lines changed

llvm/test/Transforms/InstSimplify/icmp.ll

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,3 +356,71 @@ define i1 @non_eq_xor_common_op_fail(i8 %x, i8 %y, i8 %ww, i8 %a) {
356356
%r = icmp eq i8 %axy, %axz
357357
ret i1 %r
358358
}
359+
360+
define i1 @non_eq_disjoint_or(i8 %x, i8 %yy, i8 %w) {
361+
; CHECK-LABEL: @non_eq_disjoint_or(
362+
; CHECK-NEXT: [[Y:%.*]] = add nuw i8 [[YY:%.*]], 1
363+
; CHECK-NEXT: [[LHS:%.*]] = add i8 [[X:%.*]], [[W:%.*]]
364+
; CHECK-NEXT: [[VAL:%.*]] = or disjoint i8 [[Y]], [[W]]
365+
; CHECK-NEXT: [[RHS:%.*]] = add i8 [[X]], [[VAL]]
366+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[LHS]], [[RHS]]
367+
; CHECK-NEXT: ret i1 [[R]]
368+
;
369+
%y = add nuw i8 %yy, 1
370+
%lhs = add i8 %x, %w
371+
%val = or disjoint i8 %y, %w
372+
%rhs = add i8 %x, %val
373+
%r = icmp eq i8 %lhs, %rhs
374+
ret i1 %r
375+
}
376+
377+
define i1 @non_eq_or_fail(i8 %x, i8 %yy, i8 %w) {
378+
; CHECK-LABEL: @non_eq_or_fail(
379+
; CHECK-NEXT: [[Y:%.*]] = add nuw i8 [[YY:%.*]], 1
380+
; CHECK-NEXT: [[LHS:%.*]] = add i8 [[X:%.*]], [[W:%.*]]
381+
; CHECK-NEXT: [[VAL:%.*]] = or i8 [[Y]], [[W]]
382+
; CHECK-NEXT: [[RHS:%.*]] = add i8 [[X]], [[VAL]]
383+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[LHS]], [[RHS]]
384+
; CHECK-NEXT: ret i1 [[R]]
385+
;
386+
%y = add nuw i8 %yy, 1
387+
%lhs = add i8 %x, %w
388+
%val = or i8 %y, %w
389+
%rhs = add i8 %x, %val
390+
%r = icmp eq i8 %lhs, %rhs
391+
ret i1 %r
392+
}
393+
394+
define i1 @non_eq_xor(i8 %x, i8 %yy, i8 %w) {
395+
; CHECK-LABEL: @non_eq_xor(
396+
; CHECK-NEXT: [[Y:%.*]] = add nuw i8 [[YY:%.*]], 1
397+
; CHECK-NEXT: [[LHS:%.*]] = add i8 [[X:%.*]], [[W:%.*]]
398+
; CHECK-NEXT: [[VAL:%.*]] = xor i8 [[Y]], [[W]]
399+
; CHECK-NEXT: [[RHS:%.*]] = add i8 [[X]], [[VAL]]
400+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[LHS]], [[RHS]]
401+
; CHECK-NEXT: ret i1 [[R]]
402+
;
403+
%y = add nuw i8 %yy, 1
404+
%lhs = add i8 %x, %w
405+
%val = xor i8 %y, %w
406+
%rhs = add i8 %x, %val
407+
%r = icmp eq i8 %lhs, %rhs
408+
ret i1 %r
409+
}
410+
411+
define i1 @non_eq_xor_fail(i8 %x, i8 %yy, i8 %w) {
412+
; CHECK-LABEL: @non_eq_xor_fail(
413+
; CHECK-NEXT: [[Y:%.*]] = add nsw i8 [[YY:%.*]], 1
414+
; CHECK-NEXT: [[LHS:%.*]] = add i8 [[X:%.*]], [[W:%.*]]
415+
; CHECK-NEXT: [[VAL:%.*]] = xor i8 [[Y]], [[W]]
416+
; CHECK-NEXT: [[RHS:%.*]] = add i8 [[X]], [[VAL]]
417+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[LHS]], [[RHS]]
418+
; CHECK-NEXT: ret i1 [[R]]
419+
;
420+
%y = add nsw i8 %yy, 1
421+
%lhs = add i8 %x, %w
422+
%val = xor i8 %y, %w
423+
%rhs = add i8 %x, %val
424+
%r = icmp eq i8 %lhs, %rhs
425+
ret i1 %r
426+
}

0 commit comments

Comments
 (0)