[llvm] e6bf3fa - [Thumb] Convert tests to opaque pointers (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 19 04:05:29 PST 2022


Author: Nikita Popov
Date: 2022-12-19T13:05:05+01:00
New Revision: e6bf3fa05b3706197143414a56be05ce014ebe01

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

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

Added: 
    

Modified: 
    llvm/test/CodeGen/Thumb/2007-01-31-RegInfoAssert.ll
    llvm/test/CodeGen/Thumb/2007-02-02-JoinIntervalsCrash.ll
    llvm/test/CodeGen/Thumb/2007-05-05-InvalidPushPop.ll
    llvm/test/CodeGen/Thumb/2009-07-20-TwoAddrBug.ll
    llvm/test/CodeGen/Thumb/2009-07-27-PEIAssert.ll
    llvm/test/CodeGen/Thumb/2009-08-12-ConstIslandAssert.ll
    llvm/test/CodeGen/Thumb/2009-08-12-RegInfoAssert.ll
    llvm/test/CodeGen/Thumb/2009-08-20-ISelBug.ll
    llvm/test/CodeGen/Thumb/2009-12-17-pre-regalloc-taildup.ll
    llvm/test/CodeGen/Thumb/2010-06-18-SibCallCrash.ll
    llvm/test/CodeGen/Thumb/2010-07-15-debugOrdering.ll
    llvm/test/CodeGen/Thumb/2011-05-11-DAGLegalizer.ll
    llvm/test/CodeGen/Thumb/2011-06-16-NoGPRs.ll
    llvm/test/CodeGen/Thumb/2011-EpilogueBug.ll
    llvm/test/CodeGen/Thumb/2014-06-10-thumb1-ldst-opt-bug.ll
    llvm/test/CodeGen/Thumb/PR17309.ll
    llvm/test/CodeGen/Thumb/addr-modes.ll
    llvm/test/CodeGen/Thumb/and_neg.ll
    llvm/test/CodeGen/Thumb/asmprinter-bug.ll
    llvm/test/CodeGen/Thumb/bic_imm.ll
    llvm/test/CodeGen/Thumb/callee_save.ll
    llvm/test/CodeGen/Thumb/cmp-and-fold.ll
    llvm/test/CodeGen/Thumb/consthoist-few-dependents.ll
    llvm/test/CodeGen/Thumb/consthoist-imm8-costs-1.ll
    llvm/test/CodeGen/Thumb/consthoist-physical-addr.ll
    llvm/test/CodeGen/Thumb/cortex-m0-unaligned-access.ll
    llvm/test/CodeGen/Thumb/dyn-stackalloc.ll
    llvm/test/CodeGen/Thumb/emergency-spill-slot.ll
    llvm/test/CodeGen/Thumb/frame-access.ll
    llvm/test/CodeGen/Thumb/frame-chain.ll
    llvm/test/CodeGen/Thumb/i8-phi-ext.ll
    llvm/test/CodeGen/Thumb/iabs-vector.ll
    llvm/test/CodeGen/Thumb/large-fn-switch.ll
    llvm/test/CodeGen/Thumb/large-stack.ll
    llvm/test/CodeGen/Thumb/ldm-merge-call.ll
    llvm/test/CodeGen/Thumb/ldm-merge-struct.ll
    llvm/test/CodeGen/Thumb/ldm-stm-base-materialization-thumb2.ll
    llvm/test/CodeGen/Thumb/ldm-stm-base-materialization.ll
    llvm/test/CodeGen/Thumb/ldm-stm-postinc.ll
    llvm/test/CodeGen/Thumb/ldr_ext.ll
    llvm/test/CodeGen/Thumb/ldr_frame.ll
    llvm/test/CodeGen/Thumb/long.ll
    llvm/test/CodeGen/Thumb/mvn.ll
    llvm/test/CodeGen/Thumb/pop.ll
    llvm/test/CodeGen/Thumb/pr35836.ll
    llvm/test/CodeGen/Thumb/pr35836_2.ll
    llvm/test/CodeGen/Thumb/ragreedy-implicit-def.ll
    llvm/test/CodeGen/Thumb/segmented-stacks-dynamic.ll
    llvm/test/CodeGen/Thumb/segmented-stacks.ll
    llvm/test/CodeGen/Thumb/shift-and.ll
    llvm/test/CodeGen/Thumb/sjljehprepare-lower-vector.ll
    llvm/test/CodeGen/Thumb/stack-access.ll
    llvm/test/CodeGen/Thumb/stack-coloring-without-frame-ptr.ll
    llvm/test/CodeGen/Thumb/stack_guard_remat.ll
    llvm/test/CodeGen/Thumb/stm-deprecated.ll
    llvm/test/CodeGen/Thumb/stm-merge.ll
    llvm/test/CodeGen/Thumb/stm-scavenging.ll
    llvm/test/CodeGen/Thumb/thumb-ldm.ll
    llvm/test/CodeGen/Thumb/thumb-shrink-wrapping.ll
    llvm/test/CodeGen/Thumb/uxth.ll
    llvm/test/CodeGen/Thumb/vargs.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/Thumb/2007-01-31-RegInfoAssert.ll b/llvm/test/CodeGen/Thumb/2007-01-31-RegInfoAssert.ll
index 2d2ac9c566a91..04edffe7de1c4 100644
--- a/llvm/test/CodeGen/Thumb/2007-01-31-RegInfoAssert.ll
+++ b/llvm/test/CodeGen/Thumb/2007-01-31-RegInfoAssert.ll
@@ -5,8 +5,7 @@
 
 define void @f1() {
 	%D = alloca %struct.rtx_def, align 1
-	%tmp1 = bitcast %struct.rtx_def* %D to i32*
-	%tmp7 = load i32, i32* %tmp1
+	%tmp7 = load i32, ptr %D
 	%tmp14 = lshr i32 %tmp7, 1
 	%tmp1415 = and i32 %tmp14, 1
 	call void (i32, ...) @printf( i32 undef, i32 0, i32 %tmp1415 )

diff  --git a/llvm/test/CodeGen/Thumb/2007-02-02-JoinIntervalsCrash.ll b/llvm/test/CodeGen/Thumb/2007-02-02-JoinIntervalsCrash.ll
index be2b839c21d7e..afa511b792e1d 100644
--- a/llvm/test/CodeGen/Thumb/2007-02-02-JoinIntervalsCrash.ll
+++ b/llvm/test/CodeGen/Thumb/2007-02-02-JoinIntervalsCrash.ll
@@ -14,7 +14,7 @@ bb64:
 	%tmp69 = icmp slt i32 %tmp67, 10
 	%iftmp.13.0 = select i1 %tmp69, i8 48, i8 55
 	%tmp75 = add i8 %iftmp.13.0, 0
-	store i8 %tmp75, i8* null
+	store i8 %tmp75, ptr null
 	%tmp81 = udiv i32 0, 0
 	%tmp83 = icmp eq i32 %tmp81, 0
 	br i1 %tmp83, label %bb85, label %bb64

diff  --git a/llvm/test/CodeGen/Thumb/2007-05-05-InvalidPushPop.ll b/llvm/test/CodeGen/Thumb/2007-05-05-InvalidPushPop.ll
index 079ab879afbfe..988df9e355c00 100644
--- a/llvm/test/CodeGen/Thumb/2007-05-05-InvalidPushPop.ll
+++ b/llvm/test/CodeGen/Thumb/2007-05-05-InvalidPushPop.ll
@@ -2,40 +2,39 @@
 
 target triple = "thumb-unknown-linux-gnueabi"
 	%struct.__sched_param = type { i32 }
-	%struct.pthread_attr_t = type { i32, i32, %struct.__sched_param, i32, i32, i32, i32, i8*, i32 }
- at i.1882 = internal global i32 1		; <i32*> [#uses=2]
- at .str = internal constant [14 x i8] c"Thread 1: %d\0A\00"		; <[14 x i8]*> [#uses=1]
- at .str1 = internal constant [14 x i8] c"Thread 2: %d\0A\00"		; <[14 x i8]*> [#uses=1]
+	%struct.pthread_attr_t = type { i32, i32, %struct.__sched_param, i32, i32, i32, i32, ptr, i32 }
+ at i.1882 = internal global i32 1		; <ptr> [#uses=2]
+ at .str = internal constant [14 x i8] c"Thread 1: %d\0A\00"		; <ptr> [#uses=1]
+ at .str1 = internal constant [14 x i8] c"Thread 2: %d\0A\00"		; <ptr> [#uses=1]
 
-define i8* @f(i8* %a) {
+define ptr @f(ptr %a) {
 entry:
-	%tmp1 = load i32, i32* @i.1882		; <i32> [#uses=1]
+	%tmp1 = load i32, ptr @i.1882		; <i32> [#uses=1]
 	%tmp2 = add i32 %tmp1, 1		; <i32> [#uses=2]
-	store i32 %tmp2, i32* @i.1882
-	%tmp34 = inttoptr i32 %tmp2 to i8*		; <i8*> [#uses=1]
-	ret i8* %tmp34
+	store i32 %tmp2, ptr @i.1882
+	%tmp34 = inttoptr i32 %tmp2 to ptr		; <ptr> [#uses=1]
+	ret ptr %tmp34
 }
 
 define i32 @main() {
 entry:
-	%t = alloca i32, align 4		; <i32*> [#uses=4]
-	%ret = alloca i32, align 4		; <i32*> [#uses=3]
-	%tmp1 = call i32 @pthread_create( i32* %t, %struct.pthread_attr_t* null, i8* (i8*)* @f, i8* null )		; <i32> [#uses=0]
-	%tmp2 = load i32, i32* %t		; <i32> [#uses=1]
-	%ret3 = bitcast i32* %ret to i8**		; <i8**> [#uses=2]
-	%tmp4 = call i32 @pthread_join( i32 %tmp2, i8** %ret3 )		; <i32> [#uses=0]
-	%tmp5 = load i32, i32* %ret		; <i32> [#uses=1]
-	%tmp7 = call i32 (i8*, ...) @printf( i8* getelementptr ([14 x i8], [14 x i8]* @.str, i32 0, i32 0), i32 %tmp5 )		; <i32> [#uses=0]
-	%tmp8 = call i32 @pthread_create( i32* %t, %struct.pthread_attr_t* null, i8* (i8*)* @f, i8* null )		; <i32> [#uses=0]
-	%tmp9 = load i32, i32* %t		; <i32> [#uses=1]
-	%tmp11 = call i32 @pthread_join( i32 %tmp9, i8** %ret3 )		; <i32> [#uses=0]
-	%tmp12 = load i32, i32* %ret		; <i32> [#uses=1]
-	%tmp14 = call i32 (i8*, ...) @printf( i8* getelementptr ([14 x i8], [14 x i8]* @.str1, i32 0, i32 0), i32 %tmp12 )		; <i32> [#uses=0]
+	%t = alloca i32, align 4		; <ptr> [#uses=4]
+	%ret = alloca i32, align 4		; <ptr> [#uses=3]
+	%tmp1 = call i32 @pthread_create( ptr %t, ptr null, ptr @f, ptr null )		; <i32> [#uses=0]
+	%tmp2 = load i32, ptr %t		; <i32> [#uses=1]
+	%tmp4 = call i32 @pthread_join( i32 %tmp2, ptr %ret )		; <i32> [#uses=0]
+	%tmp5 = load i32, ptr %ret		; <i32> [#uses=1]
+	%tmp7 = call i32 (ptr, ...) @printf( ptr @.str, i32 %tmp5 )		; <i32> [#uses=0]
+	%tmp8 = call i32 @pthread_create( ptr %t, ptr null, ptr @f, ptr null )		; <i32> [#uses=0]
+	%tmp9 = load i32, ptr %t		; <i32> [#uses=1]
+	%tmp11 = call i32 @pthread_join( i32 %tmp9, ptr %ret )		; <i32> [#uses=0]
+	%tmp12 = load i32, ptr %ret		; <i32> [#uses=1]
+	%tmp14 = call i32 (ptr, ...) @printf( ptr @.str1, i32 %tmp12 )		; <i32> [#uses=0]
 	ret i32 0
 }
 
-declare i32 @pthread_create(i32*, %struct.pthread_attr_t*, i8* (i8*)*, i8*)
+declare i32 @pthread_create(ptr, ptr, ptr, ptr)
 
-declare i32 @pthread_join(i32, i8**)
+declare i32 @pthread_join(i32, ptr)
 
-declare i32 @printf(i8*, ...)
+declare i32 @printf(ptr, ...)

diff  --git a/llvm/test/CodeGen/Thumb/2009-07-20-TwoAddrBug.ll b/llvm/test/CodeGen/Thumb/2009-07-20-TwoAddrBug.ll
index fd300322f23f6..660dd5845c5d0 100644
--- a/llvm/test/CodeGen/Thumb/2009-07-20-TwoAddrBug.ll
+++ b/llvm/test/CodeGen/Thumb/2009-07-20-TwoAddrBug.ll
@@ -1,11 +1,11 @@
 ; RUN: llc < %s -mtriple=thumbv6-apple-darwin10
 
- at Time.2535 = external global i64		; <i64*> [#uses=2]
+ at Time.2535 = external global i64		; <ptr> [#uses=2]
 
 define i64 @millisecs() nounwind {
 entry:
-	%0 = load i64, i64* @Time.2535, align 4		; <i64> [#uses=2]
+	%0 = load i64, ptr @Time.2535, align 4		; <i64> [#uses=2]
 	%1 = add i64 %0, 1		; <i64> [#uses=1]
-	store i64 %1, i64* @Time.2535, align 4
+	store i64 %1, ptr @Time.2535, align 4
 	ret i64 %0
 }

diff  --git a/llvm/test/CodeGen/Thumb/2009-07-27-PEIAssert.ll b/llvm/test/CodeGen/Thumb/2009-07-27-PEIAssert.ll
index f0de64db00719..46822de9f4199 100644
--- a/llvm/test/CodeGen/Thumb/2009-07-27-PEIAssert.ll
+++ b/llvm/test/CodeGen/Thumb/2009-07-27-PEIAssert.ll
@@ -1,13 +1,13 @@
 ; RUN: llc < %s -mtriple=thumbv6-apple-darwin -relocation-model=pic -frame-pointer=all
 
-	%struct.LinkList = type { i32, %struct.LinkList* }
-	%struct.List = type { i32, i32* }
- at llvm.used = appending global [1 x i8*] [i8* bitcast (i32 ()* @main to i8*)], section "llvm.metadata"		; <[1 x i8*]*> [#uses=0]
+	%struct.LinkList = type { i32, ptr }
+	%struct.List = type { i32, ptr }
+ at llvm.used = appending global [1 x ptr] [ptr @main], section "llvm.metadata"		; <ptr> [#uses=0]
 
 define i32 @main() nounwind {
 entry:
-	%ll = alloca %struct.LinkList*, align 4		; <%struct.LinkList**> [#uses=1]
-	%0 = call  i32 @ReadList(%struct.LinkList** %ll, %struct.List** null) nounwind		; <i32> [#uses=1]
+	%ll = alloca ptr, align 4		; <ptr> [#uses=1]
+	%0 = call  i32 @ReadList(ptr %ll, ptr null) nounwind		; <i32> [#uses=1]
 	switch i32 %0, label %bb5 [
 		i32 7, label %bb4
 		i32 42, label %bb3
@@ -23,4 +23,4 @@ bb5:		; preds = %entry
 	ret i32 1
 }
 
-declare i32 @ReadList(%struct.LinkList** nocapture, %struct.List** nocapture) nounwind
+declare i32 @ReadList(ptr nocapture, ptr nocapture) nounwind

diff  --git a/llvm/test/CodeGen/Thumb/2009-08-12-ConstIslandAssert.ll b/llvm/test/CodeGen/Thumb/2009-08-12-ConstIslandAssert.ll
index 7036dd19b4bc1..5c4e820de70c7 100644
--- a/llvm/test/CodeGen/Thumb/2009-08-12-ConstIslandAssert.ll
+++ b/llvm/test/CodeGen/Thumb/2009-08-12-ConstIslandAssert.ll
@@ -2,709 +2,709 @@
 
 	%struct.BF_KEY = type { [18 x i32], [1024 x i32] }
 
-define void @BF_encrypt(i32* nocapture %data, %struct.BF_KEY* nocapture %key, i32 %encrypt) nounwind {
+define void @BF_encrypt(ptr nocapture %data, ptr nocapture %key, i32 %encrypt) nounwind {
 entry:
-	%0 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 0; <i32*> [#uses=2]
-	%1 = load i32, i32* %data, align 4             ; <i32> [#uses=2]
-	%2 = load i32, i32* undef, align 4             ; <i32> [#uses=2]
+	%0 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 0; <ptr> [#uses=2]
+	%1 = load i32, ptr %data, align 4             ; <i32> [#uses=2]
+	%2 = load i32, ptr undef, align 4             ; <i32> [#uses=2]
 	br i1 undef, label %bb1, label %bb
 
 bb:                                               ; preds = %entry
-	%3 = load i32, i32* %0, align 4                ; <i32> [#uses=1]
+	%3 = load i32, ptr %0, align 4                ; <i32> [#uses=1]
 	%4 = xor i32 %3, %1                       ; <i32> [#uses=4]
-	%5 = load i32, i32* null, align 4              ; <i32> [#uses=1]
+	%5 = load i32, ptr null, align 4              ; <i32> [#uses=1]
 	%6 = lshr i32 %4, 24                      ; <i32> [#uses=1]
-	%7 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %6; <i32*> [#uses=1]
-	%8 = load i32, i32* %7, align 4                ; <i32> [#uses=1]
+	%7 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %6; <ptr> [#uses=1]
+	%8 = load i32, ptr %7, align 4                ; <i32> [#uses=1]
 	%9 = lshr i32 %4, 16                      ; <i32> [#uses=1]
 	%10 = or i32 %9, 256                      ; <i32> [#uses=1]
 	%11 = and i32 %10, 511                    ; <i32> [#uses=1]
-	%12 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %11; <i32*> [#uses=1]
-	%13 = load i32, i32* %12, align 4              ; <i32> [#uses=1]
+	%12 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %11; <ptr> [#uses=1]
+	%13 = load i32, ptr %12, align 4              ; <i32> [#uses=1]
 	%14 = add i32 %13, %8                     ; <i32> [#uses=1]
-	%15 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 undef; <i32*> [#uses=1]
-	%16 = load i32, i32* %15, align 4              ; <i32> [#uses=1]
+	%15 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 undef; <ptr> [#uses=1]
+	%16 = load i32, ptr %15, align 4              ; <i32> [#uses=1]
 	%17 = xor i32 %14, %16                    ; <i32> [#uses=1]
 	%18 = or i32 %4, 768                      ; <i32> [#uses=1]
 	%19 = and i32 %18, 1023                   ; <i32> [#uses=1]
-	%20 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %19; <i32*> [#uses=1]
-	%21 = load i32, i32* %20, align 4              ; <i32> [#uses=1]
+	%20 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %19; <ptr> [#uses=1]
+	%21 = load i32, ptr %20, align 4              ; <i32> [#uses=1]
 	%22 = add i32 %17, %21                    ; <i32> [#uses=1]
 	%23 = xor i32 %5, %2                      ; <i32> [#uses=1]
 	%24 = xor i32 %23, %22                    ; <i32> [#uses=5]
-	%25 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 2; <i32*> [#uses=1]
-	%26 = load i32, i32* %25, align 4              ; <i32> [#uses=1]
+	%25 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 2; <ptr> [#uses=1]
+	%26 = load i32, ptr %25, align 4              ; <i32> [#uses=1]
 	%27 = lshr i32 %24, 24                    ; <i32> [#uses=1]
-	%28 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %27; <i32*> [#uses=1]
-	%29 = load i32, i32* %28, align 4              ; <i32> [#uses=1]
+	%28 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %27; <ptr> [#uses=1]
+	%29 = load i32, ptr %28, align 4              ; <i32> [#uses=1]
 	%30 = lshr i32 %24, 16                    ; <i32> [#uses=1]
 	%31 = or i32 %30, 256                     ; <i32> [#uses=1]
 	%32 = and i32 %31, 511                    ; <i32> [#uses=1]
-	%33 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %32; <i32*> [#uses=1]
-	%34 = load i32, i32* %33, align 4              ; <i32> [#uses=1]
+	%33 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %32; <ptr> [#uses=1]
+	%34 = load i32, ptr %33, align 4              ; <i32> [#uses=1]
 	%35 = add i32 %34, %29                    ; <i32> [#uses=1]
 	%36 = lshr i32 %24, 8                     ; <i32> [#uses=1]
 	%37 = or i32 %36, 512                     ; <i32> [#uses=1]
 	%38 = and i32 %37, 767                    ; <i32> [#uses=1]
-	%39 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %38; <i32*> [#uses=1]
-	%40 = load i32, i32* %39, align 4              ; <i32> [#uses=1]
+	%39 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %38; <ptr> [#uses=1]
+	%40 = load i32, ptr %39, align 4              ; <i32> [#uses=1]
 	%41 = xor i32 %35, %40                    ; <i32> [#uses=1]
 	%42 = or i32 %24, 768                     ; <i32> [#uses=1]
 	%43 = and i32 %42, 1023                   ; <i32> [#uses=1]
-	%44 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %43; <i32*> [#uses=1]
-	%45 = load i32, i32* %44, align 4              ; <i32> [#uses=1]
+	%44 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %43; <ptr> [#uses=1]
+	%45 = load i32, ptr %44, align 4              ; <i32> [#uses=1]
 	%46 = add i32 %41, %45                    ; <i32> [#uses=1]
 	%47 = xor i32 %26, %4                     ; <i32> [#uses=1]
 	%48 = xor i32 %47, %46                    ; <i32> [#uses=5]
-	%49 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 3; <i32*> [#uses=1]
-	%50 = load i32, i32* %49, align 4              ; <i32> [#uses=1]
+	%49 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 3; <ptr> [#uses=1]
+	%50 = load i32, ptr %49, align 4              ; <i32> [#uses=1]
 	%51 = lshr i32 %48, 24                    ; <i32> [#uses=1]
-	%52 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %51; <i32*> [#uses=1]
-	%53 = load i32, i32* %52, align 4              ; <i32> [#uses=1]
+	%52 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %51; <ptr> [#uses=1]
+	%53 = load i32, ptr %52, align 4              ; <i32> [#uses=1]
 	%54 = lshr i32 %48, 16                    ; <i32> [#uses=1]
 	%55 = or i32 %54, 256                     ; <i32> [#uses=1]
 	%56 = and i32 %55, 511                    ; <i32> [#uses=1]
-	%57 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %56; <i32*> [#uses=1]
-	%58 = load i32, i32* %57, align 4              ; <i32> [#uses=1]
+	%57 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %56; <ptr> [#uses=1]
+	%58 = load i32, ptr %57, align 4              ; <i32> [#uses=1]
 	%59 = add i32 %58, %53                    ; <i32> [#uses=1]
 	%60 = lshr i32 %48, 8                     ; <i32> [#uses=1]
 	%61 = or i32 %60, 512                     ; <i32> [#uses=1]
 	%62 = and i32 %61, 767                    ; <i32> [#uses=1]
-	%63 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %62; <i32*> [#uses=1]
-	%64 = load i32, i32* %63, align 4              ; <i32> [#uses=1]
+	%63 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %62; <ptr> [#uses=1]
+	%64 = load i32, ptr %63, align 4              ; <i32> [#uses=1]
 	%65 = xor i32 %59, %64                    ; <i32> [#uses=1]
 	%66 = or i32 %48, 768                     ; <i32> [#uses=1]
 	%67 = and i32 %66, 1023                   ; <i32> [#uses=1]
-	%68 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %67; <i32*> [#uses=1]
-	%69 = load i32, i32* %68, align 4              ; <i32> [#uses=1]
+	%68 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %67; <ptr> [#uses=1]
+	%69 = load i32, ptr %68, align 4              ; <i32> [#uses=1]
 	%70 = add i32 %65, %69                    ; <i32> [#uses=1]
 	%71 = xor i32 %50, %24                    ; <i32> [#uses=1]
 	%72 = xor i32 %71, %70                    ; <i32> [#uses=5]
-	%73 = load i32, i32* null, align 4             ; <i32> [#uses=1]
+	%73 = load i32, ptr null, align 4             ; <i32> [#uses=1]
 	%74 = lshr i32 %72, 24                    ; <i32> [#uses=1]
-	%75 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %74; <i32*> [#uses=1]
-	%76 = load i32, i32* %75, align 4              ; <i32> [#uses=1]
+	%75 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %74; <ptr> [#uses=1]
+	%76 = load i32, ptr %75, align 4              ; <i32> [#uses=1]
 	%77 = lshr i32 %72, 16                    ; <i32> [#uses=1]
 	%78 = or i32 %77, 256                     ; <i32> [#uses=1]
 	%79 = and i32 %78, 511                    ; <i32> [#uses=1]
-	%80 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %79; <i32*> [#uses=1]
-	%81 = load i32, i32* %80, align 4              ; <i32> [#uses=1]
+	%80 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %79; <ptr> [#uses=1]
+	%81 = load i32, ptr %80, align 4              ; <i32> [#uses=1]
 	%82 = add i32 %81, %76                    ; <i32> [#uses=1]
 	%83 = lshr i32 %72, 8                     ; <i32> [#uses=1]
 	%84 = or i32 %83, 512                     ; <i32> [#uses=1]
 	%85 = and i32 %84, 767                    ; <i32> [#uses=1]
-	%86 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %85; <i32*> [#uses=1]
-	%87 = load i32, i32* %86, align 4              ; <i32> [#uses=1]
+	%86 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %85; <ptr> [#uses=1]
+	%87 = load i32, ptr %86, align 4              ; <i32> [#uses=1]
 	%88 = xor i32 %82, %87                    ; <i32> [#uses=1]
 	%89 = or i32 %72, 768                     ; <i32> [#uses=1]
 	%90 = and i32 %89, 1023                   ; <i32> [#uses=1]
-	%91 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %90; <i32*> [#uses=1]
-	%92 = load i32, i32* %91, align 4              ; <i32> [#uses=1]
+	%91 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %90; <ptr> [#uses=1]
+	%92 = load i32, ptr %91, align 4              ; <i32> [#uses=1]
 	%93 = add i32 %88, %92                    ; <i32> [#uses=1]
 	%94 = xor i32 %73, %48                    ; <i32> [#uses=1]
 	%95 = xor i32 %94, %93                    ; <i32> [#uses=5]
-	%96 = load i32, i32* undef, align 4            ; <i32> [#uses=1]
+	%96 = load i32, ptr undef, align 4            ; <i32> [#uses=1]
 	%97 = lshr i32 %95, 24                    ; <i32> [#uses=1]
-	%98 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %97; <i32*> [#uses=1]
-	%99 = load i32, i32* %98, align 4              ; <i32> [#uses=1]
+	%98 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %97; <ptr> [#uses=1]
+	%99 = load i32, ptr %98, align 4              ; <i32> [#uses=1]
 	%100 = lshr i32 %95, 16                   ; <i32> [#uses=1]
 	%101 = or i32 %100, 256                   ; <i32> [#uses=1]
 	%102 = and i32 %101, 511                  ; <i32> [#uses=1]
-	%103 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %102; <i32*> [#uses=1]
-	%104 = load i32, i32* %103, align 4            ; <i32> [#uses=1]
+	%103 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %102; <ptr> [#uses=1]
+	%104 = load i32, ptr %103, align 4            ; <i32> [#uses=1]
 	%105 = add i32 %104, %99                  ; <i32> [#uses=1]
 	%106 = lshr i32 %95, 8                    ; <i32> [#uses=1]
 	%107 = or i32 %106, 512                   ; <i32> [#uses=1]
 	%108 = and i32 %107, 767                  ; <i32> [#uses=1]
-	%109 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %108; <i32*> [#uses=1]
-	%110 = load i32, i32* %109, align 4            ; <i32> [#uses=1]
+	%109 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %108; <ptr> [#uses=1]
+	%110 = load i32, ptr %109, align 4            ; <i32> [#uses=1]
 	%111 = xor i32 %105, %110                 ; <i32> [#uses=1]
 	%112 = or i32 %95, 768                    ; <i32> [#uses=1]
 	%113 = and i32 %112, 1023                 ; <i32> [#uses=1]
-	%114 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %113; <i32*> [#uses=1]
-	%115 = load i32, i32* %114, align 4            ; <i32> [#uses=1]
+	%114 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %113; <ptr> [#uses=1]
+	%115 = load i32, ptr %114, align 4            ; <i32> [#uses=1]
 	%116 = add i32 %111, %115                 ; <i32> [#uses=1]
 	%117 = xor i32 %96, %72                   ; <i32> [#uses=1]
 	%118 = xor i32 %117, %116                 ; <i32> [#uses=5]
-	%119 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 6; <i32*> [#uses=1]
-	%120 = load i32, i32* %119, align 4            ; <i32> [#uses=1]
+	%119 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 6; <ptr> [#uses=1]
+	%120 = load i32, ptr %119, align 4            ; <i32> [#uses=1]
 	%121 = lshr i32 %118, 24                  ; <i32> [#uses=1]
-	%122 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %121; <i32*> [#uses=1]
-	%123 = load i32, i32* %122, align 4            ; <i32> [#uses=1]
+	%122 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %121; <ptr> [#uses=1]
+	%123 = load i32, ptr %122, align 4            ; <i32> [#uses=1]
 	%124 = lshr i32 %118, 16                  ; <i32> [#uses=1]
 	%125 = or i32 %124, 256                   ; <i32> [#uses=1]
 	%126 = and i32 %125, 511                  ; <i32> [#uses=1]
-	%127 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %126; <i32*> [#uses=1]
-	%128 = load i32, i32* %127, align 4            ; <i32> [#uses=1]
+	%127 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %126; <ptr> [#uses=1]
+	%128 = load i32, ptr %127, align 4            ; <i32> [#uses=1]
 	%129 = add i32 %128, %123                 ; <i32> [#uses=1]
 	%130 = lshr i32 %118, 8                   ; <i32> [#uses=1]
 	%131 = or i32 %130, 512                   ; <i32> [#uses=1]
 	%132 = and i32 %131, 767                  ; <i32> [#uses=1]
-	%133 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %132; <i32*> [#uses=1]
-	%134 = load i32, i32* %133, align 4            ; <i32> [#uses=1]
+	%133 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %132; <ptr> [#uses=1]
+	%134 = load i32, ptr %133, align 4            ; <i32> [#uses=1]
 	%135 = xor i32 %129, %134                 ; <i32> [#uses=1]
 	%136 = or i32 %118, 768                   ; <i32> [#uses=1]
 	%137 = and i32 %136, 1023                 ; <i32> [#uses=1]
-	%138 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %137; <i32*> [#uses=1]
-	%139 = load i32, i32* %138, align 4            ; <i32> [#uses=1]
+	%138 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %137; <ptr> [#uses=1]
+	%139 = load i32, ptr %138, align 4            ; <i32> [#uses=1]
 	%140 = add i32 %135, %139                 ; <i32> [#uses=1]
 	%141 = xor i32 %120, %95                  ; <i32> [#uses=1]
 	%142 = xor i32 %141, %140                 ; <i32> [#uses=5]
-	%143 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 7; <i32*> [#uses=1]
-	%144 = load i32, i32* %143, align 4            ; <i32> [#uses=1]
+	%143 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 7; <ptr> [#uses=1]
+	%144 = load i32, ptr %143, align 4            ; <i32> [#uses=1]
 	%145 = lshr i32 %142, 24                  ; <i32> [#uses=1]
-	%146 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %145; <i32*> [#uses=1]
-	%147 = load i32, i32* %146, align 4            ; <i32> [#uses=1]
+	%146 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %145; <ptr> [#uses=1]
+	%147 = load i32, ptr %146, align 4            ; <i32> [#uses=1]
 	%148 = lshr i32 %142, 16                  ; <i32> [#uses=1]
 	%149 = or i32 %148, 256                   ; <i32> [#uses=1]
 	%150 = and i32 %149, 511                  ; <i32> [#uses=1]
-	%151 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %150; <i32*> [#uses=1]
-	%152 = load i32, i32* %151, align 4            ; <i32> [#uses=1]
+	%151 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %150; <ptr> [#uses=1]
+	%152 = load i32, ptr %151, align 4            ; <i32> [#uses=1]
 	%153 = add i32 %152, %147                 ; <i32> [#uses=1]
 	%154 = lshr i32 %142, 8                   ; <i32> [#uses=1]
 	%155 = or i32 %154, 512                   ; <i32> [#uses=1]
 	%156 = and i32 %155, 767                  ; <i32> [#uses=1]
-	%157 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %156; <i32*> [#uses=1]
-	%158 = load i32, i32* %157, align 4            ; <i32> [#uses=1]
+	%157 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %156; <ptr> [#uses=1]
+	%158 = load i32, ptr %157, align 4            ; <i32> [#uses=1]
 	%159 = xor i32 %153, %158                 ; <i32> [#uses=1]
 	%160 = or i32 %142, 768                   ; <i32> [#uses=1]
 	%161 = and i32 %160, 1023                 ; <i32> [#uses=1]
-	%162 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %161; <i32*> [#uses=1]
-	%163 = load i32, i32* %162, align 4            ; <i32> [#uses=1]
+	%162 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %161; <ptr> [#uses=1]
+	%163 = load i32, ptr %162, align 4            ; <i32> [#uses=1]
 	%164 = add i32 %159, %163                 ; <i32> [#uses=1]
 	%165 = xor i32 %144, %118                 ; <i32> [#uses=1]
 	%166 = xor i32 %165, %164                 ; <i32> [#uses=5]
-	%167 = load i32, i32* undef, align 4           ; <i32> [#uses=1]
+	%167 = load i32, ptr undef, align 4           ; <i32> [#uses=1]
 	%168 = lshr i32 %166, 24                  ; <i32> [#uses=1]
-	%169 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %168; <i32*> [#uses=1]
-	%170 = load i32, i32* %169, align 4            ; <i32> [#uses=1]
+	%169 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %168; <ptr> [#uses=1]
+	%170 = load i32, ptr %169, align 4            ; <i32> [#uses=1]
 	%171 = lshr i32 %166, 16                  ; <i32> [#uses=1]
 	%172 = or i32 %171, 256                   ; <i32> [#uses=1]
 	%173 = and i32 %172, 511                  ; <i32> [#uses=1]
-	%174 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %173; <i32*> [#uses=1]
-	%175 = load i32, i32* %174, align 4            ; <i32> [#uses=1]
+	%174 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %173; <ptr> [#uses=1]
+	%175 = load i32, ptr %174, align 4            ; <i32> [#uses=1]
 	%176 = add i32 %175, %170                 ; <i32> [#uses=1]
 	%177 = lshr i32 %166, 8                   ; <i32> [#uses=1]
 	%178 = or i32 %177, 512                   ; <i32> [#uses=1]
 	%179 = and i32 %178, 767                  ; <i32> [#uses=1]
-	%180 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %179; <i32*> [#uses=1]
-	%181 = load i32, i32* %180, align 4            ; <i32> [#uses=1]
+	%180 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %179; <ptr> [#uses=1]
+	%181 = load i32, ptr %180, align 4            ; <i32> [#uses=1]
 	%182 = xor i32 %176, %181                 ; <i32> [#uses=1]
 	%183 = or i32 %166, 768                   ; <i32> [#uses=1]
 	%184 = and i32 %183, 1023                 ; <i32> [#uses=1]
-	%185 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %184; <i32*> [#uses=1]
-	%186 = load i32, i32* %185, align 4            ; <i32> [#uses=1]
+	%185 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %184; <ptr> [#uses=1]
+	%186 = load i32, ptr %185, align 4            ; <i32> [#uses=1]
 	%187 = add i32 %182, %186                 ; <i32> [#uses=1]
 	%188 = xor i32 %167, %142                 ; <i32> [#uses=1]
 	%189 = xor i32 %188, %187                 ; <i32> [#uses=5]
-	%190 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 9; <i32*> [#uses=1]
-	%191 = load i32, i32* %190, align 4            ; <i32> [#uses=1]
+	%190 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 9; <ptr> [#uses=1]
+	%191 = load i32, ptr %190, align 4            ; <i32> [#uses=1]
 	%192 = lshr i32 %189, 24                  ; <i32> [#uses=1]
-	%193 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %192; <i32*> [#uses=1]
-	%194 = load i32, i32* %193, align 4            ; <i32> [#uses=1]
+	%193 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %192; <ptr> [#uses=1]
+	%194 = load i32, ptr %193, align 4            ; <i32> [#uses=1]
 	%195 = lshr i32 %189, 16                  ; <i32> [#uses=1]
 	%196 = or i32 %195, 256                   ; <i32> [#uses=1]
 	%197 = and i32 %196, 511                  ; <i32> [#uses=1]
-	%198 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %197; <i32*> [#uses=1]
-	%199 = load i32, i32* %198, align 4            ; <i32> [#uses=1]
+	%198 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %197; <ptr> [#uses=1]
+	%199 = load i32, ptr %198, align 4            ; <i32> [#uses=1]
 	%200 = add i32 %199, %194                 ; <i32> [#uses=1]
 	%201 = lshr i32 %189, 8                   ; <i32> [#uses=1]
 	%202 = or i32 %201, 512                   ; <i32> [#uses=1]
 	%203 = and i32 %202, 767                  ; <i32> [#uses=1]
-	%204 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %203; <i32*> [#uses=1]
-	%205 = load i32, i32* %204, align 4            ; <i32> [#uses=1]
+	%204 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %203; <ptr> [#uses=1]
+	%205 = load i32, ptr %204, align 4            ; <i32> [#uses=1]
 	%206 = xor i32 %200, %205                 ; <i32> [#uses=1]
 	%207 = or i32 %189, 768                   ; <i32> [#uses=1]
 	%208 = and i32 %207, 1023                 ; <i32> [#uses=1]
-	%209 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %208; <i32*> [#uses=1]
-	%210 = load i32, i32* %209, align 4            ; <i32> [#uses=1]
+	%209 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %208; <ptr> [#uses=1]
+	%210 = load i32, ptr %209, align 4            ; <i32> [#uses=1]
 	%211 = add i32 %206, %210                 ; <i32> [#uses=1]
 	%212 = xor i32 %191, %166                 ; <i32> [#uses=1]
 	%213 = xor i32 %212, %211                 ; <i32> [#uses=5]
-	%214 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 10; <i32*> [#uses=1]
-	%215 = load i32, i32* %214, align 4            ; <i32> [#uses=1]
+	%214 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 10; <ptr> [#uses=1]
+	%215 = load i32, ptr %214, align 4            ; <i32> [#uses=1]
 	%216 = lshr i32 %213, 24                  ; <i32> [#uses=1]
-	%217 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %216; <i32*> [#uses=1]
-	%218 = load i32, i32* %217, align 4            ; <i32> [#uses=1]
+	%217 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %216; <ptr> [#uses=1]
+	%218 = load i32, ptr %217, align 4            ; <i32> [#uses=1]
 	%219 = lshr i32 %213, 16                  ; <i32> [#uses=1]
 	%220 = or i32 %219, 256                   ; <i32> [#uses=1]
 	%221 = and i32 %220, 511                  ; <i32> [#uses=1]
-	%222 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %221; <i32*> [#uses=1]
-	%223 = load i32, i32* %222, align 4            ; <i32> [#uses=1]
+	%222 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %221; <ptr> [#uses=1]
+	%223 = load i32, ptr %222, align 4            ; <i32> [#uses=1]
 	%224 = add i32 %223, %218                 ; <i32> [#uses=1]
 	%225 = lshr i32 %213, 8                   ; <i32> [#uses=1]
 	%226 = or i32 %225, 512                   ; <i32> [#uses=1]
 	%227 = and i32 %226, 767                  ; <i32> [#uses=1]
-	%228 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %227; <i32*> [#uses=1]
-	%229 = load i32, i32* %228, align 4            ; <i32> [#uses=1]
+	%228 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %227; <ptr> [#uses=1]
+	%229 = load i32, ptr %228, align 4            ; <i32> [#uses=1]
 	%230 = xor i32 %224, %229                 ; <i32> [#uses=1]
 	%231 = or i32 %213, 768                   ; <i32> [#uses=1]
 	%232 = and i32 %231, 1023                 ; <i32> [#uses=1]
-	%233 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %232; <i32*> [#uses=1]
-	%234 = load i32, i32* %233, align 4            ; <i32> [#uses=1]
+	%233 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %232; <ptr> [#uses=1]
+	%234 = load i32, ptr %233, align 4            ; <i32> [#uses=1]
 	%235 = add i32 %230, %234                 ; <i32> [#uses=1]
 	%236 = xor i32 %215, %189                 ; <i32> [#uses=1]
 	%237 = xor i32 %236, %235                 ; <i32> [#uses=5]
-	%238 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 11; <i32*> [#uses=1]
-	%239 = load i32, i32* %238, align 4            ; <i32> [#uses=1]
+	%238 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 11; <ptr> [#uses=1]
+	%239 = load i32, ptr %238, align 4            ; <i32> [#uses=1]
 	%240 = lshr i32 %237, 24                  ; <i32> [#uses=1]
-	%241 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %240; <i32*> [#uses=1]
-	%242 = load i32, i32* %241, align 4            ; <i32> [#uses=1]
+	%241 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %240; <ptr> [#uses=1]
+	%242 = load i32, ptr %241, align 4            ; <i32> [#uses=1]
 	%243 = lshr i32 %237, 16                  ; <i32> [#uses=1]
 	%244 = or i32 %243, 256                   ; <i32> [#uses=1]
 	%245 = and i32 %244, 511                  ; <i32> [#uses=1]
-	%246 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %245; <i32*> [#uses=1]
-	%247 = load i32, i32* %246, align 4            ; <i32> [#uses=1]
+	%246 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %245; <ptr> [#uses=1]
+	%247 = load i32, ptr %246, align 4            ; <i32> [#uses=1]
 	%248 = add i32 %247, %242                 ; <i32> [#uses=1]
 	%249 = lshr i32 %237, 8                   ; <i32> [#uses=1]
 	%250 = or i32 %249, 512                   ; <i32> [#uses=1]
 	%251 = and i32 %250, 767                  ; <i32> [#uses=1]
-	%252 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %251; <i32*> [#uses=1]
-	%253 = load i32, i32* %252, align 4            ; <i32> [#uses=1]
+	%252 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %251; <ptr> [#uses=1]
+	%253 = load i32, ptr %252, align 4            ; <i32> [#uses=1]
 	%254 = xor i32 %248, %253                 ; <i32> [#uses=1]
 	%255 = or i32 %237, 768                   ; <i32> [#uses=1]
 	%256 = and i32 %255, 1023                 ; <i32> [#uses=1]
-	%257 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %256; <i32*> [#uses=1]
-	%258 = load i32, i32* %257, align 4            ; <i32> [#uses=1]
+	%257 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %256; <ptr> [#uses=1]
+	%258 = load i32, ptr %257, align 4            ; <i32> [#uses=1]
 	%259 = add i32 %254, %258                 ; <i32> [#uses=1]
 	%260 = xor i32 %239, %213                 ; <i32> [#uses=1]
 	%261 = xor i32 %260, %259                 ; <i32> [#uses=5]
-	%262 = load i32, i32* undef, align 4           ; <i32> [#uses=1]
+	%262 = load i32, ptr undef, align 4           ; <i32> [#uses=1]
 	%263 = lshr i32 %261, 24                  ; <i32> [#uses=1]
-	%264 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %263; <i32*> [#uses=1]
-	%265 = load i32, i32* %264, align 4            ; <i32> [#uses=1]
+	%264 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %263; <ptr> [#uses=1]
+	%265 = load i32, ptr %264, align 4            ; <i32> [#uses=1]
 	%266 = lshr i32 %261, 16                  ; <i32> [#uses=1]
 	%267 = or i32 %266, 256                   ; <i32> [#uses=1]
 	%268 = and i32 %267, 511                  ; <i32> [#uses=1]
-	%269 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %268; <i32*> [#uses=1]
-	%270 = load i32, i32* %269, align 4            ; <i32> [#uses=1]
+	%269 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %268; <ptr> [#uses=1]
+	%270 = load i32, ptr %269, align 4            ; <i32> [#uses=1]
 	%271 = add i32 %270, %265                 ; <i32> [#uses=1]
 	%272 = lshr i32 %261, 8                   ; <i32> [#uses=1]
 	%273 = or i32 %272, 512                   ; <i32> [#uses=1]
 	%274 = and i32 %273, 767                  ; <i32> [#uses=1]
-	%275 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %274; <i32*> [#uses=1]
-	%276 = load i32, i32* %275, align 4            ; <i32> [#uses=1]
+	%275 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %274; <ptr> [#uses=1]
+	%276 = load i32, ptr %275, align 4            ; <i32> [#uses=1]
 	%277 = xor i32 %271, %276                 ; <i32> [#uses=1]
 	%278 = or i32 %261, 768                   ; <i32> [#uses=1]
 	%279 = and i32 %278, 1023                 ; <i32> [#uses=1]
-	%280 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %279; <i32*> [#uses=1]
-	%281 = load i32, i32* %280, align 4            ; <i32> [#uses=1]
+	%280 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %279; <ptr> [#uses=1]
+	%281 = load i32, ptr %280, align 4            ; <i32> [#uses=1]
 	%282 = add i32 %277, %281                 ; <i32> [#uses=1]
 	%283 = xor i32 %262, %237                 ; <i32> [#uses=1]
 	%284 = xor i32 %283, %282                 ; <i32> [#uses=4]
-	%285 = load i32, i32* null, align 4            ; <i32> [#uses=1]
+	%285 = load i32, ptr null, align 4            ; <i32> [#uses=1]
 	%286 = lshr i32 %284, 24                  ; <i32> [#uses=1]
-	%287 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %286; <i32*> [#uses=1]
-	%288 = load i32, i32* %287, align 4            ; <i32> [#uses=1]
+	%287 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %286; <ptr> [#uses=1]
+	%288 = load i32, ptr %287, align 4            ; <i32> [#uses=1]
 	%289 = lshr i32 %284, 16                  ; <i32> [#uses=1]
 	%290 = or i32 %289, 256                   ; <i32> [#uses=1]
 	%291 = and i32 %290, 511                  ; <i32> [#uses=1]
-	%292 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %291; <i32*> [#uses=1]
-	%293 = load i32, i32* %292, align 4            ; <i32> [#uses=1]
+	%292 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %291; <ptr> [#uses=1]
+	%293 = load i32, ptr %292, align 4            ; <i32> [#uses=1]
 	%294 = add i32 %293, %288                 ; <i32> [#uses=1]
 	%295 = lshr i32 %284, 8                   ; <i32> [#uses=1]
 	%296 = or i32 %295, 512                   ; <i32> [#uses=1]
 	%297 = and i32 %296, 767                  ; <i32> [#uses=1]
-	%298 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %297; <i32*> [#uses=1]
-	%299 = load i32, i32* %298, align 4            ; <i32> [#uses=1]
+	%298 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %297; <ptr> [#uses=1]
+	%299 = load i32, ptr %298, align 4            ; <i32> [#uses=1]
 	%300 = xor i32 %294, %299                 ; <i32> [#uses=1]
 	%301 = or i32 %284, 768                   ; <i32> [#uses=1]
 	%302 = and i32 %301, 1023                 ; <i32> [#uses=1]
-	%303 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %302; <i32*> [#uses=1]
-	%304 = load i32, i32* %303, align 4            ; <i32> [#uses=1]
+	%303 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %302; <ptr> [#uses=1]
+	%304 = load i32, ptr %303, align 4            ; <i32> [#uses=1]
 	%305 = add i32 %300, %304                 ; <i32> [#uses=1]
 	%306 = xor i32 %285, %261                 ; <i32> [#uses=1]
 	%307 = xor i32 %306, %305                 ; <i32> [#uses=1]
-	%308 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 15; <i32*> [#uses=1]
-	%309 = load i32, i32* %308, align 4            ; <i32> [#uses=1]
-	%310 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 0; <i32*> [#uses=1]
-	%311 = load i32, i32* %310, align 4            ; <i32> [#uses=1]
+	%308 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 15; <ptr> [#uses=1]
+	%309 = load i32, ptr %308, align 4            ; <i32> [#uses=1]
+	%310 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 0; <ptr> [#uses=1]
+	%311 = load i32, ptr %310, align 4            ; <i32> [#uses=1]
 	%312 = or i32 0, 256                      ; <i32> [#uses=1]
 	%313 = and i32 %312, 511                  ; <i32> [#uses=1]
-	%314 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %313; <i32*> [#uses=1]
-	%315 = load i32, i32* %314, align 4            ; <i32> [#uses=1]
+	%314 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %313; <ptr> [#uses=1]
+	%315 = load i32, ptr %314, align 4            ; <i32> [#uses=1]
 	%316 = add i32 %315, %311                 ; <i32> [#uses=1]
 	%317 = or i32 0, 512                      ; <i32> [#uses=1]
 	%318 = and i32 %317, 767                  ; <i32> [#uses=1]
-	%319 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %318; <i32*> [#uses=1]
-	%320 = load i32, i32* %319, align 4            ; <i32> [#uses=1]
+	%319 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %318; <ptr> [#uses=1]
+	%320 = load i32, ptr %319, align 4            ; <i32> [#uses=1]
 	%321 = xor i32 %316, %320                 ; <i32> [#uses=1]
 	%322 = or i32 0, 768                      ; <i32> [#uses=1]
 	%323 = and i32 %322, 1023                 ; <i32> [#uses=1]
-	%324 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %323; <i32*> [#uses=1]
-	%325 = load i32, i32* %324, align 4            ; <i32> [#uses=1]
+	%324 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %323; <ptr> [#uses=1]
+	%325 = load i32, ptr %324, align 4            ; <i32> [#uses=1]
 	%326 = add i32 %321, %325                 ; <i32> [#uses=1]
 	%327 = xor i32 %309, %307                 ; <i32> [#uses=1]
 	%328 = xor i32 %327, %326                 ; <i32> [#uses=5]
-	%329 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 17; <i32*> [#uses=1]
+	%329 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 17; <ptr> [#uses=1]
 	br label %bb2
 
 bb1:                                              ; preds = %entry
-	%330 = load i32, i32* null, align 4            ; <i32> [#uses=1]
+	%330 = load i32, ptr null, align 4            ; <i32> [#uses=1]
 	%331 = xor i32 %330, %1                   ; <i32> [#uses=4]
-	%332 = load i32, i32* null, align 4            ; <i32> [#uses=1]
+	%332 = load i32, ptr null, align 4            ; <i32> [#uses=1]
 	%333 = lshr i32 %331, 24                  ; <i32> [#uses=1]
-	%334 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %333; <i32*> [#uses=1]
-	%335 = load i32, i32* %334, align 4            ; <i32> [#uses=1]
-	%336 = load i32, i32* null, align 4            ; <i32> [#uses=1]
+	%334 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %333; <ptr> [#uses=1]
+	%335 = load i32, ptr %334, align 4            ; <i32> [#uses=1]
+	%336 = load i32, ptr null, align 4            ; <i32> [#uses=1]
 	%337 = add i32 %336, %335                 ; <i32> [#uses=1]
 	%338 = lshr i32 %331, 8                   ; <i32> [#uses=1]
 	%339 = or i32 %338, 512                   ; <i32> [#uses=1]
 	%340 = and i32 %339, 767                  ; <i32> [#uses=1]
-	%341 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %340; <i32*> [#uses=1]
-	%342 = load i32, i32* %341, align 4            ; <i32> [#uses=1]
+	%341 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %340; <ptr> [#uses=1]
+	%342 = load i32, ptr %341, align 4            ; <i32> [#uses=1]
 	%343 = xor i32 %337, %342                 ; <i32> [#uses=1]
 	%344 = or i32 %331, 768                   ; <i32> [#uses=1]
 	%345 = and i32 %344, 1023                 ; <i32> [#uses=1]
-	%346 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %345; <i32*> [#uses=1]
-	%347 = load i32, i32* %346, align 4            ; <i32> [#uses=1]
+	%346 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %345; <ptr> [#uses=1]
+	%347 = load i32, ptr %346, align 4            ; <i32> [#uses=1]
 	%348 = add i32 %343, %347                 ; <i32> [#uses=1]
 	%349 = xor i32 %332, %2                   ; <i32> [#uses=1]
 	%350 = xor i32 %349, %348                 ; <i32> [#uses=5]
-	%351 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 15; <i32*> [#uses=1]
-	%352 = load i32, i32* %351, align 4            ; <i32> [#uses=1]
+	%351 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 15; <ptr> [#uses=1]
+	%352 = load i32, ptr %351, align 4            ; <i32> [#uses=1]
 	%353 = lshr i32 %350, 24                  ; <i32> [#uses=1]
-	%354 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %353; <i32*> [#uses=1]
-	%355 = load i32, i32* %354, align 4            ; <i32> [#uses=1]
+	%354 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %353; <ptr> [#uses=1]
+	%355 = load i32, ptr %354, align 4            ; <i32> [#uses=1]
 	%356 = lshr i32 %350, 16                  ; <i32> [#uses=1]
 	%357 = or i32 %356, 256                   ; <i32> [#uses=1]
 	%358 = and i32 %357, 511                  ; <i32> [#uses=1]
-	%359 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %358; <i32*> [#uses=1]
-	%360 = load i32, i32* %359, align 4            ; <i32> [#uses=1]
+	%359 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %358; <ptr> [#uses=1]
+	%360 = load i32, ptr %359, align 4            ; <i32> [#uses=1]
 	%361 = add i32 %360, %355                 ; <i32> [#uses=1]
 	%362 = lshr i32 %350, 8                   ; <i32> [#uses=1]
 	%363 = or i32 %362, 512                   ; <i32> [#uses=1]
 	%364 = and i32 %363, 767                  ; <i32> [#uses=1]
-	%365 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %364; <i32*> [#uses=1]
-	%366 = load i32, i32* %365, align 4            ; <i32> [#uses=1]
+	%365 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %364; <ptr> [#uses=1]
+	%366 = load i32, ptr %365, align 4            ; <i32> [#uses=1]
 	%367 = xor i32 %361, %366                 ; <i32> [#uses=1]
 	%368 = or i32 %350, 768                   ; <i32> [#uses=1]
 	%369 = and i32 %368, 1023                 ; <i32> [#uses=1]
-	%370 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %369; <i32*> [#uses=1]
-	%371 = load i32, i32* %370, align 4            ; <i32> [#uses=1]
+	%370 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %369; <ptr> [#uses=1]
+	%371 = load i32, ptr %370, align 4            ; <i32> [#uses=1]
 	%372 = add i32 %367, %371                 ; <i32> [#uses=1]
 	%373 = xor i32 %352, %331                 ; <i32> [#uses=1]
 	%374 = xor i32 %373, %372                 ; <i32> [#uses=5]
-	%375 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 14; <i32*> [#uses=1]
-	%376 = load i32, i32* %375, align 4            ; <i32> [#uses=1]
+	%375 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 14; <ptr> [#uses=1]
+	%376 = load i32, ptr %375, align 4            ; <i32> [#uses=1]
 	%377 = lshr i32 %374, 24                  ; <i32> [#uses=1]
-	%378 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %377; <i32*> [#uses=1]
-	%379 = load i32, i32* %378, align 4            ; <i32> [#uses=1]
+	%378 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %377; <ptr> [#uses=1]
+	%379 = load i32, ptr %378, align 4            ; <i32> [#uses=1]
 	%380 = lshr i32 %374, 16                  ; <i32> [#uses=1]
 	%381 = or i32 %380, 256                   ; <i32> [#uses=1]
 	%382 = and i32 %381, 511                  ; <i32> [#uses=1]
-	%383 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %382; <i32*> [#uses=1]
-	%384 = load i32, i32* %383, align 4            ; <i32> [#uses=1]
+	%383 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %382; <ptr> [#uses=1]
+	%384 = load i32, ptr %383, align 4            ; <i32> [#uses=1]
 	%385 = add i32 %384, %379                 ; <i32> [#uses=1]
 	%386 = lshr i32 %374, 8                   ; <i32> [#uses=1]
 	%387 = or i32 %386, 512                   ; <i32> [#uses=1]
 	%388 = and i32 %387, 767                  ; <i32> [#uses=1]
-	%389 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %388; <i32*> [#uses=1]
-	%390 = load i32, i32* %389, align 4            ; <i32> [#uses=1]
+	%389 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %388; <ptr> [#uses=1]
+	%390 = load i32, ptr %389, align 4            ; <i32> [#uses=1]
 	%391 = xor i32 %385, %390                 ; <i32> [#uses=1]
 	%392 = or i32 %374, 768                   ; <i32> [#uses=1]
 	%393 = and i32 %392, 1023                 ; <i32> [#uses=1]
-	%394 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %393; <i32*> [#uses=1]
-	%395 = load i32, i32* %394, align 4            ; <i32> [#uses=1]
+	%394 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %393; <ptr> [#uses=1]
+	%395 = load i32, ptr %394, align 4            ; <i32> [#uses=1]
 	%396 = add i32 %391, %395                 ; <i32> [#uses=1]
 	%397 = xor i32 %376, %350                 ; <i32> [#uses=1]
 	%398 = xor i32 %397, %396                 ; <i32> [#uses=5]
-	%399 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 13; <i32*> [#uses=1]
-	%400 = load i32, i32* %399, align 4            ; <i32> [#uses=1]
+	%399 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 13; <ptr> [#uses=1]
+	%400 = load i32, ptr %399, align 4            ; <i32> [#uses=1]
 	%401 = lshr i32 %398, 24                  ; <i32> [#uses=1]
-	%402 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %401; <i32*> [#uses=1]
-	%403 = load i32, i32* %402, align 4            ; <i32> [#uses=1]
+	%402 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %401; <ptr> [#uses=1]
+	%403 = load i32, ptr %402, align 4            ; <i32> [#uses=1]
 	%404 = lshr i32 %398, 16                  ; <i32> [#uses=1]
 	%405 = or i32 %404, 256                   ; <i32> [#uses=1]
 	%406 = and i32 %405, 511                  ; <i32> [#uses=1]
-	%407 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %406; <i32*> [#uses=1]
-	%408 = load i32, i32* %407, align 4            ; <i32> [#uses=1]
+	%407 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %406; <ptr> [#uses=1]
+	%408 = load i32, ptr %407, align 4            ; <i32> [#uses=1]
 	%409 = add i32 %408, %403                 ; <i32> [#uses=1]
 	%410 = lshr i32 %398, 8                   ; <i32> [#uses=1]
 	%411 = or i32 %410, 512                   ; <i32> [#uses=1]
 	%412 = and i32 %411, 767                  ; <i32> [#uses=1]
-	%413 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %412; <i32*> [#uses=1]
-	%414 = load i32, i32* %413, align 4            ; <i32> [#uses=1]
+	%413 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %412; <ptr> [#uses=1]
+	%414 = load i32, ptr %413, align 4            ; <i32> [#uses=1]
 	%415 = xor i32 %409, %414                 ; <i32> [#uses=1]
 	%416 = or i32 %398, 768                   ; <i32> [#uses=1]
 	%417 = and i32 %416, 1023                 ; <i32> [#uses=1]
-	%418 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %417; <i32*> [#uses=1]
-	%419 = load i32, i32* %418, align 4            ; <i32> [#uses=1]
+	%418 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %417; <ptr> [#uses=1]
+	%419 = load i32, ptr %418, align 4            ; <i32> [#uses=1]
 	%420 = add i32 %415, %419                 ; <i32> [#uses=1]
 	%421 = xor i32 %400, %374                 ; <i32> [#uses=1]
 	%422 = xor i32 %421, %420                 ; <i32> [#uses=5]
-	%423 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 12; <i32*> [#uses=1]
-	%424 = load i32, i32* %423, align 4            ; <i32> [#uses=1]
+	%423 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 12; <ptr> [#uses=1]
+	%424 = load i32, ptr %423, align 4            ; <i32> [#uses=1]
 	%425 = lshr i32 %422, 24                  ; <i32> [#uses=1]
-	%426 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %425; <i32*> [#uses=1]
-	%427 = load i32, i32* %426, align 4            ; <i32> [#uses=1]
+	%426 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %425; <ptr> [#uses=1]
+	%427 = load i32, ptr %426, align 4            ; <i32> [#uses=1]
 	%428 = lshr i32 %422, 16                  ; <i32> [#uses=1]
 	%429 = or i32 %428, 256                   ; <i32> [#uses=1]
 	%430 = and i32 %429, 511                  ; <i32> [#uses=1]
-	%431 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %430; <i32*> [#uses=1]
-	%432 = load i32, i32* %431, align 4            ; <i32> [#uses=1]
+	%431 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %430; <ptr> [#uses=1]
+	%432 = load i32, ptr %431, align 4            ; <i32> [#uses=1]
 	%433 = add i32 %432, %427                 ; <i32> [#uses=1]
 	%434 = lshr i32 %422, 8                   ; <i32> [#uses=1]
 	%435 = or i32 %434, 512                   ; <i32> [#uses=1]
 	%436 = and i32 %435, 767                  ; <i32> [#uses=1]
-	%437 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %436; <i32*> [#uses=1]
-	%438 = load i32, i32* %437, align 4            ; <i32> [#uses=1]
+	%437 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %436; <ptr> [#uses=1]
+	%438 = load i32, ptr %437, align 4            ; <i32> [#uses=1]
 	%439 = xor i32 %433, %438                 ; <i32> [#uses=1]
 	%440 = or i32 %422, 768                   ; <i32> [#uses=1]
 	%441 = and i32 %440, 1023                 ; <i32> [#uses=1]
-	%442 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %441; <i32*> [#uses=1]
-	%443 = load i32, i32* %442, align 4            ; <i32> [#uses=1]
+	%442 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %441; <ptr> [#uses=1]
+	%443 = load i32, ptr %442, align 4            ; <i32> [#uses=1]
 	%444 = add i32 %439, %443                 ; <i32> [#uses=1]
 	%445 = xor i32 %424, %398                 ; <i32> [#uses=1]
 	%446 = xor i32 %445, %444                 ; <i32> [#uses=5]
-	%447 = load i32, i32* undef, align 4           ; <i32> [#uses=1]
+	%447 = load i32, ptr undef, align 4           ; <i32> [#uses=1]
 	%448 = lshr i32 %446, 24                  ; <i32> [#uses=1]
-	%449 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %448; <i32*> [#uses=1]
-	%450 = load i32, i32* %449, align 4            ; <i32> [#uses=1]
+	%449 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %448; <ptr> [#uses=1]
+	%450 = load i32, ptr %449, align 4            ; <i32> [#uses=1]
 	%451 = lshr i32 %446, 16                  ; <i32> [#uses=1]
 	%452 = or i32 %451, 256                   ; <i32> [#uses=1]
 	%453 = and i32 %452, 511                  ; <i32> [#uses=1]
-	%454 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %453; <i32*> [#uses=1]
-	%455 = load i32, i32* %454, align 4            ; <i32> [#uses=1]
+	%454 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %453; <ptr> [#uses=1]
+	%455 = load i32, ptr %454, align 4            ; <i32> [#uses=1]
 	%456 = add i32 %455, %450                 ; <i32> [#uses=1]
 	%457 = lshr i32 %446, 8                   ; <i32> [#uses=1]
 	%458 = or i32 %457, 512                   ; <i32> [#uses=1]
 	%459 = and i32 %458, 767                  ; <i32> [#uses=1]
-	%460 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %459; <i32*> [#uses=1]
-	%461 = load i32, i32* %460, align 4            ; <i32> [#uses=1]
+	%460 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %459; <ptr> [#uses=1]
+	%461 = load i32, ptr %460, align 4            ; <i32> [#uses=1]
 	%462 = xor i32 %456, %461                 ; <i32> [#uses=1]
 	%463 = or i32 %446, 768                   ; <i32> [#uses=1]
 	%464 = and i32 %463, 1023                 ; <i32> [#uses=1]
-	%465 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %464; <i32*> [#uses=1]
-	%466 = load i32, i32* %465, align 4            ; <i32> [#uses=1]
+	%465 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %464; <ptr> [#uses=1]
+	%466 = load i32, ptr %465, align 4            ; <i32> [#uses=1]
 	%467 = add i32 %462, %466                 ; <i32> [#uses=1]
 	%468 = xor i32 %447, %422                 ; <i32> [#uses=1]
 	%469 = xor i32 %468, %467                 ; <i32> [#uses=5]
-	%470 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 10; <i32*> [#uses=1]
-	%471 = load i32, i32* %470, align 4            ; <i32> [#uses=1]
+	%470 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 10; <ptr> [#uses=1]
+	%471 = load i32, ptr %470, align 4            ; <i32> [#uses=1]
 	%472 = lshr i32 %469, 24                  ; <i32> [#uses=1]
-	%473 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %472; <i32*> [#uses=1]
-	%474 = load i32, i32* %473, align 4            ; <i32> [#uses=1]
+	%473 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %472; <ptr> [#uses=1]
+	%474 = load i32, ptr %473, align 4            ; <i32> [#uses=1]
 	%475 = lshr i32 %469, 16                  ; <i32> [#uses=1]
 	%476 = or i32 %475, 256                   ; <i32> [#uses=1]
 	%477 = and i32 %476, 511                  ; <i32> [#uses=1]
-	%478 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %477; <i32*> [#uses=1]
-	%479 = load i32, i32* %478, align 4            ; <i32> [#uses=1]
+	%478 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %477; <ptr> [#uses=1]
+	%479 = load i32, ptr %478, align 4            ; <i32> [#uses=1]
 	%480 = add i32 %479, %474                 ; <i32> [#uses=1]
 	%481 = lshr i32 %469, 8                   ; <i32> [#uses=1]
 	%482 = or i32 %481, 512                   ; <i32> [#uses=1]
 	%483 = and i32 %482, 767                  ; <i32> [#uses=1]
-	%484 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %483; <i32*> [#uses=1]
-	%485 = load i32, i32* %484, align 4            ; <i32> [#uses=1]
+	%484 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %483; <ptr> [#uses=1]
+	%485 = load i32, ptr %484, align 4            ; <i32> [#uses=1]
 	%486 = xor i32 %480, %485                 ; <i32> [#uses=1]
 	%487 = or i32 %469, 768                   ; <i32> [#uses=1]
 	%488 = and i32 %487, 1023                 ; <i32> [#uses=1]
-	%489 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %488; <i32*> [#uses=1]
-	%490 = load i32, i32* %489, align 4            ; <i32> [#uses=1]
+	%489 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %488; <ptr> [#uses=1]
+	%490 = load i32, ptr %489, align 4            ; <i32> [#uses=1]
 	%491 = add i32 %486, %490                 ; <i32> [#uses=1]
 	%492 = xor i32 %471, %446                 ; <i32> [#uses=1]
 	%493 = xor i32 %492, %491                 ; <i32> [#uses=5]
-	%494 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 9; <i32*> [#uses=1]
-	%495 = load i32, i32* %494, align 4            ; <i32> [#uses=1]
+	%494 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 9; <ptr> [#uses=1]
+	%495 = load i32, ptr %494, align 4            ; <i32> [#uses=1]
 	%496 = lshr i32 %493, 24                  ; <i32> [#uses=1]
-	%497 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %496; <i32*> [#uses=1]
-	%498 = load i32, i32* %497, align 4            ; <i32> [#uses=1]
+	%497 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %496; <ptr> [#uses=1]
+	%498 = load i32, ptr %497, align 4            ; <i32> [#uses=1]
 	%499 = lshr i32 %493, 16                  ; <i32> [#uses=1]
 	%500 = or i32 %499, 256                   ; <i32> [#uses=1]
 	%501 = and i32 %500, 511                  ; <i32> [#uses=1]
-	%502 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %501; <i32*> [#uses=1]
-	%503 = load i32, i32* %502, align 4            ; <i32> [#uses=1]
+	%502 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %501; <ptr> [#uses=1]
+	%503 = load i32, ptr %502, align 4            ; <i32> [#uses=1]
 	%504 = add i32 %503, %498                 ; <i32> [#uses=1]
 	%505 = lshr i32 %493, 8                   ; <i32> [#uses=1]
 	%506 = or i32 %505, 512                   ; <i32> [#uses=1]
 	%507 = and i32 %506, 767                  ; <i32> [#uses=1]
-	%508 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %507; <i32*> [#uses=1]
-	%509 = load i32, i32* %508, align 4            ; <i32> [#uses=1]
+	%508 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %507; <ptr> [#uses=1]
+	%509 = load i32, ptr %508, align 4            ; <i32> [#uses=1]
 	%510 = xor i32 %504, %509                 ; <i32> [#uses=1]
 	%511 = or i32 %493, 768                   ; <i32> [#uses=1]
 	%512 = and i32 %511, 1023                 ; <i32> [#uses=1]
-	%513 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %512; <i32*> [#uses=1]
-	%514 = load i32, i32* %513, align 4            ; <i32> [#uses=1]
+	%513 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %512; <ptr> [#uses=1]
+	%514 = load i32, ptr %513, align 4            ; <i32> [#uses=1]
 	%515 = add i32 %510, %514                 ; <i32> [#uses=1]
 	%516 = xor i32 %495, %469                 ; <i32> [#uses=1]
 	%517 = xor i32 %516, %515                 ; <i32> [#uses=5]
-	%518 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 8; <i32*> [#uses=1]
-	%519 = load i32, i32* %518, align 4            ; <i32> [#uses=1]
+	%518 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 8; <ptr> [#uses=1]
+	%519 = load i32, ptr %518, align 4            ; <i32> [#uses=1]
 	%520 = lshr i32 %517, 24                  ; <i32> [#uses=1]
-	%521 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %520; <i32*> [#uses=1]
-	%522 = load i32, i32* %521, align 4            ; <i32> [#uses=1]
+	%521 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %520; <ptr> [#uses=1]
+	%522 = load i32, ptr %521, align 4            ; <i32> [#uses=1]
 	%523 = lshr i32 %517, 16                  ; <i32> [#uses=1]
 	%524 = or i32 %523, 256                   ; <i32> [#uses=1]
 	%525 = and i32 %524, 511                  ; <i32> [#uses=1]
-	%526 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %525; <i32*> [#uses=1]
-	%527 = load i32, i32* %526, align 4            ; <i32> [#uses=1]
+	%526 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %525; <ptr> [#uses=1]
+	%527 = load i32, ptr %526, align 4            ; <i32> [#uses=1]
 	%528 = add i32 %527, %522                 ; <i32> [#uses=1]
 	%529 = lshr i32 %517, 8                   ; <i32> [#uses=1]
 	%530 = or i32 %529, 512                   ; <i32> [#uses=1]
 	%531 = and i32 %530, 767                  ; <i32> [#uses=1]
-	%532 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %531; <i32*> [#uses=1]
-	%533 = load i32, i32* %532, align 4            ; <i32> [#uses=1]
+	%532 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %531; <ptr> [#uses=1]
+	%533 = load i32, ptr %532, align 4            ; <i32> [#uses=1]
 	%534 = xor i32 %528, %533                 ; <i32> [#uses=1]
 	%535 = or i32 %517, 768                   ; <i32> [#uses=1]
 	%536 = and i32 %535, 1023                 ; <i32> [#uses=1]
-	%537 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %536; <i32*> [#uses=1]
-	%538 = load i32, i32* %537, align 4            ; <i32> [#uses=1]
+	%537 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %536; <ptr> [#uses=1]
+	%538 = load i32, ptr %537, align 4            ; <i32> [#uses=1]
 	%539 = add i32 %534, %538                 ; <i32> [#uses=1]
 	%540 = xor i32 %519, %493                 ; <i32> [#uses=1]
 	%541 = xor i32 %540, %539                 ; <i32> [#uses=5]
-	%542 = load i32, i32* undef, align 4           ; <i32> [#uses=1]
+	%542 = load i32, ptr undef, align 4           ; <i32> [#uses=1]
 	%543 = lshr i32 %541, 24                  ; <i32> [#uses=1]
-	%544 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %543; <i32*> [#uses=1]
-	%545 = load i32, i32* %544, align 4            ; <i32> [#uses=1]
+	%544 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %543; <ptr> [#uses=1]
+	%545 = load i32, ptr %544, align 4            ; <i32> [#uses=1]
 	%546 = lshr i32 %541, 16                  ; <i32> [#uses=1]
 	%547 = or i32 %546, 256                   ; <i32> [#uses=1]
 	%548 = and i32 %547, 511                  ; <i32> [#uses=1]
-	%549 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %548; <i32*> [#uses=1]
-	%550 = load i32, i32* %549, align 4            ; <i32> [#uses=1]
+	%549 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %548; <ptr> [#uses=1]
+	%550 = load i32, ptr %549, align 4            ; <i32> [#uses=1]
 	%551 = add i32 %550, %545                 ; <i32> [#uses=1]
 	%552 = lshr i32 %541, 8                   ; <i32> [#uses=1]
 	%553 = or i32 %552, 512                   ; <i32> [#uses=1]
 	%554 = and i32 %553, 767                  ; <i32> [#uses=1]
-	%555 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %554; <i32*> [#uses=1]
-	%556 = load i32, i32* %555, align 4            ; <i32> [#uses=1]
+	%555 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %554; <ptr> [#uses=1]
+	%556 = load i32, ptr %555, align 4            ; <i32> [#uses=1]
 	%557 = xor i32 %551, %556                 ; <i32> [#uses=1]
 	%558 = or i32 %541, 768                   ; <i32> [#uses=1]
 	%559 = and i32 %558, 1023                 ; <i32> [#uses=1]
-	%560 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %559; <i32*> [#uses=1]
-	%561 = load i32, i32* %560, align 4            ; <i32> [#uses=1]
+	%560 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %559; <ptr> [#uses=1]
+	%561 = load i32, ptr %560, align 4            ; <i32> [#uses=1]
 	%562 = add i32 %557, %561                 ; <i32> [#uses=1]
 	%563 = xor i32 %542, %517                 ; <i32> [#uses=1]
 	%564 = xor i32 %563, %562                 ; <i32> [#uses=5]
-	%565 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 6; <i32*> [#uses=1]
-	%566 = load i32, i32* %565, align 4            ; <i32> [#uses=1]
+	%565 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 6; <ptr> [#uses=1]
+	%566 = load i32, ptr %565, align 4            ; <i32> [#uses=1]
 	%567 = lshr i32 %564, 24                  ; <i32> [#uses=1]
-	%568 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %567; <i32*> [#uses=1]
-	%569 = load i32, i32* %568, align 4            ; <i32> [#uses=1]
+	%568 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %567; <ptr> [#uses=1]
+	%569 = load i32, ptr %568, align 4            ; <i32> [#uses=1]
 	%570 = lshr i32 %564, 16                  ; <i32> [#uses=1]
 	%571 = or i32 %570, 256                   ; <i32> [#uses=1]
 	%572 = and i32 %571, 511                  ; <i32> [#uses=1]
-	%573 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %572; <i32*> [#uses=1]
-	%574 = load i32, i32* %573, align 4            ; <i32> [#uses=1]
+	%573 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %572; <ptr> [#uses=1]
+	%574 = load i32, ptr %573, align 4            ; <i32> [#uses=1]
 	%575 = add i32 %574, %569                 ; <i32> [#uses=1]
 	%576 = lshr i32 %564, 8                   ; <i32> [#uses=1]
 	%577 = or i32 %576, 512                   ; <i32> [#uses=1]
 	%578 = and i32 %577, 767                  ; <i32> [#uses=1]
-	%579 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %578; <i32*> [#uses=1]
-	%580 = load i32, i32* %579, align 4            ; <i32> [#uses=1]
+	%579 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %578; <ptr> [#uses=1]
+	%580 = load i32, ptr %579, align 4            ; <i32> [#uses=1]
 	%581 = xor i32 %575, %580                 ; <i32> [#uses=1]
 	%582 = or i32 %564, 768                   ; <i32> [#uses=1]
 	%583 = and i32 %582, 1023                 ; <i32> [#uses=1]
-	%584 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %583; <i32*> [#uses=1]
-	%585 = load i32, i32* %584, align 4            ; <i32> [#uses=1]
+	%584 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %583; <ptr> [#uses=1]
+	%585 = load i32, ptr %584, align 4            ; <i32> [#uses=1]
 	%586 = add i32 %581, %585                 ; <i32> [#uses=1]
 	%587 = xor i32 %566, %541                 ; <i32> [#uses=1]
 	%588 = xor i32 %587, %586                 ; <i32> [#uses=5]
-	%589 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 5; <i32*> [#uses=1]
-	%590 = load i32, i32* %589, align 4            ; <i32> [#uses=1]
+	%589 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 5; <ptr> [#uses=1]
+	%590 = load i32, ptr %589, align 4            ; <i32> [#uses=1]
 	%591 = lshr i32 %588, 24                  ; <i32> [#uses=1]
-	%592 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %591; <i32*> [#uses=1]
-	%593 = load i32, i32* %592, align 4            ; <i32> [#uses=1]
+	%592 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %591; <ptr> [#uses=1]
+	%593 = load i32, ptr %592, align 4            ; <i32> [#uses=1]
 	%594 = lshr i32 %588, 16                  ; <i32> [#uses=1]
 	%595 = or i32 %594, 256                   ; <i32> [#uses=1]
 	%596 = and i32 %595, 511                  ; <i32> [#uses=1]
-	%597 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %596; <i32*> [#uses=1]
-	%598 = load i32, i32* %597, align 4            ; <i32> [#uses=1]
+	%597 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %596; <ptr> [#uses=1]
+	%598 = load i32, ptr %597, align 4            ; <i32> [#uses=1]
 	%599 = add i32 %598, %593                 ; <i32> [#uses=1]
 	%600 = lshr i32 %588, 8                   ; <i32> [#uses=1]
 	%601 = or i32 %600, 512                   ; <i32> [#uses=1]
 	%602 = and i32 %601, 767                  ; <i32> [#uses=1]
-	%603 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %602; <i32*> [#uses=1]
-	%604 = load i32, i32* %603, align 4            ; <i32> [#uses=1]
+	%603 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %602; <ptr> [#uses=1]
+	%604 = load i32, ptr %603, align 4            ; <i32> [#uses=1]
 	%605 = xor i32 %599, %604                 ; <i32> [#uses=1]
 	%606 = or i32 %588, 768                   ; <i32> [#uses=1]
 	%607 = and i32 %606, 1023                 ; <i32> [#uses=1]
-	%608 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %607; <i32*> [#uses=1]
-	%609 = load i32, i32* %608, align 4            ; <i32> [#uses=1]
+	%608 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %607; <ptr> [#uses=1]
+	%609 = load i32, ptr %608, align 4            ; <i32> [#uses=1]
 	%610 = add i32 %605, %609                 ; <i32> [#uses=1]
 	%611 = xor i32 %590, %564                 ; <i32> [#uses=1]
 	%612 = xor i32 %611, %610                 ; <i32> [#uses=5]
-	%613 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 4; <i32*> [#uses=1]
-	%614 = load i32, i32* %613, align 4            ; <i32> [#uses=1]
+	%613 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 4; <ptr> [#uses=1]
+	%614 = load i32, ptr %613, align 4            ; <i32> [#uses=1]
 	%615 = lshr i32 %612, 24                  ; <i32> [#uses=1]
-	%616 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %615; <i32*> [#uses=1]
-	%617 = load i32, i32* %616, align 4            ; <i32> [#uses=1]
+	%616 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %615; <ptr> [#uses=1]
+	%617 = load i32, ptr %616, align 4            ; <i32> [#uses=1]
 	%618 = lshr i32 %612, 16                  ; <i32> [#uses=1]
 	%619 = or i32 %618, 256                   ; <i32> [#uses=1]
 	%620 = and i32 %619, 511                  ; <i32> [#uses=1]
-	%621 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %620; <i32*> [#uses=1]
-	%622 = load i32, i32* %621, align 4            ; <i32> [#uses=1]
+	%621 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %620; <ptr> [#uses=1]
+	%622 = load i32, ptr %621, align 4            ; <i32> [#uses=1]
 	%623 = add i32 %622, %617                 ; <i32> [#uses=1]
 	%624 = lshr i32 %612, 8                   ; <i32> [#uses=1]
 	%625 = or i32 %624, 512                   ; <i32> [#uses=1]
 	%626 = and i32 %625, 767                  ; <i32> [#uses=1]
-	%627 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %626; <i32*> [#uses=1]
-	%628 = load i32, i32* %627, align 4            ; <i32> [#uses=1]
+	%627 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %626; <ptr> [#uses=1]
+	%628 = load i32, ptr %627, align 4            ; <i32> [#uses=1]
 	%629 = xor i32 %623, %628                 ; <i32> [#uses=1]
 	%630 = or i32 %612, 768                   ; <i32> [#uses=1]
 	%631 = and i32 %630, 1023                 ; <i32> [#uses=1]
-	%632 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %631; <i32*> [#uses=1]
-	%633 = load i32, i32* %632, align 4            ; <i32> [#uses=1]
+	%632 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %631; <ptr> [#uses=1]
+	%633 = load i32, ptr %632, align 4            ; <i32> [#uses=1]
 	%634 = add i32 %629, %633                 ; <i32> [#uses=1]
 	%635 = xor i32 %614, %588                 ; <i32> [#uses=1]
 	%636 = xor i32 %635, %634                 ; <i32> [#uses=5]
-	%637 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 3; <i32*> [#uses=1]
-	%638 = load i32, i32* %637, align 4            ; <i32> [#uses=1]
+	%637 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 3; <ptr> [#uses=1]
+	%638 = load i32, ptr %637, align 4            ; <i32> [#uses=1]
 	%639 = lshr i32 %636, 24                  ; <i32> [#uses=1]
-	%640 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %639; <i32*> [#uses=1]
-	%641 = load i32, i32* %640, align 4            ; <i32> [#uses=1]
+	%640 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %639; <ptr> [#uses=1]
+	%641 = load i32, ptr %640, align 4            ; <i32> [#uses=1]
 	%642 = lshr i32 %636, 16                  ; <i32> [#uses=1]
 	%643 = or i32 %642, 256                   ; <i32> [#uses=1]
 	%644 = and i32 %643, 511                  ; <i32> [#uses=1]
-	%645 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %644; <i32*> [#uses=1]
-	%646 = load i32, i32* %645, align 4            ; <i32> [#uses=1]
+	%645 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %644; <ptr> [#uses=1]
+	%646 = load i32, ptr %645, align 4            ; <i32> [#uses=1]
 	%647 = add i32 %646, %641                 ; <i32> [#uses=1]
 	%648 = lshr i32 %636, 8                   ; <i32> [#uses=1]
 	%649 = or i32 %648, 512                   ; <i32> [#uses=1]
 	%650 = and i32 %649, 767                  ; <i32> [#uses=1]
-	%651 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %650; <i32*> [#uses=1]
-	%652 = load i32, i32* %651, align 4            ; <i32> [#uses=1]
+	%651 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %650; <ptr> [#uses=1]
+	%652 = load i32, ptr %651, align 4            ; <i32> [#uses=1]
 	%653 = xor i32 %647, %652                 ; <i32> [#uses=1]
 	%654 = or i32 %636, 768                   ; <i32> [#uses=1]
 	%655 = and i32 %654, 1023                 ; <i32> [#uses=1]
-	%656 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %655; <i32*> [#uses=1]
-	%657 = load i32, i32* %656, align 4            ; <i32> [#uses=1]
+	%656 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %655; <ptr> [#uses=1]
+	%657 = load i32, ptr %656, align 4            ; <i32> [#uses=1]
 	%658 = add i32 %653, %657                 ; <i32> [#uses=1]
 	%659 = xor i32 %638, %612                 ; <i32> [#uses=1]
 	%660 = xor i32 %659, %658                 ; <i32> [#uses=5]
-	%661 = load i32, i32* undef, align 4           ; <i32> [#uses=1]
+	%661 = load i32, ptr undef, align 4           ; <i32> [#uses=1]
 	%662 = lshr i32 %660, 24                  ; <i32> [#uses=1]
-	%663 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %662; <i32*> [#uses=1]
-	%664 = load i32, i32* %663, align 4            ; <i32> [#uses=1]
+	%663 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %662; <ptr> [#uses=1]
+	%664 = load i32, ptr %663, align 4            ; <i32> [#uses=1]
 	%665 = lshr i32 %660, 16                  ; <i32> [#uses=1]
 	%666 = or i32 %665, 256                   ; <i32> [#uses=1]
 	%667 = and i32 %666, 511                  ; <i32> [#uses=1]
-	%668 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %667; <i32*> [#uses=1]
-	%669 = load i32, i32* %668, align 4            ; <i32> [#uses=1]
+	%668 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %667; <ptr> [#uses=1]
+	%669 = load i32, ptr %668, align 4            ; <i32> [#uses=1]
 	%670 = add i32 %669, %664                 ; <i32> [#uses=1]
 	%671 = lshr i32 %660, 8                   ; <i32> [#uses=1]
 	%672 = or i32 %671, 512                   ; <i32> [#uses=1]
 	%673 = and i32 %672, 767                  ; <i32> [#uses=1]
-	%674 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %673; <i32*> [#uses=1]
-	%675 = load i32, i32* %674, align 4            ; <i32> [#uses=1]
+	%674 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %673; <ptr> [#uses=1]
+	%675 = load i32, ptr %674, align 4            ; <i32> [#uses=1]
 	%676 = xor i32 %670, %675                 ; <i32> [#uses=1]
 	%677 = or i32 %660, 768                   ; <i32> [#uses=1]
 	%678 = and i32 %677, 1023                 ; <i32> [#uses=1]
-	%679 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %678; <i32*> [#uses=1]
-	%680 = load i32, i32* %679, align 4            ; <i32> [#uses=1]
+	%679 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %678; <ptr> [#uses=1]
+	%680 = load i32, ptr %679, align 4            ; <i32> [#uses=1]
 	%681 = add i32 %676, %680                 ; <i32> [#uses=1]
 	%682 = xor i32 %661, %636                 ; <i32> [#uses=1]
 	%683 = xor i32 %682, %681                 ; <i32> [#uses=5]
-	%684 = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 0, i32 1; <i32*> [#uses=1]
+	%684 = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 0, i32 1; <ptr> [#uses=1]
 	br label %bb2
 
 bb2:                                              ; preds = %bb1, %bb
-	%.pn2.in = phi i32* [ %329, %bb ], [ %0, %bb1 ]; <i32*> [#uses=1]
+	%.pn2.in = phi ptr [ %329, %bb ], [ %0, %bb1 ]; <ptr> [#uses=1]
 	%.pn3 = phi i32 [ %328, %bb ], [ %683, %bb1 ]; <i32> [#uses=1]
 	%.pn15.in = phi i32 [ %328, %bb ], [ %683, %bb1 ]; <i32> [#uses=1]
 	%.pn14.in.in.in = phi i32 [ %328, %bb ], [ %683, %bb1 ]; <i32> [#uses=1]
 	%.pn13.in.in.in = phi i32 [ %328, %bb ], [ %683, %bb1 ]; <i32> [#uses=1]
 	%.pn10.in.in = phi i32 [ %328, %bb ], [ %683, %bb1 ]; <i32> [#uses=1]
-	%.pn4.in = phi i32* [ null, %bb ], [ %684, %bb1 ]; <i32*> [#uses=1]
+	%.pn4.in = phi ptr [ null, %bb ], [ %684, %bb1 ]; <ptr> [#uses=1]
 	%.pn5 = phi i32 [ 0, %bb ], [ %660, %bb1 ]; <i32> [#uses=1]
 	%.pn14.in.in = lshr i32 %.pn14.in.in.in, 16; <i32> [#uses=1]
 	%.pn14.in = or i32 %.pn14.in.in, 256      ; <i32> [#uses=1]
@@ -712,26 +712,26 @@ bb2:                                              ; preds = %bb1, %bb
 	%.pn15 = lshr i32 %.pn15.in, 24           ; <i32> [#uses=1]
 	%.pn14 = and i32 %.pn14.in, 511           ; <i32> [#uses=1]
 	%.pn13.in = or i32 %.pn13.in.in, 512      ; <i32> [#uses=1]
-	%.pn11.in = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %.pn15; <i32*> [#uses=1]
-	%.pn12.in = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %.pn14; <i32*> [#uses=1]
+	%.pn11.in = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %.pn15; <ptr> [#uses=1]
+	%.pn12.in = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %.pn14; <ptr> [#uses=1]
 	%.pn13 = and i32 %.pn13.in, 767           ; <i32> [#uses=1]
 	%.pn10.in = or i32 %.pn10.in.in, 768      ; <i32> [#uses=1]
-	%.pn11 = load i32, i32* %.pn11.in              ; <i32> [#uses=1]
-	%.pn12 = load i32, i32* %.pn12.in              ; <i32> [#uses=1]
-	%.pn9.in = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %.pn13; <i32*> [#uses=1]
+	%.pn11 = load i32, ptr %.pn11.in              ; <i32> [#uses=1]
+	%.pn12 = load i32, ptr %.pn12.in              ; <i32> [#uses=1]
+	%.pn9.in = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %.pn13; <ptr> [#uses=1]
 	%.pn10 = and i32 %.pn10.in, 1023          ; <i32> [#uses=1]
 	%.pn8 = add i32 %.pn12, %.pn11            ; <i32> [#uses=1]
-	%.pn9 = load i32, i32* %.pn9.in                ; <i32> [#uses=1]
-	%.pn7.in = getelementptr %struct.BF_KEY, %struct.BF_KEY* %key, i32 0, i32 1, i32 %.pn10; <i32*> [#uses=1]
+	%.pn9 = load i32, ptr %.pn9.in                ; <i32> [#uses=1]
+	%.pn7.in = getelementptr %struct.BF_KEY, ptr %key, i32 0, i32 1, i32 %.pn10; <ptr> [#uses=1]
 	%.pn6 = xor i32 %.pn8, %.pn9              ; <i32> [#uses=1]
-	%.pn7 = load i32, i32* %.pn7.in                ; <i32> [#uses=1]
-	%.pn4 = load i32, i32* %.pn4.in                ; <i32> [#uses=1]
-	%.pn2 = load i32, i32* %.pn2.in                ; <i32> [#uses=1]
+	%.pn7 = load i32, ptr %.pn7.in                ; <i32> [#uses=1]
+	%.pn4 = load i32, ptr %.pn4.in                ; <i32> [#uses=1]
+	%.pn2 = load i32, ptr %.pn2.in                ; <i32> [#uses=1]
 	%.pn = add i32 %.pn6, %.pn7               ; <i32> [#uses=1]
 	%r.0 = xor i32 %.pn2, %.pn3               ; <i32> [#uses=1]
 	%.pn1 = xor i32 %.pn, %.pn5               ; <i32> [#uses=1]
 	%l.0 = xor i32 %.pn1, %.pn4               ; <i32> [#uses=1]
-	store i32 %l.0, i32* undef, align 4
-	store i32 %r.0, i32* %data, align 4
+	store i32 %l.0, ptr undef, align 4
+	store i32 %r.0, ptr %data, align 4
 	ret void
 }

diff  --git a/llvm/test/CodeGen/Thumb/2009-08-12-RegInfoAssert.ll b/llvm/test/CodeGen/Thumb/2009-08-12-RegInfoAssert.ll
index 983e0f5cfda46..4594d8ad6f56c 100644
--- a/llvm/test/CodeGen/Thumb/2009-08-12-RegInfoAssert.ll
+++ b/llvm/test/CodeGen/Thumb/2009-08-12-RegInfoAssert.ll
@@ -1,29 +1,29 @@
 ; RUN: llc < %s -mtriple=thumbv6-apple-darwin
 
-	%struct.vorbis_comment = type { i8**, i32*, i32, i8* }
- at .str16 = external constant [2 x i8], align 1     ; <[2 x i8]*> [#uses=1]
+	%struct.vorbis_comment = type { ptr, ptr, i32, ptr }
+ at .str16 = external constant [2 x i8], align 1     ; <ptr> [#uses=1]
 
-declare i8* @__strcpy_chk(i8*, i8*, i32) nounwind
+declare ptr @__strcpy_chk(ptr, ptr, i32) nounwind
 
-declare i8* @__strcat_chk(i8*, i8*, i32) nounwind
+declare ptr @__strcat_chk(ptr, ptr, i32) nounwind
 
-define i8* @vorbis_comment_query(%struct.vorbis_comment* nocapture %vc, i8* %tag, i32 %count) nounwind {
+define ptr @vorbis_comment_query(ptr nocapture %vc, ptr %tag, i32 %count) nounwind {
 entry:
-	%0 = alloca i8, i32 undef, align 4        ; <i8*> [#uses=2]
-	%1 = call  i8* @__strcpy_chk(i8* %0, i8* %tag, i32 -1) nounwind; <i8*> [#uses=0]
-	%2 = call  i8* @__strcat_chk(i8* %0, i8* getelementptr ([2 x i8], [2 x i8]* @.str16, i32 0, i32 0), i32 -1) nounwind; <i8*> [#uses=0]
-	%3 = getelementptr %struct.vorbis_comment, %struct.vorbis_comment* %vc, i32 0, i32 0; <i8***> [#uses=1]
+	%0 = alloca i8, i32 undef, align 4        ; <ptr> [#uses=2]
+	%1 = call  ptr @__strcpy_chk(ptr %0, ptr %tag, i32 -1) nounwind; <ptr> [#uses=0]
+	%2 = call  ptr @__strcat_chk(ptr %0, ptr @.str16, i32 -1) nounwind; <ptr> [#uses=0]
+	%3 = getelementptr %struct.vorbis_comment, ptr %vc, i32 0, i32 0; <ptr> [#uses=1]
 	br label %bb11
 
 bb6:                                              ; preds = %bb11
-	%4 = load i8**, i8*** %3, align 4               ; <i8**> [#uses=1]
-	%scevgep = getelementptr i8*, i8** %4, i32 %8  ; <i8**> [#uses=1]
-	%5 = load i8*, i8** %scevgep, align 4          ; <i8*> [#uses=1]
+	%4 = load ptr, ptr %3, align 4               ; <ptr> [#uses=1]
+	%scevgep = getelementptr ptr, ptr %4, i32 %8  ; <ptr> [#uses=1]
+	%5 = load ptr, ptr %scevgep, align 4          ; <ptr> [#uses=1]
 	br label %bb3.i
 
 bb3.i:                                            ; preds = %bb3.i, %bb6
-	%scevgep7.i = getelementptr i8, i8* %5, i32 0 ; <i8*> [#uses=1]
-	%6 = load i8, i8* %scevgep7.i, align 1        ; <i8> [#uses=0]
+	%scevgep7.i = getelementptr i8, ptr %5, i32 0 ; <ptr> [#uses=1]
+	%6 = load i8, ptr %scevgep7.i, align 1        ; <i8> [#uses=0]
 	br i1 undef, label %bb3.i, label %bb10
 
 bb10:                                             ; preds = %bb3.i
@@ -36,5 +36,5 @@ bb11:                                             ; preds = %bb10, %entry
 	br i1 %9, label %bb6, label %bb13
 
 bb13:                                             ; preds = %bb11
-	ret i8* null
+	ret ptr null
 }

diff  --git a/llvm/test/CodeGen/Thumb/2009-08-20-ISelBug.ll b/llvm/test/CodeGen/Thumb/2009-08-20-ISelBug.ll
index 5c4b34d946c66..cc6584a60343f 100644
--- a/llvm/test/CodeGen/Thumb/2009-08-20-ISelBug.ll
+++ b/llvm/test/CodeGen/Thumb/2009-08-20-ISelBug.ll
@@ -1,57 +1,56 @@
 ; RUN: llc < %s -mtriple=thumbv6-apple-darwin -relocation-model=pic -frame-pointer=all -mattr=+v6 -verify-machineinstrs | FileCheck %s
 ; rdar://7157006
 
-%struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
+%struct.FILE = type { ptr, i32, i32, i16, i16, %struct.__sbuf, i32, ptr, ptr, ptr, ptr, ptr, %struct.__sbuf, ptr, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
 %struct.__sFILEX = type opaque
-%struct.__sbuf = type { i8*, i32 }
-%struct.asl_file_t = type { i32, i32, i32, %struct.file_string_t*, i64, i64, i64, i64, i64, i64, i32, %struct.FILE*, i8*, i8* }
-%struct.file_string_t = type { i64, i32, %struct.file_string_t*, [0 x i8] }
+%struct.__sbuf = type { ptr, i32 }
+%struct.asl_file_t = type { i32, i32, i32, ptr, i64, i64, i64, i64, i64, i64, i32, ptr, ptr, ptr }
+%struct.file_string_t = type { i64, i32, ptr, [0 x i8] }
 
- at llvm.used = appending global [1 x i8*] [i8* bitcast (i32 (%struct.asl_file_t*, i64, i64*)* @t to i8*)], section "llvm.metadata" ; <[1 x i8*]*> [#uses=0]
+ at llvm.used = appending global [1 x ptr] [ptr @t], section "llvm.metadata" ; <ptr> [#uses=0]
 
-define i32 @t(%struct.asl_file_t* %s, i64 %off, i64* %out) nounwind optsize {
+define i32 @t(ptr %s, i64 %off, ptr %out) nounwind optsize {
 ; CHECK-LABEL: t:
 ; CHECK: adds {{r[0-7]}}, #8
 entry:
-  %val = alloca i64, align 4                      ; <i64*> [#uses=3]
-  %0 = icmp eq %struct.asl_file_t* %s, null       ; <i1> [#uses=1]
+  %val = alloca i64, align 4                      ; <ptr> [#uses=3]
+  %0 = icmp eq ptr %s, null       ; <i1> [#uses=1]
   br i1 %0, label %bb13, label %bb1
 
 bb1:                                              ; preds = %entry
-  %1 = getelementptr inbounds %struct.asl_file_t, %struct.asl_file_t* %s, i32 0, i32 11 ; <%struct.FILE**> [#uses=2]
-  %2 = load %struct.FILE*, %struct.FILE** %1, align 4            ; <%struct.FILE*> [#uses=2]
-  %3 = icmp eq %struct.FILE* %2, null             ; <i1> [#uses=1]
+  %1 = getelementptr inbounds %struct.asl_file_t, ptr %s, i32 0, i32 11 ; <ptr> [#uses=2]
+  %2 = load ptr, ptr %1, align 4            ; <ptr> [#uses=2]
+  %3 = icmp eq ptr %2, null             ; <i1> [#uses=1]
   br i1 %3, label %bb13, label %bb3
 
 bb3:                                              ; preds = %bb1
   %4 = add nsw i64 %off, 8                        ; <i64> [#uses=1]
-  %5 = getelementptr inbounds %struct.asl_file_t, %struct.asl_file_t* %s, i32 0, i32 10 ; <i32*> [#uses=1]
-  %6 = load i32, i32* %5, align 4                      ; <i32> [#uses=1]
+  %5 = getelementptr inbounds %struct.asl_file_t, ptr %s, i32 0, i32 10 ; <ptr> [#uses=1]
+  %6 = load i32, ptr %5, align 4                      ; <i32> [#uses=1]
   %7 = zext i32 %6 to i64                         ; <i64> [#uses=1]
   %8 = icmp sgt i64 %4, %7                        ; <i1> [#uses=1]
   br i1 %8, label %bb13, label %bb5
 
 bb5:                                              ; preds = %bb3
-  %9 = call  i32 @fseeko(%struct.FILE* %2, i64 %off, i32 0) nounwind ; <i32> [#uses=1]
+  %9 = call  i32 @fseeko(ptr %2, i64 %off, i32 0) nounwind ; <i32> [#uses=1]
   %10 = icmp eq i32 %9, 0                         ; <i1> [#uses=1]
   br i1 %10, label %bb7, label %bb13
 
 bb7:                                              ; preds = %bb5
-  store i64 0, i64* %val, align 4
-  %11 = load %struct.FILE*, %struct.FILE** %1, align 4           ; <%struct.FILE*> [#uses=1]
-  %val8 = bitcast i64* %val to i8*                ; <i8*> [#uses=1]
-  %12 = call  i32 @fread(i8* noalias %val8, i32 8, i32 1, %struct.FILE* noalias %11) nounwind ; <i32> [#uses=1]
+  store i64 0, ptr %val, align 4
+  %11 = load ptr, ptr %1, align 4           ; <ptr> [#uses=1]
+  %12 = call  i32 @fread(ptr noalias %val, i32 8, i32 1, ptr noalias %11) nounwind ; <i32> [#uses=1]
   %13 = icmp eq i32 %12, 1                        ; <i1> [#uses=1]
   br i1 %13, label %bb10, label %bb13
 
 bb10:                                             ; preds = %bb7
-  %14 = icmp eq i64* %out, null                   ; <i1> [#uses=1]
+  %14 = icmp eq ptr %out, null                   ; <i1> [#uses=1]
   br i1 %14, label %bb13, label %bb11
 
 bb11:                                             ; preds = %bb10
-  %15 = load i64, i64* %val, align 4                   ; <i64> [#uses=1]
+  %15 = load i64, ptr %val, align 4                   ; <i64> [#uses=1]
   %16 = call  i64 @asl_core_ntohq(i64 %15) nounwind ; <i64> [#uses=1]
-  store i64 %16, i64* %out, align 4
+  store i64 %16, ptr %out, align 4
   ret i32 0
 
 bb13:                                             ; preds = %bb10, %bb7, %bb5, %bb3, %bb1, %entry
@@ -59,8 +58,8 @@ bb13:                                             ; preds = %bb10, %bb7, %bb5, %
   ret i32 %.0
 }
 
-declare i32 @fseeko(%struct.FILE* nocapture, i64, i32) nounwind
+declare i32 @fseeko(ptr nocapture, i64, i32) nounwind
 
-declare i32 @fread(i8* noalias nocapture, i32, i32, %struct.FILE* noalias nocapture) nounwind
+declare i32 @fread(ptr noalias nocapture, i32, i32, ptr noalias nocapture) nounwind
 
 declare i64 @asl_core_ntohq(i64)

diff  --git a/llvm/test/CodeGen/Thumb/2009-12-17-pre-regalloc-taildup.ll b/llvm/test/CodeGen/Thumb/2009-12-17-pre-regalloc-taildup.ll
index e7684177e31cd..5ae8b0f107421 100644
--- a/llvm/test/CodeGen/Thumb/2009-12-17-pre-regalloc-taildup.ll
+++ b/llvm/test/CodeGen/Thumb/2009-12-17-pre-regalloc-taildup.ll
@@ -7,60 +7,60 @@ target triple = "thumbv7-apple-darwin10"
 ; CHECK-NOT: pop
 ; CHECK: bx lr
 
- at codetable.2928 = internal constant [5 x i8*] [i8* blockaddress(@interpret_threaded, %RETURN), i8* blockaddress(@interpret_threaded, %INCREMENT), i8* blockaddress(@interpret_threaded, %DECREMENT), i8* blockaddress(@interpret_threaded, %DOUBLE), i8* blockaddress(@interpret_threaded, %SWAPWORD)] ; <[5 x i8*]*> [#uses=5]
- at llvm.used = appending global [1 x i8*] [i8* bitcast (i32 (i8*)* @interpret_threaded to i8*)], section "llvm.metadata" ; <[1 x i8*]*> [#uses=0]
+ at codetable.2928 = internal constant [5 x ptr] [ptr blockaddress(@interpret_threaded, %RETURN), ptr blockaddress(@interpret_threaded, %INCREMENT), ptr blockaddress(@interpret_threaded, %DECREMENT), ptr blockaddress(@interpret_threaded, %DOUBLE), ptr blockaddress(@interpret_threaded, %SWAPWORD)] ; <ptr> [#uses=5]
+ at llvm.used = appending global [1 x ptr] [ptr @interpret_threaded], section "llvm.metadata" ; <ptr> [#uses=0]
 
-define i32 @interpret_threaded(i8* nocapture %opcodes) nounwind readonly optsize {
+define i32 @interpret_threaded(ptr nocapture %opcodes) nounwind readonly optsize {
 entry:
-  %0 = load i8, i8* %opcodes, align 1                 ; <i8> [#uses=1]
+  %0 = load i8, ptr %opcodes, align 1                 ; <i8> [#uses=1]
   %1 = zext i8 %0 to i32                          ; <i32> [#uses=1]
-  %2 = getelementptr inbounds [5 x i8*], [5 x i8*]* @codetable.2928, i32 0, i32 %1 ; <i8**> [#uses=1]
+  %2 = getelementptr inbounds [5 x ptr], ptr @codetable.2928, i32 0, i32 %1 ; <ptr> [#uses=1]
   br label %bb
 
 bb:                                               ; preds = %bb.backedge, %entry
   %indvar = phi i32 [ %phitmp, %bb.backedge ], [ 1, %entry ] ; <i32> [#uses=2]
-  %gotovar.22.0.in = phi i8** [ %gotovar.22.0.in.be, %bb.backedge ], [ %2, %entry ] ; <i8**> [#uses=1]
+  %gotovar.22.0.in = phi ptr [ %gotovar.22.0.in.be, %bb.backedge ], [ %2, %entry ] ; <ptr> [#uses=1]
   %result.0 = phi i32 [ %result.0.be, %bb.backedge ], [ 0, %entry ] ; <i32> [#uses=6]
-  %opcodes_addr.0 = getelementptr i8, i8* %opcodes, i32 %indvar ; <i8*> [#uses=4]
-  %gotovar.22.0 = load i8*, i8** %gotovar.22.0.in, align 4 ; <i8*> [#uses=1]
-  indirectbr i8* %gotovar.22.0, [label %RETURN, label %INCREMENT, label %DECREMENT, label %DOUBLE, label %SWAPWORD]
+  %opcodes_addr.0 = getelementptr i8, ptr %opcodes, i32 %indvar ; <ptr> [#uses=4]
+  %gotovar.22.0 = load ptr, ptr %gotovar.22.0.in, align 4 ; <ptr> [#uses=1]
+  indirectbr ptr %gotovar.22.0, [label %RETURN, label %INCREMENT, label %DECREMENT, label %DOUBLE, label %SWAPWORD]
 
 RETURN:                                           ; preds = %bb
   ret i32 %result.0
 
 INCREMENT:                                        ; preds = %bb
   %3 = add nsw i32 %result.0, 1                   ; <i32> [#uses=1]
-  %4 = load i8, i8* %opcodes_addr.0, align 1          ; <i8> [#uses=1]
+  %4 = load i8, ptr %opcodes_addr.0, align 1          ; <i8> [#uses=1]
   %5 = zext i8 %4 to i32                          ; <i32> [#uses=1]
-  %6 = getelementptr inbounds [5 x i8*], [5 x i8*]* @codetable.2928, i32 0, i32 %5 ; <i8**> [#uses=1]
+  %6 = getelementptr inbounds [5 x ptr], ptr @codetable.2928, i32 0, i32 %5 ; <ptr> [#uses=1]
   br label %bb.backedge
 
 bb.backedge:                                      ; preds = %SWAPWORD, %DOUBLE, %DECREMENT, %INCREMENT
-  %gotovar.22.0.in.be = phi i8** [ %20, %SWAPWORD ], [ %14, %DOUBLE ], [ %10, %DECREMENT ], [ %6, %INCREMENT ] ; <i8**> [#uses=1]
+  %gotovar.22.0.in.be = phi ptr [ %20, %SWAPWORD ], [ %14, %DOUBLE ], [ %10, %DECREMENT ], [ %6, %INCREMENT ] ; <ptr> [#uses=1]
   %result.0.be = phi i32 [ %17, %SWAPWORD ], [ %11, %DOUBLE ], [ %7, %DECREMENT ], [ %3, %INCREMENT ] ; <i32> [#uses=1]
   %phitmp = add i32 %indvar, 1                    ; <i32> [#uses=1]
   br label %bb
 
 DECREMENT:                                        ; preds = %bb
   %7 = add i32 %result.0, -1                      ; <i32> [#uses=1]
-  %8 = load i8, i8* %opcodes_addr.0, align 1          ; <i8> [#uses=1]
+  %8 = load i8, ptr %opcodes_addr.0, align 1          ; <i8> [#uses=1]
   %9 = zext i8 %8 to i32                          ; <i32> [#uses=1]
-  %10 = getelementptr inbounds [5 x i8*], [5 x i8*]* @codetable.2928, i32 0, i32 %9 ; <i8**> [#uses=1]
+  %10 = getelementptr inbounds [5 x ptr], ptr @codetable.2928, i32 0, i32 %9 ; <ptr> [#uses=1]
   br label %bb.backedge
 
 DOUBLE:                                           ; preds = %bb
   %11 = shl i32 %result.0, 1                      ; <i32> [#uses=1]
-  %12 = load i8, i8* %opcodes_addr.0, align 1         ; <i8> [#uses=1]
+  %12 = load i8, ptr %opcodes_addr.0, align 1         ; <i8> [#uses=1]
   %13 = zext i8 %12 to i32                        ; <i32> [#uses=1]
-  %14 = getelementptr inbounds [5 x i8*], [5 x i8*]* @codetable.2928, i32 0, i32 %13 ; <i8**> [#uses=1]
+  %14 = getelementptr inbounds [5 x ptr], ptr @codetable.2928, i32 0, i32 %13 ; <ptr> [#uses=1]
   br label %bb.backedge
 
 SWAPWORD:                                         ; preds = %bb
   %15 = shl i32 %result.0, 16                     ; <i32> [#uses=1]
   %16 = ashr i32 %result.0, 16                    ; <i32> [#uses=1]
   %17 = or i32 %15, %16                           ; <i32> [#uses=1]
-  %18 = load i8, i8* %opcodes_addr.0, align 1         ; <i8> [#uses=1]
+  %18 = load i8, ptr %opcodes_addr.0, align 1         ; <i8> [#uses=1]
   %19 = zext i8 %18 to i32                        ; <i32> [#uses=1]
-  %20 = getelementptr inbounds [5 x i8*], [5 x i8*]* @codetable.2928, i32 0, i32 %19 ; <i8**> [#uses=1]
+  %20 = getelementptr inbounds [5 x ptr], ptr @codetable.2928, i32 0, i32 %19 ; <ptr> [#uses=1]
   br label %bb.backedge
 }

diff  --git a/llvm/test/CodeGen/Thumb/2010-06-18-SibCallCrash.ll b/llvm/test/CodeGen/Thumb/2010-06-18-SibCallCrash.ll
index e1efd3b7238f6..0fc35a507d5d1 100644
--- a/llvm/test/CodeGen/Thumb/2010-06-18-SibCallCrash.ll
+++ b/llvm/test/CodeGen/Thumb/2010-06-18-SibCallCrash.ll
@@ -1,8 +1,8 @@
 ; RUN: llc -mtriple=thumb-eabi %s -o /dev/null
 ; rdar://8104457
 
-define arm_apcscc void @t(i32* %m) nounwind {
+define arm_apcscc void @t(ptr %m) nounwind {
 entry:
-  tail call arm_apcscc  void undef(i32* %m, i16 zeroext undef) nounwind
+  tail call arm_apcscc  void undef(ptr %m, i16 zeroext undef) nounwind
   ret void
 }

diff  --git a/llvm/test/CodeGen/Thumb/2010-07-15-debugOrdering.ll b/llvm/test/CodeGen/Thumb/2010-07-15-debugOrdering.ll
index d7303ede4d321..2dcf3b71f1818 100644
--- a/llvm/test/CodeGen/Thumb/2010-07-15-debugOrdering.ll
+++ b/llvm/test/CodeGen/Thumb/2010-07-15-debugOrdering.ll
@@ -5,9 +5,9 @@
 
 %0 = type { [3 x double] }
 
- at llvm.used = appending global [1 x i8*] [i8* bitcast (void (%0*, i32, i32)* @_Z19getClosestDiagonal3ii to i8*)], section "llvm.metadata" ; <[1 x i8*]*> [#uses=0]
+ at llvm.used = appending global [1 x ptr] [ptr @_Z19getClosestDiagonal3ii], section "llvm.metadata" ; <ptr> [#uses=0]
 
-define void @_Z19getClosestDiagonal3ii(%0* noalias sret(%0), i32, i32) nounwind {
+define void @_Z19getClosestDiagonal3ii(ptr noalias sret(%0), i32, i32) nounwind {
 ; CHECK: bl ___muldf3
 ; CHECK: beq LBB0
 ; CHECK: bl ___muldf3
@@ -28,15 +28,15 @@ define void @_Z19getClosestDiagonal3ii(%0* noalias sret(%0), i32, i32) nounwind
   call void @llvm.dbg.value(metadata double %storemerge, i64 0, metadata !91, metadata !DIExpression()), !dbg !0
   %v_7 = icmp eq i32 %2, 1, !dbg !92                ; <i1> [#uses=1]
   %storemerge2 = select i1 %v_7, double 1.000000e+00, double -1.000000e+00 ; <double> [#uses=3]
-  %v_8 = getelementptr inbounds %0, %0* %0, i32 0, i32 0, i32 0 ; <double*> [#uses=1]
-  %v_10 = getelementptr inbounds %0, %0* %0, i32 0, i32 0, i32 2 ; <double*> [#uses=1]
+  %v_8 = getelementptr inbounds %0, ptr %0, i32 0, i32 0, i32 0 ; <ptr> [#uses=1]
+  %v_10 = getelementptr inbounds %0, ptr %0, i32 0, i32 0, i32 2 ; <ptr> [#uses=1]
   %v_11 = fmul double %storemerge1, %storemerge1, !dbg !93 ; <double> [#uses=1]
   %v_15 = tail call double @sqrt(double %v_11) nounwind readonly, !dbg !93 ; <double> [#uses=1]
   %v_16 = fdiv double 1.000000e+00, %v_15, !dbg !93   ; <double> [#uses=3]
   %v_17 = fmul double %storemerge, %v_16, !dbg !97    ; <double> [#uses=1]
-  store double %v_17, double* %v_8, align 4, !dbg !97
+  store double %v_17, ptr %v_8, align 4, !dbg !97
   %v_19 = fmul double %storemerge2, %v_16, !dbg !97   ; <double> [#uses=1]
-  store double %v_19, double* %v_10, align 4, !dbg !97
+  store double %v_19, ptr %v_10, align 4, !dbg !97
   ret void, !dbg !98
 }
 

diff  --git a/llvm/test/CodeGen/Thumb/2011-05-11-DAGLegalizer.ll b/llvm/test/CodeGen/Thumb/2011-05-11-DAGLegalizer.ll
index a9068f01a68f0..b4478be9dd681 100644
--- a/llvm/test/CodeGen/Thumb/2011-05-11-DAGLegalizer.ll
+++ b/llvm/test/CodeGen/Thumb/2011-05-11-DAGLegalizer.ll
@@ -8,53 +8,40 @@ target triple = "thumbv7-apple-ios"
 %struct.MMMMMMMMMMMM = type { [4 x %struct.RRRRRRRR] }
 %struct.RRRRRRRR = type { [78 x i32] }
 
- at kkkkkk = external constant i8*
+ at kkkkkk = external constant ptr
 @__PRETTY_FUNCTION__._ZN12CLGll = private unnamed_addr constant [62 x i8] c"static void tttttttttttt::lllllllllllll(const MMMMMMMMMMMM &)\00"
 @.str = private unnamed_addr constant [75 x i8] c"\09GGGGGGGGGGGGGGGGGGGGGGG:,BE:0x%08lx,ALM:0x%08lx,LTO:0x%08lx,CBEE:0x%08lx\0A\00"
 
-define void @_ZN12CLGll(%struct.MMMMMMMMMMMM* %aidData) ssp align 2 {
+define void @_ZN12CLGll(ptr %aidData) ssp align 2 {
 entry:
-  %aidData.addr = alloca %struct.MMMMMMMMMMMM*, align 4
+  %aidData.addr = alloca ptr, align 4
   %agg.tmp = alloca %struct.RRRRRRRR, align 4
   %agg.tmp4 = alloca %struct.RRRRRRRR, align 4
   %agg.tmp10 = alloca %struct.RRRRRRRR, align 4
   %agg.tmp16 = alloca %struct.RRRRRRRR, align 4
-  store %struct.MMMMMMMMMMMM* %aidData, %struct.MMMMMMMMMMMM** %aidData.addr, align 4
+  store ptr %aidData, ptr %aidData.addr, align 4
   br label %do.body
 
 do.body:                                          ; preds = %entry
-  %tmp = load i8*, i8** @kkkkkk, align 4
-  %tmp1 = load %struct.MMMMMMMMMMMM*, %struct.MMMMMMMMMMMM** %aidData.addr
-  %eph = getelementptr inbounds %struct.MMMMMMMMMMMM, %struct.MMMMMMMMMMMM* %tmp1, i32 0, i32 0
-  %arrayidx = getelementptr inbounds [4 x %struct.RRRRRRRR], [4 x %struct.RRRRRRRR]* %eph, i32 0, i32 0
-  %tmp2 = bitcast %struct.RRRRRRRR* %agg.tmp to i8*
-  %tmp3 = bitcast %struct.RRRRRRRR* %arrayidx to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %tmp2, i8* align 4 %tmp3, i32 312, i1 false)
-  %tmp5 = load %struct.MMMMMMMMMMMM*, %struct.MMMMMMMMMMMM** %aidData.addr
-  %eph6 = getelementptr inbounds %struct.MMMMMMMMMMMM, %struct.MMMMMMMMMMMM* %tmp5, i32 0, i32 0
-  %arrayidx7 = getelementptr inbounds [4 x %struct.RRRRRRRR], [4 x %struct.RRRRRRRR]* %eph6, i32 0, i32 1
-  %tmp8 = bitcast %struct.RRRRRRRR* %agg.tmp4 to i8*
-  %tmp9 = bitcast %struct.RRRRRRRR* %arrayidx7 to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %tmp8, i8* align 4 %tmp9, i32 312, i1 false)
-  %tmp11 = load %struct.MMMMMMMMMMMM*, %struct.MMMMMMMMMMMM** %aidData.addr
-  %eph12 = getelementptr inbounds %struct.MMMMMMMMMMMM, %struct.MMMMMMMMMMMM* %tmp11, i32 0, i32 0
-  %arrayidx13 = getelementptr inbounds [4 x %struct.RRRRRRRR], [4 x %struct.RRRRRRRR]* %eph12, i32 0, i32 2
-  %tmp14 = bitcast %struct.RRRRRRRR* %agg.tmp10 to i8*
-  %tmp15 = bitcast %struct.RRRRRRRR* %arrayidx13 to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %tmp14, i8* align 4 %tmp15, i32 312, i1 false)
-  %tmp17 = load %struct.MMMMMMMMMMMM*, %struct.MMMMMMMMMMMM** %aidData.addr
-  %eph18 = getelementptr inbounds %struct.MMMMMMMMMMMM, %struct.MMMMMMMMMMMM* %tmp17, i32 0, i32 0
-  %arrayidx19 = getelementptr inbounds [4 x %struct.RRRRRRRR], [4 x %struct.RRRRRRRR]* %eph18, i32 0, i32 3
-  %tmp20 = bitcast %struct.RRRRRRRR* %agg.tmp16 to i8*
-  %tmp21 = bitcast %struct.RRRRRRRR* %arrayidx19 to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %tmp20, i8* align 4 %tmp21, i32 312, i1 false)
-  call void (i8*, i32, i8*, i8*, ...) @CLLoggingLog(i8* %tmp, i32 2, i8* getelementptr inbounds ([62 x i8], [62 x i8]* @__PRETTY_FUNCTION__._ZN12CLGll, i32 0, i32 0), i8* getelementptr inbounds ([75 x i8], [75 x i8]* @.str, i32 0, i32 0), %struct.RRRRRRRR* byval(%struct.RRRRRRRR) %agg.tmp, %struct.RRRRRRRR* byval(%struct.RRRRRRRR) %agg.tmp4, %struct.RRRRRRRR* byval(%struct.RRRRRRRR) %agg.tmp10, %struct.RRRRRRRR* byval(%struct.RRRRRRRR) %agg.tmp16)
+  %tmp = load ptr, ptr @kkkkkk, align 4
+  %tmp1 = load ptr, ptr %aidData.addr
+  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %agg.tmp, ptr align 4 %tmp1, i32 312, i1 false)
+  %tmp5 = load ptr, ptr %aidData.addr
+  %arrayidx7 = getelementptr inbounds [4 x %struct.RRRRRRRR], ptr %tmp5, i32 0, i32 1
+  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %agg.tmp4, ptr align 4 %arrayidx7, i32 312, i1 false)
+  %tmp11 = load ptr, ptr %aidData.addr
+  %arrayidx13 = getelementptr inbounds [4 x %struct.RRRRRRRR], ptr %tmp11, i32 0, i32 2
+  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %agg.tmp10, ptr align 4 %arrayidx13, i32 312, i1 false)
+  %tmp17 = load ptr, ptr %aidData.addr
+  %arrayidx19 = getelementptr inbounds [4 x %struct.RRRRRRRR], ptr %tmp17, i32 0, i32 3
+  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %agg.tmp16, ptr align 4 %arrayidx19, i32 312, i1 false)
+  call void (ptr, i32, ptr, ptr, ...) @CLLoggingLog(ptr %tmp, i32 2, ptr @__PRETTY_FUNCTION__._ZN12CLGll, ptr @.str, ptr byval(%struct.RRRRRRRR) %agg.tmp, ptr byval(%struct.RRRRRRRR) %agg.tmp4, ptr byval(%struct.RRRRRRRR) %agg.tmp10, ptr byval(%struct.RRRRRRRR) %agg.tmp16)
   br label %do.end
 
 do.end:                                           ; preds = %do.body
   ret void
 }
 
-declare void @CLLoggingLog(i8*, i32, i8*, i8*, ...)
+declare void @CLLoggingLog(ptr, i32, ptr, ptr, ...)
 
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind

diff  --git a/llvm/test/CodeGen/Thumb/2011-06-16-NoGPRs.ll b/llvm/test/CodeGen/Thumb/2011-06-16-NoGPRs.ll
index accb82c18e706..cdcd0d989c797 100644
--- a/llvm/test/CodeGen/Thumb/2011-06-16-NoGPRs.ll
+++ b/llvm/test/CodeGen/Thumb/2011-06-16-NoGPRs.ll
@@ -11,14 +11,13 @@ target triple = "thumbv6-apple-darwin10"
 
 %0 = type opaque
 
-declare i8* (i8*, i8*, ...)* @f1(i8*, i8*) optsize
-declare i8* @f2(i8*, i8*, ...)
+declare ptr @f1(ptr, ptr) optsize
+declare ptr @f2(ptr, ptr, ...)
 
-define internal void @f(i8* %self, i8* %_cmd, %0* %inObjects, %0* %inIndexes) optsize ssp {
+define internal void @f(ptr %self, ptr %_cmd, ptr %inObjects, ptr %inIndexes) optsize ssp {
 entry:
-  %call14 = tail call i8* (i8*, i8*, ...)* (i8*, i8*) @f1(i8* undef, i8* %_cmd) optsize
-  %0 = bitcast i8* (i8*, i8*, ...)* %call14 to void (i8*, i8*, %0*, %0*)*
-  tail call void %0(i8* %self, i8* %_cmd, %0* %inObjects, %0* %inIndexes) optsize
-  tail call void bitcast (i8* (i8*, i8*, ...)* @f2 to void (i8*, i8*, i32, %0*, %0*)*)(i8* %self, i8* undef, i32 2, %0* %inIndexes, %0* undef) optsize
+  %call14 = tail call ptr (ptr, ptr) @f1(ptr undef, ptr %_cmd) optsize
+  tail call void %call14(ptr %self, ptr %_cmd, ptr %inObjects, ptr %inIndexes) optsize
+  tail call void @f2(ptr %self, ptr undef, i32 2, ptr %inIndexes, ptr undef) optsize
   ret void
 }

diff  --git a/llvm/test/CodeGen/Thumb/2011-EpilogueBug.ll b/llvm/test/CodeGen/Thumb/2011-EpilogueBug.ll
index 9657dc7e0abcf..e659ee984ef4a 100644
--- a/llvm/test/CodeGen/Thumb/2011-EpilogueBug.ll
+++ b/llvm/test/CodeGen/Thumb/2011-EpilogueBug.ll
@@ -1,14 +1,14 @@
 ; RUN: llc -mtriple=thumbv6-apple-darwin < %s | FileCheck %s
 ; r8869722
 
-%struct.state = type { i32, %struct.info*, float**, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i8* }
-%struct.info = type { i32, i32, i32, i32, i32, i32, i32, i8* }
+%struct.state = type { i32, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, ptr }
+%struct.info = type { i32, i32, i32, i32, i32, i32, i32, ptr }
 
-define void @t1(%struct.state* %v) {
+define void @t1(ptr %v) {
 ; CHECK: push {r4
-  %tmp6 = load i32, i32* null
+  %tmp6 = load i32, ptr null
   %tmp8 = alloca float, i32 %tmp6
-  store i32 1, i32* null
+  store i32 1, ptr null
   br label %return
 
 return:                                           ; preds = %0

diff  --git a/llvm/test/CodeGen/Thumb/2014-06-10-thumb1-ldst-opt-bug.ll b/llvm/test/CodeGen/Thumb/2014-06-10-thumb1-ldst-opt-bug.ll
index d5c8db76de86f..2eb49470b5e83 100644
--- a/llvm/test/CodeGen/Thumb/2014-06-10-thumb1-ldst-opt-bug.ll
+++ b/llvm/test/CodeGen/Thumb/2014-06-10-thumb1-ldst-opt-bug.ll
@@ -1,17 +1,17 @@
 ; RUN: llc < %s -mtriple=thumbv6m-eabi -verify-machineinstrs -o - | FileCheck %s
 
-define void @foo(i32* %A) #0 {
+define void @foo(ptr %A) #0 {
 entry:
 ; CHECK-LABEL: foo:
 ; CHECK: push {r7, lr}
 ; CHECK: ldm
 ; CHECK-NEXT: subs
 ; CHECK-NEXT: bl
-  %0 = load i32, i32* %A, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i32 1
-  %1 = load i32, i32* %arrayidx1, align 4
-  tail call void @bar(i32* %A, i32 %0, i32 %1) #2
+  %0 = load i32, ptr %A, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i32 1
+  %1 = load i32, ptr %arrayidx1, align 4
+  tail call void @bar(ptr %A, i32 %0, i32 %1) #2
   ret void
 }
 
-declare void @bar(i32*, i32, i32) #1
+declare void @bar(ptr, i32, i32) #1

diff  --git a/llvm/test/CodeGen/Thumb/PR17309.ll b/llvm/test/CodeGen/Thumb/PR17309.ll
index 804803ce93482..b548499602aa3 100644
--- a/llvm/test/CodeGen/Thumb/PR17309.ll
+++ b/llvm/test/CodeGen/Thumb/PR17309.ll
@@ -10,10 +10,9 @@
 define void @pass_C() #0 {
 entry:
   %c = alloca %struct.C, align 1
-  %0 = getelementptr inbounds %struct.C, %struct.C* %c, i32 0, i32 0, i32 0
-  call void @llvm.lifetime.start.p0i8(i64 1000, i8* %0) #1
-  call void @use_C(%struct.C* byval(%struct.C) %c) #3
-  call void @llvm.lifetime.end.p0i8(i64 1000, i8* %0) #1
+  call void @llvm.lifetime.start.p0(i64 1000, ptr %c) #1
+  call void @use_C(ptr byval(%struct.C) %c) #3
+  call void @llvm.lifetime.end.p0(i64 1000, ptr %c) #1
   ret void
 }
 
@@ -23,10 +22,9 @@ entry:
 define void @pass_S() #0 {
 entry:
   %s = alloca %struct.S, align 2
-  %0 = bitcast %struct.S* %s to i8*
-  call void @llvm.lifetime.start.p0i8(i64 2000, i8* %0) #1
-  call void @use_S(%struct.S* byval(%struct.S) %s) #3
-  call void @llvm.lifetime.end.p0i8(i64 2000, i8* %0) #1
+  call void @llvm.lifetime.start.p0(i64 2000, ptr %s) #1
+  call void @use_S(ptr byval(%struct.S) %s) #3
+  call void @llvm.lifetime.end.p0(i64 2000, ptr %s) #1
   ret void
 }
 
@@ -36,19 +34,18 @@ entry:
 define void @pass_I() #0 {
 entry:
   %i = alloca %struct.I, align 4
-  %0 = bitcast %struct.I* %i to i8*
-  call void @llvm.lifetime.start.p0i8(i64 4000, i8* %0) #1
-  call void @use_I(%struct.I* byval(%struct.I) %i) #3
-  call void @llvm.lifetime.end.p0i8(i64 4000, i8* %0) #1
+  call void @llvm.lifetime.start.p0(i64 4000, ptr %i) #1
+  call void @use_I(ptr byval(%struct.I) %i) #3
+  call void @llvm.lifetime.end.p0(i64 4000, ptr %i) #1
   ret void
 }
 
-declare void @use_C(%struct.C* byval(%struct.C)) #2
-declare void @use_S(%struct.S* byval(%struct.S)) #2
-declare void @use_I(%struct.I* byval(%struct.I)) #2
+declare void @use_C(ptr byval(%struct.C)) #2
+declare void @use_S(ptr byval(%struct.S)) #2
+declare void @use_I(ptr byval(%struct.I)) #2
 
-declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1
-declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1
+declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1
+declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1
 
 
 attributes #0 = { nounwind optsize "less-precise-fpmad"="false" "frame-pointer"="non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }

diff  --git a/llvm/test/CodeGen/Thumb/addr-modes.ll b/llvm/test/CodeGen/Thumb/addr-modes.ll
index e04d483fc787b..3fcd7c455bee0 100644
--- a/llvm/test/CodeGen/Thumb/addr-modes.ll
+++ b/llvm/test/CodeGen/Thumb/addr-modes.ll
@@ -15,20 +15,20 @@ target triple = "thumbv6m-arm-none-eabi"
 ; Test case 01: %n is scaled by 4 (size of i32).
 ; Expected: GEP cannot be folded into LOAD.
 ; CHECK: local addrmode: [inbounds Base:%arrayidx]
-define i32 @load01(i32* %p, i32 %n) nounwind {
+define i32 @load01(ptr %p, i32 %n) nounwind {
 entry:
-  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %n
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %p, i32 %n
+  %0 = load i32, ptr %arrayidx, align 4
   ret i32 %0
 }
 
 ; Test case 02: No scale of %n is needed because the size of i8 is 1.
 ; Expected: GEP can be folded into LOAD.
 ; CHECK: local addrmode: [inbounds Base:%p + 1*%n]
-define i8 @load02(i8* %p, i32 %n) nounwind {
+define i8 @load02(ptr %p, i32 %n) nounwind {
 entry:
-  %arrayidx = getelementptr inbounds i8, i8* %p, i32 %n
-  %0 = load i8, i8* %arrayidx
+  %arrayidx = getelementptr inbounds i8, ptr %p, i32 %n
+  %0 = load i8, ptr %arrayidx
   ret i8 %0
 }
 
@@ -38,8 +38,8 @@ entry:
 define i32 @load03(i32 %x) nounwind {
 entry:
   %mul = shl nsw i32 %x, 1
-  %0 = inttoptr i32 %mul to i32*
-  %1 = load i32, i32* %0, align 4
+  %0 = inttoptr i32 %mul to ptr
+  %1 = load i32, ptr %0, align 4
   ret i32 %1
 }
 

diff  --git a/llvm/test/CodeGen/Thumb/and_neg.ll b/llvm/test/CodeGen/Thumb/and_neg.ll
index 88217c7cb206c..791d6305a1565 100644
--- a/llvm/test/CodeGen/Thumb/and_neg.ll
+++ b/llvm/test/CodeGen/Thumb/and_neg.ll
@@ -1,18 +1,17 @@
 ; RUN: llc < %s -mtriple=thumbv7-linux-gnueabi -verify-machineinstrs
 ; Just shouldn't crash, PR28348
 
-%C = type { i8* }
+%C = type { ptr }
 
-define void @repro(%C* %this, i32 %a) {
+define void @repro(ptr %this, i32 %a) {
   %a_align1 = and i32 %a, -4096
   %a_and = and i32 %a, 4095
   %a_align2 = or i32 %a_and, 4096
 
   call void @use(i32 %a_align1)
 
-  %C_field = getelementptr inbounds %C, %C* %this, i32 0, i32 0
-  %addptr = getelementptr inbounds i8, i8* null, i32 %a_align2
-  store i8* %addptr, i8** %C_field, align 4
+  %addptr = getelementptr inbounds i8, ptr null, i32 %a_align2
+  store ptr %addptr, ptr %this, align 4
 
   ret void
 }

diff  --git a/llvm/test/CodeGen/Thumb/asmprinter-bug.ll b/llvm/test/CodeGen/Thumb/asmprinter-bug.ll
index e12fcb161a4a3..508e4ce226f4c 100644
--- a/llvm/test/CodeGen/Thumb/asmprinter-bug.ll
+++ b/llvm/test/CodeGen/Thumb/asmprinter-bug.ll
@@ -1,41 +1,41 @@
 ; RUN: llc < %s -mtriple=thumbv6-apple-darwin10 | grep rsbs | grep "#0"
 
-	%struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
+	%struct.FILE = type { ptr, i32, i32, i16, i16, %struct.__sbuf, i32, ptr, ptr, ptr, ptr, ptr, %struct.__sbuf, ptr, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
 	%struct.__sFILEX = type opaque
-	%struct.__sbuf = type { i8*, i32 }
+	%struct.__sbuf = type { ptr, i32 }
 	%struct.adpcm_state = type { i16, i8 }
- at stepsizeTable = internal constant [89 x i32] [i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 16, i32 17, i32 19, i32 21, i32 23, i32 25, i32 28, i32 31, i32 34, i32 37, i32 41, i32 45, i32 50, i32 55, i32 60, i32 66, i32 73, i32 80, i32 88, i32 97, i32 107, i32 118, i32 130, i32 143, i32 157, i32 173, i32 190, i32 209, i32 230, i32 253, i32 279, i32 307, i32 337, i32 371, i32 408, i32 449, i32 494, i32 544, i32 598, i32 658, i32 724, i32 796, i32 876, i32 963, i32 1060, i32 1166, i32 1282, i32 1411, i32 1552, i32 1707, i32 1878, i32 2066, i32 2272, i32 2499, i32 2749, i32 3024, i32 3327, i32 3660, i32 4026, i32 4428, i32 4871, i32 5358, i32 5894, i32 6484, i32 7132, i32 7845, i32 8630, i32 9493, i32 10442, i32 11487, i32 12635, i32 13899, i32 15289, i32 16818, i32 18500, i32 20350, i32 22385, i32 24623, i32 27086, i32 29794, i32 32767]		; <[89 x i32]*> [#uses=4]
- at indexTable = internal constant [16 x i32] [i32 -1, i32 -1, i32 -1, i32 -1, i32 2, i32 4, i32 6, i32 8, i32 -1, i32 -1, i32 -1, i32 -1, i32 2, i32 4, i32 6, i32 8]		; <[16 x i32]*> [#uses=2]
- at abuf = common global [500 x i8] zeroinitializer		; <[500 x i8]*> [#uses=1]
- at .str = private constant [11 x i8] c"input file\00", section "__TEXT,__cstring,cstring_literals", align 1		; <[11 x i8]*> [#uses=1]
- at sbuf = common global [1000 x i16] zeroinitializer		; <[1000 x i16]*> [#uses=1]
- at state = common global %struct.adpcm_state zeroinitializer		; <%struct.adpcm_state*> [#uses=3]
- at __stderrp = external global %struct.FILE*		; <%struct.FILE**> [#uses=1]
- at .str1 = private constant [28 x i8] c"Final valprev=%d, index=%d\0A\00", section "__TEXT,__cstring,cstring_literals", align 1		; <[28 x i8]*> [#uses=1]
-
-define void @adpcm_coder(i16* nocapture %indata, i8* nocapture %outdata, i32 %len, %struct.adpcm_state* nocapture %state) nounwind {
+ at stepsizeTable = internal constant [89 x i32] [i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 16, i32 17, i32 19, i32 21, i32 23, i32 25, i32 28, i32 31, i32 34, i32 37, i32 41, i32 45, i32 50, i32 55, i32 60, i32 66, i32 73, i32 80, i32 88, i32 97, i32 107, i32 118, i32 130, i32 143, i32 157, i32 173, i32 190, i32 209, i32 230, i32 253, i32 279, i32 307, i32 337, i32 371, i32 408, i32 449, i32 494, i32 544, i32 598, i32 658, i32 724, i32 796, i32 876, i32 963, i32 1060, i32 1166, i32 1282, i32 1411, i32 1552, i32 1707, i32 1878, i32 2066, i32 2272, i32 2499, i32 2749, i32 3024, i32 3327, i32 3660, i32 4026, i32 4428, i32 4871, i32 5358, i32 5894, i32 6484, i32 7132, i32 7845, i32 8630, i32 9493, i32 10442, i32 11487, i32 12635, i32 13899, i32 15289, i32 16818, i32 18500, i32 20350, i32 22385, i32 24623, i32 27086, i32 29794, i32 32767]		; <ptr> [#uses=4]
+ at indexTable = internal constant [16 x i32] [i32 -1, i32 -1, i32 -1, i32 -1, i32 2, i32 4, i32 6, i32 8, i32 -1, i32 -1, i32 -1, i32 -1, i32 2, i32 4, i32 6, i32 8]		; <ptr> [#uses=2]
+ at abuf = common global [500 x i8] zeroinitializer		; <ptr> [#uses=1]
+ at .str = private constant [11 x i8] c"input file\00", section "__TEXT,__cstring,cstring_literals", align 1		; <ptr> [#uses=1]
+ at sbuf = common global [1000 x i16] zeroinitializer		; <ptr> [#uses=1]
+ at state = common global %struct.adpcm_state zeroinitializer		; <ptr> [#uses=3]
+ at __stderrp = external global ptr		; <ptr> [#uses=1]
+ at .str1 = private constant [28 x i8] c"Final valprev=%d, index=%d\0A\00", section "__TEXT,__cstring,cstring_literals", align 1		; <ptr> [#uses=1]
+
+define void @adpcm_coder(ptr nocapture %indata, ptr nocapture %outdata, i32 %len, ptr nocapture %state) nounwind {
 entry:
-	%0 = getelementptr %struct.adpcm_state, %struct.adpcm_state* %state, i32 0, i32 0		; <i16*> [#uses=2]
-	%1 = load i16, i16* %0, align 2		; <i16> [#uses=1]
+	%0 = getelementptr %struct.adpcm_state, ptr %state, i32 0, i32 0		; <ptr> [#uses=2]
+	%1 = load i16, ptr %0, align 2		; <i16> [#uses=1]
 	%2 = sext i16 %1 to i32		; <i32> [#uses=2]
-	%3 = getelementptr %struct.adpcm_state, %struct.adpcm_state* %state, i32 0, i32 1		; <i8*> [#uses=2]
-	%4 = load i8, i8* %3, align 2		; <i8> [#uses=1]
+	%3 = getelementptr %struct.adpcm_state, ptr %state, i32 0, i32 1		; <ptr> [#uses=2]
+	%4 = load i8, ptr %3, align 2		; <i8> [#uses=1]
 	%5 = sext i8 %4 to i32		; <i32> [#uses=3]
-	%6 = getelementptr [89 x i32], [89 x i32]* @stepsizeTable, i32 0, i32 %5		; <i32*> [#uses=1]
-	%7 = load i32, i32* %6, align 4		; <i32> [#uses=1]
+	%6 = getelementptr [89 x i32], ptr @stepsizeTable, i32 0, i32 %5		; <ptr> [#uses=1]
+	%7 = load i32, ptr %6, align 4		; <i32> [#uses=1]
 	%8 = icmp sgt i32 %len, 0		; <i1> [#uses=1]
 	br i1 %8, label %bb, label %bb27
 
 bb:		; preds = %bb25, %entry
 	%indvar = phi i32 [ 0, %entry ], [ %indvar.next, %bb25 ]		; <i32> [#uses=2]
-	%outp.136 = phi i8* [ %outdata, %entry ], [ %outp.0, %bb25 ]		; <i8*> [#uses=3]
+	%outp.136 = phi ptr [ %outdata, %entry ], [ %outp.0, %bb25 ]		; <ptr> [#uses=3]
 	%bufferstep.035 = phi i32 [ 1, %entry ], [ %tmp, %bb25 ]		; <i32> [#uses=3]
 	%outputbuffer.134 = phi i32 [ undef, %entry ], [ %outputbuffer.0, %bb25 ]		; <i32> [#uses=2]
 	%index.033 = phi i32 [ %5, %entry ], [ %index.2, %bb25 ]		; <i32> [#uses=1]
 	%valpred.132 = phi i32 [ %2, %entry ], [ %valpred.2, %bb25 ]		; <i32> [#uses=2]
 	%step.031 = phi i32 [ %7, %entry ], [ %36, %bb25 ]		; <i32> [#uses=5]
-	%inp.038 = getelementptr i16, i16* %indata, i32 %indvar		; <i16*> [#uses=1]
-	%9 = load i16, i16* %inp.038, align 2		; <i16> [#uses=1]
+	%inp.038 = getelementptr i16, ptr %indata, i32 %indvar		; <ptr> [#uses=1]
+	%9 = load i16, ptr %inp.038, align 2		; <i16> [#uses=1]
 	%10 = sext i16 %9 to i32		; <i32> [#uses=1]
 	%11 = sub i32 %10, %valpred.132		; <i32> [#uses=3]
 	%12 = icmp slt i32 %11, 0		; <i1> [#uses=1]
@@ -79,15 +79,15 @@ bb18:		; preds = %bb17, %bb16, %bb
 	%delta.1 = or i32 %21, %iftmp.1.0		; <i32> [#uses=1]
 	%delta.2 = or i32 %delta.1, %25		; <i32> [#uses=1]
 	%29 = xor i32 %delta.2, 1		; <i32> [#uses=3]
-	%30 = getelementptr [16 x i32], [16 x i32]* @indexTable, i32 0, i32 %29		; <i32*> [#uses=1]
-	%31 = load i32, i32* %30, align 4		; <i32> [#uses=1]
+	%30 = getelementptr [16 x i32], ptr @indexTable, i32 0, i32 %29		; <ptr> [#uses=1]
+	%31 = load i32, ptr %30, align 4		; <i32> [#uses=1]
 	%32 = add i32 %31, %index.033		; <i32> [#uses=2]
 	%33 = icmp slt i32 %32, 0		; <i1> [#uses=1]
 	%index.1 = select i1 %33, i32 0, i32 %32		; <i32> [#uses=2]
 	%34 = icmp sgt i32 %index.1, 88		; <i1> [#uses=1]
 	%index.2 = select i1 %34, i32 88, i32 %index.1		; <i32> [#uses=3]
-	%35 = getelementptr [89 x i32], [89 x i32]* @stepsizeTable, i32 0, i32 %index.2		; <i32*> [#uses=1]
-	%36 = load i32, i32* %35, align 4		; <i32> [#uses=1]
+	%35 = getelementptr [89 x i32], ptr @stepsizeTable, i32 0, i32 %index.2		; <ptr> [#uses=1]
+	%36 = load i32, ptr %35, align 4		; <i32> [#uses=1]
 	%37 = icmp eq i32 %bufferstep.035, 0		; <i1> [#uses=1]
 	br i1 %37, label %bb24, label %bb23
 
@@ -101,13 +101,13 @@ bb24:		; preds = %bb18
 	%41 = and i8 %40, 15		; <i8> [#uses=1]
 	%42 = trunc i32 %outputbuffer.134 to i8		; <i8> [#uses=1]
 	%43 = or i8 %41, %42		; <i8> [#uses=1]
-	store i8 %43, i8* %outp.136, align 1
-	%44 = getelementptr i8, i8* %outp.136, i32 1		; <i8*> [#uses=1]
+	store i8 %43, ptr %outp.136, align 1
+	%44 = getelementptr i8, ptr %outp.136, i32 1		; <ptr> [#uses=1]
 	br label %bb25
 
 bb25:		; preds = %bb24, %bb23
 	%outputbuffer.0 = phi i32 [ %39, %bb23 ], [ %outputbuffer.134, %bb24 ]		; <i32> [#uses=2]
-	%outp.0 = phi i8* [ %outp.136, %bb23 ], [ %44, %bb24 ]		; <i8*> [#uses=2]
+	%outp.0 = phi ptr [ %outp.136, %bb23 ], [ %44, %bb24 ]		; <ptr> [#uses=2]
 	%tmp = xor i32 %bufferstep.035, 1		; <i32> [#uses=1]
 	%indvar.next = add i32 %indvar, 1		; <i32> [#uses=2]
 	%exitcond = icmp eq i32 %indvar.next, %len		; <i1> [#uses=1]
@@ -118,7 +118,7 @@ bb26.bb27_crit_edge:		; preds = %bb25
 	br label %bb27
 
 bb27:		; preds = %bb26.bb27_crit_edge, %entry
-	%outp.1.lcssa = phi i8* [ %outp.0, %bb26.bb27_crit_edge ], [ %outdata, %entry ]		; <i8*> [#uses=1]
+	%outp.1.lcssa = phi ptr [ %outp.0, %bb26.bb27_crit_edge ], [ %outdata, %entry ]		; <ptr> [#uses=1]
 	%bufferstep.0.lcssa = phi i1 [ %phitmp44, %bb26.bb27_crit_edge ], [ false, %entry ]		; <i1> [#uses=1]
 	%outputbuffer.1.lcssa = phi i32 [ %outputbuffer.0, %bb26.bb27_crit_edge ], [ undef, %entry ]		; <i32> [#uses=1]
 	%index.0.lcssa = phi i32 [ %index.2, %bb26.bb27_crit_edge ], [ %5, %entry ]		; <i32> [#uses=1]
@@ -127,57 +127,57 @@ bb27:		; preds = %bb26.bb27_crit_edge, %entry
 
 bb28:		; preds = %bb27
 	%45 = trunc i32 %outputbuffer.1.lcssa to i8		; <i8> [#uses=1]
-	store i8 %45, i8* %outp.1.lcssa, align 1
+	store i8 %45, ptr %outp.1.lcssa, align 1
 	br label %bb29
 
 bb29:		; preds = %bb28, %bb27
 	%46 = trunc i32 %valpred.1.lcssa to i16		; <i16> [#uses=1]
-	store i16 %46, i16* %0, align 2
+	store i16 %46, ptr %0, align 2
 	%47 = trunc i32 %index.0.lcssa to i8		; <i8> [#uses=1]
-	store i8 %47, i8* %3, align 2
+	store i8 %47, ptr %3, align 2
 	ret void
 }
 
-define void @adpcm_decoder(i8* nocapture %indata, i16* nocapture %outdata, i32 %len, %struct.adpcm_state* nocapture %state) nounwind {
+define void @adpcm_decoder(ptr nocapture %indata, ptr nocapture %outdata, i32 %len, ptr nocapture %state) nounwind {
 entry:
-	%0 = getelementptr %struct.adpcm_state, %struct.adpcm_state* %state, i32 0, i32 0		; <i16*> [#uses=2]
-	%1 = load i16, i16* %0, align 2		; <i16> [#uses=1]
+	%0 = getelementptr %struct.adpcm_state, ptr %state, i32 0, i32 0		; <ptr> [#uses=2]
+	%1 = load i16, ptr %0, align 2		; <i16> [#uses=1]
 	%2 = sext i16 %1 to i32		; <i32> [#uses=2]
-	%3 = getelementptr %struct.adpcm_state, %struct.adpcm_state* %state, i32 0, i32 1		; <i8*> [#uses=2]
-	%4 = load i8, i8* %3, align 2		; <i8> [#uses=1]
+	%3 = getelementptr %struct.adpcm_state, ptr %state, i32 0, i32 1		; <ptr> [#uses=2]
+	%4 = load i8, ptr %3, align 2		; <i8> [#uses=1]
 	%5 = sext i8 %4 to i32		; <i32> [#uses=3]
-	%6 = getelementptr [89 x i32], [89 x i32]* @stepsizeTable, i32 0, i32 %5		; <i32*> [#uses=1]
-	%7 = load i32, i32* %6, align 4		; <i32> [#uses=1]
+	%6 = getelementptr [89 x i32], ptr @stepsizeTable, i32 0, i32 %5		; <ptr> [#uses=1]
+	%7 = load i32, ptr %6, align 4		; <i32> [#uses=1]
 	%8 = icmp sgt i32 %len, 0		; <i1> [#uses=1]
 	br i1 %8, label %bb, label %bb22
 
 bb:		; preds = %bb20, %entry
 	%indvar = phi i32 [ 0, %entry ], [ %indvar.next, %bb20 ]		; <i32> [#uses=2]
-	%inp.131 = phi i8* [ %indata, %entry ], [ %inp.0, %bb20 ]		; <i8*> [#uses=3]
+	%inp.131 = phi ptr [ %indata, %entry ], [ %inp.0, %bb20 ]		; <ptr> [#uses=3]
 	%bufferstep.028 = phi i32 [ 0, %entry ], [ %tmp, %bb20 ]		; <i32> [#uses=2]
 	%inputbuffer.127 = phi i32 [ undef, %entry ], [ %inputbuffer.0, %bb20 ]		; <i32> [#uses=2]
 	%index.026 = phi i32 [ %5, %entry ], [ %index.2, %bb20 ]		; <i32> [#uses=1]
 	%valpred.125 = phi i32 [ %2, %entry ], [ %valpred.2, %bb20 ]		; <i32> [#uses=1]
 	%step.024 = phi i32 [ %7, %entry ], [ %35, %bb20 ]		; <i32> [#uses=4]
-	%outp.030 = getelementptr i16, i16* %outdata, i32 %indvar		; <i16*> [#uses=1]
+	%outp.030 = getelementptr i16, ptr %outdata, i32 %indvar		; <ptr> [#uses=1]
 	%9 = icmp eq i32 %bufferstep.028, 0		; <i1> [#uses=1]
 	br i1 %9, label %bb2, label %bb3
 
 bb2:		; preds = %bb
-	%10 = load i8, i8* %inp.131, align 1		; <i8> [#uses=1]
+	%10 = load i8, ptr %inp.131, align 1		; <i8> [#uses=1]
 	%11 = sext i8 %10 to i32		; <i32> [#uses=2]
-	%12 = getelementptr i8, i8* %inp.131, i32 1		; <i8*> [#uses=1]
+	%12 = getelementptr i8, ptr %inp.131, i32 1		; <ptr> [#uses=1]
 	%13 = ashr i32 %11, 4		; <i32> [#uses=1]
 	br label %bb3
 
 bb3:		; preds = %bb2, %bb
 	%inputbuffer.0 = phi i32 [ %11, %bb2 ], [ %inputbuffer.127, %bb ]		; <i32> [#uses=1]
 	%delta.0.in = phi i32 [ %13, %bb2 ], [ %inputbuffer.127, %bb ]		; <i32> [#uses=5]
-	%inp.0 = phi i8* [ %12, %bb2 ], [ %inp.131, %bb ]		; <i8*> [#uses=1]
+	%inp.0 = phi ptr [ %12, %bb2 ], [ %inp.131, %bb ]		; <ptr> [#uses=1]
 	%delta.0 = and i32 %delta.0.in, 15		; <i32> [#uses=1]
 	%tmp = xor i32 %bufferstep.028, 1		; <i32> [#uses=1]
-	%14 = getelementptr [16 x i32], [16 x i32]* @indexTable, i32 0, i32 %delta.0		; <i32*> [#uses=1]
-	%15 = load i32, i32* %14, align 4		; <i32> [#uses=1]
+	%14 = getelementptr [16 x i32], ptr @indexTable, i32 0, i32 %delta.0		; <ptr> [#uses=1]
+	%15 = load i32, ptr %14, align 4		; <i32> [#uses=1]
 	%16 = add i32 %15, %index.026		; <i32> [#uses=2]
 	%17 = icmp slt i32 %16, 0		; <i1> [#uses=1]
 	%index.1 = select i1 %17, i32 0, i32 %16		; <i32> [#uses=2]
@@ -227,10 +227,10 @@ bb19:		; preds = %bb18
 
 bb20:		; preds = %bb19, %bb18, %bb13
 	%valpred.2 = phi i32 [ -32768, %bb19 ], [ 32767, %bb13 ], [ %valpred.0, %bb18 ]		; <i32> [#uses=3]
-	%34 = getelementptr [89 x i32], [89 x i32]* @stepsizeTable, i32 0, i32 %index.2		; <i32*> [#uses=1]
-	%35 = load i32, i32* %34, align 4		; <i32> [#uses=1]
+	%34 = getelementptr [89 x i32], ptr @stepsizeTable, i32 0, i32 %index.2		; <ptr> [#uses=1]
+	%35 = load i32, ptr %34, align 4		; <i32> [#uses=1]
 	%36 = trunc i32 %valpred.2 to i16		; <i16> [#uses=1]
-	store i16 %36, i16* %outp.030, align 2
+	store i16 %36, ptr %outp.030, align 2
 	%indvar.next = add i32 %indvar, 1		; <i32> [#uses=2]
 	%exitcond = icmp eq i32 %indvar.next, %len		; <i1> [#uses=1]
 	br i1 %exitcond, label %bb22, label %bb
@@ -239,9 +239,9 @@ bb22:		; preds = %bb20, %entry
 	%index.0.lcssa = phi i32 [ %5, %entry ], [ %index.2, %bb20 ]		; <i32> [#uses=1]
 	%valpred.1.lcssa = phi i32 [ %2, %entry ], [ %valpred.2, %bb20 ]		; <i32> [#uses=1]
 	%37 = trunc i32 %valpred.1.lcssa to i16		; <i16> [#uses=1]
-	store i16 %37, i16* %0, align 2
+	store i16 %37, ptr %0, align 2
 	%38 = trunc i32 %index.0.lcssa to i8		; <i8> [#uses=1]
-	store i8 %38, i8* %3, align 2
+	store i8 %38, ptr %3, align 2
 	ret void
 }
 
@@ -250,12 +250,12 @@ entry:
 	br label %bb
 
 bb:		; preds = %bb3, %entry
-	%0 = tail call  i32 (...) @read(i32 0, i8* getelementptr ([500 x i8], [500 x i8]* @abuf, i32 0, i32 0), i32 500) nounwind		; <i32> [#uses=4]
+	%0 = tail call  i32 (...) @read(i32 0, ptr @abuf, i32 500) nounwind		; <i32> [#uses=4]
 	%1 = icmp slt i32 %0, 0		; <i1> [#uses=1]
 	br i1 %1, label %bb1, label %bb2
 
 bb1:		; preds = %bb
-	tail call  void @perror(i8* getelementptr ([11 x i8], [11 x i8]* @.str, i32 0, i32 0)) nounwind
+	tail call  void @perror(ptr @.str) nounwind
 	ret i32 1
 
 bb2:		; preds = %bb
@@ -264,25 +264,25 @@ bb2:		; preds = %bb
 
 bb3:		; preds = %bb2
 	%3 = shl i32 %0, 1		; <i32> [#uses=1]
-	tail call  void @adpcm_decoder(i8* getelementptr ([500 x i8], [500 x i8]* @abuf, i32 0, i32 0), i16* getelementptr ([1000 x i16], [1000 x i16]* @sbuf, i32 0, i32 0), i32 %3, %struct.adpcm_state* @state) nounwind
+	tail call  void @adpcm_decoder(ptr @abuf, ptr @sbuf, i32 %3, ptr @state) nounwind
 	%4 = shl i32 %0, 2		; <i32> [#uses=1]
-	%5 = tail call  i32 (...) @write(i32 1, i16* getelementptr ([1000 x i16], [1000 x i16]* @sbuf, i32 0, i32 0), i32 %4) nounwind		; <i32> [#uses=0]
+	%5 = tail call  i32 (...) @write(i32 1, ptr @sbuf, i32 %4) nounwind		; <i32> [#uses=0]
 	br label %bb
 
 bb4:		; preds = %bb2
-	%6 = load %struct.FILE*, %struct.FILE** @__stderrp, align 4		; <%struct.FILE*> [#uses=1]
-	%7 = load i16, i16* getelementptr (%struct.adpcm_state, %struct.adpcm_state* @state, i32 0, i32 0), align 4		; <i16> [#uses=1]
+	%6 = load ptr, ptr @__stderrp, align 4		; <ptr> [#uses=1]
+	%7 = load i16, ptr @state, align 4		; <i16> [#uses=1]
 	%8 = sext i16 %7 to i32		; <i32> [#uses=1]
-	%9 = load i8, i8* getelementptr (%struct.adpcm_state, %struct.adpcm_state* @state, i32 0, i32 1), align 2		; <i8> [#uses=1]
+	%9 = load i8, ptr getelementptr (%struct.adpcm_state, ptr @state, i32 0, i32 1), align 2		; <i8> [#uses=1]
 	%10 = sext i8 %9 to i32		; <i32> [#uses=1]
-	%11 = tail call  i32 (%struct.FILE*, i8*, ...) @fprintf(%struct.FILE* %6, i8* getelementptr ([28 x i8], [28 x i8]* @.str1, i32 0, i32 0), i32 %8, i32 %10) nounwind		; <i32> [#uses=0]
+	%11 = tail call  i32 (ptr, ptr, ...) @fprintf(ptr %6, ptr @.str1, i32 %8, i32 %10) nounwind		; <i32> [#uses=0]
 	ret i32 0
 }
 
 declare i32 @read(...)
 
-declare void @perror(i8* nocapture) nounwind
+declare void @perror(ptr nocapture) nounwind
 
 declare i32 @write(...)
 
-declare i32 @fprintf(%struct.FILE* nocapture, i8* nocapture, ...) nounwind
+declare i32 @fprintf(ptr nocapture, ptr nocapture, ...) nounwind

diff  --git a/llvm/test/CodeGen/Thumb/bic_imm.ll b/llvm/test/CodeGen/Thumb/bic_imm.ll
index 0426551486bf2..741b2cf8db2e3 100644
--- a/llvm/test/CodeGen/Thumb/bic_imm.ll
+++ b/llvm/test/CodeGen/Thumb/bic_imm.ll
@@ -36,7 +36,7 @@ entry:
   ret i32 %and
 }
 
-define void @truncated(i16 %a, i16* %p) {
+define void @truncated(i16 %a, ptr %p) {
 ; CHECK-T1-LABEL: truncated:
 ; CHECK-T1:       @ %bb.0:
 ; CHECK-T1-NEXT:    movs r2, #128
@@ -50,11 +50,11 @@ define void @truncated(i16 %a, i16* %p) {
 ; CHECK-T2-NEXT:    strh r0, [r1]
 ; CHECK-T2-NEXT:    bx lr
   %and = and i16 %a, -129
-  store i16 %and, i16* %p
+  store i16 %and, ptr %p
   ret void
 }
 
-define void @truncated_neg2(i16 %a, i16* %p) {
+define void @truncated_neg2(i16 %a, ptr %p) {
 ; CHECK-T1-LABEL: truncated_neg2:
 ; CHECK-T1:       @ %bb.0:
 ; CHECK-T1-NEXT:    movs r2, #1
@@ -68,11 +68,11 @@ define void @truncated_neg2(i16 %a, i16* %p) {
 ; CHECK-T2-NEXT:    strh r0, [r1]
 ; CHECK-T2-NEXT:    bx lr
   %and = and i16 %a, -2
-  store i16 %and, i16* %p
+  store i16 %and, ptr %p
   ret void
 }
 
-define void @truncated_neg256(i16 %a, i16* %p) {
+define void @truncated_neg256(i16 %a, ptr %p) {
 ; CHECK-T1-LABEL: truncated_neg256:
 ; CHECK-T1:       @ %bb.0:
 ; CHECK-T1-NEXT:    movs r2, #255
@@ -86,12 +86,12 @@ define void @truncated_neg256(i16 %a, i16* %p) {
 ; CHECK-T2-NEXT:    strh r0, [r1]
 ; CHECK-T2-NEXT:    bx lr
   %and = and i16 %a, -256
-  store i16 %and, i16* %p
+  store i16 %and, ptr %p
   ret void
 }
 
 ; FIXME: Thumb2 supports "bic r0, r0, #510"
-define void @truncated_neg511(i16 %a, i16* %p) {
+define void @truncated_neg511(i16 %a, ptr %p) {
 ; CHECK-T1-LABEL: truncated_neg511:
 ; CHECK-T1:       @ %bb.0:
 ; CHECK-T1-NEXT:    ldr r2, .LCPI5_0
@@ -110,6 +110,6 @@ define void @truncated_neg511(i16 %a, i16* %p) {
 ; CHECK-T2-NEXT:    strh r0, [r1]
 ; CHECK-T2-NEXT:    bx lr
   %and = and i16 %a, -511
-  store i16 %and, i16* %p
+  store i16 %and, ptr %p
   ret void
 }

diff  --git a/llvm/test/CodeGen/Thumb/callee_save.ll b/llvm/test/CodeGen/Thumb/callee_save.ll
index 7d019cd4b1b7c..b8a5af71e728d 100644
--- a/llvm/test/CodeGen/Thumb/callee_save.ll
+++ b/llvm/test/CodeGen/Thumb/callee_save.ll
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc -mtriple=thumbv6m-none-eabi < %s | FileCheck %s
 
-declare i8* @llvm.returnaddress(i32)
+declare ptr @llvm.returnaddress(i32)
 
 ; We don't allocate high registers, so any function not using inline asm will
 ; only need to save the low registers.
@@ -162,8 +162,8 @@ define void @four_high_four_low_frame_ptr_ret_addr() "frame-pointer"="all" {
 ; CHECK-NEXT:    mov r11, r3
 ; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}
 entry:
-  %a = tail call i8* @llvm.returnaddress(i32 0)
-  tail call void asm sideeffect "", "r,~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11}"(i8* %a)
+  %a = tail call ptr @llvm.returnaddress(i32 0)
+  tail call void asm sideeffect "", "r,~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11}"(ptr %a)
   ret void
 }
 
@@ -266,8 +266,8 @@ define <4 x i32> @all_of_the_above(i32 %a, i32 %b, i32 %c, i32 %d) "frame-pointe
 ; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}
 entry:
   tail call void asm sideeffect "", "r,r,r,r,~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11}"(i32 %a, i32 %b, i32 %c, i32 %d)
-  %e = tail call i8* @llvm.returnaddress(i32 0)
-  %f = ptrtoint i8* %e to i32
+  %e = tail call ptr @llvm.returnaddress(i32 0)
+  %f = ptrtoint ptr %e to i32
   %vecinit = insertelement <4 x i32> undef, i32 %f, i32 0
   %vecinit11 = insertelement <4 x i32> %vecinit, i32 2, i32 1
   %vecinit12 = insertelement <4 x i32> %vecinit11, i32 3, i32 2
@@ -313,7 +313,7 @@ define <4 x i32> @base_pointer(i32 %a) {
 ; CHECK-NEXT:    pop {r4, r6, r7, pc}
 entry:
   %b = alloca i32, i32 %a
-  call void asm sideeffect "", "r,~{r8},~{r9}"(i32* %b)
+  call void asm sideeffect "", "r,~{r8},~{r9}"(ptr %b)
   %vecinit = insertelement <4 x i32> undef, i32 1, i32 0
   %vecinit11 = insertelement <4 x i32> %vecinit, i32 2, i32 1
   %vecinit12 = insertelement <4 x i32> %vecinit11, i32 3, i32 2

diff  --git a/llvm/test/CodeGen/Thumb/cmp-and-fold.ll b/llvm/test/CodeGen/Thumb/cmp-and-fold.ll
index 44c873a5fe25e..b5bf62c51dc3f 100644
--- a/llvm/test/CodeGen/Thumb/cmp-and-fold.ll
+++ b/llvm/test/CodeGen/Thumb/cmp-and-fold.ll
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc -mtriple=thumbv6-eabi %s -o - | FileCheck %s
 
-define void @test1(i32 %x, void ()* %f)  {
+define void @test1(i32 %x, ptr %f)  {
 ; CHECK-LABEL: test1:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r7, lr}
@@ -26,7 +26,7 @@ if.end:
   ret void
 }
 
-define void @test2(i32 %x, void ()* %f)  {
+define void @test2(i32 %x, ptr %f)  {
 ; CHECK-LABEL: test2:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r7, lr}
@@ -50,7 +50,7 @@ if.end:
   ret void
 }
 
-define void @test3(i32 %x, void ()* %f)  {
+define void @test3(i32 %x, ptr %f)  {
 ; CHECK-LABEL: test3:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r7, lr}
@@ -74,7 +74,7 @@ if.end:
   ret void
 }
 
-define void @test4(i32 %x, void ()* %f)  {
+define void @test4(i32 %x, ptr %f)  {
 ; CHECK-LABEL: test4:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r7, lr}
@@ -99,7 +99,7 @@ if.end:
   ret void
 }
 
-define void @test5(i32 %x, void ()* %f)  {
+define void @test5(i32 %x, ptr %f)  {
 ; CHECK-LABEL: test5:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r7, lr}
@@ -124,7 +124,7 @@ if.end:
   ret void
 }
 
-define void @test6(i32 %x, void ()* %f)  {
+define void @test6(i32 %x, ptr %f)  {
 ; CHECK-LABEL: test6:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r7, lr}
@@ -150,7 +150,7 @@ if.end:
   ret void
 }
 
-define void @test7(i32 %x, void ()* %f)  {
+define void @test7(i32 %x, ptr %f)  {
 ; CHECK-LABEL: test7:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r7, lr}
@@ -180,7 +180,7 @@ if.end:
   ret void
 }
 
-define void @test8(i32 %x, void ()* %f)  {
+define void @test8(i32 %x, ptr %f)  {
 ; CHECK-LABEL: test8:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r7, lr}

diff  --git a/llvm/test/CodeGen/Thumb/consthoist-few-dependents.ll b/llvm/test/CodeGen/Thumb/consthoist-few-dependents.ll
index d408fd43b4c69..30f990f9bc569 100644
--- a/llvm/test/CodeGen/Thumb/consthoist-few-dependents.ll
+++ b/llvm/test/CodeGen/Thumb/consthoist-few-dependents.ll
@@ -38,16 +38,16 @@ bb:
   ]
 
 bb1:
-  store i1 1, i1* @global, align 1
+  store i1 1, ptr @global, align 1
   unreachable
 
 bb2:
-  store i1 0, i1* @global, align 1
+  store i1 0, ptr @global, align 1
   unreachable
 
 bb3:
-  store i1 0, i1* @global.0, align 1
-  store i1 0, i1* @global, align 1
+  store i1 0, ptr @global.0, align 1
+  store i1 0, ptr @global, align 1
   unreachable
 
 bb5:
@@ -87,16 +87,16 @@ bb:
   ]
 
 bb1:                                              ; preds = %bb
-  store i8 -1, i8* @global.1, align 1
+  store i8 -1, ptr @global.1, align 1
   unreachable
 
 bb2:                                              ; preds = %bb
-  store i8 -2, i8* @global.1, align 1
+  store i8 -2, ptr @global.1, align 1
   unreachable
 
 bb3:                                              ; preds = %bb
-  store i8 -2, i8* @global.2, align 1
-  store i8 -2, i8* @global.1, align 1
+  store i8 -2, ptr @global.2, align 1
+  store i8 -2, ptr @global.1, align 1
   unreachable
 
 bb5:                                              ; preds = %bb
@@ -122,36 +122,36 @@ bb5:                                              ; preds = %bb
 ; OPT-1: bb1:
 ; OPT-1: %[[C1:const[0-9]?]] = bitcast i16 -5 to i16
 ; OPT-1-NEXT: %const_mat = add i16 %[[C1]], 1
-; OPT-1-NEXT: store i16 %const_mat, i16* @global.3, align 1
+; OPT-1-NEXT: store i16 %const_mat, ptr @global.3, align 1
 ; OPT-1: bb2:
 ; OPT-1-NEXT: %[[C2:const[0-9]?]] = bitcast i16 -5 to i16
-; OPT-1-NEXT: store i16 %[[C2]], i16* @global.3, align 1
+; OPT-1-NEXT: store i16 %[[C2]], ptr @global.3, align 1
 ; OPT-1: bb3:
 ; OPT-1-NEXT: %[[C3:const[0-9]?]] = bitcast i16 -5 to i16
-; OPT-1-NEXT: store i16 %[[C3]], i16* @global.4, align 1
-; OPT-1-NEXT: store i16 %[[C3]], i16* @global.3, align 1
+; OPT-1-NEXT: store i16 %[[C3]], ptr @global.4, align 1
+; OPT-1-NEXT: store i16 %[[C3]], ptr @global.3, align 1
 
 ; -consthoist-min-num-to-rebase=2, check that 65532 and single use of 65531
 ; in bb2 is not rebased
 ; OPT-2: bb1:
-; OPT-2-NEXT: store i16 -4, i16* @global.3, align 1
+; OPT-2-NEXT: store i16 -4, ptr @global.3, align 1
 ; OPT-2: bb2:
-; OPT-2-NEXT: store i16 -5, i16* @global.3, align 1
+; OPT-2-NEXT: store i16 -5, ptr @global.3, align 1
 ; OPT-2: bb3:
 ; OPT-2-NEXT:   %[[C4:const[0-9]?]] = bitcast i16 -5 to i16
-; OPT-2-NEXT:   store i16 %[[C4]], i16* @global.4, align 1
-; OPT-2-NEXT:   store i16 %[[C4]], i16* @global.3, align 1
+; OPT-2-NEXT:   store i16 %[[C4]], ptr @global.4, align 1
+; OPT-2-NEXT:   store i16 %[[C4]], ptr @global.3, align 1
 ; OPT-2-NOT: add
 
 ; -consthoist-min-num-to-rebase=3, check that dual uses of 65531 in bb3 are
 ; not rebase
 ; OPT-3: bb1:
-; OPT-3-NEXT: store i16 -4, i16* @global.3, align 1
+; OPT-3-NEXT: store i16 -4, ptr @global.3, align 1
 ; OPT-3: bb2:
-; OPT-3-NEXT: store i16 -5, i16* @global.3, align 1
+; OPT-3-NEXT: store i16 -5, ptr @global.3, align 1
 ; OPT-3: bb3:
-; OPT-3-NEXT:   store i16 -5, i16* @global.4, align 1
-; OPT-3-NEXT:   store i16 -5, i16* @global.3, align 1
+; OPT-3-NEXT:   store i16 -5, ptr @global.4, align 1
+; OPT-3-NEXT:   store i16 -5, ptr @global.3, align 1
 ; OPT-3-NOT: add
 ; OPT-3-NOT: bitcast
 
@@ -173,16 +173,16 @@ bb:
   ]
 
 bb1:                                              ; preds = %bb
-  store i16 65532, i16* @global.3, align 1
+  store i16 65532, ptr @global.3, align 1
   unreachable
 
 bb2:                                              ; preds = %bb
-  store i16 65531, i16* @global.3, align 1
+  store i16 65531, ptr @global.3, align 1
   unreachable
 
 bb3:                                              ; preds = %bb
-  store i16 65531, i16* @global.4, align 1
-  store i16 65531, i16* @global.3, align 1
+  store i16 65531, ptr @global.4, align 1
+  store i16 65531, ptr @global.3, align 1
   unreachable
 
 bb5:                                              ; preds = %bb

diff  --git a/llvm/test/CodeGen/Thumb/consthoist-imm8-costs-1.ll b/llvm/test/CodeGen/Thumb/consthoist-imm8-costs-1.ll
index 33c2e30205da1..caf7b3bcdd9f3 100644
--- a/llvm/test/CodeGen/Thumb/consthoist-imm8-costs-1.ll
+++ b/llvm/test/CodeGen/Thumb/consthoist-imm8-costs-1.ll
@@ -21,17 +21,17 @@ bb:
   br i1 undef, label %bb1, label %bb2
 
 bb1:
-  store i8 0, i8* getelementptr inbounds (i8, i8* @a, i32 1), align 1
-  store i8 0, i8* getelementptr inbounds (i8, i8* @a, i32 0), align 4
-  store i8 -1, i8* getelementptr inbounds (i8, i8* @a, i32 2), align 2
-  store i8 0, i8* getelementptr inbounds (i8, i8* @a, i32 3), align 1
+  store i8 0, ptr getelementptr inbounds (i8, ptr @a, i32 1), align 1
+  store i8 0, ptr @a, align 4
+  store i8 -1, ptr getelementptr inbounds (i8, ptr @a, i32 2), align 2
+  store i8 0, ptr getelementptr inbounds (i8, ptr @a, i32 3), align 1
   br label %bb3
 
 bb2:
-  store i8 0, i8* getelementptr inbounds (i8, i8* @a, i32 9), align 1
-  store i8 0, i8* getelementptr inbounds (i8, i8* @a, i32 8), align 4
-  store i8 -1, i8* getelementptr inbounds (i8, i8* @a, i32 10), align 2
-  store i8 0, i8* getelementptr inbounds (i8, i8* @a, i32 11), align 1
+  store i8 0, ptr getelementptr inbounds (i8, ptr @a, i32 9), align 1
+  store i8 0, ptr getelementptr inbounds (i8, ptr @a, i32 8), align 4
+  store i8 -1, ptr getelementptr inbounds (i8, ptr @a, i32 10), align 2
+  store i8 0, ptr getelementptr inbounds (i8, ptr @a, i32 11), align 1
   br label %bb3
 
 bb3:

diff  --git a/llvm/test/CodeGen/Thumb/consthoist-physical-addr.ll b/llvm/test/CodeGen/Thumb/consthoist-physical-addr.ll
index fbea199d2d1d4..4380abe3273b2 100644
--- a/llvm/test/CodeGen/Thumb/consthoist-physical-addr.ll
+++ b/llvm/test/CodeGen/Thumb/consthoist-physical-addr.ll
@@ -4,7 +4,7 @@
 target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
 target triple = "thumbv6m-arm-none-eabi"
 
-define i32 @C(i32 %x, i32* nocapture %y) #0 {
+define i32 @C(i32 %x, ptr nocapture %y) #0 {
 ; CHECK-LABEL: C:
 ; CHECK:         .save {r4, r5, r7, lr}
 ; CHECK-NEXT:    push {r4, r5, r7, lr}
@@ -46,21 +46,21 @@ for.cond:                                         ; preds = %B.exit, %entry
 for.body:                                         ; preds = %for.cond
   %mul = shl i32 %i.0, 2
   %add = add i32 %mul, %x
-  store volatile i32 0, i32* inttoptr (i32 805355532 to i32*), align 4
-  store volatile i32 %add, i32* inttoptr (i32 805355524 to i32*), align 4
-  store volatile i32 1, i32* inttoptr (i32 805355536 to i32*), align 16
+  store volatile i32 0, ptr inttoptr (i32 805355532 to ptr), align 4
+  store volatile i32 %add, ptr inttoptr (i32 805355524 to ptr), align 4
+  store volatile i32 1, ptr inttoptr (i32 805355536 to ptr), align 16
   tail call void @llvm.arm.isb(i32 15) #1
   br label %while.cond.i
 
 while.cond.i:                                     ; preds = %while.cond.i, %for.body
-  %0 = load volatile i32, i32* inttoptr (i32 805355536 to i32*), align 16
+  %0 = load volatile i32, ptr inttoptr (i32 805355536 to ptr), align 16
   %tobool.i = icmp eq i32 %0, 0
   br i1 %tobool.i, label %B.exit, label %while.cond.i
 
 B.exit:                                           ; preds = %while.cond.i
-  %1 = load volatile i32, i32* inttoptr (i32 805355528 to i32*), align 8
-  %arrayidx = getelementptr inbounds i32, i32* %y, i32 %i.0
-  store i32 %1, i32* %arrayidx, align 4
+  %1 = load volatile i32, ptr inttoptr (i32 805355528 to ptr), align 8
+  %arrayidx = getelementptr inbounds i32, ptr %y, i32 %i.0
+  store i32 %1, ptr %arrayidx, align 4
   %inc = add nuw nsw i32 %i.0, 1
   br label %for.cond
 

diff  --git a/llvm/test/CodeGen/Thumb/cortex-m0-unaligned-access.ll b/llvm/test/CodeGen/Thumb/cortex-m0-unaligned-access.ll
index 1ba7cb795d11b..9ac0e478babeb 100644
--- a/llvm/test/CodeGen/Thumb/cortex-m0-unaligned-access.ll
+++ b/llvm/test/CodeGen/Thumb/cortex-m0-unaligned-access.ll
@@ -1,13 +1,13 @@
 ; RUN: llc -mtriple=thumbv6m-apple-unknown-macho -mattr=+strict-align < %s | FileCheck --check-prefix=V6M %s
 ; RUN: llc -mtriple=thumbv7m-apple-unknown-macho < %s | FileCheck --check-prefix=V7M %s
 
-define i32 @split_load(i32* %p) nounwind {
+define i32 @split_load(ptr %p) nounwind {
 ; V6M-LABEL: split_load
 ; V6M: ldrh
 ; V6M: ldrh
 ; V7M-LABEL: split_load
 ; V7M-NOT: ldrh
 ; V7M: bx lr
-  %val = load i32, i32* %p, align 2
+  %val = load i32, ptr %p, align 2
   ret i32 %val
 }

diff  --git a/llvm/test/CodeGen/Thumb/dyn-stackalloc.ll b/llvm/test/CodeGen/Thumb/dyn-stackalloc.ll
index c6b5c7b3513d2..813242f7d4ccb 100644
--- a/llvm/test/CodeGen/Thumb/dyn-stackalloc.ll
+++ b/llvm/test/CodeGen/Thumb/dyn-stackalloc.ll
@@ -1,10 +1,10 @@
 ; RUN: llc < %s -mtriple=thumb-apple-darwin -disable-cgp-branch-opts -disable-post-ra -verify-machineinstrs | FileCheck %s -check-prefix=CHECK -check-prefix=RA_GREEDY
 ; RUN: llc < %s -mtriple=thumb-apple-darwin -disable-cgp-branch-opts -disable-post-ra -regalloc=basic -verify-machineinstrs | FileCheck %s -check-prefix=CHECK -check-prefix=RA_BASIC
 
-	%struct.state = type { i32, %struct.info*, float**, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i8* }
-	%struct.info = type { i32, i32, i32, i32, i32, i32, i32, i8* }
+	%struct.state = type { i32, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, ptr }
+	%struct.info = type { i32, i32, i32, i32, i32, i32, i32, ptr }
 
-define void @t1(%struct.state* %v) {
+define void @t1(ptr %v) {
 ; CHECK-LABEL: t1:
 ; CHECK: push
 ; CHECK: add r7, sp, #12
@@ -12,33 +12,32 @@ define void @t1(%struct.state* %v) {
 ; CHECK: mov r[[R1:[0-9]+]], sp
 ; CHECK: subs r[[R2:[0-9]+]], r[[R1]], r[[R0]]
 ; CHECK: mov sp, r[[R2]]
-	%tmp6 = load i32, i32* null
+	%tmp6 = load i32, ptr null
 	%tmp8 = alloca float, i32 %tmp6
-	store i32 1, i32* null
+	store i32 1, ptr null
 	br i1 false, label %bb123.preheader, label %return
 
 bb123.preheader:
 	br i1 false, label %bb43, label %return
 
 bb43:
-	call fastcc void @f1( float* %tmp8, float* null, i32 0 )
-	%tmp70 = load i32, i32* null
-	%tmp85 = getelementptr float, float* %tmp8, i32 0
-	call fastcc void @f2( float* null, float* null, float* %tmp85, i32 %tmp70 )
+	call fastcc void @f1( ptr %tmp8, ptr null, i32 0 )
+	%tmp70 = load i32, ptr null
+	call fastcc void @f2( ptr null, ptr null, ptr %tmp8, i32 %tmp70 )
 	ret void
 
 return:
 	ret void
 }
 
-declare fastcc void @f1(float*, float*, i32)
+declare fastcc void @f1(ptr, ptr, i32)
 
-declare fastcc void @f2(float*, float*, float*, i32)
+declare fastcc void @f2(ptr, ptr, ptr, i32)
 
-	%struct.comment = type { i8**, i32*, i32, i8* }
+	%struct.comment = type { ptr, ptr, i32, ptr }
 @str215 = external global [2 x i8]
 
-define void @t2(%struct.comment* %vc, i8* %tag, i8* %contents) {
+define void @t2(ptr %vc, ptr %tag, ptr %contents) {
 ; CHECK-LABEL: t2:
 ; CHECK: push
 ; CHECK: add r7, sp, #12
@@ -53,26 +52,26 @@ define void @t2(%struct.comment* %vc, i8* %tag, i8* %contents) {
 ; CHECK: mov sp, r[[R2]]
 ; CHECK-NOT: ldr r0, [sp
 ; CHECK: bx
-	%tmp1 = call i32 @strlen( i8* %tag )
-	%tmp3 = call i32 @strlen( i8* %contents )
+	%tmp1 = call i32 @strlen( ptr %tag )
+	%tmp3 = call i32 @strlen( ptr %contents )
 	%tmp4 = add i32 %tmp1, 2
 	%tmp5 = add i32 %tmp4, %tmp3
 	%tmp6 = alloca i8, i32 %tmp5
-	%tmp9 = call i8* @strcpy( i8* %tmp6, i8* %tag )
-	%tmp6.len = call i32 @strlen( i8* %tmp6 )
-	%tmp6.indexed = getelementptr i8, i8* %tmp6, i32 %tmp6.len
-	call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 1 %tmp6.indexed, i8* align 1 getelementptr inbounds ([2 x i8], [2 x i8]* @str215, i32 0, i32 0), i32 2, i1 false)
-	%tmp15 = call i8* @strcat( i8* %tmp6, i8* %contents )
-	call fastcc void @comment_add( %struct.comment* %vc, i8* %tmp6 )
+	%tmp9 = call ptr @strcpy( ptr %tmp6, ptr %tag )
+	%tmp6.len = call i32 @strlen( ptr %tmp6 )
+	%tmp6.indexed = getelementptr i8, ptr %tmp6, i32 %tmp6.len
+	call void @llvm.memcpy.p0.p0.i32(ptr align 1 %tmp6.indexed, ptr align 1 @str215, i32 2, i1 false)
+	%tmp15 = call ptr @strcat( ptr %tmp6, ptr %contents )
+	call fastcc void @comment_add( ptr %vc, ptr %tmp6 )
 	ret void
 }
 
-declare i32 @strlen(i8*)
+declare i32 @strlen(ptr)
 
-declare i8* @strcat(i8*, i8*)
+declare ptr @strcat(ptr, ptr)
 
-declare fastcc void @comment_add(%struct.comment*, i8*)
+declare fastcc void @comment_add(ptr, ptr)
 
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind
 
-declare i8* @strcpy(i8*, i8*)
+declare ptr @strcpy(ptr, ptr)

diff  --git a/llvm/test/CodeGen/Thumb/emergency-spill-slot.ll b/llvm/test/CodeGen/Thumb/emergency-spill-slot.ll
index 5661c82326bb4..3f7b20aa4009a 100644
--- a/llvm/test/CodeGen/Thumb/emergency-spill-slot.ll
+++ b/llvm/test/CodeGen/Thumb/emergency-spill-slot.ll
@@ -42,15 +42,15 @@ define void @vla_emergency_spill(i32 %n) {
 entry:
   %x = alloca [1024 x i32], align 4
   %vla = alloca i8, i32 %n, align 1
-  %asm1 = call { i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},0,1,2,3,4,5"(i8* %vla, [1024 x i32]* %x, i32 undef, i32 undef, i32 undef, i32 undef)
+  %asm1 = call { i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},0,1,2,3,4,5"(ptr %vla, ptr %x, i32 undef, i32 undef, i32 undef, i32 undef)
   %asmresult = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 0
   %asmresult1 = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 1
   %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 2
   %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 3
   %asmresult4 = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 4
   %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 5
-  %arrayidx = getelementptr inbounds [1024 x i32], [1024 x i32]* %x, i32 0, i32 255
-  store i32 %asmresult5, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds [1024 x i32], ptr %x, i32 0, i32 255
+  store i32 %asmresult5, ptr %arrayidx, align 4
   call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5}"(i32 %asmresult, i32 %asmresult1, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5) #2
   ret void
 }
@@ -91,7 +91,7 @@ define void @simple_emergency_spill(i32 %n) {
 entry:
   %x = alloca [1024 x i32], align 4
   %y = alloca [1024 x i32], align 4
-  %asm1 = call { i32, i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},={r7},0,1,2,3,4,5,6,7"([1024 x i32]* %y, [1024 x i32]* %x, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)
+  %asm1 = call { i32, i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},={r7},0,1,2,3,4,5,6,7"(ptr %y, ptr %x, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)
   %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 0
   %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 1
   %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 2
@@ -100,8 +100,8 @@ entry:
   %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 5
   %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 6
   %asmresult8 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 7
-  %arrayidx = getelementptr inbounds [1024 x i32], [1024 x i32]* %x, i32 0, i32 255
-  store i32 %asmresult6, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds [1024 x i32], ptr %x, i32 0, i32 255
+  store i32 %asmresult6, ptr %arrayidx, align 4
   call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6},{r7}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7, i32 %asmresult8)
   ret void
 }
@@ -151,7 +151,7 @@ define void @simple_emergency_spill_nor7(i32 %n) {
 entry:
   %x = alloca [1024 x i32], align 4
   %y = alloca [1024 x i32], align 4
-  %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"([1024 x i32]* %y, [1024 x i32]* %x, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)
+  %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"(ptr %y, ptr %x, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)
   %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 0
   %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 1
   %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 2
@@ -159,13 +159,13 @@ entry:
   %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 4
   %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 5
   %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 6
-  %arrayidx = getelementptr inbounds [1024 x i32], [1024 x i32]* %x, i32 0, i32 255
-  store i32 %asmresult6, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds [1024 x i32], ptr %x, i32 0, i32 255
+  store i32 %asmresult6, ptr %arrayidx, align 4
   call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7)
   ret void
 }
 
-define void @arg_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, [252 x i32]* byval([252 x i32]) %p) {
+define void @arg_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, ptr byval([252 x i32]) %p) {
 ; CHECK-LABEL: arg_emergency_spill:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r4, r5, r6, r7, lr}
@@ -189,8 +189,7 @@ define void @arg_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, [252 x i32]*
 ; CHECK-NEXT:  .LCPI3_0:
 ; CHECK-NEXT:    .long 1028 @ 0x404
 entry:
-  %pp = getelementptr inbounds [252 x i32], [252 x i32]* %p, i32 0, i32 0
-  %asm1 = call { i32, i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},={r7},0,1,2,3,4,5,6,7"(i32* %pp, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)
+  %asm1 = call { i32, i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},={r7},0,1,2,3,4,5,6,7"(ptr %p, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)
   %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 0
   %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 1
   %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 2
@@ -199,15 +198,15 @@ entry:
   %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 5
   %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 6
   %asmresult8 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 7
-  %arrayidx = getelementptr inbounds i32, i32* %pp, i32 251
-  store i32 %asmresult6, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %p, i32 251
+  store i32 %asmresult6, ptr %arrayidx, align 4
   call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6},{r7}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7, i32 %asmresult8)
   ret void
 }
 
 ; We currently overestimate the amount of required stack space by 16 bytes,
 ; so this is the largest stack that doesn't require an emergency spill slot.
-define void @arg_no_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, [248 x i32]* byval([248 x i32]) %p) {
+define void @arg_no_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, ptr byval([248 x i32]) %p) {
 ; CHECK-LABEL: arg_no_emergency_spill:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r4, r5, r6, r7, lr}
@@ -220,8 +219,7 @@ define void @arg_no_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, [248 x i3
 ; CHECK-NEXT:    @NO_APP
 ; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}
 entry:
-  %pp = getelementptr inbounds [248 x i32], [248 x i32]* %p, i32 0, i32 0
-  %asm1 = call { i32, i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},={r7},0,1,2,3,4,5,6,7"(i32* %pp, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)
+  %asm1 = call { i32, i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},={r7},0,1,2,3,4,5,6,7"(ptr %p, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)
   %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 0
   %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 1
   %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 2
@@ -230,13 +228,13 @@ entry:
   %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 5
   %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 6
   %asmresult8 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 7
-  %arrayidx = getelementptr inbounds i32, i32* %pp, i32 247
-  store i32 %asmresult6, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %p, i32 247
+  store i32 %asmresult6, ptr %arrayidx, align 4
   call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6},{r7}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7, i32 %asmresult8)
   ret void
 }
 
-define void @aligned_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, [31 x i32]* byval([31 x i32]) %p) {
+define void @aligned_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, ptr byval([31 x i32]) %p) {
 ; CHECK-LABEL: aligned_emergency_spill:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r4, r5, r6, r7, lr}
@@ -270,8 +268,7 @@ define void @aligned_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, [31 x i3
 ; CHECK-NEXT:    .long 128 @ 0x80
 entry:
   %y = alloca [4 x i32], align 16
-  %pp = getelementptr inbounds [31 x i32], [31 x i32]* %p, i32 0, i32 0
-  %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"([4 x i32]* %y, i32* %pp, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef) #3
+  %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"(ptr %y, ptr %p, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef) #3
   %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 0
   %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 1
   %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 2
@@ -279,15 +276,15 @@ entry:
   %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 4
   %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 5
   %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 6
-  %arrayidx = getelementptr inbounds i32, i32* %pp, i32 30
-  store i32 %asmresult6, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %p, i32 30
+  store i32 %asmresult6, ptr %arrayidx, align 4
   call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7)
   ret void
 }
 
 ; This function should have no emergency spill slot, so its stack should be
 ; smaller than @aligned_emergency_spill.
-define void @aligned_no_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, [30 x i32]* byval([30 x i32]) %p) {
+define void @aligned_no_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, ptr byval([30 x i32]) %p) {
 ; CHECK-LABEL: aligned_no_emergency_spill:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r4, r5, r6, r7, lr}
@@ -314,8 +311,7 @@ define void @aligned_no_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, [30 x
 ; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}
 entry:
   %y = alloca [4 x i32], align 16
-  %pp = getelementptr inbounds [30 x i32], [30 x i32]* %p, i32 0, i32 0
-  %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"([4 x i32]* %y, i32* %pp, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef) #3
+  %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"(ptr %y, ptr %p, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef) #3
   %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 0
   %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 1
   %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 2
@@ -323,8 +319,8 @@ entry:
   %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 4
   %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 5
   %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 6
-  %arrayidx = getelementptr inbounds i32, i32* %pp, i32 29
-  store i32 %asmresult6, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %p, i32 29
+  store i32 %asmresult6, ptr %arrayidx, align 4
   call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7)
   ret void
 }
@@ -334,7 +330,7 @@ entry:
 ; so we don't generate code that requires an emergency spill slot we never
 ; allocated.  If the store gets eliminated, this testcase probably needs
 ; to be rewritten.)
-define void @aligned_out_of_range_access(i32 %n, i32 %n2, i32 %n3, i32 %n4, [30 x i32]* byval([30 x i32]) %p) {
+define void @aligned_out_of_range_access(i32 %n, i32 %n2, i32 %n3, i32 %n4, ptr byval([30 x i32]) %p) {
 ; CHECK-LABEL: aligned_out_of_range_access:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    .save {r4, r5, r6, r7, lr}
@@ -365,8 +361,7 @@ define void @aligned_out_of_range_access(i32 %n, i32 %n2, i32 %n3, i32 %n4, [30
 ; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}
 entry:
   %y = alloca [4 x i32], align 16
-  %pp = getelementptr inbounds [30 x i32], [30 x i32]* %p, i32 0, i32 0
-  %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"([4 x i32]* %y, i32* %pp, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef) #3
+  %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"(ptr %y, ptr %p, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef) #3
   %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 0
   %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 1
   %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 2
@@ -374,8 +369,8 @@ entry:
   %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 4
   %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 5
   %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 6
-  %arrayidx = getelementptr inbounds i32, i32* %pp, i32 30
-  store i32 %asmresult6, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %p, i32 30
+  store i32 %asmresult6, ptr %arrayidx, align 4
   call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7)
   ret void
 }

diff  --git a/llvm/test/CodeGen/Thumb/frame-access.ll b/llvm/test/CodeGen/Thumb/frame-access.ll
index e7d4aca9926d8..422c595472ee4 100644
--- a/llvm/test/CodeGen/Thumb/frame-access.ll
+++ b/llvm/test/CodeGen/Thumb/frame-access.ll
@@ -10,16 +10,16 @@
 ; int u(int *, int *, int *, struct S, struct S);
 
 %struct.S = type { [128 x i32] }
-%struct.__va_list = type { i8* }
+%struct.__va_list = type { ptr }
 
 @s = common dso_local global %struct.S zeroinitializer, align 4
 
-declare void @llvm.va_start(i8*)
+declare void @llvm.va_start(ptr)
 declare dso_local i32 @i(i32) local_unnamed_addr
-declare dso_local i32 @g(i32*, i32, i32, i32, i32, i32) local_unnamed_addr
-declare dso_local i32 @f(i32*, i32, i32, i32, %struct.S* byval(%struct.S) align 4) local_unnamed_addr
-declare dso_local i32 @h(i32*, i32*, i32*) local_unnamed_addr
-declare dso_local i32 @u(i32*, i32*, i32*, %struct.S* byval(%struct.S) align 4, %struct.S* byval(%struct.S) align 4) local_unnamed_addr
+declare dso_local i32 @g(ptr, i32, i32, i32, i32, i32) local_unnamed_addr
+declare dso_local i32 @f(ptr, i32, i32, i32, ptr byval(%struct.S) align 4) local_unnamed_addr
+declare dso_local i32 @h(ptr, ptr, ptr) local_unnamed_addr
+declare dso_local i32 @u(ptr, ptr, ptr, ptr byval(%struct.S) align 4, ptr byval(%struct.S) align 4) local_unnamed_addr
 
 ;
 ; Test access to arguments, passed on stack (including varargs)
@@ -33,9 +33,7 @@ declare dso_local i32 @u(i32*, i32*, i32*, %struct.S* byval(%struct.S) align 4,
 define dso_local i32 @test_args_sp(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e) local_unnamed_addr {
 entry:
   %v = alloca [4 x i32], align 4
-  %0 = bitcast [4 x i32]* %v to i8*
-  %arraydecay = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 0
-  %call = call i32 @g(i32* nonnull %arraydecay, i32 %a, i32 %b, i32 %c, i32 %d, i32 %e)
+  %call = call i32 @g(ptr nonnull %v, i32 %a, i32 %b, i32 %c, i32 %d, i32 %e)
   ret i32 %call
 }
 ; CHECK-LABEL: test_args_sp
@@ -59,11 +57,8 @@ define dso_local i32 @test_varargs_sp(i32 %a, ...) local_unnamed_addr  {
 entry:
   %v = alloca [4 x i32], align 4
   %ap = alloca %struct.__va_list, align 4
-  %0 = bitcast [4 x i32]* %v to i8*
-  %1 = bitcast %struct.__va_list* %ap to i8*
-  call void @llvm.va_start(i8* nonnull %1)
-  %arraydecay = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 0
-  %call = call i32 @g(i32* nonnull %arraydecay, i32 %a, i32 0, i32 0, i32 0, i32 0)
+  call void @llvm.va_start(ptr nonnull %ap)
+  %call = call i32 @g(ptr nonnull %v, i32 %a, i32 0, i32 0, i32 0, i32 0)
   ret i32 %call
 }
 ; CHECK-LABEL: test_varargs_sp
@@ -89,9 +84,7 @@ entry:
 define dso_local i32 @test_args_realign(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e) local_unnamed_addr  {
 entry:
   %v = alloca [4 x i32], align 16
-  %0 = bitcast [4 x i32]* %v to i8*
-  %arraydecay = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 0
-  %call = call i32 @g(i32* nonnull %arraydecay, i32 %a, i32 %b, i32 %c, i32 %d, i32 %e)
+  %call = call i32 @g(ptr nonnull %v, i32 %a, i32 %b, i32 %c, i32 %d, i32 %e)
   ret i32 %call
 }
 ; CHECK-LABEL: test_args_realign
@@ -122,11 +115,8 @@ define dso_local i32 @test_varargs_realign(i32 %a, ...) local_unnamed_addr  {
 entry:
   %v = alloca [4 x i32], align 16
   %ap = alloca %struct.__va_list, align 4
-  %0 = bitcast [4 x i32]* %v to i8*
-  %1 = bitcast %struct.__va_list* %ap to i8*
-  call void @llvm.va_start(i8* nonnull %1)
-  %arraydecay = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 0
-  %call = call i32 @g(i32* nonnull %arraydecay, i32 %a, i32 0, i32 0, i32 0, i32 0)
+  call void @llvm.va_start(ptr nonnull %ap)
+  %call = call i32 @g(ptr nonnull %v, i32 %a, i32 0, i32 0, i32 0, i32 0)
   ret i32 %call
 }
 ; CHECK-LABEL: test_varargs_realign
@@ -156,7 +146,7 @@ entry:
 define dso_local i32 @test_args_vla(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e) local_unnamed_addr  {
 entry:
   %vla = alloca i32, i32 %a, align 4
-  %call = call i32 @g(i32* nonnull %vla, i32 %a, i32 %b, i32 %c, i32 %d, i32 %e)
+  %call = call i32 @g(ptr nonnull %vla, i32 %a, i32 %b, i32 %c, i32 %d, i32 %e)
   ret i32 %call
 }
 ; CHECK-LABEL: test_args_vla
@@ -184,9 +174,8 @@ define dso_local i32 @test_varargs_vla(i32 %a, ...) local_unnamed_addr  {
 entry:
   %ap = alloca %struct.__va_list, align 4
   %vla = alloca i32, i32 %a, align 4
-  %0 = bitcast %struct.__va_list* %ap to i8*
-  call void @llvm.va_start(i8* nonnull %0)
-  %call = call i32 @g(i32* nonnull %vla, i32 %a, i32 0, i32 0, i32 0, i32 0)
+  call void @llvm.va_start(ptr nonnull %ap)
+  %call = call i32 @g(ptr nonnull %vla, i32 %a, i32 0, i32 0, i32 0, i32 0)
   ret i32 %call
 }
 ; CHECK-LABEL: test_varargs_vla
@@ -214,14 +203,12 @@ entry:
 define dso_local i32 @test_args_moving_sp(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e) local_unnamed_addr  {
 entry:
   %v = alloca [4 x i32], align 4
-  %0 = bitcast [4 x i32]* %v to i8*
-  %arraydecay = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 0
   %add = add nsw i32 %c, %b
   %add1 = add nsw i32 %add, %d
-  %call = call i32 @f(i32* nonnull %arraydecay, i32 %a, i32 %add1, i32 %e, %struct.S* byval(%struct.S) nonnull align 4 @s)
-  %add.ptr = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 1
-  %add.ptr5 = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 2
-  %call6 = call i32 @h(i32* nonnull %arraydecay, i32* nonnull %add.ptr, i32* nonnull %add.ptr5)
+  %call = call i32 @f(ptr nonnull %v, i32 %a, i32 %add1, i32 %e, ptr byval(%struct.S) nonnull align 4 @s)
+  %add.ptr = getelementptr inbounds [4 x i32], ptr %v, i32 0, i32 1
+  %add.ptr5 = getelementptr inbounds [4 x i32], ptr %v, i32 0, i32 2
+  %call6 = call i32 @h(ptr nonnull %v, ptr nonnull %add.ptr, ptr nonnull %add.ptr5)
   %add7 = add nsw i32 %call6, %call
   ret i32 %add7
 }
@@ -268,14 +255,11 @@ define dso_local i32 @test_varargs_moving_sp(i32 %a, ...) local_unnamed_addr  {
 entry:
   %v = alloca [4 x i32], align 4
   %ap = alloca %struct.__va_list, align 4
-  %0 = bitcast [4 x i32]* %v to i8*
-  %1 = bitcast %struct.__va_list* %ap to i8*
-  call void @llvm.va_start(i8* nonnull %1)
-  %arraydecay = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 0
-  %call = call i32 @f(i32* nonnull %arraydecay, i32 %a, i32 0, i32 0, %struct.S* byval(%struct.S) nonnull align 4 @s)
-  %add.ptr = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 1
-  %add.ptr5 = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 2
-  %call6 = call i32 @h(i32* nonnull %arraydecay, i32* nonnull %add.ptr, i32* nonnull %add.ptr5)
+  call void @llvm.va_start(ptr nonnull %ap)
+  %call = call i32 @f(ptr nonnull %v, i32 %a, i32 0, i32 0, ptr byval(%struct.S) nonnull align 4 @s)
+  %add.ptr = getelementptr inbounds [4 x i32], ptr %v, i32 0, i32 1
+  %add.ptr5 = getelementptr inbounds [4 x i32], ptr %v, i32 0, i32 2
+  %call6 = call i32 @h(ptr nonnull %v, ptr nonnull %add.ptr, ptr nonnull %add.ptr5)
   %add = add nsw i32 %call6, %call
   ret i32 %add
 }
@@ -311,10 +295,10 @@ entry:
 ; int test(S a, int b) {
 ;   return i(b);
 ; }
-define dso_local i32 @test_args_large_offset(%struct.S* byval(%struct.S) align 4 %0, i32 %1) local_unnamed_addr {
+define dso_local i32 @test_args_large_offset(ptr byval(%struct.S) align 4 %0, i32 %1) local_unnamed_addr {
   %3 = alloca i32, align 4
-  store i32 %1, i32* %3, align 4
-  %4 = load i32, i32* %3, align 4
+  store i32 %1, ptr %3, align 4
+  %4 = load i32, ptr %3, align 4
   %5 = call i32 @i(i32 %4)
   ret i32 %5
 }
@@ -345,16 +329,11 @@ entry:
   %x = alloca i32, align 4
   %y = alloca i32, align 4
   %z = alloca i32, align 4
-  %0 = bitcast [4 x i32]* %v to i8*
-  %1 = bitcast i32* %x to i8*
-  %2 = bitcast i32* %y to i8*
-  %3 = bitcast i32* %z to i8*
-  %call = call i32 @h(i32* nonnull %x, i32* nonnull %y, i32* nonnull %z)
-  %arraydecay = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 0
-  %4 = load i32, i32* %x, align 4
-  %5 = load i32, i32* %y, align 4
-  %6 = load i32, i32* %z, align 4
-  %call1 = call i32 @g(i32* nonnull %arraydecay, i32 %4, i32 %5, i32 %6, i32 0, i32 0)
+  %call = call i32 @h(ptr nonnull %x, ptr nonnull %y, ptr nonnull %z)
+  %0 = load i32, ptr %x, align 4
+  %1 = load i32, ptr %y, align 4
+  %2 = load i32, ptr %z, align 4
+  %call1 = call i32 @g(ptr nonnull %v, i32 %0, i32 %1, i32 %2, i32 0, i32 0)
   ret i32 %call1
 }
 ; CHECK-LABEL: test_local
@@ -382,16 +361,11 @@ entry:
   %x = alloca i32, align 4
   %y = alloca i32, align 4
   %z = alloca i32, align 4
-  %0 = bitcast [4 x i32]* %v to i8*
-  %1 = bitcast i32* %x to i8*
-  %2 = bitcast i32* %y to i8*
-  %3 = bitcast i32* %z to i8*
-  %call = call i32 @h(i32* nonnull %x, i32* nonnull %y, i32* nonnull %z)
-  %arraydecay = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 0
-  %4 = load i32, i32* %x, align 4
-  %5 = load i32, i32* %y, align 4
-  %6 = load i32, i32* %z, align 4
-  %call1 = call i32 @g(i32* nonnull %arraydecay, i32 %4, i32 %5, i32 %6, i32 0, i32 0)
+  %call = call i32 @h(ptr nonnull %x, ptr nonnull %y, ptr nonnull %z)
+  %0 = load i32, ptr %x, align 4
+  %1 = load i32, ptr %y, align 4
+  %2 = load i32, ptr %z, align 4
+  %call1 = call i32 @g(ptr nonnull %v, i32 %0, i32 %1, i32 %2, i32 0, i32 0)
   ret i32 %call1
 }
 ; CHECK-LABEL: test_local_realign
@@ -427,14 +401,11 @@ entry:
   %y = alloca i32, align 4
   %z = alloca i32, align 4
   %vla = alloca i32, i32 %n, align 4
-  %0 = bitcast i32* %x to i8*
-  %1 = bitcast i32* %y to i8*
-  %2 = bitcast i32* %z to i8*
-  %call = call i32 @h(i32* nonnull %x, i32* nonnull %y, i32* nonnull %z)
-  %3 = load i32, i32* %x, align 4
-  %4 = load i32, i32* %y, align 4
-  %5 = load i32, i32* %z, align 4
-  %call1 = call i32 @g(i32* nonnull %vla, i32 %3, i32 %4, i32 %5, i32 0, i32 0)
+  %call = call i32 @h(ptr nonnull %x, ptr nonnull %y, ptr nonnull %z)
+  %0 = load i32, ptr %x, align 4
+  %1 = load i32, ptr %y, align 4
+  %2 = load i32, ptr %z, align 4
+  %call1 = call i32 @g(ptr nonnull %vla, i32 %0, i32 %1, i32 %2, i32 0, i32 0)
   ret i32 %call1
 }
 ; CHECK-LABEL: test_local_vla
@@ -477,13 +448,8 @@ entry:
   %x = alloca i32, align 4
   %y = alloca i32, align 4
   %z = alloca i32, align 4
-  %0 = bitcast [4 x i32]* %v to i8*
-  %1 = bitcast i32* %x to i8*
-  %2 = bitcast i32* %y to i8*
-  %3 = bitcast i32* %z to i8*
-  %arraydecay = getelementptr inbounds [4 x i32], [4 x i32]* %v, i32 0, i32 0
-  %call = call i32 @u(i32* nonnull %arraydecay, i32* nonnull %x, i32* nonnull %y, %struct.S* byval(%struct.S) nonnull align 4 @s, %struct.S* byval(%struct.S) nonnull align 4 @s)
-  %call2 = call i32 @u(i32* nonnull %arraydecay, i32* nonnull %y, i32* nonnull %z, %struct.S* byval(%struct.S) nonnull align 4 @s, %struct.S* byval(%struct.S) nonnull align 4 @s)
+  %call = call i32 @u(ptr nonnull %v, ptr nonnull %x, ptr nonnull %y, ptr byval(%struct.S) nonnull align 4 @s, ptr byval(%struct.S) nonnull align 4 @s)
+  %call2 = call i32 @u(ptr nonnull %v, ptr nonnull %y, ptr nonnull %z, ptr byval(%struct.S) nonnull align 4 @s, ptr byval(%struct.S) nonnull align 4 @s)
   %add = add nsw i32 %call2, %call
   ret i32 %add
 }

diff  --git a/llvm/test/CodeGen/Thumb/frame-chain.ll b/llvm/test/CodeGen/Thumb/frame-chain.ll
index 6945cd997d36c..6c14e103fbf45 100644
--- a/llvm/test/CodeGen/Thumb/frame-chain.ll
+++ b/llvm/test/CodeGen/Thumb/frame-chain.ll
@@ -54,8 +54,8 @@ define dso_local noundef i32 @leaf(i32 noundef %0) {
 ; LEAF-NOFP-AAPCS-NEXT:    add sp, #4
 ; LEAF-NOFP-AAPCS-NEXT:    bx lr
   %2 = alloca i32, align 4
-  store i32 %0, i32* %2, align 4
-  %3 = load i32, i32* %2, align 4
+  store i32 %0, ptr %2, align 4
+  %3 = load i32, ptr %2, align 4
   %4 = add nsw i32 %3, 4
   ret i32 %4
 }
@@ -118,14 +118,14 @@ define dso_local noundef i32 @non_leaf(i32 noundef %0) {
 ; NOFP-AAPCS-NEXT:    add sp, #8
 ; NOFP-AAPCS-NEXT:    pop {r7, pc}
   %2 = alloca i32, align 4
-  store i32 %0, i32* %2, align 4
-  %3 = load i32, i32* %2, align 4
+  store i32 %0, ptr %2, align 4
+  %3 = load i32, ptr %2, align 4
   %4 = call noundef i32 @leaf(i32 noundef %3)
   %5 = add nsw i32 %4, 1
   ret i32 %5
 }
 
-declare i8* @llvm.stacksave()
+declare ptr @llvm.stacksave()
 define dso_local void @required_fp(i32 %0, i32 %1) {
 ; FP-LABEL: required_fp:
 ; FP:       @ %bb.0:
@@ -260,15 +260,15 @@ define dso_local void @required_fp(i32 %0, i32 %1) {
 ; NOFP-AAPCS-NEXT:    pop {pc}
   %3 = alloca i32, align 4
   %4 = alloca i32, align 4
-  %5 = alloca i8*, align 8
+  %5 = alloca ptr, align 8
   %6 = alloca i64, align 8
-  store i32 %0, i32* %3, align 4
-  store i32 %1, i32* %4, align 4
-  %7 = load i32, i32* %3, align 4
+  store i32 %0, ptr %3, align 4
+  store i32 %1, ptr %4, align 4
+  %7 = load i32, ptr %3, align 4
   %8 = zext i32 %7 to i64
-  %9 = call i8* @llvm.stacksave()
-  store i8* %9, i8** %5, align 8
+  %9 = call ptr @llvm.stacksave()
+  store ptr %9, ptr %5, align 8
   %10 = alloca i32, i64 %8, align 4
-  store i64 %8, i64* %6, align 8
+  store i64 %8, ptr %6, align 8
   ret void
 }

diff  --git a/llvm/test/CodeGen/Thumb/i8-phi-ext.ll b/llvm/test/CodeGen/Thumb/i8-phi-ext.ll
index 598f4f3eee14e..a4392d2f7faad 100644
--- a/llvm/test/CodeGen/Thumb/i8-phi-ext.ll
+++ b/llvm/test/CodeGen/Thumb/i8-phi-ext.ll
@@ -5,14 +5,13 @@ target triple = "thumbv6m---eabi"
 
 ; CHECK-LABEL: test_fn
 ; CHECK-NOT: uxtb
-define dso_local zeroext i8 @test_fn(i32 %x, void (...)* nocapture %f) {
+define dso_local zeroext i8 @test_fn(i32 %x, ptr nocapture %f) {
 entry:
   %tobool = icmp eq i32 %x, 0
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
-  %callee.knr.cast = bitcast void (...)* %f to void ()*
-  tail call void %callee.knr.cast() #1
+  tail call void %f() #1
   br label %if.end
 
 if.end:                                           ; preds = %entry, %if.then

diff  --git a/llvm/test/CodeGen/Thumb/iabs-vector.ll b/llvm/test/CodeGen/Thumb/iabs-vector.ll
index 169400f27ce36..7be556b0213cc 100644
--- a/llvm/test/CodeGen/Thumb/iabs-vector.ll
+++ b/llvm/test/CodeGen/Thumb/iabs-vector.ll
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=thumbv7--- | FileCheck %s
 
-define void @PR41160(<8 x i32>* %p) nounwind {
+define void @PR41160(ptr %p) nounwind {
 ; CHECK-LABEL: PR41160:
 ; CHECK:       @ %bb.0:
 ; CHECK-NEXT:    vld1.8 {d16, d17}, [r0]
@@ -11,10 +11,10 @@ define void @PR41160(<8 x i32>* %p) nounwind {
 ; CHECK-NEXT:    vabs.s32 q8, q8
 ; CHECK-NEXT:    vst1.8 {d16, d17}, [r0]
 ; CHECK-NEXT:    bx lr
-  %tmp1 = load <8 x i32>, <8 x i32>* %p, align 1
+  %tmp1 = load <8 x i32>, ptr %p, align 1
   %tmp2 = icmp slt <8 x i32> %tmp1, zeroinitializer
   %tmp3 = sub nsw <8 x i32> zeroinitializer, %tmp1
   %tmp4 = select <8 x i1> %tmp2, <8 x i32> %tmp3, <8 x i32> %tmp1
-  store <8 x i32> %tmp4, <8 x i32>* %p, align 1
+  store <8 x i32> %tmp4, ptr %p, align 1
   ret void
 }

diff  --git a/llvm/test/CodeGen/Thumb/large-fn-switch.ll b/llvm/test/CodeGen/Thumb/large-fn-switch.ll
index 17f786b5cdd6d..de93e18fb7696 100644
--- a/llvm/test/CodeGen/Thumb/large-fn-switch.ll
+++ b/llvm/test/CodeGen/Thumb/large-fn-switch.ll
@@ -7,7 +7,7 @@
 target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
 target triple = "thumbv6m-unknown-unknown-eabi"
 
-define dso_local i32 @a(i32 %x, i32* nocapture %p) {
+define dso_local i32 @a(i32 %x, ptr nocapture %p) {
 entry:
   switch i32 %x, label %return [
     i32 0, label %GO2
@@ -703,7 +703,7 @@ GO2:
   br label %return
 
 GO3:
-  store i32 3, i32* %p, align 4
+  store i32 3, ptr %p, align 4
   br label %return
 
 return:

diff  --git a/llvm/test/CodeGen/Thumb/large-stack.ll b/llvm/test/CodeGen/Thumb/large-stack.ll
index 8a47f63c8db23..1c0b8619bb2fe 100644
--- a/llvm/test/CodeGen/Thumb/large-stack.ll
+++ b/llvm/test/CodeGen/Thumb/large-stack.ll
@@ -74,8 +74,8 @@ define i32 @test3() {
     %retval = alloca i32, align 4
     %tmp = alloca i32, align 4
     %a = alloca [805306369 x i8], align 4
-    store i32 0, i32* %tmp
-    %tmp1 = load i32, i32* %tmp
+    store i32 0, ptr %tmp
+    %tmp1 = load i32, ptr %tmp
     ret i32 %tmp1
 }
 
@@ -90,8 +90,8 @@ define i32 @test3_nofpelim() "frame-pointer"="all" {
     %retval = alloca i32, align 4
     %tmp = alloca i32, align 4
     %a = alloca [805306369 x i8], align 8
-    store i32 0, i32* %tmp
-    %tmp1 = load i32, i32* %tmp
+    store i32 0, ptr %tmp
+    %tmp1 = load i32, ptr %tmp
     ret i32 %tmp1
 }
 
@@ -104,8 +104,8 @@ define i32 @test3_nofpelim() "frame-pointer"="all" {
 define i32 @test4() {
 entry:
   %stack_a = alloca i8, align 1
-  %stack_b = alloca [256 x i32*], align 4
-  %int = ptrtoint i8* %stack_a to i32
+  %stack_b = alloca [256 x ptr], align 4
+  %int = ptrtoint ptr %stack_a to i32
   %add = add i32 %int, 1
   br label %block2
 

diff  --git a/llvm/test/CodeGen/Thumb/ldm-merge-call.ll b/llvm/test/CodeGen/Thumb/ldm-merge-call.ll
index c329f872c215e..700b2079a2a86 100644
--- a/llvm/test/CodeGen/Thumb/ldm-merge-call.ll
+++ b/llvm/test/CodeGen/Thumb/ldm-merge-call.ll
@@ -3,14 +3,14 @@ target datalayout = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-v128:64:128-
 target triple = "thumbv6m--linux-gnueabi"
 
 ; Function Attrs: nounwind optsize
-define void @foo(i32* nocapture readonly %A) #0 {
+define void @foo(ptr nocapture readonly %A) #0 {
 entry:
 ; CHECK-LABEL: foo:
 ; CHECK: ldm r[[BASE:[0-9]]]!,
 ; CHECK-NEXT: mov r[[BASE]],
-  %0 = load i32, i32* %A, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %A, i32 1
-  %1 = load i32, i32* %arrayidx1, align 4
+  %0 = load i32, ptr %A, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %A, i32 1
+  %1 = load i32, ptr %arrayidx1, align 4
   %call = tail call i32 @bar(i32 %0, i32 %1, i32 %0, i32 %1) #2
   %call2 = tail call i32 @bar(i32 %0, i32 %1, i32 %0, i32 %1) #2
   ret void

diff  --git a/llvm/test/CodeGen/Thumb/ldm-merge-struct.ll b/llvm/test/CodeGen/Thumb/ldm-merge-struct.ll
index 707236803fb31..4cabac283186a 100644
--- a/llvm/test/CodeGen/Thumb/ldm-merge-struct.ll
+++ b/llvm/test/CodeGen/Thumb/ldm-merge-struct.ll
@@ -11,8 +11,8 @@ entry:
 ; CHECK-LABEL: f:
 ; CHECK: ldm r[[BASE:[0-9]]],
 ; CHECK-NOT: subs r[[BASE]]
-  %0 = load i32, i32* getelementptr inbounds (%struct.S, %struct.S* @s, i32 0, i32 0), align 4
-  %1 = load i32, i32* getelementptr inbounds (%struct.S, %struct.S* @s, i32 0, i32 1), align 4
+  %0 = load i32, ptr @s, align 4
+  %1 = load i32, ptr getelementptr inbounds (%struct.S, ptr @s, i32 0, i32 1), align 4
   %cmp = icmp sgt i32 %0, %1
   %2 = sub i32 0, %1
   %cond.p = select i1 %cmp, i32 %1, i32 %2

diff  --git a/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization-thumb2.ll b/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization-thumb2.ll
index 170739418780b..3bd0a04961b29 100644
--- a/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization-thumb2.ll
+++ b/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization-thumb2.ll
@@ -2,27 +2,25 @@
 
 target triple = "thumbv7a-none--eabi"
 
- at a = external global i32*
- at b = external global i32*
+ at a = external global ptr
+ at b = external global ptr
 
 ; Function Attrs: nounwind
 define void @foo24() #0 {
 entry:
 ; CHECK-LABEL: foo24:
-; We use '[rl0-9]*' to allow 'r0'..'r12', 'lr'
+; We use 'ptr' to allow 'r0'..'r12', 'lr'
 ; CHECK: movt [[LB:[rl0-9]+]], :upper16:b
 ; CHECK: movt [[SB:[rl0-9]+]], :upper16:a
 ; CHECK: add{{s?}}{{(\.w)?}} [[NLB:[rl0-9]+]], [[LB]], #4
 ; CHECK: adds [[SB]], #4
 ; CHECK-NEXT: ldm{{(\.w)?}} [[NLB]], {[[R1:[rl0-9]+]], [[R2:[rl0-9]+]], [[R3:[rl0-9]+]], [[R4:[rl0-9]+]], [[R5:[rl0-9]+]], [[R6:[rl0-9]+]]}
 ; CHECK-NEXT: stm{{(\.w)?}} [[SB]], {[[R1]], [[R2]], [[R3]], [[R4]], [[R5]], [[R6]]}
-  %0 = load i32*, i32** @a, align 4
-  %arrayidx = getelementptr inbounds i32, i32* %0, i32 1
-  %1 = bitcast i32* %arrayidx to i8*
-  %2 = load i32*, i32** @b, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
-  %3 = bitcast i32* %arrayidx1 to i8*
-  tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %1, i8* align 4 %3, i32 24, i1 false)
+  %0 = load ptr, ptr @a, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %0, i32 1
+  %1 = load ptr, ptr @b, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %1, i32 1
+  tail call void @llvm.memcpy.p0.p0.i32(ptr align 4 %arrayidx, ptr align 4 %arrayidx1, i32 24, i1 false)
   ret void
 }
 
@@ -37,13 +35,11 @@ entry:
 ; CHECK-NEXT: stm{{(\.w)?}} [[SB]]!, {[[R1]], [[R2]], [[R3]]}
 ; CHECK-NEXT: ldm{{(\.w)?}} [[NLB]], {[[R1:[rl0-9]+]], [[R2:[rl0-9]+]], [[R3:[rl0-9]+]], [[R4:[rl0-9]+]]}
 ; CHECK-NEXT: stm{{(\.w)?}} [[SB]], {[[R1]], [[R2]], [[R3]], [[R4]]}
-  %0 = load i32*, i32** @a, align 4
-  %arrayidx = getelementptr inbounds i32, i32* %0, i32 1
-  %1 = bitcast i32* %arrayidx to i8*
-  %2 = load i32*, i32** @b, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
-  %3 = bitcast i32* %arrayidx1 to i8*
-  tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %1, i8* align 4 %3, i32 28, i1 false)
+  %0 = load ptr, ptr @a, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %0, i32 1
+  %1 = load ptr, ptr @b, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %1, i32 1
+  tail call void @llvm.memcpy.p0.p0.i32(ptr align 4 %arrayidx, ptr align 4 %arrayidx1, i32 28, i1 false)
   ret void
 }
 
@@ -58,13 +54,11 @@ entry:
 ; CHECK-NEXT: stm{{(\.w)?}} [[SB]]!, {[[R1]], [[R2]], [[R3]], [[R4]]}
 ; CHECK-NEXT: ldm{{(\.w)?}} [[NLB]], {[[R1:[rl0-9]+]], [[R2:[rl0-9]+]], [[R3:[rl0-9]+]], [[R4:[rl0-9]+]]}
 ; CHECK-NEXT: stm{{(\.w)?}} [[SB]], {[[R1]], [[R2]], [[R3]], [[R4]]}
-  %0 = load i32*, i32** @a, align 4
-  %arrayidx = getelementptr inbounds i32, i32* %0, i32 1
-  %1 = bitcast i32* %arrayidx to i8*
-  %2 = load i32*, i32** @b, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
-  %3 = bitcast i32* %arrayidx1 to i8*
-  tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %1, i8* align 4 %3, i32 32, i1 false)
+  %0 = load ptr, ptr @a, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %0, i32 1
+  %1 = load ptr, ptr @b, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %1, i32 1
+  tail call void @llvm.memcpy.p0.p0.i32(ptr align 4 %arrayidx, ptr align 4 %arrayidx1, i32 32, i1 false)
   ret void
 }
 
@@ -79,15 +73,13 @@ entry:
 ; CHECK-NEXT: stm{{(\.w)?}} [[SB]]!, {[[R1]], [[R2]], [[R3]], [[R4]]}
 ; CHECK-NEXT: ldm{{(\.w)?}} [[NLB]], {[[R1:[rl0-9]+]], [[R2:[rl0-9]+]], [[R3:[rl0-9]+]], [[R4:[rl0-9]+]], [[R5:[rl0-9]+]]}
 ; CHECK-NEXT: stm{{(\.w)?}} [[SB]], {[[R1]], [[R2]], [[R3]], [[R4]], [[R5]]}
-  %0 = load i32*, i32** @a, align 4
-  %arrayidx = getelementptr inbounds i32, i32* %0, i32 1
-  %1 = bitcast i32* %arrayidx to i8*
-  %2 = load i32*, i32** @b, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
-  %3 = bitcast i32* %arrayidx1 to i8*
-  tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %1, i8* align 4 %3, i32 36, i1 false)
+  %0 = load ptr, ptr @a, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %0, i32 1
+  %1 = load ptr, ptr @b, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %1, i32 1
+  tail call void @llvm.memcpy.p0.p0.i32(ptr align 4 %arrayidx, ptr align 4 %arrayidx1, i32 36, i1 false)
   ret void
 }
 
 ; Function Attrs: nounwind
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i1) #1
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture readonly, i32, i1) #1

diff  --git a/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization.ll b/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization.ll
index 355fe804ebcb7..7bd78845a8127 100644
--- a/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization.ll
+++ b/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization.ll
@@ -2,8 +2,8 @@
 target datalayout = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-v128:64:128-a:0:32-n32-S64"
 target triple = "thumbv6m-none--eabi"
 
- at a = external global i32*
- at b = external global i32*
+ at a = external global ptr
+ at b = external global ptr
 
 ; Function Attrs: nounwind
 define void @foo24() #0 {
@@ -17,13 +17,11 @@ entry:
 ; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]]}
 ; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]]}
 ; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]]}
-  %0 = load i32*, i32** @a, align 4
-  %arrayidx = getelementptr inbounds i32, i32* %0, i32 1
-  %1 = bitcast i32* %arrayidx to i8*
-  %2 = load i32*, i32** @b, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
-  %3 = bitcast i32* %arrayidx1 to i8*
-  tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %1, i8* align 4 %3, i32 24, i1 false)
+  %0 = load ptr, ptr @a, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %0, i32 1
+  %1 = load ptr, ptr @b, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %1, i32 1
+  tail call void @llvm.memcpy.p0.p0.i32(ptr align 4 %arrayidx, ptr align 4 %arrayidx1, i32 24, i1 false)
   ret void
 }
 
@@ -38,13 +36,11 @@ entry:
 ; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]]}
 ; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]], r[[R4:[0-9]]]}
 ; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]], r[[R4]]}
-  %0 = load i32*, i32** @a, align 4
-  %arrayidx = getelementptr inbounds i32, i32* %0, i32 1
-  %1 = bitcast i32* %arrayidx to i8*
-  %2 = load i32*, i32** @b, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
-  %3 = bitcast i32* %arrayidx1 to i8*
-  tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %1, i8* align 4 %3, i32 28, i1 false)
+  %0 = load ptr, ptr @a, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %0, i32 1
+  %1 = load ptr, ptr @b, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %1, i32 1
+  tail call void @llvm.memcpy.p0.p0.i32(ptr align 4 %arrayidx, ptr align 4 %arrayidx1, i32 28, i1 false)
   ret void
 }
 
@@ -59,13 +55,11 @@ entry:
 ; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]], r[[R4]]}
 ; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]], r[[R4:[0-9]]]}
 ; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]], r[[R4]]}
-  %0 = load i32*, i32** @a, align 4
-  %arrayidx = getelementptr inbounds i32, i32* %0, i32 1
-  %1 = bitcast i32* %arrayidx to i8*
-  %2 = load i32*, i32** @b, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
-  %3 = bitcast i32* %arrayidx1 to i8*
-  tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %1, i8* align 4 %3, i32 32, i1 false)
+  %0 = load ptr, ptr @a, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %0, i32 1
+  %1 = load ptr, ptr @b, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %1, i32 1
+  tail call void @llvm.memcpy.p0.p0.i32(ptr align 4 %arrayidx, ptr align 4 %arrayidx1, i32 32, i1 false)
   ret void
 }
 
@@ -82,15 +76,13 @@ entry:
 ; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]]}
 ; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]]}
 ; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]]}
-  %0 = load i32*, i32** @a, align 4
-  %arrayidx = getelementptr inbounds i32, i32* %0, i32 1
-  %1 = bitcast i32* %arrayidx to i8*
-  %2 = load i32*, i32** @b, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
-  %3 = bitcast i32* %arrayidx1 to i8*
-  tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %1, i8* align 4 %3, i32 36, i1 false)
+  %0 = load ptr, ptr @a, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %0, i32 1
+  %1 = load ptr, ptr @b, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %1, i32 1
+  tail call void @llvm.memcpy.p0.p0.i32(ptr align 4 %arrayidx, ptr align 4 %arrayidx1, i32 36, i1 false)
   ret void
 }
 
 ; Function Attrs: nounwind
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i1) #1
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture readonly, i32, i1) #1

diff  --git a/llvm/test/CodeGen/Thumb/ldm-stm-postinc.ll b/llvm/test/CodeGen/Thumb/ldm-stm-postinc.ll
index 7c223370e44a3..ad4b8b61f8af3 100644
--- a/llvm/test/CodeGen/Thumb/ldm-stm-postinc.ll
+++ b/llvm/test/CodeGen/Thumb/ldm-stm-postinc.ll
@@ -4,17 +4,17 @@
 
 ; CHECK-LABEL: @f
 ; CHECK: ldm {{r[0-9]}}!, {r{{[0-9]}}}
-define i32 @f(i32* readonly %a, i32* readnone %b) {
-  %1 = icmp eq i32* %a, %b
+define i32 @f(ptr readonly %a, ptr readnone %b) {
+  %1 = icmp eq ptr %a, %b
   br i1 %1, label %._crit_edge, label %.lr.ph
 
 .lr.ph:                                           ; preds = %.lr.ph, %0
   %i.02 = phi i32 [ %3, %.lr.ph ], [ 0, %0 ]
-  %.01 = phi i32* [ %4, %.lr.ph ], [ %a, %0 ]
-  %2 = load i32, i32* %.01, align 4
+  %.01 = phi ptr [ %4, %.lr.ph ], [ %a, %0 ]
+  %2 = load i32, ptr %.01, align 4
   %3 = add nsw i32 %2, %i.02
-  %4 = getelementptr inbounds i32, i32* %.01, i32 1
-  %5 = icmp eq i32* %4, %b
+  %4 = getelementptr inbounds i32, ptr %.01, i32 1
+  %5 = icmp eq ptr %4, %b
   br i1 %5, label %._crit_edge, label %.lr.ph
 
 ._crit_edge:                                      ; preds = %.lr.ph, %0
@@ -24,17 +24,17 @@ define i32 @f(i32* readonly %a, i32* readnone %b) {
 
 ; CHECK-LABEL: @g
 ; CHECK-NOT: ldm
-define i32 @g(i32* readonly %a, i32* readnone %b) {
-  %1 = icmp eq i32* %a, %b
+define i32 @g(ptr readonly %a, ptr readnone %b) {
+  %1 = icmp eq ptr %a, %b
   br i1 %1, label %._crit_edge, label %.lr.ph
 
 .lr.ph:                                           ; preds = %.lr.ph, %0
   %i.02 = phi i32 [ %3, %.lr.ph ], [ 0, %0 ]
-  %.01 = phi i32* [ %4, %.lr.ph ], [ %a, %0 ]
-  %2 = load i32, i32* %.01, align 4
+  %.01 = phi ptr [ %4, %.lr.ph ], [ %a, %0 ]
+  %2 = load i32, ptr %.01, align 4
   %3 = add nsw i32 %2, %i.02
-  %4 = getelementptr inbounds i32, i32* %.01, i32 2
-  %5 = icmp eq i32* %4, %b
+  %4 = getelementptr inbounds i32, ptr %.01, i32 2
+  %5 = icmp eq ptr %4, %b
   br i1 %5, label %._crit_edge, label %.lr.ph
 
 ._crit_edge:                                      ; preds = %.lr.ph, %0
@@ -44,17 +44,17 @@ define i32 @g(i32* readonly %a, i32* readnone %b) {
 
 ; CHECK-LABEL: @h
 ; CHECK: stm {{r[0-9]}}!, {r{{[0-9]}}}
-define void @h(i32* %a, i32* readnone %b) {
-  %1 = icmp eq i32* %a, %b
+define void @h(ptr %a, ptr readnone %b) {
+  %1 = icmp eq ptr %a, %b
   br i1 %1, label %._crit_edge, label %.lr.ph
 
 .lr.ph:                                           ; preds = %.lr.ph, %0
   %i.02 = phi i32 [ %2, %.lr.ph ], [ 0, %0 ]
-  %.01 = phi i32* [ %3, %.lr.ph ], [ %a, %0 ]
+  %.01 = phi ptr [ %3, %.lr.ph ], [ %a, %0 ]
   %2 = add nsw i32 %i.02, 1
-  store i32 %i.02, i32* %.01, align 4
-  %3 = getelementptr inbounds i32, i32* %.01, i32 1
-  %4 = icmp eq i32* %3, %b
+  store i32 %i.02, ptr %.01, align 4
+  %3 = getelementptr inbounds i32, ptr %.01, i32 1
+  %4 = icmp eq ptr %3, %b
   br i1 %4, label %._crit_edge, label %.lr.ph
 
 ._crit_edge:                                      ; preds = %.lr.ph, %0
@@ -63,17 +63,17 @@ define void @h(i32* %a, i32* readnone %b) {
 
 ; CHECK-LABEL: @j
 ; CHECK-NOT: stm
-define void @j(i32* %a, i32* readnone %b) {
-  %1 = icmp eq i32* %a, %b
+define void @j(ptr %a, ptr readnone %b) {
+  %1 = icmp eq ptr %a, %b
   br i1 %1, label %._crit_edge, label %.lr.ph
 
 .lr.ph:                                           ; preds = %.lr.ph, %0
   %i.02 = phi i32 [ %2, %.lr.ph ], [ 0, %0 ]
-  %.01 = phi i32* [ %3, %.lr.ph ], [ %a, %0 ]
+  %.01 = phi ptr [ %3, %.lr.ph ], [ %a, %0 ]
   %2 = add nsw i32 %i.02, 1
-  store i32 %i.02, i32* %.01, align 4
-  %3 = getelementptr inbounds i32, i32* %.01, i32 2
-  %4 = icmp eq i32* %3, %b
+  store i32 %i.02, ptr %.01, align 4
+  %3 = getelementptr inbounds i32, ptr %.01, i32 2
+  %4 = icmp eq ptr %3, %b
   br i1 %4, label %._crit_edge, label %.lr.ph
 
 ._crit_edge:                                      ; preds = %.lr.ph, %0
@@ -83,17 +83,17 @@ define void @j(i32* %a, i32* readnone %b) {
 ; Make sure we don't transform str->stm when unaligned loads are allowed.
 ; CHECK-LABEL: @nostrictalign
 ; CHECK: str r2, [r0]
-define void @nostrictalign(i32* %a, i32* readnone %b) "target-features"="-strict-align" {
-  %1 = icmp eq i32* %a, %b
+define void @nostrictalign(ptr %a, ptr readnone %b) "target-features"="-strict-align" {
+  %1 = icmp eq ptr %a, %b
   br i1 %1, label %._crit_edge, label %.lr.ph
 
 .lr.ph:                                           ; preds = %.lr.ph, %0
   %i.02 = phi i32 [ %2, %.lr.ph ], [ 0, %0 ]
-  %.01 = phi i32* [ %3, %.lr.ph ], [ %a, %0 ]
+  %.01 = phi ptr [ %3, %.lr.ph ], [ %a, %0 ]
   %2 = add nsw i32 %i.02, 1
-  store i32 %i.02, i32* %.01, align 1
-  %3 = getelementptr inbounds i32, i32* %.01, i32 1
-  %4 = icmp eq i32* %3, %b
+  store i32 %i.02, ptr %.01, align 1
+  %3 = getelementptr inbounds i32, ptr %.01, i32 1
+  %4 = icmp eq ptr %3, %b
   br i1 %4, label %._crit_edge, label %.lr.ph
 
 ._crit_edge:                                      ; preds = %.lr.ph, %0

diff  --git a/llvm/test/CodeGen/Thumb/ldr_ext.ll b/llvm/test/CodeGen/Thumb/ldr_ext.ll
index 314c176bd3468..af83e90d99f77 100644
--- a/llvm/test/CodeGen/Thumb/ldr_ext.ll
+++ b/llvm/test/CodeGen/Thumb/ldr_ext.ll
@@ -3,44 +3,44 @@
 
 ; rdar://7176514
 
-define i32 @test1(i8* %t1) nounwind {
+define i32 @test1(ptr %t1) nounwind {
 ; V5: ldrb
 
 ; V6: ldrb
-    %tmp.u = load i8, i8* %t1
+    %tmp.u = load i8, ptr %t1
     %tmp1.s = zext i8 %tmp.u to i32
     ret i32 %tmp1.s
 }
 
-define i32 @test2(i16* %t1) nounwind {
+define i32 @test2(ptr %t1) nounwind {
 ; V5: ldrh
 
 ; V6: ldrh
-    %tmp.u = load i16, i16* %t1
+    %tmp.u = load i16, ptr %t1
     %tmp1.s = zext i16 %tmp.u to i32
     ret i32 %tmp1.s
 }
 
-define i32 @test3(i8* %t0) nounwind {
+define i32 @test3(ptr %t0) nounwind {
 ; V5: ldrb
 ; V5: lsls
 ; V5: asrs
 
 ; V6: mov
 ; V6: ldrsb
-    %tmp.s = load i8, i8* %t0
+    %tmp.s = load i8, ptr %t0
     %tmp1.s = sext i8 %tmp.s to i32
     ret i32 %tmp1.s
 }
 
-define i32 @test4(i16* %t0) nounwind {
+define i32 @test4(ptr %t0) nounwind {
 ; V5: ldrh
 ; V5: lsls
 ; V5: asrs
 
 ; V6: mov
 ; V6: ldrsh
-    %tmp.s = load i16, i16* %t0
+    %tmp.s = load i16, ptr %t0
     %tmp1.s = sext i16 %tmp.s to i32
     ret i32 %tmp1.s
 }
@@ -51,7 +51,7 @@ define i32 @test5() nounwind {
 
 ; V6: movs r0, #0
 ; V6: ldrsh
-    %tmp.s = load i16, i16* null
+    %tmp.s = load i16, ptr null
     %tmp1.s = sext i16 %tmp.s to i32
     ret i32 %tmp1.s
 }

diff  --git a/llvm/test/CodeGen/Thumb/ldr_frame.ll b/llvm/test/CodeGen/Thumb/ldr_frame.ll
index fdcf3b7678e5a..2ca57c536d9f7 100644
--- a/llvm/test/CodeGen/Thumb/ldr_frame.ll
+++ b/llvm/test/CodeGen/Thumb/ldr_frame.ll
@@ -4,8 +4,7 @@ define i32 @f1() {
 ; CHECK-LABEL: f1:
 ; CHECK: ldr r0
 	%buf = alloca [32 x i32], align 4
-	%tmp = getelementptr [32 x i32], [32 x i32]* %buf, i32 0, i32 0
-	%tmp1 = load i32, i32* %tmp
+	%tmp1 = load i32, ptr %buf
 	ret i32 %tmp1
 }
 
@@ -14,8 +13,7 @@ define i32 @f2() {
 ; CHECK: mov r0
 ; CHECK: ldrb
 	%buf = alloca [32 x i8], align 4
-	%tmp = getelementptr [32 x i8], [32 x i8]* %buf, i32 0, i32 0
-	%tmp1 = load i8, i8* %tmp
+	%tmp1 = load i8, ptr %buf
         %tmp2 = zext i8 %tmp1 to i32
 	ret i32 %tmp2
 }
@@ -24,8 +22,8 @@ define i32 @f3() {
 ; CHECK-LABEL: f3:
 ; CHECK: ldr r0
 	%buf = alloca [32 x i32], align 4
-	%tmp = getelementptr [32 x i32], [32 x i32]* %buf, i32 0, i32 32
-	%tmp1 = load i32, i32* %tmp
+	%tmp = getelementptr [32 x i32], ptr %buf, i32 0, i32 32
+	%tmp1 = load i32, ptr %tmp
 	ret i32 %tmp1
 }
 
@@ -34,8 +32,8 @@ define i32 @f4() {
 ; CHECK: mov r0
 ; CHECK: ldrb
 	%buf = alloca [32 x i8], align 4
-	%tmp = getelementptr [32 x i8], [32 x i8]* %buf, i32 0, i32 2
-	%tmp1 = load i8, i8* %tmp
+	%tmp = getelementptr [32 x i8], ptr %buf, i32 0, i32 2
+	%tmp1 = load i8, ptr %tmp
         %tmp2 = zext i8 %tmp1 to i32
 	ret i32 %tmp2
 }

diff  --git a/llvm/test/CodeGen/Thumb/long.ll b/llvm/test/CodeGen/Thumb/long.ll
index fbf4b08fd06af..e2559d407e000 100644
--- a/llvm/test/CodeGen/Thumb/long.ll
+++ b/llvm/test/CodeGen/Thumb/long.ll
@@ -169,8 +169,8 @@ entry:
 
 define i64 @f10() {
 entry:
-        %a = alloca i64, align 8                ; <i64*> [#uses=1]
-        %retval = load i64, i64* %a          ; <i64> [#uses=1]
+        %a = alloca i64, align 8                ; <ptr> [#uses=1]
+        %retval = load i64, ptr %a          ; <i64> [#uses=1]
         ret i64 %retval
 ; CHECK-LABEL: f10:
 ; CHECK-EABI: sub sp, #8

diff  --git a/llvm/test/CodeGen/Thumb/mvn.ll b/llvm/test/CodeGen/Thumb/mvn.ll
index a108bfd124f85..a3656358beb8f 100644
--- a/llvm/test/CodeGen/Thumb/mvn.ll
+++ b/llvm/test/CodeGen/Thumb/mvn.ll
@@ -1,19 +1,19 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc -mtriple=thumbv6m-eabi -asm-verbose=false %s -o - | FileCheck %s
 
-define void @test8(i8* %a) {
+define void @test8(ptr %a) {
 ; CHECK-LABEL: test8:
 ; CHECK:         ldrb r1, [r0]
 ; CHECK-NEXT:    mvns r1, r1
 ; CHECK-NEXT:    strb r1, [r0]
 ; CHECK-NEXT:    bx lr
-  %x = load i8, i8* %a
+  %x = load i8, ptr %a
   %xn = xor i8 %x, -1
-  store i8 %xn, i8* %a
+  store i8 %xn, ptr %a
   ret void
 }
 
-define void @test8_2(i8* %a, i8* %b) {
+define void @test8_2(ptr %a, ptr %b) {
 ; CHECK-LABEL: test8_2:
 ; CHECK:         ldrb r2, [r1]
 ; CHECK-NEXT:    ldrb r3, [r0]
@@ -22,16 +22,16 @@ define void @test8_2(i8* %a, i8* %b) {
 ; CHECK-NEXT:    mvns r0, r2
 ; CHECK-NEXT:    strb r0, [r1]
 ; CHECK-NEXT:    bx lr
-  %x = load i8, i8* %a
-  %y = load i8, i8* %b
+  %x = load i8, ptr %a
+  %y = load i8, ptr %b
   %xn = xor i8 %x, -1
   %yn = xor i8 %y, -1
-  store i8 %xn, i8* %a
-  store i8 %yn, i8* %b
+  store i8 %xn, ptr %a
+  store i8 %yn, ptr %b
   ret void
 }
 
-define void @loop8(i8* %a) {
+define void @loop8(ptr %a) {
 ; CHECK-LABEL: loop8:
 ; CHECK:         movs r1, #0
 ; CHECK-NEXT:  .LBB2_1:
@@ -47,10 +47,10 @@ entry:
 
 for.body:
   %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %arrayidx = getelementptr inbounds i8, i8* %a, i32 %i
-  %x = load i8, i8* %arrayidx
+  %arrayidx = getelementptr inbounds i8, ptr %a, i32 %i
+  %x = load i8, ptr %arrayidx
   %xn = xor i8 %x, -1
-  store i8 %xn, i8* %arrayidx
+  store i8 %xn, ptr %arrayidx
   %inc = add nuw nsw i32 %i, 1
   %exitcond = icmp eq i32 %inc, 10
   br i1 %exitcond, label %for.cond.cleanup, label %for.body
@@ -59,7 +59,7 @@ for.cond.cleanup:
   ret void
 }
 
-define void @loop8_2(i8* %a, i8* %b) {
+define void @loop8_2(ptr %a, ptr %b) {
 ; CHECK-LABEL: loop8_2:
 ; CHECK:         .save {r4, lr}
 ; CHECK-NEXT:    push {r4, lr}
@@ -80,14 +80,14 @@ entry:
 
 for.body:
   %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %arrayidx = getelementptr inbounds i8, i8* %a, i32 %i
-  %arrayidx2 = getelementptr inbounds i8, i8* %b, i32 %i
-  %x = load i8, i8* %arrayidx
-  %y = load i8, i8* %arrayidx2
+  %arrayidx = getelementptr inbounds i8, ptr %a, i32 %i
+  %arrayidx2 = getelementptr inbounds i8, ptr %b, i32 %i
+  %x = load i8, ptr %arrayidx
+  %y = load i8, ptr %arrayidx2
   %xn = xor i8 %x, -1
   %yn = xor i8 %y, -1
-  store i8 %xn, i8* %arrayidx
-  store i8 %yn, i8* %arrayidx2
+  store i8 %xn, ptr %arrayidx
+  store i8 %yn, ptr %arrayidx2
   %inc = add nuw nsw i32 %i, 1
   %exitcond = icmp eq i32 %inc, 10
   br i1 %exitcond, label %for.cond.cleanup, label %for.body
@@ -96,19 +96,19 @@ for.cond.cleanup:
   ret void
 }
 
-define void @test32(i32* %a) {
+define void @test32(ptr %a) {
 ; CHECK-LABEL: test32:
 ; CHECK:         ldr r1, [r0]
 ; CHECK-NEXT:    mvns r1, r1
 ; CHECK-NEXT:    str r1, [r0]
 ; CHECK-NEXT:    bx lr
-  %x = load i32, i32* %a
+  %x = load i32, ptr %a
   %xn = xor i32 %x, -1
-  store i32 %xn, i32* %a
+  store i32 %xn, ptr %a
   ret void
 }
 
-define void @test32_2(i32* %a, i32* %b) {
+define void @test32_2(ptr %a, ptr %b) {
 ; CHECK-LABEL: test32_2:
 ; CHECK:         ldr r2, [r1]
 ; CHECK-NEXT:    ldr r3, [r0]
@@ -117,16 +117,16 @@ define void @test32_2(i32* %a, i32* %b) {
 ; CHECK-NEXT:    mvns r0, r2
 ; CHECK-NEXT:    str r0, [r1]
 ; CHECK-NEXT:    bx lr
-  %x = load i32, i32* %a
-  %y = load i32, i32* %b
+  %x = load i32, ptr %a
+  %y = load i32, ptr %b
   %xn = xor i32 %x, -1
   %yn = xor i32 %y, -1
-  store i32 %xn, i32* %a
-  store i32 %yn, i32* %b
+  store i32 %xn, ptr %a
+  store i32 %yn, ptr %b
   ret void
 }
 
-define void @loop32(i32* %a) {
+define void @loop32(ptr %a) {
 ; CHECK-LABEL: loop32:
 ; CHECK:         movs r1, #0
 ; CHECK-NEXT:  .LBB6_1:
@@ -142,10 +142,10 @@ entry:
 
 for.body:
   %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %arrayidx = getelementptr inbounds i32, i32* %a, i32 %i
-  %x = load i32, i32* %arrayidx
+  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i
+  %x = load i32, ptr %arrayidx
   %xn = xor i32 %x, -1
-  store i32 %xn, i32* %arrayidx
+  store i32 %xn, ptr %arrayidx
   %inc = add nuw nsw i32 %i, 1
   %exitcond = icmp eq i32 %inc, 10
   br i1 %exitcond, label %for.cond.cleanup, label %for.body
@@ -154,7 +154,7 @@ for.cond.cleanup:
   ret void
 }
 
-define void @loop32_2(i32* %a, i32* %b) {
+define void @loop32_2(ptr %a, ptr %b) {
 ; CHECK-LABEL: loop32_2:
 ; CHECK:         .save {r4, lr}
 ; CHECK-NEXT:    push {r4, lr}
@@ -175,14 +175,14 @@ entry:
 
 for.body:
   %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %arrayidx = getelementptr inbounds i32, i32* %a, i32 %i
-  %arrayidx2 = getelementptr inbounds i32, i32* %b, i32 %i
-  %x = load i32, i32* %arrayidx
-  %y = load i32, i32* %arrayidx2
+  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i
+  %arrayidx2 = getelementptr inbounds i32, ptr %b, i32 %i
+  %x = load i32, ptr %arrayidx
+  %y = load i32, ptr %arrayidx2
   %xn = xor i32 %x, -1
   %yn = xor i32 %y, -1
-  store i32 %xn, i32* %arrayidx
-  store i32 %yn, i32* %arrayidx2
+  store i32 %xn, ptr %arrayidx
+  store i32 %yn, ptr %arrayidx2
   %inc = add nuw nsw i32 %i, 1
   %exitcond = icmp eq i32 %inc, 10
   br i1 %exitcond, label %for.cond.cleanup, label %for.body
@@ -192,7 +192,7 @@ for.cond.cleanup:
 }
 
 
-define void @test128(i128* %a) {
+define void @test128(ptr %a) {
 ; CHECK-LABEL: test128:
 ; CHECK:         ldr r1, [r0, #8]
 ; CHECK-NEXT:    ldr r2, .LCPI8_0
@@ -214,9 +214,9 @@ define void @test128(i128* %a) {
 ; CHECK-NEXT:    .long 2080661269
 ; CHECK-NEXT:  .LCPI8_2:
 ; CHECK-NEXT:    .long 4075008415
-  %x = load i128, i128* %a
+  %x = load i128, ptr %a
   %xn = xor i128 %x, 123456789123456789123456789
-  store i128 %xn, i128* %a
+  store i128 %xn, ptr %a
   ret void
 }
 

diff  --git a/llvm/test/CodeGen/Thumb/pop.ll b/llvm/test/CodeGen/Thumb/pop.ll
index 851f793e5ee07..3d5e28babaa79 100644
--- a/llvm/test/CodeGen/Thumb/pop.ll
+++ b/llvm/test/CodeGen/Thumb/pop.ll
@@ -1,15 +1,15 @@
 ; RUN: llc < %s -mtriple=thumb-apple-darwin | FileCheck %s
 ; rdar://7268481
 
-define void @t(i8* %a, ...) nounwind {
+define void @t(ptr %a, ...) nounwind {
 ; CHECK-LABEL:      t:
 ; CHECK:      pop {[[POP_REG:r[0-3]]]}
 ; CHECK-NEXT: add sp, #12
 ; CHECK-NEXT: bx [[POP_REG]]
 entry:
   %a.addr = alloca i8, i32 4
-  call void @llvm.va_start(i8* %a.addr)
+  call void @llvm.va_start(ptr %a.addr)
   ret void
 }
 
-declare void @llvm.va_start(i8*) nounwind
+declare void @llvm.va_start(ptr) nounwind

diff  --git a/llvm/test/CodeGen/Thumb/pr35836.ll b/llvm/test/CodeGen/Thumb/pr35836.ll
index 743c73c799d3a..96a6fe5d14202 100644
--- a/llvm/test/CodeGen/Thumb/pr35836.ll
+++ b/llvm/test/CodeGen/Thumb/pr35836.ll
@@ -4,7 +4,7 @@ target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
 target triple = "thumbv5e-none-linux-gnueabi"
 
 ; Function Attrs: norecurse nounwind optsize
-define void @f(i32,i32,i32,i32,i32* %x4p, i32* %x5p, i32* %x6p) {
+define void @f(i32,i32,i32,i32,ptr %x4p, ptr %x5p, ptr %x6p) {
 if.end:
   br label %while.body
 
@@ -23,11 +23,11 @@ while.body:
   %add19 = add nuw nsw i64 %conv18, %conv16
   %add20 = add nuw nsw i64 %add19, %shr14
   %conv21 = trunc i64 %add20 to i32
-  store i32 %conv21, i32* %x6p, align 4
+  store i32 %conv21, ptr %x6p, align 4
   %shr23 = lshr i64 %add20, 32
-  %x4 = load i32, i32* %x4p, align 4
+  %x4 = load i32, ptr %x4p, align 4
   %conv25 = zext i32 %x4 to i64
-  %x5 = load i32, i32* %x5p, align 4
+  %x5 = load i32, ptr %x5p, align 4
   %conv27 = zext i32 %x5 to i64
   %add28 = add nuw nsw i64 %conv27, %conv25
   %add29 = add nuw nsw i64 %add28, %shr23

diff  --git a/llvm/test/CodeGen/Thumb/pr35836_2.ll b/llvm/test/CodeGen/Thumb/pr35836_2.ll
index d6fe2c53855c5..18f2dacc655ca 100644
--- a/llvm/test/CodeGen/Thumb/pr35836_2.ll
+++ b/llvm/test/CodeGen/Thumb/pr35836_2.ll
@@ -4,30 +4,30 @@ target datalayout = "e-m:e-p:64:64-i128:64-v128:64:128-a:0:64-n64-S64"
 target triple = "thumbv6---gnueabi"
 
 ; Function Attrs: norecurse nounwind readonly
-define i128 @a(i64* nocapture readonly %z) local_unnamed_addr #0 {
+define i128 @a(ptr nocapture readonly %z) local_unnamed_addr #0 {
 entry:
-  %0 = load i64, i64* %z, align 4
+  %0 = load i64, ptr %z, align 4
   %conv.i = zext i64 %0 to i128
-  %arrayidx1 = getelementptr inbounds i64, i64* %z, i64 2
-  %1 = load i64, i64* %arrayidx1, align 4
+  %arrayidx1 = getelementptr inbounds i64, ptr %z, i64 2
+  %1 = load i64, ptr %arrayidx1, align 4
   %conv.i38 = zext i64 %1 to i128
   %shl.i39 = shl nuw i128 %conv.i38, 64
   %or = or i128 %shl.i39, %conv.i
-  %arrayidx3 = getelementptr inbounds i64, i64* %z, i64 1
-  %2 = load i64, i64* %arrayidx3, align 4
+  %arrayidx3 = getelementptr inbounds i64, ptr %z, i64 1
+  %2 = load i64, ptr %arrayidx3, align 4
   %conv.i37 = zext i64 %2 to i128
-  %arrayidx5 = getelementptr inbounds i64, i64* %z, i64 3
-  %3 = load i64, i64* %arrayidx5, align 4
+  %arrayidx5 = getelementptr inbounds i64, ptr %z, i64 3
+  %3 = load i64, ptr %arrayidx5, align 4
   %conv.i35 = zext i64 %3 to i128
   %shl.i36 = shl nuw i128 %conv.i35, 64
   %or7 = or i128 %shl.i36, %conv.i37
-  %arrayidx10 = getelementptr inbounds i64, i64* %z, i64 4
-  %4 = load i64, i64* %arrayidx10, align 4
+  %arrayidx10 = getelementptr inbounds i64, ptr %z, i64 4
+  %4 = load i64, ptr %arrayidx10, align 4
   %conv.i64 = zext i64 %4 to i128
   %shl.i33 = shl nuw i128 %conv.i64, 64
   %or12 = or i128 %shl.i33, %conv.i
-  %arrayidx15 = getelementptr inbounds i64, i64* %z, i64 5
-  %5 = load i64, i64* %arrayidx15, align 4
+  %arrayidx15 = getelementptr inbounds i64, ptr %z, i64 5
+  %5 = load i64, ptr %arrayidx15, align 4
   %conv.i30 = zext i64 %5 to i128
   %shl.i = shl nuw i128 %conv.i30, 64
   %or17 = or i128 %shl.i, %conv.i37

diff  --git a/llvm/test/CodeGen/Thumb/ragreedy-implicit-def.ll b/llvm/test/CodeGen/Thumb/ragreedy-implicit-def.ll
index d16b25e1bf740..aa72fb3eb6a24 100644
--- a/llvm/test/CodeGen/Thumb/ragreedy-implicit-def.ll
+++ b/llvm/test/CodeGen/Thumb/ragreedy-implicit-def.ll
@@ -7,28 +7,27 @@
 ; CHECK: 6 regalloc - Number of spilled live ranges
 
 declare i32 @otherfn(i32)
-define void @fn(i32 %val, i32* %ptr) {
+define void @fn(i32 %val, ptr %ptr) {
 entry:
-  %gep1 = getelementptr i32, i32* %ptr, i32 0
-  %gep2 = getelementptr i32, i32* %ptr, i32 1
-  %gep3 = getelementptr i32, i32* %ptr, i32 2
-  %gep4 = getelementptr i32, i32* %ptr, i32 3
-  %gep5 = getelementptr i32, i32* %ptr, i32 4
-  %gep6 = getelementptr i32, i32* %ptr, i32 5
-  %gep7 = getelementptr i32, i32* %ptr, i32 6
-  %gep8 = getelementptr i32, i32* %ptr, i32 7
+  %gep2 = getelementptr i32, ptr %ptr, i32 1
+  %gep3 = getelementptr i32, ptr %ptr, i32 2
+  %gep4 = getelementptr i32, ptr %ptr, i32 3
+  %gep5 = getelementptr i32, ptr %ptr, i32 4
+  %gep6 = getelementptr i32, ptr %ptr, i32 5
+  %gep7 = getelementptr i32, ptr %ptr, i32 6
+  %gep8 = getelementptr i32, ptr %ptr, i32 7
   %cmp1 = icmp uge i32 %val, 3
   br i1 %cmp1, label %if, label %then
 
 if:
-  %val1 = load i32, i32* %gep1, align 4
-  %val2 = load i32, i32* %gep2, align 4
-  %val3 = load i32, i32* %gep3, align 4
-  %val4 = load i32, i32* %gep4, align 4
-  %val5 = load i32, i32* %gep5, align 4
-  %val6 = load i32, i32* %gep6, align 4
-  %val7 = load i32, i32* %gep7, align 4
-  %val8 = load i32, i32* %gep8, align 4
+  %val1 = load i32, ptr %ptr, align 4
+  %val2 = load i32, ptr %gep2, align 4
+  %val3 = load i32, ptr %gep3, align 4
+  %val4 = load i32, ptr %gep4, align 4
+  %val5 = load i32, ptr %gep5, align 4
+  %val6 = load i32, ptr %gep6, align 4
+  %val7 = load i32, ptr %gep7, align 4
+  %val8 = load i32, ptr %gep8, align 4
   br label %then
 
 then:
@@ -84,14 +83,14 @@ switchend:
   br i1 %cmp2, label %if2, label %end
 
 if2:
-  store i32 %phi1b, i32* %gep1, align 4
-  store i32 %phi2b, i32* %gep2, align 4
-  store i32 %phi3b, i32* %gep3, align 4
-  store i32 %phi4b, i32* %gep4, align 4
-  store i32 %phi5b, i32* %gep5, align 4
-  store i32 %phi6b, i32* %gep6, align 4
-  store i32 %phi7b, i32* %gep7, align 4
-  store i32 %phi8b, i32* %gep8, align 4
+  store i32 %phi1b, ptr %ptr, align 4
+  store i32 %phi2b, ptr %gep2, align 4
+  store i32 %phi3b, ptr %gep3, align 4
+  store i32 %phi4b, ptr %gep4, align 4
+  store i32 %phi5b, ptr %gep5, align 4
+  store i32 %phi6b, ptr %gep6, align 4
+  store i32 %phi7b, ptr %gep7, align 4
+  store i32 %phi8b, ptr %gep8, align 4
   br label %end
 
 end:

diff  --git a/llvm/test/CodeGen/Thumb/segmented-stacks-dynamic.ll b/llvm/test/CodeGen/Thumb/segmented-stacks-dynamic.ll
index 5d51f4052c1d6..4f8c39f6496b5 100644
--- a/llvm/test/CodeGen/Thumb/segmented-stacks-dynamic.ll
+++ b/llvm/test/CodeGen/Thumb/segmented-stacks-dynamic.ll
@@ -4,11 +4,11 @@
 ; RUN: llc < %s -mtriple=thumb-linux-androideabi -filetype=obj
 
 ; Just to prevent the alloca from being optimized away
-declare void @dummy_use(i32*, i32)
+declare void @dummy_use(ptr, i32)
 
 define i32 @test_basic(i32 %l) #0 {
         %mem = alloca i32, i32 %l
-        call void @dummy_use (i32* %mem, i32 %l)
+        call void @dummy_use (ptr %mem, i32 %l)
         %terminate = icmp eq i32 %l, 0
         br i1 %terminate, label %true, label %false
 

diff  --git a/llvm/test/CodeGen/Thumb/segmented-stacks.ll b/llvm/test/CodeGen/Thumb/segmented-stacks.ll
index daebafe2b482e..c3b66b3b91320 100644
--- a/llvm/test/CodeGen/Thumb/segmented-stacks.ll
+++ b/llvm/test/CodeGen/Thumb/segmented-stacks.ll
@@ -5,11 +5,11 @@
 
 
 ; Just to prevent the alloca from being optimized away
-declare void @dummy_use(i32*, i32)
+declare void @dummy_use(ptr, i32)
 
 define void @test_basic() #0 {
         %mem = alloca i32, i32 10
-        call void @dummy_use (i32* %mem, i32 10)
+        call void @dummy_use (ptr %mem, i32 10)
 	ret void
 
 ; Thumb-android-LABEL:      test_basic:
@@ -58,11 +58,11 @@ define void @test_basic() #0 {
 
 }
 
-define i32 @test_nested(i32 * nest %closure, i32 %other) #0 {
-       %addend = load i32 , i32 * %closure
+define i32 @test_nested(ptr nest %closure, i32 %other) #0 {
+       %addend = load i32 , ptr %closure
        %result = add i32 %other, %addend
        %mem = alloca i32, i32 10
-       call void @dummy_use (i32* %mem, i32 10)
+       call void @dummy_use (ptr %mem, i32 10)
        ret i32 %result
 
 ; Thumb-android-LABEL:      test_nested:
@@ -109,7 +109,7 @@ define i32 @test_nested(i32 * nest %closure, i32 %other) #0 {
 
 define void @test_large() #0 {
         %mem = alloca i32, i32 10000
-        call void @dummy_use (i32* %mem, i32 0)
+        call void @dummy_use (ptr %mem, i32 0)
         ret void
 
 ; Thumb-android-LABEL:      test_large:
@@ -163,7 +163,7 @@ define void @test_large() #0 {
 
 define fastcc void @test_fastcc() #0 {
         %mem = alloca i32, i32 10
-        call void @dummy_use (i32* %mem, i32 10)
+        call void @dummy_use (ptr %mem, i32 10)
         ret void
 
 ; Thumb-android-LABEL:      test_fastcc:
@@ -210,7 +210,7 @@ define fastcc void @test_fastcc() #0 {
 
 define fastcc void @test_fastcc_large() #0 {
         %mem = alloca i32, i32 10000
-        call void @dummy_use (i32* %mem, i32 0)
+        call void @dummy_use (ptr %mem, i32 0)
         ret void
 
 ; Thumb-android-LABEL:      test_fastcc_large:

diff  --git a/llvm/test/CodeGen/Thumb/shift-and.ll b/llvm/test/CodeGen/Thumb/shift-and.ll
index b8e3416adbb86..e5fee86343b0e 100644
--- a/llvm/test/CodeGen/Thumb/shift-and.ll
+++ b/llvm/test/CodeGen/Thumb/shift-and.ll
@@ -201,7 +201,7 @@ entry:
   ret i32 %shl
 }
 
-define i32* @test17(i32* %p, i32 %x) {
+define ptr @test17(ptr %p, i32 %x) {
 ; CHECK-LABEL: test17:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    lsls r1, r1, #28
@@ -210,11 +210,11 @@ define i32* @test17(i32* %p, i32 %x) {
 ; CHECK-NEXT:    bx lr
 entry:
   %0 = and i32 %x, 15
-  %shl = getelementptr i32, i32* %p, i32 %0
-  ret i32* %shl
+  %shl = getelementptr i32, ptr %p, i32 %0
+  ret ptr %shl
 }
 
-define i32* @test18(i32* %p, i32 %x) {
+define ptr @test18(ptr %p, i32 %x) {
 ; CHECK-LABEL: test18:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    adds r1, r1, #1
@@ -225,11 +225,11 @@ define i32* @test18(i32* %p, i32 %x) {
 entry:
   %xx = add i32 %x, 1
   %0 = and i32 %xx, 15
-  %shl = getelementptr i32, i32* %p, i32 %0
-  ret i32* %shl
+  %shl = getelementptr i32, ptr %p, i32 %0
+  ret ptr %shl
 }
 
-define i32* @test19(i32* %p, i32 %x) {
+define ptr @test19(ptr %p, i32 %x) {
 ; CHECK-LABEL: test19:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    subs r1, r1, #1
@@ -240,11 +240,11 @@ define i32* @test19(i32* %p, i32 %x) {
 entry:
   %xx = sub i32 %x, 1
   %0 = and i32 %xx, 15
-  %shl = getelementptr i32, i32* %p, i32 %0
-  ret i32* %shl
+  %shl = getelementptr i32, ptr %p, i32 %0
+  ret ptr %shl
 }
 
-define i32* @test20(i32* %p, i32 %x) {
+define ptr @test20(ptr %p, i32 %x) {
 ; CHECK-LABEL: test20:
 ; CHECK:       @ %bb.0: @ %entry
 ; CHECK-NEXT:    subs r1, r1, #1
@@ -255,6 +255,6 @@ define i32* @test20(i32* %p, i32 %x) {
 entry:
   %xx = add i32 %x, 15
   %0 = and i32 %xx, 15
-  %shl = getelementptr i32, i32* %p, i32 %0
-  ret i32* %shl
+  %shl = getelementptr i32, ptr %p, i32 %0
+  ret ptr %shl
 }

diff  --git a/llvm/test/CodeGen/Thumb/sjljehprepare-lower-vector.ll b/llvm/test/CodeGen/Thumb/sjljehprepare-lower-vector.ll
index 605fe4627c997..cfcc322403a9b 100644
--- a/llvm/test/CodeGen/Thumb/sjljehprepare-lower-vector.ll
+++ b/llvm/test/CodeGen/Thumb/sjljehprepare-lower-vector.ll
@@ -4,7 +4,7 @@
 target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
 target triple = "thumbv7-apple-ios"
 
-define i8* @foo(<4 x i32> %c) personality i8* bitcast (i32 (...)* @baz to i8*) {
+define ptr @foo(<4 x i32> %c) personality ptr @baz {
 entry:
   invoke void @bar ()
     to label %unreachable unwind label %handler
@@ -13,9 +13,9 @@ unreachable:
   unreachable
 
 handler:
-  %tmp = landingpad { i8*, i32 }
+  %tmp = landingpad { ptr, i32 }
   cleanup
-  resume { i8*, i32 } undef
+  resume { ptr, i32 } undef
 }
 
 declare void @bar()

diff  --git a/llvm/test/CodeGen/Thumb/stack-access.ll b/llvm/test/CodeGen/Thumb/stack-access.ll
index 533559a674216..b9b0e8f0fdf6f 100644
--- a/llvm/test/CodeGen/Thumb/stack-access.ll
+++ b/llvm/test/CodeGen/Thumb/stack-access.ll
@@ -1,33 +1,33 @@
 ; RUN: llc -mtriple=thumb-eabi < %s -o - | FileCheck %s
 
 ; Check that stack addresses are generated using a single ADD
-define void @test1(i8** %p) {
+define void @test1(ptr %p) {
   %x = alloca i8, align 1
   %y = alloca i8, align 1
   %z = alloca i8, align 1
 ; CHECK: add r1, sp, #8
 ; CHECK: str r1, [r0]
-  store volatile i8* %x, i8** %p, align 4
+  store volatile ptr %x, ptr %p, align 4
 ; CHECK: add r1, sp, #4
 ; CHECK: str r1, [r0]
-  store volatile i8* %y, i8** %p, align 4
+  store volatile ptr %y, ptr %p, align 4
 ; CHECK: mov r1, sp
 ; CHECK: str r1, [r0]
-  store volatile i8* %z, i8** %p, align 4
+  store volatile ptr %z, ptr %p, align 4
   ret void
 }
 
 ; Stack offsets larger than 1020 still need two ADDs
-define void @test2([1024 x i8]** %p) {
+define void @test2(ptr %p) {
   %arr1 = alloca [1024 x i8], align 1
   %arr2 = alloca [1024 x i8], align 1
 ; CHECK: add r1, sp, #1020
 ; CHECK: adds r1, #4
 ; CHECK: str r1, [r0]
-  store volatile [1024 x i8]* %arr1, [1024 x i8]** %p, align 4
+  store volatile ptr %arr1, ptr %p, align 4
 ; CHECK: mov r1, sp
 ; CHECK: str r1, [r0]
-  store volatile [1024 x i8]* %arr2, [1024 x i8]** %p, align 4
+  store volatile ptr %arr2, ptr %p, align 4
   ret void
 }
 
@@ -36,9 +36,9 @@ define i32 @test3() #0 {
   %x = alloca i8, align 1
   %y = alloca i8, align 1
 ; CHECK: ldr r0, [sp]
-  %1 = load i8, i8* %x, align 1
+  %1 = load i8, ptr %x, align 1
 ; CHECK: ldr r1, [sp, #4]
-  %2 = load i8, i8* %y, align 1
+  %2 = load i8, ptr %y, align 1
   %3 = add nsw i8 %1, %2
   %4 = zext i8 %3 to i32
   ret i32 %4
@@ -48,9 +48,9 @@ define i32 @test4() #0 {
   %x = alloca i16, align 2
   %y = alloca i16, align 2
 ; CHECK: ldr r0, [sp]
-  %1 = load i16, i16* %x, align 2
+  %1 = load i16, ptr %x, align 2
 ; CHECK: ldr r1, [sp, #4]
-  %2 = load i16, i16* %y, align 2
+  %2 = load i16, ptr %y, align 2
   %3 = add nsw i16 %1, %2
   %4 = zext i16 %3 to i32
   ret i32 %4
@@ -61,7 +61,7 @@ define zeroext i8 @test5() {
   %x = alloca i8, align 1
 ; CHECK: mov r0, sp
 ; CHECK: ldrb r0, [r0]
-  %1 = load i8, i8* %x, align 1
+  %1 = load i8, ptr %x, align 1
   ret i8 %1
 }
 
@@ -69,7 +69,7 @@ define zeroext i16 @test6() {
   %x = alloca i16, align 2
 ; CHECK: mov r0, sp
 ; CHECK: ldrh r0, [r0]
-  %1 = load i16, i16* %x, align 2
+  %1 = load i16, ptr %x, align 2
   ret i16 %1
 }
 
@@ -82,11 +82,11 @@ define zeroext i16 @test6() {
 define void @test7() {
   %arr = alloca [200 x i32], align 4
 
-  %arrayidx = getelementptr inbounds [200 x i32], [200 x i32]* %arr, i32 0, i32 1
-  store i32 1, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds [200 x i32], ptr %arr, i32 0, i32 1
+  store i32 1, ptr %arrayidx, align 4
 
-  %arrayidx1 = getelementptr inbounds [200 x i32], [200 x i32]* %arr, i32 0, i32 4
-  store i32 1, i32* %arrayidx1, align 4
+  %arrayidx1 = getelementptr inbounds [200 x i32], ptr %arr, i32 0, i32 4
+  store i32 1, ptr %arrayidx1, align 4
 
   ret void
 }
@@ -99,37 +99,34 @@ define void @test8() {
 
 ; CHECK: movs [[REG:r[0-9]+]], #1
 ; CHECK-DAG: str [[REG]], [sp]
-  %arr1idx1 = getelementptr inbounds [224 x i32], [224 x i32]* %arr1, i32 0, i32 0
-  store i32 1, i32* %arr1idx1, align 4
+  store i32 1, ptr %arr1, align 4
 
 ; Offset in range for sp-based store, but not for non-sp-based store
 ; CHECK-DAG: str [[REG]], [sp, #128]
-  %arr1idx2 = getelementptr inbounds [224 x i32], [224 x i32]* %arr1, i32 0, i32 32
-  store i32 1, i32* %arr1idx2, align 4
+  %arr1idx2 = getelementptr inbounds [224 x i32], ptr %arr1, i32 0, i32 32
+  store i32 1, ptr %arr1idx2, align 4
 
 ; CHECK-DAG: str [[REG]], [sp, #896]
-  %arr2idx1 = getelementptr inbounds [224 x i32], [224 x i32]* %arr2, i32 0, i32 0
-  store i32 1, i32* %arr2idx1, align 4
+  store i32 1, ptr %arr2, align 4
 
 ; %arr2 is in range, but this element of it is not
 ; CHECK-DAG: ldr [[RA:r[0-9]+]], .LCPI7_2
 ; CHECK-DAG: add [[RA]], sp
 ; CHECK-DAG: str [[REG]], [{{r[0-9]+}}]
-  %arr2idx2 = getelementptr inbounds [224 x i32], [224 x i32]* %arr2, i32 0, i32 32
-  store i32 1, i32* %arr2idx2, align 4
+  %arr2idx2 = getelementptr inbounds [224 x i32], ptr %arr2, i32 0, i32 32
+  store i32 1, ptr %arr2idx2, align 4
 
 ; %arr3 is not in range
 ; CHECK-DAG: ldr [[RB:r[0-9]+]], .LCPI7_3
 ; CHECK-DAG: add [[RB]], sp
 ; CHECK-DAG: str [[REG]], [{{r[0-9]+}}]
-  %arr3idx1 = getelementptr inbounds [224 x i32], [224 x i32]* %arr3, i32 0, i32 0
-  store i32 1, i32* %arr3idx1, align 4
+  store i32 1, ptr %arr3, align 4
 
 ; CHECK-DAG: ldr [[RC:r[0-9]+]], .LCPI7_4
 ; CHECK-DAG: add [[RC]], sp
 ; CHECK-DAG: str [[REG]], [{{r[0-9]+}}]
-  %arr3idx2 = getelementptr inbounds [224 x i32], [224 x i32]* %arr3, i32 0, i32 32
-  store i32 1, i32* %arr3idx2, align 4
+  %arr3idx2 = getelementptr inbounds [224 x i32], ptr %arr3, i32 0, i32 32
+  store i32 1, ptr %arr3idx2, align 4
 
   ret void
 }

diff  --git a/llvm/test/CodeGen/Thumb/stack-coloring-without-frame-ptr.ll b/llvm/test/CodeGen/Thumb/stack-coloring-without-frame-ptr.ll
index 60a83bb0d66f3..a6b72323948b8 100644
--- a/llvm/test/CodeGen/Thumb/stack-coloring-without-frame-ptr.ll
+++ b/llvm/test/CodeGen/Thumb/stack-coloring-without-frame-ptr.ll
@@ -1,8 +1,8 @@
 ; RUN: llc -mtriple=thumb-eabi -mcpu=arm1022e %s -o /dev/null
 
-%iterator = type { i8**, i8**, i8**, i8*** }
-%insert_iterator = type { %deque*, %iterator }
-%deque = type { %iterator, %iterator, i8***, i32 }
+%iterator = type { ptr, ptr, ptr, ptr }
+%insert_iterator = type { ptr, %iterator }
+%deque = type { %iterator, %iterator, ptr, i32 }
 
 define i32 @test_thumbv5e_fp_elim() nounwind optsize {
 entry:
@@ -10,20 +10,17 @@ entry:
   %var2 = alloca %insert_iterator, align 4
   %var3 = alloca %deque, align 4
 
-  %0 = bitcast %deque* %var3 to i8*
-  %1 = bitcast %iterator* %var1 to i8*
-  call void @llvm.lifetime.start.p0i8(i64 16, i8* %1) nounwind
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %1, i8* align 4 %0, i32 16, i1 false)
-  call void @llvm.lifetime.end.p0i8(i64 16, i8* %1) nounwind
+  call void @llvm.lifetime.start.p0(i64 16, ptr %var1) nounwind
+  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %var1, ptr align 4 %var3, i32 16, i1 false)
+  call void @llvm.lifetime.end.p0(i64 16, ptr %var1) nounwind
 
-  %2 = bitcast %insert_iterator* %var2 to i8*
-  call void @llvm.lifetime.start.p0i8(i64 20, i8* %2) nounwind
+  call void @llvm.lifetime.start.p0(i64 20, ptr %var2) nounwind
 
   ret i32 0
 }
 
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind
 
-declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) nounwind
+declare void @llvm.lifetime.start.p0(i64, ptr nocapture) nounwind
 
-declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) nounwind
+declare void @llvm.lifetime.end.p0(i64, ptr nocapture) nounwind

diff  --git a/llvm/test/CodeGen/Thumb/stack_guard_remat.ll b/llvm/test/CodeGen/Thumb/stack_guard_remat.ll
index 11feabfeb2470..f96a67e0e7bc2 100644
--- a/llvm/test/CodeGen/Thumb/stack_guard_remat.ll
+++ b/llvm/test/CodeGen/Thumb/stack_guard_remat.ll
@@ -41,21 +41,19 @@
 ; Function Attrs: nounwind ssp
 define i32 @test_stack_guard_remat() #0 {
   %a1 = alloca [256 x i32], align 4
-  %1 = bitcast [256 x i32]* %a1 to i8*
-  call void @llvm.lifetime.start.p0i8(i64 1024, i8* %1)
-  %2 = getelementptr inbounds [256 x i32], [256 x i32]* %a1, i32 0, i32 0
-  call void @foo3(i32* %2) #3
+  call void @llvm.lifetime.start.p0(i64 1024, ptr %a1)
+  call void @foo3(ptr %a1) #3
   call void asm sideeffect "foo2", "~{r0},~{r1},~{r2},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{sp},~{lr}"()
-  call void @llvm.lifetime.end.p0i8(i64 1024, i8* %1)
+  call void @llvm.lifetime.end.p0(i64 1024, ptr %a1)
   ret i32 0
 }
 
 ; Function Attrs: nounwind
-declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
+declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
 
-declare void @foo3(i32*)
+declare void @foo3(ptr)
 
 ; Function Attrs: nounwind
-declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
+declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
 
 attributes #0 = { nounwind ssp "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }

diff  --git a/llvm/test/CodeGen/Thumb/stm-deprecated.ll b/llvm/test/CodeGen/Thumb/stm-deprecated.ll
index a3fd7562b9cfd..696cc8492baf2 100644
--- a/llvm/test/CodeGen/Thumb/stm-deprecated.ll
+++ b/llvm/test/CodeGen/Thumb/stm-deprecated.ll
@@ -3,25 +3,24 @@
 ; RUN: llc -mtriple=thumbv7m -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-T2
 ; RUN: llc -mtriple=thumbv7a -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-T2
 
-%struct1 = type { %struct1*, %struct1*, i32 }
-%struct2 = type { i32, i32, i32* }
+%struct1 = type { ptr, ptr, i32 }
+%struct2 = type { i32, i32, ptr }
 
 @x1 = external global %struct1, align 4
 @x2 = external global %struct1, align 4
 
 declare void @fn1(i32, i32)
-declare void @fn2(%struct2*)
+declare void @fn2(ptr)
 
 ; CHECK-LABEL: test1:
 ; CHECK-T1: str r0, [r1]
 ; CHECK-T1-NEXT: str r1, [r1, #4]
 ; CHECK-T2: strd r0, r1, [r1]
 ; CHECK-NOT: stm
-define void @test1(i32 %unused, %struct1* %x) {
-  %first = getelementptr inbounds %struct1, %struct1* %x, i32 0, i32 0
-  %second = getelementptr inbounds %struct1, %struct1* %x, i32 0, i32 1
-  store %struct1* @x1, %struct1** %first
-  store %struct1* %x, %struct1** %second
+define void @test1(i32 %unused, ptr %x) {
+  %second = getelementptr inbounds %struct1, ptr %x, i32 0, i32 1
+  store ptr @x1, ptr %x
+  store ptr %x, ptr %second
   ret void
 }
 
@@ -31,14 +30,13 @@ define void @test1(i32 %unused, %struct1* %x) {
 ; CHECK-T1-NEXT: str r2, [r2, #8]
 ; CHECK-T2: stm.w r2, {r0, r1, r2}
 ; CHECK-NOT: stm r2!, {r0, r1, r2}
-define i32 @test2(i32 %a, i32 %b, %struct2* %p) {
+define i32 @test2(i32 %a, i32 %b, ptr %p) {
 entry:
-  %p1 = getelementptr inbounds %struct2, %struct2* %p, i32 0, i32 0
-  %p2 = getelementptr inbounds %struct2, %struct2* %p, i32 0, i32 1
-  %p3 = getelementptr inbounds %struct2, %struct2* %p, i32 0, i32 2
-  store i32 %a, i32* %p1, align 4
-  store i32 %b, i32* %p2, align 4
-  store i32* %p1, i32** %p3, align 4
+  %p2 = getelementptr inbounds %struct2, ptr %p, i32 0, i32 1
+  %p3 = getelementptr inbounds %struct2, ptr %p, i32 0, i32 2
+  store i32 %a, ptr %p, align 4
+  store i32 %b, ptr %p2, align 4
+  store ptr %p, ptr %p3, align 4
   call void @fn1(i32 %a, i32 %b)
   ret i32 0
 }
@@ -49,16 +47,15 @@ entry:
 ; CHECK-T1-NEXT: str r2, [r2, #8]
 ; CHECK-T2: stm.w r2, {r0, r1, r2}
 ; CHECK-NOT: stm r2!, {r0, r1, r2}
-define i32 @test3(i32 %a, i32 %b, %struct2* %p) {
+define i32 @test3(i32 %a, i32 %b, ptr %p) {
 entry:
-  %p1 = getelementptr inbounds %struct2, %struct2* %p, i32 0, i32 0
-  %p2 = getelementptr inbounds %struct2, %struct2* %p, i32 0, i32 1
-  %p3 = getelementptr inbounds %struct2, %struct2* %p, i32 0, i32 2
-  store i32 %a, i32* %p1, align 4
-  store i32 %b, i32* %p2, align 4
-  store i32* %p1, i32** %p3, align 4
-  %p4 = getelementptr inbounds %struct2, %struct2* %p, i32 1
-  call void @fn2(%struct2* %p4)
+  %p2 = getelementptr inbounds %struct2, ptr %p, i32 0, i32 1
+  %p3 = getelementptr inbounds %struct2, ptr %p, i32 0, i32 2
+  store i32 %a, ptr %p, align 4
+  store i32 %b, ptr %p2, align 4
+  store ptr %p, ptr %p3, align 4
+  %p4 = getelementptr inbounds %struct2, ptr %p, i32 1
+  call void @fn2(ptr %p4)
   ret i32 0
 }
 
@@ -68,14 +65,13 @@ entry:
 ; CHECK-T1-NEXT: str r1, [r0, #4]
 ; CHECK-T1-NEXT: str r2, [r0, #8]
 ; CHECK-T2: stm r0!, {r0, r1, r2}
-define i32 @test4(%struct1* %p, %struct1* %q, i32 %a) {
+define i32 @test4(ptr %p, ptr %q, i32 %a) {
 entry:
-  %p1 = getelementptr inbounds %struct1, %struct1* %p, i32 0, i32 0
-  %p2 = getelementptr inbounds %struct1, %struct1* %p, i32 0, i32 1
-  %p3 = getelementptr inbounds %struct1, %struct1* %p, i32 0, i32 2
-  store %struct1* %p, %struct1** %p1, align 4
-  store %struct1* %q, %struct1** %p2, align 4
-  store i32 %a, i32* %p3, align 4
+  %p2 = getelementptr inbounds %struct1, ptr %p, i32 0, i32 1
+  %p3 = getelementptr inbounds %struct1, ptr %p, i32 0, i32 2
+  store ptr %p, ptr %p, align 4
+  store ptr %q, ptr %p2, align 4
+  store i32 %a, ptr %p3, align 4
   call void @fn1(i32 %a, i32 %a)
   ret i32 0
 }

diff  --git a/llvm/test/CodeGen/Thumb/stm-merge.ll b/llvm/test/CodeGen/Thumb/stm-merge.ll
index 2eaf8ff2d3b00..837c2f6ca7d2b 100644
--- a/llvm/test/CodeGen/Thumb/stm-merge.ll
+++ b/llvm/test/CodeGen/Thumb/stm-merge.ll
@@ -3,8 +3,8 @@ target datalayout = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-v128:64:128-
 target triple = "thumbv6m--linux-gnueabi"
 
 @d = internal unnamed_addr global i32 0, align 4
- at c = internal global i32* null, align 4
- at e = internal unnamed_addr global i32* null, align 4
+ at c = internal global ptr null, align 4
+ at e = internal unnamed_addr global ptr null, align 4
 
 ; Function Attrs: nounwind optsize
 define void @fn1(i32 %x, i32 %y, i32 %z) #0 {
@@ -15,26 +15,26 @@ entry:
   %g = alloca i32, align 4
   %h = alloca i32, align 4
   %i = alloca i32, align 4
-  store i32 %x, i32* %i, align 4
-  store i32 %y, i32* %h, align 4
-  store i32 %z, i32* %g, align 4
-  %.pr = load i32, i32* @d, align 4
+  store i32 %x, ptr %i, align 4
+  store i32 %y, ptr %h, align 4
+  store i32 %z, ptr %g, align 4
+  %.pr = load i32, ptr @d, align 4
   %cmp11 = icmp slt i32 %.pr, 1
   br i1 %cmp11, label %for.inc.lr.ph, label %for.body5
 
 for.inc.lr.ph:                                    ; preds = %entry
-  store i32 1, i32* @d, align 4
+  store i32 1, ptr @d, align 4
   br label %for.body5
 
 for.body5:                                        ; preds = %entry, %for.inc.lr.ph, %for.body5
   %f.010 = phi i32 [ %inc7, %for.body5 ], [ 0, %for.inc.lr.ph ], [ 0, %entry ]
-  store volatile i32* %g, i32** @c, align 4
+  store volatile ptr %g, ptr @c, align 4
   %inc7 = add nsw i32 %f.010, 1
   %exitcond = icmp eq i32 %inc7, 2
   br i1 %exitcond, label %for.end8, label %for.body5
 
 for.end8:                                         ; preds = %for.body5
-  store i32* %h, i32** @e, align 4
+  store ptr %h, ptr @e, align 4
   ret void
 }
 

diff  --git a/llvm/test/CodeGen/Thumb/stm-scavenging.ll b/llvm/test/CodeGen/Thumb/stm-scavenging.ll
index 84a0d505aad30..90ecd38c1d441 100644
--- a/llvm/test/CodeGen/Thumb/stm-scavenging.ll
+++ b/llvm/test/CodeGen/Thumb/stm-scavenging.ll
@@ -7,14 +7,14 @@ target triple = "thumbv6---gnueabi"
 ; CHECK: .setfp  r7, sp
 ; CHECK: stm r3!, {r0, r1, r2}
 ; CHECK: bl throws_1
-define void @use_stm(i32 %a, i32 %b, i32 %c, i32* %d) local_unnamed_addr noreturn "frame-pointer"="all" {
+define void @use_stm(i32 %a, i32 %b, i32 %c, ptr %d) local_unnamed_addr noreturn "frame-pointer"="all" {
 entry:
-  %arrayidx = getelementptr inbounds i32, i32* %d, i32 2
-  store i32 %a, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %d, i32 3
-  store i32 %b, i32* %arrayidx1, align 4
-  %arrayidx2 = getelementptr inbounds i32, i32* %d, i32 4
-  store i32 %c, i32* %arrayidx2, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %d, i32 2
+  store i32 %a, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %d, i32 3
+  store i32 %b, ptr %arrayidx1, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %d, i32 4
+  store i32 %c, ptr %arrayidx2, align 4
   tail call void @throws_1(i32 %a, i32 %b, i32 %c) noreturn
   unreachable
 }
@@ -29,18 +29,18 @@ entry:
 ; CHECK: str r1,
 ; CHECK: str r2,
 ; CHECK: bl throws_2
-define void @no_stm(i32 %a, i32 %b, i32 %c, i32* %d) local_unnamed_addr noreturn "frame-pointer"="all" {
+define void @no_stm(i32 %a, i32 %b, i32 %c, ptr %d) local_unnamed_addr noreturn "frame-pointer"="all" {
 entry:
-  %arrayidx = getelementptr inbounds i32, i32* %d, i32 2
-  store i32 %a, i32* %arrayidx, align 4
-  %arrayidx1 = getelementptr inbounds i32, i32* %d, i32 3
-  store i32 %b, i32* %arrayidx1, align 4
-  %arrayidx2 = getelementptr inbounds i32, i32* %d, i32 4
-  store i32 %c, i32* %arrayidx2, align 4
-  tail call void @throws_2(i32 %a, i32 %b, i32 %c, i32* %d) noreturn
+  %arrayidx = getelementptr inbounds i32, ptr %d, i32 2
+  store i32 %a, ptr %arrayidx, align 4
+  %arrayidx1 = getelementptr inbounds i32, ptr %d, i32 3
+  store i32 %b, ptr %arrayidx1, align 4
+  %arrayidx2 = getelementptr inbounds i32, ptr %d, i32 4
+  store i32 %c, ptr %arrayidx2, align 4
+  tail call void @throws_2(i32 %a, i32 %b, i32 %c, ptr %d) noreturn
   unreachable
 }
 
 
 declare void @throws_1(i32, i32, i32) noreturn
-declare void @throws_2(i32, i32, i32, i32*) noreturn
+declare void @throws_2(i32, i32, i32, ptr) noreturn

diff  --git a/llvm/test/CodeGen/Thumb/thumb-ldm.ll b/llvm/test/CodeGen/Thumb/thumb-ldm.ll
index 8c49669943cef..4d5a2f47786d6 100644
--- a/llvm/test/CodeGen/Thumb/thumb-ldm.ll
+++ b/llvm/test/CodeGen/Thumb/thumb-ldm.ll
@@ -1,14 +1,14 @@
 ; RUN: llc < %s -mtriple=thumbv6m-eabi -verify-machineinstrs -o - | FileCheck %s
 
- at X = external global [0 x i32]          ; <[0 x i32]*> [#uses=5]
+ at X = external global [0 x i32]          ; <ptr> [#uses=5]
 
 define i32 @t1() {
 ; CHECK-LABEL: t1:
 ; CHECK: push {r7, lr}
 ; CHECK: ldm
 ; CHECK: pop {r7, pc}
-        %tmp = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @X, i32 0, i32 0)            ; <i32> [#uses=1]
-        %tmp3 = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @X, i32 0, i32 1)           ; <i32> [#uses=1]
+        %tmp = load i32, ptr @X            ; <i32> [#uses=1]
+        %tmp3 = load i32, ptr getelementptr ([0 x i32], ptr @X, i32 0, i32 1)           ; <i32> [#uses=1]
         %tmp4 = call i32 @f1( i32 %tmp, i32 %tmp3 )                ; <i32> [#uses=1]
         ret i32 %tmp4
 }
@@ -18,9 +18,9 @@ define i32 @t2() {
 ; CHECK: push {r7, lr}
 ; CHECK: ldm
 ; CHECK: pop {r7, pc}
-        %tmp = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @X, i32 0, i32 2)            ; <i32> [#uses=1]
-        %tmp3 = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @X, i32 0, i32 3)           ; <i32> [#uses=1]
-        %tmp5 = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @X, i32 0, i32 4)           ; <i32> [#uses=1]
+        %tmp = load i32, ptr getelementptr ([0 x i32], ptr @X, i32 0, i32 2)            ; <i32> [#uses=1]
+        %tmp3 = load i32, ptr getelementptr ([0 x i32], ptr @X, i32 0, i32 3)           ; <i32> [#uses=1]
+        %tmp5 = load i32, ptr getelementptr ([0 x i32], ptr @X, i32 0, i32 4)           ; <i32> [#uses=1]
         %tmp6 = call i32 @f2( i32 %tmp, i32 %tmp3, i32 %tmp5 )             ; <i32> [#uses=1]
         ret i32 %tmp6
 }
@@ -30,9 +30,9 @@ define i32 @t3() {
 ; CHECK: push {r7, lr}
 ; CHECK: ldm
 ; CHECK: pop {r7, pc}
-        %tmp = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @X, i32 0, i32 1)            ; <i32> [#uses=1]
-        %tmp3 = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @X, i32 0, i32 2)           ; <i32> [#uses=1]
-        %tmp5 = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @X, i32 0, i32 3)           ; <i32> [#uses=1]
+        %tmp = load i32, ptr getelementptr ([0 x i32], ptr @X, i32 0, i32 1)            ; <i32> [#uses=1]
+        %tmp3 = load i32, ptr getelementptr ([0 x i32], ptr @X, i32 0, i32 2)           ; <i32> [#uses=1]
+        %tmp5 = load i32, ptr getelementptr ([0 x i32], ptr @X, i32 0, i32 3)           ; <i32> [#uses=1]
         %tmp6 = call i32 @f2( i32 %tmp, i32 %tmp3, i32 %tmp5 )             ; <i32> [#uses=1]
         ret i32 %tmp6
 }

diff  --git a/llvm/test/CodeGen/Thumb/thumb-shrink-wrapping.ll b/llvm/test/CodeGen/Thumb/thumb-shrink-wrapping.ll
index 9d4430ddd5472..07e19dd58fe5a 100644
--- a/llvm/test/CodeGen/Thumb/thumb-shrink-wrapping.ll
+++ b/llvm/test/CodeGen/Thumb/thumb-shrink-wrapping.ll
@@ -124,8 +124,8 @@ define i32 @foo(i32 %a, i32 %b) {
   br i1 %tmp2, label %true, label %false
 
 true:
-  store i32 %a, i32* %tmp, align 4
-  %tmp4 = call i32 @doSomething(i32 0, i32* %tmp)
+  store i32 %a, ptr %tmp, align 4
+  %tmp4 = call i32 @doSomething(i32 0, ptr %tmp)
   br label %false
 
 false:
@@ -248,8 +248,8 @@ define i32 @bar(i32 %a, i32 %b) {
   br i1 %tmp2, label %true, label %false
 
 true:
-  store i32 %a, i32* %tmp, align 4
-  %tmp4 = call i32 @doSomething(i32 0, i32* %tmp)
+  store i32 %a, ptr %tmp, align 4
+  %tmp4 = call i32 @doSomething(i32 0, ptr %tmp)
   br label %false
 
 false:
@@ -257,7 +257,7 @@ false:
 }
 
 ; Function Attrs: optsize
-declare i32 @doSomething(i32, i32*)
+declare i32 @doSomething(i32, ptr)
 
 
 ; Check that we do not perform the restore inside the loop whereas the save
@@ -1442,7 +1442,7 @@ if.end:
   ret i32 %value.addr.0
 }
 
-define i1 @beq_to_bx(i32* %y, i32 %head) {
+define i1 @beq_to_bx(ptr %y, i32 %head) {
 ; ENABLE-V4T-LABEL: beq_to_bx:
 ; ENABLE-V4T:       @ %bb.0: @ %entry
 ; ENABLE-V4T-NEXT:    push {r4, lr}
@@ -1531,18 +1531,18 @@ define i1 @beq_to_bx(i32* %y, i32 %head) {
 ; DISABLE-V5T-NEXT:  LBB11_3: @ %cleanup
 ; DISABLE-V5T-NEXT:    pop {r4, pc}
 entry:
-  %cmp = icmp eq i32* %y, null
+  %cmp = icmp eq ptr %y, null
   br i1 %cmp, label %cleanup, label %if.end
 
 if.end:
-  %z = load i32, i32* %y, align 4
+  %z = load i32, ptr %y, align 4
   %and = and i32 %z, 2
   %cmp2 = icmp eq i32 %and, 0
   br i1 %cmp2, label %cleanup, label %if.end4
 
 if.end4:
-  store i32 %head, i32* %y, align 4
-  store volatile i32 %z, i32* %y, align 4
+  store i32 %head, ptr %y, align 4
+  store volatile i32 %z, ptr %y, align 4
   br label %cleanup
 
 cleanup:

diff  --git a/llvm/test/CodeGen/Thumb/uxth.ll b/llvm/test/CodeGen/Thumb/uxth.ll
index e1e5117b394e7..6dc5ddc71e40d 100644
--- a/llvm/test/CodeGen/Thumb/uxth.ll
+++ b/llvm/test/CodeGen/Thumb/uxth.ll
@@ -41,7 +41,7 @@ define i32 @uxtb_2(i32 %x, i32 %y) {
   ret i32 %r
 }
 
-define void @uxth_loop(i32* %a, i32 %n) {
+define void @uxth_loop(ptr %a, i32 %n) {
 ; V6M-LABEL: uxth_loop:
 ; V6M:       .LBB4_1:
 ; V6M-NEXT:    ldrh r2, [r0]
@@ -54,10 +54,10 @@ entry:
 
 for.body:
   %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %arrayidx = getelementptr inbounds i32, i32* %a, i32 %i
-  %x = load i32, i32* %arrayidx
+  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i
+  %x = load i32, ptr %arrayidx
   %xn = and i32 %x, 65535
-  store i32 %xn, i32* %arrayidx
+  store i32 %xn, ptr %arrayidx
   %inc = add nuw nsw i32 %i, 1
   %exitcond = icmp eq i32 %inc, %n
   br i1 %exitcond, label %for.cond.cleanup, label %for.body
@@ -66,7 +66,7 @@ for.cond.cleanup:
   ret void
 }
 
-define void @uxth_loop_2(i32* %a, i32 %n) {
+define void @uxth_loop_2(ptr %a, i32 %n) {
 ; V6M-LABEL: uxth_loop_2:
 ; V6M:         .save {r4, lr}
 ; V6M-NEXT:    push {r4, lr}
@@ -85,12 +85,12 @@ entry:
 
 for.body:
   %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %arrayidx = getelementptr inbounds i32, i32* %a, i32 %i
-  %x = load i32, i32* %arrayidx
+  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i
+  %x = load i32, ptr %arrayidx
   %xn = and i32 %x, 65535
   %in = and i32 %i, 65535
   %s = mul i32 %xn, %in
-  store i32 %s, i32* %arrayidx
+  store i32 %s, ptr %arrayidx
   %inc = add nuw nsw i32 %i, 1
   %exitcond = icmp eq i32 %inc, %n
   br i1 %exitcond, label %for.cond.cleanup, label %for.body
@@ -99,7 +99,7 @@ for.cond.cleanup:
   ret void
 }
 
-define void @uxtb_loop(i32* %a, i32 %n) {
+define void @uxtb_loop(ptr %a, i32 %n) {
 ; V6M-LABEL: uxtb_loop:
 ; V6M:       .LBB6_1:
 ; V6M-NEXT:    ldrb r2, [r0]
@@ -112,10 +112,10 @@ entry:
 
 for.body:
   %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %arrayidx = getelementptr inbounds i32, i32* %a, i32 %i
-  %x = load i32, i32* %arrayidx
+  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i
+  %x = load i32, ptr %arrayidx
   %xn = and i32 %x, 255
-  store i32 %xn, i32* %arrayidx
+  store i32 %xn, ptr %arrayidx
   %inc = add nuw nsw i32 %i, 1
   %exitcond = icmp eq i32 %inc, %n
   br i1 %exitcond, label %for.cond.cleanup, label %for.body
@@ -124,7 +124,7 @@ for.cond.cleanup:
   ret void
 }
 
-define void @uxtb_loop_2(i32* %a, i32 %n) {
+define void @uxtb_loop_2(ptr %a, i32 %n) {
 ; V6M-LABEL: uxtb_loop_2:
 ; V6M:         .save {r4, lr}
 ; V6M-NEXT:    push {r4, lr}
@@ -143,12 +143,12 @@ entry:
 
 for.body:
   %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %arrayidx = getelementptr inbounds i32, i32* %a, i32 %i
-  %x = load i32, i32* %arrayidx
+  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i
+  %x = load i32, ptr %arrayidx
   %xn = and i32 %x, 255
   %in = and i32 %i, 255
   %s = mul i32 %xn, %in
-  store i32 %s, i32* %arrayidx
+  store i32 %s, ptr %arrayidx
   %inc = add nuw nsw i32 %i, 1
   %exitcond = icmp eq i32 %inc, %n
   br i1 %exitcond, label %for.cond.cleanup, label %for.body

diff  --git a/llvm/test/CodeGen/Thumb/vargs.ll b/llvm/test/CodeGen/Thumb/vargs.ll
index 45b42125e166e..d82ac90d78205 100644
--- a/llvm/test/CodeGen/Thumb/vargs.ll
+++ b/llvm/test/CodeGen/Thumb/vargs.ll
@@ -2,7 +2,7 @@
 ; RUN: llc -mtriple=thumb-linux %s -o - | FileCheck %s
 ; RUN: llc -mtriple=thumb-darwin %s -o - | FileCheck %s
 
- at str = internal constant [4 x i8] c"%d\0A\00"           ; <[4 x i8]*> [#uses=1]
+ at str = internal constant [4 x i8] c"%d\0A\00"           ; <ptr> [#uses=1]
 
 define void @f(i32 %a, ...) {
 entry:
@@ -10,26 +10,23 @@ entry:
 ; registers to be stored in.
 ; CHECK: sub sp, #[[IMM:[0-9]+]]
 ; CHECK: push
-        %va = alloca i8*, align 4               ; <i8**> [#uses=4]
-        %va.upgrd.1 = bitcast i8** %va to i8*           ; <i8*> [#uses=1]
-        call void @llvm.va_start( i8* %va.upgrd.1 )
+        %va = alloca ptr, align 4               ; <ptr> [#uses=4]
+        call void @llvm.va_start( ptr %va )
         br label %bb
 
 bb:             ; preds = %bb, %entry
         %a_addr.0 = phi i32 [ %a, %entry ], [ %tmp5, %bb ]              ; <i32> [#uses=2]
-        %tmp = load volatile i8*, i8** %va           ; <i8*> [#uses=2]
-        %tmp2 = getelementptr i8, i8* %tmp, i32 4           ; <i8*> [#uses=1]
-        store volatile i8* %tmp2, i8** %va
+        %tmp = load volatile ptr, ptr %va           ; <ptr> [#uses=2]
+        %tmp2 = getelementptr i8, ptr %tmp, i32 4           ; <ptr> [#uses=1]
+        store volatile ptr %tmp2, ptr %va
         %tmp5 = add i32 %a_addr.0, -1           ; <i32> [#uses=1]
         %tmp.upgrd.2 = icmp eq i32 %a_addr.0, 1         ; <i1> [#uses=1]
         br i1 %tmp.upgrd.2, label %bb7, label %bb
 
 bb7:            ; preds = %bb
-        %tmp3 = bitcast i8* %tmp to i32*                ; <i32*> [#uses=1]
-        %tmp.upgrd.3 = load i32, i32* %tmp3          ; <i32> [#uses=1]
-        %tmp10 = call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @str, i32 0, i64 0), i32 %tmp.upgrd.3 )                ; <i32> [#uses=0]
-        %va.upgrd.4 = bitcast i8** %va to i8*           ; <i8*> [#uses=1]
-        call void @llvm.va_end( i8* %va.upgrd.4 )
+        %tmp.upgrd.3 = load i32, ptr %tmp          ; <i32> [#uses=1]
+        %tmp10 = call i32 (ptr, ...) @printf( ptr @str, i32 %tmp.upgrd.3 )                ; <i32> [#uses=0]
+        call void @llvm.va_end( ptr %va )
         ret void
 
 ; The return sequence should pop the lr to r0-3, recover the stack space used to
@@ -40,8 +37,8 @@ bb7:            ; preds = %bb
 ; CHECK: bx [[POP_REG]]
 }
 
-declare void @llvm.va_start(i8*)
+declare void @llvm.va_start(ptr)
 
-declare i32 @printf(i8*, ...)
+declare i32 @printf(ptr, ...)
 
-declare void @llvm.va_end(i8*)
+declare void @llvm.va_end(ptr)


        


More information about the llvm-commits mailing list