120 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define i8 @shl_add_nuw(i8 %amt_in, i8 %cnt_in) {5; CHECK-LABEL: @shl_add_nuw(6; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], 637; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 28; CHECK-NEXT: [[R:%.*]] = shl nuw i8 [[AMT]], [[CNT]]9; CHECK-NEXT: ret i8 [[R]]10;11 %amt = and i8 %amt_in, 6312 %cnt = and i8 %cnt_in, 213 %r = shl i8 %amt, %cnt14 ret i8 %r15}16 17define i8 @shl_add_nuw_fail(i8 %amt_in, i8 %cnt_in) {18; CHECK-LABEL: @shl_add_nuw_fail(19; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], 6320; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 321; CHECK-NEXT: [[R:%.*]] = shl i8 [[AMT]], [[CNT]]22; CHECK-NEXT: ret i8 [[R]]23;24 %amt = and i8 %amt_in, 6325 %cnt = and i8 %cnt_in, 326 %r = shl i8 %amt, %cnt27 ret i8 %r28}29 30define i8 @shl_add_nuw_and_nsw(i8 %amt_in, i8 %cnt_in) {31; CHECK-LABEL: @shl_add_nuw_and_nsw(32; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], 3133; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 234; CHECK-NEXT: [[R:%.*]] = shl nuw nsw i8 [[AMT]], [[CNT]]35; CHECK-NEXT: ret i8 [[R]]36;37 %amt = and i8 %amt_in, 3138 %cnt = and i8 %cnt_in, 239 %r = shl i8 %amt, %cnt40 ret i8 %r41}42 43define i8 @shl_add_nsw(i8 %amt_in, i8 %cnt_in) {44; CHECK-LABEL: @shl_add_nsw(45; CHECK-NEXT: [[AMT:%.*]] = or i8 [[AMT_IN:%.*]], -3246; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 247; CHECK-NEXT: [[R:%.*]] = shl nsw i8 [[AMT]], [[CNT]]48; CHECK-NEXT: ret i8 [[R]]49;50 %amt = or i8 %amt_in, 22451 %cnt = and i8 %cnt_in, 252 %r = shl i8 %amt, %cnt53 ret i8 %r54}55 56define i8 @shl_add_nsw_fail(i8 %amt_in, i8 %cnt_in) {57; CHECK-LABEL: @shl_add_nsw_fail(58; CHECK-NEXT: [[AMT:%.*]] = or i8 [[AMT_IN:%.*]], -6459; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 260; CHECK-NEXT: [[R:%.*]] = shl i8 [[AMT]], [[CNT]]61; CHECK-NEXT: ret i8 [[R]]62;63 %amt = or i8 %amt_in, 19264 %cnt = and i8 %cnt_in, 265 %r = shl i8 %amt, %cnt66 ret i8 %r67}68 69define i8 @lshr_add_exact(i8 %amt_in, i8 %cnt_in) {70; CHECK-LABEL: @lshr_add_exact(71; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], -472; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 273; CHECK-NEXT: [[R:%.*]] = lshr exact i8 [[AMT]], [[CNT]]74; CHECK-NEXT: ret i8 [[R]]75;76 %amt = and i8 %amt_in, -477 %cnt = and i8 %cnt_in, 278 %r = lshr i8 %amt, %cnt79 ret i8 %r80}81 82define i8 @lshr_add_exact_fail(i8 %amt_in, i8 %cnt_in) {83; CHECK-LABEL: @lshr_add_exact_fail(84; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], -785; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 286; CHECK-NEXT: [[R:%.*]] = lshr i8 [[AMT]], [[CNT]]87; CHECK-NEXT: ret i8 [[R]]88;89 %amt = and i8 %amt_in, -790 %cnt = and i8 %cnt_in, 291 %r = lshr i8 %amt, %cnt92 ret i8 %r93}94 95define i8 @ashr_add_exact(i8 %amt_in, i8 %cnt_in) {96; CHECK-LABEL: @ashr_add_exact(97; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], -1498; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 199; CHECK-NEXT: [[R:%.*]] = ashr exact i8 [[AMT]], [[CNT]]100; CHECK-NEXT: ret i8 [[R]]101;102 %amt = and i8 %amt_in, -14103 %cnt = and i8 %cnt_in, 1104 %r = ashr i8 %amt, %cnt105 ret i8 %r106}107 108define i8 @ashr_add_exact_fail(i8 %amt_in, i8 %cnt_in) {109; CHECK-LABEL: @ashr_add_exact_fail(110; CHECK-NEXT: [[AMT:%.*]] = and i8 [[AMT_IN:%.*]], -14111; CHECK-NEXT: [[CNT:%.*]] = and i8 [[CNT_IN:%.*]], 2112; CHECK-NEXT: [[R:%.*]] = ashr i8 [[AMT]], [[CNT]]113; CHECK-NEXT: ret i8 [[R]]114;115 %amt = and i8 %amt_in, -14116 %cnt = and i8 %cnt_in, 2117 %r = ashr i8 %amt, %cnt118 ret i8 %r119}120