blob: b2ca7250a6d7bb8b60d8894190330c8b5eb7d936 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt < %s -passes=slp-vectorizer -mtriple=riscv64 -mattr=+v -S | FileCheck %s --check-prefixes=DEFAULT
define void @simple_copy(ptr %dest, ptr %p, ptr %dest2, ptr %dest3) {
;, float %l0, float %l1, float %l2, float %l3, float %l4, float %l5, float %l6, float %l7) {
; DEFAULT-LABEL: define void @simple_copy(
; DEFAULT-SAME: ptr [[DEST:%.*]], ptr [[P:%.*]], ptr [[DEST2:%.*]], ptr [[DEST3:%.*]]) #[[ATTR0:[0-9]+]] {
; DEFAULT-NEXT: [[ENTRY:.*:]]
; DEFAULT-NEXT: [[TMP0:%.*]] = load <8 x float>, ptr [[P]], align 4
; DEFAULT-NEXT: [[L0:%.*]] = load float, ptr [[P]], align 4
; DEFAULT-NEXT: store <8 x float> [[TMP0]], ptr [[DEST]], align 4
; DEFAULT-NEXT: [[D1:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 1
; DEFAULT-NEXT: [[D3:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 3
; DEFAULT-NEXT: [[D4:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 4
; DEFAULT-NEXT: [[D5:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 5
; DEFAULT-NEXT: [[D6:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 6
; DEFAULT-NEXT: [[D7:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 7
; DEFAULT-NEXT: store float [[L0]], ptr [[DEST2]], align 4
; DEFAULT-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[TMP0]], <8 x float> poison, <2 x i32> <i32 1, i32 2>
; DEFAULT-NEXT: store <2 x float> [[TMP1]], ptr [[D1]], align 2
; DEFAULT-NEXT: [[TMP2:%.*]] = extractelement <8 x float> [[TMP0]], i64 3
; DEFAULT-NEXT: store float [[TMP2]], ptr [[D3]], align 2
; DEFAULT-NEXT: [[TMP3:%.*]] = extractelement <8 x float> [[TMP0]], i64 7
; DEFAULT-NEXT: store float [[TMP3]], ptr [[D7]], align 2
; DEFAULT-NEXT: ret void
;
entry:
%inc1 = getelementptr inbounds float, ptr %p, i64 1
%inc2 = getelementptr inbounds float, ptr %p, i64 2
%inc3 = getelementptr inbounds float, ptr %p, i64 3
%inc4 = getelementptr inbounds float, ptr %p, i64 4
%inc5 = getelementptr inbounds float, ptr %p, i64 5
%inc6 = getelementptr inbounds float, ptr %p, i64 6
%inc7 = getelementptr inbounds float, ptr %p, i64 7
%l0 = load float, ptr %p, align 4
%l1 = load float, ptr %inc1, align 2
%l2 = load float, ptr %inc2, align 2
%l3 = load float, ptr %inc3, align 2
%l4 = load float, ptr %inc4, align 2
%l5 = load float, ptr %inc5, align 2
%l6 = load float, ptr %inc6, align 2
%l7 = load float, ptr %inc7, align 2
; %e0 = fadd float %l0, %l0
; %e1 = fadd float %l1, %l1
; %e2 = fadd float %l2, %l2
; %e3 = fadd float %l3, %l3
; %e4 = fadd float %l4, %l4
; %e5 = fadd float %l5, %l5
; %e6 = fadd float %l6, %l6
; %e7 = fadd float %l7, %l7
; %red0 = fadd float %e0, %e1
; %red1 = fadd float %red0, %e2
; %red2 = fadd float %red1, %e3
; %red3 = fadd float %red2, %e4
; %red4 = fadd float %red3, %e5
; %red5 = fadd float %red4, %e6
; %red6 = fadd float %red5, %e7
%i1 = getelementptr inbounds float, ptr %dest, i64 1
%i2 = getelementptr inbounds float, ptr %dest, i64 2
%i3 = getelementptr inbounds float, ptr %dest, i64 3
%i4 = getelementptr inbounds float, ptr %dest, i64 4
%i5 = getelementptr inbounds float, ptr %dest, i64 5
%i6 = getelementptr inbounds float, ptr %dest, i64 6
%i7 = getelementptr inbounds float, ptr %dest, i64 7
store float %l0, ptr %dest, align 4
store float %l1, ptr %i1, align 2
store float %l2, ptr %i2, align 2
store float %l3, ptr %i3, align 2
store float %l4, ptr %i4, align 2
store float %l5, ptr %i5, align 2
store float %l6, ptr %i6, align 2
store float %l7, ptr %i7, align 2
%d1 = getelementptr inbounds float, ptr %dest2, i64 1
%d2 = getelementptr inbounds float, ptr %dest2, i64 2
%d3 = getelementptr inbounds float, ptr %dest2, i64 3
%d4 = getelementptr inbounds float, ptr %dest2, i64 4
%d5 = getelementptr inbounds float, ptr %dest2, i64 5
%d6 = getelementptr inbounds float, ptr %dest2, i64 6
%d7 = getelementptr inbounds float, ptr %dest2, i64 7
store float %l0, ptr %dest2, align 4
store float %l1, ptr %d1, align 2
store float %l2, ptr %d2, align 2
store float %l3, ptr %d3, align 2
; store float %l4, ptr %d4, align 2
; store float %l5, ptr %d5, align 2
; store float %l6, ptr %d6, align 2
store float %l7, ptr %d7, align 2
; %r0 = fadd float %e0, %e1
; %r1 = fadd float %r0, %e2
; %r2 = fadd float %r1, %e3
; %r3 = fadd float %r2, %e4
; %r4 = fadd float %r3, %e5
; %r5 = fadd float %r4, %e6
; %r6 = fadd float %r5, %e7
; store float %r2, ptr %dest2, align 4
; store float %e7, ptr %dest3, align 4
ret void
}