| ; 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_1:%.*]] = getelementptr i8, ptr [[A:%.*]], i64 4 | |
| ; CHECK-NEXT: [[ARRAYIDX_3:%.*]] = getelementptr i8, ptr [[A]], i64 12 | |
| ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[A]], align 4 | |
| ; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX_1]], align 4 | |
| ; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX_3]], align 4 | |
| ; CHECK-NEXT: [[TMP3:%.*]] = udiv i32 [[TMP0]], 3 | |
| ; CHECK-NEXT: [[ADD_1:%.*]] = udiv i32 [[TMP1]], 8 | |
| ; CHECK-NEXT: [[ADD_3:%.*]] = udiv i32 [[TMP2]], 2 | |
| ; CHECK-NEXT: [[ARRAYIDX2_1:%.*]] = getelementptr i8, ptr [[A1:%.*]], i64 4 | |
| ; CHECK-NEXT: [[ARRAYIDX2_2:%.*]] = getelementptr i8, ptr [[A1]], i64 8 | |
| ; CHECK-NEXT: [[ARRAYIDX2_3:%.*]] = getelementptr i8, ptr [[A1]], i64 12 | |
| ; CHECK-NEXT: store i32 [[TMP3]], ptr [[A1]], align 4 | |
| ; CHECK-NEXT: store i32 [[ADD_1]], ptr [[ARRAYIDX2_1]], align 4 | |
| ; 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 | |
| } |