From b8f3b14dfbc872a2803904cd14df55d159634df7 Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Sat, 30 Oct 2010 12:59:44 +0000 Subject: If a function does a volatile load from a global constant, do not consider it to be readonly. In fact, don't even consider it to be readonly if it does a volatile load from an AllocaInst either (it is debatable as to whether readonly would be correct or not in this case; play safe for the moment). This fixes PR8279. llvm-svn: 117783 --- llvm/lib/Transforms/IPO/FunctionAttrs.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'llvm/lib/Transforms/IPO/FunctionAttrs.cpp') diff --git a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp index d4bce9e48db..39f48145af1 100644 --- a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp +++ b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp @@ -188,12 +188,12 @@ bool FunctionAttrs::AddReadAttrs(const CallGraphSCC &SCC) { continue; } } else if (LoadInst *LI = dyn_cast(I)) { - // Ignore loads from local memory. - if (PointsToLocalMemory(LI->getPointerOperand())) + // Ignore non-volatile loads from local memory. + if (!LI->isVolatile() && PointsToLocalMemory(LI->getPointerOperand())) continue; } else if (StoreInst *SI = dyn_cast(I)) { - // Ignore stores to local memory. - if (PointsToLocalMemory(SI->getPointerOperand())) + // Ignore non-volatile stores to local memory. + if (!SI->isVolatile() && PointsToLocalMemory(SI->getPointerOperand())) continue; } -- cgit v1.2.3