Call the potentially costly isAnnotatedParallel() only once.

Made the uniform write test's checks a bit stricter.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180119 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Pekka Jaaskelainen
2013-04-23 16:44:43 +00:00
parent 13aba14eb5
commit 2e59a125fc
2 changed files with 7 additions and 4 deletions

View File

@ -2556,6 +2556,8 @@ bool LoopVectorizationLegality::canVectorizeMemory() {
PtrRtCheck.Pointers.clear(); PtrRtCheck.Pointers.clear();
PtrRtCheck.Need = false; PtrRtCheck.Need = false;
const bool IsAnnotatedParallel = TheLoop->isAnnotatedParallel();
// For each block. // For each block.
for (Loop::block_iterator bb = TheLoop->block_begin(), for (Loop::block_iterator bb = TheLoop->block_begin(),
be = TheLoop->block_end(); bb != be; ++bb) { be = TheLoop->block_end(); bb != be; ++bb) {
@ -2570,7 +2572,7 @@ bool LoopVectorizationLegality::canVectorizeMemory() {
if (it->mayReadFromMemory()) { if (it->mayReadFromMemory()) {
LoadInst *Ld = dyn_cast<LoadInst>(it); LoadInst *Ld = dyn_cast<LoadInst>(it);
if (!Ld) return false; if (!Ld) return false;
if (!Ld->isSimple() && !TheLoop->isAnnotatedParallel()) { if (!Ld->isSimple() && !IsAnnotatedParallel) {
DEBUG(dbgs() << "LV: Found a non-simple load.\n"); DEBUG(dbgs() << "LV: Found a non-simple load.\n");
return false; return false;
} }
@ -2582,7 +2584,7 @@ bool LoopVectorizationLegality::canVectorizeMemory() {
if (it->mayWriteToMemory()) { if (it->mayWriteToMemory()) {
StoreInst *St = dyn_cast<StoreInst>(it); StoreInst *St = dyn_cast<StoreInst>(it);
if (!St) return false; if (!St) return false;
if (!St->isSimple() && !TheLoop->isAnnotatedParallel()) { if (!St->isSimple() && !IsAnnotatedParallel) {
DEBUG(dbgs() << "LV: Found a non-simple store.\n"); DEBUG(dbgs() << "LV: Found a non-simple store.\n");
return false; return false;
} }
@ -2629,7 +2631,7 @@ bool LoopVectorizationLegality::canVectorizeMemory() {
ReadWrites.insert(std::make_pair(Ptr, ST)); ReadWrites.insert(std::make_pair(Ptr, ST));
} }
if (TheLoop->isAnnotatedParallel()) { if (IsAnnotatedParallel) {
DEBUG(dbgs() DEBUG(dbgs()
<< "LV: A loop annotated parallel, ignore memory dependency " << "LV: A loop annotated parallel, ignore memory dependency "
<< "checks.\n"); << "checks.\n");

View File

@ -4,7 +4,8 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
target triple = "x86_64-unknown-linux-gnu" target triple = "x86_64-unknown-linux-gnu"
;CHECK: @foo ;CHECK: @foo
;CHECK-NOT: <4 x ;CHECK-NOT: <4 x i32>
;CHECK: ret void
; Function Attrs: nounwind uwtable ; Function Attrs: nounwind uwtable
define void @foo(i32* nocapture %a, i32* nocapture %b, i32 %k, i32 %m) #0 { define void @foo(i32* nocapture %a, i32* nocapture %b, i32 %k, i32 %m) #0 {