summaryrefslogtreecommitdiff
path: root/lib/Analysis/BasicAliasAnalysis.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Analysis/BasicAliasAnalysis.cpp')
-rw-r--r--lib/Analysis/BasicAliasAnalysis.cpp23
1 files changed, 6 insertions, 17 deletions
diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp
index 57d320971d..3270f35ac4 100644
--- a/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/lib/Analysis/BasicAliasAnalysis.cpp
@@ -63,23 +63,12 @@ static bool AddressMightEscape(const Value *V) {
// callees could modify it.
break; // next use
case Instruction::Call:
- // If the argument to the call has the nocapture attribute, then the call
- // may store or load to the pointer, but it cannot escape.
- if (cast<CallInst>(I)->paramHasAttr(UI.getOperandNo(),
- Attribute::NoCapture))
- continue;
-
- // FIXME: MemIntrinsics should have their operands marked nocapture!
- if (isa<MemIntrinsic>(I))
- continue; // next use
- return true;
- case Instruction::Invoke:
- // If the argument to the call has the nocapture attribute, then the call
- // may store or load to the pointer, but it cannot escape.
- if (cast<InvokeInst>(I)->paramHasAttr(UI.getOperandNo()-2,
- Attribute::NoCapture))
- continue;
- return true;
+ // If the call is to a few known safe intrinsics, we know that it does
+ // not escape.
+ // TODO: Eventually just check the 'nocapture' attribute.
+ if (!isa<MemIntrinsic>(I))
+ return true;
+ break; // next use
default:
return true;
}