; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 ; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s define i32 @test() { ; CHECK-LABEL: define i32 @test() { ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x i32> poison, i32 0, i32 0 ; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> poison, <4 x i32> ; CHECK-NEXT: [[TMP3:%.*]] = or <4 x i32> [[TMP2]], ; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> poison, <16 x i32> ; CHECK-NEXT: [[TMP25:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> poison, <4 x i32> zeroinitializer ; CHECK-NEXT: [[TMP5:%.*]] = or <4 x i32> [[TMP25]], zeroinitializer ; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <24 x i32> ; CHECK-NEXT: [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> poison, <64 x i32> ; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <64 x i32> ; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> [[TMP5]], <64 x i32> ; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <64 x i32> [[TMP9]], <64 x i32> , <64 x i32> ; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <16 x i32> [[TMP4]], <16 x i32> poison, <64 x i32> ; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> poison, <64 x i32> ; CHECK-NEXT: [[TMP13:%.*]] = shufflevector <64 x i32> [[TMP10]], <64 x i32> [[TMP12]], <64 x i32> ; CHECK-NEXT: [[TMP14:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <64 x i32> ; CHECK-NEXT: [[TMP15:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <64 x i32> ; CHECK-NEXT: [[TMP16:%.*]] = shufflevector <64 x i32> [[TMP13]], <64 x i32> [[TMP15]], <64 x i32> ; CHECK-NEXT: [[TMP26:%.*]] = shufflevector <24 x i32> [[TMP6]], <24 x i32> poison, <64 x i32> ; CHECK-NEXT: [[TMP27:%.*]] = shufflevector <64 x i32> [[TMP16]], <64 x i32> [[TMP15]], <64 x i32> ; CHECK-NEXT: [[TMP28:%.*]] = shufflevector <16 x i32> [[TMP4]], <16 x i32> poison, <64 x i32> ; CHECK-NEXT: [[TMP18:%.*]] = shufflevector <64 x i32> [[TMP27]], <64 x i32> [[TMP28]], <64 x i32> ; CHECK-NEXT: [[TMP19:%.*]] = icmp eq <64 x i32> zeroinitializer, [[TMP18]] ; CHECK-NEXT: [[TMP20:%.*]] = icmp ne <64 x i32> zeroinitializer, [[TMP18]] ; CHECK-NEXT: [[TMP21:%.*]] = shufflevector <64 x i1> [[TMP19]], <64 x i1> [[TMP20]], <64 x i32> ; CHECK-NEXT: [[TMP22:%.*]] = zext <64 x i1> [[TMP21]] to <64 x i8> ; CHECK-NEXT: [[TMP23:%.*]] = call i8 @llvm.vector.reduce.xor.v64i8(<64 x i8> [[TMP22]]) ; CHECK-NEXT: [[TMP24:%.*]] = sext i8 [[TMP23]] to i32 ; CHECK-NEXT: ret i32 [[TMP24]] ; %1 = or i32 0, 0 %2 = icmp eq i32 0, 0 %3 = zext i1 %2 to i8 %4 = icmp eq i32 0, 0 %5 = zext i1 %4 to i8 %6 = xor i8 %3, %5 %7 = icmp eq i32 0, 0 %8 = zext i1 %7 to i8 %9 = xor i8 %6, %8 %10 = icmp eq i32 0, 0 %11 = zext i1 %10 to i8 %12 = xor i8 %9, %11 %13 = icmp eq i32 0, 0 %14 = zext i1 %13 to i8 %15 = xor i8 %12, %14 %16 = icmp eq i32 0, 0 %17 = zext i1 %16 to i8 %18 = xor i8 %15, %17 %19 = icmp eq i32 0, 0 %20 = zext i1 %19 to i8 %21 = xor i8 %18, %20 %22 = or i32 %1, 0 %23 = icmp eq i32 %22, 0 %24 = zext i1 %23 to i8 %25 = xor i8 %21, %24 %26 = icmp ne i32 %22, 0 %27 = zext i1 %26 to i8 %28 = xor i8 %25, %27 %29 = icmp ne i32 %22, 0 %30 = zext i1 %29 to i8 %31 = xor i8 %28, %30 %32 = icmp ne i32 %22, 0 %33 = zext i1 %32 to i8 %34 = xor i8 %31, %33 %35 = icmp ne i32 %22, 0 %36 = zext i1 %35 to i8 %37 = xor i8 %34, %36 %38 = icmp ne i32 %22, 0 %39 = zext i1 %38 to i8 %40 = xor i8 %37, %39 %41 = icmp ne i32 %22, 0 %42 = zext i1 %41 to i8 %43 = xor i8 %40, %42 %44 = icmp ne i32 %22, 0 %45 = zext i1 %44 to i8 %46 = xor i8 %43, %45 %47 = icmp ne i32 %22, 0 %48 = zext i1 %47 to i8 %49 = xor i8 %46, %48 %50 = icmp ne i32 %22, 0 %51 = zext i1 %50 to i8 %52 = xor i8 %49, %51 %53 = or i32 %1, 0 %54 = icmp ne i32 %53, 0 %55 = zext i1 %54 to i8 %56 = xor i8 %52, %55 %57 = icmp eq i32 %53, 0 %58 = zext i1 %57 to i8 %59 = xor i8 %56, %58 %60 = icmp eq i32 %53, 0 %61 = zext i1 %60 to i8 %62 = xor i8 %59, %61 %63 = icmp eq i32 %53, 0 %64 = zext i1 %63 to i8 %65 = xor i8 %62, %64 %66 = icmp eq i32 %53, 0 %67 = zext i1 %66 to i8 %68 = xor i8 %65, %67 %69 = icmp eq i32 %53, 0 %70 = zext i1 %69 to i8 %71 = xor i8 %68, %70 %72 = icmp eq i32 %53, 0 %73 = zext i1 %72 to i8 %74 = xor i8 %71, %73 %75 = icmp eq i32 %53, 0 %76 = zext i1 %75 to i8 %77 = xor i8 %74, %76 %78 = icmp eq i32 %53, 0 %79 = zext i1 %78 to i8 %80 = xor i8 %77, %79 %81 = or i32 %1, 0 %82 = icmp eq i32 %81, 0 %83 = zext i1 %82 to i8 %84 = xor i8 %80, %83 %85 = icmp ne i32 %81, 0 %86 = zext i1 %85 to i8 %87 = xor i8 %84, %86 %88 = icmp ne i32 %81, 0 %89 = zext i1 %88 to i8 %90 = xor i8 %87, %89 %91 = icmp ne i32 %81, 0 %92 = zext i1 %91 to i8 %93 = xor i8 %90, %92 %94 = icmp ne i32 %81, 0 %95 = zext i1 %94 to i8 %96 = xor i8 %93, %95 %97 = icmp ne i32 %81, 0 %98 = zext i1 %97 to i8 %99 = xor i8 %96, %98 %100 = icmp ne i32 %81, 0 %101 = zext i1 %100 to i8 %102 = xor i8 %99, %101 %103 = icmp ne i32 %81, 0 %104 = zext i1 %103 to i8 %105 = xor i8 %102, %104 %106 = icmp ne i32 %81, 0 %107 = zext i1 %106 to i8 %108 = xor i8 %105, %107 %109 = icmp ne i32 %81, 0 %110 = zext i1 %109 to i8 %111 = xor i8 %108, %110 %112 = or i32 %1, 0 %113 = icmp ne i32 %112, 0 %114 = zext i1 %113 to i8 %115 = xor i8 %111, %114 %116 = icmp eq i32 %112, 0 %117 = zext i1 %116 to i8 %118 = xor i8 %115, %117 %119 = icmp eq i32 %112, 0 %120 = zext i1 %119 to i8 %121 = xor i8 %118, %120 %122 = icmp eq i32 %112, 0 %123 = zext i1 %122 to i8 %124 = xor i8 %121, %123 %125 = icmp eq i32 %112, 0 %126 = zext i1 %125 to i8 %127 = xor i8 %124, %126 %128 = icmp eq i32 %112, 0 %129 = zext i1 %128 to i8 %130 = xor i8 %127, %129 %131 = icmp eq i32 %112, 0 %132 = zext i1 %131 to i8 %133 = xor i8 %130, %132 %134 = icmp eq i32 %112, 0 %135 = zext i1 %134 to i8 %136 = xor i8 %133, %135 %137 = icmp eq i32 %112, 0 %138 = zext i1 %137 to i8 %139 = xor i8 %136, %138 %140 = or i32 %1, 0 %141 = icmp eq i32 %140, 0 %142 = zext i1 %141 to i8 %143 = xor i8 %139, %142 %144 = icmp ne i32 %140, 0 %145 = zext i1 %144 to i8 %146 = xor i8 %143, %145 %147 = icmp ne i32 %140, 0 %148 = zext i1 %147 to i8 %149 = xor i8 %146, %148 %150 = icmp ne i32 %140, 0 %151 = zext i1 %150 to i8 %152 = xor i8 %149, %151 %153 = icmp ne i32 %140, 0 %154 = zext i1 %153 to i8 %155 = xor i8 %152, %154 %156 = icmp ne i32 %140, 0 %157 = zext i1 %156 to i8 %158 = xor i8 %155, %157 %159 = icmp ne i32 %140, 0 %160 = zext i1 %159 to i8 %161 = xor i8 %158, %160 %162 = icmp ne i32 %140, 0 %163 = zext i1 %162 to i8 %164 = xor i8 %161, %163 %165 = icmp ne i32 0, 0 %166 = zext i1 %165 to i8 %167 = xor i8 %164, %166 %168 = icmp ne i32 0, 0 %169 = zext i1 %168 to i8 %170 = xor i8 %167, %169 %171 = icmp ne i32 0, 0 %172 = zext i1 %171 to i8 %173 = xor i8 %170, %172 %174 = icmp eq i32 0, 0 %175 = zext i1 %174 to i8 %176 = xor i8 %173, %175 %177 = icmp eq i32 0, 0 %178 = zext i1 %177 to i8 %179 = xor i8 %176, %178 %180 = icmp eq i32 0, 0 %181 = zext i1 %180 to i8 %182 = xor i8 %179, %181 %183 = icmp eq i32 0, 0 %184 = zext i1 %183 to i8 %185 = xor i8 %182, %184 %186 = icmp eq i32 0, 0 %187 = zext i1 %186 to i8 %188 = xor i8 %185, %187 %189 = icmp eq i32 0, 0 %190 = zext i1 %189 to i8 %191 = xor i8 %188, %190 %192 = icmp eq i32 0, 0 %193 = zext i1 %192 to i8 %194 = xor i8 %191, %193 %195 = icmp eq i32 0, 0 %196 = zext i1 %195 to i8 %197 = xor i8 %194, %196 %198 = sext i8 %197 to i32 ret i32 %198 }