blob: 4c19067be5eb6624d728c7254cfa8cdb2df51e5c [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -passes=slp-vectorizer -mtriple=thumbv8.1m.main-unknown-none-eabihf -S -mattr=+mve < %s | FileCheck %s
define void @test(ptr %p) {
; CHECK-LABEL: define void @test(
; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: [[ENTRY:.*]]:
; CHECK-NEXT: br label %[[LOOP:.*]]
; CHECK: [[LOOP]]:
; CHECK-NEXT: [[I0:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[N0:%.*]], %[[LOOP]] ]
; CHECK-NEXT: [[TMP1:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[N1:%.*]], %[[LOOP]] ]
; CHECK-NEXT: [[I2:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[N2:%.*]], %[[LOOP]] ]
; CHECK-NEXT: [[I3:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[N3:%.*]], %[[LOOP]] ]
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[NIV:%.*]], %[[LOOP]] ]
; CHECK-NEXT: [[A0:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
; CHECK-NEXT: store i8 0, ptr [[A0]], align 1
; CHECK-NEXT: [[A1:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
; CHECK-NEXT: store i8 1, ptr [[A1]], align 1
; CHECK-NEXT: [[A2:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
; CHECK-NEXT: store i8 2, ptr [[A2]], align 1
; CHECK-NEXT: [[A3:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
; CHECK-NEXT: store i8 3, ptr [[A3]], align 1
; CHECK-NEXT: [[A4:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
; CHECK-NEXT: store i8 4, ptr [[A4]], align 1
; CHECK-NEXT: [[A5:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
; CHECK-NEXT: store i8 5, ptr [[A5]], align 1
; CHECK-NEXT: [[A6:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
; CHECK-NEXT: store i8 6, ptr [[A6]], align 1
; CHECK-NEXT: [[A7:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
; CHECK-NEXT: store i8 7, ptr [[A7]], align 1
; CHECK-NEXT: [[N0]] = add nuw nsw i32 [[I0]], 32
; CHECK-NEXT: [[N1]] = add nuw nsw i32 [[TMP1]], 16
; CHECK-NEXT: [[N2]] = add nuw nsw i32 [[I2]], 32
; CHECK-NEXT: [[N3]] = add nuw nsw i32 [[I3]], 32
; CHECK-NEXT: [[NIV]] = add nuw nsw i32 [[IV]], 16
; CHECK-NEXT: [[C:%.*]] = icmp eq i32 [[NIV]], 512
; CHECK-NEXT: br i1 [[C]], label %[[EXIT:.*]], label %[[LOOP]]
; CHECK: [[EXIT]]:
; CHECK-NEXT: ret void
;
entry:
br label %loop
loop:
%i0 = phi i32 [ 0, %entry ], [ %n0, %loop ]
%i1 = phi i32 [ 0, %entry ], [ %n1, %loop ]
%i2 = phi i32 [ 0, %entry ], [ %n2, %loop ]
%i3 = phi i32 [ 0, %entry ], [ %n3, %loop ]
%iv = phi i32 [ 0, %entry ], [ %niv, %loop ]
%a0 = getelementptr i8, ptr %p, i32 %i1
store i8 0, ptr %a0, align 1
%a1 = getelementptr i8, ptr %p, i32 %i1
store i8 1, ptr %a1, align 1
%a2 = getelementptr i8, ptr %p, i32 %i1
store i8 2, ptr %a2, align 1
%a3 = getelementptr i8, ptr %p, i32 %i1
store i8 3, ptr %a3, align 1
%a4 = getelementptr i8, ptr %p, i32 %i1
store i8 4, ptr %a4, align 1
%a5 = getelementptr i8, ptr %p, i32 %i1
store i8 5, ptr %a5, align 1
%a6 = getelementptr i8, ptr %p, i32 %i1
store i8 6, ptr %a6, align 1
%a7 = getelementptr i8, ptr %p, i32 %i1
store i8 7, ptr %a7, align 1
%n0 = add nuw nsw i32 %i0, 32
%n1 = add nuw nsw i32 %i1, 16
%n2 = add nuw nsw i32 %i2, 32
%n3 = add nuw nsw i32 %i3, 32
%niv = add nuw nsw i32 %iv, 16
%c = icmp eq i32 %niv, 512
br i1 %c, label %exit, label %loop
exit:
ret void
}