brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · 0aa340c Raw
205 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define i8 @urem_low_bits_know(i8 %xx, i8 %yy) {5; CHECK-LABEL: @urem_low_bits_know(6; CHECK-NEXT:    ret i8 27;8  %x = or i8 %xx, 29  %y = and i8 %yy, -410  %rem = urem i8 %x, %y11  %r = and i8 %rem, 212  ret i8 %r13}14 15define i8 @urem_high_bits_know(i8 %xx, i8 %yy) {16; CHECK-LABEL: @urem_high_bits_know(17; CHECK-NEXT:    ret i8 018;19  %x = and i8 %xx, 220  %y = and i8 %yy, -421  %rem = urem i8 %x, %y22  %r = and i8 %rem, 823  ret i8 %r24}25 26define i8 @urem_low_bits_know2(i8 %xx, i8 %yy) {27; CHECK-LABEL: @urem_low_bits_know2(28; CHECK-NEXT:    ret i8 229;30  %xo = or i8 %xx, 231  %x = and i8 %xo, 25432  %y = and i8 %yy, -433  %rem = urem i8 %x, %y34  %r = and i8 %rem, 335  ret i8 %r36}37 38define i8 @urem_todo_low_bits_partially_know_should_fold_out_urem(i8 %xx, i8 %yy) {39; CHECK-LABEL: @urem_todo_low_bits_partially_know_should_fold_out_urem(40; CHECK-NEXT:    [[X:%.*]] = or i8 [[XX:%.*]], 241; CHECK-NEXT:    [[Y:%.*]] = and i8 [[YY:%.*]], -442; CHECK-NEXT:    [[REM:%.*]] = urem i8 [[X]], [[Y]]43; CHECK-NEXT:    [[R:%.*]] = and i8 [[REM]], 344; CHECK-NEXT:    ret i8 [[R]]45;46  %x = or i8 %xx, 247  %y = and i8 %yy, -448  %rem = urem i8 %x, %y49  %r = and i8 %rem, 350  ret i8 %r51}52 53define i8 @urem_fail_low_bits_unknown(i8 %xx, i8 %yy) {54; CHECK-LABEL: @urem_fail_low_bits_unknown(55; CHECK-NEXT:    [[X:%.*]] = or i8 [[XX:%.*]], 456; CHECK-NEXT:    [[Y:%.*]] = and i8 [[YY:%.*]], -457; CHECK-NEXT:    [[REM:%.*]] = urem i8 [[X]], [[Y]]58; CHECK-NEXT:    [[R:%.*]] = and i8 [[REM]], 259; CHECK-NEXT:    ret i8 [[R]]60;61  %x = or i8 %xx, 462  %y = and i8 %yy, -463  %rem = urem i8 %x, %y64  %r = and i8 %rem, 265  ret i8 %r66}67 68define i8 @urem_fail_low_bits_unknown2(i8 %xx, i8 %yy) {69; CHECK-LABEL: @urem_fail_low_bits_unknown2(70; CHECK-NEXT:    [[X:%.*]] = or i8 [[XX:%.*]], 171; CHECK-NEXT:    [[Y:%.*]] = and i8 [[YY:%.*]], -572; CHECK-NEXT:    [[REM:%.*]] = urem i8 [[X]], [[Y]]73; CHECK-NEXT:    [[R:%.*]] = and i8 [[REM]], 274; CHECK-NEXT:    ret i8 [[R]]75;76  %x = or i8 %xx, 177  %y = and i8 %yy, -578  %rem = urem i8 %x, %y79  %r = and i8 %rem, 280  ret i8 %r81}82 83define i8 @srem_low_bits_know(i8 %xx, i8 %yy) {84; CHECK-LABEL: @srem_low_bits_know(85; CHECK-NEXT:    ret i8 286;87  %x = or i8 %xx, 1088  %y = and i8 %yy, -489  %rem = srem i8 %x, %y90  %r = and i8 %rem, 291  ret i8 %r92}93 94define i8 @srem_low_bits_know2(i8 %xx, i8 %yy) {95; CHECK-LABEL: @srem_low_bits_know2(96; CHECK-NEXT:    ret i8 197;98  %x = or i8 %xx, 199  %y = and i8 %yy, -2100  %rem = srem i8 %x, %y101  %r = and i8 %rem, 1102  ret i8 %r103}104 105define i8 @srem_high_bits_know(i8 %xx, i8 %yy) {106; CHECK-LABEL: @srem_high_bits_know(107; CHECK-NEXT:    ret i8 -2108;109  %x = or i8 %xx, -2110  %y = and i8 %yy, -4111  %rem = srem i8 %x, %y112  %r = and i8 %rem, -2113  ret i8 %r114}115 116define i8 @srem_high_bits_know2(i8 %xx, i8 %yy) {117; CHECK-LABEL: @srem_high_bits_know2(118; CHECK-NEXT:    ret i8 0119;120  %x = and i8 %xx, 13121  %y = or i8 %yy, -4122  %rem = srem i8 %x, %y123  %r = and i8 %rem, 8124  ret i8 %r125}126 127define i8 @srem_high_bits_know3(i8 %xx, i8 %yy) {128; CHECK-LABEL: @srem_high_bits_know3(129; CHECK-NEXT:    ret i8 8130;131  %x = or i8 %xx, -13132  %y = and i8 %yy, 4133  %rem = srem i8 %x, %y134  %r = and i8 %rem, 8135  ret i8 %r136}137 138define i8 @srem_high_bits_know4(i8 %xx, i8 %yy) {139; CHECK-LABEL: @srem_high_bits_know4(140; CHECK-NEXT:    ret i8 0141;142  %x = and i8 %xx, 4143  %y = or i8 %yy, -13144  %rem = srem i8 %x, %y145  %r = and i8 %rem, 8146  ret i8 %r147}148 149define i8 @srem_high_bits_know5(i8 %xx, i8 %yy) {150; CHECK-LABEL: @srem_high_bits_know5(151; CHECK-NEXT:    [[X:%.*]] = and i8 [[XX:%.*]], 2152; CHECK-NEXT:    ret i8 [[X]]153;154  %x = and i8 %xx, 2155  %y = and i8 %yy, 4156  %rem = srem i8 %x, %y157  %r = and i8 %rem, 2158  ret i8 %r159}160 161define i8 @srem_todo_low_bits_partially_know_should_fold_out_srem(i8 %xx, i8 %yy) {162; CHECK-LABEL: @srem_todo_low_bits_partially_know_should_fold_out_srem(163; CHECK-NEXT:    [[X:%.*]] = or i8 [[XX:%.*]], 10164; CHECK-NEXT:    [[Y:%.*]] = and i8 [[YY:%.*]], -4165; CHECK-NEXT:    [[REM:%.*]] = srem i8 [[X]], [[Y]]166; CHECK-NEXT:    [[R:%.*]] = and i8 [[REM]], 3167; CHECK-NEXT:    ret i8 [[R]]168;169  %x = or i8 %xx, 10170  %y = and i8 %yy, -4171  %rem = srem i8 %x, %y172  %r = and i8 %rem, 3173  ret i8 %r174}175 176define i8 @srem_fail_low_bits_unknown(i8 %xx, i8 %yy) {177; CHECK-LABEL: @srem_fail_low_bits_unknown(178; CHECK-NEXT:    [[X:%.*]] = or i8 [[XX:%.*]], 4179; CHECK-NEXT:    [[Y:%.*]] = and i8 [[YY:%.*]], -4180; CHECK-NEXT:    [[REM:%.*]] = srem i8 [[X]], [[Y]]181; CHECK-NEXT:    [[R:%.*]] = and i8 [[REM]], 2182; CHECK-NEXT:    ret i8 [[R]]183;184  %x = or i8 %xx, 4185  %y = and i8 %yy, -4186  %rem = srem i8 %x, %y187  %r = and i8 %rem, 2188  ret i8 %r189}190 191define i8 @srem_fail_irrelivent_bits_known(i8 %xx, i8 %yy) {192; CHECK-LABEL: @srem_fail_irrelivent_bits_known(193; CHECK-NEXT:    [[X:%.*]] = or i8 [[XX:%.*]], 3194; CHECK-NEXT:    [[Y:%.*]] = and i8 [[YY:%.*]], -6195; CHECK-NEXT:    [[REM:%.*]] = srem i8 [[X]], [[Y]]196; CHECK-NEXT:    [[R:%.*]] = and i8 [[REM]], 2197; CHECK-NEXT:    ret i8 [[R]]198;199  %x = or i8 %xx, 3200  %y = and i8 %yy, -6201  %rem = srem i8 %x, %y202  %r = and i8 %rem, 2203  ret i8 %r204}205