From 9e86f4364b912ae743490ba01d6989acfd12c046 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Wed, 7 Jul 2010 14:27:09 +0000 Subject: [PATCH] Remove interprocedural-basic-aa and associated code. The AliasAnalysis interface needs implementations to be consistent, so any code which wants to support different semantics must use a different interface. It's not currently worthwhile to add a new interface for this new concept. Document that AliasAnalysis doesn't support cross-function queries. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107776 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/AliasAnalysis.html | 21 +- include/llvm/Analysis/AliasAnalysis.h | 6 +- include/llvm/Analysis/Passes.h | 20 +- lib/Analysis/AliasAnalysis.cpp | 16 +- lib/Analysis/AliasAnalysisEvaluator.cpp | 134 +- lib/Analysis/BasicAliasAnalysis.cpp | 91 +- .../BasicAA/args-rets-allocas-loads.ll | 1936 +++-------------- test/Analysis/BasicAA/interprocedural.ll | 73 - 8 files changed, 338 insertions(+), 1959 deletions(-) delete mode 100644 test/Analysis/BasicAA/interprocedural.ll diff --git a/docs/AliasAnalysis.html b/docs/AliasAnalysis.html index 8e6a7fd4d7c..c6330a94695 100644 --- a/docs/AliasAnalysis.html +++ b/docs/AliasAnalysis.html @@ -117,6 +117,11 @@ as the actual call or invoke instructions that performs the call. The AliasAnalysis interface also exposes some helper methods which allow you to get mod/ref information for arbitrary instructions.

+

All AliasAnalysis interfaces require that in queries involving +multiple values, values which are not +constants are all defined within the +same function.

+ @@ -181,9 +186,13 @@ that the accesses alias.

-The alias method is the primary interface used to determine whether or -not two memory objects alias each other. It takes two memory objects as input -and returns MustAlias, MayAlias, or NoAlias as appropriate. +

The alias method is the primary interface used to determine whether +or not two memory objects alias each other. It takes two memory objects as +input and returns MustAlias, MayAlias, or NoAlias as appropriate.

+ +

Like all AliasAnalysis interfaces, the alias method requires +that either the two pointer values be defined within the same function, or at +least one of the values is a constant.

@@ -202,10 +211,8 @@ the other -- in this case, there is a dependence, but it's mediated by the free and reallocation.

As an exception to this is with the -noalias keyword. AliasAnalysis -implementations may choose to respect the noalias keyword and ignore -the "irrelevant" dependencies, provided their clients do not need to be aware -of these dependencies for correctness.

+noalias keyword; the "irrelevant" +dependencies are ignored.

