| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 | |
| ; RUN: opt -S -passes=slp-vectorizer -mtriple=riscv32-unknown-linux-gnu -mattr=+m,+v,+unaligned-vector-mem < %s | FileCheck %s | |
| define void @load(ptr %pl, ptr %ps) { | |
| ; CHECK-LABEL: define void @load( | |
| ; CHECK-SAME: ptr [[PL:%.*]], ptr [[PS:%.*]]) #[[ATTR0:[0-9]+]] { | |
| ; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i64> @llvm.experimental.vp.strided.load.v2i64.p0.i32(ptr align 4 [[PL]], i32 40, <2 x i1> splat (i1 true), i32 2) | |
| ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to <4 x i32> | |
| ; CHECK-NEXT: [[TMP3:%.*]] = inttoptr <4 x i32> [[TMP2]] to <4 x ptr> | |
| ; CHECK-NEXT: store <4 x ptr> [[TMP3]], ptr [[PS]], align 4 | |
| ; CHECK-NEXT: ret void | |
| ; | |
| %gl1 = getelementptr inbounds ptr, ptr %pl, i32 1 | |
| %gl2 = getelementptr inbounds ptr, ptr %pl, i32 10 | |
| %gl3 = getelementptr inbounds ptr, ptr %pl, i32 11 | |
| %l0 = load ptr, ptr %pl, align 4 | |
| %l1 = load ptr, ptr %gl1, align 4 | |
| %l2 = load ptr, ptr %gl2, align 4 | |
| %l3 = load ptr, ptr %gl3, align 4 | |
| %gs1 = getelementptr inbounds ptr, ptr %ps, i32 1 | |
| %gs2 = getelementptr inbounds ptr, ptr %ps, i32 2 | |
| %gs3 = getelementptr inbounds ptr, ptr %ps, i32 3 | |
| store ptr %l0, ptr %ps, align 4 | |
| store ptr %l1, ptr %gs1, align 4 | |
| store ptr %l2, ptr %gs2, align 4 | |
| store ptr %l3, ptr %gs3, align 4 | |
| ret void | |
| } |