brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · b50f957 Raw
138 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=aggressive-instcombine -S | FileCheck %s3 4define i1 @remove_shift_nuw_ab(i8 %a, i8 %b, i8 %s) {5; CHECK-LABEL: @remove_shift_nuw_ab(6; CHECK-NEXT:    [[OR:%.*]] = or i8 [[T:%.*]], [[B:%.*]]7; CHECK-NEXT:    [[IC:%.*]] = icmp eq i8 [[OR]], 08; CHECK-NEXT:    ret i1 [[IC]]9;10  %t = shl nuw i8 %a, %s11  %or = or i8 %t, %b12  %ic = icmp eq i8 %or, 013  ret i1 %ic14}15 16define i1 @remove_shift_nuw_ba(i8 %a, i8 %b, i8 %s) {17; CHECK-LABEL: @remove_shift_nuw_ba(18; CHECK-NEXT:    [[OR:%.*]] = or i8 [[B:%.*]], [[T:%.*]]19; CHECK-NEXT:    [[IC:%.*]] = icmp eq i8 [[OR]], 020; CHECK-NEXT:    ret i1 [[IC]]21;22  %t = shl nuw i8 %a, %s23  %or = or i8 %b, %t24  %ic = icmp eq i8 %or, 025  ret i1 %ic26}27 28define i1 @remove_shift_nsw(i8 %a, i8 %b, i8 %s) {29; CHECK-LABEL: @remove_shift_nsw(30; CHECK-NEXT:    [[OR:%.*]] = or i8 [[T:%.*]], [[B:%.*]]31; CHECK-NEXT:    [[IC:%.*]] = icmp eq i8 [[OR]], 032; CHECK-NEXT:    ret i1 [[IC]]33;34  %t = shl nsw i8 %a, %s35  %or = or i8 %t, %b36  %ic = icmp eq i8 %or, 037  ret i1 %ic38}39 40define i1 @remove_shift_nuw_ne(i8 %a, i8 %b, i8 %s) {41; CHECK-LABEL: @remove_shift_nuw_ne(42; CHECK-NEXT:    [[OR:%.*]] = or i8 [[T:%.*]], [[B:%.*]]43; CHECK-NEXT:    [[IC:%.*]] = icmp eq i8 [[OR]], 044; CHECK-NEXT:    ret i1 [[IC]]45;46  %t = shl nuw i8 %a, %s47  %or = or i8 %t, %b48  %ic = icmp eq i8 %or, 049  ret i1 %ic50}51 52define i1 @remove_shift_nsw_ne(i8 %a, i8 %b, i8 %s) {53; CHECK-LABEL: @remove_shift_nsw_ne(54; CHECK-NEXT:    [[OR:%.*]] = or i8 [[T:%.*]], [[B:%.*]]55; CHECK-NEXT:    [[IC:%.*]] = icmp eq i8 [[OR]], 056; CHECK-NEXT:    ret i1 [[IC]]57;58  %t = shl nsw i8 %a, %s59  %or = or i8 %t, %b60  %ic = icmp eq i8 %or, 061  ret i1 %ic62}63 64define i1 @remove_shift_wraps(i8 %a, i8 %b, i8 %s) {65; CHECK-LABEL: @remove_shift_wraps(66; CHECK-NEXT:    [[T:%.*]] = shl i8 [[A:%.*]], [[S:%.*]]67; CHECK-NEXT:    [[OR:%.*]] = or i8 [[T]], [[B:%.*]]68; CHECK-NEXT:    [[IC:%.*]] = icmp eq i8 [[OR]], 069; CHECK-NEXT:    ret i1 [[IC]]70;71  %t = shl i8 %a, %s72  %or = or i8 %t, %b73  %ic = icmp eq i8 %or, 074  ret i1 %ic75}76 77define i1 @remove_shift_chain_d(i8 %a, i8 %b, i8 %c, i8 %d, i8 %s) {78; CHECK-LABEL: @remove_shift_chain_d(79; CHECK-NEXT:    [[OR1:%.*]] = or i8 [[A:%.*]], [[B:%.*]]80; CHECK-NEXT:    [[OR2:%.*]] = or i8 [[C:%.*]], [[DT:%.*]]81; CHECK-NEXT:    [[OR:%.*]] = or i8 [[OR1]], [[OR2]]82; CHECK-NEXT:    [[IC:%.*]] = icmp eq i8 [[OR]], 083; CHECK-NEXT:    ret i1 [[IC]]84;85  %dt = shl nuw i8 %d, %s86  %or1 = or i8 %a, %b87  %or2 = or i8 %c, %dt88  %or = or i8 %or1, %or289  %ic = icmp eq i8 %or, 090  ret i1 %ic91}92 93define i1 @remove_shift_chain_abcd(i8 %a, i8 %b, i8 %c, i8 %d, i8 %s) {94; CHECK-LABEL: @remove_shift_chain_abcd(95; CHECK-NEXT:    [[OR1:%.*]] = or i8 [[AT:%.*]], [[BT:%.*]]96; CHECK-NEXT:    [[OR2:%.*]] = or i8 [[CT:%.*]], [[DT:%.*]]97; CHECK-NEXT:    [[OR:%.*]] = or i8 [[OR1]], [[OR2]]98; CHECK-NEXT:    [[IC:%.*]] = icmp eq i8 [[OR]], 099; CHECK-NEXT:    ret i1 [[IC]]100;101  %at = shl nuw i8 %a, %s102  %bt = shl nuw i8 %b, 2103  %ct = shl nuw i8 %c, 1104  %dt = shl nuw i8 %d, %s105  %or1 = or i8 %at, %bt106  %or2 = or i8 %ct, %dt107  %or = or i8 %or1, %or2108  %ic = icmp eq i8 %or, 0109  ret i1 %ic110}111 112define i1 @remove_shift_chain_abcd_multiuse(i8 %a, i8 %b, i8 %c, i8 %d, i8 %s) {113; CHECK-LABEL: @remove_shift_chain_abcd_multiuse(114; CHECK-NEXT:    [[AT:%.*]] = shl nuw i8 [[A:%.*]], [[S:%.*]]115; CHECK-NEXT:    [[BT:%.*]] = shl nuw i8 [[B:%.*]], 2116; CHECK-NEXT:    [[CT:%.*]] = shl nuw i8 [[C:%.*]], 1117; CHECK-NEXT:    [[DT:%.*]] = shl nuw i8 [[D:%.*]], [[S]]118; CHECK-NEXT:    [[OR1:%.*]] = or i8 [[AT]], [[BT]]119; CHECK-NEXT:    [[OR2:%.*]] = or i8 [[CT]], [[DT]]120; CHECK-NEXT:    [[OR:%.*]] = or i8 [[OR1]], [[OR2]]121; CHECK-NEXT:    [[IC:%.*]] = icmp eq i8 [[OR]], 0122; CHECK-NEXT:    call void @use(i8 [[OR]])123; CHECK-NEXT:    ret i1 [[IC]]124;125  %at = shl nuw i8 %a, %s126  %bt = shl nuw i8 %b, 2127  %ct = shl nuw i8 %c, 1128  %dt = shl nuw i8 %d, %s129  %or1 = or i8 %at, %bt130  %or2 = or i8 %ct, %dt131  %or = or i8 %or1, %or2132  %ic = icmp eq i8 %or, 0133  call void @use(i8 %or)134  ret i1 %ic135}136 137declare void @use(i8)138