blob: 44d149f492bd7108965153d958e1dc8749f5b848 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -passes=load-store-vectorizer -S < %s | FileCheck %s
target datalayout = "e-pe2:32:32:32:32"
; A pointer with external state must remain a pointer-typed memory access.
; Replacing it with an integer vector load would not transfer its out-of-band
; state.
define { ptr addrspace(2), i32 } @load_external_state_pointer(ptr align 8 %base) {
; CHECK-LABEL: define { ptr addrspace(2), i32 } @load_external_state_pointer(
; CHECK-SAME: ptr align 8 [[BASE:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[NEXT:%.*]] = getelementptr i8, ptr [[BASE]], i64 4
; CHECK-NEXT: [[TMP1:%.*]] = load ptr addrspace(2), ptr [[BASE]], align 8
; CHECK-NEXT: [[I2:%.*]] = load i32, ptr [[NEXT]], align 4
; CHECK-NEXT: [[R0:%.*]] = insertvalue { ptr addrspace(2), i32 } poison, ptr addrspace(2) [[TMP1]], 0
; CHECK-NEXT: [[R1:%.*]] = insertvalue { ptr addrspace(2), i32 } [[R0]], i32 [[I2]], 1
; CHECK-NEXT: ret { ptr addrspace(2), i32 } [[R1]]
;
entry:
%next = getelementptr i8, ptr %base, i64 4
%p = load ptr addrspace(2), ptr %base, align 8
%i = load i32, ptr %next, align 4
%r0 = insertvalue { ptr addrspace(2), i32 } poison,
ptr addrspace(2) %p, 0
%r1 = insertvalue { ptr addrspace(2), i32 } %r0, i32 %i, 1
ret { ptr addrspace(2), i32 } %r1
}
; A pointer with external state must remain a pointer-typed memory access.
; Replacing it with an integer vector store would not transfer its out-of-band
; state.
define void @store_external_state_pointer(
; CHECK-LABEL: define void @store_external_state_pointer(
; CHECK-SAME: ptr align 8 [[BASE:%.*]], ptr addrspace(2) [[P:%.*]], i32 [[I:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[NEXT:%.*]] = getelementptr i8, ptr [[BASE]], i64 4
; CHECK-NEXT: store ptr addrspace(2) [[P]], ptr [[BASE]], align 8
; CHECK-NEXT: store i32 [[I]], ptr [[NEXT]], align 4
; CHECK-NEXT: ret void
;
ptr align 8 %base, ptr addrspace(2) %p, i32 %i) {
entry:
%next = getelementptr i8, ptr %base, i64 4
store ptr addrspace(2) %p, ptr %base, align 8
store i32 %i, ptr %next, align 4
ret void
}