brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 99f07c0 Raw
179 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=instcombine -S %s | FileCheck %s3 4define i32 @reassoc_add_nuw(i32 %x) {5; CHECK-LABEL: @reassoc_add_nuw(6; CHECK-NEXT:    [[ADD1:%.*]] = add nuw i32 [[X:%.*]], 687; CHECK-NEXT:    ret i32 [[ADD1]]8;9  %add0 = add nuw i32 %x, 410  %add1 = add nuw i32 %add0, 6411  ret i32 %add112}13 14; This does the wrong thing because the sub is turned into an add of a15; negative constant first which drops the nuw.16define i32 @reassoc_sub_nuw(i32 %x) {17; CHECK-LABEL: @reassoc_sub_nuw(18; CHECK-NEXT:    [[SUB1:%.*]] = add i32 [[X:%.*]], -6819; CHECK-NEXT:    ret i32 [[SUB1]]20;21  %sub0 = sub nuw i32 %x, 422  %sub1 = sub nuw i32 %sub0, 6423  ret i32 %sub124}25 26define i32 @reassoc_mul_nuw(i32 %x) {27; CHECK-LABEL: @reassoc_mul_nuw(28; CHECK-NEXT:    [[MUL1:%.*]] = mul nuw i32 [[X:%.*]], 26029; CHECK-NEXT:    ret i32 [[MUL1]]30;31  %mul0 = mul nuw i32 %x, 432  %mul1 = mul nuw i32 %mul0, 6533  ret i32 %mul134}35 36define i32 @no_reassoc_add_nuw_none(i32 %x) {37; CHECK-LABEL: @no_reassoc_add_nuw_none(38; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[X:%.*]], 6839; CHECK-NEXT:    ret i32 [[ADD1]]40;41  %add0 = add i32 %x, 442  %add1 = add nuw i32 %add0, 6443  ret i32 %add144}45 46define i32 @no_reassoc_add_none_nuw(i32 %x) {47; CHECK-LABEL: @no_reassoc_add_none_nuw(48; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[X:%.*]], 6849; CHECK-NEXT:    ret i32 [[ADD1]]50;51  %add0 = add nuw i32 %x, 452  %add1 = add i32 %add0, 6453  ret i32 %add154}55 56define i32 @reassoc_x2_add_nuw(i32 %x, i32 %y) {57; CHECK-LABEL: @reassoc_x2_add_nuw(58; CHECK-NEXT:    [[ADD1:%.*]] = add nuw i32 [[X:%.*]], [[Y:%.*]]59; CHECK-NEXT:    [[ADD2:%.*]] = add nuw i32 [[ADD1]], 1260; CHECK-NEXT:    ret i32 [[ADD2]]61;62  %add0 = add nuw i32 %x, 463  %add1 = add nuw i32 %y, 864  %add2 = add nuw i32 %add0, %add165  ret i32 %add266}67 68define i32 @reassoc_x2_mul_nuw(i32 %x, i32 %y) {69; CHECK-LABEL: @reassoc_x2_mul_nuw(70; CHECK-NEXT:    [[MUL1:%.*]] = mul i32 [[X:%.*]], [[Y:%.*]]71; CHECK-NEXT:    [[MUL2:%.*]] = mul nuw i32 [[MUL1]], 4572; CHECK-NEXT:    ret i32 [[MUL2]]73;74  %mul0 = mul nuw i32 %x, 575  %mul1 = mul nuw i32 %y, 976  %mul2 = mul nuw i32 %mul0, %mul177  ret i32 %mul278}79 80define i32 @reassoc_x2_sub_nuw(i32 %x, i32 %y) {81; CHECK-LABEL: @reassoc_x2_sub_nuw(82; CHECK-NEXT:    [[TMP1:%.*]] = sub i32 [[X:%.*]], [[Y:%.*]]83; CHECK-NEXT:    [[SUB2:%.*]] = add i32 [[TMP1]], 484; CHECK-NEXT:    ret i32 [[SUB2]]85;86  %sub0 = sub nuw i32 %x, 487  %sub1 = sub nuw i32 %y, 888  %sub2 = sub nuw i32 %sub0, %sub189  ret i32 %sub290}91 92define i32 @tryFactorization_add_nuw_mul_nuw(i32 %x) {93; CHECK-LABEL: @tryFactorization_add_nuw_mul_nuw(94; CHECK-NEXT:    [[ADD2:%.*]] = shl nuw i32 [[X:%.*]], 295; CHECK-NEXT:    ret i32 [[ADD2]]96;97  %mul1 = mul nuw i32 %x, 398  %add2 = add nuw i32 %mul1, %x99  ret i32 %add2100}101 102define i32 @tryFactorization_add_nuw_mul_nuw_int_max(i32 %x) {103; CHECK-LABEL: @tryFactorization_add_nuw_mul_nuw_int_max(104; CHECK-NEXT:    [[ADD2:%.*]] = shl nuw i32 [[X:%.*]], 31105; CHECK-NEXT:    ret i32 [[ADD2]]106;107  %mul1 = mul nuw i32 %x, 2147483647108  %add2 = add nuw i32 %mul1, %x109  ret i32 %add2110}111 112define i32 @tryFactorization_add_mul_nuw(i32 %x) {113; CHECK-LABEL: @tryFactorization_add_mul_nuw(114; CHECK-NEXT:    [[ADD2:%.*]] = shl i32 [[X:%.*]], 2115; CHECK-NEXT:    ret i32 [[ADD2]]116;117  %mul1 = mul i32 %x, 3118  %add2 = add nuw i32 %mul1, %x119  ret i32 %add2120}121 122define i32 @tryFactorization_add_nuw_mul(i32 %x) {123; CHECK-LABEL: @tryFactorization_add_nuw_mul(124; CHECK-NEXT:    [[ADD2:%.*]] = shl i32 [[X:%.*]], 2125; CHECK-NEXT:    ret i32 [[ADD2]]126;127  %mul1 = mul nuw i32 %x, 3128  %add2 = add i32 %mul1, %x129  ret i32 %add2130}131 132define i32 @tryFactorization_add_nuw_mul_nuw_mul_nuw_var(i32 %x, i32 %y, i32 %z) {133; CHECK-LABEL: @tryFactorization_add_nuw_mul_nuw_mul_nuw_var(134; CHECK-NEXT:    [[MUL21:%.*]] = add i32 [[Y:%.*]], [[Z:%.*]]135; CHECK-NEXT:    [[ADD1:%.*]] = mul nuw i32 [[X:%.*]], [[MUL21]]136; CHECK-NEXT:    ret i32 [[ADD1]]137;138  %mul1 = mul nuw i32 %x, %y139  %mul2 = mul nuw i32 %x, %z140  %add1 = add nuw i32 %mul1, %mul2141  ret i32 %add1142}143 144define i32 @tryFactorization_add_nuw_mul_mul_nuw_var(i32 %x, i32 %y, i32 %z) {145; CHECK-LABEL: @tryFactorization_add_nuw_mul_mul_nuw_var(146; CHECK-NEXT:    [[MUL21:%.*]] = add i32 [[Y:%.*]], [[Z:%.*]]147; CHECK-NEXT:    [[ADD1:%.*]] = mul i32 [[X:%.*]], [[MUL21]]148; CHECK-NEXT:    ret i32 [[ADD1]]149;150  %mul1 = mul i32 %x, %y151  %mul2 = mul nuw i32 %x, %z152  %add1 = add nuw i32 %mul1, %mul2153  ret i32 %add1154}155 156define i32 @tryFactorization_add_nuw_mul_nuw_mul_var(i32 %x, i32 %y, i32 %z) {157; CHECK-LABEL: @tryFactorization_add_nuw_mul_nuw_mul_var(158; CHECK-NEXT:    [[MUL21:%.*]] = add i32 [[Y:%.*]], [[Z:%.*]]159; CHECK-NEXT:    [[ADD1:%.*]] = mul i32 [[X:%.*]], [[MUL21]]160; CHECK-NEXT:    ret i32 [[ADD1]]161;162  %mul1 = mul nuw i32 %x, %y163  %mul2 = mul i32 %x, %z164  %add1 = add nuw i32 %mul1, %mul2165  ret i32 %add1166}167 168define i32 @tryFactorization_add_mul_nuw_mul_var(i32 %x, i32 %y, i32 %z) {169; CHECK-LABEL: @tryFactorization_add_mul_nuw_mul_var(170; CHECK-NEXT:    [[MUL21:%.*]] = add i32 [[Y:%.*]], [[Z:%.*]]171; CHECK-NEXT:    [[ADD1:%.*]] = mul i32 [[X:%.*]], [[MUL21]]172; CHECK-NEXT:    ret i32 [[ADD1]]173;174  %mul1 = mul nuw i32 %x, %y175  %mul2 = mul nuw i32 %x, %z176  %add1 = add i32 %mul1, %mul2177  ret i32 %add1178}179