brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.9 KiB · 56aae8d Raw
304 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -mtriple=thumbv7-unknown-linux-gnueabihf -arm-parallel-dsp -dce %s -S -o - | FileCheck %s3 4define i32 @first_mul_invalid(ptr nocapture readonly %in, ptr nocapture readonly %b) {5; CHECK-LABEL: @first_mul_invalid(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr [[IN:%.*]], align 28; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[TMP0]] to i329; CHECK-NEXT:    [[TMP1:%.*]] = load i16, ptr [[B:%.*]], align 210; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[TMP1]] to i3211; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @bar(i32 [[CONV]], i32 [[CONV2]])12; CHECK-NEXT:    [[ARRAYIDX3:%.*]] = getelementptr inbounds i16, ptr [[IN]], i32 -113; CHECK-NEXT:    [[TMP2:%.*]] = load i16, ptr [[ARRAYIDX3]], align 214; CHECK-NEXT:    [[CONV4:%.*]] = sext i16 [[TMP2]] to i3215; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds i16, ptr [[B]], i32 116; CHECK-NEXT:    [[TMP3:%.*]] = load i16, ptr [[ARRAYIDX5]], align 217; CHECK-NEXT:    [[CONV6:%.*]] = sext i16 [[TMP3]] to i3218; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i32 [[CONV6]], [[CONV4]]19; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[MUL]], [[CALL]]20; CHECK-NEXT:    [[ARRAYIDX13:%.*]] = getelementptr inbounds i16, ptr [[IN]], i32 -321; CHECK-NEXT:    [[TMP5:%.*]] = load i32, ptr [[ARRAYIDX13]], align 222; CHECK-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds i16, ptr [[B]], i32 223; CHECK-NEXT:    [[TMP7:%.*]] = load i32, ptr [[ARRAYIDX9]], align 224; CHECK-NEXT:    [[TMP8:%.*]] = call i32 @llvm.arm.smladx(i32 [[TMP5]], i32 [[TMP7]], i32 [[ADD]])25; CHECK-NEXT:    [[ARRAYIDX25:%.*]] = getelementptr inbounds i16, ptr [[IN]], i32 -526; CHECK-NEXT:    [[TMP10:%.*]] = load i32, ptr [[ARRAYIDX25]], align 227; CHECK-NEXT:    [[ARRAYIDX21:%.*]] = getelementptr inbounds i16, ptr [[B]], i32 428; CHECK-NEXT:    [[TMP12:%.*]] = load i32, ptr [[ARRAYIDX21]], align 229; CHECK-NEXT:    [[TMP13:%.*]] = call i32 @llvm.arm.smladx(i32 [[TMP10]], i32 [[TMP12]], i32 [[TMP8]])30; CHECK-NEXT:    ret i32 [[TMP13]]31;32entry:33  %0 = load i16, ptr %in, align 234  %conv = sext i16 %0 to i3235  %1 = load i16, ptr %b, align 236  %conv2 = sext i16 %1 to i3237  %call = tail call i32 @bar(i32 %conv, i32 %conv2)38  %arrayidx3 = getelementptr inbounds i16, ptr %in, i32 -139  %2 = load i16, ptr %arrayidx3, align 240  %conv4 = sext i16 %2 to i3241  %arrayidx5 = getelementptr inbounds i16, ptr %b, i32 142  %3 = load i16, ptr %arrayidx5, align 243  %conv6 = sext i16 %3 to i3244  %mul = mul nsw i32 %conv6, %conv445  %add = add i32 %mul, %call46  %arrayidx7 = getelementptr inbounds i16, ptr %in, i32 -247  %4 = load i16, ptr %arrayidx7, align 248  %conv8 = sext i16 %4 to i3249  %arrayidx9 = getelementptr inbounds i16, ptr %b, i32 250  %5 = load i16, ptr %arrayidx9, align 251  %conv10 = sext i16 %5 to i3252  %mul11 = mul nsw i32 %conv10, %conv853  %add12 = add i32 %add, %mul1154  %arrayidx13 = getelementptr inbounds i16, ptr %in, i32 -355  %6 = load i16, ptr %arrayidx13, align 256  %conv14 = sext i16 %6 to i3257  %arrayidx15 = getelementptr inbounds i16, ptr %b, i32 358  %7 = load i16, ptr %arrayidx15, align 259  %conv16 = sext i16 %7 to i3260  %mul17 = mul nsw i32 %conv16, %conv1461  %add18 = add i32 %add12, %mul1762  %arrayidx19 = getelementptr inbounds i16, ptr %in, i32 -463  %8 = load i16, ptr %arrayidx19, align 264  %conv20 = sext i16 %8 to i3265  %arrayidx21 = getelementptr inbounds i16, ptr %b, i32 466  %9 = load i16, ptr %arrayidx21, align 267  %conv22 = sext i16 %9 to i3268  %mul23 = mul nsw i32 %conv22, %conv2069  %add24 = add i32 %add18, %mul2370  %arrayidx25 = getelementptr inbounds i16, ptr %in, i32 -571  %10 = load i16, ptr %arrayidx25, align 272  %conv26 = sext i16 %10 to i3273  %arrayidx27 = getelementptr inbounds i16, ptr %b, i32 574  %11 = load i16, ptr %arrayidx27, align 275  %conv28 = sext i16 %11 to i3276  %mul29 = mul nsw i32 %conv28, %conv2677  %add30 = add i32 %add24, %mul2978  ret i32 %add3079}80 81define i32 @with_no_acc_input(ptr nocapture readonly %in, ptr nocapture readonly %b) {82; CHECK-LABEL: @with_no_acc_input(83; CHECK-NEXT:  entry:84; CHECK-NEXT:    [[ARRAYIDX3:%.*]] = getelementptr inbounds i16, ptr [[IN:%.*]], i32 -185; CHECK-NEXT:    [[LD_2:%.*]] = load i16, ptr [[ARRAYIDX3]], align 286; CHECK-NEXT:    [[CONV4:%.*]] = sext i16 [[LD_2]] to i3287; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds i16, ptr [[B:%.*]], i32 188; CHECK-NEXT:    [[LD_3:%.*]] = load i16, ptr [[ARRAYIDX5]], align 289; CHECK-NEXT:    [[CONV6:%.*]] = sext i16 [[LD_3]] to i3290; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i32 [[CONV6]], [[CONV4]]91; CHECK-NEXT:    [[ARRAYIDX13:%.*]] = getelementptr inbounds i16, ptr [[IN]], i32 -392; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX13]], align 293; CHECK-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds i16, ptr [[B]], i32 294; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX9]], align 295; CHECK-NEXT:    [[TMP4:%.*]] = call i32 @llvm.arm.smladx(i32 [[TMP1]], i32 [[TMP3]], i32 [[MUL]])96; CHECK-NEXT:    [[ARRAYIDX25:%.*]] = getelementptr inbounds i16, ptr [[IN]], i32 -597; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[ARRAYIDX25]], align 298; CHECK-NEXT:    [[ARRAYIDX21:%.*]] = getelementptr inbounds i16, ptr [[B]], i32 499; CHECK-NEXT:    [[TMP8:%.*]] = load i32, ptr [[ARRAYIDX21]], align 2100; CHECK-NEXT:    [[TMP9:%.*]] = call i32 @llvm.arm.smladx(i32 [[TMP6]], i32 [[TMP8]], i32 [[TMP4]])101; CHECK-NEXT:    ret i32 [[TMP9]]102;103entry:104  %arrayidx3 = getelementptr inbounds i16, ptr %in, i32 -1105  %ld.2 = load i16, ptr %arrayidx3, align 2106  %conv4 = sext i16 %ld.2 to i32107  %arrayidx5 = getelementptr inbounds i16, ptr %b, i32 1108  %ld.3 = load i16, ptr %arrayidx5, align 2109  %conv6 = sext i16 %ld.3 to i32110  %mul = mul nsw i32 %conv6, %conv4111  %arrayidx7 = getelementptr inbounds i16, ptr %in, i32 -2112  %ld.4 = load i16, ptr %arrayidx7, align 2113  %conv8 = sext i16 %ld.4 to i32114  %arrayidx9 = getelementptr inbounds i16, ptr %b, i32 2115  %ld.5 = load i16, ptr %arrayidx9, align 2116  %conv10 = sext i16 %ld.5 to i32117  %mul11 = mul nsw i32 %conv10, %conv8118  %add12 = add i32 %mul, %mul11119  %arrayidx13 = getelementptr inbounds i16, ptr %in, i32 -3120  %ld.6 = load i16, ptr %arrayidx13, align 2121  %conv14 = sext i16 %ld.6 to i32122  %arrayidx15 = getelementptr inbounds i16, ptr %b, i32 3123  %ld.7 = load i16, ptr %arrayidx15, align 2124  %conv16 = sext i16 %ld.7 to i32125  %mul17 = mul nsw i32 %conv16, %conv14126  %add18 = add i32 %add12, %mul17127  %arrayidx19 = getelementptr inbounds i16, ptr %in, i32 -4128  %ld.8 = load i16, ptr %arrayidx19, align 2129  %conv20 = sext i16 %ld.8 to i32130  %arrayidx21 = getelementptr inbounds i16, ptr %b, i32 4131  %ld.9 = load i16, ptr %arrayidx21, align 2132  %conv22 = sext i16 %ld.9 to i32133  %mul23 = mul nsw i32 %conv22, %conv20134  %add24 = add i32 %add18, %mul23135  %arrayidx25 = getelementptr inbounds i16, ptr %in, i32 -5136  %ld.10 = load i16, ptr %arrayidx25, align 2137  %conv26 = sext i16 %ld.10 to i32138  %arrayidx27 = getelementptr inbounds i16, ptr %b, i32 5139  %ld.11 = load i16, ptr %arrayidx27, align 2140  %conv28 = sext i16 %ld.11 to i32141  %mul29 = mul nsw i32 %conv28, %conv26142  %add30 = add i32 %add24, %mul29143  ret i32 %add30144}145 146define i64 @with_64bit_acc(ptr nocapture readonly %in, ptr nocapture readonly %b) {147; CHECK-LABEL: @with_64bit_acc(148; CHECK-NEXT:  entry:149; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr [[IN:%.*]], align 2150; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[TMP0]] to i32151; CHECK-NEXT:    [[TMP1:%.*]] = load i16, ptr [[B:%.*]], align 2152; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[TMP1]] to i32153; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @bar(i32 [[CONV]], i32 [[CONV2]])154; CHECK-NEXT:    [[SEXT_0:%.*]] = sext i32 [[CALL]] to i64155; CHECK-NEXT:    [[ARRAYIDX3:%.*]] = getelementptr inbounds i16, ptr [[IN]], i32 -1156; CHECK-NEXT:    [[TMP2:%.*]] = load i16, ptr [[ARRAYIDX3]], align 2157; CHECK-NEXT:    [[CONV4:%.*]] = sext i16 [[TMP2]] to i32158; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds i16, ptr [[B]], i32 1159; CHECK-NEXT:    [[TMP3:%.*]] = load i16, ptr [[ARRAYIDX5]], align 2160; CHECK-NEXT:    [[CONV6:%.*]] = sext i16 [[TMP3]] to i32161; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i32 [[CONV6]], [[CONV4]]162; CHECK-NEXT:    [[SEXT_1:%.*]] = sext i32 [[MUL]] to i64163; CHECK-NEXT:    [[ADD:%.*]] = add i64 [[SEXT_0]], [[SEXT_1]]164; CHECK-NEXT:    [[ARRAYIDX13:%.*]] = getelementptr inbounds i16, ptr [[IN]], i32 -3165; CHECK-NEXT:    [[TMP5:%.*]] = load i32, ptr [[ARRAYIDX13]], align 2166; CHECK-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds i16, ptr [[B]], i32 2167; CHECK-NEXT:    [[TMP7:%.*]] = load i32, ptr [[ARRAYIDX9]], align 2168; CHECK-NEXT:    [[TMP8:%.*]] = call i64 @llvm.arm.smlaldx(i32 [[TMP5]], i32 [[TMP7]], i64 [[ADD]])169; CHECK-NEXT:    [[ARRAYIDX25:%.*]] = getelementptr inbounds i16, ptr [[IN]], i32 -5170; CHECK-NEXT:    [[TMP10:%.*]] = load i32, ptr [[ARRAYIDX25]], align 2171; CHECK-NEXT:    [[ARRAYIDX21:%.*]] = getelementptr inbounds i16, ptr [[B]], i32 4172; CHECK-NEXT:    [[TMP12:%.*]] = load i32, ptr [[ARRAYIDX21]], align 2173; CHECK-NEXT:    [[TMP13:%.*]] = call i64 @llvm.arm.smlaldx(i32 [[TMP10]], i32 [[TMP12]], i64 [[TMP8]])174; CHECK-NEXT:    ret i64 [[TMP13]]175;176entry:177  %0 = load i16, ptr %in, align 2178  %conv = sext i16 %0 to i32179  %1 = load i16, ptr %b, align 2180  %conv2 = sext i16 %1 to i32181  %call = tail call i32 @bar(i32 %conv, i32 %conv2)182  %sext.0 = sext i32 %call to i64183  %arrayidx3 = getelementptr inbounds i16, ptr %in, i32 -1184  %2 = load i16, ptr %arrayidx3, align 2185  %conv4 = sext i16 %2 to i32186  %arrayidx5 = getelementptr inbounds i16, ptr %b, i32 1187  %3 = load i16, ptr %arrayidx5, align 2188  %conv6 = sext i16 %3 to i32189  %mul = mul nsw i32 %conv6, %conv4190  %sext.1 = sext i32 %mul to i64191  %add = add i64 %sext.0, %sext.1192  %arrayidx7 = getelementptr inbounds i16, ptr %in, i32 -2193  %4 = load i16, ptr %arrayidx7, align 2194  %conv8 = sext i16 %4 to i32195  %arrayidx9 = getelementptr inbounds i16, ptr %b, i32 2196  %5 = load i16, ptr %arrayidx9, align 2197  %conv10 = sext i16 %5 to i32198  %mul11 = mul nsw i32 %conv10, %conv8199  %sext.2 = sext i32 %mul11 to i64200  %add12 = add i64 %add, %sext.2201  %arrayidx13 = getelementptr inbounds i16, ptr %in, i32 -3202  %6 = load i16, ptr %arrayidx13, align 2203  %conv14 = sext i16 %6 to i32204  %arrayidx15 = getelementptr inbounds i16, ptr %b, i32 3205  %7 = load i16, ptr %arrayidx15, align 2206  %conv16 = sext i16 %7 to i32207  %mul17 = mul nsw i32 %conv16, %conv14208  %sext.3 = sext i32 %mul17 to i64209  %add18 = add i64 %add12, %sext.3210  %arrayidx19 = getelementptr inbounds i16, ptr %in, i32 -4211  %8 = load i16, ptr %arrayidx19, align 2212  %conv20 = sext i16 %8 to i32213  %arrayidx21 = getelementptr inbounds i16, ptr %b, i32 4214  %9 = load i16, ptr %arrayidx21, align 2215  %conv22 = sext i16 %9 to i32216  %mul23 = mul nsw i32 %conv22, %conv20217  %sext.4 = sext i32 %mul23 to i64218  %add24 = add i64 %add18, %sext.4219  %arrayidx25 = getelementptr inbounds i16, ptr %in, i32 -5220  %10 = load i16, ptr %arrayidx25, align 2221  %conv26 = sext i16 %10 to i32222  %arrayidx27 = getelementptr inbounds i16, ptr %b, i32 5223  %11 = load i16, ptr %arrayidx27, align 2224  %conv28 = sext i16 %11 to i32225  %mul29 = mul nsw i32 %conv28, %conv26226  %sext.5 = sext i32 %mul29 to i64227  %add30 = add i64 %add24, %sext.5228  ret i64 %add30229}230 231define i64 @with_64bit_add_acc(ptr nocapture readonly %px.10756.unr, ptr nocapture readonly %py.8757.unr, i32 %acc) {232; CHECK-LABEL: @with_64bit_add_acc(233; CHECK-NEXT:  entry:234; CHECK-NEXT:    [[SUM_3758_UNR:%.*]] = sext i32 [[ACC:%.*]] to i64235; CHECK-NEXT:    br label [[BB_1:%.*]]236; CHECK:       bb.1:237; CHECK-NEXT:    [[INCDEC_PTR184_EPIL:%.*]] = getelementptr inbounds i16, ptr [[PX_10756_UNR:%.*]], i32 1238; CHECK-NEXT:    [[TMP216:%.*]] = load i16, ptr [[PX_10756_UNR]], align 2239; CHECK-NEXT:    [[CONV185_EPIL:%.*]] = sext i16 [[TMP216]] to i32240; CHECK-NEXT:    [[INCDEC_PTR186_EPIL:%.*]] = getelementptr inbounds i16, ptr [[PY_8757_UNR:%.*]], i32 -1241; CHECK-NEXT:    [[TMP217:%.*]] = load i16, ptr [[PY_8757_UNR]], align 2242; CHECK-NEXT:    [[CONV187_EPIL:%.*]] = sext i16 [[TMP217]] to i32243; CHECK-NEXT:    [[MUL_EPIL:%.*]] = mul nsw i32 [[CONV187_EPIL]], [[CONV185_EPIL]]244; CHECK-NEXT:    [[CONV188_EPIL:%.*]] = sext i32 [[MUL_EPIL]] to i64245; CHECK-NEXT:    [[ADD189_EPIL:%.*]] = add nsw i64 [[SUM_3758_UNR]], [[CONV188_EPIL]]246; CHECK-NEXT:    [[INCDEC_PTR190_EPIL:%.*]] = getelementptr inbounds i16, ptr [[PX_10756_UNR]], i32 2247; CHECK-NEXT:    [[TMP218:%.*]] = load i16, ptr [[INCDEC_PTR184_EPIL]], align 2248; CHECK-NEXT:    [[CONV191_EPIL:%.*]] = sext i16 [[TMP218]] to i32249; CHECK-NEXT:    [[TMP219:%.*]] = load i16, ptr [[INCDEC_PTR186_EPIL]], align 2250; CHECK-NEXT:    [[CONV193_EPIL:%.*]] = sext i16 [[TMP219]] to i32251; CHECK-NEXT:    [[MUL194_EPIL:%.*]] = mul nsw i32 [[CONV193_EPIL]], [[CONV191_EPIL]]252; CHECK-NEXT:    [[TMP0:%.*]] = sext i32 [[MUL194_EPIL]] to i64253; CHECK-NEXT:    [[TMP1:%.*]] = add i64 [[TMP0]], [[ADD189_EPIL]]254; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[INCDEC_PTR190_EPIL]], align 2255; CHECK-NEXT:    [[INCDEC_PTR199_EPIL:%.*]] = getelementptr inbounds i16, ptr [[PY_8757_UNR]], i32 -3256; CHECK-NEXT:    [[TMP5:%.*]] = load i32, ptr [[INCDEC_PTR199_EPIL]], align 2257; CHECK-NEXT:    [[TMP6:%.*]] = call i64 @llvm.arm.smlaldx(i32 [[TMP5]], i32 [[TMP3]], i64 [[TMP1]])258; CHECK-NEXT:    ret i64 [[TMP6]]259;260entry:261  %sum.3758.unr = sext i32 %acc to i64262  br label %bb.1263 264bb.1:265  %incdec.ptr184.epil = getelementptr inbounds i16, ptr %px.10756.unr, i32 1266  %tmp216 = load i16, ptr %px.10756.unr, align 2267  %conv185.epil = sext i16 %tmp216 to i32268  %incdec.ptr186.epil = getelementptr inbounds i16, ptr %py.8757.unr, i32 -1269  %tmp217 = load i16, ptr %py.8757.unr, align 2270  %conv187.epil = sext i16 %tmp217 to i32271  %mul.epil = mul nsw i32 %conv187.epil, %conv185.epil272  %conv188.epil = sext i32 %mul.epil to i64273  %add189.epil = add nsw i64 %sum.3758.unr, %conv188.epil274  %incdec.ptr190.epil = getelementptr inbounds i16, ptr %px.10756.unr, i32 2275  %tmp218 = load i16, ptr %incdec.ptr184.epil, align 2276  %conv191.epil = sext i16 %tmp218 to i32277  %incdec.ptr192.epil = getelementptr inbounds i16, ptr %py.8757.unr, i32 -2278  %tmp219 = load i16, ptr %incdec.ptr186.epil, align 2279  %conv193.epil = sext i16 %tmp219 to i32280  %mul194.epil = mul nsw i32 %conv193.epil, %conv191.epil281  %conv195.epil = sext i32 %mul194.epil to i64282  %add196.epil = add nsw i64 %add189.epil, %conv195.epil283  %incdec.ptr197.epil = getelementptr inbounds i16, ptr %px.10756.unr, i32 3284  %tmp220 = load i16, ptr %incdec.ptr190.epil, align 2285  %conv198.epil = sext i16 %tmp220 to i32286  %incdec.ptr199.epil = getelementptr inbounds i16, ptr %py.8757.unr, i32 -3287  %tmp221 = load i16, ptr %incdec.ptr192.epil, align 2288  %conv200.epil = sext i16 %tmp221 to i32289  %mul201.epil = mul nsw i32 %conv200.epil, %conv198.epil290  %conv202.epil = sext i32 %mul201.epil to i64291  %add203.epil = add nsw i64 %add196.epil, %conv202.epil292  %tmp222 = load i16, ptr %incdec.ptr197.epil, align 2293  %conv205.epil = sext i16 %tmp222 to i32294  %tmp223 = load i16, ptr %incdec.ptr199.epil, align 2295  %conv207.epil = sext i16 %tmp223 to i32296  %mul208.epil = mul nsw i32 %conv207.epil, %conv205.epil297  %conv209.epil = sext i32 %mul208.epil to i64298  %add210.epil = add nsw i64 %add203.epil, %conv209.epil299  ret i64 %add210.epil300}301 302declare dso_local i32 @bar(i32, i32) local_unnamed_addr303 304