The MayAlias response is used whenever the two pointers might refer to the same object. If the two memory objects overlap, but do not start at the same diff --git a/include/llvm/Analysis/AliasAnalysis.h b/include/llvm/Analysis/AliasAnalysis.h index 613dc20215a..e611a35fc98 100644 --- a/include/llvm/Analysis/AliasAnalysis.h +++ b/include/llvm/Analysis/AliasAnalysis.h @@ -323,10 +323,10 @@ bool isNoAliasCall(const Value *V); /// identifiable object. This returns true for: /// Global Variables and Functions (but not Global Aliases) /// Allocas and Mallocs -/// ByVal and NoAlias Arguments, if Interprocedural is false -/// NoAlias returns, if Interprocedural is false +/// ByVal and NoAlias Arguments +/// NoAlias returns /// -bool isIdentifiedObject(const Value *V, bool Interprocedural = false); +bool isIdentifiedObject(const Value *V); } // End llvm namespace diff --git a/include/llvm/Analysis/Passes.h b/include/llvm/Analysis/Passes.h index 1020e07e0ea..ce3f7a6677a 100644 --- a/include/llvm/Analysis/Passes.h +++ b/include/llvm/Analysis/Passes.h @@ -51,13 +51,6 @@ namespace llvm { // FunctionPass *createAAEvalPass(); - //===--------------------------------------------------------------------===// - // - // createInterproceduralAAEvalPass - This pass implements a simple - // N^2 interprocedural alias analysis accuracy evaluator. - // - Pass *createInterproceduralAAEvalPass(); - //===--------------------------------------------------------------------===// // // createNoAAPass - This pass implements a "I don't know" alias analysis. @@ -67,21 +60,10 @@ namespace llvm { //===--------------------------------------------------------------------===// // // createBasicAliasAnalysisPass - This pass implements the default alias - // analysis. This analysis respects the noalias attribute, so it is not - // suitable for some interprocedural uses (see the discussion of noalias - // in AliasAnalysis.html for details). + // analysis. // ImmutablePass *createBasicAliasAnalysisPass(); - //===--------------------------------------------------------------------===// - // - // createInterproceduralBasicAliasAnalysisPass - This pass is similar to - // baiscaa, except that it properly supports queries to values which live - // in different functions. Unlike the regular BasicAliasAnalysis, this - // implementation does not respect the noalias attribute. - // - ImmutablePass *createInterproceduralBasicAliasAnalysisPass(); - //===--------------------------------------------------------------------===// // /// createLibCallAliasAnalysisPass - Create an alias analysis pass that knows diff --git a/lib/Analysis/AliasAnalysis.cpp b/lib/Analysis/AliasAnalysis.cpp index d9fe2f74072..503fbbdab8d 100644 --- a/lib/Analysis/AliasAnalysis.cpp +++ b/lib/Analysis/AliasAnalysis.cpp @@ -229,20 +229,18 @@ bool llvm::isNoAliasCall(const Value *V) { /// identifiable object. This returns true for: /// Global Variables and Functions (but not Global Aliases) /// Allocas and Mallocs -/// ByVal and NoAlias Arguments, if Interprocedural is false -/// NoAlias returns, if Interprocedural is false +/// ByVal and NoAlias Arguments +/// NoAlias returns /// -bool llvm::isIdentifiedObject(const Value *V, bool Interprocedural) { +bool llvm::isIdentifiedObject(const Value *V) { if (isa(V)) return true; if (isa(V) && !isa(V)) return true; - if (!Interprocedural) { - if (isNoAliasCall(V)) - return true; - if (const Argument *A = dyn_cast(V)) - return A->hasNoAliasAttr() || A->hasByValAttr(); - } + if (isNoAliasCall(V)) + return true; + if (const Argument *A = dyn_cast(V)) + return A->hasNoAliasAttr() || A->hasByValAttr(); return false; } diff --git a/lib/Analysis/AliasAnalysisEvaluator.cpp b/lib/Analysis/AliasAnalysisEvaluator.cpp index d4ebdf3465f..37ee9fc22c9 100644 --- a/lib/Analysis/AliasAnalysisEvaluator.cpp +++ b/lib/Analysis/AliasAnalysisEvaluator.cpp @@ -21,7 +21,6 @@ #include "llvm/DerivedTypes.h" #include "llvm/Function.h" #include "llvm/Instructions.h" -#include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/Analysis/Passes.h" #include "llvm/Analysis/AliasAnalysis.h" @@ -45,21 +44,20 @@ static cl::opt PrintRef("print-ref", cl::ReallyHidden); static cl::opt PrintModRef("print-modref", cl::ReallyHidden); namespace { - /// AAEval - Base class for exhaustive alias analysis evaluators. - class AAEval { - protected: + class AAEval : public FunctionPass { unsigned NoAlias, MayAlias, MustAlias; unsigned NoModRef, Mod, Ref, ModRef; - SetVector Pointers; - SetVector CallSites; + public: + static char ID; // Pass identification, replacement for typeid + AAEval() : FunctionPass(&ID) {} - void getAnalysisUsage(AnalysisUsage &AU) const { + virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired(); AU.setPreservesAll(); } - void doInitialization(Module &M) { + bool doInitialization(Module &M) { NoAlias = MayAlias = MustAlias = 0; NoModRef = Mod = Ref = ModRef = 0; @@ -67,85 +65,19 @@ namespace { PrintNoAlias = PrintMayAlias = PrintMustAlias = true; PrintNoModRef = PrintMod = PrintRef = PrintModRef = true; } - } - - void runOnFunction(Function &F); - void evaluate(AliasAnalysis *AA, Module *M); - void doFinalization(Module &M); - }; - - class FunctionAAEval : public FunctionPass, AAEval { - public: - static char ID; // Pass identification, replacement for typeid - FunctionAAEval() : FunctionPass(&ID) {} - - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - return AAEval::getAnalysisUsage(AU); - } - - virtual bool doInitialization(Module &M) { - AAEval::doInitialization(M); return false; } - virtual bool runOnFunction(Function &F) { - AAEval::runOnFunction(F); - - if (PrintNoAlias || PrintMayAlias || PrintMustAlias || - PrintNoModRef || PrintMod || PrintRef || PrintModRef) - errs() << "Function: " << F.getName() << ": " << Pointers.size() - << " pointers, " << CallSites.size() << " call sites\n"; - - AAEval::evaluate(&getAnalysis(), F.getParent()); - return false; - } - - virtual bool doFinalization(Module &M) { - AAEval::doFinalization(M); - return false; - } - }; - - class InterproceduralAAEval : public ModulePass, AAEval { - public: - static char ID; // Pass identification, replacement for typeid - InterproceduralAAEval() : ModulePass(&ID) {} - - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - return AAEval::getAnalysisUsage(AU); - } - - virtual bool runOnModule(Module &M) { - AAEval::doInitialization(M); - for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) - AAEval::runOnFunction(*I); - - if (PrintNoAlias || PrintMayAlias || PrintMustAlias || - PrintNoModRef || PrintMod || PrintRef || PrintModRef) - errs() << "Module: " << Pointers.size() - << " pointers, " << CallSites.size() << " call sites\n"; - - AAEval::evaluate(&getAnalysis(), &M); - AAEval::doFinalization(M); - return false; - } + bool runOnFunction(Function &F); + bool doFinalization(Module &M); }; } -char FunctionAAEval::ID = 0; -static RegisterPass +char AAEval::ID = 0; +static RegisterPass X("aa-eval", "Exhaustive Alias Analysis Precision Evaluator", false, true); -FunctionPass *llvm::createAAEvalPass() { return new FunctionAAEval(); } - -char InterproceduralAAEval::ID = 0; -static RegisterPass -Y("interprocedural-aa-eval", - "Exhaustive Interprocedural Alias Analysis Precision Evaluator", false, true); - -Pass *llvm::createInterproceduralAAEvalPass() { - return new InterproceduralAAEval(); -} +FunctionPass *llvm::createAAEvalPass() { return new AAEval(); } static void PrintResults(const char *Msg, bool P, const Value *V1, const Value *V2, const Module *M) { @@ -180,7 +112,12 @@ static inline bool isInterestingPointer(Value *V) { && !isa(V); } -void AAEval::runOnFunction(Function &F) { +bool AAEval::runOnFunction(Function &F) { + AliasAnalysis &AA = getAnalysis(); + + SetVector Pointers; + SetVector CallSites; + for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; ++I) if (I->getType()->isPointerTy()) // Add all pointer arguments. Pointers.insert(I); @@ -210,31 +147,33 @@ void AAEval::runOnFunction(Function &F) { if (CS.getInstruction()) CallSites.insert(CS); } -} -void AAEval::evaluate(AliasAnalysis *AA, Module *M) { + if (PrintNoAlias || PrintMayAlias || PrintMustAlias || + PrintNoModRef || PrintMod || PrintRef || PrintModRef) + errs() << "Function: " << F.getName() << ": " << Pointers.size() + << " pointers, " << CallSites.size() << " call sites\n"; // iterate over the worklist, and run the full (n^2)/2 disambiguations for (SetVector::iterator I1 = Pointers.begin(), E = Pointers.end(); I1 != E; ++I1) { unsigned I1Size = ~0u; const Type *I1ElTy = cast((*I1)->getType())->getElementType(); - if (I1ElTy->isSized()) I1Size = AA->getTypeStoreSize(I1ElTy); + if (I1ElTy->isSized()) I1Size = AA.getTypeStoreSize(I1ElTy); for (SetVector::iterator I2 = Pointers.begin(); I2 != I1; ++I2) { unsigned I2Size = ~0u; const Type *I2ElTy =cast((*I2)->getType())->getElementType(); - if (I2ElTy->isSized()) I2Size = AA->getTypeStoreSize(I2ElTy); + if (I2ElTy->isSized()) I2Size = AA.getTypeStoreSize(I2ElTy); - switch (AA->alias(*I1, I1Size, *I2, I2Size)) { + switch (AA.alias(*I1, I1Size, *I2, I2Size)) { case AliasAnalysis::NoAlias: - PrintResults("NoAlias", PrintNoAlias, *I1, *I2, M); + PrintResults("NoAlias", PrintNoAlias, *I1, *I2, F.getParent()); ++NoAlias; break; case AliasAnalysis::MayAlias: - PrintResults("MayAlias", PrintMayAlias, *I1, *I2, M); + PrintResults("MayAlias", PrintMayAlias, *I1, *I2, F.getParent()); ++MayAlias; break; case AliasAnalysis::MustAlias: - PrintResults("MustAlias", PrintMustAlias, *I1, *I2, M); + PrintResults("MustAlias", PrintMustAlias, *I1, *I2, F.getParent()); ++MustAlias; break; default: errs() << "Unknown alias query result!\n"; @@ -251,20 +190,20 @@ void AAEval::evaluate(AliasAnalysis *AA, Module *M) { V != Ve; ++V) { unsigned Size = ~0u; const Type *ElTy = cast((*V)->getType())->getElementType(); - if (ElTy->isSized()) Size = AA->getTypeStoreSize(ElTy); + if (ElTy->isSized()) Size = AA.getTypeStoreSize(ElTy); - switch (AA->getModRefInfo(*C, *V, Size)) { + switch (AA.getModRefInfo(*C, *V, Size)) { case AliasAnalysis::NoModRef: - PrintModRefResults("NoModRef", PrintNoModRef, I, *V, M); + PrintModRefResults("NoModRef", PrintNoModRef, I, *V, F.getParent()); ++NoModRef; break; case AliasAnalysis::Mod: - PrintModRefResults(" Mod", PrintMod, I, *V, M); + PrintModRefResults(" Mod", PrintMod, I, *V, F.getParent()); ++Mod; break; case AliasAnalysis::Ref: - PrintModRefResults(" Ref", PrintRef, I, *V, M); + PrintModRefResults(" Ref", PrintRef, I, *V, F.getParent()); ++Ref; break; case AliasAnalysis::ModRef: - PrintModRefResults(" ModRef", PrintModRef, I, *V, M); + PrintModRefResults(" ModRef", PrintModRef, I, *V, F.getParent()); ++ModRef; break; default: errs() << "Unknown alias query result!\n"; @@ -272,8 +211,7 @@ void AAEval::evaluate(AliasAnalysis *AA, Module *M) { } } - Pointers.clear(); - CallSites.clear(); + return false; } static void PrintPercent(unsigned Num, unsigned Sum) { @@ -281,7 +219,7 @@ static void PrintPercent(unsigned Num, unsigned Sum) { << ((Num*1000ULL/Sum) % 10) << "%)\n"; } -void AAEval::doFinalization(Module &M) { +bool AAEval::doFinalization(Module &M) { unsigned AliasSum = NoAlias + MayAlias + MustAlias; errs() << "===== Alias Analysis Evaluator Report =====\n"; if (AliasSum == 0) { @@ -317,4 +255,6 @@ void AAEval::doFinalization(Module &M) { << NoModRef*100/ModRefSum << "%/" << Mod*100/ModRefSum << "%/" << Ref*100/ModRefSum << "%/" << ModRef*100/ModRefSum << "%\n"; } + + return false; } diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index 2f99c2e6b6a..d3a67a8eba3 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -194,6 +194,7 @@ ImmutablePass *llvm::createNoAAPass() { return new NoAA(); } // BasicAliasAnalysis Pass //===----------------------------------------------------------------------===// +#ifndef NDEBUG static const Function *getParent(const Value *V) { if (const Instruction *inst = dyn_cast(V)) return inst->getParent()->getParent(); @@ -204,15 +205,6 @@ static const Function *getParent(const Value *V) { return NULL; } -static bool sameParent(const Value *O1, const Value *O2) { - - const Function *F1 = getParent(O1); - const Function *F2 = getParent(O2); - - return F1 && F1 == F2; -} - -#ifdef XDEBUG static bool notDifferentParent(const Value *O1, const Value *O2) { const Function *F1 = getParent(O1); @@ -227,25 +219,14 @@ namespace { /// Because it doesn't chain to a previous alias analysis (like -no-aa), it /// derives from the NoAA class. struct BasicAliasAnalysis : public NoAA { - /// Interprocedural - Flag for "interprocedural" mode, where we must - /// support queries of values which live in different functions. - bool Interprocedural; - static char ID; // Class identification, replacement for typeinfo - BasicAliasAnalysis() - : NoAA(&ID), Interprocedural(false) {} - BasicAliasAnalysis(void *PID, bool interprocedural) - : NoAA(PID), Interprocedural(interprocedural) {} + BasicAliasAnalysis() : NoAA(&ID) {} AliasResult alias(const Value *V1, unsigned V1Size, const Value *V2, unsigned V2Size) { assert(Visited.empty() && "Visited must be cleared after use!"); -#ifdef XDEBUG - assert((Interprocedural || notDifferentParent(V1, V2)) && - "BasicAliasAnalysis (-basicaa) doesn't support interprocedural " - "queries; use InterproceduralAliasAnalysis " - "(-interprocedural-basic-aa) instead."); -#endif + assert(notDifferentParent(V1, V2) && + "BasicAliasAnalysis doesn't support interprocedural queries."); AliasResult Alias = aliasCheck(V1, V1Size, V2, V2Size); Visited.clear(); return Alias; @@ -324,6 +305,9 @@ bool BasicAliasAnalysis::pointsToConstantMemory(const Value *P) { /// simple "address taken" analysis on local objects. AliasAnalysis::ModRefResult BasicAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) { + assert(notDifferentParent(CS.getInstruction(), P) && + "AliasAnalysis query involving multiple functions!"); + const Value *Object = P->getUnderlyingObject(); // If this is a tail call and P points to a stack location, we know that @@ -336,16 +320,10 @@ BasicAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) { if (CI->isTailCall()) return NoModRef; - // If we can identify an object and it's known to be within the - // same function as the call, we can ignore interprocedural concerns. - bool EffectivelyInterprocedural = - Interprocedural && !sameParent(Object, CS.getInstruction()); - // If the pointer is to a locally allocated object that does not escape, // then the call can not mod/ref the pointer unless the call takes the pointer // as an argument, and itself doesn't capture it. if (!isa(Object) && CS.getInstruction() != Object && - !EffectivelyInterprocedural && isNonEscapingLocalObject(Object)) { bool PassedAsArg = false; unsigned ArgNo = 0; @@ -765,36 +743,25 @@ BasicAliasAnalysis::aliasCheck(const Value *V1, unsigned V1Size, if (CPN->getType()->getAddressSpace() == 0) return NoAlias; - // If we can identify two objects and they're known to be within the - // same function, we can ignore interprocedural concerns. - bool EffectivelyInterprocedural = - Interprocedural && !sameParent(O1, O2); - if (O1 != O2) { // If V1/V2 point to two different objects we know that we have no alias. - if (isIdentifiedObject(O1, EffectivelyInterprocedural) && - isIdentifiedObject(O2, EffectivelyInterprocedural)) + if (isIdentifiedObject(O1) && isIdentifiedObject(O2)) return NoAlias; // Constant pointers can't alias with non-const isIdentifiedObject objects. - if ((isa(O1) && - isIdentifiedObject(O2, EffectivelyInterprocedural) && - !isa(O2)) || - (isa(O2) && - isIdentifiedObject(O1, EffectivelyInterprocedural) && - !isa(O1))) + if ((isa(O1) && isIdentifiedObject(O2) && !isa(O2)) || + (isa(O2) && isIdentifiedObject(O1) && !isa(O1))) return NoAlias; // Arguments can't alias with local allocations or noalias calls // in the same function. - if (!EffectivelyInterprocedural && - ((isa(O1) && (isa(O2) || isNoAliasCall(O2))) || + if (((isa(O1) && (isa(O2) || isNoAliasCall(O2))) || (isa(O2) && (isa(O1) || isNoAliasCall(O1))))) return NoAlias; // Most objects can't alias null. - if ((isa(V2) && isKnownNonNull(O1)) || - (isa(V1) && isKnownNonNull(O2))) + if ((isa(O2) && isKnownNonNull(O1)) || + (isa(O1) && isKnownNonNull(O2))) return NoAlias; } @@ -814,7 +781,7 @@ BasicAliasAnalysis::aliasCheck(const Value *V1, unsigned V1Size, // temporary store the nocapture argument's value in a temporary memory // location if that memory location doesn't escape. Or it may pass a // nocapture value to other functions as long as they don't capture it. - if (O1 != O2 && !EffectivelyInterprocedural) { + if (O1 != O2) { if (isEscapeSource(O1) && isNonEscapingLocalObject(O2)) return NoAlias; if (isEscapeSource(O2) && isNonEscapingLocalObject(O1)) @@ -850,33 +817,3 @@ BasicAliasAnalysis::aliasCheck(const Value *V1, unsigned V1Size, // Make sure that anything that uses AliasAnalysis pulls in this file. DEFINING_FILE_FOR(BasicAliasAnalysis) - -//===----------------------------------------------------------------------===// -// InterproceduralBasicAliasAnalysis Pass -//===----------------------------------------------------------------------===// - -namespace { - /// InterproceduralBasicAliasAnalysis - This is similar to basicaa, except - /// that it properly supports queries to values which live in different - /// functions. - /// - /// Note that we don't currently take this to the extreme, analyzing all - /// call sites of a function to answer a query about an Argument. - /// - struct InterproceduralBasicAliasAnalysis : public BasicAliasAnalysis { - static char ID; // Class identification, replacement for typeinfo - InterproceduralBasicAliasAnalysis() : BasicAliasAnalysis(&ID, true) {} - }; -} - -// Register this pass... -char InterproceduralBasicAliasAnalysis::ID = 0; -static RegisterPass -W("interprocedural-basic-aa", "Interprocedural Basic Alias Analysis", false, true); - -// Declare that we implement the AliasAnalysis interface -static RegisterAnalysisGroup Z(W); - -ImmutablePass *llvm::createInterproceduralBasicAliasAnalysisPass() { - return new InterproceduralBasicAliasAnalysis(); -} diff --git a/test/Analysis/BasicAA/args-rets-allocas-loads.ll b/test/Analysis/BasicAA/args-rets-allocas-loads.ll index 3830223886f..5d3f67ebe1a 100644 --- a/test/Analysis/BasicAA/args-rets-allocas-loads.ll +++ b/test/Analysis/BasicAA/args-rets-allocas-loads.ll @@ -1,5 +1,4 @@ -; RUN: opt -interprocedural-basic-aa -interprocedural-aa-eval -print-all-alias-modref-info -disable-output < %s |& FileCheck --check-prefix=IPAA %s -; RUN: opt -basicaa -aa-eval -print-all-alias-modref-info -disable-output < %s |& FileCheck --check-prefix=FUNCAA %s +; RUN: opt -aa-eval -print-all-alias-modref-info -disable-output < %s |& FileCheck %s declare void @callee(double* %callee_arg) declare void @nocap_callee(double* nocapture %nocap_callee_arg) @@ -48,1675 +47,264 @@ define void @caller_a(double* %arg_a0, ret void } -; caller_b is the same as caller_a but with different names, to test -; interprocedural queries. -define void @caller_b(double* %arg_b0, - double* %arg_b1, - double* noalias %noalias_arg_b0, - double* noalias %noalias_arg_b1, - double** %indirect_b0, - double** %indirect_b1) { - %loaded_b0 = load double** %indirect_b0 - %loaded_b1 = load double** %indirect_b1 - - %escape_alloca_b0 = alloca double - %escape_alloca_b1 = alloca double - %noescape_alloca_b0 = alloca double - %noescape_alloca_b1 = alloca double - - %normal_ret_b0 = call double* @normal_returner() - %normal_ret_b1 = call double* @normal_returner() - %noalias_ret_b0 = call double* @noalias_returner() - %noalias_ret_b1 = call double* @noalias_returner() - - call void @callee(double* %escape_alloca_b0) - call void @callee(double* %escape_alloca_b1) - call void @nocap_callee(double* %noescape_alloca_b0) - call void @nocap_callee(double* %noescape_alloca_b1) - - store double 0.0, double* %loaded_b0 - store double 0.0, double* %loaded_b1 - store double 0.0, double* %arg_b0 - store double 0.0, double* %arg_b1 - store double 0.0, double* %noalias_arg_b0 - store double 0.0, double* %noalias_arg_b1 - store double 0.0, double* %escape_alloca_b0 - store double 0.0, double* %escape_alloca_b1 - store double 0.0, double* %noescape_alloca_b0 - store double 0.0, double* %noescape_alloca_b1 - store double 0.0, double* %normal_ret_b0 - store double 0.0, double* %normal_ret_b1 - store double 0.0, double* %noalias_ret_b0 - store double 0.0, double* %noalias_ret_b1 - ret void -} - -; FUNCAA: Function: caller_a: 16 pointers, 8 call sites -; FUNCAA: MayAlias: double* %arg_a0, double* %arg_a1 -; FUNCAA: NoAlias: double* %arg_a0, double* %noalias_arg_a0 -; FUNCAA: NoAlias: double* %arg_a1, double* %noalias_arg_a0 -; FUNCAA: NoAlias: double* %arg_a0, double* %noalias_arg_a1 -; FUNCAA: NoAlias: double* %arg_a1, double* %noalias_arg_a1 -; FUNCAA: NoAlias: double* %noalias_arg_a0, double* %noalias_arg_a1 -; FUNCAA: MayAlias: double* %arg_a0, double** %indirect_a0 -; FUNCAA: MayAlias: double* %arg_a1, double** %indirect_a0 -; FUNCAA: NoAlias: double* %noalias_arg_a0, double** %indirect_a0 -; FUNCAA: NoAlias: double* %noalias_arg_a1, double** %indirect_a0 -; FUNCAA: MayAlias: double* %arg_a0, double** %indirect_a1 -; FUNCAA: MayAlias: double* %arg_a1, double** %indirect_a1 -; FUNCAA: NoAlias: double* %noalias_arg_a0, double** %indirect_a1 -; FUNCAA: NoAlias: double* %noalias_arg_a1, double** %indirect_a1 -; FUNCAA: MayAlias: double** %indirect_a0, double** %indirect_a1 -; FUNCAA: MayAlias: double* %arg_a0, double* %loaded_a0 -; FUNCAA: MayAlias: double* %arg_a1, double* %loaded_a0 -; FUNCAA: NoAlias: double* %loaded_a0, double* %noalias_arg_a0 -; FUNCAA: NoAlias: double* %loaded_a0, double* %noalias_arg_a1 -; FUNCAA: MayAlias: double* %loaded_a0, double** %indirect_a0 -; FUNCAA: MayAlias: double* %loaded_a0, double** %indirect_a1 -; FUNCAA: MayAlias: double* %arg_a0, double* %loaded_a1 -; FUNCAA: MayAlias: double* %arg_a1, double* %loaded_a1 -; FUNCAA: NoAlias: double* %loaded_a1, double* %noalias_arg_a0 -; FUNCAA: NoAlias: double* %loaded_a1, double* %noalias_arg_a1 -; FUNCAA: MayAlias: double* %loaded_a1, double** %indirect_a0 -; FUNCAA: MayAlias: double* %loaded_a1, double** %indirect_a1 -; FUNCAA: MayAlias: double* %loaded_a0, double* %loaded_a1 -; FUNCAA: NoAlias: double* %arg_a0, double* %escape_alloca_a0 -; FUNCAA: NoAlias: double* %arg_a1, double* %escape_alloca_a0 -; FUNCAA: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a0 -; FUNCAA: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a1 -; FUNCAA: NoAlias: double* %escape_alloca_a0, double** %indirect_a0 -; FUNCAA: NoAlias: double* %escape_alloca_a0, double** %indirect_a1 -; FUNCAA: MayAlias: double* %escape_alloca_a0, double* %loaded_a0 -; FUNCAA: MayAlias: double* %escape_alloca_a0, double* %loaded_a1 -; FUNCAA: NoAlias: double* %arg_a0, double* %escape_alloca_a1 -; FUNCAA: NoAlias: double* %arg_a1, double* %escape_alloca_a1 -; FUNCAA: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a0 -; FUNCAA: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a1 -; FUNCAA: NoAlias: double* %escape_alloca_a1, double** %indirect_a0 -; FUNCAA: NoAlias: double* %escape_alloca_a1, double** %indirect_a1 -; FUNCAA: MayAlias: double* %escape_alloca_a1, double* %loaded_a0 -; FUNCAA: MayAlias: double* %escape_alloca_a1, double* %loaded_a1 -; FUNCAA: NoAlias: double* %escape_alloca_a0, double* %escape_alloca_a1 -; FUNCAA: NoAlias: double* %arg_a0, double* %noescape_alloca_a0 -; FUNCAA: NoAlias: double* %arg_a1, double* %noescape_alloca_a0 -; FUNCAA: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a0 -; FUNCAA: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a0 -; FUNCAA: NoAlias: double* %noescape_alloca_a0, double** %indirect_a0 -; FUNCAA: NoAlias: double* %noescape_alloca_a0, double** %indirect_a1 -; FUNCAA: NoAlias: double* %loaded_a0, double* %noescape_alloca_a0 -; FUNCAA: NoAlias: double* %loaded_a1, double* %noescape_alloca_a0 -; FUNCAA: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a0 -; FUNCAA: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a0 -; FUNCAA: NoAlias: double* %arg_a0, double* %noescape_alloca_a1 -; FUNCAA: NoAlias: double* %arg_a1, double* %noescape_alloca_a1 -; FUNCAA: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a1 -; FUNCAA: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a1 -; FUNCAA: NoAlias: double* %noescape_alloca_a1, double** %indirect_a0 -; FUNCAA: NoAlias: double* %noescape_alloca_a1, double** %indirect_a1 -; FUNCAA: NoAlias: double* %loaded_a0, double* %noescape_alloca_a1 -; FUNCAA: NoAlias: double* %loaded_a1, double* %noescape_alloca_a1 -; FUNCAA: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a1 -; FUNCAA: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a1 -; FUNCAA: NoAlias: double* %noescape_alloca_a0, double* %noescape_alloca_a1 -; FUNCAA: MayAlias: double* %arg_a0, double* %normal_ret_a0 -; FUNCAA: MayAlias: double* %arg_a1, double* %normal_ret_a0 -; FUNCAA: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a0 -; FUNCAA: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a0 -; FUNCAA: MayAlias: double* %normal_ret_a0, double** %indirect_a0 -; FUNCAA: MayAlias: double* %normal_ret_a0, double** %indirect_a1 -; FUNCAA: MayAlias: double* %loaded_a0, double* %normal_ret_a0 -; FUNCAA: MayAlias: double* %loaded_a1, double* %normal_ret_a0 -; FUNCAA: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a0 -; FUNCAA: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a0 -; FUNCAA: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a0 -; FUNCAA: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a0 -; FUNCAA: MayAlias: double* %arg_a0, double* %normal_ret_a1 -; FUNCAA: MayAlias: double* %arg_a1, double* %normal_ret_a1 -; FUNCAA: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a1 -; FUNCAA: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a1 -; FUNCAA: MayAlias: double* %normal_ret_a1, double** %indirect_a0 -; FUNCAA: MayAlias: double* %normal_ret_a1, double** %indirect_a1 -; FUNCAA: MayAlias: double* %loaded_a0, double* %normal_ret_a1 -; FUNCAA: MayAlias: double* %loaded_a1, double* %normal_ret_a1 -; FUNCAA: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a1 -; FUNCAA: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a1 -; FUNCAA: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a1 -; FUNCAA: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a1 -; FUNCAA: MayAlias: double* %normal_ret_a0, double* %normal_ret_a1 -; FUNCAA: NoAlias: double* %arg_a0, double* %noalias_ret_a0 -; FUNCAA: NoAlias: double* %arg_a1, double* %noalias_ret_a0 -; FUNCAA: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a0 -; FUNCAA: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a0 -; FUNCAA: NoAlias: double* %noalias_ret_a0, double** %indirect_a0 -; FUNCAA: NoAlias: double* %noalias_ret_a0, double** %indirect_a1 -; FUNCAA: NoAlias: double* %loaded_a0, double* %noalias_ret_a0 -; FUNCAA: NoAlias: double* %loaded_a1, double* %noalias_ret_a0 -; FUNCAA: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a0 -; FUNCAA: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a0 -; FUNCAA: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a0 -; FUNCAA: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a1 -; FUNCAA: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a0 -; FUNCAA: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a1 -; FUNCAA: NoAlias: double* %arg_a0, double* %noalias_ret_a1 -; FUNCAA: NoAlias: double* %arg_a1, double* %noalias_ret_a1 -; FUNCAA: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a1 -; FUNCAA: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a1 -; FUNCAA: NoAlias: double* %noalias_ret_a1, double** %indirect_a0 -; FUNCAA: NoAlias: double* %noalias_ret_a1, double** %indirect_a1 -; FUNCAA: NoAlias: double* %loaded_a0, double* %noalias_ret_a1 -; FUNCAA: NoAlias: double* %loaded_a1, double* %noalias_ret_a1 -; FUNCAA: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a1 -; FUNCAA: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a1 -; FUNCAA: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a0 -; FUNCAA: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a1 -; FUNCAA: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a0 -; FUNCAA: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a1 -; FUNCAA: NoAlias: double* %noalias_ret_a0, double* %noalias_ret_a1 -; FUNCAA: ModRef: Ptr: double* %arg_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; FUNCAA: ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; FUNCAA: Function: caller_b: 16 pointers, 8 call sites -; FUNCAA: MayAlias: double* %arg_b0, double* %arg_b1 -; FUNCAA: NoAlias: double* %arg_b0, double* %noalias_arg_b0 -; FUNCAA: NoAlias: double* %arg_b1, double* %noalias_arg_b0 -; FUNCAA: NoAlias: double* %arg_b0, double* %noalias_arg_b1 -; FUNCAA: NoAlias: double* %arg_b1, double* %noalias_arg_b1 -; FUNCAA: NoAlias: double* %noalias_arg_b0, double* %noalias_arg_b1 -; FUNCAA: MayAlias: double* %arg_b0, double** %indirect_b0 -; FUNCAA: MayAlias: double* %arg_b1, double** %indirect_b0 -; FUNCAA: NoAlias: double* %noalias_arg_b0, double** %indirect_b0 -; FUNCAA: NoAlias: double* %noalias_arg_b1, double** %indirect_b0 -; FUNCAA: MayAlias: double* %arg_b0, double** %indirect_b1 -; FUNCAA: MayAlias: double* %arg_b1, double** %indirect_b1 -; FUNCAA: NoAlias: double* %noalias_arg_b0, double** %indirect_b1 -; FUNCAA: NoAlias: double* %noalias_arg_b1, double** %indirect_b1 -; FUNCAA: MayAlias: double** %indirect_b0, double** %indirect_b1 -; FUNCAA: MayAlias: double* %arg_b0, double* %loaded_b0 -; FUNCAA: MayAlias: double* %arg_b1, double* %loaded_b0 -; FUNCAA: NoAlias: double* %loaded_b0, double* %noalias_arg_b0 -; FUNCAA: NoAlias: double* %loaded_b0, double* %noalias_arg_b1 -; FUNCAA: MayAlias: double* %loaded_b0, double** %indirect_b0 -; FUNCAA: MayAlias: double* %loaded_b0, double** %indirect_b1 -; FUNCAA: MayAlias: double* %arg_b0, double* %loaded_b1 -; FUNCAA: MayAlias: double* %arg_b1, double* %loaded_b1 -; FUNCAA: NoAlias: double* %loaded_b1, double* %noalias_arg_b0 -; FUNCAA: NoAlias: double* %loaded_b1, double* %noalias_arg_b1 -; FUNCAA: MayAlias: double* %loaded_b1, double** %indirect_b0 -; FUNCAA: MayAlias: double* %loaded_b1, double** %indirect_b1 -; FUNCAA: MayAlias: double* %loaded_b0, double* %loaded_b1 -; FUNCAA: NoAlias: double* %arg_b0, double* %escape_alloca_b0 -; FUNCAA: NoAlias: double* %arg_b1, double* %escape_alloca_b0 -; FUNCAA: NoAlias: double* %escape_alloca_b0, double* %noalias_arg_b0 -; FUNCAA: NoAlias: double* %escape_alloca_b0, double* %noalias_arg_b1 -; FUNCAA: NoAlias: double* %escape_alloca_b0, double** %indirect_b0 -; FUNCAA: NoAlias: double* %escape_alloca_b0, double** %indirect_b1 -; FUNCAA: MayAlias: double* %escape_alloca_b0, double* %loaded_b0 -; FUNCAA: MayAlias: double* %escape_alloca_b0, double* %loaded_b1 -; FUNCAA: NoAlias: double* %arg_b0, double* %escape_alloca_b1 -; FUNCAA: NoAlias: double* %arg_b1, double* %escape_alloca_b1 -; FUNCAA: NoAlias: double* %escape_alloca_b1, double* %noalias_arg_b0 -; FUNCAA: NoAlias: double* %escape_alloca_b1, double* %noalias_arg_b1 -; FUNCAA: NoAlias: double* %escape_alloca_b1, double** %indirect_b0 -; FUNCAA: NoAlias: double* %escape_alloca_b1, double** %indirect_b1 -; FUNCAA: MayAlias: double* %escape_alloca_b1, double* %loaded_b0 -; FUNCAA: MayAlias: double* %escape_alloca_b1, double* %loaded_b1 -; FUNCAA: NoAlias: double* %escape_alloca_b0, double* %escape_alloca_b1 -; FUNCAA: NoAlias: double* %arg_b0, double* %noescape_alloca_b0 -; FUNCAA: NoAlias: double* %arg_b1, double* %noescape_alloca_b0 -; FUNCAA: NoAlias: double* %noalias_arg_b0, double* %noescape_alloca_b0 -; FUNCAA: NoAlias: double* %noalias_arg_b1, double* %noescape_alloca_b0 -; FUNCAA: NoAlias: double* %noescape_alloca_b0, double** %indirect_b0 -; FUNCAA: NoAlias: double* %noescape_alloca_b0, double** %indirect_b1 -; FUNCAA: NoAlias: double* %loaded_b0, double* %noescape_alloca_b0 -; FUNCAA: NoAlias: double* %loaded_b1, double* %noescape_alloca_b0 -; FUNCAA: NoAlias: double* %escape_alloca_b0, double* %noescape_alloca_b0 -; FUNCAA: NoAlias: double* %escape_alloca_b1, double* %noescape_alloca_b0 -; FUNCAA: NoAlias: double* %arg_b0, double* %noescape_alloca_b1 -; FUNCAA: NoAlias: double* %arg_b1, double* %noescape_alloca_b1 -; FUNCAA: NoAlias: double* %noalias_arg_b0, double* %noescape_alloca_b1 -; FUNCAA: NoAlias: double* %noalias_arg_b1, double* %noescape_alloca_b1 -; FUNCAA: NoAlias: double* %noescape_alloca_b1, double** %indirect_b0 -; FUNCAA: NoAlias: double* %noescape_alloca_b1, double** %indirect_b1 -; FUNCAA: NoAlias: double* %loaded_b0, double* %noescape_alloca_b1 -; FUNCAA: NoAlias: double* %loaded_b1, double* %noescape_alloca_b1 -; FUNCAA: NoAlias: double* %escape_alloca_b0, double* %noescape_alloca_b1 -; FUNCAA: NoAlias: double* %escape_alloca_b1, double* %noescape_alloca_b1 -; FUNCAA: NoAlias: double* %noescape_alloca_b0, double* %noescape_alloca_b1 -; FUNCAA: MayAlias: double* %arg_b0, double* %normal_ret_b0 -; FUNCAA: MayAlias: double* %arg_b1, double* %normal_ret_b0 -; FUNCAA: NoAlias: double* %noalias_arg_b0, double* %normal_ret_b0 -; FUNCAA: NoAlias: double* %noalias_arg_b1, double* %normal_ret_b0 -; FUNCAA: MayAlias: double* %normal_ret_b0, double** %indirect_b0 -; FUNCAA: MayAlias: double* %normal_ret_b0, double** %indirect_b1 -; FUNCAA: MayAlias: double* %loaded_b0, double* %normal_ret_b0 -; FUNCAA: MayAlias: double* %loaded_b1, double* %normal_ret_b0 -; FUNCAA: MayAlias: double* %escape_alloca_b0, double* %normal_ret_b0 -; FUNCAA: MayAlias: double* %escape_alloca_b1, double* %normal_ret_b0 -; FUNCAA: NoAlias: double* %noescape_alloca_b0, double* %normal_ret_b0 -; FUNCAA: NoAlias: double* %noescape_alloca_b1, double* %normal_ret_b0 -; FUNCAA: MayAlias: double* %arg_b0, double* %normal_ret_b1 -; FUNCAA: MayAlias: double* %arg_b1, double* %normal_ret_b1 -; FUNCAA: NoAlias: double* %noalias_arg_b0, double* %normal_ret_b1 -; FUNCAA: NoAlias: double* %noalias_arg_b1, double* %normal_ret_b1 -; FUNCAA: MayAlias: double* %normal_ret_b1, double** %indirect_b0 -; FUNCAA: MayAlias: double* %normal_ret_b1, double** %indirect_b1 -; FUNCAA: MayAlias: double* %loaded_b0, double* %normal_ret_b1 -; FUNCAA: MayAlias: double* %loaded_b1, double* %normal_ret_b1 -; FUNCAA: MayAlias: double* %escape_alloca_b0, double* %normal_ret_b1 -; FUNCAA: MayAlias: double* %escape_alloca_b1, double* %normal_ret_b1 -; FUNCAA: NoAlias: double* %noescape_alloca_b0, double* %normal_ret_b1 -; FUNCAA: NoAlias: double* %noescape_alloca_b1, double* %normal_ret_b1 -; FUNCAA: MayAlias: double* %normal_ret_b0, double* %normal_ret_b1 -; FUNCAA: NoAlias: double* %arg_b0, double* %noalias_ret_b0 -; FUNCAA: NoAlias: double* %arg_b1, double* %noalias_ret_b0 -; FUNCAA: NoAlias: double* %noalias_arg_b0, double* %noalias_ret_b0 -; FUNCAA: NoAlias: double* %noalias_arg_b1, double* %noalias_ret_b0 -; FUNCAA: NoAlias: double* %noalias_ret_b0, double** %indirect_b0 -; FUNCAA: NoAlias: double* %noalias_ret_b0, double** %indirect_b1 -; FUNCAA: NoAlias: double* %loaded_b0, double* %noalias_ret_b0 -; FUNCAA: NoAlias: double* %loaded_b1, double* %noalias_ret_b0 -; FUNCAA: NoAlias: double* %escape_alloca_b0, double* %noalias_ret_b0 -; FUNCAA: NoAlias: double* %escape_alloca_b1, double* %noalias_ret_b0 -; FUNCAA: NoAlias: double* %noalias_ret_b0, double* %noescape_alloca_b0 -; FUNCAA: NoAlias: double* %noalias_ret_b0, double* %noescape_alloca_b1 -; FUNCAA: NoAlias: double* %noalias_ret_b0, double* %normal_ret_b0 -; FUNCAA: NoAlias: double* %noalias_ret_b0, double* %normal_ret_b1 -; FUNCAA: NoAlias: double* %arg_b0, double* %noalias_ret_b1 -; FUNCAA: NoAlias: double* %arg_b1, double* %noalias_ret_b1 -; FUNCAA: NoAlias: double* %noalias_arg_b0, double* %noalias_ret_b1 -; FUNCAA: NoAlias: double* %noalias_arg_b1, double* %noalias_ret_b1 -; FUNCAA: NoAlias: double* %noalias_ret_b1, double** %indirect_b0 -; FUNCAA: NoAlias: double* %noalias_ret_b1, double** %indirect_b1 -; FUNCAA: NoAlias: double* %loaded_b0, double* %noalias_ret_b1 -; FUNCAA: NoAlias: double* %loaded_b1, double* %noalias_ret_b1 -; FUNCAA: NoAlias: double* %escape_alloca_b0, double* %noalias_ret_b1 -; FUNCAA: NoAlias: double* %escape_alloca_b1, double* %noalias_ret_b1 -; FUNCAA: NoAlias: double* %noalias_ret_b1, double* %noescape_alloca_b0 -; FUNCAA: NoAlias: double* %noalias_ret_b1, double* %noescape_alloca_b1 -; FUNCAA: NoAlias: double* %noalias_ret_b1, double* %normal_ret_b0 -; FUNCAA: NoAlias: double* %noalias_ret_b1, double* %normal_ret_b1 -; FUNCAA: NoAlias: double* %noalias_ret_b0, double* %noalias_ret_b1 -; FUNCAA: ModRef: Ptr: double* %arg_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %noalias_ret_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double** %indirect_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %loaded_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %normal_ret_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %noalias_ret_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; FUNCAA: ModRef: Ptr: double* %arg_b0 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %arg_b1 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: ModRef: Ptr: double** %indirect_b0 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: ModRef: Ptr: double** %indirect_b1 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %loaded_b0 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %loaded_b1 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> call void @callee(double* %escape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %arg_b0 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %arg_b1 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: ModRef: Ptr: double** %indirect_b0 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: ModRef: Ptr: double** %indirect_b1 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %loaded_b0 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %loaded_b1 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> call void @callee(double* %escape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: ModRef: Ptr: double** %indirect_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: ModRef: Ptr: double** %indirect_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %loaded_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %loaded_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %noescape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; FUNCAA: ModRef: Ptr: double* %arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: ModRef: Ptr: double** %indirect_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: ModRef: Ptr: double** %indirect_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %loaded_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %loaded_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %noescape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; FUNCAA: ===== Alias Analysis Evaluator Report ===== -; FUNCAA: 240 Total Alias Queries Performed -; FUNCAA: 168 no alias responses (70.0%) -; FUNCAA: 72 may alias responses (30.0%) -; FUNCAA: 0 must alias responses (0.0%) -; FUNCAA: Alias Analysis Evaluator Pointer Alias Summary: 70%/30%/0% -; FUNCAA: 256 Total ModRef Queries Performed -; FUNCAA: 88 no mod/ref responses (34.3%) -; FUNCAA: 0 mod responses (0.0%) -; FUNCAA: 0 ref responses (0.0%) -; FUNCAA: 168 mod & ref responses (65.6%) -; FUNCAA: Alias Analysis Evaluator Mod/Ref Summary: 34%/0%/0%/65% - -; IPAA: Module: 34 pointers, 16 call sites -; IPAA: MayAlias: double* %callee_arg, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a1, double* %callee_arg -; IPAA: MayAlias: double* %arg_a1, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %arg_a1 -; IPAA: MayAlias: double* %callee_arg, double* %noalias_arg_a0 -; IPAA: MayAlias: double* %noalias_arg_a0, double* %nocap_callee_arg -; IPAA: NoAlias: double* %arg_a0, double* %noalias_arg_a0 -; IPAA: NoAlias: double* %arg_a1, double* %noalias_arg_a0 -; IPAA: MayAlias: double* %callee_arg, double* %noalias_arg_a1 -; IPAA: MayAlias: double* %noalias_arg_a1, double* %nocap_callee_arg -; IPAA: NoAlias: double* %arg_a0, double* %noalias_arg_a1 -; IPAA: NoAlias: double* %arg_a1, double* %noalias_arg_a1 -; IPAA: NoAlias: double* %noalias_arg_a0, double* %noalias_arg_a1 -; IPAA: MayAlias: double* %callee_arg, double** %indirect_a0 -; IPAA: MayAlias: double* %nocap_callee_arg, double** %indirect_a0 -; IPAA: MayAlias: double* %arg_a0, double** %indirect_a0 -; IPAA: MayAlias: double* %arg_a1, double** %indirect_a0 -; IPAA: NoAlias: double* %noalias_arg_a0, double** %indirect_a0 -; IPAA: NoAlias: double* %noalias_arg_a1, double** %indirect_a0 -; IPAA: MayAlias: double* %callee_arg, double** %indirect_a1 -; IPAA: MayAlias: double* %nocap_callee_arg, double** %indirect_a1 -; IPAA: MayAlias: double* %arg_a0, double** %indirect_a1 -; IPAA: MayAlias: double* %arg_a1, double** %indirect_a1 -; IPAA: NoAlias: double* %noalias_arg_a0, double** %indirect_a1 -; IPAA: NoAlias: double* %noalias_arg_a1, double** %indirect_a1 -; IPAA: MayAlias: double** %indirect_a0, double** %indirect_a1 -; IPAA: MayAlias: double* %callee_arg, double* %loaded_a0 -; IPAA: MayAlias: double* %loaded_a0, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %loaded_a0 -; IPAA: MayAlias: double* %arg_a1, double* %loaded_a0 -; IPAA: NoAlias: double* %loaded_a0, double* %noalias_arg_a0 -; IPAA: NoAlias: double* %loaded_a0, double* %noalias_arg_a1 -; IPAA: MayAlias: double* %loaded_a0, double** %indirect_a0 -; IPAA: MayAlias: double* %loaded_a0, double** %indirect_a1 -; IPAA: MayAlias: double* %callee_arg, double* %loaded_a1 -; IPAA: MayAlias: double* %loaded_a1, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %loaded_a1 -; IPAA: MayAlias: double* %arg_a1, double* %loaded_a1 -; IPAA: NoAlias: double* %loaded_a1, double* %noalias_arg_a0 -; IPAA: NoAlias: double* %loaded_a1, double* %noalias_arg_a1 -; IPAA: MayAlias: double* %loaded_a1, double** %indirect_a0 -; IPAA: MayAlias: double* %loaded_a1, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %loaded_a1 -; IPAA: MayAlias: double* %callee_arg, double* %escape_alloca_a0 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %nocap_callee_arg -; IPAA: NoAlias: double* %arg_a0, double* %escape_alloca_a0 -; IPAA: NoAlias: double* %arg_a1, double* %escape_alloca_a0 -; IPAA: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a0 -; IPAA: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a1 -; IPAA: NoAlias: double* %escape_alloca_a0, double** %indirect_a0 -; IPAA: NoAlias: double* %escape_alloca_a0, double** %indirect_a1 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %loaded_a0 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %loaded_a1 -; IPAA: MayAlias: double* %callee_arg, double* %escape_alloca_a1 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %nocap_callee_arg -; IPAA: NoAlias: double* %arg_a0, double* %escape_alloca_a1 -; IPAA: NoAlias: double* %arg_a1, double* %escape_alloca_a1 -; IPAA: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a0 -; IPAA: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a1 -; IPAA: NoAlias: double* %escape_alloca_a1, double** %indirect_a0 -; IPAA: NoAlias: double* %escape_alloca_a1, double** %indirect_a1 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %loaded_a0 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %loaded_a1 -; IPAA: NoAlias: double* %escape_alloca_a0, double* %escape_alloca_a1 -; IPAA: MayAlias: double* %callee_arg, double* %noescape_alloca_a0 -; IPAA: MayAlias: double* %nocap_callee_arg, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %arg_a0, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %arg_a1, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %noescape_alloca_a0, double** %indirect_a0 -; IPAA: NoAlias: double* %noescape_alloca_a0, double** %indirect_a1 -; IPAA: NoAlias: double* %loaded_a0, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %loaded_a1, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a0 -; IPAA: MayAlias: double* %callee_arg, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %nocap_callee_arg, double* %noescape_alloca_a1 -; IPAA: NoAlias: double* %arg_a0, double* %noescape_alloca_a1 -; IPAA: NoAlias: double* %arg_a1, double* %noescape_alloca_a1 -; IPAA: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a1 -; IPAA: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a1 -; IPAA: NoAlias: double* %noescape_alloca_a1, double** %indirect_a0 -; IPAA: NoAlias: double* %noescape_alloca_a1, double** %indirect_a1 -; IPAA: NoAlias: double* %loaded_a0, double* %noescape_alloca_a1 -; IPAA: NoAlias: double* %loaded_a1, double* %noescape_alloca_a1 -; IPAA: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a1 -; IPAA: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a1 -; IPAA: NoAlias: double* %noescape_alloca_a0, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %callee_arg, double* %normal_ret_a0 -; IPAA: MayAlias: double* %nocap_callee_arg, double* %normal_ret_a0 -; IPAA: MayAlias: double* %arg_a0, double* %normal_ret_a0 -; IPAA: MayAlias: double* %arg_a1, double* %normal_ret_a0 -; IPAA: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a0 -; IPAA: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a0 -; IPAA: MayAlias: double* %normal_ret_a0, double** %indirect_a0 -; IPAA: MayAlias: double* %normal_ret_a0, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %normal_ret_a0 -; IPAA: MayAlias: double* %loaded_a1, double* %normal_ret_a0 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a0 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a0 -; IPAA: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a0 -; IPAA: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a0 -; IPAA: MayAlias: double* %callee_arg, double* %normal_ret_a1 -; IPAA: MayAlias: double* %nocap_callee_arg, double* %normal_ret_a1 -; IPAA: MayAlias: double* %arg_a0, double* %normal_ret_a1 -; IPAA: MayAlias: double* %arg_a1, double* %normal_ret_a1 -; IPAA: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a1 -; IPAA: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a1 -; IPAA: MayAlias: double* %normal_ret_a1, double** %indirect_a0 -; IPAA: MayAlias: double* %normal_ret_a1, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %normal_ret_a1 -; IPAA: MayAlias: double* %loaded_a1, double* %normal_ret_a1 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a1 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a1 -; IPAA: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a1 -; IPAA: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a1 -; IPAA: MayAlias: double* %normal_ret_a0, double* %normal_ret_a1 -; IPAA: MayAlias: double* %callee_arg, double* %noalias_ret_a0 -; IPAA: MayAlias: double* %noalias_ret_a0, double* %nocap_callee_arg -; IPAA: NoAlias: double* %arg_a0, double* %noalias_ret_a0 -; IPAA: NoAlias: double* %arg_a1, double* %noalias_ret_a0 -; IPAA: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a0 -; IPAA: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a0 -; IPAA: NoAlias: double* %noalias_ret_a0, double** %indirect_a0 -; IPAA: NoAlias: double* %noalias_ret_a0, double** %indirect_a1 -; IPAA: NoAlias: double* %loaded_a0, double* %noalias_ret_a0 -; IPAA: NoAlias: double* %loaded_a1, double* %noalias_ret_a0 -; IPAA: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a0 -; IPAA: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a0 -; IPAA: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a1 -; IPAA: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a0 -; IPAA: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a1 -; IPAA: MayAlias: double* %callee_arg, double* %noalias_ret_a1 -; IPAA: MayAlias: double* %noalias_ret_a1, double* %nocap_callee_arg -; IPAA: NoAlias: double* %arg_a0, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %arg_a1, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %noalias_ret_a1, double** %indirect_a0 -; IPAA: NoAlias: double* %noalias_ret_a1, double** %indirect_a1 -; IPAA: NoAlias: double* %loaded_a0, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %loaded_a1, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a1 -; IPAA: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a0 -; IPAA: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a1 -; IPAA: NoAlias: double* %noalias_ret_a0, double* %noalias_ret_a1 -; IPAA: MayAlias: double* %arg_b0, double* %callee_arg -; IPAA: MayAlias: double* %arg_b0, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %arg_b0 -; IPAA: MayAlias: double* %arg_a1, double* %arg_b0 -; IPAA: MayAlias: double* %arg_b0, double* %noalias_arg_a0 -; IPAA: MayAlias: double* %arg_b0, double* %noalias_arg_a1 -; IPAA: MayAlias: double* %arg_b0, double** %indirect_a0 -; IPAA: MayAlias: double* %arg_b0, double** %indirect_a1 -; IPAA: MayAlias: double* %arg_b0, double* %loaded_a0 -; IPAA: MayAlias: double* %arg_b0, double* %loaded_a1 -; IPAA: MayAlias: double* %arg_b0, double* %escape_alloca_a0 -; IPAA: MayAlias: double* %arg_b0, double* %escape_alloca_a1 -; IPAA: MayAlias: double* %arg_b0, double* %noescape_alloca_a0 -; IPAA: MayAlias: double* %arg_b0, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %arg_b0, double* %normal_ret_a0 -; IPAA: MayAlias: double* %arg_b0, double* %normal_ret_a1 -; IPAA: MayAlias: double* %arg_b0, double* %noalias_ret_a0 -; IPAA: MayAlias: double* %arg_b0, double* %noalias_ret_a1 -; IPAA: MayAlias: double* %arg_b1, double* %callee_arg -; IPAA: MayAlias: double* %arg_b1, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %arg_b1 -; IPAA: MayAlias: double* %arg_a1, double* %arg_b1 -; IPAA: MayAlias: double* %arg_b1, double* %noalias_arg_a0 -; IPAA: MayAlias: double* %arg_b1, double* %noalias_arg_a1 -; IPAA: MayAlias: double* %arg_b1, double** %indirect_a0 -; IPAA: MayAlias: double* %arg_b1, double** %indirect_a1 -; IPAA: MayAlias: double* %arg_b1, double* %loaded_a0 -; IPAA: MayAlias: double* %arg_b1, double* %loaded_a1 -; IPAA: MayAlias: double* %arg_b1, double* %escape_alloca_a0 -; IPAA: MayAlias: double* %arg_b1, double* %escape_alloca_a1 -; IPAA: MayAlias: double* %arg_b1, double* %noescape_alloca_a0 -; IPAA: MayAlias: double* %arg_b1, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %arg_b1, double* %normal_ret_a0 -; IPAA: MayAlias: double* %arg_b1, double* %normal_ret_a1 -; IPAA: MayAlias: double* %arg_b1, double* %noalias_ret_a0 -; IPAA: MayAlias: double* %arg_b1, double* %noalias_ret_a1 -; IPAA: MayAlias: double* %arg_b0, double* %arg_b1 -; IPAA: MayAlias: double* %callee_arg, double* %noalias_arg_b0 -; IPAA: MayAlias: double* %noalias_arg_b0, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %noalias_arg_b0 -; IPAA: MayAlias: double* %arg_a1, double* %noalias_arg_b0 -; IPAA: MayAlias: double* %noalias_arg_a0, double* %noalias_arg_b0 -; IPAA: MayAlias: double* %noalias_arg_a1, double* %noalias_arg_b0 -; IPAA: MayAlias: double* %noalias_arg_b0, double** %indirect_a0 -; IPAA: MayAlias: double* %noalias_arg_b0, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %noalias_arg_b0 -; IPAA: MayAlias: double* %loaded_a1, double* %noalias_arg_b0 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %noalias_arg_b0 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %noalias_arg_b0 -; IPAA: MayAlias: double* %noalias_arg_b0, double* %noescape_alloca_a0 -; IPAA: MayAlias: double* %noalias_arg_b0, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %noalias_arg_b0, double* %normal_ret_a0 -; IPAA: MayAlias: double* %noalias_arg_b0, double* %normal_ret_a1 -; IPAA: MayAlias: double* %noalias_arg_b0, double* %noalias_ret_a0 -; IPAA: MayAlias: double* %noalias_arg_b0, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %arg_b0, double* %noalias_arg_b0 -; IPAA: NoAlias: double* %arg_b1, double* %noalias_arg_b0 -; IPAA: MayAlias: double* %callee_arg, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %noalias_arg_b1, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %arg_a1, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %noalias_arg_a0, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %noalias_arg_a1, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %noalias_arg_b1, double** %indirect_a0 -; IPAA: MayAlias: double* %noalias_arg_b1, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %loaded_a1, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %noalias_arg_b1, double* %noescape_alloca_a0 -; IPAA: MayAlias: double* %noalias_arg_b1, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %noalias_arg_b1, double* %normal_ret_a0 -; IPAA: MayAlias: double* %noalias_arg_b1, double* %normal_ret_a1 -; IPAA: MayAlias: double* %noalias_arg_b1, double* %noalias_ret_a0 -; IPAA: MayAlias: double* %noalias_arg_b1, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %arg_b0, double* %noalias_arg_b1 -; IPAA: NoAlias: double* %arg_b1, double* %noalias_arg_b1 -; IPAA: NoAlias: double* %noalias_arg_b0, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %callee_arg, double** %indirect_b0 -; IPAA: MayAlias: double* %nocap_callee_arg, double** %indirect_b0 -; IPAA: MayAlias: double* %arg_a0, double** %indirect_b0 -; IPAA: MayAlias: double* %arg_a1, double** %indirect_b0 -; IPAA: MayAlias: double* %noalias_arg_a0, double** %indirect_b0 -; IPAA: MayAlias: double* %noalias_arg_a1, double** %indirect_b0 -; IPAA: MayAlias: double** %indirect_a0, double** %indirect_b0 -; IPAA: MayAlias: double** %indirect_a1, double** %indirect_b0 -; IPAA: MayAlias: double* %loaded_a0, double** %indirect_b0 -; IPAA: MayAlias: double* %loaded_a1, double** %indirect_b0 -; IPAA: MayAlias: double* %escape_alloca_a0, double** %indirect_b0 -; IPAA: MayAlias: double* %escape_alloca_a1, double** %indirect_b0 -; IPAA: MayAlias: double* %noescape_alloca_a0, double** %indirect_b0 -; IPAA: MayAlias: double* %noescape_alloca_a1, double** %indirect_b0 -; IPAA: MayAlias: double* %normal_ret_a0, double** %indirect_b0 -; IPAA: MayAlias: double* %normal_ret_a1, double** %indirect_b0 -; IPAA: MayAlias: double* %noalias_ret_a0, double** %indirect_b0 -; IPAA: MayAlias: double* %noalias_ret_a1, double** %indirect_b0 -; IPAA: MayAlias: double* %arg_b0, double** %indirect_b0 -; IPAA: MayAlias: double* %arg_b1, double** %indirect_b0 -; IPAA: NoAlias: double* %noalias_arg_b0, double** %indirect_b0 -; IPAA: NoAlias: double* %noalias_arg_b1, double** %indirect_b0 -; IPAA: MayAlias: double* %callee_arg, double** %indirect_b1 -; IPAA: MayAlias: double* %nocap_callee_arg, double** %indirect_b1 -; IPAA: MayAlias: double* %arg_a0, double** %indirect_b1 -; IPAA: MayAlias: double* %arg_a1, double** %indirect_b1 -; IPAA: MayAlias: double* %noalias_arg_a0, double** %indirect_b1 -; IPAA: MayAlias: double* %noalias_arg_a1, double** %indirect_b1 -; IPAA: MayAlias: double** %indirect_a0, double** %indirect_b1 -; IPAA: MayAlias: double** %indirect_a1, double** %indirect_b1 -; IPAA: MayAlias: double* %loaded_a0, double** %indirect_b1 -; IPAA: MayAlias: double* %loaded_a1, double** %indirect_b1 -; IPAA: MayAlias: double* %escape_alloca_a0, double** %indirect_b1 -; IPAA: MayAlias: double* %escape_alloca_a1, double** %indirect_b1 -; IPAA: MayAlias: double* %noescape_alloca_a0, double** %indirect_b1 -; IPAA: MayAlias: double* %noescape_alloca_a1, double** %indirect_b1 -; IPAA: MayAlias: double* %normal_ret_a0, double** %indirect_b1 -; IPAA: MayAlias: double* %normal_ret_a1, double** %indirect_b1 -; IPAA: MayAlias: double* %noalias_ret_a0, double** %indirect_b1 -; IPAA: MayAlias: double* %noalias_ret_a1, double** %indirect_b1 -; IPAA: MayAlias: double* %arg_b0, double** %indirect_b1 -; IPAA: MayAlias: double* %arg_b1, double** %indirect_b1 -; IPAA: NoAlias: double* %noalias_arg_b0, double** %indirect_b1 -; IPAA: NoAlias: double* %noalias_arg_b1, double** %indirect_b1 -; IPAA: MayAlias: double** %indirect_b0, double** %indirect_b1 -; IPAA: MayAlias: double* %callee_arg, double* %loaded_b0 -; IPAA: MayAlias: double* %loaded_b0, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %loaded_b0 -; IPAA: MayAlias: double* %arg_a1, double* %loaded_b0 -; IPAA: MayAlias: double* %loaded_b0, double* %noalias_arg_a0 -; IPAA: MayAlias: double* %loaded_b0, double* %noalias_arg_a1 -; IPAA: MayAlias: double* %loaded_b0, double** %indirect_a0 -; IPAA: MayAlias: double* %loaded_b0, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %loaded_b0 -; IPAA: MayAlias: double* %loaded_a1, double* %loaded_b0 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %loaded_b0 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %loaded_b0 -; IPAA: MayAlias: double* %loaded_b0, double* %noescape_alloca_a0 -; IPAA: MayAlias: double* %loaded_b0, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %loaded_b0, double* %normal_ret_a0 -; IPAA: MayAlias: double* %loaded_b0, double* %normal_ret_a1 -; IPAA: MayAlias: double* %loaded_b0, double* %noalias_ret_a0 -; IPAA: MayAlias: double* %loaded_b0, double* %noalias_ret_a1 -; IPAA: MayAlias: double* %arg_b0, double* %loaded_b0 -; IPAA: MayAlias: double* %arg_b1, double* %loaded_b0 -; IPAA: NoAlias: double* %loaded_b0, double* %noalias_arg_b0 -; IPAA: NoAlias: double* %loaded_b0, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %loaded_b0, double** %indirect_b0 -; IPAA: MayAlias: double* %loaded_b0, double** %indirect_b1 -; IPAA: MayAlias: double* %callee_arg, double* %loaded_b1 -; IPAA: MayAlias: double* %loaded_b1, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %loaded_b1 -; IPAA: MayAlias: double* %arg_a1, double* %loaded_b1 -; IPAA: MayAlias: double* %loaded_b1, double* %noalias_arg_a0 -; IPAA: MayAlias: double* %loaded_b1, double* %noalias_arg_a1 -; IPAA: MayAlias: double* %loaded_b1, double** %indirect_a0 -; IPAA: MayAlias: double* %loaded_b1, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %loaded_b1 -; IPAA: MayAlias: double* %loaded_a1, double* %loaded_b1 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %loaded_b1 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %loaded_b1 -; IPAA: MayAlias: double* %loaded_b1, double* %noescape_alloca_a0 -; IPAA: MayAlias: double* %loaded_b1, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %loaded_b1, double* %normal_ret_a0 -; IPAA: MayAlias: double* %loaded_b1, double* %normal_ret_a1 -; IPAA: MayAlias: double* %loaded_b1, double* %noalias_ret_a0 -; IPAA: MayAlias: double* %loaded_b1, double* %noalias_ret_a1 -; IPAA: MayAlias: double* %arg_b0, double* %loaded_b1 -; IPAA: MayAlias: double* %arg_b1, double* %loaded_b1 -; IPAA: NoAlias: double* %loaded_b1, double* %noalias_arg_b0 -; IPAA: NoAlias: double* %loaded_b1, double* %noalias_arg_b1 -; IPAA: MayAlias: double* %loaded_b1, double** %indirect_b0 -; IPAA: MayAlias: double* %loaded_b1, double** %indirect_b1 -; IPAA: MayAlias: double* %loaded_b0, double* %loaded_b1 -; IPAA: MayAlias: double* %callee_arg, double* %escape_alloca_b0 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %escape_alloca_b0 -; IPAA: MayAlias: double* %arg_a1, double* %escape_alloca_b0 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %noalias_arg_a0 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %noalias_arg_a1 -; IPAA: MayAlias: double* %escape_alloca_b0, double** %indirect_a0 -; IPAA: MayAlias: double* %escape_alloca_b0, double** %indirect_a1 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %loaded_a0 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %loaded_a1 -; IPAA: NoAlias: double* %escape_alloca_a0, double* %escape_alloca_b0 -; IPAA: NoAlias: double* %escape_alloca_a1, double* %escape_alloca_b0 -; IPAA: NoAlias: double* %escape_alloca_b0, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %escape_alloca_b0, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %normal_ret_a0 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %normal_ret_a1 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %noalias_ret_a0 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %arg_b0, double* %escape_alloca_b0 -; IPAA: NoAlias: double* %arg_b1, double* %escape_alloca_b0 -; IPAA: NoAlias: double* %escape_alloca_b0, double* %noalias_arg_b0 -; IPAA: NoAlias: double* %escape_alloca_b0, double* %noalias_arg_b1 -; IPAA: NoAlias: double* %escape_alloca_b0, double** %indirect_b0 -; IPAA: NoAlias: double* %escape_alloca_b0, double** %indirect_b1 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %loaded_b0 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %loaded_b1 -; IPAA: MayAlias: double* %callee_arg, double* %escape_alloca_b1 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %escape_alloca_b1 -; IPAA: MayAlias: double* %arg_a1, double* %escape_alloca_b1 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %noalias_arg_a0 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %noalias_arg_a1 -; IPAA: MayAlias: double* %escape_alloca_b1, double** %indirect_a0 -; IPAA: MayAlias: double* %escape_alloca_b1, double** %indirect_a1 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %loaded_a0 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %loaded_a1 -; IPAA: NoAlias: double* %escape_alloca_a0, double* %escape_alloca_b1 -; IPAA: NoAlias: double* %escape_alloca_a1, double* %escape_alloca_b1 -; IPAA: NoAlias: double* %escape_alloca_b1, double* %noescape_alloca_a0 -; IPAA: NoAlias: double* %escape_alloca_b1, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %normal_ret_a0 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %normal_ret_a1 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %noalias_ret_a0 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %noalias_ret_a1 -; IPAA: NoAlias: double* %arg_b0, double* %escape_alloca_b1 -; IPAA: NoAlias: double* %arg_b1, double* %escape_alloca_b1 -; IPAA: NoAlias: double* %escape_alloca_b1, double* %noalias_arg_b0 -; IPAA: NoAlias: double* %escape_alloca_b1, double* %noalias_arg_b1 -; IPAA: NoAlias: double* %escape_alloca_b1, double** %indirect_b0 -; IPAA: NoAlias: double* %escape_alloca_b1, double** %indirect_b1 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %loaded_b0 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %loaded_b1 -; IPAA: NoAlias: double* %escape_alloca_b0, double* %escape_alloca_b1 -; IPAA: MayAlias: double* %callee_arg, double* %noescape_alloca_b0 -; IPAA: MayAlias: double* %nocap_callee_arg, double* %noescape_alloca_b0 -; IPAA: MayAlias: double* %arg_a0, double* %noescape_alloca_b0 -; IPAA: MayAlias: double* %arg_a1, double* %noescape_alloca_b0 -; IPAA: MayAlias: double* %noalias_arg_a0, double* %noescape_alloca_b0 -; IPAA: MayAlias: double* %noalias_arg_a1, double* %noescape_alloca_b0 -; IPAA: MayAlias: double* %noescape_alloca_b0, double** %indirect_a0 -; IPAA: MayAlias: double* %noescape_alloca_b0, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %noescape_alloca_b0 -; IPAA: MayAlias: double* %loaded_a1, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %noescape_alloca_a0, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %noescape_alloca_a1, double* %noescape_alloca_b0 -; IPAA: MayAlias: double* %noescape_alloca_b0, double* %normal_ret_a0 -; IPAA: MayAlias: double* %noescape_alloca_b0, double* %normal_ret_a1 -; IPAA: MayAlias: double* %noalias_ret_a0, double* %noescape_alloca_b0 -; IPAA: MayAlias: double* %noalias_ret_a1, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %arg_b0, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %arg_b1, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %noalias_arg_b0, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %noalias_arg_b1, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %noescape_alloca_b0, double** %indirect_b0 -; IPAA: NoAlias: double* %noescape_alloca_b0, double** %indirect_b1 -; IPAA: NoAlias: double* %loaded_b0, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %loaded_b1, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %escape_alloca_b0, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %escape_alloca_b1, double* %noescape_alloca_b0 -; IPAA: MayAlias: double* %callee_arg, double* %noescape_alloca_b1 -; IPAA: MayAlias: double* %nocap_callee_arg, double* %noescape_alloca_b1 -; IPAA: MayAlias: double* %arg_a0, double* %noescape_alloca_b1 -; IPAA: MayAlias: double* %arg_a1, double* %noescape_alloca_b1 -; IPAA: MayAlias: double* %noalias_arg_a0, double* %noescape_alloca_b1 -; IPAA: MayAlias: double* %noalias_arg_a1, double* %noescape_alloca_b1 -; IPAA: MayAlias: double* %noescape_alloca_b1, double** %indirect_a0 -; IPAA: MayAlias: double* %noescape_alloca_b1, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %noescape_alloca_b1 -; IPAA: MayAlias: double* %loaded_a1, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %noescape_alloca_a0, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %noescape_alloca_a1, double* %noescape_alloca_b1 -; IPAA: MayAlias: double* %noescape_alloca_b1, double* %normal_ret_a0 -; IPAA: MayAlias: double* %noescape_alloca_b1, double* %normal_ret_a1 -; IPAA: MayAlias: double* %noalias_ret_a0, double* %noescape_alloca_b1 -; IPAA: MayAlias: double* %noalias_ret_a1, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %arg_b0, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %arg_b1, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %noalias_arg_b0, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %noalias_arg_b1, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %noescape_alloca_b1, double** %indirect_b0 -; IPAA: NoAlias: double* %noescape_alloca_b1, double** %indirect_b1 -; IPAA: NoAlias: double* %loaded_b0, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %loaded_b1, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %escape_alloca_b0, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %escape_alloca_b1, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %noescape_alloca_b0, double* %noescape_alloca_b1 -; IPAA: MayAlias: double* %callee_arg, double* %normal_ret_b0 -; IPAA: MayAlias: double* %nocap_callee_arg, double* %normal_ret_b0 -; IPAA: MayAlias: double* %arg_a0, double* %normal_ret_b0 -; IPAA: MayAlias: double* %arg_a1, double* %normal_ret_b0 -; IPAA: MayAlias: double* %noalias_arg_a0, double* %normal_ret_b0 -; IPAA: MayAlias: double* %noalias_arg_a1, double* %normal_ret_b0 -; IPAA: MayAlias: double* %normal_ret_b0, double** %indirect_a0 -; IPAA: MayAlias: double* %normal_ret_b0, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %normal_ret_b0 -; IPAA: MayAlias: double* %loaded_a1, double* %normal_ret_b0 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %normal_ret_b0 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %normal_ret_b0 -; IPAA: MayAlias: double* %noescape_alloca_a0, double* %normal_ret_b0 -; IPAA: MayAlias: double* %noescape_alloca_a1, double* %normal_ret_b0 -; IPAA: MayAlias: double* %normal_ret_a0, double* %normal_ret_b0 -; IPAA: MayAlias: double* %normal_ret_a1, double* %normal_ret_b0 -; IPAA: MayAlias: double* %noalias_ret_a0, double* %normal_ret_b0 -; IPAA: MayAlias: double* %noalias_ret_a1, double* %normal_ret_b0 -; IPAA: MayAlias: double* %arg_b0, double* %normal_ret_b0 -; IPAA: MayAlias: double* %arg_b1, double* %normal_ret_b0 -; IPAA: NoAlias: double* %noalias_arg_b0, double* %normal_ret_b0 -; IPAA: NoAlias: double* %noalias_arg_b1, double* %normal_ret_b0 -; IPAA: MayAlias: double* %normal_ret_b0, double** %indirect_b0 -; IPAA: MayAlias: double* %normal_ret_b0, double** %indirect_b1 -; IPAA: MayAlias: double* %loaded_b0, double* %normal_ret_b0 -; IPAA: MayAlias: double* %loaded_b1, double* %normal_ret_b0 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %normal_ret_b0 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %normal_ret_b0 -; IPAA: NoAlias: double* %noescape_alloca_b0, double* %normal_ret_b0 -; IPAA: NoAlias: double* %noescape_alloca_b1, double* %normal_ret_b0 -; IPAA: MayAlias: double* %callee_arg, double* %normal_ret_b1 -; IPAA: MayAlias: double* %nocap_callee_arg, double* %normal_ret_b1 -; IPAA: MayAlias: double* %arg_a0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %arg_a1, double* %normal_ret_b1 -; IPAA: MayAlias: double* %noalias_arg_a0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %noalias_arg_a1, double* %normal_ret_b1 -; IPAA: MayAlias: double* %normal_ret_b1, double** %indirect_a0 -; IPAA: MayAlias: double* %normal_ret_b1, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %loaded_a1, double* %normal_ret_b1 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %normal_ret_b1 -; IPAA: MayAlias: double* %noescape_alloca_a0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %noescape_alloca_a1, double* %normal_ret_b1 -; IPAA: MayAlias: double* %normal_ret_a0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %normal_ret_a1, double* %normal_ret_b1 -; IPAA: MayAlias: double* %noalias_ret_a0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %noalias_ret_a1, double* %normal_ret_b1 -; IPAA: MayAlias: double* %arg_b0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %arg_b1, double* %normal_ret_b1 -; IPAA: NoAlias: double* %noalias_arg_b0, double* %normal_ret_b1 -; IPAA: NoAlias: double* %noalias_arg_b1, double* %normal_ret_b1 -; IPAA: MayAlias: double* %normal_ret_b1, double** %indirect_b0 -; IPAA: MayAlias: double* %normal_ret_b1, double** %indirect_b1 -; IPAA: MayAlias: double* %loaded_b0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %loaded_b1, double* %normal_ret_b1 -; IPAA: MayAlias: double* %escape_alloca_b0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %escape_alloca_b1, double* %normal_ret_b1 -; IPAA: NoAlias: double* %noescape_alloca_b0, double* %normal_ret_b1 -; IPAA: NoAlias: double* %noescape_alloca_b1, double* %normal_ret_b1 -; IPAA: MayAlias: double* %normal_ret_b0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %callee_arg, double* %noalias_ret_b0 -; IPAA: MayAlias: double* %noalias_ret_b0, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %noalias_ret_b0 -; IPAA: MayAlias: double* %arg_a1, double* %noalias_ret_b0 -; IPAA: MayAlias: double* %noalias_arg_a0, double* %noalias_ret_b0 -; IPAA: MayAlias: double* %noalias_arg_a1, double* %noalias_ret_b0 -; IPAA: MayAlias: double* %noalias_ret_b0, double** %indirect_a0 -; IPAA: MayAlias: double* %noalias_ret_b0, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %noalias_ret_b0 -; IPAA: MayAlias: double* %loaded_a1, double* %noalias_ret_b0 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %noalias_ret_b0 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %noalias_ret_b0 -; IPAA: MayAlias: double* %noalias_ret_b0, double* %noescape_alloca_a0 -; IPAA: MayAlias: double* %noalias_ret_b0, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %noalias_ret_b0, double* %normal_ret_a0 -; IPAA: MayAlias: double* %noalias_ret_b0, double* %normal_ret_a1 -; IPAA: MayAlias: double* %noalias_ret_a0, double* %noalias_ret_b0 -; IPAA: MayAlias: double* %noalias_ret_a1, double* %noalias_ret_b0 -; IPAA: NoAlias: double* %arg_b0, double* %noalias_ret_b0 -; IPAA: NoAlias: double* %arg_b1, double* %noalias_ret_b0 -; IPAA: NoAlias: double* %noalias_arg_b0, double* %noalias_ret_b0 -; IPAA: NoAlias: double* %noalias_arg_b1, double* %noalias_ret_b0 -; IPAA: NoAlias: double* %noalias_ret_b0, double** %indirect_b0 -; IPAA: NoAlias: double* %noalias_ret_b0, double** %indirect_b1 -; IPAA: NoAlias: double* %loaded_b0, double* %noalias_ret_b0 -; IPAA: NoAlias: double* %loaded_b1, double* %noalias_ret_b0 -; IPAA: NoAlias: double* %escape_alloca_b0, double* %noalias_ret_b0 -; IPAA: NoAlias: double* %escape_alloca_b1, double* %noalias_ret_b0 -; IPAA: NoAlias: double* %noalias_ret_b0, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %noalias_ret_b0, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %noalias_ret_b0, double* %normal_ret_b0 -; IPAA: NoAlias: double* %noalias_ret_b0, double* %normal_ret_b1 -; IPAA: MayAlias: double* %callee_arg, double* %noalias_ret_b1 -; IPAA: MayAlias: double* %noalias_ret_b1, double* %nocap_callee_arg -; IPAA: MayAlias: double* %arg_a0, double* %noalias_ret_b1 -; IPAA: MayAlias: double* %arg_a1, double* %noalias_ret_b1 -; IPAA: MayAlias: double* %noalias_arg_a0, double* %noalias_ret_b1 -; IPAA: MayAlias: double* %noalias_arg_a1, double* %noalias_ret_b1 -; IPAA: MayAlias: double* %noalias_ret_b1, double** %indirect_a0 -; IPAA: MayAlias: double* %noalias_ret_b1, double** %indirect_a1 -; IPAA: MayAlias: double* %loaded_a0, double* %noalias_ret_b1 -; IPAA: MayAlias: double* %loaded_a1, double* %noalias_ret_b1 -; IPAA: MayAlias: double* %escape_alloca_a0, double* %noalias_ret_b1 -; IPAA: MayAlias: double* %escape_alloca_a1, double* %noalias_ret_b1 -; IPAA: MayAlias: double* %noalias_ret_b1, double* %noescape_alloca_a0 -; IPAA: MayAlias: double* %noalias_ret_b1, double* %noescape_alloca_a1 -; IPAA: MayAlias: double* %noalias_ret_b1, double* %normal_ret_a0 -; IPAA: MayAlias: double* %noalias_ret_b1, double* %normal_ret_a1 -; IPAA: MayAlias: double* %noalias_ret_a0, double* %noalias_ret_b1 -; IPAA: MayAlias: double* %noalias_ret_a1, double* %noalias_ret_b1 -; IPAA: NoAlias: double* %arg_b0, double* %noalias_ret_b1 -; IPAA: NoAlias: double* %arg_b1, double* %noalias_ret_b1 -; IPAA: NoAlias: double* %noalias_arg_b0, double* %noalias_ret_b1 -; IPAA: NoAlias: double* %noalias_arg_b1, double* %noalias_ret_b1 -; IPAA: NoAlias: double* %noalias_ret_b1, double** %indirect_b0 -; IPAA: NoAlias: double* %noalias_ret_b1, double** %indirect_b1 -; IPAA: NoAlias: double* %loaded_b0, double* %noalias_ret_b1 -; IPAA: NoAlias: double* %loaded_b1, double* %noalias_ret_b1 -; IPAA: NoAlias: double* %escape_alloca_b0, double* %noalias_ret_b1 -; IPAA: NoAlias: double* %escape_alloca_b1, double* %noalias_ret_b1 -; IPAA: NoAlias: double* %noalias_ret_b1, double* %noescape_alloca_b0 -; IPAA: NoAlias: double* %noalias_ret_b1, double* %noescape_alloca_b1 -; IPAA: NoAlias: double* %noalias_ret_b1, double* %normal_ret_b0 -; IPAA: NoAlias: double* %noalias_ret_b1, double* %normal_ret_b1 -; IPAA: NoAlias: double* %noalias_ret_b0, double* %noalias_ret_b1 -; IPAA: ModRef: Ptr: double* %callee_arg <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_b0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_b1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_b0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_b1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_b0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_b1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %callee_arg <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_b0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_b1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_b0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_b1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_b0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_b1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %callee_arg <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_b0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_b1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_b0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_b1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_b0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_b1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %callee_arg <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_b0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_b1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_b0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_b1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_b0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_b1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %callee_arg <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %arg_b0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %arg_b1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noalias_arg_b0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noalias_arg_b1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noescape_alloca_b0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noescape_alloca_b1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noalias_ret_b0 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noalias_ret_b1 <-> call void @callee(double* %escape_alloca_a0) -; IPAA: ModRef: Ptr: double* %callee_arg <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %arg_b0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %arg_b1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noalias_arg_b0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noalias_arg_b1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noescape_alloca_b0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noescape_alloca_b1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noalias_ret_b0 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noalias_ret_b1 <-> call void @callee(double* %escape_alloca_a1) -; IPAA: ModRef: Ptr: double* %callee_arg <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noalias_arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noalias_arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noescape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noescape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noalias_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %noalias_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_a0) -; IPAA: ModRef: Ptr: double* %callee_arg <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noalias_arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noalias_arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noescape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noescape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noalias_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %noalias_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_a1) -; IPAA: ModRef: Ptr: double* %callee_arg <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> %normal_ret_b0 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %callee_arg <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> %normal_ret_b1 = call double* @normal_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %callee_arg <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_b0 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> %noalias_ret_b0 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %callee_arg <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %arg_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %noalias_ret_b1 <-> %noalias_ret_b1 = call double* @noalias_returner() ; [#uses=1] -; IPAA: ModRef: Ptr: double* %callee_arg <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %arg_b0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %arg_b1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> call void @callee(double* %escape_alloca_b0) -; IPAA: ModRef: Ptr: double* %callee_arg <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %arg_b0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %arg_b1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> call void @callee(double* %escape_alloca_b1) -; IPAA: ModRef: Ptr: double* %callee_arg <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %noescape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_b0) -; IPAA: ModRef: Ptr: double* %callee_arg <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %nocap_callee_arg <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: NoModRef: Ptr: double* %noalias_arg_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: NoModRef: Ptr: double* %noalias_arg_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double** %indirect_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double** %indirect_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %loaded_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %loaded_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %escape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %escape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: NoModRef: Ptr: double* %noescape_alloca_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %noescape_alloca_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %normal_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ModRef: Ptr: double* %normal_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: NoModRef: Ptr: double* %noalias_ret_b0 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: NoModRef: Ptr: double* %noalias_ret_b1 <-> call void @nocap_callee(double* %noescape_alloca_b1) -; IPAA: ===== Alias Analysis Evaluator Report ===== -; IPAA: 561 Total Alias Queries Performed -; IPAA: 184 no alias responses (32.7%) -; IPAA: 377 may alias responses (67.2%) -; IPAA: 0 must alias responses (0.0%) -; IPAA: Alias Analysis Evaluator Pointer Alias Summary: 32%/67%/0% -; IPAA: 544 Total ModRef Queries Performed -; IPAA: 88 no mod/ref responses (16.1%) -; IPAA: 0 mod responses (0.0%) -; IPAA: 0 ref responses (0.0%) -; IPAA: 456 mod & ref responses (83.8%) -; IPAA: Alias Analysis Evaluator Mod/Ref Summary: 16%/0%/0%/83% +; CHECK: Function: caller_a: 16 pointers, 8 call sites +; CHECK: MayAlias: double* %arg_a0, double* %arg_a1 +; CHECK: NoAlias: double* %arg_a0, double* %noalias_arg_a0 +; CHECK: NoAlias: double* %arg_a1, double* %noalias_arg_a0 +; CHECK: NoAlias: double* %arg_a0, double* %noalias_arg_a1 +; CHECK: NoAlias: double* %arg_a1, double* %noalias_arg_a1 +; CHECK: NoAlias: double* %noalias_arg_a0, double* %noalias_arg_a1 +; CHECK: MayAlias: double* %arg_a0, double** %indirect_a0 +; CHECK: MayAlias: double* %arg_a1, double** %indirect_a0 +; CHECK: NoAlias: double* %noalias_arg_a0, double** %indirect_a0 +; CHECK: NoAlias: double* %noalias_arg_a1, double** %indirect_a0 +; CHECK: MayAlias: double* %arg_a0, double** %indirect_a1 +; CHECK: MayAlias: double* %arg_a1, double** %indirect_a1 +; CHECK: NoAlias: double* %noalias_arg_a0, double** %indirect_a1 +; CHECK: NoAlias: double* %noalias_arg_a1, double** %indirect_a1 +; CHECK: MayAlias: double** %indirect_a0, double** %indirect_a1 +; CHECK: MayAlias: double* %arg_a0, double* %loaded_a0 +; CHECK: MayAlias: double* %arg_a1, double* %loaded_a0 +; CHECK: NoAlias: double* %loaded_a0, double* %noalias_arg_a0 +; CHECK: NoAlias: double* %loaded_a0, double* %noalias_arg_a1 +; CHECK: MayAlias: double* %loaded_a0, double** %indirect_a0 +; CHECK: MayAlias: double* %loaded_a0, double** %indirect_a1 +; CHECK: MayAlias: double* %arg_a0, double* %loaded_a1 +; CHECK: MayAlias: double* %arg_a1, double* %loaded_a1 +; CHECK: NoAlias: double* %loaded_a1, double* %noalias_arg_a0 +; CHECK: NoAlias: double* %loaded_a1, double* %noalias_arg_a1 +; CHECK: MayAlias: double* %loaded_a1, double** %indirect_a0 +; CHECK: MayAlias: double* %loaded_a1, double** %indirect_a1 +; CHECK: MayAlias: double* %loaded_a0, double* %loaded_a1 +; CHECK: NoAlias: double* %arg_a0, double* %escape_alloca_a0 +; CHECK: NoAlias: double* %arg_a1, double* %escape_alloca_a0 +; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a0 +; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a1 +; CHECK: NoAlias: double* %escape_alloca_a0, double** %indirect_a0 +; CHECK: NoAlias: double* %escape_alloca_a0, double** %indirect_a1 +; CHECK: MayAlias: double* %escape_alloca_a0, double* %loaded_a0 +; CHECK: MayAlias: double* %escape_alloca_a0, double* %loaded_a1 +; CHECK: NoAlias: double* %arg_a0, double* %escape_alloca_a1 +; CHECK: NoAlias: double* %arg_a1, double* %escape_alloca_a1 +; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a0 +; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a1 +; CHECK: NoAlias: double* %escape_alloca_a1, double** %indirect_a0 +; CHECK: NoAlias: double* %escape_alloca_a1, double** %indirect_a1 +; CHECK: MayAlias: double* %escape_alloca_a1, double* %loaded_a0 +; CHECK: MayAlias: double* %escape_alloca_a1, double* %loaded_a1 +; CHECK: NoAlias: double* %escape_alloca_a0, double* %escape_alloca_a1 +; CHECK: NoAlias: double* %arg_a0, double* %noescape_alloca_a0 +; CHECK: NoAlias: double* %arg_a1, double* %noescape_alloca_a0 +; CHECK: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a0 +; CHECK: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a0 +; CHECK: NoAlias: double* %noescape_alloca_a0, double** %indirect_a0 +; CHECK: NoAlias: double* %noescape_alloca_a0, double** %indirect_a1 +; CHECK: NoAlias: double* %loaded_a0, double* %noescape_alloca_a0 +; CHECK: NoAlias: double* %loaded_a1, double* %noescape_alloca_a0 +; CHECK: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a0 +; CHECK: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a0 +; CHECK: NoAlias: double* %arg_a0, double* %noescape_alloca_a1 +; CHECK: NoAlias: double* %arg_a1, double* %noescape_alloca_a1 +; CHECK: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a1 +; CHECK: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a1 +; CHECK: NoAlias: double* %noescape_alloca_a1, double** %indirect_a0 +; CHECK: NoAlias: double* %noescape_alloca_a1, double** %indirect_a1 +; CHECK: NoAlias: double* %loaded_a0, double* %noescape_alloca_a1 +; CHECK: NoAlias: double* %loaded_a1, double* %noescape_alloca_a1 +; CHECK: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a1 +; CHECK: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a1 +; CHECK: NoAlias: double* %noescape_alloca_a0, double* %noescape_alloca_a1 +; CHECK: MayAlias: double* %arg_a0, double* %normal_ret_a0 +; CHECK: MayAlias: double* %arg_a1, double* %normal_ret_a0 +; CHECK: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a0 +; CHECK: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a0 +; CHECK: MayAlias: double* %normal_ret_a0, double** %indirect_a0 +; CHECK: MayAlias: double* %normal_ret_a0, double** %indirect_a1 +; CHECK: MayAlias: double* %loaded_a0, double* %normal_ret_a0 +; CHECK: MayAlias: double* %loaded_a1, double* %normal_ret_a0 +; CHECK: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a0 +; CHECK: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a0 +; CHECK: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a0 +; CHECK: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a0 +; CHECK: MayAlias: double* %arg_a0, double* %normal_ret_a1 +; CHECK: MayAlias: double* %arg_a1, double* %normal_ret_a1 +; CHECK: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a1 +; CHECK: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a1 +; CHECK: MayAlias: double* %normal_ret_a1, double** %indirect_a0 +; CHECK: MayAlias: double* %normal_ret_a1, double** %indirect_a1 +; CHECK: MayAlias: double* %loaded_a0, double* %normal_ret_a1 +; CHECK: MayAlias: double* %loaded_a1, double* %normal_ret_a1 +; CHECK: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a1 +; CHECK: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a1 +; CHECK: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a1 +; CHECK: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a1 +; CHECK: MayAlias: double* %normal_ret_a0, double* %normal_ret_a1 +; CHECK: NoAlias: double* %arg_a0, double* %noalias_ret_a0 +; CHECK: NoAlias: double* %arg_a1, double* %noalias_ret_a0 +; CHECK: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a0 +; CHECK: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a0 +; CHECK: NoAlias: double* %noalias_ret_a0, double** %indirect_a0 +; CHECK: NoAlias: double* %noalias_ret_a0, double** %indirect_a1 +; CHECK: NoAlias: double* %loaded_a0, double* %noalias_ret_a0 +; CHECK: NoAlias: double* %loaded_a1, double* %noalias_ret_a0 +; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a0 +; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a0 +; CHECK: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a0 +; CHECK: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a1 +; CHECK: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a0 +; CHECK: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a1 +; CHECK: NoAlias: double* %arg_a0, double* %noalias_ret_a1 +; CHECK: NoAlias: double* %arg_a1, double* %noalias_ret_a1 +; CHECK: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a1 +; CHECK: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a1 +; CHECK: NoAlias: double* %noalias_ret_a1, double** %indirect_a0 +; CHECK: NoAlias: double* %noalias_ret_a1, double** %indirect_a1 +; CHECK: NoAlias: double* %loaded_a0, double* %noalias_ret_a1 +; CHECK: NoAlias: double* %loaded_a1, double* %noalias_ret_a1 +; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a1 +; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a1 +; CHECK: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a0 +; CHECK: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a1 +; CHECK: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a0 +; CHECK: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a1 +; CHECK: NoAlias: double* %noalias_ret_a0, double* %noalias_ret_a1 +; CHECK: ModRef: Ptr: double* %arg_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %arg_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_a0 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %arg_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %arg_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_a1 = call double* @normal_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_a0 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_a1 = call double* @noalias_returner() ; [#uses=1] +; CHECK: ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_a0) +; CHECK: ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_a1) +; CHECK: ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: ModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0) +; CHECK: ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: ModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1) +; CHECK: ===== Alias Analysis Evaluator Report ===== +; CHECK: 120 Total Alias Queries Performed +; CHECK: 84 no alias responses (70.0%) +; CHECK: 36 may alias responses (30.0%) +; CHECK: 0 must alias responses (0.0%) +; CHECK: Alias Analysis Evaluator Pointer Alias Summary: 70%/30%/0% +; CHECK: 128 Total ModRef Queries Performed +; CHECK: 44 no mod/ref responses (34.3%) +; CHECK: 0 mod responses (0.0%) +; CHECK: 0 ref responses (0.0%) +; CHECK: 84 mod & ref responses (65.6%) +; CHECK: Alias Analysis Evaluator Mod/Ref Summary: 34%/0%/0%/65% diff --git a/test/Analysis/BasicAA/interprocedural.ll b/test/Analysis/BasicAA/interprocedural.ll deleted file mode 100644 index aa65231c836..00000000000 --- a/test/Analysis/BasicAA/interprocedural.ll +++ /dev/null @@ -1,73 +0,0 @@ -; RUN: opt -interprocedural-basic-aa -interprocedural-aa-eval -print-all-alias-modref-info -disable-output < %s |& FileCheck %s - -; The noalias attribute is not safe in an interprocedural context. -; CHECK: MayAlias: i8* %p, i8* %q - -define void @t0(i8* noalias %p) { - store i8 0, i8* %p - ret void -} -define void @t1(i8* noalias %q) { - store i8 0, i8* %q - ret void -} - -; An alloca can alias an argument in a different function. -; CHECK: MayAlias: i32* %r, i32* %s - -define void @s0(i32* %r) { - store i32 0, i32* %r - ret void -} - -define void @s1() { - %s = alloca i32, i32 10 - store i32 0, i32* %s - call void @s0(i32* %s) - ret void -} - -; An alloca does not alias an argument in the same function. -; CHECK: NoAlias: i64* %t, i64* %u -; CHECK: NoAlias: i64* %a, i64* %u -; CHECK: NoAlias: i64* %a, i64* %t -; CHECK: MayAlias: i64* %u, i64* %v -; CHECK: MayAlias: i64* %t, i64* %v -; CHECK: NoAlias: i64* %a, i64* %v -; CHECK: MayAlias: i64* %b, i64* %u -; CHECK: MayAlias: i64* %b, i64* %t -; CHECK: MayAlias: i64* %b, i64* %v -declare i64* @r0_callee(i64*) -define i64* @r0(i64* %u) { - %t = alloca i64, i32 10 - %a = alloca i64, i32 10 - %v = call i64* @r0_callee(i64* %t) - %b = call i64* @r0_callee(i64* %t) - store i64 0, i64* %t - store i64 0, i64* %u - store i64 0, i64* %v - store i64 0, i64* %a - store i64 0, i64* %b - ret i64* %t -} - -; The noalias attribute is safe when both arguments belong to the same function -; even in an interprocedural context. -; CHECK: NoAlias: i8* %w, i8* %x - -define void @q0(i8* noalias %w, i8* noalias %x) { - store i8 0, i8* %w - store i8 0, i8* %x - call void @q0(i8* noalias %x, i8* noalias %w) - unreachable -} - -; The noalias attribute is not necessarily safe in an interprocedural context. -; CHECK: MayAlias: double* %y, double* @G - -@G = external global double -define void @p0(double* noalias %y) { - store double 0.0, double* %y - store double 0.0, double* @G - unreachable -}