Index: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp =================================================================== --- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp +++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp @@ -717,14 +717,14 @@ if (!isa(Object) && CS.getInstruction() != Object && isNonEscapingLocalObject(Object)) { bool PassedAsArg = false; - unsigned ArgNo = 0; - for (ImmutableCallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end(); - CI != CE; ++CI, ++ArgNo) { + unsigned OperandNo = 0; + for (auto CI = CS.data_operands_begin(), CE = CS.data_operands_end(); + CI != CE; ++CI, ++OperandNo) { // Only look at the no-capture or byval pointer arguments. If this // pointer were passed to arguments that were neither of these, then it // couldn't be no-capture. if (!(*CI)->getType()->isPointerTy() || - (!CS.doesNotCapture(ArgNo) && !CS.isByValArgument(ArgNo))) + (!CS.doesNotCapture(OperandNo) && !CS.isByValArgument(OperandNo))) continue; // If this is a no-capture pointer argument, see if we can tell that it Index: llvm/trunk/test/Transforms/DeadStoreElimination/operand-bundles.ll =================================================================== --- llvm/trunk/test/Transforms/DeadStoreElimination/operand-bundles.ll +++ llvm/trunk/test/Transforms/DeadStoreElimination/operand-bundles.ll @@ -0,0 +1,31 @@ +; RUN: opt < %s -basicaa -dse -S | FileCheck %s + +declare noalias i8* @malloc(i64) "malloc-like" + +declare void @foo() +declare void @bar(i8*) + +define void @test() { + %obj = call i8* @malloc(i64 8) + store i8 0, i8* %obj + ; don't remove store. %obj should be treated like it will be read by the @foo. + ; CHECK: store i8 0, i8* %obj + call void @foo() ["deopt" (i8* %obj)] + ret void +} + +define void @test1() { + %obj = call i8* @malloc(i64 8) + store i8 0, i8* %obj + ; CHECK: store i8 0, i8* %obj + call void @bar(i8* nocapture %obj) + ret void +} + +define void @test2() { + %obj = call i8* @malloc(i64 8) + store i8 0, i8* %obj + ; CHECK-NOT: store i8 0, i8* %obj + call void @foo() + ret void +}