The trouble with testing for "ModRef" and "NoModRef" is that
authorDan Gohman <gohman@apple.com>
Wed, 4 Aug 2010 23:37:55 +0000 (23:37 +0000)
committerDan Gohman <gohman@apple.com>
Wed, 4 Aug 2010 23:37:55 +0000 (23:37 +0000)
one is a suffix of the other, and FileCheck accepts superstrings.
Adjust the output to avoid this problem.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110280 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/AliasAnalysisEvaluator.cpp
test/Analysis/BasicAA/args-rets-allocas-loads.ll
test/Analysis/BasicAA/getmodrefinfo-cs-cs.ll

index a22f63acb11e70982a3b37f80f1b7e57b3dc81ec..76a452e2e7daf09c5ff1b605d623533d28235a41 100644 (file)
@@ -204,13 +204,13 @@ bool AAEval::runOnFunction(Function &F) {
         PrintModRefResults("NoModRef", PrintNoModRef, I, *V, F.getParent());
         ++NoModRef; break;
       case AliasAnalysis::Mod:
-        PrintModRefResults("     Mod", PrintMod, I, *V, F.getParent());
+        PrintModRefResults("Just Mod", PrintMod, I, *V, F.getParent());
         ++Mod; break;
       case AliasAnalysis::Ref:
-        PrintModRefResults("     Ref", PrintRef, I, *V, F.getParent());
+        PrintModRefResults("Just Ref", PrintRef, I, *V, F.getParent());
         ++Ref; break;
       case AliasAnalysis::ModRef:
-        PrintModRefResults("  ModRef", PrintModRef, I, *V, F.getParent());
+        PrintModRefResults("Both ModRef", PrintModRef, I, *V, F.getParent());
         ++ModRef; break;
       default:
         errs() << "Unknown alias query result!\n";
@@ -229,13 +229,13 @@ bool AAEval::runOnFunction(Function &F) {
         PrintModRefResults("NoModRef", PrintNoModRef, *C, *D, F.getParent());
         ++NoModRef; break;
       case AliasAnalysis::Mod:
-        PrintModRefResults("     Mod", PrintMod, *C, *D, F.getParent());
+        PrintModRefResults("Just Mod", PrintMod, *C, *D, F.getParent());
         ++Mod; break;
       case AliasAnalysis::Ref:
-        PrintModRefResults("     Ref", PrintRef, *C, *D, F.getParent());
+        PrintModRefResults("Just Ref", PrintRef, *C, *D, F.getParent());
         ++Ref; break;
       case AliasAnalysis::ModRef:
-        PrintModRefResults("  ModRef", PrintModRef, *C, *D, F.getParent());
+        PrintModRefResults("Both ModRef", PrintModRef, *C, *D, F.getParent());
         ++ModRef; break;
       }
     }
