|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
| 2 | +; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-grtev4-linux-gnu < %s | FileCheck %s |
| 3 | + |
| 4 | +define 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 8 |
| 9 | +; CHECK-NEXT: [[ARG26:%.*]] = load ptr, ptr [[TMP0]], align 8 |
| 10 | +; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i32>, ptr [[ARG1]], align 32 |
| 11 | +; 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]], zeroinitializer |
| 13 | +; CHECK-NEXT: [[TMP4:%.*]] = zext <16 x i1> [[TMP3]] to <16 x i8> |
| 14 | +; CHECK-NEXT: store <16 x i8> [[TMP4]], ptr [[ARG26]], align 32 |
| 15 | +; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[ARG26]], i64 17 |
| 16 | +; CHECK-NEXT: [[TMP6:%.*]] = getelementptr i8, ptr [[ARG1]], i64 8 |
| 17 | +; CHECK-NEXT: [[TMP7:%.*]] = getelementptr i8, ptr [[ARG1]], i64 12 |
| 18 | +; CHECK-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP7]], align 4, !noalias [[META0:![0-9]+]] |
| 19 | +; CHECK-NEXT: [[TMP9:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8, !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> 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 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison> |
| 24 | +; CHECK-NEXT: [[TMP14:%.*]] = icmp eq <16 x i32> [[TMP13]], zeroinitializer |
| 25 | +; CHECK-NEXT: [[TMP15:%.*]] = zext <16 x i1> [[TMP14]] to <16 x i8> |
| 26 | +; CHECK-NEXT: store <16 x i8> [[TMP15]], ptr [[TMP5]], align 1 |
| 27 | +; CHECK-NEXT: [[TMP16:%.*]] = icmp eq i32 [[TMP8]], 0 |
| 28 | +; CHECK-NEXT: [[TMP17:%.*]] = zext i1 [[TMP16]] to i8 |
| 29 | +; CHECK-NEXT: store i8 [[TMP17]], ptr [[TMP0]], align 1 |
| 30 | +; CHECK-NEXT: ret ptr null |
| 31 | +; |
| 32 | +bb: |
| 33 | + %arg1 = load ptr, ptr %args_gep, align 8 |
| 34 | + %arg26 = load ptr, ptr %0, align 8 |
| 35 | + %1 = load i32, ptr %arg1, align 32 |
| 36 | + %2 = icmp eq i32 %1, 0 |
| 37 | + %3 = zext i1 %2 to i8 |
| 38 | + store i8 %3, ptr %arg26, align 32, !alias.scope !0 |
| 39 | + %4 = icmp eq i32 %1, 0 |
| 40 | + %5 = zext i1 %4 to i8 |
| 41 | + %6 = getelementptr i8, ptr %arg26, i64 1 |
| 42 | + store i8 %5, ptr %6, align 1, !alias.scope !0 |
| 43 | + %7 = icmp eq i32 %1, 0 |
| 44 | + %8 = zext i1 %7 to i8 |
| 45 | + %9 = getelementptr i8, ptr %arg26, i64 2 |
| 46 | + store i8 %8, ptr %9, align 2, !alias.scope !0 |
| 47 | + %10 = icmp eq i32 %1, 0 |
| 48 | + %11 = zext i1 %10 to i8 |
| 49 | + %12 = getelementptr i8, ptr %arg26, i64 3 |
| 50 | + store i8 %11, ptr %12, align 1, !alias.scope !0 |
| 51 | + %13 = icmp eq i32 %1, 0 |
| 52 | + %14 = zext i1 %13 to i8 |
| 53 | + %15 = getelementptr i8, ptr %arg26, i64 4 |
| 54 | + store i8 %14, ptr %15, align 4, !alias.scope !0 |
| 55 | + %16 = icmp eq i32 %1, 0 |
| 56 | + %17 = zext i1 %16 to i8 |
| 57 | + %18 = getelementptr i8, ptr %arg26, i64 5 |
| 58 | + store i8 %17, ptr %18, align 1, !alias.scope !0 |
| 59 | + %19 = getelementptr i8, ptr %arg1, i64 4 |
| 60 | + %20 = load i32, ptr %19, align 4, !noalias !0 |
| 61 | + %21 = icmp eq i32 %20, 0 |
| 62 | + %22 = zext i1 %21 to i8 |
| 63 | + %23 = getelementptr i8, ptr %arg26, i64 6 |
| 64 | + store i8 %22, ptr %23, align 2 |
| 65 | + %24 = icmp eq i32 %20, 0 |
| 66 | + %25 = zext i1 %24 to i8 |
| 67 | + %26 = getelementptr i8, ptr %arg26, i64 7 |
| 68 | + store i8 %25, ptr %26, align 1 |
| 69 | + %27 = icmp eq i32 %20, 0 |
| 70 | + %28 = zext i1 %27 to i8 |
| 71 | + %29 = getelementptr i8, ptr %arg26, i64 8 |
| 72 | + store i8 %28, ptr %29, align 8 |
| 73 | + %30 = icmp eq i32 %20, 0 |
| 74 | + %31 = zext i1 %30 to i8 |
| 75 | + %32 = getelementptr i8, ptr %arg26, i64 9 |
| 76 | + store i8 %31, ptr %32, align 1 |
| 77 | + %33 = icmp eq i32 %20, 0 |
| 78 | + %34 = zext i1 %33 to i8 |
| 79 | + %35 = getelementptr i8, ptr %arg26, i64 10 |
| 80 | + store i8 %34, ptr %35, align 2 |
| 81 | + %36 = icmp eq i32 %20, 0 |
| 82 | + %37 = zext i1 %36 to i8 |
| 83 | + %38 = getelementptr i8, ptr %arg26, i64 11 |
| 84 | + store i8 %37, ptr %38, align 1 |
| 85 | + %39 = icmp eq i32 %1, 0 |
| 86 | + %40 = zext i1 %39 to i8 |
| 87 | + %41 = getelementptr i8, ptr %arg26, i64 12 |
| 88 | + store i8 %40, ptr %41, align 4 |
| 89 | + %42 = icmp eq i32 %1, 0 |
| 90 | + %43 = zext i1 %42 to i8 |
| 91 | + %44 = getelementptr i8, ptr %arg26, i64 13 |
| 92 | + store i8 %43, ptr %44, align 1 |
| 93 | + %45 = icmp eq i32 %1, 0 |
| 94 | + %46 = zext i1 %45 to i8 |
| 95 | + %47 = getelementptr i8, ptr %arg26, i64 14 |
| 96 | + store i8 %46, ptr %47, align 2 |
| 97 | + %48 = icmp eq i32 %1, 0 |
| 98 | + %49 = zext i1 %48 to i8 |
| 99 | + %50 = getelementptr i8, ptr %arg26, i64 15 |
| 100 | + store i8 %49, ptr %50, align 1 |
| 101 | + %51 = icmp eq i32 %1, 0 |
| 102 | + %52 = zext i1 %51 to i8 |
| 103 | + %53 = getelementptr i8, ptr %arg26, i64 17 |
| 104 | + store i8 %52, ptr %53, align 1, !alias.scope !0 |
| 105 | + %54 = icmp eq i32 %20, 0 |
| 106 | + %55 = zext i1 %54 to i8 |
| 107 | + %56 = getelementptr i8, ptr %arg26, i64 18 |
| 108 | + store i8 %55, ptr %56, align 2, !alias.scope !0 |
| 109 | + %57 = icmp eq i32 %20, 0 |
| 110 | + %58 = zext i1 %57 to i8 |
| 111 | + %59 = getelementptr i8, ptr %arg26, i64 19 |
| 112 | + store i8 %58, ptr %59, align 1, !alias.scope !0 |
| 113 | + %60 = icmp eq i32 %20, 0 |
| 114 | + %61 = zext i1 %60 to i8 |
| 115 | + %62 = getelementptr i8, ptr %arg26, i64 20 |
| 116 | + store i8 %61, ptr %62, align 4, !alias.scope !0 |
| 117 | + %63 = icmp eq i32 %20, 0 |
| 118 | + %64 = zext i1 %63 to i8 |
| 119 | + %65 = getelementptr i8, ptr %arg26, i64 21 |
| 120 | + store i8 %64, ptr %65, align 1, !alias.scope !0 |
| 121 | + %66 = icmp eq i32 %20, 0 |
| 122 | + %67 = zext i1 %66 to i8 |
| 123 | + %68 = getelementptr i8, ptr %arg26, i64 22 |
| 124 | + store i8 %67, ptr %68, align 2, !alias.scope !0 |
| 125 | + %69 = icmp eq i32 %20, 0 |
| 126 | + %70 = zext i1 %69 to i8 |
| 127 | + %71 = getelementptr i8, ptr %arg26, i64 23 |
| 128 | + store i8 %70, ptr %71, align 1, !alias.scope !0 |
| 129 | + %72 = getelementptr i8, ptr %arg1, i64 8 |
| 130 | + %73 = load i32, ptr %72, align 8, !noalias !0 |
| 131 | + %74 = icmp eq i32 %73, 0 |
| 132 | + %75 = zext i1 %74 to i8 |
| 133 | + %76 = getelementptr i8, ptr %arg26, i64 24 |
| 134 | + store i8 %75, ptr %76, align 8, !alias.scope !0 |
| 135 | + %77 = icmp eq i32 %73, 0 |
| 136 | + %78 = zext i1 %77 to i8 |
| 137 | + %79 = getelementptr i8, ptr %arg26, i64 25 |
| 138 | + store i8 %78, ptr %79, align 1, !alias.scope !0 |
| 139 | + %80 = icmp eq i32 %73, 0 |
| 140 | + %81 = zext i1 %80 to i8 |
| 141 | + %82 = getelementptr i8, ptr %arg26, i64 26 |
| 142 | + store i8 %81, ptr %82, align 2, !alias.scope !0 |
| 143 | + %83 = icmp eq i32 %73, 0 |
| 144 | + %84 = zext i1 %83 to i8 |
| 145 | + %85 = getelementptr i8, ptr %arg26, i64 27 |
| 146 | + store i8 %84, ptr %85, align 1, !alias.scope !0 |
| 147 | + %86 = icmp eq i32 %73, 0 |
| 148 | + %87 = zext i1 %86 to i8 |
| 149 | + %88 = getelementptr i8, ptr %arg26, i64 28 |
| 150 | + store i8 %87, ptr %88, align 4, !alias.scope !0 |
| 151 | + %89 = icmp eq i32 %73, 0 |
| 152 | + %90 = zext i1 %89 to i8 |
| 153 | + %91 = getelementptr i8, ptr %arg26, i64 29 |
| 154 | + store i8 %90, ptr %91, align 1, !alias.scope !0 |
| 155 | + %92 = getelementptr i8, ptr %arg1, i64 12 |
| 156 | + %93 = load i32, ptr %92, align 4, !noalias !0 |
| 157 | + %94 = icmp eq i32 %93, 0 |
| 158 | + %95 = zext i1 %94 to i8 |
| 159 | + %96 = getelementptr i8, ptr %arg26, i64 30 |
| 160 | + store i8 %95, ptr %96, align 2 |
| 161 | + %97 = icmp eq i32 %93, 0 |
| 162 | + %98 = zext i1 %97 to i8 |
| 163 | + %99 = getelementptr i8, ptr %arg26, i64 31 |
| 164 | + store i8 %98, ptr %99, align 1 |
| 165 | + %100 = icmp eq i32 %93, 0 |
| 166 | + %101 = zext i1 %100 to i8 |
| 167 | + %102 = getelementptr i8, ptr %arg26, i64 32 |
| 168 | + store i8 %101, ptr %102, align 32 |
| 169 | + %103 = icmp eq i32 %93, 0 |
| 170 | + %104 = zext i1 %103 to i8 |
| 171 | + store i8 %104, ptr %0, align 1 |
| 172 | + ret ptr null |
| 173 | +} |
| 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 | +;. |
0 commit comments