Skip to content

Commit fa3c083

Browse files
committed
Add test cases coming from #163108
1 parent e9a5d95 commit fa3c083

File tree

1 file changed

+160
-0
lines changed

1 file changed

+160
-0
lines changed

llvm/test/Transforms/InstCombine/binop-select.ll

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,3 +403,163 @@ define i32 @ashr_sel_op1_use(i1 %b) {
403403
%r = ashr i32 -2, %s
404404
ret i32 %r
405405
}
406+
407+
define i8 @commonArgWithOr0(i1 %arg0) {
408+
; CHECK-LABEL: @commonArgWithOr0(
409+
; CHECK-NEXT: [[V0:%.*]] = zext i1 [[ARG0:%.*]] to i8
410+
; CHECK-NEXT: [[V1:%.*]] = select i1 [[ARG0]], i8 0, i8 8
411+
; CHECK-NEXT: [[V2:%.*]] = or disjoint i8 [[V1]], [[V0]]
412+
; CHECK-NEXT: [[V3:%.*]] = or disjoint i8 [[V2]], 16
413+
; CHECK-NEXT: ret i8 [[V3]]
414+
;
415+
%v0 = zext i1 %arg0 to i8
416+
%v1 = select i1 %arg0, i8 0, i8 8
417+
%v2 = or i8 %v1, %v0
418+
%v3 = or i8 %v2, 16
419+
ret i8 %v3
420+
}
421+
422+
define i8 @commonArgWithOr1(i1 %arg0) {
423+
; CHECK-LABEL: @commonArgWithOr1(
424+
; CHECK-NEXT: [[V3:%.*]] = select i1 [[ARG0:%.*]], i8 17, i8 23
425+
; CHECK-NEXT: ret i8 [[V3]]
426+
;
427+
%v0 = zext i1 %arg0 to i8
428+
%v1 = select i1 %arg0, i8 1, i8 7
429+
%v2 = or i8 %v1, %v0
430+
%v3 = or i8 %v2, 16
431+
ret i8 %v3
432+
}
433+
434+
define i8 @commonArgWithOr2(i1 %arg0) {
435+
; CHECK-LABEL: @commonArgWithOr2(
436+
; CHECK-NEXT: [[V0:%.*]] = zext i1 [[ARG0:%.*]] to i8
437+
; CHECK-NEXT: [[V1:%.*]] = select i1 [[ARG0]], i8 5, i8 42
438+
; CHECK-NEXT: [[V2:%.*]] = or i8 [[V1]], [[V0]]
439+
; CHECK-NEXT: [[V3:%.*]] = or disjoint i8 [[V2]], 16
440+
; CHECK-NEXT: ret i8 [[V3]]
441+
;
442+
%v0 = zext i1 %arg0 to i8
443+
%v1 = select i1 %arg0, i8 21, i8 42
444+
%v2 = or i8 %v1, %v0
445+
%v3 = or i8 %v2, 16
446+
ret i8 %v3
447+
}
448+
449+
define i8 @commonArgWithAnd0(i1 %arg0) {
450+
; CHECK-LABEL: @commonArgWithAnd0(
451+
; CHECK-NEXT: ret i8 16
452+
;
453+
%v0 = zext i1 %arg0 to i8
454+
%v1 = select i1 %arg0, i8 0, i8 8
455+
%v2 = and i8 %v1, %v0
456+
%v3 = or i8 %v2, 16
457+
ret i8 %v3
458+
}
459+
460+
define i8 @commonArgWithAnd1(i1 %arg0) {
461+
; CHECK-LABEL: @commonArgWithAnd1(
462+
; CHECK-NEXT: ret i8 16
463+
;
464+
%v0 = zext i1 %arg0 to i8
465+
%v1 = select i1 %arg0, i8 8, i8 1
466+
%v2 = and i8 %v1, %v0
467+
%v3 = or i8 %v2, 16
468+
ret i8 %v3
469+
}
470+
471+
define i8 @commonArgWithAnd2(i1 %arg0) {
472+
; CHECK-LABEL: @commonArgWithAnd2(
473+
; CHECK-NEXT: [[V2:%.*]] = zext i1 [[ARG0:%.*]] to i8
474+
; CHECK-NEXT: [[V3:%.*]] = or disjoint i8 [[V2]], 16
475+
; CHECK-NEXT: ret i8 [[V3]]
476+
;
477+
%v0 = zext i1 %arg0 to i8
478+
%v1 = select i1 %arg0, i8 1, i8 7
479+
%v2 = and i8 %v1, %v0
480+
%v3 = or i8 %v2, 16
481+
ret i8 %v3
482+
}
483+
484+
define i8 @commonArgWithAnd3(i1 %arg0) {
485+
; CHECK-LABEL: @commonArgWithAnd3(
486+
; CHECK-NEXT: [[V2:%.*]] = zext i1 [[ARG0:%.*]] to i8
487+
; CHECK-NEXT: [[V3:%.*]] = or disjoint i8 [[V2]], 16
488+
; CHECK-NEXT: ret i8 [[V3]]
489+
;
490+
%v0 = zext i1 %arg0 to i8
491+
%v1 = select i1 %arg0, i8 21, i8 42
492+
%v2 = and i8 %v1, %v0
493+
%v3 = or i8 %v2, 16
494+
ret i8 %v3
495+
}
496+
497+
define i8 @commonArgWithXor0(i1 %arg0) {
498+
; CHECK-LABEL: @commonArgWithXor0(
499+
; CHECK-NEXT: [[V0:%.*]] = zext i1 [[ARG0:%.*]] to i8
500+
; CHECK-NEXT: [[V1:%.*]] = select i1 [[ARG0]], i8 0, i8 8
501+
; CHECK-NEXT: [[V2:%.*]] = or disjoint i8 [[V1]], [[V0]]
502+
; CHECK-NEXT: [[V3:%.*]] = or disjoint i8 [[V2]], 16
503+
; CHECK-NEXT: ret i8 [[V3]]
504+
;
505+
%v0 = zext i1 %arg0 to i8
506+
%v1 = select i1 %arg0, i8 0, i8 8
507+
%v2 = xor i8 %v1, %v0
508+
%v3 = or i8 %v2, 16
509+
ret i8 %v3
510+
}
511+
512+
define i8 @commonArgWithXor1(i1 %arg0) {
513+
; CHECK-LABEL: @commonArgWithXor1(
514+
; CHECK-NEXT: [[V0:%.*]] = zext i1 [[ARG0:%.*]] to i8
515+
; CHECK-NEXT: [[V1:%.*]] = select i1 [[ARG0]], i8 9, i8 1
516+
; CHECK-NEXT: [[V2:%.*]] = xor i8 [[V1]], [[V0]]
517+
; CHECK-NEXT: ret i8 [[V2]]
518+
;
519+
%v0 = zext i1 %arg0 to i8
520+
%v1 = select i1 %arg0, i8 9, i8 1
521+
%v2 = xor i8 %v1, %v0
522+
ret i8 %v2
523+
}
524+
525+
define i8 @commonArgWithXor2(i1 %arg0) {
526+
; CHECK-LABEL: @commonArgWithXor2(
527+
; CHECK-NEXT: [[V0:%.*]] = zext i1 [[ARG0:%.*]] to i8
528+
; CHECK-NEXT: [[V1:%.*]] = select i1 [[ARG0]], i8 1, i8 7
529+
; CHECK-NEXT: [[V2:%.*]] = xor i8 [[V1]], [[V0]]
530+
; CHECK-NEXT: [[V3:%.*]] = or disjoint i8 [[V2]], 16
531+
; CHECK-NEXT: ret i8 [[V3]]
532+
;
533+
%v0 = zext i1 %arg0 to i8
534+
%v1 = select i1 %arg0, i8 1, i8 7
535+
%v2 = xor i8 %v1, %v0
536+
%v3 = or i8 %v2, 16
537+
ret i8 %v3
538+
}
539+
540+
define i8 @commonArgWithXor3(i1 %arg0) {
541+
; CHECK-LABEL: @commonArgWithXor3(
542+
; CHECK-NEXT: [[V0:%.*]] = zext i1 [[ARG0:%.*]] to i8
543+
; CHECK-NEXT: [[V1:%.*]] = select i1 [[ARG0]], i8 5, i8 45
544+
; CHECK-NEXT: [[V2:%.*]] = xor i8 [[V1]], [[V0]]
545+
; CHECK-NEXT: [[V3:%.*]] = or disjoint i8 [[V2]], 16
546+
; CHECK-NEXT: ret i8 [[V3]]
547+
;
548+
%v0 = zext i1 %arg0 to i8
549+
%v1 = select i1 %arg0, i8 21, i8 45
550+
%v2 = xor i8 %v1, %v0
551+
%v3 = or i8 %v2, 16
552+
ret i8 %v3
553+
}
554+
555+
define i8 @commonArgWithAdd0(i1 %arg0) {
556+
; CHECK-LABEL: @commonArgWithAdd0(
557+
; CHECK-NEXT: [[V3:%.*]] = select i1 [[ARG0:%.*]], i8 22, i8 61
558+
; CHECK-NEXT: ret i8 [[V3]]
559+
;
560+
%v0 = zext i1 %arg0 to i8
561+
%v1 = select i1 %arg0, i8 21, i8 45
562+
%v2 = add i8 %v1, %v0
563+
%v3 = or i8 %v2, 16
564+
ret i8 %v3
565+
}

0 commit comments

Comments
 (0)