index 42893d81203b5004e09c4a0f40e3fe09e438753b..a0bc91a459d8390a554e20f31cd5e3dbc11095b7 100644 (file)
@@ -168,132 +168,132 @@ define void @caller_a(double* %arg_a0,
 ; 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() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %arg_a1     <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %arg_a0    <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %arg_a1    <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_arg_a0     <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_arg_a1     <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double** %indirect_a0       <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double** %indirect_a1       <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %loaded_a0  <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %loaded_a1  <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %escape_alloca_a0   <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %escape_alloca_a1   <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double** %indirect_a0      <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double** %indirect_a1      <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %loaded_a0 <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %loaded_a1 <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0  <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1  <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noescape_alloca_a0 <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noescape_alloca_a1 <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %normal_ret_a0      <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %normal_ret_a1      <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0     <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1     <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_ret_a0     <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_ret_a1     <->  %normal_ret_a0 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %arg_a0     <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %arg_a1     <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %arg_a0    <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %arg_a1    <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_arg_a0     <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_arg_a1     <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double** %indirect_a0       <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double** %indirect_a1       <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %loaded_a0  <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %loaded_a1  <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %escape_alloca_a0   <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %escape_alloca_a1   <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double** %indirect_a0      <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double** %indirect_a1      <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %loaded_a0 <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %loaded_a1 <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0  <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1  <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noescape_alloca_a0 <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noescape_alloca_a1 <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %normal_ret_a0      <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %normal_ret_a1      <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0     <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1     <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_ret_a0     <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_ret_a1     <->  %normal_ret_a1 = call double* @normal_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %arg_a0     <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %arg_a1     <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %arg_a0    <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %arg_a1    <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_arg_a0     <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_arg_a1     <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double** %indirect_a0       <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double** %indirect_a1       <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %loaded_a0  <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %loaded_a1  <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %escape_alloca_a0   <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %escape_alloca_a1   <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double** %indirect_a0      <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double** %indirect_a1      <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %loaded_a0 <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %loaded_a1 <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0  <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1  <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noescape_alloca_a0 <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noescape_alloca_a1 <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %normal_ret_a0      <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %normal_ret_a1      <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %noalias_ret_a0     <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0     <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1     <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %noalias_ret_a0    <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_ret_a1     <->  %noalias_ret_a0 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %arg_a0     <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %arg_a1     <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %arg_a0    <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %arg_a1    <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_arg_a0     <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_arg_a1     <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double** %indirect_a0       <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double** %indirect_a1       <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %loaded_a0  <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %loaded_a1  <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %escape_alloca_a0   <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %escape_alloca_a1   <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double** %indirect_a0      <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double** %indirect_a1      <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %loaded_a0 <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %loaded_a1 <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0  <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1  <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noescape_alloca_a0 <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noescape_alloca_a1 <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %normal_ret_a0      <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %normal_ret_a1      <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0     <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1     <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
 ; CHECK:   NoModRef:  Ptr: double* %noalias_ret_a0     <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
-; CHECK:     ModRef:  Ptr: double* %noalias_ret_a1     <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#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: Both ModRef:  Ptr: double* %noalias_ret_a1    <->  %noalias_ret_a1 = call double* @noalias_returner() ; <double*> [#uses=1]
+; CHECK: Both ModRef:  Ptr: double* %arg_a0    <->  call void @callee(double* %escape_alloca_a0)
+; CHECK: Both 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: Both ModRef:  Ptr: double** %indirect_a0      <->  call void @callee(double* %escape_alloca_a0)
+; CHECK: Both ModRef:  Ptr: double** %indirect_a1      <->  call void @callee(double* %escape_alloca_a0)
+; CHECK: Both ModRef:  Ptr: double* %loaded_a0 <->  call void @callee(double* %escape_alloca_a0)
+; CHECK: Both ModRef:  Ptr: double* %loaded_a1 <->  call void @callee(double* %escape_alloca_a0)
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0  <->  call void @callee(double* %escape_alloca_a0)
+; CHECK: Both 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: Both ModRef:  Ptr: double* %normal_ret_a0     <->  call void @callee(double* %escape_alloca_a0)
+; CHECK: Both 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: Both ModRef:  Ptr: double* %arg_a0    <->  call void @callee(double* %escape_alloca_a1)
+; CHECK: Both 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: Both ModRef:  Ptr: double** %indirect_a0      <->  call void @callee(double* %escape_alloca_a1)
+; CHECK: Both ModRef:  Ptr: double** %indirect_a1      <->  call void @callee(double* %escape_alloca_a1)
+; CHECK: Both ModRef:  Ptr: double* %loaded_a0 <->  call void @callee(double* %escape_alloca_a1)
+; CHECK: Both ModRef:  Ptr: double* %loaded_a1 <->  call void @callee(double* %escape_alloca_a1)
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0  <->  call void @callee(double* %escape_alloca_a1)
+; CHECK: Both 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: Both ModRef:  Ptr: double* %normal_ret_a0     <->  call void @callee(double* %escape_alloca_a1)
+; CHECK: Both 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: Both ModRef:  Ptr: double* %arg_a0    <->  call void @nocap_callee(double* %noescape_alloca_a0)
+; CHECK: Both 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: Both ModRef:  Ptr: double** %indirect_a0      <->  call void @nocap_callee(double* %noescape_alloca_a0)
+; CHECK: Both ModRef:  Ptr: double** %indirect_a1      <->  call void @nocap_callee(double* %noescape_alloca_a0)
+; CHECK: Both ModRef:  Ptr: double* %loaded_a0 <->  call void @nocap_callee(double* %noescape_alloca_a0)
+; CHECK: Both ModRef:  Ptr: double* %loaded_a1 <->  call void @nocap_callee(double* %noescape_alloca_a0)
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0  <->  call void @nocap_callee(double* %noescape_alloca_a0)
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1  <->  call void @nocap_callee(double* %noescape_alloca_a0)
+; CHECK: Both 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: Both ModRef:  Ptr: double* %normal_ret_a0     <->  call void @nocap_callee(double* %noescape_alloca_a0)
+; CHECK: Both 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: Both ModRef:  Ptr: double* %arg_a0    <->  call void @nocap_callee(double* %noescape_alloca_a1)
+; CHECK: Both 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: Both ModRef:  Ptr: double** %indirect_a0      <->  call void @nocap_callee(double* %noescape_alloca_a1)
+; CHECK: Both ModRef:  Ptr: double** %indirect_a1      <->  call void @nocap_callee(double* %noescape_alloca_a1)
+; CHECK: Both ModRef:  Ptr: double* %loaded_a0 <->  call void @nocap_callee(double* %noescape_alloca_a1)
+; CHECK: Both ModRef:  Ptr: double* %loaded_a1 <->  call void @nocap_callee(double* %noescape_alloca_a1)
+; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0  <->  call void @nocap_callee(double* %noescape_alloca_a1)
+; CHECK: Both 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: Both ModRef:  Ptr: double* %noescape_alloca_a1        <->  call void @nocap_callee(double* %noescape_alloca_a1)
+; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0     <->  call void @nocap_callee(double* %noescape_alloca_a1)
+; CHECK: Both 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 =====
index 4ee637ee1d61c945f3817723f3a6c82b55615373..f655913f3d129c7a5c4b60d81b60410b9178923d 100644 (file)
@@ -1,6 +1,6 @@
 ; RUN: opt < %s -aa-eval -print-all-alias-modref-info -disable-output |& FileCheck %s
 
-; CHECK: {{[[:<:]]}}Ref: call void @ro() <-> call void @f0()
+; CHECK: Just Ref: call void @ro() <-> call void @f0()
 
 declare void @f0()
 declare void @ro() readonly