brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.8 KiB · 6187dd9 Raw
365 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64    -S | FileCheck %s --check-prefixes=CHECK,SSE3; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v2 -S | FileCheck %s --check-prefixes=CHECK,SSE4; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v3 -S | FileCheck %s --check-prefixes=CHECK,AVX5; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v4 -S | FileCheck %s --check-prefixes=CHECK,AVX6 7; // PR499348; void baz(unsigned char *dst, unsigned char *src) {9;   for( int x = 0; x < 8; x++ ) {10;     dst[x] = src[x]&(~63);11;   }12; }13 14define void @and4(ptr noalias nocapture noundef writeonly %dst, ptr noalias nocapture noundef readonly %src) {15; CHECK-LABEL: @and4(16; CHECK-NEXT:  entry:17; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i8>, ptr [[SRC:%.*]], align 118; CHECK-NEXT:    [[TMP1:%.*]] = and <4 x i8> [[TMP0]], splat (i8 -64)19; CHECK-NEXT:    store <4 x i8> [[TMP1]], ptr [[DST:%.*]], align 120; CHECK-NEXT:    ret void21;22entry:23  %0 = load i8, ptr %src, align 124  %1 = and i8 %0, -6425  store i8 %1, ptr %dst, align 126  %arrayidx.1 = getelementptr inbounds i8, ptr %src, i64 127  %2 = load i8, ptr %arrayidx.1, align 128  %3 = and i8 %2, -6429  %arrayidx3.1 = getelementptr inbounds i8, ptr %dst, i64 130  store i8 %3, ptr %arrayidx3.1, align 131  %arrayidx.2 = getelementptr inbounds i8, ptr %src, i64 232  %4 = load i8, ptr %arrayidx.2, align 133  %5 = and i8 %4, -6434  %arrayidx3.2 = getelementptr inbounds i8, ptr %dst, i64 235  store i8 %5, ptr %arrayidx3.2, align 136  %arrayidx.3 = getelementptr inbounds i8, ptr %src, i64 337  %6 = load i8, ptr %arrayidx.3, align 138  %7 = and i8 %6, -6439  %arrayidx3.3 = getelementptr inbounds i8, ptr %dst, i64 340  store i8 %7, ptr %arrayidx3.3, align 141  ret void42}43 44define void @and8(ptr noalias nocapture noundef writeonly %dst, ptr noalias nocapture noundef readonly %src) {45; CHECK-LABEL: @and8(46; CHECK-NEXT:  entry:47; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 148; CHECK-NEXT:    [[TMP1:%.*]] = and <8 x i8> [[TMP0]], splat (i8 -64)49; CHECK-NEXT:    store <8 x i8> [[TMP1]], ptr [[DST:%.*]], align 150; CHECK-NEXT:    ret void51;52entry:53  %0 = load i8, ptr %src, align 154  %1 = and i8 %0, -6455  store i8 %1, ptr %dst, align 156  %arrayidx.1 = getelementptr inbounds i8, ptr %src, i64 157  %2 = load i8, ptr %arrayidx.1, align 158  %3 = and i8 %2, -6459  %arrayidx3.1 = getelementptr inbounds i8, ptr %dst, i64 160  store i8 %3, ptr %arrayidx3.1, align 161  %arrayidx.2 = getelementptr inbounds i8, ptr %src, i64 262  %4 = load i8, ptr %arrayidx.2, align 163  %5 = and i8 %4, -6464  %arrayidx3.2 = getelementptr inbounds i8, ptr %dst, i64 265  store i8 %5, ptr %arrayidx3.2, align 166  %arrayidx.3 = getelementptr inbounds i8, ptr %src, i64 367  %6 = load i8, ptr %arrayidx.3, align 168  %7 = and i8 %6, -6469  %arrayidx3.3 = getelementptr inbounds i8, ptr %dst, i64 370  store i8 %7, ptr %arrayidx3.3, align 171  %arrayidx.4 = getelementptr inbounds i8, ptr %src, i64 472  %8 = load i8, ptr %arrayidx.4, align 173  %9 = and i8 %8, -6474  %arrayidx3.4 = getelementptr inbounds i8, ptr %dst, i64 475  store i8 %9, ptr %arrayidx3.4, align 176  %arrayidx.5 = getelementptr inbounds i8, ptr %src, i64 577  %10 = load i8, ptr %arrayidx.5, align 178  %11 = and i8 %10, -6479  %arrayidx3.5 = getelementptr inbounds i8, ptr %dst, i64 580  store i8 %11, ptr %arrayidx3.5, align 181  %arrayidx.6 = getelementptr inbounds i8, ptr %src, i64 682  %12 = load i8, ptr %arrayidx.6, align 183  %13 = and i8 %12, -6484  %arrayidx3.6 = getelementptr inbounds i8, ptr %dst, i64 685  store i8 %13, ptr %arrayidx3.6, align 186  %arrayidx.7 = getelementptr inbounds i8, ptr %src, i64 787  %14 = load i8, ptr %arrayidx.7, align 188  %15 = and i8 %14, -6489  %arrayidx3.7 = getelementptr inbounds i8, ptr %dst, i64 790  store i8 %15, ptr %arrayidx3.7, align 191  ret void92}93 94define void @and16(ptr noalias nocapture noundef writeonly %dst, ptr noalias nocapture noundef readonly %src) {95; CHECK-LABEL: @and16(96; CHECK-NEXT:  entry:97; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i8>, ptr [[SRC:%.*]], align 198; CHECK-NEXT:    [[TMP1:%.*]] = and <16 x i8> [[TMP0]], splat (i8 -64)99; CHECK-NEXT:    store <16 x i8> [[TMP1]], ptr [[DST:%.*]], align 1100; CHECK-NEXT:    ret void101;102entry:103  %0 = load i8, ptr %src, align 1104  %1 = and i8 %0, -64105  store i8 %1, ptr %dst, align 1106  %arrayidx.1 = getelementptr inbounds i8, ptr %src, i64 1107  %2 = load i8, ptr %arrayidx.1, align 1108  %3 = and i8 %2, -64109  %arrayidx3.1 = getelementptr inbounds i8, ptr %dst, i64 1110  store i8 %3, ptr %arrayidx3.1, align 1111  %arrayidx.2 = getelementptr inbounds i8, ptr %src, i64 2112  %4 = load i8, ptr %arrayidx.2, align 1113  %5 = and i8 %4, -64114  %arrayidx3.2 = getelementptr inbounds i8, ptr %dst, i64 2115  store i8 %5, ptr %arrayidx3.2, align 1116  %arrayidx.3 = getelementptr inbounds i8, ptr %src, i64 3117  %6 = load i8, ptr %arrayidx.3, align 1118  %7 = and i8 %6, -64119  %arrayidx3.3 = getelementptr inbounds i8, ptr %dst, i64 3120  store i8 %7, ptr %arrayidx3.3, align 1121  %arrayidx.4 = getelementptr inbounds i8, ptr %src, i64 4122  %8 = load i8, ptr %arrayidx.4, align 1123  %9 = and i8 %8, -64124  %arrayidx3.4 = getelementptr inbounds i8, ptr %dst, i64 4125  store i8 %9, ptr %arrayidx3.4, align 1126  %arrayidx.5 = getelementptr inbounds i8, ptr %src, i64 5127  %10 = load i8, ptr %arrayidx.5, align 1128  %11 = and i8 %10, -64129  %arrayidx3.5 = getelementptr inbounds i8, ptr %dst, i64 5130  store i8 %11, ptr %arrayidx3.5, align 1131  %arrayidx.6 = getelementptr inbounds i8, ptr %src, i64 6132  %12 = load i8, ptr %arrayidx.6, align 1133  %13 = and i8 %12, -64134  %arrayidx3.6 = getelementptr inbounds i8, ptr %dst, i64 6135  store i8 %13, ptr %arrayidx3.6, align 1136  %arrayidx.7 = getelementptr inbounds i8, ptr %src, i64 7137  %14 = load i8, ptr %arrayidx.7, align 1138  %15 = and i8 %14, -64139  %arrayidx3.7 = getelementptr inbounds i8, ptr %dst, i64 7140  store i8 %15, ptr %arrayidx3.7, align 1141  %arrayidx.8 = getelementptr inbounds i8, ptr %src, i64 8142  %16 = load i8, ptr %arrayidx.8, align 1143  %17 = and i8 %16, -64144  %arrayidx3.8 = getelementptr inbounds i8, ptr %dst, i64 8145  store i8 %17, ptr %arrayidx3.8, align 1146  %arrayidx.9 = getelementptr inbounds i8, ptr %src, i64 9147  %18 = load i8, ptr %arrayidx.9, align 1148  %19 = and i8 %18, -64149  %arrayidx3.9 = getelementptr inbounds i8, ptr %dst, i64 9150  store i8 %19, ptr %arrayidx3.9, align 1151  %arrayidx.10 = getelementptr inbounds i8, ptr %src, i64 10152  %20 = load i8, ptr %arrayidx.10, align 1153  %21 = and i8 %20, -64154  %arrayidx3.10 = getelementptr inbounds i8, ptr %dst, i64 10155  store i8 %21, ptr %arrayidx3.10, align 1156  %arrayidx.11 = getelementptr inbounds i8, ptr %src, i64 11157  %22 = load i8, ptr %arrayidx.11, align 1158  %23 = and i8 %22, -64159  %arrayidx3.11 = getelementptr inbounds i8, ptr %dst, i64 11160  store i8 %23, ptr %arrayidx3.11, align 1161  %arrayidx.12 = getelementptr inbounds i8, ptr %src, i64 12162  %24 = load i8, ptr %arrayidx.12, align 1163  %25 = and i8 %24, -64164  %arrayidx3.12 = getelementptr inbounds i8, ptr %dst, i64 12165  store i8 %25, ptr %arrayidx3.12, align 1166  %arrayidx.13 = getelementptr inbounds i8, ptr %src, i64 13167  %26 = load i8, ptr %arrayidx.13, align 1168  %27 = and i8 %26, -64169  %arrayidx3.13 = getelementptr inbounds i8, ptr %dst, i64 13170  store i8 %27, ptr %arrayidx3.13, align 1171  %arrayidx.14 = getelementptr inbounds i8, ptr %src, i64 14172  %28 = load i8, ptr %arrayidx.14, align 1173  %29 = and i8 %28, -64174  %arrayidx3.14 = getelementptr inbounds i8, ptr %dst, i64 14175  store i8 %29, ptr %arrayidx3.14, align 1176  %arrayidx.15 = getelementptr inbounds i8, ptr %src, i64 15177  %30 = load i8, ptr %arrayidx.15, align 1178  %31 = and i8 %30, -64179  %arrayidx3.15 = getelementptr inbounds i8, ptr %dst, i64 15180  store i8 %31, ptr %arrayidx3.15, align 1181  ret void182}183 184define void @and32(ptr noalias nocapture noundef writeonly %dst, ptr noalias nocapture noundef readonly %src) {185; SSE-LABEL: @and32(186; SSE-NEXT:  entry:187; SSE-NEXT:    [[TMP0:%.*]] = load <16 x i8>, ptr [[SRC:%.*]], align 1188; SSE-NEXT:    [[TMP1:%.*]] = and <16 x i8> [[TMP0]], splat (i8 -64)189; SSE-NEXT:    store <16 x i8> [[TMP1]], ptr [[DST:%.*]], align 1190; SSE-NEXT:    [[ARRAYIDX_16:%.*]] = getelementptr inbounds i8, ptr [[SRC]], i64 16191; SSE-NEXT:    [[ARRAYIDX3_16:%.*]] = getelementptr inbounds i8, ptr [[DST]], i64 16192; SSE-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[ARRAYIDX_16]], align 1193; SSE-NEXT:    [[TMP3:%.*]] = and <16 x i8> [[TMP2]], splat (i8 -64)194; SSE-NEXT:    store <16 x i8> [[TMP3]], ptr [[ARRAYIDX3_16]], align 1195; SSE-NEXT:    ret void196;197; AVX-LABEL: @and32(198; AVX-NEXT:  entry:199; AVX-NEXT:    [[TMP0:%.*]] = load <32 x i8>, ptr [[SRC:%.*]], align 1200; AVX-NEXT:    [[TMP1:%.*]] = and <32 x i8> [[TMP0]], splat (i8 -64)201; AVX-NEXT:    store <32 x i8> [[TMP1]], ptr [[DST:%.*]], align 1202; AVX-NEXT:    ret void203;204entry:205  %0 = load i8, ptr %src, align 1206  %1 = and i8 %0, -64207  store i8 %1, ptr %dst, align 1208  %arrayidx.1 = getelementptr inbounds i8, ptr %src, i64 1209  %2 = load i8, ptr %arrayidx.1, align 1210  %3 = and i8 %2, -64211  %arrayidx3.1 = getelementptr inbounds i8, ptr %dst, i64 1212  store i8 %3, ptr %arrayidx3.1, align 1213  %arrayidx.2 = getelementptr inbounds i8, ptr %src, i64 2214  %4 = load i8, ptr %arrayidx.2, align 1215  %5 = and i8 %4, -64216  %arrayidx3.2 = getelementptr inbounds i8, ptr %dst, i64 2217  store i8 %5, ptr %arrayidx3.2, align 1218  %arrayidx.3 = getelementptr inbounds i8, ptr %src, i64 3219  %6 = load i8, ptr %arrayidx.3, align 1220  %7 = and i8 %6, -64221  %arrayidx3.3 = getelementptr inbounds i8, ptr %dst, i64 3222  store i8 %7, ptr %arrayidx3.3, align 1223  %arrayidx.4 = getelementptr inbounds i8, ptr %src, i64 4224  %8 = load i8, ptr %arrayidx.4, align 1225  %9 = and i8 %8, -64226  %arrayidx3.4 = getelementptr inbounds i8, ptr %dst, i64 4227  store i8 %9, ptr %arrayidx3.4, align 1228  %arrayidx.5 = getelementptr inbounds i8, ptr %src, i64 5229  %10 = load i8, ptr %arrayidx.5, align 1230  %11 = and i8 %10, -64231  %arrayidx3.5 = getelementptr inbounds i8, ptr %dst, i64 5232  store i8 %11, ptr %arrayidx3.5, align 1233  %arrayidx.6 = getelementptr inbounds i8, ptr %src, i64 6234  %12 = load i8, ptr %arrayidx.6, align 1235  %13 = and i8 %12, -64236  %arrayidx3.6 = getelementptr inbounds i8, ptr %dst, i64 6237  store i8 %13, ptr %arrayidx3.6, align 1238  %arrayidx.7 = getelementptr inbounds i8, ptr %src, i64 7239  %14 = load i8, ptr %arrayidx.7, align 1240  %15 = and i8 %14, -64241  %arrayidx3.7 = getelementptr inbounds i8, ptr %dst, i64 7242  store i8 %15, ptr %arrayidx3.7, align 1243  %arrayidx.8 = getelementptr inbounds i8, ptr %src, i64 8244  %16 = load i8, ptr %arrayidx.8, align 1245  %17 = and i8 %16, -64246  %arrayidx3.8 = getelementptr inbounds i8, ptr %dst, i64 8247  store i8 %17, ptr %arrayidx3.8, align 1248  %arrayidx.9 = getelementptr inbounds i8, ptr %src, i64 9249  %18 = load i8, ptr %arrayidx.9, align 1250  %19 = and i8 %18, -64251  %arrayidx3.9 = getelementptr inbounds i8, ptr %dst, i64 9252  store i8 %19, ptr %arrayidx3.9, align 1253  %arrayidx.10 = getelementptr inbounds i8, ptr %src, i64 10254  %20 = load i8, ptr %arrayidx.10, align 1255  %21 = and i8 %20, -64256  %arrayidx3.10 = getelementptr inbounds i8, ptr %dst, i64 10257  store i8 %21, ptr %arrayidx3.10, align 1258  %arrayidx.11 = getelementptr inbounds i8, ptr %src, i64 11259  %22 = load i8, ptr %arrayidx.11, align 1260  %23 = and i8 %22, -64261  %arrayidx3.11 = getelementptr inbounds i8, ptr %dst, i64 11262  store i8 %23, ptr %arrayidx3.11, align 1263  %arrayidx.12 = getelementptr inbounds i8, ptr %src, i64 12264  %24 = load i8, ptr %arrayidx.12, align 1265  %25 = and i8 %24, -64266  %arrayidx3.12 = getelementptr inbounds i8, ptr %dst, i64 12267  store i8 %25, ptr %arrayidx3.12, align 1268  %arrayidx.13 = getelementptr inbounds i8, ptr %src, i64 13269  %26 = load i8, ptr %arrayidx.13, align 1270  %27 = and i8 %26, -64271  %arrayidx3.13 = getelementptr inbounds i8, ptr %dst, i64 13272  store i8 %27, ptr %arrayidx3.13, align 1273  %arrayidx.14 = getelementptr inbounds i8, ptr %src, i64 14274  %28 = load i8, ptr %arrayidx.14, align 1275  %29 = and i8 %28, -64276  %arrayidx3.14 = getelementptr inbounds i8, ptr %dst, i64 14277  store i8 %29, ptr %arrayidx3.14, align 1278  %arrayidx.15 = getelementptr inbounds i8, ptr %src, i64 15279  %30 = load i8, ptr %arrayidx.15, align 1280  %31 = and i8 %30, -64281  %arrayidx3.15 = getelementptr inbounds i8, ptr %dst, i64 15282  store i8 %31, ptr %arrayidx3.15, align 1283  %arrayidx.16 = getelementptr inbounds i8, ptr %src, i64 16284  %32 = load i8, ptr %arrayidx.16, align 1285  %33 = and i8 %32, -64286  %arrayidx3.16 = getelementptr inbounds i8, ptr %dst, i64 16287  store i8 %33, ptr %arrayidx3.16, align 1288  %arrayidx.17 = getelementptr inbounds i8, ptr %src, i64 17289  %34 = load i8, ptr %arrayidx.17, align 1290  %35 = and i8 %34, -64291  %arrayidx3.17 = getelementptr inbounds i8, ptr %dst, i64 17292  store i8 %35, ptr %arrayidx3.17, align 1293  %arrayidx.18 = getelementptr inbounds i8, ptr %src, i64 18294  %36 = load i8, ptr %arrayidx.18, align 1295  %37 = and i8 %36, -64296  %arrayidx3.18 = getelementptr inbounds i8, ptr %dst, i64 18297  store i8 %37, ptr %arrayidx3.18, align 1298  %arrayidx.19 = getelementptr inbounds i8, ptr %src, i64 19299  %38 = load i8, ptr %arrayidx.19, align 1300  %39 = and i8 %38, -64301  %arrayidx3.19 = getelementptr inbounds i8, ptr %dst, i64 19302  store i8 %39, ptr %arrayidx3.19, align 1303  %arrayidx.20 = getelementptr inbounds i8, ptr %src, i64 20304  %40 = load i8, ptr %arrayidx.20, align 1305  %41 = and i8 %40, -64306  %arrayidx3.20 = getelementptr inbounds i8, ptr %dst, i64 20307  store i8 %41, ptr %arrayidx3.20, align 1308  %arrayidx.21 = getelementptr inbounds i8, ptr %src, i64 21309  %42 = load i8, ptr %arrayidx.21, align 1310  %43 = and i8 %42, -64311  %arrayidx3.21 = getelementptr inbounds i8, ptr %dst, i64 21312  store i8 %43, ptr %arrayidx3.21, align 1313  %arrayidx.22 = getelementptr inbounds i8, ptr %src, i64 22314  %44 = load i8, ptr %arrayidx.22, align 1315  %45 = and i8 %44, -64316  %arrayidx3.22 = getelementptr inbounds i8, ptr %dst, i64 22317  store i8 %45, ptr %arrayidx3.22, align 1318  %arrayidx.23 = getelementptr inbounds i8, ptr %src, i64 23319  %46 = load i8, ptr %arrayidx.23, align 1320  %47 = and i8 %46, -64321  %arrayidx3.23 = getelementptr inbounds i8, ptr %dst, i64 23322  store i8 %47, ptr %arrayidx3.23, align 1323  %arrayidx.24 = getelementptr inbounds i8, ptr %src, i64 24324  %48 = load i8, ptr %arrayidx.24, align 1325  %49 = and i8 %48, -64326  %arrayidx3.24 = getelementptr inbounds i8, ptr %dst, i64 24327  store i8 %49, ptr %arrayidx3.24, align 1328  %arrayidx.25 = getelementptr inbounds i8, ptr %src, i64 25329  %50 = load i8, ptr %arrayidx.25, align 1330  %51 = and i8 %50, -64331  %arrayidx3.25 = getelementptr inbounds i8, ptr %dst, i64 25332  store i8 %51, ptr %arrayidx3.25, align 1333  %arrayidx.26 = getelementptr inbounds i8, ptr %src, i64 26334  %52 = load i8, ptr %arrayidx.26, align 1335  %53 = and i8 %52, -64336  %arrayidx3.26 = getelementptr inbounds i8, ptr %dst, i64 26337  store i8 %53, ptr %arrayidx3.26, align 1338  %arrayidx.27 = getelementptr inbounds i8, ptr %src, i64 27339  %54 = load i8, ptr %arrayidx.27, align 1340  %55 = and i8 %54, -64341  %arrayidx3.27 = getelementptr inbounds i8, ptr %dst, i64 27342  store i8 %55, ptr %arrayidx3.27, align 1343  %arrayidx.28 = getelementptr inbounds i8, ptr %src, i64 28344  %56 = load i8, ptr %arrayidx.28, align 1345  %57 = and i8 %56, -64346  %arrayidx3.28 = getelementptr inbounds i8, ptr %dst, i64 28347  store i8 %57, ptr %arrayidx3.28, align 1348  %arrayidx.29 = getelementptr inbounds i8, ptr %src, i64 29349  %58 = load i8, ptr %arrayidx.29, align 1350  %59 = and i8 %58, -64351  %arrayidx3.29 = getelementptr inbounds i8, ptr %dst, i64 29352  store i8 %59, ptr %arrayidx3.29, align 1353  %arrayidx.30 = getelementptr inbounds i8, ptr %src, i64 30354  %60 = load i8, ptr %arrayidx.30, align 1355  %61 = and i8 %60, -64356  %arrayidx3.30 = getelementptr inbounds i8, ptr %dst, i64 30357  store i8 %61, ptr %arrayidx3.30, align 1358  %arrayidx.31 = getelementptr inbounds i8, ptr %src, i64 31359  %62 = load i8, ptr %arrayidx.31, align 1360  %63 = and i8 %62, -64361  %arrayidx3.31 = getelementptr inbounds i8, ptr %dst, i64 31362  store i8 %63, ptr %arrayidx3.31, align 1363  ret void364}365