[llvm] 2564096 - [DependenceAnalysis] Convert tests to opaque pointers (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 16 03:07:01 PST 2022


Author: Nikita Popov
Date: 2022-12-16T12:06:53+01:00
New Revision: 2564096655fc51f6e02c2a65661bf0c8147887e3

URL: https://github.com/llvm/llvm-project/commit/2564096655fc51f6e02c2a65661bf0c8147887e3
DIFF: https://github.com/llvm/llvm-project/commit/2564096655fc51f6e02c2a65661bf0c8147887e3.diff

LOG: [DependenceAnalysis] Convert tests to opaque pointers (NFC)

Added: 
    

Modified: 
    llvm/test/Analysis/DependenceAnalysis/AA.ll
    llvm/test/Analysis/DependenceAnalysis/Banerjee.ll
    llvm/test/Analysis/DependenceAnalysis/BasePtrBug.ll
    llvm/test/Analysis/DependenceAnalysis/Constraints.ll
    llvm/test/Analysis/DependenceAnalysis/Coupled.ll
    llvm/test/Analysis/DependenceAnalysis/DADelin.ll
    llvm/test/Analysis/DependenceAnalysis/Dump.ll
    llvm/test/Analysis/DependenceAnalysis/ExactRDIV.ll
    llvm/test/Analysis/DependenceAnalysis/ExactSIV.ll
    llvm/test/Analysis/DependenceAnalysis/GCD.ll
    llvm/test/Analysis/DependenceAnalysis/Invariant.ll
    llvm/test/Analysis/DependenceAnalysis/MIVCheckConst.ll
    llvm/test/Analysis/DependenceAnalysis/MIVMaxLevelThreshold.ll
    llvm/test/Analysis/DependenceAnalysis/NonAffineExpr.ll
    llvm/test/Analysis/DependenceAnalysis/NonCanonicalizedSubscript.ll
    llvm/test/Analysis/DependenceAnalysis/PR21585.ll
    llvm/test/Analysis/DependenceAnalysis/Preliminary.ll
    llvm/test/Analysis/DependenceAnalysis/PreliminaryNoValidityCheckFixedSize.ll
    llvm/test/Analysis/DependenceAnalysis/Propagating.ll
    llvm/test/Analysis/DependenceAnalysis/Separability.ll
    llvm/test/Analysis/DependenceAnalysis/SimpleSIVNoValidityCheck.ll
    llvm/test/Analysis/DependenceAnalysis/SimpleSIVNoValidityCheckFixedSize.ll
    llvm/test/Analysis/DependenceAnalysis/StrongSIV.ll
    llvm/test/Analysis/DependenceAnalysis/SymbolicRDIV.ll
    llvm/test/Analysis/DependenceAnalysis/SymbolicSIV.ll
    llvm/test/Analysis/DependenceAnalysis/UsefulGEP.ll
    llvm/test/Analysis/DependenceAnalysis/WeakCrossingSIV.ll
    llvm/test/Analysis/DependenceAnalysis/WeakZeroDstSIV.ll
    llvm/test/Analysis/DependenceAnalysis/WeakZeroSrcSIV.ll
    llvm/test/Analysis/DependenceAnalysis/ZIV.ll
    llvm/test/Analysis/DependenceAnalysis/lcssa.ll
    llvm/test/Analysis/DependenceAnalysis/new-pm-invalidation.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Analysis/DependenceAnalysis/AA.ll b/llvm/test/Analysis/DependenceAnalysis/AA.ll
index e6e9af1719011..a478143720d04 100644
--- a/llvm/test/Analysis/DependenceAnalysis/AA.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/AA.ll
@@ -5,9 +5,9 @@
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - confused!
 ; CHECK: da analyze - none!
-define void @test_no_noalias(i32* %A, i32* %B) {
-  store i32 1, i32* %A
-  store i32 2, i32* %B
+define void @test_no_noalias(ptr %A, ptr %B) {
+  store i32 1, ptr %A
+  store i32 2, ptr %B
   ret void
 }
 
@@ -15,9 +15,9 @@ define void @test_no_noalias(i32* %A, i32* %B) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - none!
-define void @test_one_noalias(i32* noalias %A, i32* %B) {
-  store i32 1, i32* %A
-  store i32 2, i32* %B
+define void @test_one_noalias(ptr noalias %A, ptr %B) {
+  store i32 1, ptr %A
+  store i32 2, ptr %B
   ret void
 }
 
@@ -25,9 +25,9 @@ define void @test_one_noalias(i32* noalias %A, i32* %B) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - none!
-define void @test_two_noalias(i32* noalias %A, i32* noalias %B) {
-  store i32 1, i32* %A
-  store i32 2, i32* %B
+define void @test_two_noalias(ptr noalias %A, ptr noalias %B) {
+  store i32 1, ptr %A
+  store i32 2, ptr %B
   ret void
 }
 
@@ -36,9 +36,9 @@ define void @test_two_noalias(i32* noalias %A, i32* noalias %B) {
 ; CHECK: da analyze - confused!
 ; CHECK: da analyze - none!
 @g = global i32 5
-define void @test_global_alias(i32* %A) {
-  store i32 1, i32* %A
-  store i32 2, i32* @g
+define void @test_global_alias(ptr %A) {
+  store i32 1, ptr %A
+  store i32 2, ptr @g
   ret void
 }
 
@@ -46,9 +46,9 @@ define void @test_global_alias(i32* %A) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - none!
-define void @test_global_noalias(i32* noalias %A) {
-  store i32 1, i32* %A
-  store i32 2, i32* @g
+define void @test_global_noalias(ptr noalias %A) {
+  store i32 1, ptr %A
+  store i32 2, ptr @g
   ret void
 }
 
@@ -61,11 +61,11 @@ define void @test_global_noalias(i32* noalias %A) {
 ; CHECK: da analyze - none!
 
 @a = global i16 5, align 2
- at b = global i16* @a, align 4
+ at b = global ptr @a, align 4
 define void @test_global_size() {
-  %l0 = load i16*, i16** @b, align 4
-  %l1 = load i16, i16* %l0, align 2
-  store i16 1, i16* @a, align 2
+  %l0 = load ptr, ptr @b, align 4
+  %l1 = load i16, ptr %l0, align 2
+  store i16 1, ptr @a, align 2
   ret void
 }
 
@@ -73,9 +73,9 @@ define void @test_global_size() {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - confused!
 ; CHECK: da analyze - none!
-define void @test_tbaa_same(i32* %A, i32* %B) {
-  store i32 1, i32* %A, !tbaa !5
-  store i32 2, i32* %B, !tbaa !5
+define void @test_tbaa_same(ptr %A, ptr %B) {
+  store i32 1, ptr %A, !tbaa !5
+  store i32 2, ptr %B, !tbaa !5
   ret void
 }
 
@@ -83,9 +83,9 @@ define void @test_tbaa_same(i32* %A, i32* %B) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - none!
-define void @test_tbaa_
diff (i32* %A, i16* %B) {
-  store i32 1, i32* %A, !tbaa !5
-  store i16 2, i16* %B, !tbaa !9
+define void @test_tbaa_
diff (ptr %A, ptr %B) {
+  store i32 1, ptr %A, !tbaa !5
+  store i16 2, ptr %B, !tbaa !9
   ret void
 }
 
@@ -93,7 +93,7 @@ define void @test_tbaa_
diff (i32* %A, i16* %B) {
 ; CHECK: da analyze - input
 ; CHECK: da analyze - none
 ; CHECK: da analyze - output
-define void @tbaa_loop(i32 %I, i32 %J, i32* nocapture %A, i16* nocapture readonly %B) {
+define void @tbaa_loop(i32 %I, i32 %J, ptr nocapture %A, ptr nocapture readonly %B) {
 entry:
   %cmp = icmp ne i32 %J, 0
   %cmp122 = icmp ne i32 %I, 0
@@ -110,8 +110,8 @@ for.outer:
 for.inner:
   %j.us = phi i32 [ 0, %for.outer ], [ %inc.us, %for.inner ]
   %sum1.us = phi i32 [ 0, %for.outer ], [ %add.us, %for.inner ]
-  %arrayidx.us = getelementptr inbounds i16, i16* %B, i32 %j.us
-  %0 = load i16, i16* %arrayidx.us, align 4, !tbaa !9
+  %arrayidx.us = getelementptr inbounds i16, ptr %B, i32 %j.us
+  %0 = load i16, ptr %arrayidx.us, align 4, !tbaa !9
   %sext = sext i16 %0 to i32
   %add.us = add i32 %sext, %sum1.us
   %inc.us = add nuw i32 %j.us, 1
@@ -120,8 +120,8 @@ for.inner:
 
 for.latch:
   %add.us.lcssa = phi i32 [ %add.us, %for.inner ]
-  %arrayidx6.us = getelementptr inbounds i32, i32* %A, i32 %i.us
-  store i32 %add.us.lcssa, i32* %arrayidx6.us, align 4, !tbaa !5
+  %arrayidx6.us = getelementptr inbounds i32, ptr %A, i32 %i.us
+  store i32 %add.us.lcssa, ptr %arrayidx6.us, align 4, !tbaa !5
   %add8.us = add nuw i32 %i.us, 1
   %exitcond25 = icmp eq i32 %add8.us, %I
   br i1 %exitcond25, label %for.end.loopexit, label %for.outer

diff  --git a/llvm/test/Analysis/DependenceAnalysis/Banerjee.ll b/llvm/test/Analysis/DependenceAnalysis/Banerjee.ll
index 9d2b854e27e68..efc86d39b28ee 100644
--- a/llvm/test/Analysis/DependenceAnalysis/Banerjee.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/Banerjee.ll
@@ -14,7 +14,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;      A[10*i + j] = 0;
 ;;      *B++ = A[10*i + j - 1];
 
-define void @banerjee0(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee0(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 ; CHECK: 'Dependence Analysis' for function 'banerjee0':
@@ -42,30 +42,30 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc7
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]
   %i.03 = phi i64 [ 1, %entry ], [ %inc8, %for.inc7 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 1, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %i.03, 10
   %add = add nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %mul4 = mul nsw i64 %i.03, 10
   %add5 = add nsw i64 %mul4, %j.02
   %sub = add nsw i64 %add5, -1
-  %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub
-  %0 = load i64, i64* %arrayidx6, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %0, i64* %B.addr.11, align 8
+  %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %sub
+  %0 = load i64, ptr %arrayidx6, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %0, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 11
   br i1 %exitcond, label %for.body3, label %for.inc7
 
 for.inc7:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 10
   %inc8 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc8, 11
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
@@ -80,7 +80,7 @@ for.end9:                                         ; preds = %for.inc7
 ;;      A[10*i + j] = 0;
 ;;      *B++ = A[10*i + j - 1];
 
-define void @banerjee1(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee1(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp4 = icmp sgt i64 %n, 0
   br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end9
@@ -114,7 +114,7 @@ for.cond1.preheader.preheader:                    ; preds = %entry
   br label %for.cond1.preheader
 
 for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc7
-  %B.addr.06 = phi i64* [ %B.addr.1.lcssa, %for.inc7 ], [ %B, %for.cond1.preheader.preheader ]
+  %B.addr.06 = phi ptr [ %B.addr.1.lcssa, %for.inc7 ], [ %B, %for.cond1.preheader.preheader ]
   %i.05 = phi i64 [ %inc8, %for.inc7 ], [ 1, %for.cond1.preheader.preheader ]
   %1 = add i64 %m, 1
   %cmp21 = icmp sgt i64 %m, 0
@@ -125,28 +125,28 @@ for.body3.preheader:                              ; preds = %for.cond1.preheader
 
 for.body3:                                        ; preds = %for.body3.preheader, %for.body3
   %j.03 = phi i64 [ %inc, %for.body3 ], [ 1, %for.body3.preheader ]
-  %B.addr.12 = phi i64* [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ]
+  %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ]
   %mul = mul nsw i64 %i.05, 10
   %add = add nsw i64 %mul, %j.03
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %mul4 = mul nsw i64 %i.05, 10
   %add5 = add nsw i64 %mul4, %j.03
   %sub = add nsw i64 %add5, -1
-  %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub
-  %2 = load i64, i64* %arrayidx6, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.12, i64 1
-  store i64 %2, i64* %B.addr.12, align 8
+  %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %sub
+  %2 = load i64, ptr %arrayidx6, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.12, i64 1
+  store i64 %2, ptr %B.addr.12, align 8
   %inc = add nsw i64 %j.03, 1
   %exitcond = icmp eq i64 %inc, %1
   br i1 %exitcond, label %for.inc7.loopexit, label %for.body3
 
 for.inc7.loopexit:                                ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.06, i64 %m
+  %scevgep = getelementptr i64, ptr %B.addr.06, i64 %m
   br label %for.inc7
 
 for.inc7:                                         ; preds = %for.inc7.loopexit, %for.cond1.preheader
-  %B.addr.1.lcssa = phi i64* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc7.loopexit ]
+  %B.addr.1.lcssa = phi ptr [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc7.loopexit ]
   %inc8 = add nsw i64 %i.05, 1
   %exitcond7 = icmp eq i64 %inc8, %0
   br i1 %exitcond7, label %for.end9.loopexit, label %for.cond1.preheader
@@ -164,7 +164,7 @@ for.end9:                                         ; preds = %for.end9.loopexit,
 ;;      A[10*i + j] = 0;
 ;;      *B++ = A[10*i + j + 100];
 
-define void @banerjee2(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee2(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -193,30 +193,30 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc8
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %i.03, 10
   %add = add nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %mul4 = mul nsw i64 %i.03, 10
   %add5 = add nsw i64 %mul4, %j.02
   %add6 = add nsw i64 %add5, 100
-  %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
-  %0 = load i64, i64* %arrayidx7, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %0, i64* %B.addr.11, align 8
+  %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6
+  %0 = load i64, ptr %arrayidx7, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %0, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body3, label %for.inc8
 
 for.inc8:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 10
   %inc9 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc9, 10
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
@@ -231,7 +231,7 @@ for.end10:                                        ; preds = %for.inc8
 ;;      A[10*i + j] = 0;
 ;;      *B++ = A[10*i + j + 99];
 
-define void @banerjee3(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee3(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -260,30 +260,30 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc8
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %i.03, 10
   %add = add nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %mul4 = mul nsw i64 %i.03, 10
   %add5 = add nsw i64 %mul4, %j.02
   %add6 = add nsw i64 %add5, 99
-  %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
-  %0 = load i64, i64* %arrayidx7, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %0, i64* %B.addr.11, align 8
+  %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6
+  %0 = load i64, ptr %arrayidx7, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %0, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body3, label %for.inc8
 
 for.inc8:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 10
   %inc9 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc9, 10
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
@@ -298,7 +298,7 @@ for.end10:                                        ; preds = %for.inc8
 ;;      A[10*i + j] = 0;
 ;;      *B++ = A[10*i + j - 100];
 
-define void @banerjee4(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee4(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -327,30 +327,30 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc7
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %i.03, 10
   %add = add nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %mul4 = mul nsw i64 %i.03, 10
   %add5 = add nsw i64 %mul4, %j.02
   %sub = add nsw i64 %add5, -100
-  %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub
-  %0 = load i64, i64* %arrayidx6, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %0, i64* %B.addr.11, align 8
+  %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %sub
+  %0 = load i64, ptr %arrayidx6, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %0, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body3, label %for.inc7
 
 for.inc7:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 10
   %inc8 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc8, 10
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
@@ -365,7 +365,7 @@ for.end9:                                         ; preds = %for.inc7
 ;;      A[10*i + j] = 0;
 ;;      *B++ = A[10*i + j - 99];
 
-define void @banerjee5(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee5(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -394,30 +394,30 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc7
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %i.03, 10
   %add = add nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %mul4 = mul nsw i64 %i.03, 10
   %add5 = add nsw i64 %mul4, %j.02
   %sub = add nsw i64 %add5, -99
-  %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub
-  %0 = load i64, i64* %arrayidx6, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %0, i64* %B.addr.11, align 8
+  %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %sub
+  %0 = load i64, ptr %arrayidx6, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %0, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body3, label %for.inc7
 
 for.inc7:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 10
   %inc8 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc8, 10
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
@@ -432,7 +432,7 @@ for.end9:                                         ; preds = %for.inc7
 ;;      A[10*i + j] = 0;
 ;;      *B++ = A[10*i + j + 9];
 
-define void @banerjee6(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee6(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -461,30 +461,30 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc8
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %i.03, 10
   %add = add nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %mul4 = mul nsw i64 %i.03, 10
   %add5 = add nsw i64 %mul4, %j.02
   %add6 = add nsw i64 %add5, 9
-  %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
-  %0 = load i64, i64* %arrayidx7, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %0, i64* %B.addr.11, align 8
+  %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6
+  %0 = load i64, ptr %arrayidx7, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %0, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body3, label %for.inc8
 
 for.inc8:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 10
   %inc9 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc9, 10
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
@@ -499,7 +499,7 @@ for.end10:                                        ; preds = %for.inc8
 ;;      A[10*i + j] = 0;
 ;;      *B++ = A[10*i + j + 10];
 
-define void @banerjee7(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee7(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -528,30 +528,30 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc8
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %i.03, 10
   %add = add nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %mul4 = mul nsw i64 %i.03, 10
   %add5 = add nsw i64 %mul4, %j.02
   %add6 = add nsw i64 %add5, 10
-  %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
-  %0 = load i64, i64* %arrayidx7, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %0, i64* %B.addr.11, align 8
+  %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6
+  %0 = load i64, ptr %arrayidx7, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %0, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body3, label %for.inc8
 
 for.inc8:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 10
   %inc9 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc9, 10
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
@@ -566,7 +566,7 @@ for.end10:                                        ; preds = %for.inc8
 ;;      A[10*i + j] = 0;
 ;;      *B++ = A[10*i + j + 11];
 
-define void @banerjee8(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee8(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -595,30 +595,30 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc8
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %i.03, 10
   %add = add nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %mul4 = mul nsw i64 %i.03, 10
   %add5 = add nsw i64 %mul4, %j.02
   %add6 = add nsw i64 %add5, 11
-  %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
-  %0 = load i64, i64* %arrayidx7, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %0, i64* %B.addr.11, align 8
+  %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6
+  %0 = load i64, ptr %arrayidx7, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %0, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body3, label %for.inc8
 
 for.inc8:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 10
   %inc9 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc9, 10
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
@@ -633,7 +633,7 @@ for.end10:                                        ; preds = %for.inc8
 ;;      A[30*i + 500*j] = 0;
 ;;      *B++ = A[i - 500*j + 11];
 
-define void @banerjee9(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee9(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -662,31 +662,31 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc8
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %i.03, 30
   %mul4 = mul nsw i64 %j.02, 500
   %add = add nsw i64 %mul, %mul4
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %0 = mul i64 %j.02, -500
   %sub = add i64 %i.03, %0
   %add6 = add nsw i64 %sub, 11
-  %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
-  %1 = load i64, i64* %arrayidx7, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %1, i64* %B.addr.11, align 8
+  %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6
+  %1 = load i64, ptr %arrayidx7, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %1, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 20
   br i1 %exitcond, label %for.body3, label %for.inc8
 
 for.inc8:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 20
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 20
   %inc9 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc9, 20
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
@@ -701,7 +701,7 @@ for.end10:                                        ; preds = %for.inc8
 ;;      A[i + 500*j] = 0;
 ;;      *B++ = A[i - 500*j + 11];
 
-define void @banerjee10(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee10(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -730,30 +730,30 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc7
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %j.02, 500
   %add = add nsw i64 %i.03, %mul
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %0 = mul i64 %j.02, -500
   %sub = add i64 %i.03, %0
   %add5 = add nsw i64 %sub, 11
-  %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %add5
-  %1 = load i64, i64* %arrayidx6, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %1, i64* %B.addr.11, align 8
+  %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %add5
+  %1 = load i64, ptr %arrayidx6, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %1, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 20
   br i1 %exitcond, label %for.body3, label %for.inc7
 
 for.inc7:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 20
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 20
   %inc8 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc8, 20
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
@@ -768,7 +768,7 @@ for.end9:                                         ; preds = %for.inc7
 ;;      A[300*i + j] = 0;
 ;;      *B++ = A[250*i - j + 11];
 
-define void @banerjee11(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee11(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -797,30 +797,30 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc7
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %i.03, 300
   %add = add nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %mul4 = mul nsw i64 %i.03, 250
   %sub = sub nsw i64 %mul4, %j.02
   %add5 = add nsw i64 %sub, 11
-  %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %add5
-  %0 = load i64, i64* %arrayidx6, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %0, i64* %B.addr.11, align 8
+  %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %add5
+  %0 = load i64, ptr %arrayidx6, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %0, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 20
   br i1 %exitcond, label %for.body3, label %for.inc7
 
 for.inc7:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 20
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 20
   %inc8 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc8, 20
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
@@ -835,7 +835,7 @@ for.end9:                                         ; preds = %for.inc7
 ;;      A[100*i + j] = 0;
 ;;      *B++ = A[100*i - j + 11];
 
-define void @banerjee12(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
+define void @banerjee12(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -864,30 +864,30 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc7
-  %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %mul = mul nsw i64 %i.03, 100
   %add = add nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
-  store i64 0, i64* %arrayidx, align 8
+  %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add
+  store i64 0, ptr %arrayidx, align 8
   %mul4 = mul nsw i64 %i.03, 100
   %sub = sub nsw i64 %mul4, %j.02
   %add5 = add nsw i64 %sub, 11
-  %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %add5
-  %0 = load i64, i64* %arrayidx6, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
-  store i64 %0, i64* %B.addr.11, align 8
+  %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %add5
+  %0 = load i64, ptr %arrayidx6, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1
+  store i64 %0, ptr %B.addr.11, align 8
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 20
   br i1 %exitcond, label %for.body3, label %for.inc7
 
 for.inc7:                                         ; preds = %for.body3
-  %scevgep = getelementptr i64, i64* %B.addr.04, i64 20
+  %scevgep = getelementptr i64, ptr %B.addr.04, i64 20
   %inc8 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc8, 20
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9

diff  --git a/llvm/test/Analysis/DependenceAnalysis/BasePtrBug.ll b/llvm/test/Analysis/DependenceAnalysis/BasePtrBug.ll
index d41ca37707bc1..354ea5db72000 100644
--- a/llvm/test/Analysis/DependenceAnalysis/BasePtrBug.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/BasePtrBug.ll
@@ -15,25 +15,25 @@
 ; CHECK-LABEL: test1
 ; CHECK: da analyze - input [*|<]!
 
-define void @test1(i32* nocapture %A, i32* nocapture %B, i32 %N) #0 {
+define void @test1(ptr nocapture %A, ptr nocapture %B, i32 %N) #0 {
 entry:
   %cmp9 = icmp sgt i32 %N, 0
   br i1 %cmp9, label %for.body.lr.ph, label %for.end
 
 for.body.lr.ph:
   %div = sdiv i32 %N, 2
-  %bot.gep = getelementptr i32, i32* %A, i32 %div
+  %bot.gep = getelementptr i32, ptr %A, i32 %div
   br label %for.body
 
 for.body:
   %i = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
-  %gep.0 = getelementptr i32, i32* %A, i32 %i
-  %gep.1 = getelementptr i32, i32* %bot.gep, i32 %i
-  %gep.B = getelementptr i32, i32* %B, i32 %i
-  %0 = load i32, i32* %gep.0, align 4
-  %1 = load i32, i32* %gep.1, align 4
+  %gep.0 = getelementptr i32, ptr %A, i32 %i
+  %gep.1 = getelementptr i32, ptr %bot.gep, i32 %i
+  %gep.B = getelementptr i32, ptr %B, i32 %i
+  %0 = load i32, ptr %gep.0, align 4
+  %1 = load i32, ptr %gep.1, align 4
   %add = add nsw i32 %1, %0
-  store i32 %add, i32* %gep.B, align 4
+  store i32 %add, ptr %gep.B, align 4
   %inc = add nsw i32 %i, 1
   %exitcond = icmp eq i32 %inc, %N
   br i1 %exitcond, label %for.end, label %for.body
@@ -53,8 +53,8 @@ for.end:
 ; CHECK-LABEL: test2
 ; CHECK: da analyze - consistent anti [1]!
 
-define void @test2(i32*, i32) #3 {
-  %3 = getelementptr inbounds i32, i32* %0, i64 1
+define void @test2(ptr, i32) #3 {
+  %3 = getelementptr inbounds i32, ptr %0, i64 1
   br label %4
 
 ; <label>:4:
@@ -65,11 +65,11 @@ define void @test2(i32*, i32) #3 {
 
 ; <label>:7:
   %8 = zext i32 %.0 to i64
-  %9 = getelementptr inbounds i32, i32* %3, i64 %8
-  %10 = load i32, i32* %9, align 4
+  %9 = getelementptr inbounds i32, ptr %3, i64 %8
+  %10 = load i32, ptr %9, align 4
   %11 = zext i32 %.0 to i64
-  %12 = getelementptr inbounds i32, i32* %0, i64 %11
-  store i32 %10, i32* %12, align 4
+  %12 = getelementptr inbounds i32, ptr %0, i64 %11
+  store i32 %10, ptr %12, align 4
   br label %13
 
 ; <label>:13:

diff  --git a/llvm/test/Analysis/DependenceAnalysis/Constraints.ll b/llvm/test/Analysis/DependenceAnalysis/Constraints.ll
index a10e643f46650..c3cebd325bdeb 100644
--- a/llvm/test/Analysis/DependenceAnalysis/Constraints.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/Constraints.ll
@@ -19,9 +19,9 @@ define void @dep_constraint_crash_test(i32 %M, i32 %N) {
   %3 = icmp slt i32 %M, 2
   %4 = add nsw i32 %M, -1
   %5 = sext i32 %4 to i64
-  %6 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* @c, i64 0, i64 0, i64 %5
+  %6 = getelementptr inbounds [10 x [10 x i32]], ptr @c, i64 0, i64 0, i64 %5
   %7 = add nsw i32 %M, -1
-  %out_l.promoted = load i32, i32* @out_l
+  %out_l.promoted = load i32, ptr @out_l
   %8 = sext i32 %7 to i64
   %9 = sext i32 %2 to i64
   br label %.preheader
@@ -48,8 +48,8 @@ define void @dep_constraint_crash_test(i32 %M, i32 %N) {
 .lr.ph4:                                          ; preds = %.lr.ph6, %._crit_edge
   %indvars.iv19 = phi i64 [ %indvars.iv.next20, %._crit_edge ], [ %indvars.iv17, %.lr.ph6 ]
   %indvars.iv15 = phi i32 [ %indvars.iv.next16, %._crit_edge ], [ %indvars.iv13, %.lr.ph6 ]
-  %13 = getelementptr inbounds [10 x [10 x [10 x i32]]], [10 x [10 x [10 x i32]]]* @sum_c, i64 0, i64 %indvars.iv23, i64 %indvars.iv19, i64 %indvars.iv23
-  store i32 0, i32* %13
+  %13 = getelementptr inbounds [10 x [10 x [10 x i32]]], ptr @sum_c, i64 0, i64 %indvars.iv23, i64 %indvars.iv19, i64 %indvars.iv23
+  store i32 0, ptr %13
   %14 = add nsw i64 %indvars.iv19, -1
   %15 = icmp slt i64 %indvars.iv23, %14
   br i1 %15, label %.lr.ph, label %._crit_edge
@@ -57,29 +57,29 @@ define void @dep_constraint_crash_test(i32 %M, i32 %N) {
 .lr.ph:                                           ; preds = %.lr.ph4, %.lr.ph
   %indvars.iv11 = phi i64 [ %indvars.iv.next12, %.lr.ph ], [ %indvars.iv17, %.lr.ph4 ]
   %16 = add nsw i64 %indvars.iv11, -1
-  %17 = getelementptr inbounds [10 x [10 x [10 x i32]]], [10 x [10 x [10 x i32]]]* @sum_c, i64 0, i64 %indvars.iv23, i64 %indvars.iv19, i64 %16
-  %18 = load i32, i32* %17
-  %19 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* @c, i64 0, i64 %indvars.iv23, i64 %indvars.iv11
-  %20 = load i32, i32* %19
+  %17 = getelementptr inbounds [10 x [10 x [10 x i32]]], ptr @sum_c, i64 0, i64 %indvars.iv23, i64 %indvars.iv19, i64 %16
+  %18 = load i32, ptr %17
+  %19 = getelementptr inbounds [10 x [10 x i32]], ptr @c, i64 0, i64 %indvars.iv23, i64 %indvars.iv11
+  %20 = load i32, ptr %19
   %21 = add nsw i32 %20, %18
-  %22 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* @c, i64 0, i64 %indvars.iv11, i64 %indvars.iv19
-  %23 = load i32, i32* %22
+  %22 = getelementptr inbounds [10 x [10 x i32]], ptr @c, i64 0, i64 %indvars.iv11, i64 %indvars.iv19
+  %23 = load i32, ptr %22
   %24 = add nsw i32 %21, %23
-  %25 = getelementptr inbounds [10 x [10 x [10 x i32]]], [10 x [10 x [10 x i32]]]* @sum_c, i64 0, i64 %indvars.iv23, i64 %indvars.iv19, i64 %indvars.iv11
-  store i32 %24, i32* %25
+  %25 = getelementptr inbounds [10 x [10 x [10 x i32]]], ptr @sum_c, i64 0, i64 %indvars.iv23, i64 %indvars.iv19, i64 %indvars.iv11
+  store i32 %24, ptr %25
   %indvars.iv.next12 = add nuw nsw i64 %indvars.iv11, 1
   %lftr.wideiv = trunc i64 %indvars.iv.next12 to i32
   %exitcond = icmp eq i32 %lftr.wideiv, %indvars.iv15
   br i1 %exitcond, label %._crit_edge, label %.lr.ph
 
 ._crit_edge:                                      ; preds = %.lr.ph, %.lr.ph4
-  %26 = getelementptr inbounds [10 x [10 x [10 x i32]]], [10 x [10 x [10 x i32]]]* @sum_c, i64 0, i64 %indvars.iv23, i64 %indvars.iv19, i64 %14
-  %27 = load i32, i32* %26
-  %28 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* @W, i64 0, i64 %indvars.iv23, i64 %indvars.iv19
-  %29 = load i32, i32* %28
+  %26 = getelementptr inbounds [10 x [10 x [10 x i32]]], ptr @sum_c, i64 0, i64 %indvars.iv23, i64 %indvars.iv19, i64 %14
+  %27 = load i32, ptr %26
+  %28 = getelementptr inbounds [10 x [10 x i32]], ptr @W, i64 0, i64 %indvars.iv23, i64 %indvars.iv19
+  %29 = load i32, ptr %28
   %30 = add nsw i32 %29, %27
-  %31 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* @c, i64 0, i64 %indvars.iv23, i64 %indvars.iv19
-  store i32 %30, i32* %31
+  %31 = getelementptr inbounds [10 x [10 x i32]], ptr @c, i64 0, i64 %indvars.iv23, i64 %indvars.iv19
+  store i32 %30, ptr %31
   %indvars.iv.next16 = add nuw i32 %indvars.iv15, 1
   %indvars.iv.next20 = add nuw nsw i64 %indvars.iv19, 1
   %lftr.wideiv21 = trunc i64 %indvars.iv.next20 to i32
@@ -87,14 +87,14 @@ define void @dep_constraint_crash_test(i32 %M, i32 %N) {
   br i1 %exitcond22, label %.loopexit, label %.lr.ph4
 
 ._crit_edge7:                                     ; preds = %.loopexit, %.preheader
-  %32 = load i32, i32* %6
+  %32 = load i32, ptr %6
   %33 = add nsw i32 %10, %32
   %34 = add nuw nsw i32 %iter.08, 1
   %exitcond25 = icmp eq i32 %34, %N
   br i1 %exitcond25, label %._crit_edge9, label %.preheader
 
 ._crit_edge9:                                     ; preds = %._crit_edge7
-  store i32 %33, i32* @out_l
+  store i32 %33, ptr @out_l
   br label %35
 
 ; <label>:35                                      ; preds = %._crit_edge9, %0

diff  --git a/llvm/test/Analysis/DependenceAnalysis/Coupled.ll b/llvm/test/Analysis/DependenceAnalysis/Coupled.ll
index de79442714f23..04ea6987e21a8 100644
--- a/llvm/test/Analysis/DependenceAnalysis/Coupled.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/Coupled.ll
@@ -9,7 +9,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;    A[i][i] = i;
 ;;    *B++ = A[i + 10][i + 9];
 
-define void @couple0([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple0(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -23,16 +23,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
-  %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  store i32 %conv, i32* %arrayidx1, align 4
+  %arrayidx1 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  store i32 %conv, ptr %arrayidx1, align 4
   %add = add nsw i64 %i.02, 9
   %add2 = add nsw i64 %i.02, 10
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add2, i64 %add
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %add2, i64 %add
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body, label %for.end
@@ -46,7 +46,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[i][i] = i;
 ;;    *B++ = A[i + 9][i + 9];
 
-define void @couple1([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple1(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -60,16 +60,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
-  %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  store i32 %conv, i32* %arrayidx1, align 4
+  %arrayidx1 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  store i32 %conv, ptr %arrayidx1, align 4
   %add = add nsw i64 %i.02, 9
   %add2 = add nsw i64 %i.02, 9
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add2, i64 %add
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %add2, i64 %add
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body, label %for.end
@@ -83,7 +83,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - 6][3*i - 6] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple2([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple2(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -97,18 +97,18 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul nsw i64 %i.02, 3
   %sub = add nsw i64 %mul, -6
   %mul1 = mul nsw i64 %i.02, 3
   %sub2 = add nsw i64 %mul1, -6
-  %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub2, i64 %sub
-  store i32 %conv, i32* %arrayidx3, align 4
-  %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx3 = getelementptr inbounds [100 x i32], ptr %A, i64 %sub2, i64 %sub
+  store i32 %conv, ptr %arrayidx3, align 4
+  %arrayidx5 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body, label %for.end
@@ -122,7 +122,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - 6][3*i - 5] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple3([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple3(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -136,18 +136,18 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul nsw i64 %i.02, 3
   %sub = add nsw i64 %mul, -5
   %mul1 = mul nsw i64 %i.02, 3
   %sub2 = add nsw i64 %mul1, -6
-  %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub2, i64 %sub
-  store i32 %conv, i32* %arrayidx3, align 4
-  %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx3 = getelementptr inbounds [100 x i32], ptr %A, i64 %sub2, i64 %sub
+  store i32 %conv, ptr %arrayidx3, align 4
+  %arrayidx5 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body, label %for.end
@@ -161,7 +161,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - 6][3*i - n] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple4([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple4(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -175,19 +175,19 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul nsw i64 %i.02, 3
   %conv1 = sext i32 %n to i64
   %sub = sub nsw i64 %mul, %conv1
   %mul2 = mul nsw i64 %i.02, 3
   %sub3 = add nsw i64 %mul2, -6
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub3, i64 %sub
-  store i32 %conv, i32* %arrayidx4, align 4
-  %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx6, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %sub3, i64 %sub
+  store i32 %conv, ptr %arrayidx4, align 4
+  %arrayidx6 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx6, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body, label %for.end
@@ -201,7 +201,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - n + 1][3*i - n] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple5([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple5(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -215,7 +215,7 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul nsw i64 %i.02, 3
   %conv1 = sext i32 %n to i64
@@ -224,12 +224,12 @@ for.body:                                         ; preds = %entry, %for.body
   %conv3 = sext i32 %n to i64
   %sub4 = sub nsw i64 %mul2, %conv3
   %add = add nsw i64 %sub4, 1
-  %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add, i64 %sub
-  store i32 %conv, i32* %arrayidx5, align 4
-  %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx7, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx5 = getelementptr inbounds [100 x i32], ptr %A, i64 %add, i64 %sub
+  store i32 %conv, ptr %arrayidx5, align 4
+  %arrayidx7 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx7, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body, label %for.end
@@ -243,7 +243,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[i][3*i - 6] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple6([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple6(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -257,16 +257,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul nsw i64 %i.02, 3
   %sub = add nsw i64 %mul, -6
-  %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %sub
-  store i32 %conv, i32* %arrayidx1, align 4
-  %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx3, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %sub
+  store i32 %conv, ptr %arrayidx1, align 4
+  %arrayidx3 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx3, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body, label %for.end
@@ -280,7 +280,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[i][3*i - 5] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple7([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple7(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -294,16 +294,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul nsw i64 %i.02, 3
   %sub = add nsw i64 %mul, -5
-  %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %sub
-  store i32 %conv, i32* %arrayidx1, align 4
-  %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx3, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %sub
+  store i32 %conv, ptr %arrayidx1, align 4
+  %arrayidx3 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx3, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body, label %for.end
@@ -317,7 +317,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - 18][3 - i] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple8([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple8(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -331,17 +331,17 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %sub = sub nsw i64 3, %i.02
   %mul = mul nsw i64 %i.02, 3
   %sub1 = add nsw i64 %mul, -18
-  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
-  store i32 %conv, i32* %arrayidx2, align 4
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds [100 x i32], ptr %A, i64 %sub1, i64 %sub
+  store i32 %conv, ptr %arrayidx2, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 16
   br i1 %exitcond, label %for.body, label %for.end
@@ -355,7 +355,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - 18][2 - i] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple9([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple9(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -369,17 +369,17 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %sub = sub nsw i64 2, %i.02
   %mul = mul nsw i64 %i.02, 3
   %sub1 = add nsw i64 %mul, -18
-  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
-  store i32 %conv, i32* %arrayidx2, align 4
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds [100 x i32], ptr %A, i64 %sub1, i64 %sub
+  store i32 %conv, ptr %arrayidx2, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 16
   br i1 %exitcond, label %for.body, label %for.end
@@ -393,7 +393,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - 18][6 - i] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple10([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple10(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -407,17 +407,17 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %sub = sub nsw i64 6, %i.02
   %mul = mul nsw i64 %i.02, 3
   %sub1 = add nsw i64 %mul, -18
-  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
-  store i32 %conv, i32* %arrayidx2, align 4
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds [100 x i32], ptr %A, i64 %sub1, i64 %sub
+  store i32 %conv, ptr %arrayidx2, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 16
   br i1 %exitcond, label %for.body, label %for.end
@@ -431,7 +431,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - 18][18 - i] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple11([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple11(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -446,17 +446,17 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %sub = sub nsw i64 18, %i.02
   %mul = mul nsw i64 %i.02, 3
   %sub1 = add nsw i64 %mul, -18
-  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
-  store i32 %conv, i32* %arrayidx2, align 4
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds [100 x i32], ptr %A, i64 %sub1, i64 %sub
+  store i32 %conv, ptr %arrayidx2, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 16
   br i1 %exitcond, label %for.body, label %for.end
@@ -470,7 +470,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - 18][22 - i] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple12([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple12(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -485,17 +485,17 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %sub = sub nsw i64 22, %i.02
   %mul = mul nsw i64 %i.02, 3
   %sub1 = add nsw i64 %mul, -18
-  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
-  store i32 %conv, i32* %arrayidx2, align 4
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds [100 x i32], ptr %A, i64 %sub1, i64 %sub
+  store i32 %conv, ptr %arrayidx2, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 13
   br i1 %exitcond, label %for.body, label %for.end
@@ -509,7 +509,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - 18][22 - i] = i;
 ;;    *B++ = A[i][i];
 
-define void @couple13([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple13(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -523,17 +523,17 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %sub = sub nsw i64 22, %i.02
   %mul = mul nsw i64 %i.02, 3
   %sub1 = add nsw i64 %mul, -18
-  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
-  store i32 %conv, i32* %arrayidx2, align 4
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds [100 x i32], ptr %A, i64 %sub1, i64 %sub
+  store i32 %conv, ptr %arrayidx2, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 12
   br i1 %exitcond, label %for.body, label %for.end
@@ -546,7 +546,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - 18][18 - i][i] = i;
 ;;    *B++ = A[i][i][i];
 
-define void @couple14([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple14(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -560,17 +560,17 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %sub = sub nsw i64 18, %i.02
   %mul = mul nsw i64 %i.02, 3
   %sub1 = add nsw i64 %mul, -18
-  %arrayidx3 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub1, i64 %sub, i64 %i.02
-  store i32 %conv, i32* %arrayidx3, align 4
-  %arrayidx6 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.02, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx6, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx3 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %sub1, i64 %sub, i64 %i.02
+  store i32 %conv, ptr %arrayidx3, align 4
+  %arrayidx6 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %i.02, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx6, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body, label %for.end
@@ -584,7 +584,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i - 18][22 - i][i] = i;
 ;;    *B++ = A[i][i][i];
 
-define void @couple15([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @couple15(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -598,17 +598,17 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %sub = sub nsw i64 22, %i.02
   %mul = mul nsw i64 %i.02, 3
   %sub1 = add nsw i64 %mul, -18
-  %arrayidx3 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub1, i64 %sub, i64 %i.02
-  store i32 %conv, i32* %arrayidx3, align 4
-  %arrayidx6 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.02, i64 %i.02, i64 %i.02
-  %0 = load i32, i32* %arrayidx6, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx3 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %sub1, i64 %sub, i64 %i.02
+  store i32 %conv, ptr %arrayidx3, align 4
+  %arrayidx6 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %i.02, i64 %i.02, i64 %i.02
+  %0 = load i32, ptr %arrayidx6, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add nsw i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body, label %for.end
@@ -622,7 +622,7 @@ for.end:                                          ; preds = %for.body
 ;;    for(int j = 0; j < M; j+=1)
 ;;      A[M*N + M*i + j] = 2;
 
-define void @couple_weakzerosiv(i32* noalias nocapture %A, i64 %N, i64 %M) {
+define void @couple_weakzerosiv(ptr noalias nocapture %A, i64 %N, i64 %M) {
 entry:
   %cmp29 = icmp sgt i64 %N, 0
   br i1 %cmp29, label %for.body.lr.ph, label %for.cond.cleanup
@@ -639,8 +639,8 @@ for.body.lr.ph:                                   ; preds = %entry
 for.body.us:                                      ; preds = %for.body.lr.ph, %for.cond.cleanup4.loopexit.us
   %i.030.us = phi i64 [ %add12.us, %for.cond.cleanup4.loopexit.us ], [ 0, %for.body.lr.ph ]
   %mul1.us = mul nsw i64 %i.030.us, %mul
-  %arrayidx.us = getelementptr inbounds i32, i32* %A, i64 %mul1.us
-  store i32 1, i32* %arrayidx.us, align 4
+  %arrayidx.us = getelementptr inbounds i32, ptr %A, i64 %mul1.us
+  store i32 1, ptr %arrayidx.us, align 4
   %mul6.us = mul nsw i64 %i.030.us, %M
   %add.us = add i64 %mul6.us, %mul
   br label %for.body5.us
@@ -648,8 +648,8 @@ for.body.us:                                      ; preds = %for.body.lr.ph, %fo
 for.body5.us:                                     ; preds = %for.body5.us, %for.body.us
   %j.028.us = phi i64 [ 0, %for.body.us ], [ %add10.us, %for.body5.us ]
   %add8.us = add i64 %add.us, %j.028.us
-  %arrayidx9.us = getelementptr inbounds i32, i32* %A, i64 %add8.us
-  store i32 2, i32* %arrayidx9.us, align 4
+  %arrayidx9.us = getelementptr inbounds i32, ptr %A, i64 %add8.us
+  store i32 2, ptr %arrayidx9.us, align 4
   %add10.us = add nuw nsw i64 %j.028.us, 1
   %exitcond.us = icmp eq i64 %add10.us, %M
   br i1 %exitcond.us, label %for.cond.cleanup4.loopexit.us, label %for.body5.us

diff  --git a/llvm/test/Analysis/DependenceAnalysis/DADelin.ll b/llvm/test/Analysis/DependenceAnalysis/DADelin.ll
index 8c64eedbb3adc..73260910c3873 100644
--- a/llvm/test/Analysis/DependenceAnalysis/DADelin.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/DADelin.ll
@@ -10,7 +10,7 @@ target triple = "thumbv8m.main-arm-none-eabi"
 ;;    for (int k = 0; k < o; k++)
 ;;      = A[i*m*o + j*o + k]
 ;;     A[i*m*o + j*o + k] =
-define void @t1(i32 %n, i32 %m, i32 %o, i32* nocapture %A) {
+define void @t1(i32 %n, i32 %m, i32 %o, ptr nocapture %A) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - consistent anti [0 0 0|<]!
 ; CHECK: da analyze - none!
@@ -43,10 +43,10 @@ for.body8.lr.ph:                                  ; preds = %for.cond5.preheader
 for.body8:                                        ; preds = %for.body8, %for.body8.lr.ph
   %k.046 = phi i32 [ 0, %for.body8.lr.ph ], [ %inc, %for.body8 ]
   %add11 = add nsw i32 %k.046, %add
-  %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add11
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %add11
+  %0 = load i32, ptr %arrayidx, align 4
   %add12 = add nsw i32 %0, 1
-  store i32 %add12, i32* %arrayidx, align 4
+  store i32 %add12, ptr %arrayidx, align 4
   %inc = add nuw nsw i32 %k.046, 1
   %exitcond = icmp eq i32 %inc, %o
   br i1 %exitcond, label %for.cond.cleanup7, label %for.body8
@@ -71,7 +71,7 @@ for.cond.cleanup:                                 ; preds = %for.cond.cleanup3,
 ;;    for (int k = 0; k < o; k++)
 ;;      = A[i*m*o + j*o + k]
 ;;     A[i*m*o + j*o + k + 1] =
-define void @t2(i32 %n, i32 %m, i32 %o, i32* nocapture %A) {
+define void @t2(i32 %n, i32 %m, i32 %o, ptr nocapture %A) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - anti [* * *|<]!
 ; CHECK: da analyze - output [* * *]!
@@ -104,12 +104,12 @@ for.body8.lr.ph:                                  ; preds = %for.cond5.preheader
 for.body8:                                        ; preds = %for.body8, %for.body8.lr.ph
   %k.046 = phi i32 [ 0, %for.body8.lr.ph ], [ %inc, %for.body8 ]
   %add11 = add nsw i32 %k.046, %add
-  %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add11
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %add11
+  %0 = load i32, ptr %arrayidx, align 4
   %add12 = add nsw i32 %0, 1
   %add111 = add nsw i32 %add11, 1
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i32 %add111
-  store i32 %add12, i32* %arrayidx2, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i32 %add111
+  store i32 %add12, ptr %arrayidx2, align 4
   %inc = add nuw nsw i32 %k.046, 1
   %exitcond = icmp eq i32 %inc, %o
   br i1 %exitcond, label %for.cond.cleanup7, label %for.body8
@@ -134,7 +134,7 @@ for.cond.cleanup:                                 ; preds = %for.cond.cleanup3,
 ;;    for (int k = 0; k < o; k++)
 ;;      = A[i*m*o + j*o + k]
 ;;     A[i*m*o + j*o + k - 1] =
-define void @t3(i32 %n, i32 %m, i32 %o, i32* nocapture %A) {
+define void @t3(i32 %n, i32 %m, i32 %o, ptr nocapture %A) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - anti [* * *|<]!
 ; CHECK: da analyze - output [* * *]!
@@ -167,12 +167,12 @@ for.body8.lr.ph:                                  ; preds = %for.cond5.preheader
 for.body8:                                        ; preds = %for.body8, %for.body8.lr.ph
   %k.046 = phi i32 [ 0, %for.body8.lr.ph ], [ %inc, %for.body8 ]
   %add11 = add nsw i32 %k.046, %add
-  %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add11
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %add11
+  %0 = load i32, ptr %arrayidx, align 4
   %add12 = add nsw i32 %0, 1
   %add111 = sub nsw i32 %add11, 1
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i32 %add111
-  store i32 %add12, i32* %arrayidx2, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i32 %add111
+  store i32 %add12, ptr %arrayidx2, align 4
   %inc = add nuw nsw i32 %k.046, 1
   %exitcond = icmp eq i32 %inc, %o
   br i1 %exitcond, label %for.cond.cleanup7, label %for.body8
@@ -197,7 +197,7 @@ for.cond.cleanup:                                 ; preds = %for.cond.cleanup3,
 ;;    for (int k = 0; k < o; k++)
 ;;      = A[i*m*o + j*o + k]
 ;;     A[i*m*o + j*o + k + o] =
-define void @t4(i32 %n, i32 %m, i32 %o, i32* nocapture %A) {
+define void @t4(i32 %n, i32 %m, i32 %o, ptr nocapture %A) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - anti [* * *|<]!
 ; CHECK: da analyze - output [* * *]!
@@ -230,12 +230,12 @@ for.body8.lr.ph:                                  ; preds = %for.cond5.preheader
 for.body8:                                        ; preds = %for.body8, %for.body8.lr.ph
   %k.046 = phi i32 [ 0, %for.body8.lr.ph ], [ %inc, %for.body8 ]
   %add11 = add nsw i32 %k.046, %add
-  %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add11
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %add11
+  %0 = load i32, ptr %arrayidx, align 4
   %add12 = add nsw i32 %0, 1
   %add111 = add nsw i32 %add11, %o
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i32 %add111
-  store i32 %add12, i32* %arrayidx2, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i32 %add111
+  store i32 %add12, ptr %arrayidx2, align 4
   %inc = add nuw nsw i32 %k.046, 1
   %exitcond = icmp eq i32 %inc, %o
   br i1 %exitcond, label %for.cond.cleanup7, label %for.body8
@@ -260,7 +260,7 @@ for.cond.cleanup:                                 ; preds = %for.cond.cleanup3,
 ;;    for (int k = 0; k < o; k++)
 ;;      = A[i*m*o + j*o + k]
 ;;     A[i*m*o + j*o + k - o] =
-define void @t5(i32 %n, i32 %m, i32 %o, i32* nocapture %A) {
+define void @t5(i32 %n, i32 %m, i32 %o, ptr nocapture %A) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - anti [* * *|<]!
 ; CHECK: da analyze - output [* * *]!
@@ -293,12 +293,12 @@ for.body8.lr.ph:                                  ; preds = %for.cond5.preheader
 for.body8:                                        ; preds = %for.body8, %for.body8.lr.ph
   %k.046 = phi i32 [ 0, %for.body8.lr.ph ], [ %inc, %for.body8 ]
   %add11 = add nsw i32 %k.046, %add
-  %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add11
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %add11
+  %0 = load i32, ptr %arrayidx, align 4
   %add12 = add nsw i32 %0, 1
   %add111 = sub nsw i32 %add11, %o
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i32 %add111
-  store i32 %add12, i32* %arrayidx2, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i32 %add111
+  store i32 %add12, ptr %arrayidx2, align 4
   %inc = add nuw nsw i32 %k.046, 1
   %exitcond = icmp eq i32 %inc, %o
   br i1 %exitcond, label %for.cond.cleanup7, label %for.body8
@@ -323,7 +323,7 @@ for.cond.cleanup:                                 ; preds = %for.cond.cleanup3,
 ;;    for (int k = 0; k < o; k++)
 ;;      = A[i*m*o + j*o + k]
 ;;     A[i*m*o + j*o + k + m*o] =
-define void @t6(i32 %n, i32 %m, i32 %o, i32* nocapture %A) {
+define void @t6(i32 %n, i32 %m, i32 %o, ptr nocapture %A) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - consistent anti [-1 0 0]!
 ; CHECK: da analyze - none!
@@ -356,13 +356,13 @@ for.body8.lr.ph:                                  ; preds = %for.cond5.preheader
 for.body8:                                        ; preds = %for.body8, %for.body8.lr.ph
   %k.046 = phi i32 [ 0, %for.body8.lr.ph ], [ %inc, %for.body8 ]
   %add11 = add nsw i32 %k.046, %add
-  %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add11
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %add11
+  %0 = load i32, ptr %arrayidx, align 4
   %add12 = add nsw i32 %0, 1
   %mo = mul i32 %m, %o
   %add111 = add nsw i32 %add11, %mo
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i32 %add111
-  store i32 %add12, i32* %arrayidx2, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i32 %add111
+  store i32 %add12, ptr %arrayidx2, align 4
   %inc = add nuw nsw i32 %k.046, 1
   %exitcond = icmp eq i32 %inc, %o
   br i1 %exitcond, label %for.cond.cleanup7, label %for.body8
@@ -387,7 +387,7 @@ for.cond.cleanup:                                 ; preds = %for.cond.cleanup3,
 ;;    for (int k = 0; k < o; k++)
 ;;      = A[i*m*o + j*o + k]
 ;;     A[i*m*o + j*o + k - m*o] =
-define void @t7(i32 %n, i32 %m, i32 %o, i32* nocapture %A) {
+define void @t7(i32 %n, i32 %m, i32 %o, ptr nocapture %A) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - consistent anti [1 0 0]!
 ; CHECK: da analyze - none!
@@ -420,13 +420,13 @@ for.body8.lr.ph:                                  ; preds = %for.cond5.preheader
 for.body8:                                        ; preds = %for.body8, %for.body8.lr.ph
   %k.046 = phi i32 [ 0, %for.body8.lr.ph ], [ %inc, %for.body8 ]
   %add11 = add nsw i32 %k.046, %add
-  %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add11
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %add11
+  %0 = load i32, ptr %arrayidx, align 4
   %add12 = add nsw i32 %0, 1
   %mo = mul i32 %m, %o
   %add111 = sub nsw i32 %add11, %mo
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i32 %add111
-  store i32 %add12, i32* %arrayidx2, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i32 %add111
+  store i32 %add12, ptr %arrayidx2, align 4
   %inc = add nuw nsw i32 %k.046, 1
   %exitcond = icmp eq i32 %inc, %o
   br i1 %exitcond, label %for.cond.cleanup7, label %for.body8
@@ -451,7 +451,7 @@ for.cond.cleanup:                                 ; preds = %for.cond.cleanup3,
 ;;    for (int k = 1; k < o; k++)
 ;;      = A[i*m*o + j*o + k]
 ;;     A[i*m*o + j*o + k - 1] =
-define void @t8(i32 %n, i32 %m, i32 %o, i32* nocapture %A) {
+define void @t8(i32 %n, i32 %m, i32 %o, ptr nocapture %A) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - consistent anti [0 0 1]!
 ; CHECK: da analyze - none!
@@ -484,12 +484,12 @@ for.body8.lr.ph:                                  ; preds = %for.cond5.preheader
 for.body8:                                        ; preds = %for.body8, %for.body8.lr.ph
   %k.046 = phi i32 [ 1, %for.body8.lr.ph ], [ %inc, %for.body8 ]
   %add11 = add nsw i32 %k.046, %add
-  %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add11
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %add11
+  %0 = load i32, ptr %arrayidx, align 4
   %add12 = add nsw i32 %0, 1
   %add111 = sub nsw i32 %add11, 1
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i32 %add111
-  store i32 %add12, i32* %arrayidx2, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i32 %add111
+  store i32 %add12, ptr %arrayidx2, align 4
   %inc = add nuw nsw i32 %k.046, 1
   %exitcond = icmp eq i32 %inc, %o
   br i1 %exitcond, label %for.cond.cleanup7, label %for.body8
@@ -510,7 +510,7 @@ for.cond.cleanup:                                 ; preds = %for.cond.cleanup3,
 
 
 ; CHECK-LABEL: test_sizes
-define double @test_sizes(i16 %h, i16 %N, i16* nocapture %array) {
+define double @test_sizes(i16 %h, i16 %N, ptr nocapture %array) {
 ; CHECK: da analyze - consistent input [0 S]!
 ; CHECK: da analyze - anti [* *|<]!
 ; CHECK: da analyze - output [* *]!
@@ -531,16 +531,16 @@ for.body:                                         ; preds = %for.inc10, %for.bod
 
 for.body5.lr.ph:                                  ; preds = %for.body
   %1 = sext i16 %indvars.iv to i32
-  %arrayidx = getelementptr inbounds i16, i16* %array, i32 %indvars.iv32
+  %arrayidx = getelementptr inbounds i16, ptr %array, i32 %indvars.iv32
   br label %for.body5
 
 for.body5:                                        ; preds = %for.body5, %for.body5.lr.ph
   %indvars.iv30 = phi i32 [ %indvars.iv.next31, %for.body5 ], [ %1, %for.body5.lr.ph ]
   %j.027 = phi i16 [ %inc, %for.body5 ], [ 0, %for.body5.lr.ph ]
-  %2 = load i16, i16* %arrayidx, align 4
+  %2 = load i16, ptr %arrayidx, align 4
   %add6 = add nsw i16 %2, %j.027
-  %arrayidx8 = getelementptr inbounds i16, i16* %array, i32 %indvars.iv30
-  store i16 %add6, i16* %arrayidx8, align 4
+  %arrayidx8 = getelementptr inbounds i16, ptr %array, i32 %indvars.iv30
+  store i16 %add6, ptr %arrayidx8, align 4
   %inc = add nuw nsw i16 %j.027, 1
   %indvars.iv.next31 = add nsw i32 %indvars.iv30, 1
   %exitcond = icmp eq i16 %inc, %0
@@ -558,7 +558,7 @@ for.end12:                                        ; preds = %for.inc10, %entry
 
 
 ; CHECK-LABEL: nonnegative
-define void @nonnegative(i32* nocapture %A, i32 %N) {
+define void @nonnegative(ptr nocapture %A, i32 %N) {
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - consistent output [0 0|<]!
 ; CHECK: da analyze - none!
@@ -574,9 +574,9 @@ for.outer:
 for.inner:
   %i.043 = phi i32 [ 0, %for.outer ], [ %add16, %for.inner ]
   %add = add i32 %i.043, %mul
-  %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add
-  store i32 1, i32* %arrayidx, align 4
-  store i32 2, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %add
+  store i32 1, ptr %arrayidx, align 4
+  store i32 2, ptr %arrayidx, align 4
   %add16 = add nuw i32 %i.043, 1
   %exitcond46 = icmp eq i32 %add16, %N
   br i1 %exitcond46, label %for.latch, label %for.inner

diff  --git a/llvm/test/Analysis/DependenceAnalysis/Dump.ll b/llvm/test/Analysis/DependenceAnalysis/Dump.ll
index d86221d852af1..264b97899b0d2 100644
--- a/llvm/test/Analysis/DependenceAnalysis/Dump.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/Dump.ll
@@ -4,8 +4,8 @@
 ;; Test to make sure the dump shows the src and dst
 ;; instructions (including call instructions).
 ;;
-;; void bar(float * restrict A);
-;; void foo(float * restrict A, int n) {
+;; void bar(ptr restrict A);
+;; void foo(ptr restrict A, int n) {
 ;;   for (int i = 0; i < n; i++) {
 ;;     A[i] = i;
 ;;     bar(A);
@@ -14,14 +14,14 @@
 
 ; CHECK-LABEL: foo
 
-; CHECK: Src:  store float %conv, float* %arrayidx, align 4 --> Dst:  store float %conv, float* %arrayidx, align 4
+; CHECK: Src:  store float %conv, ptr %arrayidx, align 4 --> Dst:  store float %conv, ptr %arrayidx, align 4
 ; CHECK-NEXT:   da analyze - none!
-; CHECK-NEXT: Src:  store float %conv, float* %arrayidx, align 4 --> Dst:  call void @bar(float* %A)
+; CHECK-NEXT: Src:  store float %conv, ptr %arrayidx, align 4 --> Dst:  call void @bar(ptr %A)
 ; CHECK-NEXT:   da analyze - confused!
-; CHECK-NEXT: Src:  call void @bar(float* %A) --> Dst:  call void @bar(float* %A)
+; CHECK-NEXT: Src:  call void @bar(ptr %A) --> Dst:  call void @bar(ptr %A)
 ; CHECK-NEXT:   da analyze - confused!
 
-define void @foo(float* noalias %A, i32 signext %n) {
+define void @foo(ptr noalias %A, i32 signext %n) {
 entry:
   %cmp1 = icmp slt i32 0, %n
   br i1 %cmp1, label %for.body.lr.ph, label %for.end
@@ -33,9 +33,9 @@ for.body:                                         ; preds = %for.body.lr.ph, %fo
   %i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
   %conv = sitofp i32 %i.02 to float
   %idxprom = zext i32 %i.02 to i64
-  %arrayidx = getelementptr inbounds float, float* %A, i64 %idxprom
-  store float %conv, float* %arrayidx, align 4
-  call void @bar(float* %A) #3
+  %arrayidx = getelementptr inbounds float, ptr %A, i64 %idxprom
+  store float %conv, ptr %arrayidx, align 4
+  call void @bar(ptr %A) #3
   %inc = add nuw nsw i32 %i.02, 1
   %cmp = icmp slt i32 %inc, %n
   br i1 %cmp, label %for.body, label %for.cond.for.end_crit_edge
@@ -47,4 +47,4 @@ for.end:                                          ; preds = %for.cond.for.end_cr
   ret void
 }
 
-declare void @bar(float*)
+declare void @bar(ptr)

diff  --git a/llvm/test/Analysis/DependenceAnalysis/ExactRDIV.ll b/llvm/test/Analysis/DependenceAnalysis/ExactRDIV.ll
index 4dc944223c11d..1c7bcda1c7b15 100644
--- a/llvm/test/Analysis/DependenceAnalysis/ExactRDIV.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/ExactRDIV.ll
@@ -11,7 +11,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;  for (long int j = 0; j < 10; j++)
 ;;    *B++ = A[2*j + 1];
 
-define void @rdiv0(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv0(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -27,8 +27,8 @@ for.body:                                         ; preds = %entry, %for.body
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %i.03, 2
   %add = add nsw i64 %mul, 10
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc, 10
   br i1 %exitcond5, label %for.body, label %for.body4.preheader
@@ -38,13 +38,13 @@ for.body4.preheader:                              ; preds = %for.body
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.02 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
   %mul5 = shl nsw i64 %j.02, 1
   %add64 = or i64 %mul5, 1
-  %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add64
-  %0 = load i32, i32* %arrayidx7, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add64
+  %0 = load i32, ptr %arrayidx7, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc9 = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc9, 10
   br i1 %exitcond, label %for.body4, label %for.end10
@@ -59,7 +59,7 @@ for.end10:                                        ; preds = %for.body4
 ;;  for (long int j = 0; j < 10; j++)
 ;;    *B++ = A[j];
 
-define void @rdiv1(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv1(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -75,8 +75,8 @@ for.body:                                         ; preds = %entry, %for.body
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, 11
   %sub = add nsw i64 %mul, -45
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond4 = icmp ne i64 %inc, 5
   br i1 %exitcond4, label %for.body, label %for.body4.preheader
@@ -86,11 +86,11 @@ for.body4.preheader:                              ; preds = %for.body
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc7 = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc7, 10
   br i1 %exitcond, label %for.body4, label %for.end8
@@ -105,7 +105,7 @@ for.end8:                                         ; preds = %for.body4
 ;;  for (long int j = 0; j < 10; j++)
 ;;    *B++ = A[j];
 
-define void @rdiv2(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv2(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -121,8 +121,8 @@ for.body:                                         ; preds = %entry, %for.body
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, 11
   %sub = add nsw i64 %mul, -45
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond4 = icmp ne i64 %inc, 6
   br i1 %exitcond4, label %for.body, label %for.body4.preheader
@@ -132,11 +132,11 @@ for.body4.preheader:                              ; preds = %for.body
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc7 = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc7, 10
   br i1 %exitcond, label %for.body4, label %for.end8
@@ -151,7 +151,7 @@ for.end8:                                         ; preds = %for.body4
 ;;  for (long int j = 0; j <= 10; j++)
 ;;    *B++ = A[j];
 
-define void @rdiv3(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv3(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -167,8 +167,8 @@ for.body:                                         ; preds = %entry, %for.body
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, 11
   %sub = add nsw i64 %mul, -45
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond4 = icmp ne i64 %inc, 5
   br i1 %exitcond4, label %for.body, label %for.body4.preheader
@@ -178,11 +178,11 @@ for.body4.preheader:                              ; preds = %for.body
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc7 = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc7, 11
   br i1 %exitcond, label %for.body4, label %for.end8
@@ -197,7 +197,7 @@ for.end8:                                         ; preds = %for.body4
 ;;  for (long int j = 0; j <= 10; j++)
 ;;    *B++ = A[j];
 
-define void @rdiv4(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv4(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -213,8 +213,8 @@ for.body:                                         ; preds = %entry, %for.body
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, 11
   %sub = add nsw i64 %mul, -45
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond4 = icmp ne i64 %inc, 6
   br i1 %exitcond4, label %for.body, label %for.body4.preheader
@@ -224,11 +224,11 @@ for.body4.preheader:                              ; preds = %for.body
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc7 = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc7, 11
   br i1 %exitcond, label %for.body4, label %for.end8
@@ -243,7 +243,7 @@ for.end8:                                         ; preds = %for.body4
 ;;  for (long int j = 0; j < 10; j++)
 ;;    *B++ = A[-j];
 
-define void @rdiv5(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv5(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -259,8 +259,8 @@ for.body:                                         ; preds = %entry, %for.body
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, -11
   %add = add nsw i64 %mul, 45
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond4 = icmp ne i64 %inc, 5
   br i1 %exitcond4, label %for.body, label %for.body4.preheader
@@ -270,12 +270,12 @@ for.body4.preheader:                              ; preds = %for.body
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
   %sub = sub nsw i64 0, %j.02
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc7 = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc7, 10
   br i1 %exitcond, label %for.body4, label %for.end8
@@ -290,7 +290,7 @@ for.end8:                                         ; preds = %for.body4
 ;;  for (long int j = 0; j < 10; j++)
 ;;    *B++ = A[-j];
 
-define void @rdiv6(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv6(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -306,8 +306,8 @@ for.body:                                         ; preds = %entry, %for.body
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, -11
   %add = add nsw i64 %mul, 45
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond4 = icmp ne i64 %inc, 6
   br i1 %exitcond4, label %for.body, label %for.body4.preheader
@@ -317,12 +317,12 @@ for.body4.preheader:                              ; preds = %for.body
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
   %sub = sub nsw i64 0, %j.02
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc7 = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc7, 10
   br i1 %exitcond, label %for.body4, label %for.end8
@@ -337,7 +337,7 @@ for.end8:                                         ; preds = %for.body4
 ;;  for (long int j = 0; j <= 10; j++)
 ;;    *B++ = A[-j];
 
-define void @rdiv7(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv7(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -353,8 +353,8 @@ for.body:                                         ; preds = %entry, %for.body
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, -11
   %add = add nsw i64 %mul, 45
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond4 = icmp ne i64 %inc, 5
   br i1 %exitcond4, label %for.body, label %for.body4.preheader
@@ -364,12 +364,12 @@ for.body4.preheader:                              ; preds = %for.body
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
   %sub = sub nsw i64 0, %j.02
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc7 = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc7, 11
   br i1 %exitcond, label %for.body4, label %for.end8
@@ -384,7 +384,7 @@ for.end8:                                         ; preds = %for.body4
 ;;  for (long int j = 0; j <= 10; j++)
 ;;    *B++ = A[-j];
 
-define void @rdiv8(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv8(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -400,8 +400,8 @@ for.body:                                         ; preds = %entry, %for.body
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, -11
   %add = add nsw i64 %mul, 45
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond4 = icmp ne i64 %inc, 6
   br i1 %exitcond4, label %for.body, label %for.body4.preheader
@@ -411,12 +411,12 @@ for.body4.preheader:                              ; preds = %for.body
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
   %sub = sub nsw i64 0, %j.02
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc7 = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc7, 11
   br i1 %exitcond, label %for.body4, label %for.end8
@@ -431,7 +431,7 @@ for.end8:                                         ; preds = %for.body4
 ;;      A[11*i - j] = i;
 ;;      *B++ = A[45];
 
-define void @rdiv9(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv9(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -443,28 +443,28 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc5
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, 11
   %sub = sub nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body3, label %for.inc5
 
 for.inc5:                                         ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 10
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 10
   %inc6 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc6, 5
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
@@ -480,7 +480,7 @@ for.end7:                                         ; preds = %for.inc5
 ;;      A[11*i - j] = i;
 ;;      *B++ = A[45];
 
-define void @rdiv10(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv10(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -492,28 +492,28 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc5
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, 11
   %sub = sub nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body3, label %for.inc5
 
 for.inc5:                                         ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 10
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 10
   %inc6 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc6, 6
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
@@ -528,7 +528,7 @@ for.end7:                                         ; preds = %for.inc5
 ;;      A[11*i - j] = i;
 ;;      *B++ = A[45];
 
-define void @rdiv11(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv11(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -540,28 +540,28 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc5
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, 11
   %sub = sub nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 11
   br i1 %exitcond, label %for.body3, label %for.inc5
 
 for.inc5:                                         ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 11
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 11
   %inc6 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc6, 5
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
@@ -576,7 +576,7 @@ for.end7:                                         ; preds = %for.inc5
 ;;      A[11*i - j] = i;
 ;;      *B++ = A[45];
 
-define void @rdiv12(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @rdiv12(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -588,28 +588,28 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc5
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, 11
   %sub = sub nsw i64 %mul, %j.02
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 11
   br i1 %exitcond, label %for.body3, label %for.inc5
 
 for.inc5:                                         ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 11
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 11
   %inc6 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc6, 6
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7

diff  --git a/llvm/test/Analysis/DependenceAnalysis/ExactSIV.ll b/llvm/test/Analysis/DependenceAnalysis/ExactSIV.ll
index ec850e15f6db7..9a76154ce4e5c 100644
--- a/llvm/test/Analysis/DependenceAnalysis/ExactSIV.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/ExactSIV.ll
@@ -9,7 +9,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;    A[i + 10] = i;
 ;;    *B++ = A[2*i + 1];
 
-define void @exact0(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact0(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -23,17 +23,17 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %add = add i64 %i.02, 10
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul = shl i64 %i.02, 1
   %add13 = or i64 %mul, 1
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add13
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %add13
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body, label %for.end
@@ -47,7 +47,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[4*i + 10] = i;
 ;;    *B++ = A[2*i + 1];
 
-define void @exact1(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact1(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -61,18 +61,18 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = shl i64 %i.02, 2
   %add = add i64 %mul, 10
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul1 = shl i64 %i.02, 1
   %add23 = or i64 %mul1, 1
-  %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %add23
-  %0 = load i32, i32* %arrayidx3, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %add23
+  %0 = load i32, ptr %arrayidx3, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body, label %for.end
@@ -86,7 +86,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[6*i] = i;
 ;;    *B++ = A[i + 60];
 
-define void @exact2(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact2(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -100,16 +100,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, 6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %add = add i64 %i.02, 60
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body, label %for.end
@@ -123,7 +123,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[6*i] = i;
 ;;    *B++ = A[i + 60];
 
-define void @exact3(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact3(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -137,16 +137,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, 6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %add = add i64 %i.02, 60
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 11
   br i1 %exitcond, label %for.body, label %for.end
@@ -160,7 +160,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[6*i] = i;
 ;;    *B++ = A[i + 60];
 
-define void @exact4(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact4(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -174,16 +174,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, 6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %add = add i64 %i.02, 60
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 12
   br i1 %exitcond, label %for.body, label %for.end
@@ -197,7 +197,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[6*i] = i;
 ;;    *B++ = A[i + 60];
 
-define void @exact5(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact5(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -211,16 +211,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, 6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %add = add i64 %i.02, 60
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 13
   br i1 %exitcond, label %for.body, label %for.end
@@ -234,7 +234,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[6*i] = i;
 ;;    *B++ = A[i + 60];
 
-define void @exact6(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact6(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -248,16 +248,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, 6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %add = add i64 %i.02, 60
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 18
   br i1 %exitcond, label %for.body, label %for.end
@@ -271,7 +271,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[6*i] = i;
 ;;    *B++ = A[i + 60];
 
-define void @exact7(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact7(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -285,16 +285,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, 6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %add = add i64 %i.02, 60
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 19
   br i1 %exitcond, label %for.body, label %for.end
@@ -308,7 +308,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[-6*i] = i;
 ;;    *B++ = A[-i - 60];
 
-define void @exact8(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact8(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -322,16 +322,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, -6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %sub1 = sub i64 -60, %i.02
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body, label %for.end
@@ -345,7 +345,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[-6*i] = i;
 ;;    *B++ = A[-i - 60];
 
-define void @exact9(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact9(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -359,16 +359,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, -6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %sub1 = sub i64 -60, %i.02
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 11
   br i1 %exitcond, label %for.body, label %for.end
@@ -382,7 +382,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[-6*i] = i;
 ;;    *B++ = A[-i - 60];
 
-define void @exact10(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact10(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -396,16 +396,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, -6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %sub1 = sub i64 -60, %i.02
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 12
   br i1 %exitcond, label %for.body, label %for.end
@@ -419,7 +419,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[-6*i] = i;
 ;;    *B++ = A[-i - 60];
 
-define void @exact11(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact11(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -433,16 +433,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, -6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %sub1 = sub i64 -60, %i.02
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 13
   br i1 %exitcond, label %for.body, label %for.end
@@ -456,7 +456,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[-6*i] = i;
 ;;    *B++ = A[-i - 60];
 
-define void @exact12(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact12(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -470,16 +470,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, -6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %sub1 = sub i64 -60, %i.02
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 18
   br i1 %exitcond, label %for.body, label %for.end
@@ -493,7 +493,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[-6*i] = i;
 ;;    *B++ = A[-i - 60];
 
-define void @exact13(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @exact13(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -507,16 +507,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, -6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %sub1 = sub i64 -60, %i.02
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 19
   br i1 %exitcond, label %for.body, label %for.end

diff  --git a/llvm/test/Analysis/DependenceAnalysis/GCD.ll b/llvm/test/Analysis/DependenceAnalysis/GCD.ll
index 2a9a5672487e3..898158d983b26 100644
--- a/llvm/test/Analysis/DependenceAnalysis/GCD.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/GCD.ll
@@ -6,11 +6,12 @@ target triple = "x86_64-apple-macosx10.6.0"
 
 
 ;;  for (long int i = 0; i < 100; i++)
+;;    for (long int j = 0; j ptr|<]!
 ;;    for (long int j = 0; j < 100; j++) {
 ;;      A[2*i - 4*j] = i;
 ;;      *B++ = A[6*i + 8*j];
 
-define void @gcd0(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @gcd0(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -23,32 +24,32 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc8
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc8 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %i.03, 1
   %mul4 = shl nsw i64 %j.02, 2
   %sub = sub nsw i64 %mul, %mul4
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
   %mul5 = mul nsw i64 %i.03, 6
   %mul6 = shl nsw i64 %j.02, 3
   %add = add nsw i64 %mul5, %mul6
-  %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx7, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx7, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc8
 
 for.inc8:                                         ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc9 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc9, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
@@ -63,7 +64,7 @@ for.end10:                                        ; preds = %for.inc8
 ;;      A[2*i - 4*j] = i;
 ;;      *B++ = A[6*i + 8*j + 1];
 
-define void @gcd1(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @gcd1(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -76,33 +77,33 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc9
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc9 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %i.03, 1
   %mul4 = shl nsw i64 %j.02, 2
   %sub = sub nsw i64 %mul, %mul4
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
   %mul5 = mul nsw i64 %i.03, 6
   %mul6 = shl nsw i64 %j.02, 3
   %add = add nsw i64 %mul5, %mul6
   %add7 = or i64 %add, 1
-  %arrayidx8 = getelementptr inbounds i32, i32* %A, i64 %add7
-  %0 = load i32, i32* %arrayidx8, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx8 = getelementptr inbounds i32, ptr %A, i64 %add7
+  %0 = load i32, ptr %arrayidx8, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc9
 
 for.inc9:                                         ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc10 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc10, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end11
@@ -117,7 +118,7 @@ for.end11:                                        ; preds = %for.inc9
 ;;      A[2*i - 4*j + 1] = i;
 ;;      *B++ = A[6*i + 8*j];
 
-define void @gcd2(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @gcd2(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -130,33 +131,33 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc9
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc9 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %i.03, 1
   %mul4 = shl nsw i64 %j.02, 2
   %sub = sub nsw i64 %mul, %mul4
   %add5 = or i64 %sub, 1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add5
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add5
+  store i32 %conv, ptr %arrayidx, align 4
   %mul5 = mul nsw i64 %i.03, 6
   %mul6 = shl nsw i64 %j.02, 3
   %add7 = add nsw i64 %mul5, %mul6
-  %arrayidx8 = getelementptr inbounds i32, i32* %A, i64 %add7
-  %0 = load i32, i32* %arrayidx8, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx8 = getelementptr inbounds i32, ptr %A, i64 %add7
+  %0 = load i32, ptr %arrayidx8, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc9
 
 for.inc9:                                         ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc10 = add nsw i64 %i.03, 1
   %exitcond6 = icmp ne i64 %inc10, 100
   br i1 %exitcond6, label %for.cond1.preheader, label %for.end11
@@ -171,7 +172,7 @@ for.end11:                                        ; preds = %for.inc9
 ;;      A[i + 2*j] = i;
 ;;      *B++ = A[i + 2*j - 1];
 
-define void @gcd3(i32* %A, i32* %B) nounwind uwtable ssp {
+define void @gcd3(ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -184,31 +185,31 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc7
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc7 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %j.02, 1
   %add = add nsw i64 %i.03, %mul
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul4 = shl nsw i64 %j.02, 1
   %add5 = add nsw i64 %i.03, %mul4
   %sub = add nsw i64 %add5, -1
-  %arrayidx6 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx6, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx6 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx6, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc7
 
 for.inc7:                                         ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc8 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc8, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
@@ -223,7 +224,7 @@ for.end9:                                         ; preds = %for.inc7
 ;;      A[5*i + 10*j*M + 9*M*N] = i;
 ;;      *B++ = A[15*i + 20*j*M - 21*N*M + 4];
 
-define void @gcd4(i32* %A, i32* %B, i64 %M, i64 %N) nounwind uwtable ssp {
+define void @gcd4(ptr %A, ptr %B, i64 %M, i64 %N) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -236,13 +237,13 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc17
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc17 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc17 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc18, %for.inc17 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, 5
   %mul4 = mul nsw i64 %j.02, 10
@@ -251,8 +252,8 @@ for.body3:                                        ; preds = %for.cond1.preheader
   %mul6 = mul nsw i64 %M, 9
   %mul7 = mul nsw i64 %mul6, %N
   %add8 = add nsw i64 %add, %mul7
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add8
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add8
+  store i32 %conv, ptr %arrayidx, align 4
   %mul9 = mul nsw i64 %i.03, 15
   %mul10 = mul nsw i64 %j.02, 20
   %mul11 = mul nsw i64 %mul10, %M
@@ -261,16 +262,16 @@ for.body3:                                        ; preds = %for.cond1.preheader
   %mul14 = mul nsw i64 %mul13, %M
   %sub = sub nsw i64 %add12, %mul14
   %add15 = add nsw i64 %sub, 4
-  %arrayidx16 = getelementptr inbounds i32, i32* %A, i64 %add15
-  %0 = load i32, i32* %arrayidx16, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx16 = getelementptr inbounds i32, ptr %A, i64 %add15
+  %0 = load i32, ptr %arrayidx16, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc17
 
 for.inc17:                                        ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc18 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc18, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end19
@@ -285,7 +286,7 @@ for.end19:                                        ; preds = %for.inc17
 ;;      A[5*i + 10*j*M + 9*M*N] = i;
 ;;      *B++ = A[15*i + 20*j*M - 21*N*M + 5];
 
-define void @gcd5(i32* %A, i32* %B, i64 %M, i64 %N) nounwind uwtable ssp {
+define void @gcd5(ptr %A, ptr %B, i64 %M, i64 %N) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -298,13 +299,13 @@ entry:
 ; DELIN: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc17
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc17 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc17 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc18, %for.inc17 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, 5
   %mul4 = mul nsw i64 %j.02, 10
@@ -313,8 +314,8 @@ for.body3:                                        ; preds = %for.cond1.preheader
   %mul6 = mul nsw i64 %M, 9
   %mul7 = mul nsw i64 %mul6, %N
   %add8 = add nsw i64 %add, %mul7
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add8
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add8
+  store i32 %conv, ptr %arrayidx, align 4
   %mul9 = mul nsw i64 %i.03, 15
   %mul10 = mul nsw i64 %j.02, 20
   %mul11 = mul nsw i64 %mul10, %M
@@ -323,16 +324,16 @@ for.body3:                                        ; preds = %for.cond1.preheader
   %mul14 = mul nsw i64 %mul13, %M
   %sub = sub nsw i64 %add12, %mul14
   %add15 = add nsw i64 %sub, 5
-  %arrayidx16 = getelementptr inbounds i32, i32* %A, i64 %add15
-  %0 = load i32, i32* %arrayidx16, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx16 = getelementptr inbounds i32, ptr %A, i64 %add15
+  %0 = load i32, ptr %arrayidx16, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc17
 
 for.inc17:                                        ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc18 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc18, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end19
@@ -347,7 +348,7 @@ for.end19:                                        ; preds = %for.inc17
 ;;      A[2*i][4*j] = i;
 ;;      *B++ = A[8*i][6*j + 1];
 
-define void @gcd6(i64 %n, i32* %A, i32* %B) nounwind uwtable ssp {
+define void @gcd6(i64 %n, ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   %cmp4 = icmp sgt i64 %n, 0
   br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end12
@@ -365,7 +366,7 @@ for.cond1.preheader.preheader:                    ; preds = %entry
 
 for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc10
   %i.06 = phi i64 [ %inc11, %for.inc10 ], [ 0, %for.cond1.preheader.preheader ]
-  %B.addr.05 = phi i32* [ %B.addr.1.lcssa, %for.inc10 ], [ %B, %for.cond1.preheader.preheader ]
+  %B.addr.05 = phi ptr [ %B.addr.1.lcssa, %for.inc10 ], [ %B, %for.cond1.preheader.preheader ]
   %cmp21 = icmp sgt i64 %n, 0
   br i1 %cmp21, label %for.body3.preheader, label %for.inc10
 
@@ -374,33 +375,33 @@ for.body3.preheader:                              ; preds = %for.cond1.preheader
 
 for.body3:                                        ; preds = %for.body3.preheader, %for.body3
   %j.03 = phi i64 [ %inc, %for.body3 ], [ 0, %for.body3.preheader ]
-  %B.addr.12 = phi i32* [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
+  %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
   %conv = trunc i64 %i.06 to i32
   %mul = shl nsw i64 %j.03, 2
   %mul4 = shl nsw i64 %i.06, 1
   %0 = mul nsw i64 %mul4, %n
   %arrayidx.sum = add i64 %0, %mul
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %arrayidx.sum
-  store i32 %conv, i32* %arrayidx5, align 4
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %arrayidx.sum
+  store i32 %conv, ptr %arrayidx5, align 4
   %mul6 = mul nsw i64 %j.03, 6
   %add7 = or i64 %mul6, 1
   %mul7 = shl nsw i64 %i.06, 3
   %1 = mul nsw i64 %mul7, %n
   %arrayidx8.sum = add i64 %1, %add7
-  %arrayidx9 = getelementptr inbounds i32, i32* %A, i64 %arrayidx8.sum
-  %2 = load i32, i32* %arrayidx9, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.12, i64 1
-  store i32 %2, i32* %B.addr.12, align 4
+  %arrayidx9 = getelementptr inbounds i32, ptr %A, i64 %arrayidx8.sum
+  %2 = load i32, ptr %arrayidx9, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.12, i64 1
+  store i32 %2, ptr %B.addr.12, align 4
   %inc = add nsw i64 %j.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body3, label %for.inc10.loopexit
 
 for.inc10.loopexit:                               ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.05, i64 %n
+  %scevgep = getelementptr i32, ptr %B.addr.05, i64 %n
   br label %for.inc10
 
 for.inc10:                                        ; preds = %for.inc10.loopexit, %for.cond1.preheader
-  %B.addr.1.lcssa = phi i32* [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc10.loopexit ]
+  %B.addr.1.lcssa = phi ptr [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc10.loopexit ]
   %inc11 = add nsw i64 %i.06, 1
   %exitcond8 = icmp ne i64 %inc11, %n
   br i1 %exitcond8, label %for.cond1.preheader, label %for.end12.loopexit
@@ -418,7 +419,7 @@ for.end12:                                        ; preds = %for.end12.loopexit,
 ;;    A[2*i][4*j] = i;
 ;;   *B++ = A[8*i][6*j + 1];
 
-define void @gcd7(i32 %n, i32* %A, i32* %B) nounwind uwtable ssp {
+define void @gcd7(i32 %n, ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   %0 = zext i32 %n to i64
   %cmp4 = icmp sgt i32 %n, 0
@@ -437,7 +438,7 @@ for.cond1.preheader.preheader:                    ; preds = %entry
 
 for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc13
   %indvars.iv8 = phi i64 [ 0, %for.cond1.preheader.preheader ], [ %indvars.iv.next9, %for.inc13 ]
-  %B.addr.05 = phi i32* [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]
+  %B.addr.05 = phi ptr [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]
   %1 = add i32 %n, -1
   %2 = zext i32 %1 to i64
   %3 = add i64 %2, 1
@@ -449,7 +450,7 @@ for.body3.preheader:                              ; preds = %for.cond1.preheader
 
 for.body3:                                        ; preds = %for.body3.preheader, %for.body3
   %indvars.iv = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next, %for.body3 ]
-  %B.addr.12 = phi i32* [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
+  %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
   %4 = trunc i64 %indvars.iv to i32
   %mul = shl nsw i32 %4, 2
   %idxprom = sext i32 %mul to i64
@@ -458,9 +459,9 @@ for.body3:                                        ; preds = %for.body3.preheader
   %idxprom5 = sext i32 %mul4 to i64
   %6 = mul nsw i64 %idxprom5, %0
   %arrayidx.sum = add i64 %6, %idxprom
-  %arrayidx6 = getelementptr inbounds i32, i32* %A, i64 %arrayidx.sum
+  %arrayidx6 = getelementptr inbounds i32, ptr %A, i64 %arrayidx.sum
   %7 = trunc i64 %indvars.iv8 to i32
-  store i32 %7, i32* %arrayidx6, align 4
+  store i32 %7, ptr %arrayidx6, align 4
   %8 = trunc i64 %indvars.iv to i32
   %mul7 = mul nsw i32 %8, 6
   %add7 = or i32 %mul7, 1
@@ -470,21 +471,21 @@ for.body3:                                        ; preds = %for.body3.preheader
   %idxprom10 = sext i32 %mul9 to i64
   %10 = mul nsw i64 %idxprom10, %0
   %arrayidx11.sum = add i64 %10, %idxprom8
-  %arrayidx12 = getelementptr inbounds i32, i32* %A, i64 %arrayidx11.sum
-  %11 = load i32, i32* %arrayidx12, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.12, i64 1
-  store i32 %11, i32* %B.addr.12, align 4
+  %arrayidx12 = getelementptr inbounds i32, ptr %A, i64 %arrayidx11.sum
+  %11 = load i32, ptr %arrayidx12, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.12, i64 1
+  store i32 %11, ptr %B.addr.12, align 4
   %indvars.iv.next = add i64 %indvars.iv, 1
   %lftr.wideiv = trunc i64 %indvars.iv.next to i32
   %exitcond = icmp ne i32 %lftr.wideiv, %n
   br i1 %exitcond, label %for.body3, label %for.inc13.loopexit
 
 for.inc13.loopexit:                               ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.05, i64 %3
+  %scevgep = getelementptr i32, ptr %B.addr.05, i64 %3
   br label %for.inc13
 
 for.inc13:                                        ; preds = %for.inc13.loopexit, %for.cond1.preheader
-  %B.addr.1.lcssa = phi i32* [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]
+  %B.addr.1.lcssa = phi ptr [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]
   %indvars.iv.next9 = add i64 %indvars.iv8, 1
   %lftr.wideiv10 = trunc i64 %indvars.iv.next9 to i32
   %exitcond11 = icmp ne i32 %lftr.wideiv10, %n
@@ -503,7 +504,7 @@ for.end15:                                        ; preds = %for.end15.loopexit,
 ;;      A[n*2*i + 4*j] = i;
 ;;      *B++ = A[n*8*i + 6*j + 1];
 
-define void @gcd8(i32 %n, i32* %A, i32* %B) nounwind uwtable ssp {
+define void @gcd8(i32 %n, ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   %cmp4 = icmp sgt i32 %n, 0
   br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end15
@@ -521,7 +522,7 @@ for.cond1.preheader.preheader:                    ; preds = %entry
 
 for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc13
   %i.06 = phi i32 [ %inc14, %for.inc13 ], [ 0, %for.cond1.preheader.preheader ]
-  %B.addr.05 = phi i32* [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]
+  %B.addr.05 = phi ptr [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]
   %0 = add i32 %n, -1
   %1 = zext i32 %0 to i64
   %2 = add i64 %1, 1
@@ -533,15 +534,15 @@ for.body3.preheader:                              ; preds = %for.cond1.preheader
 
 for.body3:                                        ; preds = %for.body3.preheader, %for.body3
   %indvars.iv = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next, %for.body3 ]
-  %B.addr.12 = phi i32* [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
+  %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
   %mul = shl nsw i32 %n, 1
   %mul4 = mul nsw i32 %mul, %i.06
   %3 = trunc i64 %indvars.iv to i32
   %mul5 = shl nsw i32 %3, 2
   %add = add nsw i32 %mul4, %mul5
   %idxprom = sext i32 %add to i64
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom
-  store i32 %i.06, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %idxprom
+  store i32 %i.06, ptr %arrayidx, align 4
   %mul6 = shl nsw i32 %n, 3
   %mul7 = mul nsw i32 %mul6, %i.06
   %4 = trunc i64 %indvars.iv to i32
@@ -549,21 +550,21 @@ for.body3:                                        ; preds = %for.body3.preheader
   %add9 = add nsw i32 %mul7, %mul8
   %add10 = or i32 %add9, 1
   %idxprom11 = sext i32 %add10 to i64
-  %arrayidx12 = getelementptr inbounds i32, i32* %A, i64 %idxprom11
-  %5 = load i32, i32* %arrayidx12, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.12, i64 1
-  store i32 %5, i32* %B.addr.12, align 4
+  %arrayidx12 = getelementptr inbounds i32, ptr %A, i64 %idxprom11
+  %5 = load i32, ptr %arrayidx12, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.12, i64 1
+  store i32 %5, ptr %B.addr.12, align 4
   %indvars.iv.next = add i64 %indvars.iv, 1
   %lftr.wideiv = trunc i64 %indvars.iv.next to i32
   %exitcond = icmp ne i32 %lftr.wideiv, %n
   br i1 %exitcond, label %for.body3, label %for.inc13.loopexit
 
 for.inc13.loopexit:                               ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.05, i64 %2
+  %scevgep = getelementptr i32, ptr %B.addr.05, i64 %2
   br label %for.inc13
 
 for.inc13:                                        ; preds = %for.inc13.loopexit, %for.cond1.preheader
-  %B.addr.1.lcssa = phi i32* [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]
+  %B.addr.1.lcssa = phi ptr [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]
   %inc14 = add nsw i32 %i.06, 1
   %exitcond7 = icmp ne i32 %inc14, %n
   br i1 %exitcond7, label %for.cond1.preheader, label %for.end15.loopexit
@@ -581,7 +582,7 @@ for.end15:                                        ; preds = %for.end15.loopexit,
 ;;      A[2*i][4*j] = i;
 ;;      *B++ = A[8*i][6*j + 1];
 
-define void @gcd9(i32 %n, i32* %A, i32* %B) nounwind uwtable ssp {
+define void @gcd9(i32 %n, ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   %0 = zext i32 %n to i64
   %cmp4 = icmp eq i32 %n, 0
@@ -600,7 +601,7 @@ for.cond1.preheader.preheader:                    ; preds = %entry
 
 for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc13
   %indvars.iv8 = phi i64 [ 0, %for.cond1.preheader.preheader ], [ %indvars.iv.next9, %for.inc13 ]
-  %B.addr.05 = phi i32* [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]
+  %B.addr.05 = phi ptr [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]
   %1 = add i32 %n, -1
   %2 = zext i32 %1 to i64
   %3 = add i64 %2, 1
@@ -612,7 +613,7 @@ for.body3.preheader:                              ; preds = %for.cond1.preheader
 
 for.body3:                                        ; preds = %for.body3.preheader, %for.body3
   %indvars.iv = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next, %for.body3 ]
-  %B.addr.12 = phi i32* [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
+  %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
   %4 = trunc i64 %indvars.iv to i32
   %mul = shl i32 %4, 2
   %idxprom = zext i32 %mul to i64
@@ -621,9 +622,9 @@ for.body3:                                        ; preds = %for.body3.preheader
   %idxprom5 = zext i32 %mul4 to i64
   %6 = mul nsw i64 %idxprom5, %0
   %arrayidx.sum = add i64 %6, %idxprom
-  %arrayidx6 = getelementptr inbounds i32, i32* %A, i64 %arrayidx.sum
+  %arrayidx6 = getelementptr inbounds i32, ptr %A, i64 %arrayidx.sum
   %7 = trunc i64 %indvars.iv8 to i32
-  store i32 %7, i32* %arrayidx6, align 4
+  store i32 %7, ptr %arrayidx6, align 4
   %8 = trunc i64 %indvars.iv to i32
   %mul7 = mul i32 %8, 6
   %add7 = or i32 %mul7, 1
@@ -633,21 +634,21 @@ for.body3:                                        ; preds = %for.body3.preheader
   %idxprom10 = zext i32 %mul9 to i64
   %10 = mul nsw i64 %idxprom10, %0
   %arrayidx11.sum = add i64 %10, %idxprom8
-  %arrayidx12 = getelementptr inbounds i32, i32* %A, i64 %arrayidx11.sum
-  %11 = load i32, i32* %arrayidx12, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.12, i64 1
-  store i32 %11, i32* %B.addr.12, align 4
+  %arrayidx12 = getelementptr inbounds i32, ptr %A, i64 %arrayidx11.sum
+  %11 = load i32, ptr %arrayidx12, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.12, i64 1
+  store i32 %11, ptr %B.addr.12, align 4
   %indvars.iv.next = add i64 %indvars.iv, 1
   %lftr.wideiv = trunc i64 %indvars.iv.next to i32
   %exitcond = icmp ne i32 %lftr.wideiv, %n
   br i1 %exitcond, label %for.body3, label %for.inc13.loopexit
 
 for.inc13.loopexit:                               ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.05, i64 %3
+  %scevgep = getelementptr i32, ptr %B.addr.05, i64 %3
   br label %for.inc13
 
 for.inc13:                                        ; preds = %for.inc13.loopexit, %for.cond1.preheader
-  %B.addr.1.lcssa = phi i32* [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]
+  %B.addr.1.lcssa = phi ptr [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]
   %indvars.iv.next9 = add i64 %indvars.iv8, 1
   %lftr.wideiv10 = trunc i64 %indvars.iv.next9 to i32
   %exitcond11 = icmp ne i32 %lftr.wideiv10, %n

diff  --git a/llvm/test/Analysis/DependenceAnalysis/Invariant.ll b/llvm/test/Analysis/DependenceAnalysis/Invariant.ll
index 40594d1b3dbbc..40fe0de0e2350 100644
--- a/llvm/test/Analysis/DependenceAnalysis/Invariant.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/Invariant.ll
@@ -4,7 +4,7 @@
 ; Test for a bug, which caused an assert when an invalid
 ; SCEVAddRecExpr is created in addToCoefficient.
 
-; float foo (float g, float* rr[40]) {
+; float foo (float g, ptr rr[40]) {
 ;   float res= 0.0f;
 ;   for (int i = 0; i < 40; i += 5) {
 ;     for (int j = 0; j < 40; j += 5) {
@@ -20,7 +20,7 @@
 ; CHECK: da analyze - input [* 0|<]!
 ; CHECK: da analyze - none!
 
-define float @foo(float %g, [40 x float]* %rr) nounwind {
+define float @foo(float %g, ptr %rr) nounwind {
 entry:
   br label %for.cond1.preheader
 
@@ -32,10 +32,10 @@ for.cond1.preheader:
 for.body3:
   %j.02 = phi i32 [ 0, %for.cond1.preheader ], [ %add8, %for.body3 ]
   %res.11 = phi float [ %res.03, %for.cond1.preheader ], [ %add.res.1, %for.body3 ]
-  %arrayidx4 = getelementptr inbounds [40 x float], [40 x float]* %rr, i32 %j.02, i32 %j.02
-  %0 = load float, float* %arrayidx4, align 4
-  %arrayidx6 = getelementptr inbounds [40 x float], [40 x float]* %rr, i32 %i.04, i32 %j.02
-  %1 = load float, float* %arrayidx6, align 4
+  %arrayidx4 = getelementptr inbounds [40 x float], ptr %rr, i32 %j.02, i32 %j.02
+  %0 = load float, ptr %arrayidx4, align 4
+  %arrayidx6 = getelementptr inbounds [40 x float], ptr %rr, i32 %i.04, i32 %j.02
+  %1 = load float, ptr %arrayidx6, align 4
   %add = fadd float %0, %1
   %cmp7 = fcmp ogt float %add, %g
   %add.res.1 = select i1 %cmp7, float %add, float %res.11

diff  --git a/llvm/test/Analysis/DependenceAnalysis/MIVCheckConst.ll b/llvm/test/Analysis/DependenceAnalysis/MIVCheckConst.ll
index d511911f39bd2..baa623d4b9554 100644
--- a/llvm/test/Analysis/DependenceAnalysis/MIVCheckConst.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/MIVCheckConst.ll
@@ -29,9 +29,9 @@ target datalayout = "e-m:e-p:32:32-i1:32-i64:64-a:0-v32:32-n16:32"
 %20 = type { [768 x i32] }
 %21 = type { [416 x i32] }
 
-define void @test(%1* %A) #0 align 2 {
+define void @test(ptr %A) #0 align 2 {
 entry:
-  %v1 = load i32, i32* undef, align 4
+  %v1 = load i32, ptr undef, align 4
   br label %bb13
 
 bb13:
@@ -49,14 +49,12 @@ bb21:
   %v22 = add nsw i32 undef, 1
   %v23 = add i32 %v22, %v3
   %v24 = mul nsw i32 %v23, %v1
-  %v25 = getelementptr inbounds %1, %1* %A, i32 0, i32 7, i32 1, i32 %v24
-  %v26 = bitcast %0* %v25 to <32 x i32>*
-  %v27 = load <32 x i32>, <32 x i32>* %v26, align 256
+  %v25 = getelementptr inbounds %1, ptr %A, i32 0, i32 7, i32 1, i32 %v24
+  %v27 = load <32 x i32>, ptr %v25, align 256
   %v28 = add i32 undef, %v3
   %v29 = mul nsw i32 %v28, 32
-  %v30 = getelementptr inbounds %1, %1* %A, i32 0, i32 7, i32 14, i32 %v29
-  %v31 = bitcast %0* %v30 to <32 x i32>*
-  %v32 = load <32 x i32>, <32 x i32>* %v31, align 128
+  %v30 = getelementptr inbounds %1, ptr %A, i32 0, i32 7, i32 14, i32 %v29
+  %v32 = load <32 x i32>, ptr %v30, align 128
   br i1 undef, label %bb21, label %bb37
 
 bb37:

diff  --git a/llvm/test/Analysis/DependenceAnalysis/MIVMaxLevelThreshold.ll b/llvm/test/Analysis/DependenceAnalysis/MIVMaxLevelThreshold.ll
index 80d5dbd109e40..69c7def57fbd6 100644
--- a/llvm/test/Analysis/DependenceAnalysis/MIVMaxLevelThreshold.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/MIVMaxLevelThreshold.ll
@@ -16,7 +16,7 @@
 ; CHECK:       Src:  %5 = load float, float* %arrayidx12, align 4 --> Dst:  store float %add13, float* %arrayidx17, align 4
 ; CHECK-NEXT:  da analyze - none!
 
-define void @foo(float* noalias %A, float* noalias %B, i32 signext %m, i32 signext %n, i32 signext %o) {
+define void @foo(ptr noalias %A, ptr noalias %B, i32 signext %m, i32 signext %n, i32 signext %o) {
 entry:
   %cmp5 = icmp sgt i32 %n, 0
   br i1 %cmp5, label %for.body.preheader, label %for.end23
@@ -47,17 +47,17 @@ for.body8:                                        ; preds = %for.body8.preheader
   %indvars.iv = phi i64 [ 0, %for.body8.preheader ], [ %indvars.iv.next, %for.body8 ]
   %0 = sub nsw i64 %indvars.iv19, %indvars.iv12
   %1 = add nsw i64 %0, %indvars.iv
-  %arrayidx = getelementptr inbounds float, float* %A, i64 %1
-  %2 = load float, float* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds float, ptr %A, i64 %1
+  %2 = load float, ptr %arrayidx, align 4
   %3 = add nuw nsw i64 %indvars.iv19, %indvars.iv12
   %4 = add nuw nsw i64 %3, %indvars.iv
-  %arrayidx12 = getelementptr inbounds float, float* %B, i64 %4
-  %5 = load float, float* %arrayidx12, align 4
+  %arrayidx12 = getelementptr inbounds float, ptr %B, i64 %4
+  %5 = load float, ptr %arrayidx12, align 4
   %add13 = fadd fast float %2, %5
   %6 = add nuw nsw i64 %indvars.iv19, %indvars.iv12
   %7 = add nuw nsw i64 %6, %indvars.iv
-  %arrayidx17 = getelementptr inbounds float, float* %A, i64 %7
-  store float %add13, float* %arrayidx17, align 4
+  %arrayidx17 = getelementptr inbounds float, ptr %A, i64 %7
+  store float %add13, ptr %arrayidx17, align 4
   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
   %exitcond = icmp ne i64 %indvars.iv.next, %wide.trip.count
   br i1 %exitcond, label %for.body8, label %for.inc18.loopexit

diff  --git a/llvm/test/Analysis/DependenceAnalysis/NonAffineExpr.ll b/llvm/test/Analysis/DependenceAnalysis/NonAffineExpr.ll
index 10c122a31160f..b4b768b4be2ed 100644
--- a/llvm/test/Analysis/DependenceAnalysis/NonAffineExpr.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/NonAffineExpr.ll
@@ -7,7 +7,7 @@
 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n8:16:32-S64"
 target triple = "thumbv7--linux-gnueabi"
 
-define void @f(i32** %a, i32 %n) align 2 {
+define void @f(ptr %a, i32 %n) align 2 {
 for.preheader:
   %t.0 = ashr exact i32 %n, 3
   br label %for.body.1
@@ -20,9 +20,9 @@ for.body.1:
 for.body.2:
   %i.3 = phi i32 [ %t.1, %for.body.2 ], [ %i.1, %for.body.1 ]
   %t.1 = add i32 %i.3, 1
-  %t.2 = load i32*, i32** %a, align 4
-  %t.3 = getelementptr inbounds i32, i32* %t.2, i32 %i.3
-  %t.4 = load i32, i32* %t.3, align 4
+  %t.2 = load ptr, ptr %a, align 4
+  %t.3 = getelementptr inbounds i32, ptr %t.2, i32 %i.3
+  %t.4 = load i32, ptr %t.3, align 4
   br i1 undef, label %for.inc, label %for.body.2
 
 for.inc:

diff  --git a/llvm/test/Analysis/DependenceAnalysis/NonCanonicalizedSubscript.ll b/llvm/test/Analysis/DependenceAnalysis/NonCanonicalizedSubscript.ll
index 58cb67c3ccbc5..3e7905edf1603 100644
--- a/llvm/test/Analysis/DependenceAnalysis/NonCanonicalizedSubscript.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/NonCanonicalizedSubscript.ll
@@ -12,7 +12,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ; The subscript 5 in a[i][5] is deliberately an i32, mismatching the types of
 ; other subscript. DependenceAnalysis before the fix crashed due to this
 ; mismatch.
-define void @i32_subscript([100 x [100 x i32]]* %a, i32* %b) {
+define void @i32_subscript(ptr %a, ptr %b) {
 ; DELIN-LABEL: 'Dependence Analysis' for function 'i32_subscript'
 entry:
   br label %for.body
@@ -22,11 +22,11 @@ for.body:
 ; DELIN: da analyze - anti [=|<]!
 ; DELIN: da analyze - none!
   %i = phi i64 [ 0, %entry ], [ %i.inc, %for.body ]
-  %a.addr = getelementptr [100 x [100 x i32]], [100 x [100 x i32]]* %a, i64 0, i64 %i, i64 %i
-  %a.addr.2 = getelementptr [100 x [100 x i32]], [100 x [100 x i32]]* %a, i64 0, i64 %i, i32 5
-  %0 = load i32, i32* %a.addr, align 4
+  %a.addr = getelementptr [100 x [100 x i32]], ptr %a, i64 0, i64 %i, i64 %i
+  %a.addr.2 = getelementptr [100 x [100 x i32]], ptr %a, i64 0, i64 %i, i32 5
+  %0 = load i32, ptr %a.addr, align 4
   %1 = add i32 %0, 1
-  store i32 %1, i32* %a.addr.2, align 4
+  store i32 %1, ptr %a.addr.2, align 4
   %i.inc = add nsw i64 %i, 1
   %exitcond = icmp ne i64 %i.inc, 100
   br i1 %exitcond, label %for.body, label %for.end
@@ -75,11 +75,11 @@ for.body3:                                        ; preds = %for.cond1
   %sub = add nsw i32 %j.0, -1
   %idxprom = zext i32 %sub to i64
   %1 = add nuw nsw i64 %indvars.iv11, 1
-  %arrayidx5 = getelementptr inbounds [10004 x [10004 x i32]], [10004 x [10004 x i32]]* @a, i64 0, i64 %1, i64 %idxprom
-  %2 = load i32, i32* %arrayidx5, align 4
+  %arrayidx5 = getelementptr inbounds [10004 x [10004 x i32]], ptr @a, i64 0, i64 %1, i64 %idxprom
+  %2 = load i32, ptr %arrayidx5, align 4
   %add6 = add nsw i32 %2, 2
-  %arrayidx10 = getelementptr inbounds [10004 x [10004 x i32]], [10004 x [10004 x i32]]* @a, i64 0, i64 %indvars.iv11, i64 %indvars.iv8
-  store i32 %add6, i32* %arrayidx10, align 4
+  %arrayidx10 = getelementptr inbounds [10004 x [10004 x i32]], ptr @a, i64 0, i64 %indvars.iv11, i64 %indvars.iv8
+  store i32 %add6, ptr %arrayidx10, align 4
   %indvars.iv.next9 = add nuw nsw i64 %indvars.iv8, 1
   %inc = add nuw nsw i32 %j.0, 1
   br label %for.cond1

diff  --git a/llvm/test/Analysis/DependenceAnalysis/PR21585.ll b/llvm/test/Analysis/DependenceAnalysis/PR21585.ll
index 0f47682bb03d8..34c5317bce4c5 100644
--- a/llvm/test/Analysis/DependenceAnalysis/PR21585.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/PR21585.ll
@@ -1,16 +1,16 @@
 ; RUN: opt < %s -disable-output "-passes=print<da>"                            \
 ; RUN: "-aa-pipeline=basic-aa,globals-aa" 2>&1 | FileCheck %s
-define void @i32_subscript(i32* %a) {
+define void @i32_subscript(ptr %a) {
 entry:
   br label %for.body
 
 for.body:
   %i = phi i32 [ 0, %entry ], [ %i.inc, %for.body ]
-  %a.addr = getelementptr i32, i32* %a, i32 %i
-  %a.addr.2 = getelementptr i32, i32* %a, i32 5
-  %0 = load i32, i32* %a.addr, align 4
+  %a.addr = getelementptr i32, ptr %a, i32 %i
+  %a.addr.2 = getelementptr i32, ptr %a, i32 5
+  %0 = load i32, ptr %a.addr, align 4
   %1 = add i32 %0, 1
-  store i32 %1, i32* %a.addr.2, align 4
+  store i32 %1, ptr %a.addr.2, align 4
   %i.inc = add nsw i32 %i, 1
   %i.inc.ext = sext i32 %i to i64
   %exitcond = icmp ne i64 %i.inc.ext, 100
@@ -35,17 +35,17 @@ for.end:
 
 @g = common global i32 0, align 4
 
-define void @t(i32* noalias %a, i32 %n) nounwind {
+define void @t(ptr noalias %a, i32 %n) nounwind {
 entry:
   %cmp1 = icmp eq i32 %n, 0
   br i1 %cmp1, label %for.end, label %for.body
 
 for.body:
   %i.02 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
-  %0 = load i32, i32* @g, align 4
+  %0 = load i32, ptr @g, align 4
   %idxprom = and i32 %i.02, 65535
-  %arrayidx = getelementptr inbounds i32, i32* %a, i32 %idxprom
-  store i32 %0, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %idxprom
+  store i32 %0, ptr %arrayidx, align 4
   %inc = add i32 %i.02, 1
   %cmp = icmp eq i32 %inc, %n
   br i1 %cmp, label %for.end, label %for.body
@@ -57,16 +57,16 @@ for.end:
 ; CHECK: none
 ; CHECK: output
 
-define void @i16_wrap(i64* %a) {
+define void @i16_wrap(ptr %a) {
 entry:
   br label %for.body
 for.body:
   %i = phi i64 [0, %entry], [%i.inc, %for.inc]
   %i.tr = trunc i64 %i to i16
-  %idx = getelementptr i64, i64* %a, i16 %i.tr
-  %0 = load i64, i64* %idx
+  %idx = getelementptr i64, ptr %a, i16 %i.tr
+  %0 = load i64, ptr %idx
   %1 = add i64 %0, 1
-store i64 %1, i64* %idx
+store i64 %1, ptr %idx
   br label %for.inc
 
 for.inc:
@@ -80,17 +80,17 @@ for.end:
 ; CHECK: anti
 ; CHECK: output
 
-define void @i8_stride_wrap(i32* noalias %a, i32* noalias %b) {
+define void @i8_stride_wrap(ptr noalias %a, ptr noalias %b) {
 entry:
   br label %for.body
 for.body:
   %i = phi i32 [1,%entry], [%i.inc, %for.inc]
   %i.tr = trunc i32 %i to i8
-  %idx = getelementptr i32, i32* %a, i8 %i.tr
-  %idx.2 = getelementptr i32, i32* %b, i32 %i
-  %0 = load i32, i32* %idx, align 4
+  %idx = getelementptr i32, ptr %a, i8 %i.tr
+  %idx.2 = getelementptr i32, ptr %b, i32 %i
+  %0 = load i32, ptr %idx, align 4
   %1 = add i32 %0, 1
-  store i32 %1, i32* %idx.2, align 4
+  store i32 %1, ptr %idx.2, align 4
   br label %for.inc
 
 for.inc:

diff  --git a/llvm/test/Analysis/DependenceAnalysis/Preliminary.ll b/llvm/test/Analysis/DependenceAnalysis/Preliminary.ll
index 91827f3231ba4..ee0b50d479249 100644
--- a/llvm/test/Analysis/DependenceAnalysis/Preliminary.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/Preliminary.ll
@@ -9,17 +9,17 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;  A[0] = n;
 ;;  return B[1];
 
-define i32 @p0(i32 %n, i32* %A, i32* %B) nounwind uwtable ssp {
+define i32 @p0(i32 %n, ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
-  store i32 %n, i32* %A, align 4
+  store i32 %n, ptr %A, align 4
 
 ; CHECK-LABEL: p0
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - confused!
 ; CHECK: da analyze - none!
 
-  %arrayidx1 = getelementptr inbounds i32, i32* %B, i64 1
-  %0 = load i32, i32* %arrayidx1, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %B, i64 1
+  %0 = load i32, ptr %arrayidx1, align 4
   ret i32 %0
 }
 
@@ -28,17 +28,17 @@ entry:
 ;;  A[0] = n;
 ;;  return B[1];
 
-define i32 @p1(i32 %n, i32* noalias %A, i32* noalias %B) nounwind uwtable ssp {
+define i32 @p1(i32 %n, ptr noalias %A, ptr noalias %B) nounwind uwtable ssp {
 entry:
-  store i32 %n, i32* %A, align 4
+  store i32 %n, ptr %A, align 4
 
 ; CHECK-LABEL: p1
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - none!
 
-  %arrayidx1 = getelementptr inbounds i32, i32* %B, i64 1
-  %0 = load i32, i32* %arrayidx1, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %B, i64 1
+  %0 = load i32, ptr %arrayidx1, align 4
   ret i32 %0
 }
 
@@ -51,7 +51,7 @@ entry:
 ;;      for (long int k = 0; k < n; k++) {
 ;;        *B++ = A[i + 3][j + 2][k + 1];
 
-define void @p2(i64 %n, [100 x [100 x i64]]* %A, i64* %B) nounwind uwtable ssp {
+define void @p2(i64 %n, ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   %cmp10 = icmp sgt i64 %n, 0
   br i1 %cmp10, label %for.cond1.preheader.preheader, label %for.end26
@@ -68,7 +68,7 @@ for.cond1.preheader.preheader:                    ; preds = %entry
   br label %for.cond1.preheader
 
 for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc24
-  %B.addr.012 = phi i64* [ %B.addr.1.lcssa, %for.inc24 ], [ %B, %for.cond1.preheader.preheader ]
+  %B.addr.012 = phi ptr [ %B.addr.1.lcssa, %for.inc24 ], [ %B, %for.cond1.preheader.preheader ]
   %i.011 = phi i64 [ %inc25, %for.inc24 ], [ 0, %for.cond1.preheader.preheader ]
   %cmp26 = icmp sgt i64 %n, 0
   br i1 %cmp26, label %for.cond4.preheader.preheader, label %for.inc24
@@ -77,7 +77,7 @@ for.cond4.preheader.preheader:                    ; preds = %for.cond1.preheader
   br label %for.cond4.preheader
 
 for.cond4.preheader:                              ; preds = %for.cond4.preheader.preheader, %for.inc21
-  %B.addr.18 = phi i64* [ %B.addr.2.lcssa, %for.inc21 ], [ %B.addr.012, %for.cond4.preheader.preheader ]
+  %B.addr.18 = phi ptr [ %B.addr.2.lcssa, %for.inc21 ], [ %B.addr.012, %for.cond4.preheader.preheader ]
   %j.07 = phi i64 [ %inc22, %for.inc21 ], [ 0, %for.cond4.preheader.preheader ]
   %cmp51 = icmp sgt i64 %n, 0
   br i1 %cmp51, label %for.body6.preheader, label %for.cond10.loopexit
@@ -87,8 +87,8 @@ for.body6.preheader:                              ; preds = %for.cond4.preheader
 
 for.body6:                                        ; preds = %for.body6.preheader, %for.body6
   %k.02 = phi i64 [ %inc, %for.body6 ], [ 0, %for.body6.preheader ]
-  %arrayidx8 = getelementptr inbounds [100 x [100 x i64]], [100 x [100 x i64]]* %A, i64 %i.011, i64 %j.07, i64 %k.02
-  store i64 %i.011, i64* %arrayidx8, align 8
+  %arrayidx8 = getelementptr inbounds [100 x [100 x i64]], ptr %A, i64 %i.011, i64 %j.07, i64 %k.02
+  store i64 %i.011, ptr %arrayidx8, align 8
   %inc = add nsw i64 %k.02, 1
   %exitcond13 = icmp ne i64 %inc, %n
   br i1 %exitcond13, label %for.body6, label %for.cond10.loopexit.loopexit
@@ -105,34 +105,34 @@ for.body12.preheader:                             ; preds = %for.cond10.loopexit
 
 for.body12:                                       ; preds = %for.body12.preheader, %for.body12
   %k9.05 = phi i64 [ %inc19, %for.body12 ], [ 0, %for.body12.preheader ]
-  %B.addr.24 = phi i64* [ %incdec.ptr, %for.body12 ], [ %B.addr.18, %for.body12.preheader ]
+  %B.addr.24 = phi ptr [ %incdec.ptr, %for.body12 ], [ %B.addr.18, %for.body12.preheader ]
   %add = add nsw i64 %k9.05, 1
   %add13 = add nsw i64 %j.07, 2
   %add14 = add nsw i64 %i.011, 3
-  %arrayidx17 = getelementptr inbounds [100 x [100 x i64]], [100 x [100 x i64]]* %A, i64 %add14, i64 %add13, i64 %add
-  %0 = load i64, i64* %arrayidx17, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.24, i64 1
-  store i64 %0, i64* %B.addr.24, align 8
+  %arrayidx17 = getelementptr inbounds [100 x [100 x i64]], ptr %A, i64 %add14, i64 %add13, i64 %add
+  %0 = load i64, ptr %arrayidx17, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.24, i64 1
+  store i64 %0, ptr %B.addr.24, align 8
   %inc19 = add nsw i64 %k9.05, 1
   %exitcond = icmp ne i64 %inc19, %n
   br i1 %exitcond, label %for.body12, label %for.inc21.loopexit
 
 for.inc21.loopexit:                               ; preds = %for.body12
-  %scevgep = getelementptr i64, i64* %B.addr.18, i64 %n
+  %scevgep = getelementptr i64, ptr %B.addr.18, i64 %n
   br label %for.inc21
 
 for.inc21:                                        ; preds = %for.inc21.loopexit, %for.cond10.loopexit
-  %B.addr.2.lcssa = phi i64* [ %B.addr.18, %for.cond10.loopexit ], [ %scevgep, %for.inc21.loopexit ]
+  %B.addr.2.lcssa = phi ptr [ %B.addr.18, %for.cond10.loopexit ], [ %scevgep, %for.inc21.loopexit ]
   %inc22 = add nsw i64 %j.07, 1
   %exitcond14 = icmp ne i64 %inc22, %n
   br i1 %exitcond14, label %for.cond4.preheader, label %for.inc24.loopexit
 
 for.inc24.loopexit:                               ; preds = %for.inc21
-  %B.addr.2.lcssa.lcssa = phi i64* [ %B.addr.2.lcssa, %for.inc21 ]
+  %B.addr.2.lcssa.lcssa = phi ptr [ %B.addr.2.lcssa, %for.inc21 ]
   br label %for.inc24
 
 for.inc24:                                        ; preds = %for.inc24.loopexit, %for.cond1.preheader
-  %B.addr.1.lcssa = phi i64* [ %B.addr.012, %for.cond1.preheader ], [ %B.addr.2.lcssa.lcssa, %for.inc24.loopexit ]
+  %B.addr.1.lcssa = phi ptr [ %B.addr.012, %for.cond1.preheader ], [ %B.addr.2.lcssa.lcssa, %for.inc24.loopexit ]
   %inc25 = add nsw i64 %i.011, 1
   %exitcond15 = icmp ne i64 %inc25, %n
   br i1 %exitcond15, label %for.cond1.preheader, label %for.end26.loopexit
@@ -161,7 +161,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;;           A[i - 3] [j] [2] [k-1] [2*l + 1] [m] [p + q] [r + s] = i;
 ;;    *B++ = A[i + 3] [2] [u] [1-k] [3*l - 1] [o] [1 + n] [t + 2];
 
-;define void @p3(i64 %n, [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]]* %A, i64* %B) nounwind uwtable ssp {
+;define void @p3(i64 %n, ptr %A, ptr %B) nounwind uwtable ssp {
 ;entry:
 ;  %cmp44 = icmp sgt i64 %n, 0
 ;  br i1 %cmp44, label %for.cond1.preheader.preheader, label %for.end90
@@ -178,7 +178,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;  br label %for.cond1.preheader
 ;
 ;for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc88
-;  %B.addr.046 = phi i64* [ %B.addr.1.lcssa, %for.inc88 ], [ %B, %for.cond1.preheader.preheader ]
+;  %B.addr.046 = phi ptr [ %B.addr.1.lcssa, %for.inc88 ], [ %B, %for.cond1.preheader.preheader ]
 ;  %i.045 = phi i64 [ %inc89, %for.inc88 ], [ 0, %for.cond1.preheader.preheader ]
 ;  %cmp240 = icmp sgt i64 %n, 0
 ;  br i1 %cmp240, label %for.cond4.preheader.preheader, label %for.inc88
@@ -187,7 +187,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;  br label %for.cond4.preheader
 ;
 ;for.cond4.preheader:                              ; preds = %for.cond4.preheader.preheader, %for.inc85
-;  %B.addr.142 = phi i64* [ %B.addr.2.lcssa, %for.inc85 ], [ %B.addr.046, %for.cond4.preheader.preheader ]
+;  %B.addr.142 = phi ptr [ %B.addr.2.lcssa, %for.inc85 ], [ %B.addr.046, %for.cond4.preheader.preheader ]
 ;  %j.041 = phi i64 [ %inc86, %for.inc85 ], [ 0, %for.cond4.preheader.preheader ]
 ;  %cmp536 = icmp sgt i64 %n, 0
 ;  br i1 %cmp536, label %for.cond7.preheader.preheader, label %for.inc85
@@ -196,7 +196,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;  br label %for.cond7.preheader
 ;
 ;for.cond7.preheader:                              ; preds = %for.cond7.preheader.preheader, %for.inc82
-;  %B.addr.238 = phi i64* [ %B.addr.3.lcssa, %for.inc82 ], [ %B.addr.142, %for.cond7.preheader.preheader ]
+;  %B.addr.238 = phi ptr [ %B.addr.3.lcssa, %for.inc82 ], [ %B.addr.142, %for.cond7.preheader.preheader ]
 ;  %k.037 = phi i64 [ %inc83, %for.inc82 ], [ 0, %for.cond7.preheader.preheader ]
 ;  %cmp832 = icmp sgt i64 %n, 0
 ;  br i1 %cmp832, label %for.cond10.preheader.preheader, label %for.inc82
@@ -205,7 +205,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;  br label %for.cond10.preheader
 ;
 ;for.cond10.preheader:                             ; preds = %for.cond10.preheader.preheader, %for.inc79
-;  %B.addr.334 = phi i64* [ %B.addr.4.lcssa, %for.inc79 ], [ %B.addr.238, %for.cond10.preheader.preheader ]
+;  %B.addr.334 = phi ptr [ %B.addr.4.lcssa, %for.inc79 ], [ %B.addr.238, %for.cond10.preheader.preheader ]
 ;  %l.033 = phi i64 [ %inc80, %for.inc79 ], [ 0, %for.cond10.preheader.preheader ]
 ;  %cmp1128 = icmp sgt i64 %n, 0
 ;  br i1 %cmp1128, label %for.cond13.preheader.preheader, label %for.inc79
@@ -214,7 +214,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;  br label %for.cond13.preheader
 ;
 ;for.cond13.preheader:                             ; preds = %for.cond13.preheader.preheader, %for.inc76
-;  %B.addr.430 = phi i64* [ %B.addr.5.lcssa, %for.inc76 ], [ %B.addr.334, %for.cond13.preheader.preheader ]
+;  %B.addr.430 = phi ptr [ %B.addr.5.lcssa, %for.inc76 ], [ %B.addr.334, %for.cond13.preheader.preheader ]
 ;  %m.029 = phi i64 [ %inc77, %for.inc76 ], [ 0, %for.cond13.preheader.preheader ]
 ;  %cmp1424 = icmp sgt i64 %n, 0
 ;  br i1 %cmp1424, label %for.cond16.preheader.preheader, label %for.inc76
@@ -223,7 +223,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;  br label %for.cond16.preheader
 ;
 ;for.cond16.preheader:                             ; preds = %for.cond16.preheader.preheader, %for.inc73
-;  %B.addr.526 = phi i64* [ %B.addr.6.lcssa, %for.inc73 ], [ %B.addr.430, %for.cond16.preheader.preheader ]
+;  %B.addr.526 = phi ptr [ %B.addr.6.lcssa, %for.inc73 ], [ %B.addr.430, %for.cond16.preheader.preheader ]
 ;  %o.025 = phi i64 [ %inc74, %for.inc73 ], [ 0, %for.cond16.preheader.preheader ]
 ;  %cmp1720 = icmp sgt i64 %n, 0
 ;  br i1 %cmp1720, label %for.cond19.preheader.preheader, label %for.inc73
@@ -232,7 +232,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;  br label %for.cond19.preheader
 ;
 ;for.cond19.preheader:                             ; preds = %for.cond19.preheader.preheader, %for.inc70
-;  %B.addr.622 = phi i64* [ %B.addr.7.lcssa, %for.inc70 ], [ %B.addr.526, %for.cond19.preheader.preheader ]
+;  %B.addr.622 = phi ptr [ %B.addr.7.lcssa, %for.inc70 ], [ %B.addr.526, %for.cond19.preheader.preheader ]
 ;  %p.021 = phi i64 [ %inc71, %for.inc70 ], [ 0, %for.cond19.preheader.preheader ]
 ;  %cmp2016 = icmp sgt i64 %n, 0
 ;  br i1 %cmp2016, label %for.cond22.preheader.preheader, label %for.inc70
@@ -241,7 +241,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;  br label %for.cond22.preheader
 ;
 ;for.cond22.preheader:                             ; preds = %for.cond22.preheader.preheader, %for.inc67
-;  %B.addr.718 = phi i64* [ %B.addr.8.lcssa, %for.inc67 ], [ %B.addr.622, %for.cond22.preheader.preheader ]
+;  %B.addr.718 = phi ptr [ %B.addr.8.lcssa, %for.inc67 ], [ %B.addr.622, %for.cond22.preheader.preheader ]
 ;  %q.017 = phi i64 [ %inc68, %for.inc67 ], [ 0, %for.cond22.preheader.preheader ]
 ;  %cmp2312 = icmp sgt i64 %n, 0
 ;  br i1 %cmp2312, label %for.cond25.preheader.preheader, label %for.inc67
@@ -250,7 +250,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;  br label %for.cond25.preheader
 ;
 ;for.cond25.preheader:                             ; preds = %for.cond25.preheader.preheader, %for.inc64
-;  %B.addr.814 = phi i64* [ %B.addr.9.lcssa, %for.inc64 ], [ %B.addr.718, %for.cond25.preheader.preheader ]
+;  %B.addr.814 = phi ptr [ %B.addr.9.lcssa, %for.inc64 ], [ %B.addr.718, %for.cond25.preheader.preheader ]
 ;  %r.013 = phi i64 [ %inc65, %for.inc64 ], [ 0, %for.cond25.preheader.preheader ]
 ;  %cmp268 = icmp sgt i64 %n, 0
 ;  br i1 %cmp268, label %for.cond28.preheader.preheader, label %for.inc64
@@ -259,7 +259,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;  br label %for.cond28.preheader
 ;
 ;for.cond28.preheader:                             ; preds = %for.cond28.preheader.preheader, %for.inc61
-;  %B.addr.910 = phi i64* [ %B.addr.10.lcssa, %for.inc61 ], [ %B.addr.814, %for.cond28.preheader.preheader ]
+;  %B.addr.910 = phi ptr [ %B.addr.10.lcssa, %for.inc61 ], [ %B.addr.814, %for.cond28.preheader.preheader ]
 ;  %s.09 = phi i64 [ %inc62, %for.inc61 ], [ 0, %for.cond28.preheader.preheader ]
 ;  %cmp294 = icmp sgt i64 %n, 0
 ;  br i1 %cmp294, label %for.cond31.preheader.preheader, label %for.inc61
@@ -269,7 +269,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;
 ;for.cond31.preheader:                             ; preds = %for.cond31.preheader.preheader, %for.inc58
 ;  %u.06 = phi i64 [ %inc59, %for.inc58 ], [ 0, %for.cond31.preheader.preheader ]
-;  %B.addr.105 = phi i64* [ %B.addr.11.lcssa, %for.inc58 ], [ %B.addr.910, %for.cond31.preheader.preheader ]
+;  %B.addr.105 = phi ptr [ %B.addr.11.lcssa, %for.inc58 ], [ %B.addr.910, %for.cond31.preheader.preheader ]
 ;  %cmp321 = icmp sgt i64 %n, 0
 ;  br i1 %cmp321, label %for.body33.preheader, label %for.inc58
 ;
@@ -278,135 +278,135 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;
 ;for.body33:                                       ; preds = %for.body33.preheader, %for.body33
 ;  %t.03 = phi i64 [ %inc, %for.body33 ], [ 0, %for.body33.preheader ]
-;  %B.addr.112 = phi i64* [ %incdec.ptr, %for.body33 ], [ %B.addr.105, %for.body33.preheader ]
+;  %B.addr.112 = phi ptr [ %incdec.ptr, %for.body33 ], [ %B.addr.105, %for.body33.preheader ]
 ;  %add = add nsw i64 %r.013, %s.09
 ;  %add34 = add nsw i64 %p.021, %q.017
 ;  %mul = shl nsw i64 %l.033, 1
 ;  %add3547 = or i64 %mul, 1
 ;  %sub = add nsw i64 %k.037, -1
 ;  %sub36 = add nsw i64 %i.045, -3
-;  %arrayidx43 = getelementptr inbounds [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]], [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]]* %A, i64 %sub36, i64 %j.041, i64 2, i64 %sub, i64 %add3547, i64 %m.029, i64 %add34, i64 %add
-;  store i64 %i.045, i64* %arrayidx43, align 8
+;  %arrayidx43 = getelementptr inbounds [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]], ptr %A, i64 %sub36, i64 %j.041, i64 2, i64 %sub, i64 %add3547, i64 %m.029, i64 %add34, i64 %add
+;  store i64 %i.045, ptr %arrayidx43, align 8
 ;  %add44 = add nsw i64 %t.03, 2
 ;  %add45 = add nsw i64 %n, 1
 ;  %mul46 = mul nsw i64 %l.033, 3
 ;  %sub47 = add nsw i64 %mul46, -1
 ;  %sub48 = sub nsw i64 1, %k.037
 ;  %add49 = add nsw i64 %i.045, 3
-;  %arrayidx57 = getelementptr inbounds [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]], [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]]* %A, i64 %add49, i64 2, i64 %u.06, i64 %sub48, i64 %sub47, i64 %o.025, i64 %add45, i64 %add44
-;  %0 = load i64, i64* %arrayidx57, align 8
-;  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.112, i64 1
-;  store i64 %0, i64* %B.addr.112, align 8
+;  %arrayidx57 = getelementptr inbounds [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]], ptr %A, i64 %add49, i64 2, i64 %u.06, i64 %sub48, i64 %sub47, i64 %o.025, i64 %add45, i64 %add44
+;  %0 = load i64, ptr %arrayidx57, align 8
+;  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.112, i64 1
+;  store i64 %0, ptr %B.addr.112, align 8
 ;  %inc = add nsw i64 %t.03, 1
 ;  %exitcond = icmp ne i64 %inc, %n
 ;  br i1 %exitcond, label %for.body33, label %for.inc58.loopexit
 ;
 ;for.inc58.loopexit:                               ; preds = %for.body33
-;  %scevgep = getelementptr i64, i64* %B.addr.105, i64 %n
+;  %scevgep = getelementptr i64, ptr %B.addr.105, i64 %n
 ;  br label %for.inc58
 ;
 ;for.inc58:                                        ; preds = %for.inc58.loopexit, %for.cond31.preheader
-;  %B.addr.11.lcssa = phi i64* [ %B.addr.105, %for.cond31.preheader ], [ %scevgep, %for.inc58.loopexit ]
+;  %B.addr.11.lcssa = phi ptr [ %B.addr.105, %for.cond31.preheader ], [ %scevgep, %for.inc58.loopexit ]
 ;  %inc59 = add nsw i64 %u.06, 1
 ;  %exitcond48 = icmp ne i64 %inc59, %n
 ;  br i1 %exitcond48, label %for.cond31.preheader, label %for.inc61.loopexit
 ;
 ;for.inc61.loopexit:                               ; preds = %for.inc58
-;  %B.addr.11.lcssa.lcssa = phi i64* [ %B.addr.11.lcssa, %for.inc58 ]
+;  %B.addr.11.lcssa.lcssa = phi ptr [ %B.addr.11.lcssa, %for.inc58 ]
 ;  br label %for.inc61
 ;
 ;for.inc61:                                        ; preds = %for.inc61.loopexit, %for.cond28.preheader
-;  %B.addr.10.lcssa = phi i64* [ %B.addr.910, %for.cond28.preheader ], [ %B.addr.11.lcssa.lcssa, %for.inc61.loopexit ]
+;  %B.addr.10.lcssa = phi ptr [ %B.addr.910, %for.cond28.preheader ], [ %B.addr.11.lcssa.lcssa, %for.inc61.loopexit ]
 ;  %inc62 = add nsw i64 %s.09, 1
 ;  %exitcond49 = icmp ne i64 %inc62, %n
 ;  br i1 %exitcond49, label %for.cond28.preheader, label %for.inc64.loopexit
 ;
 ;for.inc64.loopexit:                               ; preds = %for.inc61
-;  %B.addr.10.lcssa.lcssa = phi i64* [ %B.addr.10.lcssa, %for.inc61 ]
+;  %B.addr.10.lcssa.lcssa = phi ptr [ %B.addr.10.lcssa, %for.inc61 ]
 ;  br label %for.inc64
 ;
 ;for.inc64:                                        ; preds = %for.inc64.loopexit, %for.cond25.preheader
-;  %B.addr.9.lcssa = phi i64* [ %B.addr.814, %for.cond25.preheader ], [ %B.addr.10.lcssa.lcssa, %for.inc64.loopexit ]
+;  %B.addr.9.lcssa = phi ptr [ %B.addr.814, %for.cond25.preheader ], [ %B.addr.10.lcssa.lcssa, %for.inc64.loopexit ]
 ;  %inc65 = add nsw i64 %r.013, 1
 ;  %exitcond50 = icmp ne i64 %inc65, %n
 ;  br i1 %exitcond50, label %for.cond25.preheader, label %for.inc67.loopexit
 ;
 ;for.inc67.loopexit:                               ; preds = %for.inc64
-;  %B.addr.9.lcssa.lcssa = phi i64* [ %B.addr.9.lcssa, %for.inc64 ]
+;  %B.addr.9.lcssa.lcssa = phi ptr [ %B.addr.9.lcssa, %for.inc64 ]
 ;  br label %for.inc67
 ;
 ;for.inc67:                                        ; preds = %for.inc67.loopexit, %for.cond22.preheader
-;  %B.addr.8.lcssa = phi i64* [ %B.addr.718, %for.cond22.preheader ], [ %B.addr.9.lcssa.lcssa, %for.inc67.loopexit ]
+;  %B.addr.8.lcssa = phi ptr [ %B.addr.718, %for.cond22.preheader ], [ %B.addr.9.lcssa.lcssa, %for.inc67.loopexit ]
 ;  %inc68 = add nsw i64 %q.017, 1
 ;  %exitcond51 = icmp ne i64 %inc68, %n
 ;  br i1 %exitcond51, label %for.cond22.preheader, label %for.inc70.loopexit
 ;
 ;for.inc70.loopexit:                               ; preds = %for.inc67
-;  %B.addr.8.lcssa.lcssa = phi i64* [ %B.addr.8.lcssa, %for.inc67 ]
+;  %B.addr.8.lcssa.lcssa = phi ptr [ %B.addr.8.lcssa, %for.inc67 ]
 ;  br label %for.inc70
 ;
 ;for.inc70:                                        ; preds = %for.inc70.loopexit, %for.cond19.preheader
-;  %B.addr.7.lcssa = phi i64* [ %B.addr.622, %for.cond19.preheader ], [ %B.addr.8.lcssa.lcssa, %for.inc70.loopexit ]
+;  %B.addr.7.lcssa = phi ptr [ %B.addr.622, %for.cond19.preheader ], [ %B.addr.8.lcssa.lcssa, %for.inc70.loopexit ]
 ;  %inc71 = add nsw i64 %p.021, 1
 ;  %exitcond52 = icmp ne i64 %inc71, %n
 ;  br i1 %exitcond52, label %for.cond19.preheader, label %for.inc73.loopexit
 ;
 ;for.inc73.loopexit:                               ; preds = %for.inc70
-;  %B.addr.7.lcssa.lcssa = phi i64* [ %B.addr.7.lcssa, %for.inc70 ]
+;  %B.addr.7.lcssa.lcssa = phi ptr [ %B.addr.7.lcssa, %for.inc70 ]
 ;  br label %for.inc73
 ;
 ;for.inc73:                                        ; preds = %for.inc73.loopexit, %for.cond16.preheader
-;  %B.addr.6.lcssa = phi i64* [ %B.addr.526, %for.cond16.preheader ], [ %B.addr.7.lcssa.lcssa, %for.inc73.loopexit ]
+;  %B.addr.6.lcssa = phi ptr [ %B.addr.526, %for.cond16.preheader ], [ %B.addr.7.lcssa.lcssa, %for.inc73.loopexit ]
 ;  %inc74 = add nsw i64 %o.025, 1
 ;  %exitcond53 = icmp ne i64 %inc74, %n
 ;  br i1 %exitcond53, label %for.cond16.preheader, label %for.inc76.loopexit
 ;
 ;for.inc76.loopexit:                               ; preds = %for.inc73
-;  %B.addr.6.lcssa.lcssa = phi i64* [ %B.addr.6.lcssa, %for.inc73 ]
+;  %B.addr.6.lcssa.lcssa = phi ptr [ %B.addr.6.lcssa, %for.inc73 ]
 ;  br label %for.inc76
 ;
 ;for.inc76:                                        ; preds = %for.inc76.loopexit, %for.cond13.preheader
-;  %B.addr.5.lcssa = phi i64* [ %B.addr.430, %for.cond13.preheader ], [ %B.addr.6.lcssa.lcssa, %for.inc76.loopexit ]
+;  %B.addr.5.lcssa = phi ptr [ %B.addr.430, %for.cond13.preheader ], [ %B.addr.6.lcssa.lcssa, %for.inc76.loopexit ]
 ;  %inc77 = add nsw i64 %m.029, 1
 ;  %exitcond54 = icmp ne i64 %inc77, %n
 ;  br i1 %exitcond54, label %for.cond13.preheader, label %for.inc79.loopexit
 ;
 ;for.inc79.loopexit:                               ; preds = %for.inc76
-;  %B.addr.5.lcssa.lcssa = phi i64* [ %B.addr.5.lcssa, %for.inc76 ]
+;  %B.addr.5.lcssa.lcssa = phi ptr [ %B.addr.5.lcssa, %for.inc76 ]
 ;  br label %for.inc79
 ;
 ;for.inc79:                                        ; preds = %for.inc79.loopexit, %for.cond10.preheader
-;  %B.addr.4.lcssa = phi i64* [ %B.addr.334, %for.cond10.preheader ], [ %B.addr.5.lcssa.lcssa, %for.inc79.loopexit ]
+;  %B.addr.4.lcssa = phi ptr [ %B.addr.334, %for.cond10.preheader ], [ %B.addr.5.lcssa.lcssa, %for.inc79.loopexit ]
 ;  %inc80 = add nsw i64 %l.033, 1
 ;  %exitcond55 = icmp ne i64 %inc80, %n
 ;  br i1 %exitcond55, label %for.cond10.preheader, label %for.inc82.loopexit
 ;
 ;for.inc82.loopexit:                               ; preds = %for.inc79
-;  %B.addr.4.lcssa.lcssa = phi i64* [ %B.addr.4.lcssa, %for.inc79 ]
+;  %B.addr.4.lcssa.lcssa = phi ptr [ %B.addr.4.lcssa, %for.inc79 ]
 ;  br label %for.inc82
 ;
 ;for.inc82:                                        ; preds = %for.inc82.loopexit, %for.cond7.preheader
-;  %B.addr.3.lcssa = phi i64* [ %B.addr.238, %for.cond7.preheader ], [ %B.addr.4.lcssa.lcssa, %for.inc82.loopexit ]
+;  %B.addr.3.lcssa = phi ptr [ %B.addr.238, %for.cond7.preheader ], [ %B.addr.4.lcssa.lcssa, %for.inc82.loopexit ]
 ;  %inc83 = add nsw i64 %k.037, 1
 ;  %exitcond56 = icmp ne i64 %inc83, %n
 ;  br i1 %exitcond56, label %for.cond7.preheader, label %for.inc85.loopexit
 ;
 ;for.inc85.loopexit:                               ; preds = %for.inc82
-;  %B.addr.3.lcssa.lcssa = phi i64* [ %B.addr.3.lcssa, %for.inc82 ]
+;  %B.addr.3.lcssa.lcssa = phi ptr [ %B.addr.3.lcssa, %for.inc82 ]
 ;  br label %for.inc85
 ;
 ;for.inc85:                                        ; preds = %for.inc85.loopexit, %for.cond4.preheader
-;  %B.addr.2.lcssa = phi i64* [ %B.addr.142, %for.cond4.preheader ], [ %B.addr.3.lcssa.lcssa, %for.inc85.loopexit ]
+;  %B.addr.2.lcssa = phi ptr [ %B.addr.142, %for.cond4.preheader ], [ %B.addr.3.lcssa.lcssa, %for.inc85.loopexit ]
 ;  %inc86 = add nsw i64 %j.041, 1
 ;  %exitcond57 = icmp ne i64 %inc86, %n
 ;  br i1 %exitcond57, label %for.cond4.preheader, label %for.inc88.loopexit
 ;
 ;for.inc88.loopexit:                               ; preds = %for.inc85
-;  %B.addr.2.lcssa.lcssa = phi i64* [ %B.addr.2.lcssa, %for.inc85 ]
+;  %B.addr.2.lcssa.lcssa = phi ptr [ %B.addr.2.lcssa, %for.inc85 ]
 ;  br label %for.inc88
 ;
 ;for.inc88:                                        ; preds = %for.inc88.loopexit, %for.cond1.preheader
-;  %B.addr.1.lcssa = phi i64* [ %B.addr.046, %for.cond1.preheader ], [ %B.addr.2.lcssa.lcssa, %for.inc88.loopexit ]
+;  %B.addr.1.lcssa = phi ptr [ %B.addr.046, %for.cond1.preheader ], [ %B.addr.2.lcssa.lcssa, %for.inc88.loopexit ]
 ;  %inc89 = add nsw i64 %i.045, 1
 ;  %exitcond58 = icmp ne i64 %inc89, %n
 ;  br i1 %exitcond58, label %for.cond1.preheader, label %for.end90.loopexit
@@ -424,7 +424,7 @@ for.end26:                                        ; preds = %for.end26.loopexit,
 ;;    A[i + 2] = i;
 ;;    *B++ = A[i];
 
-define void @p4(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @p4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp sgt i64 %n, 0
   br i1 %cmp1, label %for.body.preheader, label %for.end
@@ -442,17 +442,17 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i8 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv2 = sext i8 %i.03 to i32
   %conv3 = sext i8 %i.03 to i64
   %add = add i64 %conv3, 2
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv2, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv2, ptr %arrayidx, align 4
   %idxprom4 = sext i8 %i.03 to i64
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %idxprom4
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %idxprom4
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add i8 %i.03, 1
   %conv = sext i8 %inc to i64
   %cmp = icmp slt i64 %conv, %n
@@ -471,7 +471,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[i + 2] = i;
 ;;    *B++ = A[i];
 
-define void @p5(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @p5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp sgt i64 %n, 0
   br i1 %cmp1, label %for.body.preheader, label %for.end
@@ -489,17 +489,17 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i16 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv2 = sext i16 %i.03 to i32
   %conv3 = sext i16 %i.03 to i64
   %add = add i64 %conv3, 2
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv2, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv2, ptr %arrayidx, align 4
   %idxprom4 = sext i16 %i.03 to i64
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %idxprom4
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %idxprom4
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add i16 %i.03, 1
   %conv = sext i16 %inc to i64
   %cmp = icmp slt i64 %conv, %n
@@ -518,7 +518,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[i + 2] = i;
 ;;    *B++ = A[i];
 
-define void @p6(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @p6(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp sgt i64 %n, 0
   br i1 %cmp1, label %for.body.preheader, label %for.end
@@ -536,15 +536,15 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %0 = add nsw i64 %indvars.iv, 2
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %0
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %0
   %1 = trunc i64 %indvars.iv to i32
-  store i32 %1, i32* %arrayidx, align 4
-  %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
-  %2 = load i32, i32* %arrayidx3, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %2, i32* %B.addr.02, align 4
+  store i32 %1, ptr %arrayidx, align 4
+  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %indvars.iv
+  %2 = load i32, ptr %arrayidx3, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %2, ptr %B.addr.02, align 4
   %indvars.iv.next = add i64 %indvars.iv, 1
   %exitcond = icmp ne i64 %indvars.iv.next, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -561,10 +561,10 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;  A[n] = 0;
 ;;  *B = A[n + 1];
 
-define void @p7(i32* %A, i32* %B, i8 signext %n) nounwind uwtable ssp {
+define void @p7(ptr %A, ptr %B, i8 signext %n) nounwind uwtable ssp {
 entry:
   %idxprom = sext i8 %n to i64
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %idxprom
 
 ; CHECK-LABEL: p7
 ; CHECK: da analyze - none!
@@ -574,12 +574,12 @@ entry:
 ; CHECK: da analyze - confused!
 ; CHECK: da analyze - none!
 
-  store i32 0, i32* %arrayidx, align 4
+  store i32 0, ptr %arrayidx, align 4
   %conv = sext i8 %n to i64
   %add = add i64 %conv, 1
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx2, align 4
-  store i32 %0, i32* %B, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx2, align 4
+  store i32 %0, ptr %B, align 4
   ret void
 }
 
@@ -588,11 +588,11 @@ entry:
 ;;  A[n] = 0;
 ;;  *B = A[n + 1];
 
-define void @p8(i32* %A, i32* %B, i16 signext %n) nounwind uwtable ssp {
+define void @p8(ptr %A, ptr %B, i16 signext %n) nounwind uwtable ssp {
 entry:
   %idxprom = sext i16 %n to i64
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom
-  store i32 0, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %idxprom
+  store i32 0, ptr %arrayidx, align 4
 
 ; CHECK-LABEL: p8
 ; CHECK: da analyze - none!
@@ -604,9 +604,9 @@ entry:
 
   %conv = sext i16 %n to i64
   %add = add i64 %conv, 1
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx2, align 4
-  store i32 %0, i32* %B, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx2, align 4
+  store i32 %0, ptr %B, align 4
   ret void
 }
 
@@ -615,11 +615,11 @@ entry:
 ;;  A[n] = 0;
 ;;  *B = A[n + 1];
 
-define void @p9(i32* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @p9(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   %idxprom = sext i32 %n to i64
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom
-  store i32 0, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %idxprom
+  store i32 0, ptr %arrayidx, align 4
 
 ; CHECK-LABEL: p9
 ; CHECK: da analyze - none!
@@ -631,9 +631,9 @@ entry:
 
   %add = add nsw i32 %n, 1
   %idxprom1 = sext i32 %add to i64
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %idxprom1
-  %0 = load i32, i32* %arrayidx2, align 4
-  store i32 %0, i32* %B, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %idxprom1
+  %0 = load i32, ptr %arrayidx2, align 4
+  store i32 %0, ptr %B, align 4
   ret void
 }
 
@@ -642,11 +642,11 @@ entry:
 ;;  A[n] = 0;
 ;;  *B = A[n + 1];
 
-define void @p10(i32* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @p10(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   %idxprom = zext i32 %n to i64
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom
-  store i32 0, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %idxprom
+  store i32 0, ptr %arrayidx, align 4
 
 ; CHECK-LABEL: p10
 ; CHECK: da analyze - none!
@@ -658,9 +658,9 @@ entry:
 
   %add = add i32 %n, 1
   %idxprom1 = zext i32 %add to i64
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %idxprom1
-  %0 = load i32, i32* %arrayidx2, align 4
-  store i32 %0, i32* %B, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %idxprom1
+  %0 = load i32, ptr %arrayidx2, align 4
+  store i32 %0, ptr %B, align 4
   ret void
 }
 
@@ -675,11 +675,11 @@ entry:
 
 %struct.S = type { i32 }
 
-define void @foo(%struct.S* %s, i32 %size) nounwind uwtable ssp {
+define void @foo(ptr %s, i32 %size) nounwind uwtable ssp {
 entry:
   %idx.ext = zext i32 %size to i64
   %add.ptr.sum = add i64 %idx.ext, -1
-  %add.ptr1 = getelementptr inbounds %struct.S, %struct.S* %s, i64 %add.ptr.sum
+  %add.ptr1 = getelementptr inbounds %struct.S, ptr %s, i64 %add.ptr.sum
   %cmp1 = icmp eq i64 %add.ptr.sum, 0
   br i1 %cmp1, label %while.end, label %while.body.preheader
 
@@ -692,13 +692,12 @@ while.body.preheader:                             ; preds = %entry
   br label %while.body
 
 while.body:                                       ; preds = %while.body.preheader, %while.body
-  %i.02 = phi %struct.S* [ %incdec.ptr, %while.body ], [ %s, %while.body.preheader ]
-  %0 = getelementptr inbounds %struct.S, %struct.S* %i.02, i64 1, i32 0
-  %1 = load i32, i32* %0, align 4
-  %2 = getelementptr inbounds %struct.S, %struct.S* %i.02, i64 0, i32 0
-  store i32 %1, i32* %2, align 4
-  %incdec.ptr = getelementptr inbounds %struct.S, %struct.S* %i.02, i64 1
-  %cmp = icmp eq %struct.S* %incdec.ptr, %add.ptr1
+  %i.02 = phi ptr [ %incdec.ptr, %while.body ], [ %s, %while.body.preheader ]
+  %0 = getelementptr inbounds %struct.S, ptr %i.02, i64 1, i32 0
+  %1 = load i32, ptr %0, align 4
+  store i32 %1, ptr %i.02, align 4
+  %incdec.ptr = getelementptr inbounds %struct.S, ptr %i.02, i64 1
+  %cmp = icmp eq ptr %incdec.ptr, %add.ptr1
   br i1 %cmp, label %while.end.loopexit, label %while.body
 
 while.end.loopexit:                               ; preds = %while.body
@@ -708,4 +707,4 @@ while.end:                                        ; preds = %while.end.loopexit,
   ret void
 }
 
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1) nounwind

diff  --git a/llvm/test/Analysis/DependenceAnalysis/PreliminaryNoValidityCheckFixedSize.ll b/llvm/test/Analysis/DependenceAnalysis/PreliminaryNoValidityCheckFixedSize.ll
index d91d3a5d384fd..b4660d5b1d546 100644
--- a/llvm/test/Analysis/DependenceAnalysis/PreliminaryNoValidityCheckFixedSize.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/PreliminaryNoValidityCheckFixedSize.ll
@@ -14,7 +14,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;      for (long int k = 0; k < n; k++) {
 ;;        *B++ = A[i + 3][j + 2][k + 1];
 
-define void @p2(i64 %n, [100 x [100 x i64]]* %A, i64* %B) nounwind uwtable ssp {
+define void @p2(i64 %n, ptr %A, ptr %B) nounwind uwtable ssp {
 entry:
   %cmp10 = icmp sgt i64 %n, 0
   br i1 %cmp10, label %for.cond1.preheader.preheader, label %for.end26
@@ -39,7 +39,7 @@ for.cond1.preheader.preheader:                    ; preds = %entry
   br label %for.cond1.preheader
 
 for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc24
-  %B.addr.012 = phi i64* [ %B.addr.1.lcssa, %for.inc24 ], [ %B, %for.cond1.preheader.preheader ]
+  %B.addr.012 = phi ptr [ %B.addr.1.lcssa, %for.inc24 ], [ %B, %for.cond1.preheader.preheader ]
   %i.011 = phi i64 [ %inc25, %for.inc24 ], [ 0, %for.cond1.preheader.preheader ]
   %cmp26 = icmp sgt i64 %n, 0
   br i1 %cmp26, label %for.cond4.preheader.preheader, label %for.inc24
@@ -48,7 +48,7 @@ for.cond4.preheader.preheader:                    ; preds = %for.cond1.preheader
   br label %for.cond4.preheader
 
 for.cond4.preheader:                              ; preds = %for.cond4.preheader.preheader, %for.inc21
-  %B.addr.18 = phi i64* [ %B.addr.2.lcssa, %for.inc21 ], [ %B.addr.012, %for.cond4.preheader.preheader ]
+  %B.addr.18 = phi ptr [ %B.addr.2.lcssa, %for.inc21 ], [ %B.addr.012, %for.cond4.preheader.preheader ]
   %j.07 = phi i64 [ %inc22, %for.inc21 ], [ 0, %for.cond4.preheader.preheader ]
   %cmp51 = icmp sgt i64 %n, 0
   br i1 %cmp51, label %for.body6.preheader, label %for.cond10.loopexit
@@ -58,8 +58,8 @@ for.body6.preheader:                              ; preds = %for.cond4.preheader
 
 for.body6:                                        ; preds = %for.body6.preheader, %for.body6
   %k.02 = phi i64 [ %inc, %for.body6 ], [ 0, %for.body6.preheader ]
-  %arrayidx8 = getelementptr inbounds [100 x [100 x i64]], [100 x [100 x i64]]* %A, i64 %i.011, i64 %j.07, i64 %k.02
-  store i64 %i.011, i64* %arrayidx8, align 8
+  %arrayidx8 = getelementptr inbounds [100 x [100 x i64]], ptr %A, i64 %i.011, i64 %j.07, i64 %k.02
+  store i64 %i.011, ptr %arrayidx8, align 8
   %inc = add nsw i64 %k.02, 1
   %exitcond13 = icmp ne i64 %inc, %n
   br i1 %exitcond13, label %for.body6, label %for.cond10.loopexit.loopexit
@@ -76,34 +76,34 @@ for.body12.preheader:                             ; preds = %for.cond10.loopexit
 
 for.body12:                                       ; preds = %for.body12.preheader, %for.body12
   %k9.05 = phi i64 [ %inc19, %for.body12 ], [ 0, %for.body12.preheader ]
-  %B.addr.24 = phi i64* [ %incdec.ptr, %for.body12 ], [ %B.addr.18, %for.body12.preheader ]
+  %B.addr.24 = phi ptr [ %incdec.ptr, %for.body12 ], [ %B.addr.18, %for.body12.preheader ]
   %add = add nsw i64 %k9.05, 1
   %add13 = add nsw i64 %j.07, 2
   %add14 = add nsw i64 %i.011, 3
-  %arrayidx17 = getelementptr inbounds [100 x [100 x i64]], [100 x [100 x i64]]* %A, i64 %add14, i64 %add13, i64 %add
-  %0 = load i64, i64* %arrayidx17, align 8
-  %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.24, i64 1
-  store i64 %0, i64* %B.addr.24, align 8
+  %arrayidx17 = getelementptr inbounds [100 x [100 x i64]], ptr %A, i64 %add14, i64 %add13, i64 %add
+  %0 = load i64, ptr %arrayidx17, align 8
+  %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.24, i64 1
+  store i64 %0, ptr %B.addr.24, align 8
   %inc19 = add nsw i64 %k9.05, 1
   %exitcond = icmp ne i64 %inc19, %n
   br i1 %exitcond, label %for.body12, label %for.inc21.loopexit
 
 for.inc21.loopexit:                               ; preds = %for.body12
-  %scevgep = getelementptr i64, i64* %B.addr.18, i64 %n
+  %scevgep = getelementptr i64, ptr %B.addr.18, i64 %n
   br label %for.inc21
 
 for.inc21:                                        ; preds = %for.inc21.loopexit, %for.cond10.loopexit
-  %B.addr.2.lcssa = phi i64* [ %B.addr.18, %for.cond10.loopexit ], [ %scevgep, %for.inc21.loopexit ]
+  %B.addr.2.lcssa = phi ptr [ %B.addr.18, %for.cond10.loopexit ], [ %scevgep, %for.inc21.loopexit ]
   %inc22 = add nsw i64 %j.07, 1
   %exitcond14 = icmp ne i64 %inc22, %n
   br i1 %exitcond14, label %for.cond4.preheader, label %for.inc24.loopexit
 
 for.inc24.loopexit:                               ; preds = %for.inc21
-  %B.addr.2.lcssa.lcssa = phi i64* [ %B.addr.2.lcssa, %for.inc21 ]
+  %B.addr.2.lcssa.lcssa = phi ptr [ %B.addr.2.lcssa, %for.inc21 ]
   br label %for.inc24
 
 for.inc24:                                        ; preds = %for.inc24.loopexit, %for.cond1.preheader
-  %B.addr.1.lcssa = phi i64* [ %B.addr.012, %for.cond1.preheader ], [ %B.addr.2.lcssa.lcssa, %for.inc24.loopexit ]
+  %B.addr.1.lcssa = phi ptr [ %B.addr.012, %for.cond1.preheader ], [ %B.addr.2.lcssa.lcssa, %for.inc24.loopexit ]
   %inc25 = add nsw i64 %i.011, 1
   %exitcond15 = icmp ne i64 %inc25, %n
   br i1 %exitcond15, label %for.cond1.preheader, label %for.end26.loopexit

diff  --git a/llvm/test/Analysis/DependenceAnalysis/Propagating.ll b/llvm/test/Analysis/DependenceAnalysis/Propagating.ll
index 89e9810ff66f5..6ceffc6cad40b 100644
--- a/llvm/test/Analysis/DependenceAnalysis/Propagating.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/Propagating.ll
@@ -10,7 +10,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;      A[i + 1][i + j] = i;
 ;;      *B++ = A[i][i + j];
 
-define void @prop0([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @prop0(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -23,29 +23,29 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc9
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc9 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %add = add nsw i64 %i.03, %j.02
   %add4 = add nsw i64 %i.03, 1
-  %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add4, i64 %add
-  store i32 %conv, i32* %arrayidx5, align 4
+  %arrayidx5 = getelementptr inbounds [100 x i32], ptr %A, i64 %add4, i64 %add
+  store i32 %conv, ptr %arrayidx5, align 4
   %add6 = add nsw i64 %i.03, %j.02
-  %arrayidx8 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add6
-  %0 = load i32, i32* %arrayidx8, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx8 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.03, i64 %add6
+  %0 = load i32, ptr %arrayidx8, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc9
 
 for.inc9:                                         ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc10 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc10, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end11
@@ -61,7 +61,7 @@ for.end11:                                        ; preds = %for.inc9
 ;;        A[j - i][i + 1][j + k] = i;
 ;;        *B++ = A[j - i][i][j + k];
 
-define void @prop1([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @prop1(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -74,42 +74,42 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc18
-  %B.addr.06 = phi i32* [ %B, %entry ], [ %scevgep7, %for.inc18 ]
+  %B.addr.06 = phi ptr [ %B, %entry ], [ %scevgep7, %for.inc18 ]
   %i.05 = phi i64 [ 0, %entry ], [ %inc19, %for.inc18 ]
   br label %for.cond4.preheader
 
 for.cond4.preheader:                              ; preds = %for.cond1.preheader, %for.inc15
-  %B.addr.14 = phi i32* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc15 ]
+  %B.addr.14 = phi ptr [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc15 ]
   %j.03 = phi i64 [ 0, %for.cond1.preheader ], [ %inc16, %for.inc15 ]
   br label %for.body6
 
 for.body6:                                        ; preds = %for.cond4.preheader, %for.body6
   %k.02 = phi i64 [ 0, %for.cond4.preheader ], [ %inc, %for.body6 ]
-  %B.addr.21 = phi i32* [ %B.addr.14, %for.cond4.preheader ], [ %incdec.ptr, %for.body6 ]
+  %B.addr.21 = phi ptr [ %B.addr.14, %for.cond4.preheader ], [ %incdec.ptr, %for.body6 ]
   %conv = trunc i64 %i.05 to i32
   %add = add nsw i64 %j.03, %k.02
   %add7 = add nsw i64 %i.05, 1
   %sub = sub nsw i64 %j.03, %i.05
-  %arrayidx9 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub, i64 %add7, i64 %add
-  store i32 %conv, i32* %arrayidx9, align 4
+  %arrayidx9 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %sub, i64 %add7, i64 %add
+  store i32 %conv, ptr %arrayidx9, align 4
   %add10 = add nsw i64 %j.03, %k.02
   %sub11 = sub nsw i64 %j.03, %i.05
-  %arrayidx14 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub11, i64 %i.05, i64 %add10
-  %0 = load i32, i32* %arrayidx14, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.21, i64 1
-  store i32 %0, i32* %B.addr.21, align 4
+  %arrayidx14 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %sub11, i64 %i.05, i64 %add10
+  %0 = load i32, ptr %arrayidx14, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.21, i64 1
+  store i32 %0, ptr %B.addr.21, align 4
   %inc = add nsw i64 %k.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body6, label %for.inc15
 
 for.inc15:                                        ; preds = %for.body6
-  %scevgep = getelementptr i32, i32* %B.addr.14, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.14, i64 100
   %inc16 = add nsw i64 %j.03, 1
   %exitcond8 = icmp ne i64 %inc16, 100
   br i1 %exitcond8, label %for.cond4.preheader, label %for.inc18
 
 for.inc18:                                        ; preds = %for.inc15
-  %scevgep7 = getelementptr i32, i32* %B.addr.06, i64 10000
+  %scevgep7 = getelementptr i32, ptr %B.addr.06, i64 10000
   %inc19 = add nsw i64 %i.05, 1
   %exitcond9 = icmp ne i64 %inc19, 100
   br i1 %exitcond9, label %for.cond1.preheader, label %for.end20
@@ -120,11 +120,12 @@ for.end20:                                        ; preds = %for.inc18
 
 
 ;;  for (long int i = 0; i < 100; i++)
+;;    for (long int j = 0; j ptr]!
 ;;    for (long int j = 0; j < 100; j++) {
 ;;      A[i - 1][2*i] = i;
 ;;      *B++ = A[i][i + j + 110];
 
-define void @prop2([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @prop2(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -137,30 +138,30 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc8
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc8 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %i.03, 1
   %sub = add nsw i64 %i.03, -1
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub, i64 %mul
-  store i32 %conv, i32* %arrayidx4, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %sub, i64 %mul
+  store i32 %conv, ptr %arrayidx4, align 4
   %add = add nsw i64 %i.03, %j.02
   %add5 = add nsw i64 %add, 110
-  %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add5
-  %0 = load i32, i32* %arrayidx7, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx7 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.03, i64 %add5
+  %0 = load i32, ptr %arrayidx7, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc8
 
 for.inc8:                                         ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc9 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc9, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
@@ -175,7 +176,7 @@ for.end10:                                        ; preds = %for.inc8
 ;;      A[i][2*j + i] = i;
 ;;      *B++ = A[i][2*j - i + 5];
 
-define void @prop3([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @prop3(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -188,31 +189,31 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc9
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc9 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %j.02, 1
   %add = add nsw i64 %mul, %i.03
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add
-  store i32 %conv, i32* %arrayidx4, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.03, i64 %add
+  store i32 %conv, ptr %arrayidx4, align 4
   %mul5 = shl nsw i64 %j.02, 1
   %sub = sub nsw i64 %mul5, %i.03
   %add6 = add nsw i64 %sub, 5
-  %arrayidx8 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add6
-  %0 = load i32, i32* %arrayidx8, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx8 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.03, i64 %add6
+  %0 = load i32, ptr %arrayidx8, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc9
 
 for.inc9:                                         ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc10 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc10, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end11
@@ -227,7 +228,7 @@ for.end11:                                        ; preds = %for.inc9
 ;;      A[i + 2][2*i + j + 1] = i;
 ;;      *B++ = A[i][2*i + j];
 
-define void @prop4([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @prop4(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -240,32 +241,32 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc11
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc11 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc11 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc12, %for.inc11 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %i.03, 1
   %add = add nsw i64 %mul, %j.02
   %add4 = add nsw i64 %add, 1
   %add5 = add nsw i64 %i.03, 2
-  %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add5, i64 %add4
-  store i32 %conv, i32* %arrayidx6, align 4
+  %arrayidx6 = getelementptr inbounds [100 x i32], ptr %A, i64 %add5, i64 %add4
+  store i32 %conv, ptr %arrayidx6, align 4
   %mul7 = shl nsw i64 %i.03, 1
   %add8 = add nsw i64 %mul7, %j.02
-  %arrayidx10 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add8
-  %0 = load i32, i32* %arrayidx10, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx10 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.03, i64 %add8
+  %0 = load i32, ptr %arrayidx10, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc11
 
 for.inc11:                                        ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc12 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc12, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end13
@@ -280,7 +281,7 @@ for.end13:                                        ; preds = %for.inc11
 ;;      A[3*i - 18][22 - i][2*i + j] = i;
 ;;      *B++ = A[i][i][3*i + j];
 
-define void @prop5([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @prop5(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -293,33 +294,33 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc13
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc13 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc13 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc14, %for.inc13 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %i.03, 1
   %add = add nsw i64 %mul, %j.02
   %sub = sub nsw i64 22, %i.03
   %mul4 = mul nsw i64 %i.03, 3
   %sub5 = add nsw i64 %mul4, -18
-  %arrayidx7 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub5, i64 %sub, i64 %add
-  store i32 %conv, i32* %arrayidx7, align 4
+  %arrayidx7 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %sub5, i64 %sub, i64 %add
+  store i32 %conv, ptr %arrayidx7, align 4
   %mul8 = mul nsw i64 %i.03, 3
   %add9 = add nsw i64 %mul8, %j.02
-  %arrayidx12 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.03, i64 %i.03, i64 %add9
-  %0 = load i32, i32* %arrayidx12, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx12 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %i.03, i64 %i.03, i64 %add9
+  %0 = load i32, ptr %arrayidx12, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc13
 
 for.inc13:                                        ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc14 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc14, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end15
@@ -334,7 +335,7 @@ for.end15:                                        ; preds = %for.inc13
 ;;      A[i + 1][4*i + j + 2] = i;
 ;;      *B++ = A[2*i][8*i + j];
 
-define void @prop6([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @prop6(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -347,33 +348,33 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc12
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc12 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc12 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc13, %for.inc12 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %i.03, 2
   %add = add nsw i64 %mul, %j.02
   %add4 = add nsw i64 %add, 2
   %add5 = add nsw i64 %i.03, 1
-  %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add5, i64 %add4
-  store i32 %conv, i32* %arrayidx6, align 4
+  %arrayidx6 = getelementptr inbounds [100 x i32], ptr %A, i64 %add5, i64 %add4
+  store i32 %conv, ptr %arrayidx6, align 4
   %mul7 = shl nsw i64 %i.03, 3
   %add8 = add nsw i64 %mul7, %j.02
   %mul9 = shl nsw i64 %i.03, 1
-  %arrayidx11 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %mul9, i64 %add8
-  %0 = load i32, i32* %arrayidx11, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx11 = getelementptr inbounds [100 x i32], ptr %A, i64 %mul9, i64 %add8
+  %0 = load i32, ptr %arrayidx11, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc12
 
 for.inc12:                                        ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc13 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc13, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end14
@@ -388,7 +389,7 @@ for.end14:                                        ; preds = %for.inc12
 ;;      A[2*i + 4][-5*i + j + 2] = i;
 ;;      *B++ = A[-2*i + 20][5*i + j];
 
-define void @prop7([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @prop7(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -401,35 +402,35 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc14
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc14 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc14 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc15, %for.inc14 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, -5
   %add = add nsw i64 %mul, %j.02
   %add4 = add nsw i64 %add, 2
   %mul5 = shl nsw i64 %i.03, 1
   %add6 = add nsw i64 %mul5, 4
-  %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add6, i64 %add4
-  store i32 %conv, i32* %arrayidx7, align 4
+  %arrayidx7 = getelementptr inbounds [100 x i32], ptr %A, i64 %add6, i64 %add4
+  store i32 %conv, ptr %arrayidx7, align 4
   %mul8 = mul nsw i64 %i.03, 5
   %add9 = add nsw i64 %mul8, %j.02
   %mul10 = mul nsw i64 %i.03, -2
   %add11 = add nsw i64 %mul10, 20
-  %arrayidx13 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add11, i64 %add9
-  %0 = load i32, i32* %arrayidx13, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx13 = getelementptr inbounds [100 x i32], ptr %A, i64 %add11, i64 %add9
+  %0 = load i32, ptr %arrayidx13, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc14
 
 for.inc14:                                        ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc15 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc15, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end16
@@ -444,7 +445,7 @@ for.end16:                                        ; preds = %for.inc14
 ;;      A[4][j + 2] = i;
 ;;      *B++ = A[-2*i + 4][5*i + j];
 
-define void @prop8([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @prop8(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -457,31 +458,31 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc10
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc10 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc10 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %add = add nsw i64 %j.02, 2
-  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 4, i64 %add
-  store i32 %conv, i32* %arrayidx4, align 4
+  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 4, i64 %add
+  store i32 %conv, ptr %arrayidx4, align 4
   %mul = mul nsw i64 %i.03, 5
   %add5 = add nsw i64 %mul, %j.02
   %mul6 = mul nsw i64 %i.03, -2
   %add7 = add nsw i64 %mul6, 4
-  %arrayidx9 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add7, i64 %add5
-  %0 = load i32, i32* %arrayidx9, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx9 = getelementptr inbounds [100 x i32], ptr %A, i64 %add7, i64 %add5
+  %0 = load i32, ptr %arrayidx9, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc10
 
 for.inc10:                                        ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc11 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc11, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end12
@@ -496,7 +497,7 @@ for.end12:                                        ; preds = %for.inc10
 ;;      A[2*i + 4][5*i + j + 2] = i;
 ;;      *B++ = A[4][j];
 
-define void @prop9([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @prop9(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -509,31 +510,31 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc10
-  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc10 ]
+  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc10 ]
   %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ]
   br label %for.body3
 
 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
-  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
+  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, 5
   %add = add nsw i64 %mul, %j.02
   %add4 = add nsw i64 %add, 2
   %mul5 = shl nsw i64 %i.03, 1
   %add6 = add nsw i64 %mul5, 4
-  %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add6, i64 %add4
-  store i32 %conv, i32* %arrayidx7, align 4
-  %arrayidx9 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 4, i64 %j.02
-  %0 = load i32, i32* %arrayidx9, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
-  store i32 %0, i32* %B.addr.11, align 4
+  %arrayidx7 = getelementptr inbounds [100 x i32], ptr %A, i64 %add6, i64 %add4
+  store i32 %conv, ptr %arrayidx7, align 4
+  %arrayidx9 = getelementptr inbounds [100 x i32], ptr %A, i64 4, i64 %j.02
+  %0 = load i32, ptr %arrayidx9, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
+  store i32 %0, ptr %B.addr.11, align 4
   %inc = add nsw i64 %j.02, 1
   %exitcond = icmp ne i64 %inc, 100
   br i1 %exitcond, label %for.body3, label %for.inc10
 
 for.inc10:                                        ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
+  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100
   %inc11 = add nsw i64 %i.03, 1
   %exitcond5 = icmp ne i64 %inc11, 100
   br i1 %exitcond5, label %for.cond1.preheader, label %for.end12

diff  --git a/llvm/test/Analysis/DependenceAnalysis/Separability.ll b/llvm/test/Analysis/DependenceAnalysis/Separability.ll
index 577012cdd0e04..14334d84576c8 100644
--- a/llvm/test/Analysis/DependenceAnalysis/Separability.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/Separability.ll
@@ -12,7 +12,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;          A[n][i][j + k] = i;
 ;;          *B++ = A[10][i + 10][2*j - l];
 
-define void @sep0([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @sep0(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -24,53 +24,53 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc22
-  %B.addr.08 = phi i32* [ %B, %entry ], [ %scevgep11, %for.inc22 ]
+  %B.addr.08 = phi ptr [ %B, %entry ], [ %scevgep11, %for.inc22 ]
   %i.07 = phi i64 [ 0, %entry ], [ %inc23, %for.inc22 ]
   br label %for.cond4.preheader
 
 for.cond4.preheader:                              ; preds = %for.cond1.preheader, %for.inc19
-  %B.addr.16 = phi i32* [ %B.addr.08, %for.cond1.preheader ], [ %scevgep9, %for.inc19 ]
+  %B.addr.16 = phi ptr [ %B.addr.08, %for.cond1.preheader ], [ %scevgep9, %for.inc19 ]
   %j.05 = phi i64 [ 0, %for.cond1.preheader ], [ %inc20, %for.inc19 ]
   br label %for.cond7.preheader
 
 for.cond7.preheader:                              ; preds = %for.cond4.preheader, %for.inc16
-  %B.addr.24 = phi i32* [ %B.addr.16, %for.cond4.preheader ], [ %scevgep, %for.inc16 ]
+  %B.addr.24 = phi ptr [ %B.addr.16, %for.cond4.preheader ], [ %scevgep, %for.inc16 ]
   %k.03 = phi i64 [ 0, %for.cond4.preheader ], [ %inc17, %for.inc16 ]
   br label %for.body9
 
 for.body9:                                        ; preds = %for.cond7.preheader, %for.body9
   %l.02 = phi i64 [ 0, %for.cond7.preheader ], [ %inc, %for.body9 ]
-  %B.addr.31 = phi i32* [ %B.addr.24, %for.cond7.preheader ], [ %incdec.ptr, %for.body9 ]
+  %B.addr.31 = phi ptr [ %B.addr.24, %for.cond7.preheader ], [ %incdec.ptr, %for.body9 ]
   %conv = trunc i64 %i.07 to i32
   %add = add nsw i64 %j.05, %k.03
   %idxprom = sext i32 %n to i64
-  %arrayidx11 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %idxprom, i64 %i.07, i64 %add
-  store i32 %conv, i32* %arrayidx11, align 4
+  %arrayidx11 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %idxprom, i64 %i.07, i64 %add
+  store i32 %conv, ptr %arrayidx11, align 4
   %mul = shl nsw i64 %j.05, 1
   %sub = sub nsw i64 %mul, %l.02
   %add12 = add nsw i64 %i.07, 10
-  %arrayidx15 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 10, i64 %add12, i64 %sub
-  %0 = load i32, i32* %arrayidx15, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.31, i64 1
-  store i32 %0, i32* %B.addr.31, align 4
+  %arrayidx15 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 10, i64 %add12, i64 %sub
+  %0 = load i32, ptr %arrayidx15, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.31, i64 1
+  store i32 %0, ptr %B.addr.31, align 4
   %inc = add nsw i64 %l.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body9, label %for.inc16
 
 for.inc16:                                        ; preds = %for.body9
-  %scevgep = getelementptr i32, i32* %B.addr.24, i64 50
+  %scevgep = getelementptr i32, ptr %B.addr.24, i64 50
   %inc17 = add nsw i64 %k.03, 1
   %exitcond10 = icmp ne i64 %inc17, 50
   br i1 %exitcond10, label %for.cond7.preheader, label %for.inc19
 
 for.inc19:                                        ; preds = %for.inc16
-  %scevgep9 = getelementptr i32, i32* %B.addr.16, i64 2500
+  %scevgep9 = getelementptr i32, ptr %B.addr.16, i64 2500
   %inc20 = add nsw i64 %j.05, 1
   %exitcond12 = icmp ne i64 %inc20, 50
   br i1 %exitcond12, label %for.cond4.preheader, label %for.inc22
 
 for.inc22:                                        ; preds = %for.inc19
-  %scevgep11 = getelementptr i32, i32* %B.addr.08, i64 125000
+  %scevgep11 = getelementptr i32, ptr %B.addr.08, i64 125000
   %inc23 = add nsw i64 %i.07, 1
   %exitcond13 = icmp ne i64 %inc23, 50
   br i1 %exitcond13, label %for.cond1.preheader, label %for.end24
@@ -87,7 +87,7 @@ for.end24:                                        ; preds = %for.inc22
 ;;          A[i][i][j + k] = i;
 ;;          *B++ = A[10][i + 10][2*j - l];
 
-define void @sep1([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @sep1(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -99,52 +99,52 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc22
-  %B.addr.08 = phi i32* [ %B, %entry ], [ %scevgep11, %for.inc22 ]
+  %B.addr.08 = phi ptr [ %B, %entry ], [ %scevgep11, %for.inc22 ]
   %i.07 = phi i64 [ 0, %entry ], [ %inc23, %for.inc22 ]
   br label %for.cond4.preheader
 
 for.cond4.preheader:                              ; preds = %for.cond1.preheader, %for.inc19
-  %B.addr.16 = phi i32* [ %B.addr.08, %for.cond1.preheader ], [ %scevgep9, %for.inc19 ]
+  %B.addr.16 = phi ptr [ %B.addr.08, %for.cond1.preheader ], [ %scevgep9, %for.inc19 ]
   %j.05 = phi i64 [ 0, %for.cond1.preheader ], [ %inc20, %for.inc19 ]
   br label %for.cond7.preheader
 
 for.cond7.preheader:                              ; preds = %for.cond4.preheader, %for.inc16
-  %B.addr.24 = phi i32* [ %B.addr.16, %for.cond4.preheader ], [ %scevgep, %for.inc16 ]
+  %B.addr.24 = phi ptr [ %B.addr.16, %for.cond4.preheader ], [ %scevgep, %for.inc16 ]
   %k.03 = phi i64 [ 0, %for.cond4.preheader ], [ %inc17, %for.inc16 ]
   br label %for.body9
 
 for.body9:                                        ; preds = %for.cond7.preheader, %for.body9
   %l.02 = phi i64 [ 0, %for.cond7.preheader ], [ %inc, %for.body9 ]
-  %B.addr.31 = phi i32* [ %B.addr.24, %for.cond7.preheader ], [ %incdec.ptr, %for.body9 ]
+  %B.addr.31 = phi ptr [ %B.addr.24, %for.cond7.preheader ], [ %incdec.ptr, %for.body9 ]
   %conv = trunc i64 %i.07 to i32
   %add = add nsw i64 %j.05, %k.03
-  %arrayidx11 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.07, i64 %i.07, i64 %add
-  store i32 %conv, i32* %arrayidx11, align 4
+  %arrayidx11 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %i.07, i64 %i.07, i64 %add
+  store i32 %conv, ptr %arrayidx11, align 4
   %mul = shl nsw i64 %j.05, 1
   %sub = sub nsw i64 %mul, %l.02
   %add12 = add nsw i64 %i.07, 10
-  %arrayidx15 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 10, i64 %add12, i64 %sub
-  %0 = load i32, i32* %arrayidx15, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.31, i64 1
-  store i32 %0, i32* %B.addr.31, align 4
+  %arrayidx15 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 10, i64 %add12, i64 %sub
+  %0 = load i32, ptr %arrayidx15, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.31, i64 1
+  store i32 %0, ptr %B.addr.31, align 4
   %inc = add nsw i64 %l.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body9, label %for.inc16
 
 for.inc16:                                        ; preds = %for.body9
-  %scevgep = getelementptr i32, i32* %B.addr.24, i64 50
+  %scevgep = getelementptr i32, ptr %B.addr.24, i64 50
   %inc17 = add nsw i64 %k.03, 1
   %exitcond10 = icmp ne i64 %inc17, 50
   br i1 %exitcond10, label %for.cond7.preheader, label %for.inc19
 
 for.inc19:                                        ; preds = %for.inc16
-  %scevgep9 = getelementptr i32, i32* %B.addr.16, i64 2500
+  %scevgep9 = getelementptr i32, ptr %B.addr.16, i64 2500
   %inc20 = add nsw i64 %j.05, 1
   %exitcond12 = icmp ne i64 %inc20, 50
   br i1 %exitcond12, label %for.cond4.preheader, label %for.inc22
 
 for.inc22:                                        ; preds = %for.inc19
-  %scevgep11 = getelementptr i32, i32* %B.addr.08, i64 125000
+  %scevgep11 = getelementptr i32, ptr %B.addr.08, i64 125000
   %inc23 = add nsw i64 %i.07, 1
   %exitcond13 = icmp ne i64 %inc23, 50
   br i1 %exitcond13, label %for.cond1.preheader, label %for.end24
@@ -157,11 +157,12 @@ for.end24:                                        ; preds = %for.inc22
 ;;  for (long int i = 0; i < 50; i++)
 ;;    for (long int j = 0; j < 50; j++)
 ;;      for (long int k = 0; k < 50; k++)
+;;        for (long int l = 0; l ptr -10]!
 ;;        for (long int l = 0; l < 50; l++) {
 ;;          A[i][i][i + k][l] = i;
 ;;          *B++ = A[10][i + 10][j + k][l + 10];
 
-define void @sep2([100 x [100 x [100 x i32]]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @sep2(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -173,52 +174,52 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc26
-  %B.addr.08 = phi i32* [ %B, %entry ], [ %scevgep11, %for.inc26 ]
+  %B.addr.08 = phi ptr [ %B, %entry ], [ %scevgep11, %for.inc26 ]
   %i.07 = phi i64 [ 0, %entry ], [ %inc27, %for.inc26 ]
   br label %for.cond4.preheader
 
 for.cond4.preheader:                              ; preds = %for.cond1.preheader, %for.inc23
-  %B.addr.16 = phi i32* [ %B.addr.08, %for.cond1.preheader ], [ %scevgep9, %for.inc23 ]
+  %B.addr.16 = phi ptr [ %B.addr.08, %for.cond1.preheader ], [ %scevgep9, %for.inc23 ]
   %j.05 = phi i64 [ 0, %for.cond1.preheader ], [ %inc24, %for.inc23 ]
   br label %for.cond7.preheader
 
 for.cond7.preheader:                              ; preds = %for.cond4.preheader, %for.inc20
-  %B.addr.24 = phi i32* [ %B.addr.16, %for.cond4.preheader ], [ %scevgep, %for.inc20 ]
+  %B.addr.24 = phi ptr [ %B.addr.16, %for.cond4.preheader ], [ %scevgep, %for.inc20 ]
   %k.03 = phi i64 [ 0, %for.cond4.preheader ], [ %inc21, %for.inc20 ]
   br label %for.body9
 
 for.body9:                                        ; preds = %for.cond7.preheader, %for.body9
   %l.02 = phi i64 [ 0, %for.cond7.preheader ], [ %inc, %for.body9 ]
-  %B.addr.31 = phi i32* [ %B.addr.24, %for.cond7.preheader ], [ %incdec.ptr, %for.body9 ]
+  %B.addr.31 = phi ptr [ %B.addr.24, %for.cond7.preheader ], [ %incdec.ptr, %for.body9 ]
   %conv = trunc i64 %i.07 to i32
   %add = add nsw i64 %i.07, %k.03
-  %arrayidx12 = getelementptr inbounds [100 x [100 x [100 x i32]]], [100 x [100 x [100 x i32]]]* %A, i64 %i.07, i64 %i.07, i64 %add, i64 %l.02
-  store i32 %conv, i32* %arrayidx12, align 4
+  %arrayidx12 = getelementptr inbounds [100 x [100 x [100 x i32]]], ptr %A, i64 %i.07, i64 %i.07, i64 %add, i64 %l.02
+  store i32 %conv, ptr %arrayidx12, align 4
   %add13 = add nsw i64 %l.02, 10
   %add14 = add nsw i64 %j.05, %k.03
   %add15 = add nsw i64 %i.07, 10
-  %arrayidx19 = getelementptr inbounds [100 x [100 x [100 x i32]]], [100 x [100 x [100 x i32]]]* %A, i64 10, i64 %add15, i64 %add14, i64 %add13
-  %0 = load i32, i32* %arrayidx19, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.31, i64 1
-  store i32 %0, i32* %B.addr.31, align 4
+  %arrayidx19 = getelementptr inbounds [100 x [100 x [100 x i32]]], ptr %A, i64 10, i64 %add15, i64 %add14, i64 %add13
+  %0 = load i32, ptr %arrayidx19, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.31, i64 1
+  store i32 %0, ptr %B.addr.31, align 4
   %inc = add nsw i64 %l.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body9, label %for.inc20
 
 for.inc20:                                        ; preds = %for.body9
-  %scevgep = getelementptr i32, i32* %B.addr.24, i64 50
+  %scevgep = getelementptr i32, ptr %B.addr.24, i64 50
   %inc21 = add nsw i64 %k.03, 1
   %exitcond10 = icmp ne i64 %inc21, 50
   br i1 %exitcond10, label %for.cond7.preheader, label %for.inc23
 
 for.inc23:                                        ; preds = %for.inc20
-  %scevgep9 = getelementptr i32, i32* %B.addr.16, i64 2500
+  %scevgep9 = getelementptr i32, ptr %B.addr.16, i64 2500
   %inc24 = add nsw i64 %j.05, 1
   %exitcond12 = icmp ne i64 %inc24, 50
   br i1 %exitcond12, label %for.cond4.preheader, label %for.inc26
 
 for.inc26:                                        ; preds = %for.inc23
-  %scevgep11 = getelementptr i32, i32* %B.addr.08, i64 125000
+  %scevgep11 = getelementptr i32, ptr %B.addr.08, i64 125000
   %inc27 = add nsw i64 %i.07, 1
   %exitcond13 = icmp ne i64 %inc27, 50
   br i1 %exitcond13, label %for.cond1.preheader, label %for.end28
@@ -231,11 +232,12 @@ for.end28:                                        ; preds = %for.inc26
 ;;  for (long int i = 0; i < 50; i++)
 ;;    for (long int j = 0; j < 50; j++)
 ;;      for (long int k = 0; k < 50; k++)
+;;        for (long int l = 0; l ptr]!
 ;;        for (long int l = 0; l < 50; l++) {
 ;;          A[i][i][i + k][l + k] = i;
 ;;          *B++ = A[10][i + 10][j + k][l + 10];
 
-define void @sep3([100 x [100 x [100 x i32]]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @sep3(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   br label %for.cond1.preheader
 
@@ -247,53 +249,53 @@ entry:
 ; CHECK: da analyze - none!
 
 for.cond1.preheader:                              ; preds = %entry, %for.inc27
-  %B.addr.08 = phi i32* [ %B, %entry ], [ %scevgep11, %for.inc27 ]
+  %B.addr.08 = phi ptr [ %B, %entry ], [ %scevgep11, %for.inc27 ]
   %i.07 = phi i64 [ 0, %entry ], [ %inc28, %for.inc27 ]
   br label %for.cond4.preheader
 
 for.cond4.preheader:                              ; preds = %for.cond1.preheader, %for.inc24
-  %B.addr.16 = phi i32* [ %B.addr.08, %for.cond1.preheader ], [ %scevgep9, %for.inc24 ]
+  %B.addr.16 = phi ptr [ %B.addr.08, %for.cond1.preheader ], [ %scevgep9, %for.inc24 ]
   %j.05 = phi i64 [ 0, %for.cond1.preheader ], [ %inc25, %for.inc24 ]
   br label %for.cond7.preheader
 
 for.cond7.preheader:                              ; preds = %for.cond4.preheader, %for.inc21
-  %B.addr.24 = phi i32* [ %B.addr.16, %for.cond4.preheader ], [ %scevgep, %for.inc21 ]
+  %B.addr.24 = phi ptr [ %B.addr.16, %for.cond4.preheader ], [ %scevgep, %for.inc21 ]
   %k.03 = phi i64 [ 0, %for.cond4.preheader ], [ %inc22, %for.inc21 ]
   br label %for.body9
 
 for.body9:                                        ; preds = %for.cond7.preheader, %for.body9
   %l.02 = phi i64 [ 0, %for.cond7.preheader ], [ %inc, %for.body9 ]
-  %B.addr.31 = phi i32* [ %B.addr.24, %for.cond7.preheader ], [ %incdec.ptr, %for.body9 ]
+  %B.addr.31 = phi ptr [ %B.addr.24, %for.cond7.preheader ], [ %incdec.ptr, %for.body9 ]
   %conv = trunc i64 %i.07 to i32
   %add = add nsw i64 %l.02, %k.03
   %add10 = add nsw i64 %i.07, %k.03
-  %arrayidx13 = getelementptr inbounds [100 x [100 x [100 x i32]]], [100 x [100 x [100 x i32]]]* %A, i64 %i.07, i64 %i.07, i64 %add10, i64 %add
-  store i32 %conv, i32* %arrayidx13, align 4
+  %arrayidx13 = getelementptr inbounds [100 x [100 x [100 x i32]]], ptr %A, i64 %i.07, i64 %i.07, i64 %add10, i64 %add
+  store i32 %conv, ptr %arrayidx13, align 4
   %add14 = add nsw i64 %l.02, 10
   %add15 = add nsw i64 %j.05, %k.03
   %add16 = add nsw i64 %i.07, 10
-  %arrayidx20 = getelementptr inbounds [100 x [100 x [100 x i32]]], [100 x [100 x [100 x i32]]]* %A, i64 10, i64 %add16, i64 %add15, i64 %add14
-  %0 = load i32, i32* %arrayidx20, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.31, i64 1
-  store i32 %0, i32* %B.addr.31, align 4
+  %arrayidx20 = getelementptr inbounds [100 x [100 x [100 x i32]]], ptr %A, i64 10, i64 %add16, i64 %add15, i64 %add14
+  %0 = load i32, ptr %arrayidx20, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.31, i64 1
+  store i32 %0, ptr %B.addr.31, align 4
   %inc = add nsw i64 %l.02, 1
   %exitcond = icmp ne i64 %inc, 50
   br i1 %exitcond, label %for.body9, label %for.inc21
 
 for.inc21:                                        ; preds = %for.body9
-  %scevgep = getelementptr i32, i32* %B.addr.24, i64 50
+  %scevgep = getelementptr i32, ptr %B.addr.24, i64 50
   %inc22 = add nsw i64 %k.03, 1
   %exitcond10 = icmp ne i64 %inc22, 50
   br i1 %exitcond10, label %for.cond7.preheader, label %for.inc24
 
 for.inc24:                                        ; preds = %for.inc21
-  %scevgep9 = getelementptr i32, i32* %B.addr.16, i64 2500
+  %scevgep9 = getelementptr i32, ptr %B.addr.16, i64 2500
   %inc25 = add nsw i64 %j.05, 1
   %exitcond12 = icmp ne i64 %inc25, 50
   br i1 %exitcond12, label %for.cond4.preheader, label %for.inc27
 
 for.inc27:                                        ; preds = %for.inc24
-  %scevgep11 = getelementptr i32, i32* %B.addr.08, i64 125000
+  %scevgep11 = getelementptr i32, ptr %B.addr.08, i64 125000
   %inc28 = add nsw i64 %i.07, 1
   %exitcond13 = icmp ne i64 %inc28, 50
   br i1 %exitcond13, label %for.cond1.preheader, label %for.end29

diff  --git a/llvm/test/Analysis/DependenceAnalysis/SimpleSIVNoValidityCheck.ll b/llvm/test/Analysis/DependenceAnalysis/SimpleSIVNoValidityCheck.ll
index 45717bc537999..860795138c983 100644
--- a/llvm/test/Analysis/DependenceAnalysis/SimpleSIVNoValidityCheck.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/SimpleSIVNoValidityCheck.ll
@@ -19,7 +19,7 @@
 ;;       a[i][j] = a[i+1][j-2];
 ;; }
 
-define void @t1(i32 signext %n, i32 signext %m, i32* %a) {
+define void @t1(i32 signext %n, i32 signext %m, ptr %a) {
 entry:
   %0 = zext i32 %m to i64
   %1 = sext i32 %m to i64
@@ -37,14 +37,14 @@ for.body4:                                        ; preds = %for.body, %for.body
   %indvars.iv6 = phi i64 [ %indvars.iv.next, %for.body4 ], [ 2, %for.body ]
   %3 = add nuw nsw i64 %indvars.iv28, 1
   %4 = mul nuw nsw i64 %3, %0
-  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %4
+  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %4
   %5 = add nsw i64 %indvars.iv6, -2
-  %arrayidx7 = getelementptr inbounds i32, i32* %arrayidx, i64 %5
-  %6 = load i32, i32* %arrayidx7, align 4
+  %arrayidx7 = getelementptr inbounds i32, ptr %arrayidx, i64 %5
+  %6 = load i32, ptr %arrayidx7, align 4
   %7 = mul nuw nsw i64 %indvars.iv28, %0
-  %arrayidx9 = getelementptr inbounds i32, i32* %a, i64 %7
-  %arrayidx11 = getelementptr inbounds i32, i32* %arrayidx9, i64 %indvars.iv6
-  store i32 %6, i32* %arrayidx11, align 4
+  %arrayidx9 = getelementptr inbounds i32, ptr %a, i64 %7
+  %arrayidx11 = getelementptr inbounds i32, ptr %arrayidx9, i64 %indvars.iv6
+  store i32 %6, ptr %arrayidx11, align 4
   %indvars.iv.next = add nuw nsw i64 %indvars.iv6, 1
   %cmp2 = icmp slt i64 %indvars.iv.next, %1
   br i1 %cmp2, label %for.body4, label %for.inc12
@@ -78,7 +78,7 @@ for.end14:                                        ; preds = %entry, %for.inc12
 ;;             a[i1][i2][i3][i4][i5] = a[i1+1][i2-2][i3][i4-3][i5+2];
 ;; }
 
-define void @t2(i32 signext %n, i32 signext %m, i32* %a) {
+define void @t2(i32 signext %n, i32 signext %m, ptr %a) {
 entry:
   %0 = zext i32 %n to i64
   %1 = zext i32 %n to i64
@@ -121,37 +121,37 @@ for.body17:                                       ; preds = %for.body12, %for.bo
   %9 = mul nuw i64 %8, %2
   %10 = mul nuw i64 %9, %3
   %11 = mul nsw i64 %10, %7
-  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %11
+  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %11
   %12 = add nsw i64 %indvars.iv924, -2
   %13 = mul nuw i64 %1, %2
   %14 = mul nuw i64 %13, %3
   %15 = mul nsw i64 %14, %12
-  %arrayidx20 = getelementptr inbounds i32, i32* %arrayidx, i64 %15
+  %arrayidx20 = getelementptr inbounds i32, ptr %arrayidx, i64 %15
   %16 = mul nuw i64 %2, %3
   %17 = mul nsw i64 %16, %indvars.iv521
-  %arrayidx22 = getelementptr inbounds i32, i32* %arrayidx20, i64 %17
+  %arrayidx22 = getelementptr inbounds i32, ptr %arrayidx20, i64 %17
   %18 = add nsw i64 %indvars.iv218, -3
   %19 = mul nuw nsw i64 %18, %3
-  %arrayidx25 = getelementptr inbounds i32, i32* %arrayidx22, i64 %19
+  %arrayidx25 = getelementptr inbounds i32, ptr %arrayidx22, i64 %19
   %20 = add nuw nsw i64 %indvars.iv16, 2
-  %arrayidx28 = getelementptr inbounds i32, i32* %arrayidx25, i64 %20
-  %21 = load i32, i32* %arrayidx28, align 4
+  %arrayidx28 = getelementptr inbounds i32, ptr %arrayidx25, i64 %20
+  %21 = load i32, ptr %arrayidx28, align 4
   %22 = mul nuw i64 %0, %1
   %23 = mul nuw i64 %22, %2
   %24 = mul nuw i64 %23, %3
   %25 = mul nsw i64 %24, %indvars.iv1227
-  %arrayidx30 = getelementptr inbounds i32, i32* %a, i64 %25
+  %arrayidx30 = getelementptr inbounds i32, ptr %a, i64 %25
   %26 = mul nuw i64 %1, %2
   %27 = mul nuw i64 %26, %3
   %28 = mul nsw i64 %27, %indvars.iv924
-  %arrayidx32 = getelementptr inbounds i32, i32* %arrayidx30, i64 %28
+  %arrayidx32 = getelementptr inbounds i32, ptr %arrayidx30, i64 %28
   %29 = mul nuw i64 %2, %3
   %30 = mul nsw i64 %29, %indvars.iv521
-  %arrayidx34 = getelementptr inbounds i32, i32* %arrayidx32, i64 %30
+  %arrayidx34 = getelementptr inbounds i32, ptr %arrayidx32, i64 %30
   %31 = mul nuw nsw i64 %indvars.iv218, %3
-  %arrayidx36 = getelementptr inbounds i32, i32* %arrayidx34, i64 %31
-  %arrayidx38 = getelementptr inbounds i32, i32* %arrayidx36, i64 %indvars.iv16
-  store i32 %21, i32* %arrayidx38, align 4
+  %arrayidx36 = getelementptr inbounds i32, ptr %arrayidx34, i64 %31
+  %arrayidx38 = getelementptr inbounds i32, ptr %arrayidx36, i64 %indvars.iv16
+  store i32 %21, ptr %arrayidx38, align 4
   %indvars.iv.next = add nuw nsw i64 %indvars.iv16, 1
   %cmp15 = icmp slt i64 %indvars.iv.next, %6
   br i1 %cmp15, label %for.body17, label %for.inc39
@@ -202,7 +202,7 @@ for.end50:                                        ; preds = %entry, %for.inc48
 ;;       a[i][j] = a[i+1][j-2];
 ;; }
 
-define void @t3(i64 %n, i64 %m, i64 %lb, float* %a) {
+define void @t3(i64 %n, i64 %m, i64 %lb, ptr %a) {
 entry:
   %0 = add i64 %n, -1
   %exitcond3 = icmp ne i64 0, %0
@@ -223,16 +223,14 @@ for.body4:                                        ; preds = %for.body4.preheader
   %j.02 = phi i64 [ %inc, %for.body4 ], [ %lb, %for.body4.preheader ]
   %add = add i64 %i.04, 1
   %1 = mul nsw i64 %add, %m
-  %arrayidx = getelementptr inbounds float, float* %a, i64 %1
+  %arrayidx = getelementptr inbounds float, ptr %a, i64 %1
   %sub5 = add i64 %j.02, -2
-  %arrayidx6 = getelementptr inbounds float, float* %arrayidx, i64 %sub5
-  %2 = bitcast float* %arrayidx6 to i32*
-  %3 = load i32, i32* %2, align 4
-  %4 = mul nsw i64 %i.04, %m
-  %arrayidx7 = getelementptr inbounds float, float* %a, i64 %4
-  %arrayidx8 = getelementptr inbounds float, float* %arrayidx7, i64 %j.02
-  %5 = bitcast float* %arrayidx8 to i32*
-  store i32 %3, i32* %5, align 4
+  %arrayidx6 = getelementptr inbounds float, ptr %arrayidx, i64 %sub5
+  %2 = load i32, ptr %arrayidx6, align 4
+  %3 = mul nsw i64 %i.04, %m
+  %arrayidx7 = getelementptr inbounds float, ptr %a, i64 %3
+  %arrayidx8 = getelementptr inbounds float, ptr %arrayidx7, i64 %j.02
+  store i32 %2, ptr %arrayidx8, align 4
   %inc = add i64 %j.02, 1
   %cmp2 = icmp ult i64 %inc, %m
   br i1 %cmp2, label %for.body4, label %for.inc9.loopexit

diff  --git a/llvm/test/Analysis/DependenceAnalysis/SimpleSIVNoValidityCheckFixedSize.ll b/llvm/test/Analysis/DependenceAnalysis/SimpleSIVNoValidityCheckFixedSize.ll
index 2514b15e83638..b8ed6ab916c45 100644
--- a/llvm/test/Analysis/DependenceAnalysis/SimpleSIVNoValidityCheckFixedSize.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/SimpleSIVNoValidityCheckFixedSize.ll
@@ -17,7 +17,7 @@
 ;; }
 ;;
 ;; Note that there is a getelementptr with index 0, make sure we can analyze this case.
-define void @t1([2048 x i32]* %a) {
+define void @t1(ptr %a) {
 entry:
   br label %for.body
 
@@ -29,11 +29,10 @@ for.body4:                                        ; preds = %for.body, %for.body
   %indvars.iv = phi i64 [ 2, %for.body ], [ %indvars.iv.next, %for.body4 ]
   %0 = add nuw nsw i64 %indvars.iv4, 1
   %1 = add nsw i64 %indvars.iv, -2
-  %arrayidx6 = getelementptr inbounds [2048 x i32], [2048 x i32]* %a, i64 %0, i64 %1
-  %2 = load i32, i32* %arrayidx6, align 4
-  %a_gep = getelementptr inbounds [2048 x i32], [2048 x i32]* %a, i64 0
-  %arrayidx10 = getelementptr inbounds [2048 x i32], [2048 x i32]* %a_gep, i64 %indvars.iv4, i64 %indvars.iv
-  store i32 %2, i32* %arrayidx10, align 4
+  %arrayidx6 = getelementptr inbounds [2048 x i32], ptr %a, i64 %0, i64 %1
+  %2 = load i32, ptr %arrayidx6, align 4
+  %arrayidx10 = getelementptr inbounds [2048 x i32], ptr %a, i64 %indvars.iv4, i64 %indvars.iv
+  store i32 %2, ptr %arrayidx10, align 4
   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
   %exitcond = icmp ne i64 %indvars.iv.next, 2048
   br i1 %exitcond, label %for.body4, label %for.inc11
@@ -53,7 +52,7 @@ for.end13:                                        ; preds = %for.inc11
 ;; Similar to @t1 but includes a call with a "returned" arg, make sure we can analyze
 ;; this case.
 
-define void @t2([2048 x i32]* %a) {
+define void @t2(ptr %a) {
 entry:
   br label %for.body
 
@@ -65,11 +64,11 @@ for.body4:                                        ; preds = %for.body, %for.body
   %indvars.iv = phi i64 [ 2, %for.body ], [ %indvars.iv.next, %for.body4 ]
   %0 = add nuw nsw i64 %indvars.iv4, 1
   %1 = add nsw i64 %indvars.iv, -2
-  %arrayidx6 = getelementptr inbounds [2048 x i32], [2048 x i32]* %a, i64 %0, i64 %1
-  %2 = load i32, i32* %arrayidx6, align 4
-  %call = call [2048 x i32]* @func_with_returned_arg([2048 x i32]* returned %a)
-  %arrayidx10 = getelementptr inbounds [2048 x i32], [2048 x i32]* %call, i64 %indvars.iv4, i64 %indvars.iv
-  store i32 %2, i32* %arrayidx10, align 4
+  %arrayidx6 = getelementptr inbounds [2048 x i32], ptr %a, i64 %0, i64 %1
+  %2 = load i32, ptr %arrayidx6, align 4
+  %call = call ptr @func_with_returned_arg(ptr returned %a)
+  %arrayidx10 = getelementptr inbounds [2048 x i32], ptr %call, i64 %indvars.iv4, i64 %indvars.iv
+  store i32 %2, ptr %arrayidx10, align 4
   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
   %exitcond = icmp ne i64 %indvars.iv.next, 2048
   br i1 %exitcond, label %for.body4, label %for.inc11
@@ -83,7 +82,7 @@ for.end13:                                        ; preds = %for.inc11
   ret void
 }
 
-declare [2048 x i32]* @func_with_returned_arg([2048 x i32]* returned %arg)
+declare ptr @func_with_returned_arg(ptr returned %arg)
 
 ; CHECK-LABEL: t3
 ; CHECK: da analyze - none!
@@ -101,7 +100,7 @@ declare [2048 x i32]* @func_with_returned_arg([2048 x i32]* returned %arg)
 ;;             a[i1][i2][i3][i4][i5] = a[i1+1][i2-2][i3][i4-3][i5+2];
 ;; }
 
-define void @t3([1024 x [1024 x [1024 x [2048 x i32]]]]* %a) {
+define void @t3(ptr %a) {
 entry:
   br label %for.body
 
@@ -127,10 +126,10 @@ for.body16:                                       ; preds = %for.body12, %for.bo
   %1 = add nsw i64 %indvars.iv14, -2
   %2 = add nsw i64 %indvars.iv7, -3
   %3 = add nuw nsw i64 %indvars.iv, 2
-  %arrayidx26 = getelementptr inbounds [1024 x [1024 x [1024 x [2048 x i32]]]], [1024 x [1024 x [1024 x [2048 x i32]]]]* %a, i64 %0, i64 %1, i64 %indvars.iv11, i64 %2, i64 %3
-  %4 = load i32, i32* %arrayidx26, align 4
-  %arrayidx36 = getelementptr inbounds [1024 x [1024 x [1024 x [2048 x i32]]]], [1024 x [1024 x [1024 x [2048 x i32]]]]* %a, i64 %indvars.iv18, i64 %indvars.iv14, i64 %indvars.iv11, i64 %indvars.iv7, i64 %indvars.iv
-  store i32 %4, i32* %arrayidx36, align 4
+  %arrayidx26 = getelementptr inbounds [1024 x [1024 x [1024 x [2048 x i32]]]], ptr %a, i64 %0, i64 %1, i64 %indvars.iv11, i64 %2, i64 %3
+  %4 = load i32, ptr %arrayidx26, align 4
+  %arrayidx36 = getelementptr inbounds [1024 x [1024 x [1024 x [2048 x i32]]]], ptr %a, i64 %indvars.iv18, i64 %indvars.iv14, i64 %indvars.iv11, i64 %indvars.iv7, i64 %indvars.iv
+  store i32 %4, ptr %arrayidx36, align 4
   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
   %exitcond = icmp ne i64 %indvars.iv.next, 2046
   br i1 %exitcond, label %for.body16, label %for.inc37

diff  --git a/llvm/test/Analysis/DependenceAnalysis/StrongSIV.ll b/llvm/test/Analysis/DependenceAnalysis/StrongSIV.ll
index 40a3f968a3b04..59bc406fd4bd5 100644
--- a/llvm/test/Analysis/DependenceAnalysis/StrongSIV.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/StrongSIV.ll
@@ -9,7 +9,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;    A[i + 2] = i;
 ;;    *B++ = A[i];
 
-define void @strong0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @strong0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp sgt i64 %n, 0
   br i1 %cmp1, label %for.body.preheader, label %for.end
@@ -26,15 +26,15 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %0 = add nsw i64 %indvars.iv, 2
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %0
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %0
   %1 = trunc i64 %indvars.iv to i32
-  store i32 %1, i32* %arrayidx, align 4
-  %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
-  %2 = load i32, i32* %arrayidx3, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %2, i32* %B.addr.02, align 4
+  store i32 %1, ptr %arrayidx, align 4
+  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %indvars.iv
+  %2 = load i32, ptr %arrayidx3, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %2, ptr %B.addr.02, align 4
   %indvars.iv.next = add i64 %indvars.iv, 1
   %exitcond = icmp ne i64 %indvars.iv.next, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -51,7 +51,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[i + 2] = i;
 ;;    *B++ = A[i];
 
-define void @strong1(i32* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @strong1(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp sgt i32 %n, 0
   br i1 %cmp1, label %for.body.preheader, label %for.end
@@ -69,15 +69,15 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv2 = trunc i64 %i.03 to i32
   %add = add nsw i64 %i.03, 2
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv2, i32* %arrayidx, align 4
-  %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %i.03
-  %1 = load i32, i32* %arrayidx3, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %1, i32* %B.addr.02, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv2, ptr %arrayidx, align 4
+  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %i.03
+  %1 = load i32, ptr %arrayidx3, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %1, ptr %B.addr.02, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %0
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -94,7 +94,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[i + 2] = i;
 ;;    *B++ = A[i];
 
-define void @strong2(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @strong2(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -111,15 +111,15 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %add = add i64 %i.03, 2
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %i.03
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %i.03
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -136,7 +136,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[i + 2] = i;
 ;;    *B++ = A[i];
 
-define void @strong3(i32* %A, i32* %B, i32 %n) nounwind uwtable ssp {
+define void @strong3(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp sgt i32 %n, 0
   br i1 %cmp1, label %for.body.preheader, label %for.end
@@ -153,15 +153,15 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %0 = add nsw i64 %indvars.iv, 2
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %0
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %0
   %1 = trunc i64 %indvars.iv to i32
-  store i32 %1, i32* %arrayidx, align 4
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
-  %2 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %2, i32* %B.addr.02, align 4
+  store i32 %1, ptr %arrayidx, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %indvars.iv
+  %2 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %2, ptr %B.addr.02, align 4
   %indvars.iv.next = add i64 %indvars.iv, 1
   %lftr.wideiv = trunc i64 %indvars.iv.next to i32
   %exitcond = icmp ne i32 %lftr.wideiv, %n
@@ -179,7 +179,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[i + 19] = i;
 ;;    *B++ = A[i];
 
-define void @strong4(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @strong4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -192,15 +192,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %add = add i64 %i.02, 19
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %i.02
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %i.02
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 19
   br i1 %exitcond, label %for.body, label %for.end
@@ -214,7 +214,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[i + 19] = i;
 ;;    *B++ = A[i];
 
-define void @strong5(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @strong5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -227,15 +227,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %add = add i64 %i.02, 19
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %i.02
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %i.02
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 20
   br i1 %exitcond, label %for.body, label %for.end
@@ -249,7 +249,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[2*i + 6] = i;
 ;;    *B++ = A[2*i];
 
-define void @strong6(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @strong6(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -262,17 +262,17 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = shl i64 %i.02, 1
   %add = add i64 %mul, 6
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul1 = shl i64 %i.02, 1
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %mul1
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %mul1
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 20
   br i1 %exitcond, label %for.body, label %for.end
@@ -286,7 +286,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[2*i + 7] = i;
 ;;    *B++ = A[2*i];
 
-define void @strong7(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @strong7(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -299,17 +299,17 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = shl i64 %i.02, 1
   %add = add i64 %mul, 7
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul1 = shl i64 %i.02, 1
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %mul1
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %mul1
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 20
   br i1 %exitcond, label %for.body, label %for.end
@@ -323,7 +323,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[i + n] = i;
 ;;    *B++ = A[i];
 
-define void @strong8(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @strong8(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -336,15 +336,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %add = add i64 %i.02, %n
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %i.02
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %i.02
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 20
   br i1 %exitcond, label %for.body, label %for.end
@@ -358,7 +358,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[i + n] = i;
 ;;    *B++ = A[i + 2*n];
 
-define void @strong9(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @strong9(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -375,17 +375,17 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %add = add i64 %i.03, %n
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul = shl i64 %n, 1
   %add1 = add i64 %i.03, %mul
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add1
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %add1
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -402,7 +402,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[n*i + 5] = i;
 ;;    *B++ = A[n*i + 5];
 
-define void @strong10(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @strong10(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -415,18 +415,18 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = mul i64 %i.02, %n
   %add = add i64 %mul, 5
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul1 = mul i64 %i.02, %n
   %add2 = add i64 %mul1, 5
-  %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %add2
-  %0 = load i32, i32* %arrayidx3, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %add2
+  %0 = load i32, ptr %arrayidx3, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 1000
   br i1 %exitcond, label %for.body, label %for.end

diff  --git a/llvm/test/Analysis/DependenceAnalysis/SymbolicRDIV.ll b/llvm/test/Analysis/DependenceAnalysis/SymbolicRDIV.ll
index 8aa2e059269eb..238ab628e369e 100644
--- a/llvm/test/Analysis/DependenceAnalysis/SymbolicRDIV.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/SymbolicRDIV.ll
@@ -11,7 +11,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;  for (long int j = 0; j < n2; j++)
 ;;    *B++ = A[3*j + 3*n1];
 
-define void @symbolicrdiv0(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
+define void @symbolicrdiv0(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
 entry:
   %cmp4 = icmp eq i64 %n1, 0
   br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
@@ -42,21 +42,21 @@ for.body:                                         ; preds = %for.body.preheader,
   %conv = trunc i64 %i.05 to i32
   %mul = shl nsw i64 %i.05, 1
   %add = add i64 %mul, %n1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.05, 1
   %exitcond = icmp ne i64 %inc, %n1
   br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.03 = phi i64 [ %inc10, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
   %mul56 = add i64 %j.03, %n1
   %add7 = mul i64 %mul56, 3
-  %arrayidx8 = getelementptr inbounds i32, i32* %A, i64 %add7
-  %0 = load i32, i32* %arrayidx8, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx8 = getelementptr inbounds i32, ptr %A, i64 %add7
+  %0 = load i32, ptr %arrayidx8, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc10 = add nsw i64 %j.03, 1
   %exitcond7 = icmp ne i64 %inc10, %n2
   br i1 %exitcond7, label %for.body4, label %for.end11.loopexit
@@ -74,7 +74,7 @@ for.end11:                                        ; preds = %for.end11.loopexit,
 ;;  for (long int j = 0; j < n2; j++)
 ;;    *B++ = A[3*j + 2*n2];
 
-define void @symbolicrdiv1(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
+define void @symbolicrdiv1(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
 entry:
   %cmp4 = icmp eq i64 %n1, 0
   br i1 %cmp4, label %for.cond2.preheader, label %for.body.preheader
@@ -106,22 +106,22 @@ for.body:                                         ; preds = %for.body.preheader,
   %mul = shl nsw i64 %i.05, 1
   %mul1 = mul i64 %n2, 5
   %add = add i64 %mul, %mul1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.05, 1
   %exitcond = icmp ne i64 %inc, %n1
   br i1 %exitcond, label %for.body, label %for.cond2.preheader.loopexit
 
 for.body5:                                        ; preds = %for.body5.preheader, %for.body5
   %j.03 = phi i64 [ %inc11, %for.body5 ], [ 0, %for.body5.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body5 ], [ %B, %for.body5.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body5 ], [ %B, %for.body5.preheader ]
   %mul6 = mul nsw i64 %j.03, 3
   %mul7 = shl i64 %n2, 1
   %add8 = add i64 %mul6, %mul7
-  %arrayidx9 = getelementptr inbounds i32, i32* %A, i64 %add8
-  %0 = load i32, i32* %arrayidx9, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx9 = getelementptr inbounds i32, ptr %A, i64 %add8
+  %0 = load i32, ptr %arrayidx9, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc11 = add nsw i64 %j.03, 1
   %exitcond6 = icmp ne i64 %inc11, %n2
   br i1 %exitcond6, label %for.body5, label %for.end12.loopexit
@@ -139,7 +139,7 @@ for.end12:                                        ; preds = %for.end12.loopexit,
 ;;  for (long int j = 0; j < n2; j++)
 ;;    *B++ = A[-j + 2*n1];
 
-define void @symbolicrdiv2(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
+define void @symbolicrdiv2(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
 entry:
   %cmp4 = icmp eq i64 %n1, 0
   br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
@@ -170,21 +170,21 @@ for.body:                                         ; preds = %for.body.preheader,
   %conv = trunc i64 %i.05 to i32
   %mul = shl nsw i64 %i.05, 1
   %sub = sub i64 %mul, %n2
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.05, 1
   %exitcond = icmp ne i64 %inc, %n1
   br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
   %mul6 = shl i64 %n1, 1
   %add = sub i64 %mul6, %j.03
-  %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx7, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx7, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc9 = add nsw i64 %j.03, 1
   %exitcond6 = icmp ne i64 %inc9, %n2
   br i1 %exitcond6, label %for.body4, label %for.end10.loopexit
@@ -202,7 +202,7 @@ for.end10:                                        ; preds = %for.end10.loopexit,
 ;;  for (long int j = 0; j < n2; j++)
 ;;    *B++ = A[j - n1];
 
-define void @symbolicrdiv3(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
+define void @symbolicrdiv3(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
 entry:
   %cmp4 = icmp eq i64 %n1, 0
   br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
@@ -232,20 +232,20 @@ for.body:                                         ; preds = %for.body.preheader,
   %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
   %conv = trunc i64 %i.05 to i32
   %add = sub i64 %n2, %i.05
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.05, 1
   %exitcond = icmp ne i64 %inc, %n1
   br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.03 = phi i64 [ %inc8, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
   %sub5 = sub i64 %j.03, %n1
-  %arrayidx6 = getelementptr inbounds i32, i32* %A, i64 %sub5
-  %0 = load i32, i32* %arrayidx6, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx6 = getelementptr inbounds i32, ptr %A, i64 %sub5
+  %0 = load i32, ptr %arrayidx6, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc8 = add nsw i64 %j.03, 1
   %exitcond6 = icmp ne i64 %inc8, %n2
   br i1 %exitcond6, label %for.body4, label %for.end9.loopexit
@@ -263,7 +263,7 @@ for.end9:                                         ; preds = %for.end9.loopexit,
 ;;  for (long int j = 0; j < n2; j++)
 ;;    *B++ = A[-j + n1];
 
-define void @symbolicrdiv4(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
+define void @symbolicrdiv4(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
 entry:
   %cmp4 = icmp eq i64 %n1, 0
   br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
@@ -294,20 +294,20 @@ for.body:                                         ; preds = %for.body.preheader,
   %conv = trunc i64 %i.05 to i32
   %mul = shl i64 %n1, 1
   %add = sub i64 %mul, %i.05
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.05, 1
   %exitcond = icmp ne i64 %inc, %n1
   br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
   %add6 = sub i64 %n1, %j.03
-  %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add6
-  %0 = load i32, i32* %arrayidx7, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add6
+  %0 = load i32, ptr %arrayidx7, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc9 = add nsw i64 %j.03, 1
   %exitcond6 = icmp ne i64 %inc9, %n2
   br i1 %exitcond6, label %for.body4, label %for.end10.loopexit
@@ -325,7 +325,7 @@ for.end10:                                        ; preds = %for.end10.loopexit,
 ;;  for (long int j = 0; j < n2; j++)
 ;;    *B++ = A[-j + 2*n2];
 
-define void @symbolicrdiv5(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
+define void @symbolicrdiv5(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
 entry:
   %cmp4 = icmp eq i64 %n1, 0
   br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
@@ -355,21 +355,21 @@ for.body:                                         ; preds = %for.body.preheader,
   %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
   %conv = trunc i64 %i.05 to i32
   %add = sub i64 %n2, %i.05
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %inc = add nsw i64 %i.05, 1
   %exitcond = icmp ne i64 %inc, %n1
   br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
 
 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
   %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
   %mul = shl i64 %n2, 1
   %add6 = sub i64 %mul, %j.03
-  %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add6
-  %0 = load i32, i32* %arrayidx7, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add6
+  %0 = load i32, ptr %arrayidx7, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc9 = add nsw i64 %j.03, 1
   %exitcond6 = icmp ne i64 %inc9, %n2
   br i1 %exitcond6, label %for.body4, label %for.end10.loopexit
@@ -387,7 +387,7 @@ for.end10:                                        ; preds = %for.end10.loopexit,
 ;;      A[j -i + n2] = i;
 ;;      *B++ = A[2*n2];
 
-define void @symbolicrdiv6(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
+define void @symbolicrdiv6(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
 entry:
   %cmp4 = icmp eq i64 %n1, 0
   br i1 %cmp4, label %for.end7, label %for.cond1.preheader.preheader
@@ -404,7 +404,7 @@ for.cond1.preheader.preheader:                    ; preds = %entry
   br label %for.cond1.preheader
 
 for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc5
-  %B.addr.06 = phi i32* [ %B.addr.1.lcssa, %for.inc5 ], [ %B, %for.cond1.preheader.preheader ]
+  %B.addr.06 = phi ptr [ %B.addr.1.lcssa, %for.inc5 ], [ %B, %for.cond1.preheader.preheader ]
   %i.05 = phi i64 [ %inc6, %for.inc5 ], [ 0, %for.cond1.preheader.preheader ]
   %cmp21 = icmp eq i64 %n2, 0
   br i1 %cmp21, label %for.inc5, label %for.body3.preheader
@@ -414,27 +414,27 @@ for.body3.preheader:                              ; preds = %for.cond1.preheader
 
 for.body3:                                        ; preds = %for.body3.preheader, %for.body3
   %j.03 = phi i64 [ %inc, %for.body3 ], [ 0, %for.body3.preheader ]
-  %B.addr.12 = phi i32* [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ]
+  %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ]
   %conv = trunc i64 %i.05 to i32
   %sub = sub nsw i64 %j.03, %i.05
   %add = add i64 %sub, %n2
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul = shl i64 %n2, 1
-  %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 %mul
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.12, i64 1
-  store i32 %0, i32* %B.addr.12, align 4
+  %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 %mul
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.12, i64 1
+  store i32 %0, ptr %B.addr.12, align 4
   %inc = add nsw i64 %j.03, 1
   %exitcond = icmp ne i64 %inc, %n2
   br i1 %exitcond, label %for.body3, label %for.inc5.loopexit
 
 for.inc5.loopexit:                                ; preds = %for.body3
-  %scevgep = getelementptr i32, i32* %B.addr.06, i64 %n2
+  %scevgep = getelementptr i32, ptr %B.addr.06, i64 %n2
   br label %for.inc5
 
 for.inc5:                                         ; preds = %for.inc5.loopexit, %for.cond1.preheader
-  %B.addr.1.lcssa = phi i32* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc5.loopexit ]
+  %B.addr.1.lcssa = phi ptr [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc5.loopexit ]
   %inc6 = add nsw i64 %i.05, 1
   %exitcond7 = icmp ne i64 %inc6, %n1
   br i1 %exitcond7, label %for.cond1.preheader, label %for.end7.loopexit

diff  --git a/llvm/test/Analysis/DependenceAnalysis/SymbolicSIV.ll b/llvm/test/Analysis/DependenceAnalysis/SymbolicSIV.ll
index 0d96e965d2c91..a995f7a3ad22b 100644
--- a/llvm/test/Analysis/DependenceAnalysis/SymbolicSIV.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/SymbolicSIV.ll
@@ -9,7 +9,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;    A[2*i + n] = i;
 ;;    *B++ = A[3*i + 3*n];
 
-define void @symbolicsiv0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @symbolicsiv0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -26,18 +26,18 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %i.03, 1
   %add = add i64 %mul, %n
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul14 = add i64 %i.03, %n
   %add3 = mul i64 %mul14, 3
-  %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 %add3
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 %add3
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -54,7 +54,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[2*i + 5*n] = i;
 ;;    *B++ = A[3*i + 2*n];
 
-define void @symbolicsiv1(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @symbolicsiv1(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -71,20 +71,20 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %i.03, 1
   %mul1 = mul i64 %n, 5
   %add = add i64 %mul, %mul1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul2 = mul nsw i64 %i.03, 3
   %mul3 = shl i64 %n, 1
   %add4 = add i64 %mul2, %mul3
-  %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %add4
-  %0 = load i32, i32* %arrayidx5, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %add4
+  %0 = load i32, ptr %arrayidx5, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -101,7 +101,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[2*i - n] = i;
 ;;    *B++ = A[-i + 2*n];
 
-define void @symbolicsiv2(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @symbolicsiv2(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -118,18 +118,18 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl nsw i64 %i.03, 1
   %sub = sub i64 %mul, %n
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
   %mul2 = shl i64 %n, 1
   %add = sub i64 %mul2, %i.03
-  %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx3, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx3, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -146,7 +146,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[-2*i + n + 1] = i;
 ;;    *B++ = A[i - 2*n];
 
-define void @symbolicsiv3(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @symbolicsiv3(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -163,19 +163,19 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, -2
   %add = add i64 %mul, %n
   %add1 = add i64 %add, 1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add1
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add1
+  store i32 %conv, ptr %arrayidx, align 4
   %mul2 = shl i64 %n, 1
   %sub = sub i64 %i.03, %mul2
-  %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx3, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx3, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -192,7 +192,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[-2*i + 3*n] = i;
 ;;    *B++ = A[-i + n];
 
-define void @symbolicsiv4(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @symbolicsiv4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -209,18 +209,18 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, -2
   %mul1 = mul i64 %n, 3
   %add = add i64 %mul, %mul1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %add2 = sub i64 %n, %i.03
-  %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %add2
-  %0 = load i32, i32* %arrayidx3, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %add2
+  %0 = load i32, ptr %arrayidx3, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -237,7 +237,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[-2*i - 2*n] = i;
 ;;    *B++ = A[-i - n];
 
-define void @symbolicsiv5(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @symbolicsiv5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -254,19 +254,19 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul nsw i64 %i.03, -2
   %mul1 = shl i64 %n, 1
   %sub = sub i64 %mul, %mul1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
+  store i32 %conv, ptr %arrayidx, align 4
   %sub2 = sub nsw i64 0, %i.03
   %sub3 = sub i64 %sub2, %n
-  %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 %sub3
-  %0 = load i32, i32* %arrayidx4, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 %sub3
+  %0 = load i32, ptr %arrayidx4, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -284,7 +284,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[i + n + 1] = i;
 ;;    *B++ = A[-i];
 
-define void @weaktest(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weaktest(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -302,17 +302,17 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %add = add i64 %i.03, %n
   %add1 = add i64 %add, 1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add1
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add1
+  store i32 %conv, ptr %arrayidx, align 4
   %sub = sub i64 0, %i.03
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -329,7 +329,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[4*N*i + M] = i;
 ;;    *B++ = A[4*N*i + 3*M + 1];
 
-define void @symbolicsiv6(i32* %A, i32* %B, i64 %n, i64 %N, i64 %M) nounwind uwtable ssp {
+define void @symbolicsiv6(ptr %A, ptr %B, i64 %n, i64 %N, i64 %M) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -347,22 +347,22 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl i64 %N, 2
   %mul1 = mul i64 %mul, %i.03
   %add = add i64 %mul1, %M
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul2 = shl i64 %N, 2
   %mul3 = mul i64 %mul2, %i.03
   %mul4 = mul i64 %M, 3
   %add5 = add i64 %mul3, %mul4
   %add6 = add i64 %add5, 1
-  %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add6
-  %0 = load i32, i32* %arrayidx7, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add6
+  %0 = load i32, ptr %arrayidx7, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -379,7 +379,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[2*N*i + M] = i;
 ;;    *B++ = A[2*N*i - 3*M + 2];
 
-define void @symbolicsiv7(i32* %A, i32* %B, i64 %n, i64 %N, i64 %M) nounwind uwtable ssp {
+define void @symbolicsiv7(ptr %A, ptr %B, i64 %n, i64 %N, i64 %M) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -396,22 +396,22 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = shl i64 %N, 1
   %mul1 = mul i64 %mul, %i.03
   %add = add i64 %mul1, %M
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul2 = shl i64 %N, 1
   %mul3 = mul i64 %mul2, %i.03
   %0 = mul i64 %M, -3
   %sub = add i64 %mul3, %0
   %add5 = add i64 %sub, 2
-  %arrayidx6 = getelementptr inbounds i32, i32* %A, i64 %add5
-  %1 = load i32, i32* %arrayidx6, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %1, i32* %B.addr.02, align 4
+  %arrayidx6 = getelementptr inbounds i32, ptr %A, i64 %add5
+  %1 = load i32, ptr %arrayidx6, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %1, ptr %B.addr.02, align 4
   %inc = add nsw i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit

diff  --git a/llvm/test/Analysis/DependenceAnalysis/UsefulGEP.ll b/llvm/test/Analysis/DependenceAnalysis/UsefulGEP.ll
index 01390a9280376..2d0e0a39df3c5 100644
--- a/llvm/test/Analysis/DependenceAnalysis/UsefulGEP.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/UsefulGEP.ll
@@ -26,7 +26,7 @@ entry:
 
 for.cond1.preheader.lr.ph:                        
   %idxprom = sext i32 %k to i64
-  %arrayidx = getelementptr inbounds %struct.s, %struct.s* @S, i64 0, i32 1, i64 0, i64 0, i64 %idxprom
+  %arrayidx = getelementptr inbounds %struct.s, ptr @S, i64 0, i32 1, i64 0, i64 0, i64 %idxprom
   br label %for.body3.preheader
 
 for.body3.preheader:                              
@@ -35,8 +35,8 @@ for.body3.preheader:
 
 for.body3:                                        
   %j.011 = phi i32 [ %inc, %for.body3 ], [ 0, %for.body3.preheader ]
-  %0 = load i32, i32* %arrayidx
-  store i32 %0, i32* getelementptr inbounds (%struct.s, %struct.s* @S, i64 0, i32 0, i64 0, i64 0)
+  %0 = load i32, ptr %arrayidx
+  store i32 %0, ptr @S
   %inc = add nuw nsw i32 %j.011, 1
   %exitcond = icmp eq i32 %inc, %N
   br i1 %exitcond, label %for.inc4, label %for.body3

diff  --git a/llvm/test/Analysis/DependenceAnalysis/WeakCrossingSIV.ll b/llvm/test/Analysis/DependenceAnalysis/WeakCrossingSIV.ll
index b46f4d36690ac..774c37da3d3de 100644
--- a/llvm/test/Analysis/DependenceAnalysis/WeakCrossingSIV.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/WeakCrossingSIV.ll
@@ -10,7 +10,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;    A[1 + n*i] = i;
 ;;    *B++ = A[1 - n*i];
 
-define void @weakcrossing0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakcrossing0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -27,18 +27,18 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul i64 %i.03, %n
   %add = add i64 %mul, 1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %mul1 = mul i64 %i.03, %n
   %sub = sub i64 1, %mul1
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -55,7 +55,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[n + i] = i;
 ;;    *B++ = A[1 + n - i];
 
-define void @weakcrossing1(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakcrossing1(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -73,17 +73,17 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %add = add i64 %i.03, %n
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
   %add1 = add i64 %n, 1
   %sub = sub i64 %add1, %i.03
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -100,7 +100,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[i] = i;
 ;;    *B++ = A[6 - i];
 
-define void @weakcrossing2(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakcrossing2(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -113,15 +113,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %i.02
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %i.02
+  store i32 %conv, ptr %arrayidx, align 4
   %sub = sub i64 6, %i.02
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 3
   br i1 %exitcond, label %for.body, label %for.end
@@ -135,7 +135,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[i] = i;
 ;;    *B++ = A[6 - i];
 
-define void @weakcrossing3(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakcrossing3(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -148,15 +148,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %i.02
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %i.02
+  store i32 %conv, ptr %arrayidx, align 4
   %sub = sub i64 6, %i.02
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 4
   br i1 %exitcond, label %for.body, label %for.end
@@ -170,7 +170,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[i] = i;
 ;;    *B++ = A[-6 - i];
 
-define void @weakcrossing4(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakcrossing4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -183,15 +183,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %i.02
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %i.02
+  store i32 %conv, ptr %arrayidx, align 4
   %sub = sub i64 -6, %i.02
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 10
   br i1 %exitcond, label %for.body, label %for.end
@@ -205,7 +205,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i] = i;
 ;;    *B++ = A[5 - 3*i];
 
-define void @weakcrossing5(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakcrossing5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -222,17 +222,17 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul i64 %i.03, 3
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
   %0 = mul i64 %i.03, -3
   %sub = add i64 %0, 5
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %1 = load i32, i32* %arrayidx2, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %1, i32* %B.addr.02, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %1 = load i32, ptr %arrayidx2, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %1, ptr %B.addr.02, align 4
   %inc = add i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -249,7 +249,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[i] = i;
 ;;    *B++ = A[5 - i];
 
-define void @weakcrossing6(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakcrossing6(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -263,15 +263,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %i.02
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %i.02
+  store i32 %conv, ptr %arrayidx, align 4
   %sub = sub i64 5, %i.02
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %sub
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %sub
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 4
   br i1 %exitcond, label %for.body, label %for.end

diff  --git a/llvm/test/Analysis/DependenceAnalysis/WeakZeroDstSIV.ll b/llvm/test/Analysis/DependenceAnalysis/WeakZeroDstSIV.ll
index cb043acf76328..63774ce57c9b7 100644
--- a/llvm/test/Analysis/DependenceAnalysis/WeakZeroDstSIV.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/WeakZeroDstSIV.ll
@@ -10,7 +10,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;    A[i] = 1;
 ;;    A[0] = 2;
 
-define void @dstzero(i32* nocapture %A, i32 %N) {
+define void @dstzero(ptr nocapture %A, i32 %N) {
 entry:
   %cmp6 = icmp sgt i32 %N, 0
   br i1 %cmp6, label %for.body, label %for.cond.cleanup
@@ -21,9 +21,9 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.07 = phi i32 [ %add, %for.body ], [ 0, %entry ]
-  %arrayidx = getelementptr inbounds i32, i32* %A, i32 %i.07
-  store i32 0, i32* %arrayidx, align 4
-  store i32 1, i32* %A, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %i.07
+  store i32 0, ptr %arrayidx, align 4
+  store i32 1, ptr %A, align 4
   %add = add nuw nsw i32 %i.07, 1
   %exitcond = icmp eq i32 %add, %N
   br i1 %exitcond, label %for.cond.cleanup, label %for.body
@@ -39,7 +39,7 @@ for.cond.cleanup:                                 ; preds = %for.body, %entry
 ;;    A[2*i + 10] = i;
 ;;    *B++ = A[10];
 
-define void @weakzerodst0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerodst0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -52,16 +52,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = shl i64 %i.02, 1
   %add = add i64 %mul, 10
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 10
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 30
   br i1 %exitcond, label %for.body, label %for.end
@@ -75,7 +75,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[n*i + 10] = i;
 ;;    *B++ = A[10];
 
-define void @weakzerodst1(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerodst1(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -92,16 +92,16 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul i64 %i.03, %n
   %add = add i64 %mul, 10
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 10
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -118,7 +118,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[2*i] = i;
 ;;    *B++ = A[10];
 
-define void @weakzerodst2(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerodst2(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -131,15 +131,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = shl i64 %i.02, 1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 10
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 5
   br i1 %exitcond, label %for.body, label %for.end
@@ -153,7 +153,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[2*i] = i;
 ;;    *B++ = A[10];
 
-define void @weakzerodst3(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerodst3(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -166,15 +166,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = shl i64 %i.02, 1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 10
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 6
   br i1 %exitcond, label %for.body, label %for.end
@@ -188,7 +188,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[2*i] = i;
 ;;    *B++ = A[10];
 
-define void @weakzerodst4(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerodst4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -201,15 +201,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = shl i64 %i.02, 1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 10
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 7
   br i1 %exitcond, label %for.body, label %for.end
@@ -223,7 +223,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[2*i] = i;
 ;;    *B++ = A[-10];
 
-define void @weakzerodst5(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerodst5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -236,15 +236,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
   %mul = shl i64 %i.02, 1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 -10
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 -10
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 7
   br i1 %exitcond, label %for.body, label %for.end
@@ -258,7 +258,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[3*i] = i;
 ;;    *B++ = A[10];
 
-define void @weakzerodst6(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerodst6(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -275,15 +275,15 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
   %mul = mul i64 %i.03, 3
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
-  store i32 %conv, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul
+  store i32 %conv, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 10
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit

diff  --git a/llvm/test/Analysis/DependenceAnalysis/WeakZeroSrcSIV.ll b/llvm/test/Analysis/DependenceAnalysis/WeakZeroSrcSIV.ll
index 3fd13b00007eb..8755faa36d400 100644
--- a/llvm/test/Analysis/DependenceAnalysis/WeakZeroSrcSIV.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/WeakZeroSrcSIV.ll
@@ -10,7 +10,7 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;    A[0] = 1;
 ;;    A[i] = 2;
 
-define void @dstzero(i32* nocapture %A, i32 %N) {
+define void @dstzero(ptr nocapture %A, i32 %N) {
 entry:
   %cmp6 = icmp sgt i32 %N, 0
   br i1 %cmp6, label %for.body, label %for.cond.cleanup
@@ -21,9 +21,9 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.07 = phi i32 [ %add, %for.body ], [ 0, %entry ]
-  store i32 0, i32* %A, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i32 %i.07
-  store i32 1, i32* %arrayidx1, align 4
+  store i32 0, ptr %A, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i32 %i.07
+  store i32 1, ptr %arrayidx1, align 4
   %add = add nuw nsw i32 %i.07, 1
   %exitcond = icmp eq i32 %add, %N
   br i1 %exitcond, label %for.cond.cleanup, label %for.body
@@ -37,7 +37,7 @@ for.cond.cleanup:                                 ; preds = %for.body, %entry
 ;;    A[10] = i;
 ;;    *B++ = A[2*i + 10];
 
-define void @weakzerosrc0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerosrc0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -50,16 +50,16 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 10
+  store i32 %conv, ptr %arrayidx, align 4
   %mul = shl i64 %i.02, 1
   %add = add i64 %mul, 10
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 30
   br i1 %exitcond, label %for.body, label %for.end
@@ -73,7 +73,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[10] = i;
 ;;    *B++ = A[n*i + 10];
 
-define void @weakzerosrc1(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerosrc1(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -90,16 +90,16 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 10
+  store i32 %conv, ptr %arrayidx, align 4
   %mul = mul i64 %i.03, %n
   %add = add i64 %mul, 10
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit
@@ -116,7 +116,7 @@ for.end:                                          ; preds = %for.end.loopexit, %
 ;;    A[10] = i;
 ;;    *B++ = A[2*i];
 
-define void @weakzerosrc2(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerosrc2(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -129,15 +129,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 10
+  store i32 %conv, ptr %arrayidx, align 4
   %mul = shl i64 %i.02, 1
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %mul
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %mul
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 5
   br i1 %exitcond, label %for.body, label %for.end
@@ -151,7 +151,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[10] = i;
 ;;    *B++ = A[2*i];
 
-define void @weakzerosrc3(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerosrc3(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -164,15 +164,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 10
+  store i32 %conv, ptr %arrayidx, align 4
   %mul = shl i64 %i.02, 1
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %mul
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %mul
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 6
   br i1 %exitcond, label %for.body, label %for.end
@@ -186,7 +186,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[10] = i;
 ;;    *B++ = A[2*i];
 
-define void @weakzerosrc4(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerosrc4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -199,15 +199,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 10
+  store i32 %conv, ptr %arrayidx, align 4
   %mul = shl i64 %i.02, 1
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %mul
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %mul
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 7
   br i1 %exitcond, label %for.body, label %for.end
@@ -221,7 +221,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[-10] = i;
 ;;    *B++ = A[2*i];
 
-define void @weakzerosrc5(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerosrc5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   br label %for.body
 
@@ -234,15 +234,15 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
-  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
+  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]
   %conv = trunc i64 %i.02 to i32
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 -10
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 -10
+  store i32 %conv, ptr %arrayidx, align 4
   %mul = shl i64 %i.02, 1
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %mul
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
-  store i32 %0, i32* %B.addr.01, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %mul
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
+  store i32 %0, ptr %B.addr.01, align 4
   %inc = add i64 %i.02, 1
   %exitcond = icmp ne i64 %inc, 7
   br i1 %exitcond, label %for.body, label %for.end
@@ -256,7 +256,7 @@ for.end:                                          ; preds = %for.body
 ;;    A[10] = i;
 ;;    *B++ = A[3*i];
 
-define void @weakzerosrc6(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @weakzerosrc6(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %cmp1 = icmp eq i64 %n, 0
   br i1 %cmp1, label %for.end, label %for.body.preheader
@@ -273,15 +273,15 @@ for.body.preheader:                               ; preds = %entry
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
   %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
-  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
+  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
   %conv = trunc i64 %i.03 to i32
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
-  store i32 %conv, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 10
+  store i32 %conv, ptr %arrayidx, align 4
   %mul = mul i64 %i.03, 3
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %mul
-  %0 = load i32, i32* %arrayidx1, align 4
-  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
-  store i32 %0, i32* %B.addr.02, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %mul
+  %0 = load i32, ptr %arrayidx1, align 4
+  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1
+  store i32 %0, ptr %B.addr.02, align 4
   %inc = add i64 %i.03, 1
   %exitcond = icmp ne i64 %inc, %n
   br i1 %exitcond, label %for.body, label %for.end.loopexit

diff  --git a/llvm/test/Analysis/DependenceAnalysis/ZIV.ll b/llvm/test/Analysis/DependenceAnalysis/ZIV.ll
index f5543b679233c..cef88a0b3e6b1 100644
--- a/llvm/test/Analysis/DependenceAnalysis/ZIV.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/ZIV.ll
@@ -9,11 +9,11 @@ target triple = "x86_64-apple-macosx10.6.0"
 ;;  A[n + 1] = 0;
 ;;  *B = A[1 + n];
 
-define void @z0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @z0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
   %add = add i64 %n, 1
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
-  store i32 0, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
+  store i32 0, ptr %arrayidx, align 4
 
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - consistent flow [|<]!
@@ -23,9 +23,9 @@ entry:
 ; CHECK: da analyze - none!
 
   %add1 = add i64 %n, 1
-  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add1
-  %0 = load i32, i32* %arrayidx2, align 4
-  store i32 %0, i32* %B, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %add1
+  %0 = load i32, ptr %arrayidx2, align 4
+  store i32 %0, ptr %B, align 4
   ret void
 }
 
@@ -33,10 +33,10 @@ entry:
 ;;  A[n] = 0;
 ;;  *B = A[n + 1];
 
-define void @z1(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
+define void @z1(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
 entry:
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %n
-  store i32 0, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %n
+  store i32 0, ptr %arrayidx, align 4
 
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - none!
@@ -46,9 +46,9 @@ entry:
 ; CHECK: da analyze - none!
 
   %add = add i64 %n, 1
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
-  %0 = load i32, i32* %arrayidx1, align 4
-  store i32 %0, i32* %B, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add
+  %0 = load i32, ptr %arrayidx1, align 4
+  store i32 %0, ptr %B, align 4
   ret void
 }
 
@@ -56,10 +56,10 @@ entry:
 ;;  A[n] = 0;
 ;;  *B = A[m];
 
-define void @z2(i32* %A, i32* %B, i64 %n, i64 %m) nounwind uwtable ssp {
+define void @z2(ptr %A, ptr %B, i64 %n, i64 %m) nounwind uwtable ssp {
 entry:
-  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %n
-  store i32 0, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %n
+  store i32 0, ptr %arrayidx, align 4
 
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - flow [|<]!
@@ -68,8 +68,8 @@ entry:
 ; CHECK: da analyze - confused!
 ; CHECK: da analyze - none!
 
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %m
-  %0 = load i32, i32* %arrayidx1, align 4
-  store i32 %0, i32* %B, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %m
+  %0 = load i32, ptr %arrayidx1, align 4
+  store i32 %0, ptr %B, align 4
   ret void
 }

diff  --git a/llvm/test/Analysis/DependenceAnalysis/lcssa.ll b/llvm/test/Analysis/DependenceAnalysis/lcssa.ll
index 801b24276f5b5..1e65f87920258 100644
--- a/llvm/test/Analysis/DependenceAnalysis/lcssa.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/lcssa.ll
@@ -1,10 +1,10 @@
 ; RUN: opt < %s -disable-output "-passes=print<da>"                            \
 ; RUN: "-aa-pipeline=basic-aa,tbaa" 2>&1 | FileCheck %s
 
-; CHECK:      Src:  %v = load i32, i32* %arrayidx1, align 4 --> Dst:  store i32 %add, i32* %a.lcssa, align 4
+; CHECK:      Src:  %v = load i32, ptr %arrayidx1, align 4 --> Dst:  store i32 %add, ptr %a.lcssa, align 4
 ; CHECK-NEXT: da analyze - anti [*|<]!
 
-define void @f(i32 *%a, i32 %n, i64 %n2) {
+define void @f(ptr %a, i32 %n, i64 %n2) {
 entry:
   br label %while.body
 
@@ -14,20 +14,20 @@ while.body:
   %mul = mul i32 %n.addr, 3
   %div = udiv i32 %mul, 2
   %inc = add i32 %inc.phi, 1
-  %incdec.ptr = getelementptr inbounds i32, i32* %a, i32 %inc
+  %incdec.ptr = getelementptr inbounds i32, ptr %a, i32 %inc
   %cmp.not = icmp eq i32 %div, 1
   br i1 %cmp.not, label %while.end, label %while.body
 
 while.end:
-  %a.lcssa = phi i32* [ %incdec.ptr, %while.body ]
+  %a.lcssa = phi ptr [ %incdec.ptr, %while.body ]
   br label %for.body
 
 for.body:
   %indvars.iv = phi i64 [ 1, %while.end ], [ %indvars.iv.next, %for.body ]
-  %arrayidx1 = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
-  %v = load i32, i32* %arrayidx1, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+  %v = load i32, ptr %arrayidx1, align 4
   %add = add nsw i32 %v, 1
-  store i32 %add, i32* %a.lcssa, align 4
+  store i32 %add, ptr %a.lcssa, align 4
   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
   %exitcond.not = icmp eq i64 %indvars.iv.next, %n2
   br i1 %exitcond.not, label %ret, label %for.body

diff  --git a/llvm/test/Analysis/DependenceAnalysis/new-pm-invalidation.ll b/llvm/test/Analysis/DependenceAnalysis/new-pm-invalidation.ll
index c6af10b19c5c2..37bd5243803d0 100644
--- a/llvm/test/Analysis/DependenceAnalysis/new-pm-invalidation.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/new-pm-invalidation.ll
@@ -9,8 +9,8 @@
 ; CHECK: da analyze - none!
 ; CHECK: da analyze - confused!
 ; CHECK: da analyze - none!
-define void @test_no_noalias(i32* %A, i32* %B) {
-  store i32 1, i32* %A
-  store i32 2, i32* %B
+define void @test_no_noalias(ptr %A, ptr %B) {
+  store i32 1, ptr %A
+  store i32 2, ptr %B
   ret void
 }


        


More information about the llvm-commits mailing list