blob: a5882b251dab52b3fb94f51675ded65857ef8d77 [file]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -passes=slp-vectorizer -S | FileCheck %s
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-unknown-unknown"
define void @foo(ptr noalias %A, ptr noalias %B) {
; CHECK-LABEL: @foo(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[ARRAYIDX_3:%.*]] = getelementptr i8, ptr [[A:%.*]], i64 12
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX_3]], align 4
; CHECK-NEXT: [[ADD_3:%.*]] = udiv i32 [[TMP2]], 2
; CHECK-NEXT: [[ARRAYIDX2_2:%.*]] = getelementptr i8, ptr [[A1:%.*]], i64 8
; CHECK-NEXT: [[ARRAYIDX2_3:%.*]] = getelementptr i8, ptr [[A1]], i64 12
; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 4
; CHECK-NEXT: [[TMP4:%.*]] = udiv <2 x i32> [[TMP1]], <i32 3, i32 8>
; CHECK-NEXT: store <2 x i32> [[TMP4]], ptr [[A1]], align 4
; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x i32> [[TMP4]], i32 0
; CHECK-NEXT: store i32 [[TMP3]], ptr [[ARRAYIDX2_2]], align 4
; CHECK-NEXT: store i32 [[ADD_3]], ptr [[ARRAYIDX2_3]], align 4
; CHECK-NEXT: ret void
;
entry:
%arrayidx.1 = getelementptr i8, ptr %B, i64 4
%arrayidx.3 = getelementptr i8, ptr %B, i64 12
%0 = load i32, ptr %B
%1 = load i32, ptr %arrayidx.1
%3 = load i32, ptr %arrayidx.3
%add = udiv i32 %0, 3
%add.1 = udiv i32 %1, 8
%add.3 = udiv i32 %3, 2
%arrayidx2.1 = getelementptr i8, ptr %A, i64 4
%arrayidx2.2 = getelementptr i8, ptr %A, i64 8
%arrayidx2.3 = getelementptr i8, ptr %A, i64 12
store i32 %add, ptr %A
store i32 %add.1, ptr %arrayidx2.1
store i32 %add, ptr %arrayidx2.2
store i32 %add.3, ptr %arrayidx2.3
ret void
}