Skip to content

Commit 195d278

Browse files
committed
[ValueTracking] Add tests for xor/disjoint or in getInvertibleOperands; NFC
1 parent 9c545a1 commit 195d278

File tree

1 file changed

+93
-1
lines changed
  • llvm/test/Transforms/InstSimplify

1 file changed

+93
-1
lines changed

llvm/test/Transforms/InstSimplify/icmp.ll

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,103 @@ define i1 @load_ptr(ptr %p) {
270270

271271
define i1 @load_ptr_null_valid(ptr %p) null_pointer_is_valid {
272272
; CHECK-LABEL: @load_ptr_null_valid(
273-
; CHECK-NEXT: [[LOAD_P:%.*]] = load ptr, ptr [[P:%.*]], align 8, !dereferenceable !0
273+
; CHECK-NEXT: [[LOAD_P:%.*]] = load ptr, ptr [[P:%.*]], align 8, !dereferenceable [[META0:![0-9]+]]
274274
; CHECK-NEXT: [[R:%.*]] = icmp ne ptr [[LOAD_P]], null
275275
; CHECK-NEXT: ret i1 [[R]]
276276
;
277277
%load_p = load ptr, ptr %p, !dereferenceable !{i64 8}
278278
%r = icmp ne ptr %load_p, null
279279
ret i1 %r
280280
}
281+
282+
define i1 @non_eq_disjoint_or_common_op(i8 %x, i8 %y, i8 %ww, i8 %a) {
283+
; CHECK-LABEL: @non_eq_disjoint_or_common_op(
284+
; CHECK-NEXT: [[W:%.*]] = add nuw i8 [[WW:%.*]], 1
285+
; CHECK-NEXT: [[Z:%.*]] = add i8 [[Y:%.*]], [[W]]
286+
; CHECK-NEXT: [[XY:%.*]] = or disjoint i8 [[X:%.*]], [[Y]]
287+
; CHECK-NEXT: [[XZ:%.*]] = or disjoint i8 [[X]], [[Z]]
288+
; CHECK-NEXT: [[AXY:%.*]] = add i8 [[A:%.*]], [[XY]]
289+
; CHECK-NEXT: [[AXZ:%.*]] = add i8 [[A]], [[XZ]]
290+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[AXY]], [[AXZ]]
291+
; CHECK-NEXT: ret i1 [[R]]
292+
;
293+
%w = add nuw i8 %ww, 1
294+
%z = add i8 %y, %w
295+
296+
%xy = or disjoint i8 %x, %y
297+
%xz = or disjoint i8 %x, %z
298+
299+
%axy = add i8 %a, %xy
300+
%axz = add i8 %a, %xz
301+
%r = icmp eq i8 %axy, %axz
302+
ret i1 %r
303+
}
304+
305+
define i1 @non_eq_disjoint_or_common_op_fail(i8 %x, i8 %y, i8 %ww, i8 %a) {
306+
; CHECK-LABEL: @non_eq_disjoint_or_common_op_fail(
307+
; CHECK-NEXT: [[W:%.*]] = add nuw i8 [[WW:%.*]], 1
308+
; CHECK-NEXT: [[Z:%.*]] = add i8 [[Y:%.*]], [[W]]
309+
; CHECK-NEXT: [[XY:%.*]] = or i8 [[X:%.*]], [[Y]]
310+
; CHECK-NEXT: [[XZ:%.*]] = or disjoint i8 [[X]], [[Z]]
311+
; CHECK-NEXT: [[AXY:%.*]] = add i8 [[A:%.*]], [[XY]]
312+
; CHECK-NEXT: [[AXZ:%.*]] = add i8 [[A]], [[XZ]]
313+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[AXY]], [[AXZ]]
314+
; CHECK-NEXT: ret i1 [[R]]
315+
;
316+
%w = add nuw i8 %ww, 1
317+
%z = add i8 %y, %w
318+
319+
%xy = or i8 %x, %y
320+
%xz = or disjoint i8 %x, %z
321+
322+
%axy = add i8 %a, %xy
323+
%axz = add i8 %a, %xz
324+
%r = icmp eq i8 %axy, %axz
325+
ret i1 %r
326+
}
327+
328+
define i1 @non_eq_xor_common_op(i8 %x, i8 %y, i8 %ww, i8 %a) {
329+
; CHECK-LABEL: @non_eq_xor_common_op(
330+
; CHECK-NEXT: [[W:%.*]] = add nuw i8 [[WW:%.*]], 1
331+
; CHECK-NEXT: [[Z:%.*]] = add i8 [[Y:%.*]], [[W]]
332+
; CHECK-NEXT: [[XY:%.*]] = xor i8 [[Y]], [[X:%.*]]
333+
; CHECK-NEXT: [[XZ:%.*]] = xor i8 [[X]], [[Z]]
334+
; CHECK-NEXT: [[AXY:%.*]] = add i8 [[A:%.*]], [[XY]]
335+
; CHECK-NEXT: [[AXZ:%.*]] = add i8 [[A]], [[XZ]]
336+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[AXY]], [[AXZ]]
337+
; CHECK-NEXT: ret i1 [[R]]
338+
;
339+
%w = add nuw i8 %ww, 1
340+
%z = add i8 %y, %w
341+
342+
%xy = xor i8 %y, %x
343+
%xz = xor i8 %x, %z
344+
345+
%axy = add i8 %a, %xy
346+
%axz = add i8 %a, %xz
347+
%r = icmp eq i8 %axy, %axz
348+
ret i1 %r
349+
}
350+
351+
define i1 @non_eq_xor_common_op_fail(i8 %x, i8 %y, i8 %ww, i8 %a) {
352+
; CHECK-LABEL: @non_eq_xor_common_op_fail(
353+
; CHECK-NEXT: [[W:%.*]] = add nsw i8 [[WW:%.*]], 1
354+
; CHECK-NEXT: [[Z:%.*]] = add i8 [[Y:%.*]], [[W]]
355+
; CHECK-NEXT: [[XY:%.*]] = xor i8 [[Y]], [[X:%.*]]
356+
; CHECK-NEXT: [[XZ:%.*]] = xor i8 [[X]], [[Z]]
357+
; CHECK-NEXT: [[AXY:%.*]] = add i8 [[A:%.*]], [[XY]]
358+
; CHECK-NEXT: [[AXZ:%.*]] = add i8 [[A]], [[XZ]]
359+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[AXY]], [[AXZ]]
360+
; CHECK-NEXT: ret i1 [[R]]
361+
;
362+
%w = add nsw i8 %ww, 1
363+
%z = add i8 %y, %w
364+
365+
%xy = xor i8 %y, %x
366+
%xz = xor i8 %x, %z
367+
368+
%axy = add i8 %a, %xy
369+
%axz = add i8 %a, %xz
370+
%r = icmp eq i8 %axy, %axz
371+
ret i1 %r
372+
}

0 commit comments

Comments
 (0)