|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
| 2 | +; RUN: opt -S --passes=slp-vectorizer -mtriple=arm-- -mattr=+neon < %s | FileCheck %s |
| 3 | + |
| 4 | +define void @test(ptr %a, ptr %b, ptr %r) { |
| 5 | +; CHECK-LABEL: define void @test( |
| 6 | +; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]], ptr [[R:%.*]]) #[[ATTR0:[0-9]+]] { |
| 7 | +; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr [[A]], align 4 |
| 8 | +; CHECK-NEXT: [[TMP2:%.*]] = load <4 x float>, ptr [[B]], align 4 |
| 9 | +; CHECK-NEXT: [[TMP3:%.*]] = fadd <4 x float> [[TMP1]], [[TMP2]] |
| 10 | +; CHECK-NEXT: store <4 x float> [[TMP3]], ptr [[R]], align 4 |
| 11 | +; CHECK-NEXT: ret void |
| 12 | +; |
| 13 | + %v.a.0 = load float, ptr %a |
| 14 | + %a.1 = getelementptr i8, ptr %a, i64 4 |
| 15 | + %v.a.1 = load float, ptr %a.1 |
| 16 | + %a.2 = getelementptr i8, ptr %a, i64 8 |
| 17 | + %v.a.2 = load float, ptr %a.2 |
| 18 | + %a.3 = getelementptr i8, ptr %a, i64 12 |
| 19 | + %v.a.3 = load float, ptr %a.3 |
| 20 | + %v.b.0 = load float, ptr %b |
| 21 | + %b.1 = getelementptr i8, ptr %b, i64 4 |
| 22 | + %v.b.1 = load float, ptr %b.1 |
| 23 | + %b.2 = getelementptr i8, ptr %b, i64 8 |
| 24 | + %v.b.2 = load float, ptr %b.2 |
| 25 | + %b.3 = getelementptr i8, ptr %b, i64 12 |
| 26 | + %v.b.3 = load float, ptr %b.3 |
| 27 | + %v.r.0 = fadd float %v.a.0, %v.b.0 |
| 28 | + %v.r.1 = fadd float %v.a.1, %v.b.1 |
| 29 | + %v.r.2 = fadd float %v.a.2, %v.b.2 |
| 30 | + %v.r.3 = fadd float %v.a.3, %v.b.3 |
| 31 | + store float %v.r.0, ptr %r |
| 32 | + %r.1 = getelementptr i8, ptr %r, i64 4 |
| 33 | + store float %v.r.1, ptr %r.1 |
| 34 | + %r.2 = getelementptr i8, ptr %r, i64 8 |
| 35 | + store float %v.r.2, ptr %r.2 |
| 36 | + %r.3 = getelementptr i8, ptr %r, i64 12 |
| 37 | + store float %v.r.3, ptr %r.3 |
| 38 | + ret void |
| 39 | +} |
0 commit comments