blob: 1355224e94b71e5817d4f113f43c31f216c69d24 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -slp-revec -slp-vectorize-non-power-of-2 --passes=slp-vectorizer -S -mtriple=aarch64-pc-windows-gnu < %s | FileCheck %s
define i32 @test(ptr %0) {
; CHECK-LABEL: define i32 @test(
; CHECK-SAME: ptr [[TMP0:%.*]]) {
; CHECK-NEXT: [[_SPLIT:.*:]]
; CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
; CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[TMP1]], i64 96
; CHECK-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[TMP1]], i64 108
; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i8, ptr [[TMP1]], i64 120
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[TMP1]], i64 132
; CHECK-NEXT: [[TMP6:%.*]] = getelementptr i8, ptr [[TMP1]], i64 144
; CHECK-NEXT: [[TMP7:%.*]] = getelementptr i8, ptr [[TMP1]], i64 156
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr [[TMP1]], i64 168
; CHECK-NEXT: [[TMP9:%.*]] = getelementptr i8, ptr [[TMP1]], i64 180
; CHECK-NEXT: [[TMP10:%.*]] = load <3 x i32>, ptr [[TMP3]], align 4
; CHECK-NEXT: [[TMP11:%.*]] = load <3 x i32>, ptr [[TMP2]], align 4
; CHECK-NEXT: [[TMP12:%.*]] = add <3 x i32> [[TMP11]], <i32 1, i32 1, i32 0>
; CHECK-NEXT: [[TMP13:%.*]] = add <3 x i32> [[TMP10]], [[TMP12]]
; CHECK-NEXT: [[TMP14:%.*]] = load <3 x i32>, ptr [[TMP4]], align 4
; CHECK-NEXT: [[TMP15:%.*]] = add <3 x i32> [[TMP13]], [[TMP14]]
; CHECK-NEXT: [[TMP16:%.*]] = load <3 x i32>, ptr [[TMP5]], align 4
; CHECK-NEXT: [[TMP17:%.*]] = add <3 x i32> [[TMP15]], [[TMP16]]
; CHECK-NEXT: [[TMP18:%.*]] = load <3 x i32>, ptr [[TMP6]], align 4
; CHECK-NEXT: [[TMP19:%.*]] = add <3 x i32> [[TMP17]], [[TMP18]]
; CHECK-NEXT: [[TMP20:%.*]] = load <3 x i32>, ptr [[TMP7]], align 4
; CHECK-NEXT: [[TMP21:%.*]] = add <3 x i32> [[TMP19]], [[TMP20]]
; CHECK-NEXT: [[TMP22:%.*]] = load <3 x i32>, ptr [[TMP8]], align 4
; CHECK-NEXT: [[TMP23:%.*]] = add <3 x i32> [[TMP21]], [[TMP22]]
; CHECK-NEXT: [[TMP24:%.*]] = load <3 x i32>, ptr [[TMP9]], align 4
; CHECK-NEXT: [[TMP25:%.*]] = add <3 x i32> [[TMP23]], [[TMP24]]
; CHECK-NEXT: [[TMP26:%.*]] = icmp sgt <3 x i32> [[TMP25]], zeroinitializer
; CHECK-NEXT: [[TMP27:%.*]] = bitcast <3 x i1> [[TMP26]] to i3
; CHECK-NEXT: [[TMP28:%.*]] = call i3 @llvm.ctpop.i3(i3 [[TMP27]])
; CHECK-NEXT: [[TMP29:%.*]] = zext i3 [[TMP28]] to i32
; CHECK-NEXT: ret i32 [[TMP29]]
;
.split:
%1 = load ptr, ptr %0, align 8
%2 = getelementptr i8, ptr %1, i64 96
%3 = load i32, ptr %2, align 4
%4 = add i32 %3, 1
%5 = getelementptr i8, ptr %1, i64 108
%6 = load i32, ptr %5, align 4
%7 = add i32 %4, %6
%8 = getelementptr i8, ptr %1, i64 120
%9 = load i32, ptr %8, align 4
%10 = add i32 %7, %9
%11 = getelementptr i8, ptr %1, i64 132
%12 = load i32, ptr %11, align 4
%13 = add i32 %10, %12
%14 = getelementptr i8, ptr %1, i64 144
%15 = load i32, ptr %14, align 4
%16 = add i32 %13, %15
%17 = getelementptr i8, ptr %1, i64 156
%18 = load i32, ptr %17, align 4
%19 = add i32 %16, %18
%20 = getelementptr i8, ptr %1, i64 168
%21 = load i32, ptr %20, align 4
%22 = add i32 %19, %21
%23 = getelementptr i8, ptr %1, i64 180
%24 = load i32, ptr %23, align 4
%25 = add i32 %22, %24
%26 = getelementptr i8, ptr %1, i64 100
%27 = load i32, ptr %26, align 4
%28 = add i32 %27, 1
%29 = getelementptr i8, ptr %1, i64 112
%30 = load i32, ptr %29, align 4
%31 = add i32 %28, %30
%32 = getelementptr i8, ptr %1, i64 124
%33 = load i32, ptr %32, align 4
%34 = add i32 %31, %33
%35 = getelementptr i8, ptr %1, i64 136
%36 = load i32, ptr %35, align 4
%37 = add i32 %34, %36
%38 = getelementptr i8, ptr %1, i64 148
%39 = load i32, ptr %38, align 4
%40 = add i32 %37, %39
%41 = getelementptr i8, ptr %1, i64 160
%42 = load i32, ptr %41, align 4
%43 = getelementptr i8, ptr %1, i64 172
%44 = getelementptr i8, ptr %1, i64 116
%45 = load i32, ptr %44, align 4
%46 = getelementptr i8, ptr %1, i64 104
%47 = load i32, ptr %46, align 4
%48 = add i32 %45, %47
%49 = getelementptr i8, ptr %1, i64 128
%50 = load i32, ptr %49, align 4
%51 = add i32 %48, %50
%52 = getelementptr i8, ptr %1, i64 140
%53 = load i32, ptr %52, align 4
%54 = add i32 %51, %53
%55 = getelementptr i8, ptr %1, i64 152
%56 = load i32, ptr %55, align 4
%57 = add i32 %54, %56
%58 = getelementptr i8, ptr %1, i64 164
%59 = load i32, ptr %58, align 4
%60 = add i32 %57, %59
%61 = getelementptr i8, ptr %1, i64 176
%62 = load i32, ptr %61, align 4
%63 = add i32 %60, %62
%64 = getelementptr i8, ptr %1, i64 188
%65 = load i32, ptr %64, align 4
%66 = add i32 %63, %65
%67 = add i32 %40, %42
%68 = load i32, ptr %43, align 4
%69 = add i32 %67, %68
%70 = getelementptr i8, ptr %1, i64 184
%71 = load i32, ptr %70, align 4
%72 = add i32 %69, %71
%73 = icmp sgt i32 %72, 0
%74 = zext i1 %73 to i32
%75 = icmp sgt i32 %25, 0
%76 = zext i1 %75 to i32
%77 = add i32 %74, %76
%78 = icmp sgt i32 %66, 0
%79 = zext i1 %78 to i32
%80 = add i32 %77, %79
ret i32 %80
}