| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 | |
| ; RUN: opt -mtriple=amdgpu12.50-amd-amdhsa -passes=load-store-vectorizer -S < %s | FileCheck %s | |
| ; A prefetch does not write the memory it prefetches, so loads on both sides | |
| ; of it can be vectorized. | |
| define i32 @global_prefetch(ptr addrspace(1) %p) { | |
| ; CHECK-LABEL: define i32 @global_prefetch( | |
| ; CHECK-SAME: ptr addrspace(1) [[P:%.*]]) { | |
| ; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i32>, ptr addrspace(1) [[P]], align 8 | |
| ; CHECK-NEXT: [[A1:%.*]] = extractelement <2 x i32> [[TMP1]], i64 0 | |
| ; CHECK-NEXT: [[B2:%.*]] = extractelement <2 x i32> [[TMP1]], i64 1 | |
| ; CHECK-NEXT: call void @llvm.amdgcn.global.prefetch(ptr addrspace(1) [[P]], i32 8) | |
| ; CHECK-NEXT: [[S:%.*]] = add i32 [[A1]], [[B2]] | |
| ; CHECK-NEXT: ret i32 [[S]] | |
| ; | |
| %p1 = getelementptr inbounds i32, ptr addrspace(1) %p, i64 1 | |
| %a = load i32, ptr addrspace(1) %p, align 8 | |
| call void @llvm.amdgcn.global.prefetch(ptr addrspace(1) %p, i32 8) | |
| %b = load i32, ptr addrspace(1) %p1, align 4 | |
| %s = add i32 %a, %b | |
| ret i32 %s | |
| } |