mirror of
https://github.com/RPCSX/llvm.git
synced 2026-01-31 01:05:23 +01:00
Summary: GetBoundryInstruction returns the last instruction as the instruction which follows or end(). Otherwise the last instruction in the boundry set is not being tested by isVectorizable(). Partially solve reordering of instructions. More extensive solution to follow. Reviewers: tstellarAMD, llvm-commits, jlebar Subscribers: escha, arsenm, mzolotukhin Differential Revision: http://reviews.llvm.org/D21934 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274389 91177308-0d34-0410-b5e6-96231b3b80d8
29 lines
1.2 KiB
LLVM
29 lines
1.2 KiB
LLVM
; RUN: opt -mtriple=amdgcn-amd-amdhsa -basicaa -load-store-vectorizer -S -o - %s | FileCheck %s
|
|
|
|
target datalayout = "e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-p24:64:64-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64"
|
|
|
|
; This is NOT OK to vectorize, as either load may alias either store.
|
|
|
|
; CHECK: load double
|
|
; CHECK: store double 0.000000e+00, double addrspace(1)* %a,
|
|
; CHECK: load double
|
|
; CHECK: store double 0.000000e+00, double addrspace(1)* %a.idx.1
|
|
define void @interleave(double addrspace(1)* nocapture %a, double addrspace(1)* nocapture %b, double addrspace(1)* nocapture readonly %c) #0 {
|
|
entry:
|
|
%a.idx.1 = getelementptr inbounds double, double addrspace(1)* %a, i64 1
|
|
%c.idx.1 = getelementptr inbounds double, double addrspace(1)* %c, i64 1
|
|
|
|
%ld.c = load double, double addrspace(1)* %c, align 8 ; may alias store to %a
|
|
store double 0.0, double addrspace(1)* %a, align 8
|
|
|
|
%ld.c.idx.1 = load double, double addrspace(1)* %c.idx.1, align 8 ; may alias store to %a
|
|
store double 0.0, double addrspace(1)* %a.idx.1, align 8
|
|
|
|
%add = fadd double %ld.c, %ld.c.idx.1
|
|
store double %add, double addrspace(1)* %b
|
|
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { nounwind }
|