183 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-grtev4-linux-gnu < %s | FileCheck %s3 4define ptr @test(ptr %0, ptr %args_gep) {5; CHECK-LABEL: define ptr @test(6; CHECK-SAME: ptr [[TMP0:%.*]], ptr [[ARGS_GEP:%.*]]) {7; CHECK-NEXT: [[BB:.*:]]8; CHECK-NEXT: [[ARG1:%.*]] = load ptr, ptr [[ARGS_GEP]], align 89; CHECK-NEXT: [[ARG26:%.*]] = load ptr, ptr [[TMP0]], align 810; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i32>, ptr [[ARG1]], align 3211; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <2 x i32> [[TMP1]], <2 x i32> poison, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 0, i32 0, i32 0>12; CHECK-NEXT: [[TMP3:%.*]] = icmp eq <16 x i32> [[TMP2]], zeroinitializer13; CHECK-NEXT: [[TMP4:%.*]] = zext <16 x i1> [[TMP3]] to <16 x i8>14; CHECK-NEXT: store <16 x i8> [[TMP4]], ptr [[ARG26]], align 3215; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[ARG26]], i64 1716; CHECK-NEXT: [[TMP6:%.*]] = getelementptr i8, ptr [[ARG1]], i64 817; CHECK-NEXT: [[TMP7:%.*]] = getelementptr i8, ptr [[ARG1]], i64 1218; CHECK-NEXT: [[TMP9:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8, !noalias [[META0:![0-9]+]]19; CHECK-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP7]], align 4, !noalias [[META0]]20; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <2 x i32> [[TMP1]], <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>21; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <2 x i32> [[TMP9]], <2 x i32> poison, <16 x i32> <i32 poison, i32 poison, i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>22; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <4 x i32> [[TMP10]], <4 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>23; CHECK-NEXT: [[TMP13:%.*]] = shufflevector <2 x i32> [[TMP1]], <2 x i32> [[TMP9]], <16 x i32> <i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3>24; CHECK-NEXT: [[TMP14:%.*]] = icmp eq <16 x i32> [[TMP13]], zeroinitializer25; CHECK-NEXT: [[TMP15:%.*]] = zext <16 x i1> [[TMP14]] to <16 x i8>26; CHECK-NEXT: store <16 x i8> [[TMP15]], ptr [[TMP5]], align 127; CHECK-NEXT: [[TMP16:%.*]] = icmp eq i32 [[TMP8]], 028; CHECK-NEXT: [[TMP17:%.*]] = zext i1 [[TMP16]] to i829; CHECK-NEXT: store i8 [[TMP17]], ptr [[TMP0]], align 130; CHECK-NEXT: ret ptr null31;32bb:33 %arg1 = load ptr, ptr %args_gep, align 834 %arg26 = load ptr, ptr %0, align 835 %1 = load i32, ptr %arg1, align 3236 %2 = icmp eq i32 %1, 037 %3 = zext i1 %2 to i838 store i8 %3, ptr %arg26, align 32, !alias.scope !039 %4 = icmp eq i32 %1, 040 %5 = zext i1 %4 to i841 %6 = getelementptr i8, ptr %arg26, i64 142 store i8 %5, ptr %6, align 1, !alias.scope !043 %7 = icmp eq i32 %1, 044 %8 = zext i1 %7 to i845 %9 = getelementptr i8, ptr %arg26, i64 246 store i8 %8, ptr %9, align 2, !alias.scope !047 %10 = icmp eq i32 %1, 048 %11 = zext i1 %10 to i849 %12 = getelementptr i8, ptr %arg26, i64 350 store i8 %11, ptr %12, align 1, !alias.scope !051 %13 = icmp eq i32 %1, 052 %14 = zext i1 %13 to i853 %15 = getelementptr i8, ptr %arg26, i64 454 store i8 %14, ptr %15, align 4, !alias.scope !055 %16 = icmp eq i32 %1, 056 %17 = zext i1 %16 to i857 %18 = getelementptr i8, ptr %arg26, i64 558 store i8 %17, ptr %18, align 1, !alias.scope !059 %19 = getelementptr i8, ptr %arg1, i64 460 %20 = load i32, ptr %19, align 4, !noalias !061 %21 = icmp eq i32 %20, 062 %22 = zext i1 %21 to i863 %23 = getelementptr i8, ptr %arg26, i64 664 store i8 %22, ptr %23, align 265 %24 = icmp eq i32 %20, 066 %25 = zext i1 %24 to i867 %26 = getelementptr i8, ptr %arg26, i64 768 store i8 %25, ptr %26, align 169 %27 = icmp eq i32 %20, 070 %28 = zext i1 %27 to i871 %29 = getelementptr i8, ptr %arg26, i64 872 store i8 %28, ptr %29, align 873 %30 = icmp eq i32 %20, 074 %31 = zext i1 %30 to i875 %32 = getelementptr i8, ptr %arg26, i64 976 store i8 %31, ptr %32, align 177 %33 = icmp eq i32 %20, 078 %34 = zext i1 %33 to i879 %35 = getelementptr i8, ptr %arg26, i64 1080 store i8 %34, ptr %35, align 281 %36 = icmp eq i32 %20, 082 %37 = zext i1 %36 to i883 %38 = getelementptr i8, ptr %arg26, i64 1184 store i8 %37, ptr %38, align 185 %39 = icmp eq i32 %1, 086 %40 = zext i1 %39 to i887 %41 = getelementptr i8, ptr %arg26, i64 1288 store i8 %40, ptr %41, align 489 %42 = icmp eq i32 %1, 090 %43 = zext i1 %42 to i891 %44 = getelementptr i8, ptr %arg26, i64 1392 store i8 %43, ptr %44, align 193 %45 = icmp eq i32 %1, 094 %46 = zext i1 %45 to i895 %47 = getelementptr i8, ptr %arg26, i64 1496 store i8 %46, ptr %47, align 297 %48 = icmp eq i32 %1, 098 %49 = zext i1 %48 to i899 %50 = getelementptr i8, ptr %arg26, i64 15100 store i8 %49, ptr %50, align 1101 %51 = icmp eq i32 %1, 0102 %52 = zext i1 %51 to i8103 %53 = getelementptr i8, ptr %arg26, i64 17104 store i8 %52, ptr %53, align 1, !alias.scope !0105 %54 = icmp eq i32 %20, 0106 %55 = zext i1 %54 to i8107 %56 = getelementptr i8, ptr %arg26, i64 18108 store i8 %55, ptr %56, align 2, !alias.scope !0109 %57 = icmp eq i32 %20, 0110 %58 = zext i1 %57 to i8111 %59 = getelementptr i8, ptr %arg26, i64 19112 store i8 %58, ptr %59, align 1, !alias.scope !0113 %60 = icmp eq i32 %20, 0114 %61 = zext i1 %60 to i8115 %62 = getelementptr i8, ptr %arg26, i64 20116 store i8 %61, ptr %62, align 4, !alias.scope !0117 %63 = icmp eq i32 %20, 0118 %64 = zext i1 %63 to i8119 %65 = getelementptr i8, ptr %arg26, i64 21120 store i8 %64, ptr %65, align 1, !alias.scope !0121 %66 = icmp eq i32 %20, 0122 %67 = zext i1 %66 to i8123 %68 = getelementptr i8, ptr %arg26, i64 22124 store i8 %67, ptr %68, align 2, !alias.scope !0125 %69 = icmp eq i32 %20, 0126 %70 = zext i1 %69 to i8127 %71 = getelementptr i8, ptr %arg26, i64 23128 store i8 %70, ptr %71, align 1, !alias.scope !0129 %72 = getelementptr i8, ptr %arg1, i64 8130 %73 = load i32, ptr %72, align 8, !noalias !0131 %74 = icmp eq i32 %73, 0132 %75 = zext i1 %74 to i8133 %76 = getelementptr i8, ptr %arg26, i64 24134 store i8 %75, ptr %76, align 8, !alias.scope !0135 %77 = icmp eq i32 %73, 0136 %78 = zext i1 %77 to i8137 %79 = getelementptr i8, ptr %arg26, i64 25138 store i8 %78, ptr %79, align 1, !alias.scope !0139 %80 = icmp eq i32 %73, 0140 %81 = zext i1 %80 to i8141 %82 = getelementptr i8, ptr %arg26, i64 26142 store i8 %81, ptr %82, align 2, !alias.scope !0143 %83 = icmp eq i32 %73, 0144 %84 = zext i1 %83 to i8145 %85 = getelementptr i8, ptr %arg26, i64 27146 store i8 %84, ptr %85, align 1, !alias.scope !0147 %86 = icmp eq i32 %73, 0148 %87 = zext i1 %86 to i8149 %88 = getelementptr i8, ptr %arg26, i64 28150 store i8 %87, ptr %88, align 4, !alias.scope !0151 %89 = icmp eq i32 %73, 0152 %90 = zext i1 %89 to i8153 %91 = getelementptr i8, ptr %arg26, i64 29154 store i8 %90, ptr %91, align 1, !alias.scope !0155 %92 = getelementptr i8, ptr %arg1, i64 12156 %93 = load i32, ptr %92, align 4, !noalias !0157 %94 = icmp eq i32 %93, 0158 %95 = zext i1 %94 to i8159 %96 = getelementptr i8, ptr %arg26, i64 30160 store i8 %95, ptr %96, align 2161 %97 = icmp eq i32 %93, 0162 %98 = zext i1 %97 to i8163 %99 = getelementptr i8, ptr %arg26, i64 31164 store i8 %98, ptr %99, align 1165 %100 = icmp eq i32 %93, 0166 %101 = zext i1 %100 to i8167 %102 = getelementptr i8, ptr %arg26, i64 32168 store i8 %101, ptr %102, align 32169 %103 = icmp eq i32 %93, 0170 %104 = zext i1 %103 to i8171 store i8 %104, ptr %0, align 1172 ret ptr null173}174 175!0 = !{!1}176!1 = !{!"result slice: {}", !2}177!2 = !{!"fn AA domain"}178;.179; CHECK: [[META0]] = !{[[META1:![0-9]+]]}180; CHECK: [[META1]] = !{!"result slice: {}", [[META2:![0-9]+]]}181; CHECK: [[META2]] = !{!"fn AA domain"}182;.183