94 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=instcombine < %s | FileCheck %s3 4define i1 @sgt_3_impliesF_eq_2(i8 %x, i8 %y) {5; CHECK-LABEL: @sgt_3_impliesF_eq_2(6; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], 47; CHECK-NEXT: [[CMP21:%.*]] = icmp eq i8 [[Y:%.*]], [[X]]8; CHECK-NEXT: [[CMP2:%.*]] = select i1 [[CMP]], i1 [[CMP21]], i1 false9; CHECK-NEXT: ret i1 [[CMP2]]10;11 %cmp = icmp sgt i8 %x, 312 %sel = select i1 %cmp, i8 2, i8 %y13 %cmp2 = icmp eq i8 %sel, %x14 ret i1 %cmp215}16 17define i1 @sgt_3_impliesT_sgt_2(i8 %x, i8 %y) {18; CHECK-LABEL: @sgt_3_impliesT_sgt_2(19; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], 420; CHECK-NEXT: [[CMP21:%.*]] = icmp sgt i8 [[Y:%.*]], [[X]]21; CHECK-NEXT: [[CMP2:%.*]] = select i1 [[CMP]], i1 [[CMP21]], i1 false22; CHECK-NEXT: ret i1 [[CMP2]]23;24 %cmp = icmp sgt i8 %x, 325 %sel = select i1 %cmp, i8 2, i8 %y26 %cmp2 = icmp sgt i8 %sel, %x27 ret i1 %cmp228}29 30define i1 @sgt_x_impliesF_eq_smin_todo(i8 %x, i8 %y, i8 %z) {31; CHECK-LABEL: @sgt_x_impliesF_eq_smin_todo(32; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Z:%.*]]33; CHECK-NEXT: [[CMP21:%.*]] = icmp eq i8 [[Y:%.*]], [[X]]34; CHECK-NEXT: [[CMP2:%.*]] = select i1 [[CMP]], i1 [[CMP21]], i1 false35; CHECK-NEXT: ret i1 [[CMP2]]36;37 %cmp = icmp sgt i8 %x, %z38 %sel = select i1 %cmp, i8 -128, i8 %y39 %cmp2 = icmp eq i8 %sel, %x40 ret i1 %cmp241}42 43define i1 @slt_x_impliesT_ne_smin_todo(i8 %x, i8 %y, i8 %z) {44; CHECK-LABEL: @slt_x_impliesT_ne_smin_todo(45; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Z:%.*]]46; CHECK-NEXT: [[CMP21:%.*]] = icmp ne i8 [[Y:%.*]], [[X]]47; CHECK-NEXT: [[CMP2:%.*]] = select i1 [[CMP]], i1 true, i1 [[CMP21]]48; CHECK-NEXT: ret i1 [[CMP2]]49;50 %cmp = icmp slt i8 %x, %z51 %sel = select i1 %cmp, i8 127, i8 %y52 %cmp2 = icmp ne i8 %x, %sel53 ret i1 %cmp254}55 56define i1 @ult_x_impliesT_eq_umax_todo(i8 %x, i8 %y, i8 %z) {57; CHECK-LABEL: @ult_x_impliesT_eq_umax_todo(58; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[Z:%.*]], [[X:%.*]]59; CHECK-NEXT: [[CMP21:%.*]] = icmp ne i8 [[Y:%.*]], [[X]]60; CHECK-NEXT: [[CMP2:%.*]] = select i1 [[CMP]], i1 true, i1 [[CMP21]]61; CHECK-NEXT: ret i1 [[CMP2]]62;63 %cmp = icmp ugt i8 %z, %x64 %sel = select i1 %cmp, i8 255, i8 %y65 %cmp2 = icmp ne i8 %sel, %x66 ret i1 %cmp267}68 69define i1 @ult_1_impliesF_eq_1(i8 %x, i8 %y) {70; CHECK-LABEL: @ult_1_impliesF_eq_1(71; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[X:%.*]], 072; CHECK-NEXT: [[CMP21:%.*]] = icmp eq i8 [[Y:%.*]], [[X]]73; CHECK-NEXT: [[CMP2:%.*]] = select i1 [[CMP]], i1 [[CMP21]], i1 false74; CHECK-NEXT: ret i1 [[CMP2]]75;76 %cmp = icmp ult i8 %x, 177 %sel = select i1 %cmp, i8 1, i8 %y78 %cmp2 = icmp eq i8 %x, %sel79 ret i1 %cmp280}81 82define i1 @ugt_x_impliesF_eq_umin_todo(i8 %x, i8 %y, i8 %z) {83; CHECK-LABEL: @ugt_x_impliesF_eq_umin_todo(84; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[Z:%.*]], [[X:%.*]]85; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP]], i8 0, i8 [[Y:%.*]]86; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[X]], [[SEL]]87; CHECK-NEXT: ret i1 [[CMP2]]88;89 %cmp = icmp ugt i8 %z, %x90 %sel = select i1 %cmp, i8 0, i8 %y91 %cmp2 = icmp eq i8 %x, %sel92 ret i1 %cmp293}94