[llvm] d586bd5 - [GlobalOpts] Convert tests to opaque pointers (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 13 06:34:07 PST 2022


Author: Nikita Popov
Date: 2022-12-13T15:33:59+01:00
New Revision: d586bd5ca231a6022f439d4c6e43cfeeb53eb1d6

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

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

Added: 
    

Modified: 
    llvm/test/Transforms/GlobalOpt/2004-10-10-CastStoreOnce.ll
    llvm/test/Transforms/GlobalOpt/2005-06-15-LocalizeConstExprCrash.ll
    llvm/test/Transforms/GlobalOpt/2005-09-27-Crash.ll
    llvm/test/Transforms/GlobalOpt/2006-07-07-InlineAsmCrash.ll
    llvm/test/Transforms/GlobalOpt/2006-11-01-ShrinkGlobalPhiCrash.ll
    llvm/test/Transforms/GlobalOpt/2007-04-05-Crash.ll
    llvm/test/Transforms/GlobalOpt/2007-05-13-Crash.ll
    llvm/test/Transforms/GlobalOpt/2007-06-04-PackedStruct.ll
    llvm/test/Transforms/GlobalOpt/2007-11-09-GEP-GEP-Crash.ll
    llvm/test/Transforms/GlobalOpt/2008-01-03-Crash.ll
    llvm/test/Transforms/GlobalOpt/2008-01-13-OutOfRangeSROA.ll
    llvm/test/Transforms/GlobalOpt/2008-01-29-VolatileGlobal.ll
    llvm/test/Transforms/GlobalOpt/2008-04-26-SROA-Global-Align.ll
    llvm/test/Transforms/GlobalOpt/2008-07-17-addrspace.ll
    llvm/test/Transforms/GlobalOpt/2008-12-16-HeapSRACrash-2.ll
    llvm/test/Transforms/GlobalOpt/2008-12-16-HeapSRACrash.ll
    llvm/test/Transforms/GlobalOpt/2009-01-13-phi-user.ll
    llvm/test/Transforms/GlobalOpt/2009-02-15-BitcastAlias.ll
    llvm/test/Transforms/GlobalOpt/2009-02-15-ResolveAlias.ll
    llvm/test/Transforms/GlobalOpt/2009-03-05-dbg.ll
    llvm/test/Transforms/GlobalOpt/2009-03-06-Anonymous.ll
    llvm/test/Transforms/GlobalOpt/2009-03-07-PromotePtrToBool.ll
    llvm/test/Transforms/GlobalOpt/2009-06-01-RecursivePHI.ll
    llvm/test/Transforms/GlobalOpt/2009-11-16-BrokenPerformHeapAllocSRoA.ll
    llvm/test/Transforms/GlobalOpt/2009-11-16-MallocSingleStoreToGlobalVar.ll
    llvm/test/Transforms/GlobalOpt/2010-02-25-MallocPromote.ll
    llvm/test/Transforms/GlobalOpt/2010-02-26-MallocSROA.ll
    llvm/test/Transforms/GlobalOpt/2010-10-19-WeakOdr.ll
    llvm/test/Transforms/GlobalOpt/2011-04-09-EmptyGlobalCtors.ll
    llvm/test/Transforms/GlobalOpt/2012-05-11-blockaddress.ll
    llvm/test/Transforms/GlobalOpt/2021-08-02-CastStoreOnceP2I.ll
    llvm/test/Transforms/GlobalOpt/2021-08-03-StoreOnceLoadMultiCasts.ll
    llvm/test/Transforms/GlobalOpt/GSROA-section.ll
    llvm/test/Transforms/GlobalOpt/MallocSROA-section-no-null-opt.ll
    llvm/test/Transforms/GlobalOpt/MallocSROA-section.ll
    llvm/test/Transforms/GlobalOpt/SROA-section.ll
    llvm/test/Transforms/GlobalOpt/address_space_initializer.ll
    llvm/test/Transforms/GlobalOpt/alias-resolve.ll
    llvm/test/Transforms/GlobalOpt/alias-used-address-space.ll
    llvm/test/Transforms/GlobalOpt/alias-used-section.ll
    llvm/test/Transforms/GlobalOpt/alias-used.ll
    llvm/test/Transforms/GlobalOpt/amdgcn-ctor-alloca.ll
    llvm/test/Transforms/GlobalOpt/array-elem-refs.ll
    llvm/test/Transforms/GlobalOpt/assume.ll
    llvm/test/Transforms/GlobalOpt/atexit.ll
    llvm/test/Transforms/GlobalOpt/atomic.ll
    llvm/test/Transforms/GlobalOpt/available_externally_global_ctors.ll
    llvm/test/Transforms/GlobalOpt/basictest.ll
    llvm/test/Transforms/GlobalOpt/blockaddress.ll
    llvm/test/Transforms/GlobalOpt/calloc-promote.ll
    llvm/test/Transforms/GlobalOpt/coldcc_stress_test.ll
    llvm/test/Transforms/GlobalOpt/compiler-used.ll
    llvm/test/Transforms/GlobalOpt/const-return-status-atomic.ll
    llvm/test/Transforms/GlobalOpt/const-return-status.ll
    llvm/test/Transforms/GlobalOpt/constantexpr-dangle.ll
    llvm/test/Transforms/GlobalOpt/constantfold-initializers.ll
    llvm/test/Transforms/GlobalOpt/crash-2.ll
    llvm/test/Transforms/GlobalOpt/crash.ll
    llvm/test/Transforms/GlobalOpt/ctor-list-opt-constexpr.ll
    llvm/test/Transforms/GlobalOpt/ctor-list-opt-inbounds.ll
    llvm/test/Transforms/GlobalOpt/ctor-list-opt.ll
    llvm/test/Transforms/GlobalOpt/cxx-dtor.ll
    llvm/test/Transforms/GlobalOpt/dead-constant-user.ll
    llvm/test/Transforms/GlobalOpt/dead-store-status.ll
    llvm/test/Transforms/GlobalOpt/deadfunction.ll
    llvm/test/Transforms/GlobalOpt/deadglobal-2.ll
    llvm/test/Transforms/GlobalOpt/deadglobal-diarglist-use.ll
    llvm/test/Transforms/GlobalOpt/deadglobal.ll
    llvm/test/Transforms/GlobalOpt/evaluate-bitcast-2.ll
    llvm/test/Transforms/GlobalOpt/evaluate-bitcast-3.ll
    llvm/test/Transforms/GlobalOpt/evaluate-bitcast-4.ll
    llvm/test/Transforms/GlobalOpt/evaluate-bitcast.ll
    llvm/test/Transforms/GlobalOpt/evaluate-call-errors.ll
    llvm/test/Transforms/GlobalOpt/evaluate-call.ll
    llvm/test/Transforms/GlobalOpt/evaluate-constfold-call.ll
    llvm/test/Transforms/GlobalOpt/evaluate-load-uniform.ll
    llvm/test/Transforms/GlobalOpt/externally-initialized-aggregate.ll
    llvm/test/Transforms/GlobalOpt/externally-initialized-global-ctr.ll
    llvm/test/Transforms/GlobalOpt/externally-initialized.ll
    llvm/test/Transforms/GlobalOpt/global-demotion.ll
    llvm/test/Transforms/GlobalOpt/globalsra-align.ll
    llvm/test/Transforms/GlobalOpt/globalsra-generic-type.ll
    llvm/test/Transforms/GlobalOpt/globalsra-multigep.ll
    llvm/test/Transforms/GlobalOpt/globalsra-partial.ll
    llvm/test/Transforms/GlobalOpt/globalsra-recursive.ll
    llvm/test/Transforms/GlobalOpt/globalsra-unknown-index.ll
    llvm/test/Transforms/GlobalOpt/globalsra.ll
    llvm/test/Transforms/GlobalOpt/heap-sra-1-no-null-opt.ll
    llvm/test/Transforms/GlobalOpt/heap-sra-1.ll
    llvm/test/Transforms/GlobalOpt/heap-sra-2-no-null-opt.ll
    llvm/test/Transforms/GlobalOpt/heap-sra-2.ll
    llvm/test/Transforms/GlobalOpt/heap-sra-phi-no-null-opt.ll
    llvm/test/Transforms/GlobalOpt/heap-sra-phi.ll
    llvm/test/Transforms/GlobalOpt/int_sideeffect.ll
    llvm/test/Transforms/GlobalOpt/integer-bool-dwarf.ll
    llvm/test/Transforms/GlobalOpt/integer-bool.ll
    llvm/test/Transforms/GlobalOpt/invariant.group.ll
    llvm/test/Transforms/GlobalOpt/invoke.ll
    llvm/test/Transforms/GlobalOpt/iterate.ll
    llvm/test/Transforms/GlobalOpt/large-element-size.ll
    llvm/test/Transforms/GlobalOpt/large-int-crash.ll
    llvm/test/Transforms/GlobalOpt/load-store-global-no-null-opt.ll
    llvm/test/Transforms/GlobalOpt/load-store-global.ll
    llvm/test/Transforms/GlobalOpt/localize-constexpr-debuginfo.ll
    llvm/test/Transforms/GlobalOpt/localize-constexpr.ll
    llvm/test/Transforms/GlobalOpt/long-compilation-global-sra.ll
    llvm/test/Transforms/GlobalOpt/malloc-promote-1-no-null-opt.ll
    llvm/test/Transforms/GlobalOpt/malloc-promote-1.ll
    llvm/test/Transforms/GlobalOpt/malloc-promote-2-no-null-opt.ll
    llvm/test/Transforms/GlobalOpt/malloc-promote-2.ll
    llvm/test/Transforms/GlobalOpt/malloc-promote-3.ll
    llvm/test/Transforms/GlobalOpt/malloc-promote-4.ll
    llvm/test/Transforms/GlobalOpt/malloc-promote-5.ll
    llvm/test/Transforms/GlobalOpt/malloc-promote-6.ll
    llvm/test/Transforms/GlobalOpt/memcpy.ll
    llvm/test/Transforms/GlobalOpt/memset-null.ll
    llvm/test/Transforms/GlobalOpt/memset.ll
    llvm/test/Transforms/GlobalOpt/metadata.ll
    llvm/test/Transforms/GlobalOpt/naked_functions.ll
    llvm/test/Transforms/GlobalOpt/new-promote.ll
    llvm/test/Transforms/GlobalOpt/null-check-global-value.ll
    llvm/test/Transforms/GlobalOpt/phi-select.ll
    llvm/test/Transforms/GlobalOpt/pr33686.ll
    llvm/test/Transforms/GlobalOpt/pr39751.ll
    llvm/test/Transforms/GlobalOpt/pr51879.ll
    llvm/test/Transforms/GlobalOpt/pr52994.ll
    llvm/test/Transforms/GlobalOpt/pr53002.ll
    llvm/test/Transforms/GlobalOpt/preserve-comdats.ll
    llvm/test/Transforms/GlobalOpt/recursively-delete-dead-inst-assertion.ll
    llvm/test/Transforms/GlobalOpt/shrink-address-to-bool.ll
    llvm/test/Transforms/GlobalOpt/shrink-global-to-bool-check-debug.ll
    llvm/test/Transforms/GlobalOpt/shrink-global-to-bool.ll
    llvm/test/Transforms/GlobalOpt/static-const-bitcast.ll
    llvm/test/Transforms/GlobalOpt/store-struct-element.ll
    llvm/test/Transforms/GlobalOpt/stored-once-different-type.ll
    llvm/test/Transforms/GlobalOpt/stored-once-through-gep.ll
    llvm/test/Transforms/GlobalOpt/stored-once-value-type.ll
    llvm/test/Transforms/GlobalOpt/storepointer-compare-no-null-opt.ll
    llvm/test/Transforms/GlobalOpt/storepointer-compare.ll
    llvm/test/Transforms/GlobalOpt/storepointer-no-null-opt.ll
    llvm/test/Transforms/GlobalOpt/storepointer.ll
    llvm/test/Transforms/GlobalOpt/tls.ll
    llvm/test/Transforms/GlobalOpt/trivialstore.ll
    llvm/test/Transforms/GlobalOpt/undef-ctor-dtor.ll
    llvm/test/Transforms/GlobalOpt/undef-init.ll
    llvm/test/Transforms/GlobalOpt/unnamed-addr.ll
    llvm/test/Transforms/GlobalOpt/x86_mmx_load.ll
    llvm/test/Transforms/GlobalOpt/zeroinitializer-gep-load.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/GlobalOpt/2004-10-10-CastStoreOnce.ll b/llvm/test/Transforms/GlobalOpt/2004-10-10-CastStoreOnce.ll
index 1012ecc858b00..c756adea05f21 100644
--- a/llvm/test/Transforms/GlobalOpt/2004-10-10-CastStoreOnce.ll
+++ b/llvm/test/Transforms/GlobalOpt/2004-10-10-CastStoreOnce.ll
@@ -1,17 +1,16 @@
 ; RUN: opt < %s -passes=globalopt
 
- at V = global float 1.200000e+01          ; <float*> [#uses=1]
- at G = internal global i32* null          ; <i32**> [#uses=2]
+ at V = global float 1.200000e+01          ; <ptr> [#uses=1]
+ at G = internal global ptr null          ; <ptr> [#uses=2]
 
 define i32 @user() {
-        %P = load i32*, i32** @G              ; <i32*> [#uses=1]
-        %Q = load i32, i32* %P               ; <i32> [#uses=1]
+        %P = load ptr, ptr @G              ; <ptr> [#uses=1]
+        %Q = load i32, ptr %P               ; <i32> [#uses=1]
         ret i32 %Q
 }
 
 define void @setter() {
-        %Vi = bitcast float* @V to i32*         ; <i32*> [#uses=1]
-        store i32* %Vi, i32** @G
+        store ptr @V, ptr @G
         ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/2005-06-15-LocalizeConstExprCrash.ll b/llvm/test/Transforms/GlobalOpt/2005-06-15-LocalizeConstExprCrash.ll
index 9a115cbf26fbd..d7591f4439d45 100644
--- a/llvm/test/Transforms/GlobalOpt/2005-06-15-LocalizeConstExprCrash.ll
+++ b/llvm/test/Transforms/GlobalOpt/2005-06-15-LocalizeConstExprCrash.ll
@@ -1,10 +1,10 @@
 ; RUN: opt < %s -passes=globalopt -disable-output
 ; PR579
 
- at g_40507551 = internal global i16 31038         ; <i16*> [#uses=1]
+ at g_40507551 = internal global i16 31038         ; <ptr> [#uses=1]
 
 define void @main() {
-        %tmp.4.i.1 = load i8, i8* getelementptr (i8, i8* bitcast (i16* @g_40507551 to i8*), i32 1)              ; <i8> [#uses=0]
+        %tmp.4.i.1 = load i8, ptr getelementptr (i8, ptr @g_40507551, i32 1)              ; <i8> [#uses=0]
         ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/2005-09-27-Crash.ll b/llvm/test/Transforms/GlobalOpt/2005-09-27-Crash.ll
index 0d36d5860d928..19e742228d7b5 100644
--- a/llvm/test/Transforms/GlobalOpt/2005-09-27-Crash.ll
+++ b/llvm/test/Transforms/GlobalOpt/2005-09-27-Crash.ll
@@ -2,13 +2,13 @@
         %RPyString = type { i32, %arraytype.Char }
         %arraytype.Char = type { i32, [0 x i8] }
         %arraytype.Signed = type { i32, [0 x i32] }
-        %functiontype.1 = type { %RPyString* (i32) *} 
+        %functiontype.1 = type { ptr} 
         %structtype.test = type { i32, %arraytype.Signed }
- at structinstance.test = internal global { i32, { i32, [2 x i32] } } { i32 41, { i32, [2 x i32] } { i32 2, [2 x i32] [ i32 100, i32 101 ] } }              ; <{ i32, { i32, [2 x i32] } }*> [#uses=1]
+ at structinstance.test = internal global { i32, { i32, [2 x i32] } } { i32 41, { i32, [2 x i32] } { i32 2, [2 x i32] [ i32 100, i32 101 ] } }              ; <ptr> [#uses=1]
 
 define fastcc void @pypy_array_constant() {
 block0:
-        %tmp.9 = getelementptr %structtype.test, %structtype.test* bitcast ({ i32, { i32, [2 x i32] } }* @structinstance.test to %structtype.test*), i32 0, i32 0          ; <i32*> [#uses=0]
+        %tmp.9 = getelementptr %structtype.test, ptr @structinstance.test, i32 0, i32 0          ; <ptr> [#uses=0]
         ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/2006-07-07-InlineAsmCrash.ll b/llvm/test/Transforms/GlobalOpt/2006-07-07-InlineAsmCrash.ll
index b68bf8ee34b76..4b538ab9688fa 100644
--- a/llvm/test/Transforms/GlobalOpt/2006-07-07-InlineAsmCrash.ll
+++ b/llvm/test/Transforms/GlobalOpt/2006-07-07-InlineAsmCrash.ll
@@ -3,20 +3,20 @@
 target datalayout = "e-p:32:32"
 target triple = "i686-pc-linux-gnu"
 	%struct..0FileDescriptor = type { i32 }
-	%"struct.FlagDescription<int32>" = type { i8*, i32*, i1, i1, i32, i8* }
+	%"struct.FlagDescription<int32>" = type { ptr, ptr, i1, i1, i32, ptr }
 	%"struct.FlagRegisterer<bool>" = type { i8 }
-	%struct.MutexLock = type { %struct..0FileDescriptor* }
+	%struct.MutexLock = type { ptr }
 	%"struct.std::DisabledRangeMap" = type { %"struct.std::_Rb_tree<const char*,std::pair<const char* const, FlagDescription<bool> >,std::_Select1st<std::pair<const char* const, FlagDescription<bool> > >,StringCmp,std::allocator<std::pair<const char* const, FlagDescription<bool> > > >" }
 	%"struct.std::_Rb_tree<const char*,std::pair<const char* const, FlagDescription<bool> >,std::_Select1st<std::pair<const char* const, FlagDescription<bool> > >,StringCmp,std::allocator<std::pair<const char* const, FlagDescription<bool> > > >" = type { %"struct.std::_Rb_tree<const char*,std::pair<const char* const, FlagDescription<bool> >,std::_Select1st<std::pair<const char* const, FlagDescription<bool> > >,StringCmp,std::allocator<std::pair<const char* const, FlagDescription<bool> > > >::_Rb_tree_impl<StringCmp,false>" }
 	%"struct.std::_Rb_tree<const char*,std::pair<const char* const, FlagDescription<bool> >,std::_Select1st<std::pair<const char* const, FlagDescription<bool> > >,StringCmp,std::allocator<std::pair<const char* const, FlagDescription<bool> > > >::_Rb_tree_impl<StringCmp,false>" = type { %"struct.FlagRegisterer<bool>", %"struct.std::_Rb_tree_node_base", i32 }
-	%"struct.std::_Rb_tree_const_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >" = type { %"struct.std::_Rb_tree_node_base"* }
-	%"struct.std::_Rb_tree_node_base" = type { i32, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }
+	%"struct.std::_Rb_tree_const_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >" = type { ptr }
+	%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
 	%"struct.std::_Vector_base<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" }
-	%"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" = type { i32*, i32*, i32* }
+	%"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" = type { ptr, ptr, ptr }
 	%"struct.std::vector<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >" }
- at registry_lock = external global %struct..0FileDescriptor		; <%struct..0FileDescriptor*> [#uses=0]
- at _ZN61FLAG__foo_int32_44FLAGS_E = external global %"struct.FlagRegisterer<bool>"		; <%"struct.FlagRegisterer<bool>"*> [#uses=0]
- at llvm.global_ctors = appending global [20 x { i32, void ()*, i8* }] [ { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN62FLAG__foo_string_10FLAGS_E, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN60FLAG__foo_bool_19FLAGS_E, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZNK5Bzh4Enum13is_contiguousEv, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN62FLAG__foo_string_17FLAGS_E, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN61FLAG__foo_int32_21FLAGS_E, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN7ScannerC2Ev, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__Z11StripStringPSsPKcc, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZNK9__gnu_cxx4hashI11StringPieceEclERKS1_, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN8Hasher325ResetEj, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__Z25ACLRv, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN61FLAG__foo_int64_25FLAGS_E, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN61FLAG__foo_int32_7FLAGS_E, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN62FLAG__foo_string_18FLAGS_E, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN62FLAG__foo_string_17FLAGS_E, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN61FLAG__foo_int32_25FLAGS_E, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I_eventbuf, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN61FLAG__foo_int32_26FLAGS_E, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN62FLAG__foo_string_16FLAGS_E, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__ZN17InitializerC2EPKcS1_PFvvE, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__checker_bcad_variable, i8* null } ]		; <[20 x { i32, void ()*, i8* }]*> [#uses=0]
+ at registry_lock = external global %struct..0FileDescriptor		; <ptr> [#uses=0]
+ at _ZN61FLAG__foo_int32_44FLAGS_E = external global %"struct.FlagRegisterer<bool>"		; <ptr> [#uses=0]
+ at llvm.global_ctors = appending global [20 x { i32, ptr, ptr }] [ { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN62FLAG__foo_string_10FLAGS_E, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN60FLAG__foo_bool_19FLAGS_E, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZNK5Bzh4Enum13is_contiguousEv, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN62FLAG__foo_string_17FLAGS_E, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN61FLAG__foo_int32_21FLAGS_E, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN7ScannerC2Ev, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__Z11StripStringPSsPKcc, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZNK9__gnu_cxx4hashI11StringPieceEclERKS1_, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN8Hasher325ResetEj, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__Z25ACLRv, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN61FLAG__foo_int64_25FLAGS_E, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN61FLAG__foo_int32_7FLAGS_E, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN62FLAG__foo_string_18FLAGS_E, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN62FLAG__foo_string_17FLAGS_E, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN61FLAG__foo_int32_25FLAGS_E, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I_eventbuf, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN61FLAG__foo_int32_26FLAGS_E, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN62FLAG__foo_string_16FLAGS_E, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__ZN17InitializerC2EPKcS1_PFvvE, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__checker_bcad_variable, ptr null } ]		; <ptr> [#uses=0]
 
 declare void @_GLOBAL__I__ZN62FLAG__foo_string_10FLAGS_E()
 
@@ -67,7 +67,7 @@ entry:
 	ret void
 }
 
-define void @_ZNSt3mapIPKc15FlagDescriptionIiE9StringCmpSaISt4pairIKS1_S3_EEE3endEv(%"struct.std::_Rb_tree_const_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >"* sret(%"struct.std::_Rb_tree_const_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >")  %agg.result) {
+define void @_ZNSt3mapIPKc15FlagDescriptionIiE9StringCmpSaISt4pairIKS1_S3_EEE3endEv(ptr sret(%"struct.std::_Rb_tree_const_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >")  %agg.result) {
 entry:
 	unreachable
 }
@@ -76,7 +76,7 @@ declare void @_GLOBAL__I__ZN61FLAG__foo_int64_25FLAGS_E()
 
 define void @_Z14CASPViii() {
 entry:
-	%tmp3 = call i32 asm sideeffect "lock; cmpxchg $1,$2", "={ax},q,m,0,~{dirflag},~{fpsr},~{flags},~{memory}"( i32 0, i32* null, i32 0 )		; <i32> [#uses=0]
+	%tmp3 = call i32 asm sideeffect "lock; cmpxchg $1,$2", "={ax},q,m,0,~{dirflag},~{fpsr},~{flags},~{memory}"( i32 0, ptr null, i32 0 )		; <i32> [#uses=0]
 	unreachable
 }
 
@@ -102,16 +102,16 @@ entry:
 
 define void @_Z41__static_initialization_and_destruction_0ii1662(i32 %__initialize_p, i32 %__priority) {
 entry:
-	%__initialize_p_addr = alloca i32		; <i32*> [#uses=2]
-	%__priority_addr = alloca i32		; <i32*> [#uses=2]
-	store i32 %__initialize_p, i32* %__initialize_p_addr
-	store i32 %__priority, i32* %__priority_addr
-	%tmp = load i32, i32* %__priority_addr		; <i32> [#uses=1]
+	%__initialize_p_addr = alloca i32		; <ptr> [#uses=2]
+	%__priority_addr = alloca i32		; <ptr> [#uses=2]
+	store i32 %__initialize_p, ptr %__initialize_p_addr
+	store i32 %__priority, ptr %__priority_addr
+	%tmp = load i32, ptr %__priority_addr		; <i32> [#uses=1]
 	%tmp.upgrd.1 = icmp eq i32 %tmp, 65535		; <i1> [#uses=1]
 	br i1 %tmp.upgrd.1, label %cond_true, label %cond_next14
 
 cond_true:		; preds = %entry
-	%tmp8 = load i32, i32* %__initialize_p_addr		; <i32> [#uses=1]
+	%tmp8 = load i32, ptr %__initialize_p_addr		; <i32> [#uses=1]
 	%tmp9 = icmp eq i32 %tmp8, 1		; <i1> [#uses=1]
 	br i1 %tmp9, label %cond_true10, label %cond_next14
 

diff  --git a/llvm/test/Transforms/GlobalOpt/2006-11-01-ShrinkGlobalPhiCrash.ll b/llvm/test/Transforms/GlobalOpt/2006-11-01-ShrinkGlobalPhiCrash.ll
index 240f9ccedaadd..d215ed03364af 100644
--- a/llvm/test/Transforms/GlobalOpt/2006-11-01-ShrinkGlobalPhiCrash.ll
+++ b/llvm/test/Transforms/GlobalOpt/2006-11-01-ShrinkGlobalPhiCrash.ll
@@ -1,16 +1,16 @@
 ; RUN: opt < %s -passes=globalopt -disable-output
 
-        %struct._list = type { i32*, %struct._list* }
-        %struct._play = type { i32, i32*, %struct._list*, %struct._play* }
- at nrow = internal global i32 0           ; <i32*> [#uses=2]
+        %struct._list = type { ptr, ptr }
+        %struct._play = type { i32, ptr, ptr, ptr }
+ at nrow = internal global i32 0           ; <ptr> [#uses=2]
 
 define void @make_play() {
 entry:
         br label %cond_true16.i
 
 cond_true16.i:          ; preds = %cond_true16.i, %entry
-        %low.0.in.i.0 = phi i32* [ @nrow, %entry ], [ null, %cond_true16.i ]            ; <i32*> [#uses=1]
-        %low.0.i = load i32, i32* %low.0.in.i.0              ; <i32> [#uses=0]
+        %low.0.in.i.0 = phi ptr [ @nrow, %entry ], [ null, %cond_true16.i ]            ; <ptr> [#uses=1]
+        %low.0.i = load i32, ptr %low.0.in.i.0              ; <i32> [#uses=0]
         br label %cond_true16.i
 }
 
@@ -26,7 +26,7 @@ entry:
 
 define void @main() {
 entry:
-        store i32 8, i32* @nrow
+        store i32 8, ptr @nrow
         tail call void @make_play( )
         ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/2007-04-05-Crash.ll b/llvm/test/Transforms/GlobalOpt/2007-04-05-Crash.ll
index 1bcccc4a621f5..5cc68654baf6e 100644
--- a/llvm/test/Transforms/GlobalOpt/2007-04-05-Crash.ll
+++ b/llvm/test/Transforms/GlobalOpt/2007-04-05-Crash.ll
@@ -2,14 +2,14 @@
 
 target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32"
 target triple = "thumb-apple-darwin8"
- at replacementUnichar = internal global i16 -3		; <i16*> [#uses=2]
-@"L_OBJC_IMAGE_INFO" = internal global [2 x i32] zeroinitializer		; <[2 x i32]*> [#uses=1]
- at llvm.used = appending global [1 x i8*] [ i8* bitcast ([2 x i32]* @"L_OBJC_IMAGE_INFO" to i8*) ]		; <[1 x i8*]*> [#uses=0]
+ at replacementUnichar = internal global i16 -3		; <ptr> [#uses=2]
+@"L_OBJC_IMAGE_INFO" = internal global [2 x i32] zeroinitializer		; <ptr> [#uses=1]
+ at llvm.used = appending global [1 x ptr] [ ptr @"L_OBJC_IMAGE_INFO" ]		; <ptr> [#uses=0]
 
 define zeroext i16 @__NSCharToUnicharCFWrapper(i8 zeroext  %ch)   {
 entry:
-	%iftmp.0.0.in.in = select i1 false, i16* @replacementUnichar, i16* null		; <i16*> [#uses=1]
-	%iftmp.0.0.in = load i16, i16* %iftmp.0.0.in.in		; <i16> [#uses=1]
+	%iftmp.0.0.in.in = select i1 false, ptr @replacementUnichar, ptr null		; <ptr> [#uses=1]
+	%iftmp.0.0.in = load i16, ptr %iftmp.0.0.in.in		; <i16> [#uses=1]
 	ret i16 %iftmp.0.0.in
 }
 
@@ -24,7 +24,7 @@ entry:
 	br i1 false, label %cond_true6, label %cond_next8
 
 cond_true6:		; preds = %entry
-	store i16 -2, i16* @replacementUnichar
+	store i16 -2, ptr @replacementUnichar
 	ret void
 
 cond_next8:		; preds = %entry

diff  --git a/llvm/test/Transforms/GlobalOpt/2007-05-13-Crash.ll b/llvm/test/Transforms/GlobalOpt/2007-05-13-Crash.ll
index cdc351c29ec29..298f5c68de0be 100644
--- a/llvm/test/Transforms/GlobalOpt/2007-05-13-Crash.ll
+++ b/llvm/test/Transforms/GlobalOpt/2007-05-13-Crash.ll
@@ -5,70 +5,68 @@ target triple = "i686-apple-darwin8"
         %struct.SFLMutableListItem = type { i16 }
         %struct.__CFDictionary = type opaque
         %struct.__CFString = type opaque
-        %struct.__builtin_CFString = type { i32*, i32, i8*, i32 }
- at _ZZ19SFLGetVisibilityKeyvE19_kSFLLVisibilityKey = internal global %struct.__CFString* null             ; <%struct.__CFString**> [#uses=2]
- at _ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey = internal global %struct.__CFString* null               ; <%struct.__CFString**> [#uses=7]
+        %struct.__builtin_CFString = type { ptr, i32, ptr, i32 }
+ at _ZZ19SFLGetVisibilityKeyvE19_kSFLLVisibilityKey = internal global ptr null             ; <ptr> [#uses=2]
+ at _ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey = internal global ptr null               ; <ptr> [#uses=7]
 @0 = internal constant %struct.__builtin_CFString {
-    i32* getelementptr ([0 x i32], [0 x i32]* @__CFConstantStringClassReference, i32 0, i32 0),
+    ptr @__CFConstantStringClassReference,
     i32 1992,
-    i8* getelementptr ([14 x i8], [14 x i8]* @.str, i32 0, i32 0),
-    i32 13 }, section "__DATA,__cfstring"               ; <%struct.__builtin_CFString*>:0 [#uses=1]
- at __CFConstantStringClassReference = external global [0 x i32]           ; <[0 x i32]*> [#uses=1]
- at .str = internal constant [14 x i8] c"AlwaysVisible\00"         ; <[14 x i8]*> [#uses=1]
- at _ZZ21SFLGetNeverVisibleKeyvE21_kSFLLNeverVisibleKey = internal global %struct.__CFString* null         ; <%struct.__CFString**> [#uses=2]
+    ptr @.str,
+    i32 13 }, section "__DATA,__cfstring"               ; <ptr>:0 [#uses=1]
+ at __CFConstantStringClassReference = external global [0 x i32]           ; <ptr> [#uses=1]
+ at .str = internal constant [14 x i8] c"AlwaysVisible\00"         ; <ptr> [#uses=1]
+ at _ZZ21SFLGetNeverVisibleKeyvE21_kSFLLNeverVisibleKey = internal global ptr null         ; <ptr> [#uses=2]
 
-define %struct.__CFString* @_Z19SFLGetVisibilityKeyv() {
+define ptr @_Z19SFLGetVisibilityKeyv() {
 entry:
-        %tmp1 = load %struct.__CFString*, %struct.__CFString** @_ZZ19SFLGetVisibilityKeyvE19_kSFLLVisibilityKey              ; <%struct.__CFString*> [#uses=1]
-        ret %struct.__CFString* %tmp1
+        %tmp1 = load ptr, ptr @_ZZ19SFLGetVisibilityKeyvE19_kSFLLVisibilityKey              ; <ptr> [#uses=1]
+        ret ptr %tmp1
 }
 
-define %struct.__CFString* @_Z22SFLGetAlwaysVisibleKeyv() {
+define ptr @_Z22SFLGetAlwaysVisibleKeyv() {
 entry:
-        %tmp1 = load %struct.__CFString*, %struct.__CFString** @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey                ; <%struct.__CFString*> [#uses=1]
-        %tmp2 = icmp eq %struct.__CFString* %tmp1, null         ; <i1> [#uses=1]
+        %tmp1 = load ptr, ptr @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey                ; <ptr> [#uses=1]
+        %tmp2 = icmp eq ptr %tmp1, null         ; <i1> [#uses=1]
         br i1 %tmp2, label %cond_true, label %cond_next
 
 cond_true:              ; preds = %entry
-        store %struct.__CFString* bitcast (%struct.__builtin_CFString* @0 to %struct.__CFString*), %struct.__CFString** @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey
+        store ptr @0, ptr @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey
         br label %cond_next
 
 cond_next:              ; preds = %entry, %cond_true
-        %tmp4 = load %struct.__CFString*, %struct.__CFString** @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey                ; <%struct.__CFString*> [#uses=1]
-        ret %struct.__CFString* %tmp4
+        %tmp4 = load ptr, ptr @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey                ; <ptr> [#uses=1]
+        ret ptr %tmp4
 }
 
-define %struct.__CFString* @_Z21SFLGetNeverVisibleKeyv() {
+define ptr @_Z21SFLGetNeverVisibleKeyv() {
 entry:
-        %tmp1 = load %struct.__CFString*, %struct.__CFString** @_ZZ21SFLGetNeverVisibleKeyvE21_kSFLLNeverVisibleKey          ; <%struct.__CFString*> [#uses=1]
-        ret %struct.__CFString* %tmp1
+        %tmp1 = load ptr, ptr @_ZZ21SFLGetNeverVisibleKeyvE21_kSFLLNeverVisibleKey          ; <ptr> [#uses=1]
+        ret ptr %tmp1
 }
 
-define %struct.__CFDictionary* @_ZN18SFLMutableListItem18GetPrefsDictionaryEv(%struct.SFLMutableListItem* %this) {
+define ptr @_ZN18SFLMutableListItem18GetPrefsDictionaryEv(ptr %this) {
 entry:
-        %tmp4 = getelementptr %struct.SFLMutableListItem, %struct.SFLMutableListItem* %this, i32 0, i32 0  ; <i16*> [#uses=1]
-        %tmp5 = load i16, i16* %tmp4         ; <i16> [#uses=1]
+        %tmp4 = getelementptr %struct.SFLMutableListItem, ptr %this, i32 0, i32 0  ; <ptr> [#uses=1]
+        %tmp5 = load i16, ptr %tmp4         ; <i16> [#uses=1]
         %tmp6 = icmp eq i16 %tmp5, 0            ; <i1> [#uses=1]
         br i1 %tmp6, label %cond_next22, label %cond_true
 
 cond_true:              ; preds = %entry
-        %tmp9 = load %struct.__CFString*, %struct.__CFString** @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey                ; <%struct.__CFString*> [#uses=1]
-        %tmp10 = icmp eq %struct.__CFString* %tmp9, null                ; <i1> [#uses=1]
+        %tmp9 = load ptr, ptr @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey                ; <ptr> [#uses=1]
+        %tmp10 = icmp eq ptr %tmp9, null                ; <i1> [#uses=1]
         br i1 %tmp10, label %cond_true13, label %cond_next22
 
 cond_true13:            ; preds = %cond_true
-        store %struct.__CFString* bitcast (%struct.__builtin_CFString* @0 to %struct.__CFString*), %struct.__CFString** @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey
+        store ptr @0, ptr @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey
         br label %cond_next22
 
 cond_next22:            ; preds = %entry, %cond_true13, %cond_true
-        %iftmp.1.0.in = phi %struct.__CFString** [ @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey, %cond_true ], [ @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey, %cond_true13 ], [ @_ZZ21SFLGetNeverVisibleKeyvE21_kSFLLNeverVisibleKey, %entry ]             ; <%struct.__CFString**> [#uses=1]
-        %iftmp.1.0 = load %struct.__CFString*, %struct.__CFString** %iftmp.1.0.in            ; <%struct.__CFString*> [#uses=1]
-        %tmp24 = load %struct.__CFString*, %struct.__CFString** @_ZZ19SFLGetVisibilityKeyvE19_kSFLLVisibilityKey             ; <%struct.__CFString*> [#uses=1]
-        %tmp2728 = bitcast %struct.__CFString* %tmp24 to i8*            ; <i8*> [#uses=1]
-        %tmp2930 = bitcast %struct.__CFString* %iftmp.1.0 to i8*               ; <i8*> [#uses=1]
-        call void @_Z20CFDictionaryAddValuePKvS0_( i8* %tmp2728, i8* %tmp2930 )
-        ret %struct.__CFDictionary* undef
+        %iftmp.1.0.in = phi ptr [ @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey, %cond_true ], [ @_ZZ22SFLGetAlwaysVisibleKeyvE22_kSFLLAlwaysVisibleKey, %cond_true13 ], [ @_ZZ21SFLGetNeverVisibleKeyvE21_kSFLLNeverVisibleKey, %entry ]             ; <ptr> [#uses=1]
+        %iftmp.1.0 = load ptr, ptr %iftmp.1.0.in            ; <ptr> [#uses=1]
+        %tmp24 = load ptr, ptr @_ZZ19SFLGetVisibilityKeyvE19_kSFLLVisibilityKey             ; <ptr> [#uses=1]
+        call void @_Z20CFDictionaryAddValuePKvS0_( ptr %tmp24, ptr %iftmp.1.0 )
+        ret ptr undef
 }
 
-declare void @_Z20CFDictionaryAddValuePKvS0_(i8*, i8*)
+declare void @_Z20CFDictionaryAddValuePKvS0_(ptr, ptr)
 

diff  --git a/llvm/test/Transforms/GlobalOpt/2007-06-04-PackedStruct.ll b/llvm/test/Transforms/GlobalOpt/2007-06-04-PackedStruct.ll
index 1ef5747dfc5cd..e0d88d24bef88 100644
--- a/llvm/test/Transforms/GlobalOpt/2007-06-04-PackedStruct.ll
+++ b/llvm/test/Transforms/GlobalOpt/2007-06-04-PackedStruct.ll
@@ -6,11 +6,11 @@ target triple = "i686-pc-linux-gnu"
 	%"struct.__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<const int, int> > >" = type <{ i8 }>
 	%"struct.std::_Rb_tree<int,std::pair<const int, int>,std::_Select1st<std::pair<const int, int> >,std::less<int>,std::allocator<std::pair<const int, int> > >" = type { %"struct.std::_Rb_tree<int,std::pair<const int, int>,std::_Select1st<std::pair<const int, int> >,std::less<int>,std::allocator<std::pair<const int, int> > >::_Rb_tree_impl<std::less<int>,false>" }
 	%"struct.std::_Rb_tree<int,std::pair<const int, int>,std::_Select1st<std::pair<const int, int> >,std::less<int>,std::allocator<std::pair<const int, int> > >::_Rb_tree_impl<std::less<int>,false>" = type { %"struct.__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<const int, int> > >", %"struct.std::_Rb_tree_node_base", i32 }
-	%"struct.std::_Rb_tree_node_base" = type { i32, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }
+	%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
 	%"struct.std::map<int,int,std::less<int>,std::allocator<std::pair<const int, int> > >" = type { %"struct.std::_Rb_tree<int,std::pair<const int, int>,std::_Select1st<std::pair<const int, int> >,std::less<int>,std::allocator<std::pair<const int, int> > >" }
- at someMap = global %"struct.std::map<int,int,std::less<int>,std::allocator<std::pair<const int, int> > >" zeroinitializer		; <%"struct.std::map<int,int,std::less<int>,std::allocator<std::pair<const int, int> > >"*> [#uses=1]
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [ { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I_someMap, i8* null } ]		; <[1 x { i32, void ()*, i8* }]*> [#uses=0]
- at llvm.global_dtors = appending global [1 x { i32, void ()*, i8* }] [ { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__D_someMap, i8* null } ]		; <[1 x { i32, void ()*, i8* }]*> [#uses=0]
+ at someMap = global %"struct.std::map<int,int,std::less<int>,std::allocator<std::pair<const int, int> > >" zeroinitializer		; <ptr> [#uses=1]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [ { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I_someMap, ptr null } ]		; <ptr> [#uses=0]
+ at llvm.global_dtors = appending global [1 x { i32, ptr, ptr }] [ { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__D_someMap, ptr null } ]		; <ptr> [#uses=0]
 
 define void @_GLOBAL__I_someMap() {
 entry:
@@ -28,7 +28,7 @@ entry:
 	br i1 %tmp7, label %cond_true, label %cond_next
 
 cond_true:		; preds = %entry
-	store i8 0, i8* getelementptr (%"struct.std::map<int,int,std::less<int>,std::allocator<std::pair<const int, int> > >", %"struct.std::map<int,int,std::less<int>,std::allocator<std::pair<const int, int> > >"* @someMap, i32 0, i32 0, i32 0, i32 0, i32 0)
+	store i8 0, ptr getelementptr (%"struct.std::map<int,int,std::less<int>,std::allocator<std::pair<const int, int> > >", ptr @someMap, i32 0, i32 0, i32 0, i32 0, i32 0)
 	ret void
 
 cond_next:		; preds = %entry

diff  --git a/llvm/test/Transforms/GlobalOpt/2007-11-09-GEP-GEP-Crash.ll b/llvm/test/Transforms/GlobalOpt/2007-11-09-GEP-GEP-Crash.ll
index d8feb8347a0a2..da08237e6de40 100644
--- a/llvm/test/Transforms/GlobalOpt/2007-11-09-GEP-GEP-Crash.ll
+++ b/llvm/test/Transforms/GlobalOpt/2007-11-09-GEP-GEP-Crash.ll
@@ -4,14 +4,14 @@ target triple = "powerpc-unknown-linux-gnu"
         %struct.empty0 = type {  }
         %struct.es = type { %struct.empty0 }
         %struct.es1 = type { %struct.empty0 }
- at aaui1 = internal global [6 x [2 x i32]] [ [2 x i32] [ i32 1, i32 1 ], [2 x i32] [ i32 1, i32 1 ], [2 x i32] [ i32 1, i32 1 ], [2 x i32] [ i32 1, i32 1 ], [2 x i32] [ i32 1, i32 1 ], [2 x i32] [ i32 1, i32 1 ] ]              ; <[6 x [2 x i32]]*> [#uses=1]
- at aaui0 = internal global [0 x [2 x i32]] zeroinitializer                ; <[0 x [2 x i32]]*> [#uses=1]
+ at aaui1 = internal global [6 x [2 x i32]] [ [2 x i32] [ i32 1, i32 1 ], [2 x i32] [ i32 1, i32 1 ], [2 x i32] [ i32 1, i32 1 ], [2 x i32] [ i32 1, i32 1 ], [2 x i32] [ i32 1, i32 1 ], [2 x i32] [ i32 1, i32 1 ] ]              ; <ptr> [#uses=1]
+ at aaui0 = internal global [0 x [2 x i32]] zeroinitializer                ; <ptr> [#uses=1]
 
 define i8 @func() {
 entry:
-        %tmp10 = getelementptr [2 x i32], [2 x i32]* getelementptr ([6 x [2 x i32]], [6 x [2 x i32]]* @aaui1, i32 0, i32 0), i32 5, i32 1           ; <i32*> [#uses=1]
-        %tmp11 = load i32, i32* %tmp10, align 4              ; <i32> [#uses=1]
-        %tmp12 = call i32 (...) @func3( i32* null, i32 0, i32 %tmp11 )         ; <i32> [#uses=0]
+        %tmp10 = getelementptr [2 x i32], ptr @aaui1, i32 5, i32 1           ; <ptr> [#uses=1]
+        %tmp11 = load i32, ptr %tmp10, align 4              ; <i32> [#uses=1]
+        %tmp12 = call i32 (...) @func3( ptr null, i32 0, i32 %tmp11 )         ; <i32> [#uses=0]
         ret i8 undef
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/2008-01-03-Crash.ll b/llvm/test/Transforms/GlobalOpt/2008-01-03-Crash.ll
index ccd0960534d72..37f58ae5908e4 100644
--- a/llvm/test/Transforms/GlobalOpt/2008-01-03-Crash.ll
+++ b/llvm/test/Transforms/GlobalOpt/2008-01-03-Crash.ll
@@ -1,7 +1,7 @@
 ; RUN: opt < %s -passes=globalopt | llvm-dis
 ; PR1896
 
- at indirect1 = internal global void (i32)* null		; <void (i32)**> [#uses=2]
+ at indirect1 = internal global ptr null		; <ptr> [#uses=2]
 
 declare void @indirectmarked(i32)
 
@@ -13,14 +13,14 @@ cond_true.i9:		; preds = %entry
 	ret i32 0
 
 cond_next20.i:		; preds = %entry
-	store void (i32)* @indirectmarked, void (i32)** @indirect1, align 4
+	store ptr @indirectmarked, ptr @indirect1, align 4
 	br i1 false, label %cond_next21.i.i23.i, label %stack_restore
 
 stack_restore:		; preds = %cond_next20.i
 	ret i32 0
 
 cond_next21.i.i23.i:		; preds = %cond_next20.i
-	%tmp6.i4.i = load i32, i32* bitcast (void (i32)** @indirect1 to i32*), align 4		; <i32> [#uses=0]
+	%tmp6.i4.i = load i32, ptr @indirect1, align 4		; <i32> [#uses=0]
 	ret i32 0
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/2008-01-13-OutOfRangeSROA.ll b/llvm/test/Transforms/GlobalOpt/2008-01-13-OutOfRangeSROA.ll
index af76984f7722e..53449fbaad5ca 100644
--- a/llvm/test/Transforms/GlobalOpt/2008-01-13-OutOfRangeSROA.ll
+++ b/llvm/test/Transforms/GlobalOpt/2008-01-13-OutOfRangeSROA.ll
@@ -6,13 +6,13 @@
 @mm = internal global [16 x [31 x double]] zeroinitializer, align 32
 
 define void @test(i32 %X) {
-	%P = getelementptr [16 x [31 x double]], [16 x [31 x double]]* @mm, i32 0, i32 0, i32 %X
-	store double 1.0, double* %P
+	%P = getelementptr [16 x [31 x double]], ptr @mm, i32 0, i32 0, i32 %X
+	store double 1.0, ptr %P
 	ret void
 }
 
 define double @get(i32 %X) {
-	%P = getelementptr [16 x [31 x double]], [16 x [31 x double]]* @mm, i32 0, i32 0, i32 %X
-	%V = load double, double* %P
+	%P = getelementptr [16 x [31 x double]], ptr @mm, i32 0, i32 0, i32 %X
+	%V = load double, ptr %P
 	ret double %V
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/2008-01-29-VolatileGlobal.ll b/llvm/test/Transforms/GlobalOpt/2008-01-29-VolatileGlobal.ll
index 9bab3668c329f..a352598e95c29 100644
--- a/llvm/test/Transforms/GlobalOpt/2008-01-29-VolatileGlobal.ll
+++ b/llvm/test/Transforms/GlobalOpt/2008-01-29-VolatileGlobal.ll
@@ -1,10 +1,10 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 ; CHECK: load volatile
- at t0.1441 = internal global double 0x3FD5555555555555, align 8		; <double*> [#uses=1]
+ at t0.1441 = internal global double 0x3FD5555555555555, align 8		; <ptr> [#uses=1]
 
 define double @foo() nounwind  {
 entry:
-	%tmp1 = load volatile double, double* @t0.1441, align 8		; <double> [#uses=2]
+	%tmp1 = load volatile double, ptr @t0.1441, align 8		; <double> [#uses=2]
 	%tmp4 = fmul double %tmp1, %tmp1		; <double> [#uses=1]
 	ret double %tmp4
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/2008-04-26-SROA-Global-Align.ll b/llvm/test/Transforms/GlobalOpt/2008-04-26-SROA-Global-Align.ll
index 71f44ea2ea4e4..e68e68106c6f1 100644
--- a/llvm/test/Transforms/GlobalOpt/2008-04-26-SROA-Global-Align.ll
+++ b/llvm/test/Transforms/GlobalOpt/2008-04-26-SROA-Global-Align.ll
@@ -18,16 +18,16 @@ target triple = "x86_64-apple-darwin8"
 
 
 define void @test() {
-  store double 1.0, double* getelementptr (%T, %T* @G, i32 0, i32 0), align 16
-  store double 2.0, double* getelementptr (%T, %T* @G, i32 0, i32 1), align 8
-  store double 3.0, double* getelementptr (%T, %T* @G, i32 0, i32 2), align 16
+  store double 1.0, ptr @G, align 16
+  store double 2.0, ptr getelementptr (%T, ptr @G, i32 0, i32 1), align 8
+  store double 3.0, ptr getelementptr (%T, ptr @G, i32 0, i32 2), align 16
   ret void
 }
 
 define double @test2() {
-  %V1 = load double, double* getelementptr (%T, %T* @G, i32 0, i32 0), align 16
-  %V2 = load double, double* getelementptr (%T, %T* @G, i32 0, i32 1), align 8
-  %V3 = load double, double* getelementptr (%T, %T* @G, i32 0, i32 2), align 16
+  %V1 = load double, ptr @G, align 16
+  %V2 = load double, ptr getelementptr (%T, ptr @G, i32 0, i32 1), align 8
+  %V3 = load double, ptr getelementptr (%T, ptr @G, i32 0, i32 2), align 16
   %R = fadd double %V1, %V2
   %R2 = fadd double %R, %V3
   ret double %R2

diff  --git a/llvm/test/Transforms/GlobalOpt/2008-07-17-addrspace.ll b/llvm/test/Transforms/GlobalOpt/2008-07-17-addrspace.ll
index 01aa76071c04d..270489d1a32e3 100644
--- a/llvm/test/Transforms/GlobalOpt/2008-07-17-addrspace.ll
+++ b/llvm/test/Transforms/GlobalOpt/2008-07-17-addrspace.ll
@@ -12,8 +12,8 @@
 @array = internal addrspace(1) global [ 2 x i32 ] zeroinitializer 
 
 define i32 @foo() {
-  %A = load i32, i32 addrspace(1) * getelementptr ({ i32, i32 }, { i32, i32 } addrspace(1) * @struct, i32 0, i32 0)
-  %B = load i32, i32 addrspace(1) * getelementptr ([ 2 x i32 ], [ 2 x i32 ] addrspace(1) * @array, i32 0, i32 0)
+  %A = load i32, ptr addrspace(1) getelementptr ({ i32, i32 }, ptr addrspace(1) @struct, i32 0, i32 0)
+  %B = load i32, ptr addrspace(1) @array
   ; Use the loaded values, so they won't get removed completely
   %R = add i32 %A, %B
   ret i32 %R
@@ -22,7 +22,7 @@ define i32 @foo() {
 ; We put stores in a 
diff erent function, so that the global variables won't get
 ; optimized away completely.
 define void @bar(i32 %R) {
-  store i32 %R, i32 addrspace(1) * getelementptr ([ 2 x i32 ], [ 2 x i32 ] addrspace(1) * @array, i32 0, i32 0)
-  store i32 %R, i32 addrspace(1) * getelementptr ({ i32, i32 }, { i32, i32 } addrspace(1) * @struct, i32 0, i32 0)
+  store i32 %R, ptr addrspace(1) @array
+  store i32 %R, ptr addrspace(1) getelementptr ({ i32, i32 }, ptr addrspace(1) @struct, i32 0, i32 0)
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/2008-12-16-HeapSRACrash-2.ll b/llvm/test/Transforms/GlobalOpt/2008-12-16-HeapSRACrash-2.ll
index bc0050b84c883..0204922a6f894 100644
--- a/llvm/test/Transforms/GlobalOpt/2008-12-16-HeapSRACrash-2.ll
+++ b/llvm/test/Transforms/GlobalOpt/2008-12-16-HeapSRACrash-2.ll
@@ -2,27 +2,26 @@
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
 target triple = "i386-apple-darwin7"
 	%struct.foo = type { i32, i32 }
- at X = internal global %struct.foo* null		; <%struct.foo**> [#uses=2]
+ at X = internal global ptr null		; <ptr> [#uses=2]
 
 define void @bar(i32 %Size) nounwind noinline {
 entry:
-        %malloccall = tail call i8* @malloc(i32 trunc (i64 mul (i64 ptrtoint (i32* getelementptr (i32, i32* null, i32 1) to i64), i64 2000000) to i32))
-        %tmp = bitcast i8* %malloccall to [1000000 x %struct.foo]*
-	%.sub = getelementptr [1000000 x %struct.foo], [1000000 x %struct.foo]* %tmp, i32 0, i32 0		; <%struct.foo*> [#uses=1]
-	store %struct.foo* %.sub, %struct.foo** @X, align 4
+        %malloccall = tail call ptr @malloc(i32 trunc (i64 mul (i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64), i64 2000000) to i32))
+	%.sub = getelementptr [1000000 x %struct.foo], ptr %malloccall, i32 0, i32 0		; <ptr> [#uses=1]
+	store ptr %.sub, ptr @X, align 4
 	ret void
 }
 
-declare noalias i8* @malloc(i32)
+declare noalias ptr @malloc(i32)
 
 
 define i32 @baz() nounwind readonly noinline {
 bb1.thread:
-	%tmpLD1 = load %struct.foo*, %struct.foo** @X, align 4		; <%struct.foo*> [#uses=2]
+	%tmpLD1 = load ptr, ptr @X, align 4		; <ptr> [#uses=2]
 	br label %bb1
 
 bb1:		; preds = %bb1, %bb1.thread
-	%tmp = phi %struct.foo* [ %tmpLD1, %bb1.thread ], [ %tmpLD1, %bb1 ]		; <%struct.foo*> [#uses=1]
-	%0 = getelementptr %struct.foo, %struct.foo* %tmp, i32 1		; <%struct.foo*> [#uses=0]
+	%tmp = phi ptr [ %tmpLD1, %bb1.thread ], [ %tmpLD1, %bb1 ]		; <ptr> [#uses=1]
+	%0 = getelementptr %struct.foo, ptr %tmp, i32 1		; <ptr> [#uses=0]
 	br label %bb1
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/2008-12-16-HeapSRACrash.ll b/llvm/test/Transforms/GlobalOpt/2008-12-16-HeapSRACrash.ll
index 24b57e2dfb2c8..9163026613728 100644
--- a/llvm/test/Transforms/GlobalOpt/2008-12-16-HeapSRACrash.ll
+++ b/llvm/test/Transforms/GlobalOpt/2008-12-16-HeapSRACrash.ll
@@ -2,27 +2,26 @@
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
 target triple = "i386-apple-darwin7"
 	%struct.foo = type { i32, i32 }
- at X = internal global %struct.foo* null		; <%struct.foo**> [#uses=2]
+ at X = internal global ptr null		; <ptr> [#uses=2]
 
 define void @bar(i32 %Size) nounwind noinline {
 entry:
-        %malloccall = tail call i8* @malloc(i32 trunc (i64 mul (i64 ptrtoint (i32* getelementptr (i32, i32* null, i32 1) to i64), i64 2000000) to i32))
-        %tmp = bitcast i8* %malloccall to [1000000 x %struct.foo]*
-	%.sub = getelementptr [1000000 x %struct.foo], [1000000 x %struct.foo]* %tmp, i32 0, i32 0		; <%struct.foo*> [#uses=1]
-	store %struct.foo* %.sub, %struct.foo** @X, align 4
+        %malloccall = tail call ptr @malloc(i32 trunc (i64 mul (i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64), i64 2000000) to i32))
+	%.sub = getelementptr [1000000 x %struct.foo], ptr %malloccall, i32 0, i32 0		; <ptr> [#uses=1]
+	store ptr %.sub, ptr @X, align 4
 	ret void
 }
 
-declare noalias i8* @malloc(i32)
+declare noalias ptr @malloc(i32)
 
 define i32 @baz() nounwind readonly noinline {
 bb1.thread:
-	%tmpLD1 = load %struct.foo*, %struct.foo** @X, align 4		; <%struct.foo*> [#uses=3]
-	store %struct.foo* %tmpLD1, %struct.foo** null
+	%tmpLD1 = load ptr, ptr @X, align 4		; <ptr> [#uses=3]
+	store ptr %tmpLD1, ptr null
 	br label %bb1
 
 bb1:		; preds = %bb1, %bb1.thread
-	%tmp = phi %struct.foo* [ %tmpLD1, %bb1.thread ], [ %tmpLD1, %bb1 ]		; <%struct.foo*> [#uses=0]
+	%tmp = phi ptr [ %tmpLD1, %bb1.thread ], [ %tmpLD1, %bb1 ]		; <ptr> [#uses=0]
 	br i1 false, label %bb2, label %bb1
 
 bb2:		; preds = %bb1

diff  --git a/llvm/test/Transforms/GlobalOpt/2009-01-13-phi-user.ll b/llvm/test/Transforms/GlobalOpt/2009-01-13-phi-user.ll
index 009b9c1e3c810..b434fc10f87e6 100644
--- a/llvm/test/Transforms/GlobalOpt/2009-01-13-phi-user.ll
+++ b/llvm/test/Transforms/GlobalOpt/2009-01-13-phi-user.ll
@@ -3,26 +3,26 @@
 ; PR3321
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
 target triple = "x86_64-unknown-linux-gnu"
-	%struct.node = type { %struct.node*, i32 }
- at head = internal global %struct.node* null		; <%struct.node**> [#uses=2]
- at node = internal global %struct.node { %struct.node* null, i32 42 }, align 16		; <%struct.node*> [#uses=1]
+	%struct.node = type { ptr, i32 }
+ at head = internal global ptr null		; <ptr> [#uses=2]
+ at node = internal global %struct.node { ptr null, i32 42 }, align 16		; <ptr> [#uses=1]
 
 define i32 @f() nounwind {
 entry:
-	store %struct.node* @node, %struct.node** @head, align 8
+	store ptr @node, ptr @head, align 8
 	br label %bb1
 
 bb:		; preds = %bb1
-	%0 = getelementptr %struct.node, %struct.node* %t.0, i64 0, i32 1		; <i32*> [#uses=1]
-	%1 = load i32, i32* %0, align 4		; <i32> [#uses=1]
-	%2 = getelementptr %struct.node, %struct.node* %t.0, i64 0, i32 0		; <%struct.node**> [#uses=1]
+	%0 = getelementptr %struct.node, ptr %t.0, i64 0, i32 1		; <ptr> [#uses=1]
+	%1 = load i32, ptr %0, align 4		; <i32> [#uses=1]
+	%2 = getelementptr %struct.node, ptr %t.0, i64 0, i32 0		; <ptr> [#uses=1]
 	br label %bb1
 
 bb1:		; preds = %bb, %entry
 	%value.0 = phi i32 [ undef, %entry ], [ %1, %bb ]		; <i32> [#uses=1]
-	%t.0.in = phi %struct.node** [ @head, %entry ], [ %2, %bb ]		; <%struct.node**> [#uses=1]
-	%t.0 = load %struct.node*, %struct.node** %t.0.in		; <%struct.node*> [#uses=3]
-	%3 = icmp eq %struct.node* %t.0, null		; <i1> [#uses=1]
+	%t.0.in = phi ptr [ @head, %entry ], [ %2, %bb ]		; <ptr> [#uses=1]
+	%t.0 = load ptr, ptr %t.0.in		; <ptr> [#uses=3]
+	%3 = icmp eq ptr %t.0, null		; <i1> [#uses=1]
 	br i1 %3, label %bb2, label %bb
 
 bb2:		; preds = %bb1

diff  --git a/llvm/test/Transforms/GlobalOpt/2009-02-15-BitcastAlias.ll b/llvm/test/Transforms/GlobalOpt/2009-02-15-BitcastAlias.ll
index 5b4af9aa74fa7..e4c4f5a0f0a40 100644
--- a/llvm/test/Transforms/GlobalOpt/2009-02-15-BitcastAlias.ll
+++ b/llvm/test/Transforms/GlobalOpt/2009-02-15-BitcastAlias.ll
@@ -2,9 +2,9 @@
 
 @g = global i32 0
 
- at a = alias i8, bitcast (i32* @g to i8*)
+ at a = alias i8, ptr @g
 
 define void @f() {
-	%tmp = load i8, i8* @a
+	%tmp = load i8, ptr @a
 	ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/2009-02-15-ResolveAlias.ll b/llvm/test/Transforms/GlobalOpt/2009-02-15-ResolveAlias.ll
index ce7d4fcb8e253..0d5864286ec3a 100644
--- a/llvm/test/Transforms/GlobalOpt/2009-02-15-ResolveAlias.ll
+++ b/llvm/test/Transforms/GlobalOpt/2009-02-15-ResolveAlias.ll
@@ -6,14 +6,14 @@ define internal void @f() {
 	ret void
 }
 
- at a = dso_local alias void (), void ()* @f
+ at a = dso_local alias void (), ptr @f
 
 define hidden void @g() {
 	call void() @a()
 	ret void
 }
 
- at b = internal alias  void (),  void ()* @g
+ at b = internal alias  void (),  ptr @g
 ; CHECK-NOT: @b
 
 define void @h() {

diff  --git a/llvm/test/Transforms/GlobalOpt/2009-03-05-dbg.ll b/llvm/test/Transforms/GlobalOpt/2009-03-05-dbg.ll
index d40eea53d9245..a802236141d52 100644
--- a/llvm/test/Transforms/GlobalOpt/2009-03-05-dbg.ll
+++ b/llvm/test/Transforms/GlobalOpt/2009-03-05-dbg.ll
@@ -15,13 +15,13 @@ entry:
   br i1 %0, label %bb, label %bb1, !dbg !13
 
 bb:                                               ; preds = %entry
-  store i32 0, i32* @Stop, align 4, !dbg !15
+  store i32 0, ptr @Stop, align 4, !dbg !15
   %1 = mul nsw i32 %i, 42, !dbg !16
   call void @llvm.dbg.value(metadata i32 %1, metadata !8, metadata !12), !dbg !16
   br label %bb2, !dbg !16
 
 bb1:                                              ; preds = %entry
-  store i32 1, i32* @Stop, align 4, !dbg !17
+  store i32 1, ptr @Stop, align 4, !dbg !17
   br label %bb2, !dbg !17
 
 bb2:                                              ; preds = %bb1, %bb
@@ -40,7 +40,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
 define i32 @bar() #0 {
 entry:
   %"alloca point" = bitcast i32 0 to i32
-  %0 = load i32, i32* @Stop, align 4, !dbg !19
+  %0 = load i32, ptr @Stop, align 4, !dbg !19
   %1 = icmp eq i32 %0, 1, !dbg !19
   br i1 %1, label %bb, label %bb1, !dbg !19
 

diff  --git a/llvm/test/Transforms/GlobalOpt/2009-03-06-Anonymous.ll b/llvm/test/Transforms/GlobalOpt/2009-03-06-Anonymous.ll
index f14cfcedf9476..b54815b8af8cb 100644
--- a/llvm/test/Transforms/GlobalOpt/2009-03-06-Anonymous.ll
+++ b/llvm/test/Transforms/GlobalOpt/2009-03-06-Anonymous.ll
@@ -6,18 +6,18 @@
 @1 = private global i32 0
 ; CHECK-DAG: @1 = private global i32 0
 
-define i32* @2() {
-	ret i32* @0
+define ptr @2() {
+	ret ptr @0
 }
-; CHECK-DAG: define internal fastcc i32* @2()
+; CHECK-DAG: define internal fastcc ptr @2()
 
-define i32* @f() {
+define ptr @f() {
 entry:
-	call i32* @2()
-	ret i32* %0
+	call ptr @2()
+	ret ptr %0
 }
 
-define i32* @g() {
+define ptr @g() {
 entry:
-	ret i32* @1
+	ret ptr @1
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/2009-03-07-PromotePtrToBool.ll b/llvm/test/Transforms/GlobalOpt/2009-03-07-PromotePtrToBool.ll
index 99d3269ca5b58..acff34c1ae357 100644
--- a/llvm/test/Transforms/GlobalOpt/2009-03-07-PromotePtrToBool.ll
+++ b/llvm/test/Transforms/GlobalOpt/2009-03-07-PromotePtrToBool.ll
@@ -2,18 +2,18 @@
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
 target triple = "i386-apple-darwin7"
 
-; CHECK: @X = internal unnamed_addr global i32
- at X = internal global i32* null		; <i32**> [#uses=2]
- at Y = internal global i32 0		; <i32*> [#uses=1]
+; CHECK: @X = internal unnamed_addr global ptr null
+ at X = internal global ptr null		; <ptr> [#uses=2]
+ at Y = internal global i32 0		; <ptr> [#uses=1]
 
 define void @foo() nounwind {
 entry:
-	store i32* @Y, i32** @X, align 4
+	store ptr @Y, ptr @X, align 4
 	ret void
 }
 
-define i32* @get() nounwind {
+define ptr @get() nounwind {
 entry:
-	%0 = load i32*, i32** @X, align 4		; <i32*> [#uses=1]
-	ret i32* %0
+	%0 = load ptr, ptr @X, align 4		; <ptr> [#uses=1]
+	ret ptr %0
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/2009-06-01-RecursivePHI.ll b/llvm/test/Transforms/GlobalOpt/2009-06-01-RecursivePHI.ll
index d61d4d4b45bea..911ae91f4d136 100644
--- a/llvm/test/Transforms/GlobalOpt/2009-06-01-RecursivePHI.ll
+++ b/llvm/test/Transforms/GlobalOpt/2009-06-01-RecursivePHI.ll
@@ -3,11 +3,11 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
 
 	%struct.s_annealing_sched = type { i32, float, float, float, float }
 	%struct.s_bb = type { i32, i32, i32, i32 }
-	%struct.s_net = type { i8*, i32, i32*, float, float }
-	%struct.s_placer_opts = type { i32, float, i32, i32, i8*, i32, i32 }
- at net = internal global %struct.s_net* null		; <%struct.s_net**> [#uses=4]
+	%struct.s_net = type { ptr, i32, ptr, float, float }
+	%struct.s_placer_opts = type { i32, float, i32, i32, ptr, i32, i32 }
+ at net = internal global ptr null		; <ptr> [#uses=4]
 
-define fastcc void @alloc_and_load_placement_structs(i32 %place_cost_type, i32 %num_regions, float %place_cost_exp, float*** nocapture %old_region_occ_x, float*** nocapture %old_region_occ_y, i1 %c1, i1 %c2, i1 %c3, i1 %c4, i1 %c5, i1 %c6, i1 %c7, i1 %c8, i1 %c9, i1 %c10, i1 %c11, i1 %c12) nounwind ssp {
+define fastcc void @alloc_and_load_placement_structs(i32 %place_cost_type, i32 %num_regions, float %place_cost_exp, ptr nocapture %old_region_occ_x, ptr nocapture %old_region_occ_y, i1 %c1, i1 %c2, i1 %c3, i1 %c4, i1 %c5, i1 %c6, i1 %c7, i1 %c8, i1 %c9, i1 %c10, i1 %c11, i1 %c12) nounwind ssp {
 entry:
 	br i1 %c1, label %bb.i, label %my_malloc.exit
 
@@ -33,7 +33,7 @@ bb.i4.i:		; preds = %my_calloc.exit.i
 	unreachable
 
 my_calloc.exit5.i:		; preds = %my_calloc.exit.i
-	%.pre.i58 = load %struct.s_net*, %struct.s_net** @net, align 4		; <%struct.s_net*> [#uses=1]
+	%.pre.i58 = load ptr, ptr @net, align 4		; <ptr> [#uses=1]
 	br label %bb17.i78
 
 bb1.i61:		; preds = %bb4.preheader.i, %bb1.i61
@@ -58,19 +58,19 @@ bb.i1.i68:		; preds = %bb8.i67
 	unreachable
 
 my_malloc.exit.i70:		; preds = %bb8.i67
-	%0 = load %struct.s_net*, %struct.s_net** @net, align 4		; <%struct.s_net*> [#uses=1]
+	%0 = load ptr, ptr @net, align 4		; <ptr> [#uses=1]
 	br i1 %c9, label %bb9.i71, label %bb16.i77
 
 bb9.i71:		; preds = %bb9.i71, %my_malloc.exit.i70
-	%1 = load %struct.s_net*, %struct.s_net** @net, align 4		; <%struct.s_net*> [#uses=1]
+	%1 = load ptr, ptr @net, align 4		; <ptr> [#uses=1]
 	br i1 %c10, label %bb9.i71, label %bb16.i77
 
 bb16.i77:		; preds = %bb9.i71, %my_malloc.exit.i70, %bb15.preheader.i
-	%.pre41.i.rle244 = phi %struct.s_net* [ %.pre41.i, %bb15.preheader.i ], [ %0, %my_malloc.exit.i70 ], [ %1, %bb9.i71 ]		; <%struct.s_net*> [#uses=1]
+	%.pre41.i.rle244 = phi ptr [ %.pre41.i, %bb15.preheader.i ], [ %0, %my_malloc.exit.i70 ], [ %1, %bb9.i71 ]		; <ptr> [#uses=1]
 	br label %bb17.i78
 
 bb17.i78:		; preds = %bb16.i77, %my_calloc.exit5.i
-	%.pre41.i = phi %struct.s_net* [ %.pre41.i.rle244, %bb16.i77 ], [ %.pre.i58, %my_calloc.exit5.i ]		; <%struct.s_net*> [#uses=1]
+	%.pre41.i = phi ptr [ %.pre41.i.rle244, %bb16.i77 ], [ %.pre.i58, %my_calloc.exit5.i ]		; <ptr> [#uses=1]
 	br i1 %c11, label %bb4.preheader.i, label %alloc_and_load_unique_pin_list.exit
 
 bb4.preheader.i:		; preds = %bb17.i78
@@ -80,7 +80,7 @@ alloc_and_load_unique_pin_list.exit:		; preds = %bb17.i78
 	ret void
 }
 
-define void @read_net(i8* %net_file, i1 %c1, i1 %c2, i1 %c3, i1 %c4, i1 %c5) nounwind ssp {
+define void @read_net(ptr %net_file, i1 %c1, i1 %c2, i1 %c3, i1 %c4, i1 %c5) nounwind ssp {
 entry:
 	br i1 %c1, label %bb3.us.us.i, label %bb6.preheader
 
@@ -98,15 +98,14 @@ bb.i34:		; preds = %bb
 
 bb1.i38:		; preds = %bb
 	%mallocsize = mul i64 28, undef                  ; <i64> [#uses=1]
-	%malloccall = tail call i8* @malloc(i64 %mallocsize)      ; <i8*> [#uses=1]
-	%0 = bitcast i8* %malloccall to %struct.s_net*  ; <%struct.s_net*> [#uses=1]
+	%malloccall = tail call ptr @malloc(i64 %mallocsize)      ; <ptr> [#uses=1]
 	br i1 %c4, label %bb.i1.i39, label %my_malloc.exit2.i
 
 bb.i1.i39:		; preds = %bb1.i38
 	unreachable
 
 my_malloc.exit2.i:		; preds = %bb1.i38
-	store %struct.s_net* %0, %struct.s_net** @net, align 4
+	store ptr %malloccall, ptr @net, align 4
 	br i1 %c5, label %bb.i7.i40, label %my_malloc.exit8.i
 
 bb.i7.i40:		; preds = %my_malloc.exit2.i
@@ -119,4 +118,4 @@ bb7:		; preds = %bb6.preheader
 	unreachable
 }
 
-declare noalias i8* @malloc(i64)
+declare noalias ptr @malloc(i64)

diff  --git a/llvm/test/Transforms/GlobalOpt/2009-11-16-BrokenPerformHeapAllocSRoA.ll b/llvm/test/Transforms/GlobalOpt/2009-11-16-BrokenPerformHeapAllocSRoA.ll
index 0a62cba7945f6..d8b096e25374c 100644
--- a/llvm/test/Transforms/GlobalOpt/2009-11-16-BrokenPerformHeapAllocSRoA.ll
+++ b/llvm/test/Transforms/GlobalOpt/2009-11-16-BrokenPerformHeapAllocSRoA.ll
@@ -4,23 +4,22 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 target triple = "x86_64-apple-darwin10.0"
 
 %struct.hashheader = type { i16, i16, i16, i16, i16, i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, [5 x i8], [13 x i8], i8, i8, i8, [228 x i16], [228 x i8], [228 x i8], [228 x i8], [228 x i8], [228 x i8], [228 x i8], [128 x i8], [100 x [11 x i8]], [100 x i32], [100 x i32], i16 }
-%struct.strchartype = type { i8*, i8*, i8* }
+%struct.strchartype = type { ptr, ptr, ptr }
 
- at hashheader = internal global %struct.hashheader zeroinitializer, align 32 ; <%struct.hashheader*> [#uses=1]
- at chartypes = internal global %struct.strchartype* null ; <%struct.strchartype**> [#uses=1]
+ at hashheader = internal global %struct.hashheader zeroinitializer, align 32 ; <ptr> [#uses=1]
+ at chartypes = internal global ptr null ; <ptr> [#uses=1]
 ; CHECK-NOT: @hashheader
 ; CHECK-NOT: @chartypes
 
 ; based on linit in office-ispell
 define void @test() nounwind ssp {
-  %1 = load i32, i32* getelementptr inbounds (%struct.hashheader, %struct.hashheader* @hashheader, i64 0, i32 13), align 8 ; <i32> [#uses=1]
+  %1 = load i32, ptr getelementptr inbounds (%struct.hashheader, ptr @hashheader, i64 0, i32 13), align 8 ; <i32> [#uses=1]
   %2 = sext i32 %1 to i64                         ; <i64> [#uses=1]
-  %3 = mul i64 %2, ptrtoint (%struct.strchartype* getelementptr (%struct.strchartype, %struct.strchartype* null, i64 1) to i64) ; <i64> [#uses=1]
-  %4 = tail call i8* @malloc(i64 %3)              ; <i8*> [#uses=1]
-; CHECK-NOT: call i8* @malloc(i64
-  %5 = bitcast i8* %4 to %struct.strchartype*     ; <%struct.strchartype*> [#uses=1]
-  store %struct.strchartype* %5, %struct.strchartype** @chartypes, align 8
+  %3 = mul i64 %2, ptrtoint (ptr getelementptr (%struct.strchartype, ptr null, i64 1) to i64) ; <i64> [#uses=1]
+  %4 = tail call ptr @malloc(i64 %3)              ; <ptr> [#uses=1]
+; CHECK-NOT: call ptr @malloc(i64
+  store ptr %4, ptr @chartypes, align 8
   ret void
 }
 
-declare noalias i8* @malloc(i64) allockind("alloc,uninitialized")
+declare noalias ptr @malloc(i64) allockind("alloc,uninitialized")

diff  --git a/llvm/test/Transforms/GlobalOpt/2009-11-16-MallocSingleStoreToGlobalVar.ll b/llvm/test/Transforms/GlobalOpt/2009-11-16-MallocSingleStoreToGlobalVar.ll
index d4deb23262378..00ca2692441a1 100644
--- a/llvm/test/Transforms/GlobalOpt/2009-11-16-MallocSingleStoreToGlobalVar.ll
+++ b/llvm/test/Transforms/GlobalOpt/2009-11-16-MallocSingleStoreToGlobalVar.ll
@@ -7,24 +7,23 @@
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
 target triple = "x86_64-apple-darwin10.0"
 
- at TOP = internal global i64* null                    ; <i64**> [#uses=2]
-; CHECK: @TOP = internal unnamed_addr global i64* null
- at channelColumns = internal global i64 0             ; <i64*> [#uses=2]
+ at TOP = internal global ptr null                    ; <ptr> [#uses=2]
+; CHECK: @TOP = internal unnamed_addr global ptr null
+ at channelColumns = internal global i64 0             ; <ptr> [#uses=2]
 
 ; Derived from @DescribeChannel() in yacr2
 define void @test() nounwind ssp {
-  store i64 2335, i64* @channelColumns, align 8
-  %1 = load i64, i64* @channelColumns, align 8         ; <i64> [#uses=1]
+  store i64 2335, ptr @channelColumns, align 8
+  %1 = load i64, ptr @channelColumns, align 8         ; <i64> [#uses=1]
   %2 = shl i64 %1, 3                              ; <i64> [#uses=1]
   %3 = add i64 %2, 8                              ; <i64> [#uses=1]
-  %4 = call noalias i8* @malloc(i64 %3) nounwind  ; <i8*> [#uses=1]
-; CHECK: call noalias i8* @malloc
-  %5 = bitcast i8* %4 to i64*                     ; <i64*> [#uses=1]
-  store i64* %5, i64** @TOP, align 8
-  %6 = load i64*, i64** @TOP, align 8                   ; <i64*> [#uses=1]
-  %7 = getelementptr inbounds i64, i64* %6, i64 13     ; <i64*> [#uses=1]
-  store i64 0, i64* %7, align 8
+  %4 = call noalias ptr @malloc(i64 %3) nounwind  ; <ptr> [#uses=1]
+; CHECK: call noalias ptr @malloc
+  store ptr %4, ptr @TOP, align 8
+  %5 = load ptr, ptr @TOP, align 8                   ; <ptr> [#uses=1]
+  %6 = getelementptr inbounds i64, ptr %5, i64 13     ; <ptr> [#uses=1]
+  store i64 0, ptr %6, align 8
   ret void
 }
 
-declare noalias i8* @malloc(i64) nounwind
+declare noalias ptr @malloc(i64) nounwind

diff  --git a/llvm/test/Transforms/GlobalOpt/2010-02-25-MallocPromote.ll b/llvm/test/Transforms/GlobalOpt/2010-02-25-MallocPromote.ll
index fe18deb165864..e0ff0eeebc193 100644
--- a/llvm/test/Transforms/GlobalOpt/2010-02-25-MallocPromote.ll
+++ b/llvm/test/Transforms/GlobalOpt/2010-02-25-MallocPromote.ll
@@ -3,16 +3,15 @@
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
 target triple = "x86_64-unknown-linux-gnu"
 
- at fixLRBT = internal global i32* null              ; <i32**> [#uses=2]
+ at fixLRBT = internal global ptr null              ; <ptr> [#uses=2]
 
-declare noalias i8* @malloc(i32)
+declare noalias ptr @malloc(i32)
 
 define i32 @parser() nounwind {
 bb918:
-  %malloccall.i10 = call i8* @malloc(i32 16) nounwind ; <i8*> [#uses=1]
-  %0 = bitcast i8* %malloccall.i10 to i32*        ; <i32*> [#uses=1]
-  store i32* %0, i32** @fixLRBT, align 8
-  %1 = load i32*, i32** @fixLRBT, align 8               ; <i32*> [#uses=0]
-  %A = load i32, i32* %1
+  %malloccall.i10 = call ptr @malloc(i32 16) nounwind ; <ptr> [#uses=1]
+  store ptr %malloccall.i10, ptr @fixLRBT, align 8
+  %0 = load ptr, ptr @fixLRBT, align 8               ; <ptr> [#uses=0]
+  %A = load i32, ptr %0
   ret i32 %A
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/2010-02-26-MallocSROA.ll b/llvm/test/Transforms/GlobalOpt/2010-02-26-MallocSROA.ll
index 73766aa63a4d7..e9ff2a94d1709 100644
--- a/llvm/test/Transforms/GlobalOpt/2010-02-26-MallocSROA.ll
+++ b/llvm/test/Transforms/GlobalOpt/2010-02-26-MallocSROA.ll
@@ -5,23 +5,22 @@ target triple = "x86_64-unknown-linux-gnu"
 
 %struct.xyz = type { double, i32 }
 
- at Y = internal global %struct.xyz* null            ; <%struct.xyz**> [#uses=2]
- at numf2s = external global i32                     ; <i32*> [#uses=1]
+ at Y = internal global ptr null            ; <ptr> [#uses=2]
+ at numf2s = external global i32                     ; <ptr> [#uses=1]
 
 define fastcc void @init_net() nounwind {
 entry:
-  %0 = load i32, i32* @numf2s, align 4                 ; <i32> [#uses=1]
+  %0 = load i32, ptr @numf2s, align 4                 ; <i32> [#uses=1]
   %mallocsize2 = shl i32 %0, 4                    ; <i32> [#uses=1]
-  %malloccall3 = tail call i8* @malloc(i32 %mallocsize2) nounwind ; <i8*> [#uses=1]
-  %1 = bitcast i8* %malloccall3 to %struct.xyz*   ; <%struct.xyz*> [#uses=1]
-  store %struct.xyz* %1, %struct.xyz** @Y, align 8
+  %malloccall3 = tail call ptr @malloc(i32 %mallocsize2) nounwind ; <ptr> [#uses=1]
+  store ptr %malloccall3, ptr @Y, align 8
   ret void
 }
 
-define fastcc void @load_train(i8* %trainfile, i32 %mode, i32 %objects) nounwind {
+define fastcc void @load_train(ptr %trainfile, i32 %mode, i32 %objects) nounwind {
 entry:
-  %0 = load %struct.xyz*, %struct.xyz** @Y, align 8             ; <%struct.xyz*> [#uses=0]
+  %0 = load ptr, ptr @Y, align 8             ; <ptr> [#uses=0]
   ret void
 }
 
-declare noalias i8* @malloc(i32)
+declare noalias ptr @malloc(i32)

diff  --git a/llvm/test/Transforms/GlobalOpt/2010-10-19-WeakOdr.ll b/llvm/test/Transforms/GlobalOpt/2010-10-19-WeakOdr.ll
index 4ab20f009629e..7f705835284f4 100644
--- a/llvm/test/Transforms/GlobalOpt/2010-10-19-WeakOdr.ll
+++ b/llvm/test/Transforms/GlobalOpt/2010-10-19-WeakOdr.ll
@@ -6,10 +6,10 @@
 
 @SomeVar = weak_odr global i32 0
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [ { i32, void ()*, i8* } { i32 65535, void ()* @CTOR, i8* null } ]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [ { i32, ptr, ptr } { i32 65535, ptr @CTOR, ptr null } ]
 
 define internal void @CTOR() {
-  store i32 23, i32* @SomeVar
+  store i32 23, ptr @SomeVar
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/2011-04-09-EmptyGlobalCtors.ll b/llvm/test/Transforms/GlobalOpt/2011-04-09-EmptyGlobalCtors.ll
index 964df298734d7..ed884dce3af1a 100644
--- a/llvm/test/Transforms/GlobalOpt/2011-04-09-EmptyGlobalCtors.ll
+++ b/llvm/test/Transforms/GlobalOpt/2011-04-09-EmptyGlobalCtors.ll
@@ -1,5 +1,5 @@
 ; RUN: opt < %s -passes=globalopt -disable-output
 
-%0 = type { i32, void ()*, i8* }
+%0 = type { i32, ptr, ptr }
 @llvm.global_ctors = appending global [0 x %0] zeroinitializer
 

diff  --git a/llvm/test/Transforms/GlobalOpt/2012-05-11-blockaddress.ll b/llvm/test/Transforms/GlobalOpt/2012-05-11-blockaddress.ll
index 6175b6227240b..c7bb3e86c95c5 100644
--- a/llvm/test/Transforms/GlobalOpt/2012-05-11-blockaddress.ll
+++ b/llvm/test/Transforms/GlobalOpt/2012-05-11-blockaddress.ll
@@ -3,14 +3,14 @@
 ; from promoting @f to fastcc.
 
 ; CHECK-LABEL: define{{.*}}fastcc{{.*}}@f(
-define internal i8* @f() {
-  ret i8* blockaddress(@f, %L1)
+define internal ptr @f() {
+  ret ptr blockaddress(@f, %L1)
 L1:
-  ret i8* null
+  ret ptr null
 }
 
 define void @g() {
   ; CHECK: call{{.*}}fastcc{{.*}}@f
-  %p = call i8* @f()
+  %p = call ptr @f()
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/2021-08-02-CastStoreOnceP2I.ll b/llvm/test/Transforms/GlobalOpt/2021-08-02-CastStoreOnceP2I.ll
index adf18b90bc602..0e3a9c6783632 100644
--- a/llvm/test/Transforms/GlobalOpt/2021-08-02-CastStoreOnceP2I.ll
+++ b/llvm/test/Transforms/GlobalOpt/2021-08-02-CastStoreOnceP2I.ll
@@ -3,17 +3,17 @@
 ; This tests the assignemnt of non-pointer to global address
 ; (assert due to D106589).
 
- at a162 = internal global i16* null, align 1
+ at a162 = internal global ptr null, align 1
 
 define void @f363() {
 ; CHECK-LABEL: @f363(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = load i16*, i16** @a162, align 1
-; CHECK-NEXT:    store i16 0, i16* bitcast (i16** @a162 to i16*), align 1
+; CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr @a162, align 1
+; CHECK-NEXT:    store i16 0, ptr @a162, align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %0 = load i16*, i16** @a162, align 1
-  store i16 0, i16* bitcast (i16** @a162 to i16*), align 1
+  %0 = load ptr, ptr @a162, align 1
+  store i16 0, ptr @a162, align 1
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/2021-08-03-StoreOnceLoadMultiCasts.ll b/llvm/test/Transforms/GlobalOpt/2021-08-03-StoreOnceLoadMultiCasts.ll
index e5f5c043b767c..6ab867db57511 100644
--- a/llvm/test/Transforms/GlobalOpt/2021-08-03-StoreOnceLoadMultiCasts.ll
+++ b/llvm/test/Transforms/GlobalOpt/2021-08-03-StoreOnceLoadMultiCasts.ll
@@ -1,27 +1,26 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=globalopt -S < %s | FileCheck %s
 
- at g = internal global i32* null, align 8
+ at g = internal global ptr null, align 8
 
 define signext i32 @f() local_unnamed_addr {
 ; CHECK-LABEL: @f(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    call void @f1()
-; CHECK-NEXT:    store i32 1, i32* bitcast ([4 x i8]* @g.body to i32*), align 4
+; CHECK-NEXT:    store i32 1, ptr @g.body, align 4
 ; CHECK-NEXT:    call void @f1()
-; CHECK-NEXT:    store i8 2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @g.body, i32 0, i32 0), align 4
+; CHECK-NEXT:    store i8 2, ptr @g.body, align 4
 ; CHECK-NEXT:    ret i32 1
 ;
 entry:
-  %call = call i8* @malloc(i64 4)
-  %b = bitcast i8* %call to i32*
-  store i32* %b, i32** @g, align 8
+  %call = call ptr @malloc(i64 4)
+  store ptr %call, ptr @g, align 8
   call void @f1()
-  %0 = load i32*, i32** @g, align 8
-  store i32 1, i32* %0, align 4
+  %0 = load ptr, ptr @g, align 8
+  store i32 1, ptr %0, align 4
   call void @f1()
-  %1 = load i8*, i8** bitcast (i32** @g to i8**), align 8
-  store i8 2, i8* %1, align 4
+  %1 = load ptr, ptr @g, align 8
+  store i8 2, ptr %1, align 4
   ret i32 1
 }
 
@@ -29,15 +28,15 @@ define signext i32 @main() {
 ; CHECK-LABEL: @main(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[CALL:%.*]] = call signext i32 @f()
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* bitcast ([4 x i8]* @g.body to i32*), align 4
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr @g.body, align 4
 ; CHECK-NEXT:    ret i32 [[TMP0]]
 ;
 entry:
   %call = call signext i32 @f()
-  %0 = load i32*, i32** @g, align 8
-  %1 = load i32, i32* %0, align 4
+  %0 = load ptr, ptr @g, align 8
+  %1 = load i32, ptr %0, align 4
   ret i32 %1
 }
 
-declare noalias align 16 i8* @malloc(i64) allockind("alloc,uninitialized") allocsize(0)
+declare noalias align 16 ptr @malloc(i64) allockind("alloc,uninitialized") allocsize(0)
 declare void @f1()

diff  --git a/llvm/test/Transforms/GlobalOpt/GSROA-section.ll b/llvm/test/Transforms/GlobalOpt/GSROA-section.ll
index 9e6e1ff998ae2..97a9cc08c649e 100644
--- a/llvm/test/Transforms/GlobalOpt/GSROA-section.ll
+++ b/llvm/test/Transforms/GlobalOpt/GSROA-section.ll
@@ -12,8 +12,8 @@
 @array = internal global [ 2 x i32 ] zeroinitializer
 
 define i32 @foo() {
-  %A = load i32, i32* getelementptr ({ i32, i32 }, { i32, i32 }* @struct, i32 0, i32 0)
-  %B = load i32, i32* getelementptr ([ 2 x i32 ], [ 2 x i32 ]* @array, i32 0, i32 0)
+  %A = load i32, ptr getelementptr ({ i32, i32 }, ptr @struct, i32 0, i32 0)
+  %B = load i32, ptr @array
   ; Use the loaded values, so they won't get removed completely
   %R = add i32 %A, %B
   ret i32 %R
@@ -22,8 +22,8 @@ define i32 @foo() {
 ; We put stores in a 
diff erent function, so that the global variables won't get
 ; optimized away completely.
 define void @bar(i32 %R) {
-  store i32 %R, i32* getelementptr ([ 2 x i32 ], [ 2 x i32 ]* @array, i32 0, i32 0)
-  store i32 %R, i32* getelementptr ({ i32, i32 }, { i32, i32 }* @struct, i32 0, i32 0)
+  store i32 %R, ptr @array
+  store i32 %R, ptr getelementptr ({ i32, i32 }, ptr @struct, i32 0, i32 0)
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/MallocSROA-section-no-null-opt.ll b/llvm/test/Transforms/GlobalOpt/MallocSROA-section-no-null-opt.ll
index 59781ac543ece..037441dbc9373 100644
--- a/llvm/test/Transforms/GlobalOpt/MallocSROA-section-no-null-opt.ll
+++ b/llvm/test/Transforms/GlobalOpt/MallocSROA-section-no-null-opt.ll
@@ -4,31 +4,30 @@
 
 %struct.xyz = type { double, i32 }
 
- at Y = internal global %struct.xyz* null ,section ".foo"            ; <%struct.xyz**> [#uses=2]
- at numf2s = external global i32                     ; <i32*> [#uses=1]
+ at Y = internal global ptr null ,section ".foo"            ; <ptr> [#uses=2]
+ at numf2s = external global i32                     ; <ptr> [#uses=1]
 
 define void @init_net() #0 {
 ; CHECK-LABEL: init_net(
-; CHECK: load i32, i32* @numf2s
-; CHECK: call i8* @malloc
-; CHECK: store %struct.xyz* {{.*}}, %struct.xyz** @Y
+; CHECK: load i32, ptr @numf2s
+; CHECK: call ptr @malloc
+; CHECK: store ptr {{.*}}, ptr @Y
 entry:
-  %0 = load i32, i32* @numf2s, align 4                 ; <i32> [#uses=1]
+  %0 = load i32, ptr @numf2s, align 4                 ; <i32> [#uses=1]
   %mallocsize2 = shl i32 %0, 4                    ; <i32> [#uses=1]
-  %malloccall3 = tail call i8* @malloc(i32 %mallocsize2)  ; <i8*> [#uses=1]
-  %1 = bitcast i8* %malloccall3 to %struct.xyz*   ; <%struct.xyz*> [#uses=1]
-  store %struct.xyz* %1, %struct.xyz** @Y, align 8
+  %malloccall3 = tail call ptr @malloc(i32 %mallocsize2)  ; <ptr> [#uses=1]
+  store ptr %malloccall3, ptr @Y, align 8
   ret void
 }
 
-define %struct.xyz* @load_train() #0 {
+define ptr @load_train() #0 {
 ; CHECK-LABEL: load_train(
-; CHECK: load %struct.xyz*, %struct.xyz** @Y
+; CHECK: load ptr, ptr @Y
 entry:
-  %0 = load %struct.xyz*, %struct.xyz** @Y, align 8             ; <%struct.xyz*> [#uses=0]
-  ret %struct.xyz* %0
+  %0 = load ptr, ptr @Y, align 8             ; <ptr> [#uses=0]
+  ret ptr %0
 }
 
-declare noalias i8* @malloc(i32)
+declare noalias ptr @malloc(i32)
 
 attributes #0 = { null_pointer_is_valid }

diff  --git a/llvm/test/Transforms/GlobalOpt/MallocSROA-section.ll b/llvm/test/Transforms/GlobalOpt/MallocSROA-section.ll
index 3925da09efff3..75a83619e95aa 100644
--- a/llvm/test/Transforms/GlobalOpt/MallocSROA-section.ll
+++ b/llvm/test/Transforms/GlobalOpt/MallocSROA-section.ll
@@ -3,23 +3,22 @@
 
 %struct.xyz = type { double, i32 }
 
- at Y = internal global %struct.xyz* null ,section ".foo"            ; <%struct.xyz**> [#uses=2]
- at numf2s = external global i32                     ; <i32*> [#uses=1]
+ at Y = internal global ptr null ,section ".foo"            ; <ptr> [#uses=2]
+ at numf2s = external global i32                     ; <ptr> [#uses=1]
 
 define void @init_net()  {
 entry:
-  %0 = load i32, i32* @numf2s, align 4                 ; <i32> [#uses=1]
+  %0 = load i32, ptr @numf2s, align 4                 ; <i32> [#uses=1]
   %mallocsize2 = shl i32 %0, 4                    ; <i32> [#uses=1]
-  %malloccall3 = tail call i8* @malloc(i32 %mallocsize2)  ; <i8*> [#uses=1]
-  %1 = bitcast i8* %malloccall3 to %struct.xyz*   ; <%struct.xyz*> [#uses=1]
-  store %struct.xyz* %1, %struct.xyz** @Y, align 8
+  %malloccall3 = tail call ptr @malloc(i32 %mallocsize2)  ; <ptr> [#uses=1]
+  store ptr %malloccall3, ptr @Y, align 8
   ret void
 }
 
 define void @load_train()  {
 entry:
-  %0 = load %struct.xyz*, %struct.xyz** @Y, align 8             ; <%struct.xyz*> [#uses=0]
+  %0 = load ptr, ptr @Y, align 8             ; <ptr> [#uses=0]
   ret void
 }
 
-declare noalias i8* @malloc(i32)
+declare noalias ptr @malloc(i32)

diff  --git a/llvm/test/Transforms/GlobalOpt/SROA-section.ll b/llvm/test/Transforms/GlobalOpt/SROA-section.ll
index 013d056d2e83f..ca140db7806d7 100644
--- a/llvm/test/Transforms/GlobalOpt/SROA-section.ll
+++ b/llvm/test/Transforms/GlobalOpt/SROA-section.ll
@@ -11,16 +11,16 @@
 @G = internal global %T zeroinitializer, align 16, section ".foo"
 
 define void @test() {
-  store double 1.0, double* getelementptr (%T, %T* @G, i32 0, i32 0), align 16
-  store double 2.0, double* getelementptr (%T, %T* @G, i32 0, i32 1), align 8
-  store double 3.0, double* getelementptr (%T, %T* @G, i32 0, i32 2), align 16
+  store double 1.0, ptr @G, align 16
+  store double 2.0, ptr getelementptr (%T, ptr @G, i32 0, i32 1), align 8
+  store double 3.0, ptr getelementptr (%T, ptr @G, i32 0, i32 2), align 16
   ret void
 }
 
 define double @test2() {
-  %V1 = load double, double* getelementptr (%T, %T* @G, i32 0, i32 0), align 16
-  %V2 = load double, double* getelementptr (%T, %T* @G, i32 0, i32 1), align 8
-  %V3 = load double, double* getelementptr (%T, %T* @G, i32 0, i32 2), align 16
+  %V1 = load double, ptr @G, align 16
+  %V2 = load double, ptr getelementptr (%T, ptr @G, i32 0, i32 1), align 8
+  %V3 = load double, ptr getelementptr (%T, ptr @G, i32 0, i32 2), align 16
   %R = fadd double %V1, %V2
   %R2 = fadd double %R, %V3
   ret double %R2

diff  --git a/llvm/test/Transforms/GlobalOpt/address_space_initializer.ll b/llvm/test/Transforms/GlobalOpt/address_space_initializer.ll
index e27d5e3e02991..186fa4808ff17 100644
--- a/llvm/test/Transforms/GlobalOpt/address_space_initializer.ll
+++ b/llvm/test/Transforms/GlobalOpt/address_space_initializer.ll
@@ -16,29 +16,26 @@
 ; GPU-NOT: @g2 =
 
 define void @a() {
-  store i16 3, i16* @g0, align 8
-  store i16 5, i16* addrspacecast (i16 addrspace(3)* @g1 to i16*), align 8
-  store i16 7, i16* addrspacecast (i16 addrspace(1)* @g2 to i16*), align 8
+  store i16 3, ptr @g0, align 8
+  store i16 5, ptr addrspacecast (ptr addrspace(3) @g1 to ptr), align 8
+  store i16 7, ptr addrspacecast (ptr addrspace(1) @g2 to ptr), align 8
   ret void
 }
 
 define i8 @get0() {
-  %bc = bitcast i16* @g0 to i8*
-  %gep = getelementptr i8, i8* %bc, i64 1
-  %r = load i8, i8* %gep
+  %gep = getelementptr i8, ptr @g0, i64 1
+  %r = load i8, ptr %gep
   ret i8 %r
 }
 define i8 @get1() {
-  %ac = addrspacecast i16 addrspace(3)* @g1 to i16*
-  %bc = bitcast i16* %ac to i8*
-  %gep = getelementptr i8, i8* %bc, i64 1
-  %r = load i8, i8* %gep
+  %ac = addrspacecast ptr addrspace(3) @g1 to ptr
+  %gep = getelementptr i8, ptr %ac, i64 1
+  %r = load i8, ptr %gep
   ret i8 %r
 }
 define i8 @get2() {
-  %ac = addrspacecast i16 addrspace(1)* @g2 to i16*
-  %bc = bitcast i16* %ac to i8*
-  %gep = getelementptr i8, i8* %bc, i64 1
-  %r = load i8, i8* %gep
+  %ac = addrspacecast ptr addrspace(1) @g2 to ptr
+  %gep = getelementptr i8, ptr %ac, i64 1
+  %r = load i8, ptr %gep
   ret i8 %r
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/alias-resolve.ll b/llvm/test/Transforms/GlobalOpt/alias-resolve.ll
index efac61200a3ef..064ec57f0bb08 100644
--- a/llvm/test/Transforms/GlobalOpt/alias-resolve.ll
+++ b/llvm/test/Transforms/GlobalOpt/alias-resolve.ll
@@ -1,26 +1,26 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 
- at foo1 = alias void (), void ()* @foo2
+ at foo1 = alias void (), ptr @foo2
 ;; foo2 is dso_local and non-weak. Resolved.
-; CHECK: @foo1 = alias void (), void ()* @bar2
+; CHECK: @foo1 = alias void (), ptr @bar2
 
- at foo2 = dso_local alias void(), void()* @bar1
+ at foo2 = dso_local alias void(), ptr @bar1
 ;; bar1 is dso_local and non-weak. Resolved.
-; CHECK: @foo2 = dso_local alias void (), void ()* @bar2
+; CHECK: @foo2 = dso_local alias void (), ptr @bar2
 
- at bar1  = dso_local alias void (), void ()* @bar2
-; CHECK: @bar1 = dso_local alias void (), void ()* @bar2
+ at bar1  = dso_local alias void (), ptr @bar2
+; CHECK: @bar1 = dso_local alias void (), ptr @bar2
 
- at weak1 = weak dso_local alias void (), void ()* @bar2
+ at weak1 = weak dso_local alias void (), ptr @bar2
 ;; weak1 may be replaced with another definition in the linkage unit. Not resolved.
-; CHECK: @weak1 = weak dso_local alias void (), void ()* @bar2
+; CHECK: @weak1 = weak dso_local alias void (), ptr @bar2
 
- at bar4 = private unnamed_addr constant [2 x i8*] zeroinitializer
- at foo4 = weak_odr unnamed_addr alias i8*, getelementptr inbounds ([2 x i8*], [2 x i8*]* @bar4, i32 0, i32 1)
-; CHECK: @foo4 = weak_odr unnamed_addr alias i8*, getelementptr inbounds ([2 x i8*], [2 x i8*]* @bar4, i32 0, i32 1)
+ at bar4 = private unnamed_addr constant [2 x ptr] zeroinitializer
+ at foo4 = weak_odr unnamed_addr alias ptr, getelementptr inbounds ([2 x ptr], ptr @bar4, i32 0, i32 1)
+; CHECK: @foo4 = weak_odr unnamed_addr alias ptr, getelementptr inbounds ([2 x ptr], ptr @bar4, i32 0, i32 1)
 
- at priva  = private alias void (), void ()* @bar5
-; CHECK: @priva = private alias void (), void ()* @bar5
+ at priva  = private alias void (), ptr @bar5
+; CHECK: @priva = private alias void (), ptr @bar5
 
 define dso_local void @bar2() {
   ret void
@@ -57,7 +57,7 @@ entry:
          ret void
 }
 
- at foo3 = dso_local alias void (), void ()* @bar3
+ at foo3 = dso_local alias void (), ptr @bar3
 ; CHECK-NOT: bar3
 
 define internal void @bar3() {

diff  --git a/llvm/test/Transforms/GlobalOpt/alias-used-address-space.ll b/llvm/test/Transforms/GlobalOpt/alias-used-address-space.ll
index daf5acd8446c6..e60d35c599743 100644
--- a/llvm/test/Transforms/GlobalOpt/alias-used-address-space.ll
+++ b/llvm/test/Transforms/GlobalOpt/alias-used-address-space.ll
@@ -7,20 +7,20 @@ target datalayout = "p:32:32:32-p1:16:16:16"
 @i = internal addrspace(1) global i8 42
 
 ; CHECK: @ia = internal addrspace(1) global i8 42
- at ia = internal alias i8, i8 addrspace(1)* @i
+ at ia = internal alias i8, ptr addrspace(1) @i
 
- at llvm.used = appending global [1 x i8*] [i8* addrspacecast (i8 addrspace(1)* @ca to i8*)], section "llvm.metadata"
-; CHECK-DAG: @llvm.used = appending global [1 x i8*] [i8* addrspacecast (i8 addrspace(1)* @ca to i8*)], section "llvm.metadata"
+ at llvm.used = appending global [1 x ptr] [ptr addrspacecast (ptr addrspace(1) @ca to ptr)], section "llvm.metadata"
+; CHECK-DAG: @llvm.used = appending global [1 x ptr] [ptr addrspacecast (ptr addrspace(1) @ca to ptr)], section "llvm.metadata"
 
- at llvm.compiler.used = appending global [2 x i8*] [i8* addrspacecast(i8 addrspace(1)* @ia to i8*), i8* addrspacecast (i8 addrspace(1)* @i to i8*)], section "llvm.metadata"
-; CHECK-DAG: @llvm.compiler.used = appending global [1 x i8*] [i8* addrspacecast (i8 addrspace(1)* @ia to i8*)], section "llvm.metadata"
+ at llvm.compiler.used = appending global [2 x ptr] [ptr addrspacecast(ptr addrspace(1) @ia to ptr), ptr addrspacecast (ptr addrspace(1) @i to ptr)], section "llvm.metadata"
+; CHECK-DAG: @llvm.compiler.used = appending global [1 x ptr] [ptr addrspacecast (ptr addrspace(1) @ia to ptr)], section "llvm.metadata"
 
- at sameAsUsed = global [1 x i8*] [i8* addrspacecast(i8 addrspace(1)* @ca to i8*)]
-; CHECK-DAG: @sameAsUsed = local_unnamed_addr global [1 x i8*] [i8* addrspacecast (i8 addrspace(1)* @c to i8*)]
+ at sameAsUsed = global [1 x ptr] [ptr addrspacecast(ptr addrspace(1) @ca to ptr)]
+; CHECK-DAG: @sameAsUsed = local_unnamed_addr global [1 x ptr] [ptr addrspacecast (ptr addrspace(1) @c to ptr)]
 
- at ca = internal alias i8, i8 addrspace(1)* @c
-; CHECK: @ca = internal alias i8, i8 addrspace(1)* @c
+ at ca = internal alias i8, ptr addrspace(1) @c
+; CHECK: @ca = internal alias i8, ptr addrspace(1) @c
 
-define i8 addrspace(1)* @h() {
-  ret i8 addrspace(1)* @ca
+define ptr addrspace(1) @h() {
+  ret ptr addrspace(1) @ca
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/alias-used-section.ll b/llvm/test/Transforms/GlobalOpt/alias-used-section.ll
index e0ef39d8f67bd..ac7263d98ca1f 100644
--- a/llvm/test/Transforms/GlobalOpt/alias-used-section.ll
+++ b/llvm/test/Transforms/GlobalOpt/alias-used-section.ll
@@ -1,8 +1,8 @@
 ; RUN: opt -S -passes=globalopt < %s | FileCheck %s
 
 @_Z17in_custom_section = internal global i8 42, section "CUSTOM"
- at in_custom_section = internal alias i8, i8* @_Z17in_custom_section
+ at in_custom_section = internal alias i8, ptr @_Z17in_custom_section
 
 ; CHECK: @in_custom_section = internal global i8 42, section "CUSTOM"
 
- at llvm.used = appending global [1 x i8*] [i8* @in_custom_section], section "llvm.metadata"
+ at llvm.used = appending global [1 x ptr] [ptr @in_custom_section], section "llvm.metadata"

diff  --git a/llvm/test/Transforms/GlobalOpt/alias-used.ll b/llvm/test/Transforms/GlobalOpt/alias-used.ll
index d8b7a765ed30f..35889c1e59754 100644
--- a/llvm/test/Transforms/GlobalOpt/alias-used.ll
+++ b/llvm/test/Transforms/GlobalOpt/alias-used.ll
@@ -4,46 +4,46 @@
 
 @i = internal global i8 42
 ; CHECK: @ia = internal global i8 42
- at ia = internal alias i8, i8* @i
+ at ia = internal alias i8, ptr @i
 
- at llvm.used = appending global [3 x i8*] [i8* bitcast (void ()* @fa to i8*), i8* bitcast (void ()* @f to i8*), i8* @ca], section "llvm.metadata"
-; CHECK-DAG: @llvm.used = appending global [3 x i8*] [i8* @ca, i8* bitcast (void ()* @f to i8*), i8* bitcast (void ()* @fa to i8*)], section "llvm.metadata"
+ at llvm.used = appending global [3 x ptr] [ptr @fa, ptr @f, ptr @ca], section "llvm.metadata"
+; CHECK-DAG: @llvm.used = appending global [3 x ptr] [ptr @ca, ptr @f, ptr @fa], section "llvm.metadata"
 
- at llvm.compiler.used = appending global [4 x i8*] [i8* bitcast (void ()* @fa3 to i8*), i8* bitcast (void ()* @fa to i8*), i8* @ia, i8* @i], section "llvm.metadata"
-; CHECK-DAG: @llvm.compiler.used = appending global [2 x i8*] [i8* bitcast (void ()* @fa3 to i8*), i8* @ia], section "llvm.metadata"
+ at llvm.compiler.used = appending global [4 x ptr] [ptr @fa3, ptr @fa, ptr @ia, ptr @i], section "llvm.metadata"
+; CHECK-DAG: @llvm.compiler.used = appending global [2 x ptr] [ptr @fa3, ptr @ia], section "llvm.metadata"
 
- at sameAsUsed = global [3 x i8*] [i8* bitcast (void ()* @fa to i8*), i8* bitcast (void ()* @f to i8*), i8* @ca]
-; CHECK-DAG: @sameAsUsed = local_unnamed_addr global [3 x i8*] [i8* bitcast (void ()* @f to i8*), i8* bitcast (void ()* @f to i8*), i8* @c]
+ at sameAsUsed = global [3 x ptr] [ptr @fa, ptr @f, ptr @ca]
+; CHECK-DAG: @sameAsUsed = local_unnamed_addr global [3 x ptr] [ptr @f, ptr @f, ptr @c]
 
- at other = global i32* bitcast (void ()* @fa to i32*)
-; CHECK-DAG: @other = local_unnamed_addr global i32* bitcast (void ()* @f to i32*)
+ at other = global ptr @fa
+; CHECK-DAG: @other = local_unnamed_addr global ptr @f
 
- at fa = internal alias void (), void ()* @f
-; CHECK: @fa = internal alias void (), void ()* @f
+ at fa = internal alias void (), ptr @f
+; CHECK: @fa = internal alias void (), ptr @f
 
- at fa2 = internal alias void (), void ()* @f
+ at fa2 = internal alias void (), ptr @f
 ; CHECK-NOT: @fa2
 
- at fa3 = internal alias void (), void ()* @f
+ at fa3 = internal alias void (), ptr @f
 ; CHECK: @fa3
 
- at ca = internal alias i8, i8* @c
-; CHECK: @ca = internal alias i8, i8* @c
+ at ca = internal alias i8, ptr @c
+; CHECK: @ca = internal alias i8, ptr @c
 
 define hidden void @f() {
   ret void
 }
 
-define i8* @g() {
-  ret i8* bitcast (void ()* @fa to i8*);
+define ptr @g() {
+  ret ptr @fa;
 }
 
-define i8* @g2() {
-  ret i8* bitcast (void ()* @fa2 to i8*);
+define ptr @g2() {
+  ret ptr @fa2;
 }
 
-define i8* @h() {
-  ret i8* @ca
+define ptr @h() {
+  ret ptr @ca
 }
 
 ; Check that GlobalOpt doesn't try to resolve aliases with GEP operands.
@@ -51,16 +51,16 @@ define i8* @h() {
 %struct.S = type { i32, i32, i32 }
 @s = global %struct.S { i32 1, i32 2, i32 3 }, align 4
 
- at alias1 = alias i32, i32* getelementptr inbounds (%struct.S, %struct.S* @s, i64 0, i32 1)
- at alias2 = alias i32, i32* getelementptr inbounds (%struct.S, %struct.S* @s, i64 0, i32 2)
+ at alias1 = alias i32, ptr getelementptr inbounds (%struct.S, ptr @s, i64 0, i32 1)
+ at alias2 = alias i32, ptr getelementptr inbounds (%struct.S, ptr @s, i64 0, i32 2)
 
-; CHECK: load i32, i32* @alias1, align 4
-; CHECK: load i32, i32* @alias2, align 4
+; CHECK: load i32, ptr @alias1, align 4
+; CHECK: load i32, ptr @alias2, align 4
 
 define i32 @foo1() {
 entry:
-  %0 = load i32, i32* @alias1, align 4
-  %1 = load i32, i32* @alias2, align 4
+  %0 = load i32, ptr @alias1, align 4
+  %1 = load i32, ptr @alias2, align 4
   %add = add nsw i32 %1, %0
   ret i32 %add
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/amdgcn-ctor-alloca.ll b/llvm/test/Transforms/GlobalOpt/amdgcn-ctor-alloca.ll
index 86553e4cdf82d..bc36b0e3f0b9f 100644
--- a/llvm/test/Transforms/GlobalOpt/amdgcn-ctor-alloca.ll
+++ b/llvm/test/Transforms/GlobalOpt/amdgcn-ctor-alloca.ll
@@ -1,17 +1,17 @@
 ; RUN: opt -data-layout=A5 -passes=globalopt %s -S -o - | FileCheck %s
 
 ; CHECK-NOT: @g
- at g = internal addrspace(1) global i32* zeroinitializer
+ at g = internal addrspace(1) global ptr zeroinitializer
 
-; CHECK: @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] zeroinitializer
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }]
-   [{ i32, void ()*, i8* } { i32 65535, void ()* @ctor, i8* null }]
+; CHECK: @llvm.global_ctors = appending global [0 x { i32, ptr, ptr }] zeroinitializer
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }]
+   [{ i32, ptr, ptr } { i32 65535, ptr @ctor, ptr null }]
 
 ; CHECK-NOT: @ctor
 define internal void @ctor()  {
   %addr = alloca i32, align 8, addrspace(5)
-  %tmp = addrspacecast i32 addrspace(5)* %addr to i32*
-  store i32* %tmp, i32* addrspace(1)* @g
+  %tmp = addrspacecast ptr addrspace(5) %addr to ptr
+  store ptr %tmp, ptr addrspace(1) @g
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/array-elem-refs.ll b/llvm/test/Transforms/GlobalOpt/array-elem-refs.ll
index ad5fdca611fe2..369ec759e395f 100644
--- a/llvm/test/Transforms/GlobalOpt/array-elem-refs.ll
+++ b/llvm/test/Transforms/GlobalOpt/array-elem-refs.ll
@@ -4,16 +4,16 @@ target triple = "x86_64-unknown-linux-gnu"
 
 %struct.S = type { i8, i8 }
 
- at c = internal global i8** bitcast (i8* getelementptr (i8, i8* bitcast ([8 x i8*]* @b to i8*), i64 48) to i8**), align 8
- at b = internal global [8 x i8*] [i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* getelementptr inbounds (%struct.S, %struct.S* @a, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S, %struct.S* @a, i32 0, i32 0), i64 1)], align 16
+ at c = internal global ptr getelementptr (i8, ptr @b, i64 48), align 8
+ at b = internal global [8 x ptr] [ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr @a, ptr getelementptr (i8, ptr @a, i64 1)], align 16
 @a = internal global %struct.S zeroinitializer, align 1
 
 ; Function Attrs: nounwind uwtable
 define signext i8 @foo() #0 {
 entry:
-  %0 = load i8**, i8*** @c, align 8
-  %1 = load i8*, i8** %0, align 8
-  %2 = load i8, i8* %1, align 1
+  %0 = load ptr, ptr @c, align 8
+  %1 = load ptr, ptr %0, align 8
+  %2 = load i8, ptr %1, align 1
   ret i8 %2
 
 ; CHECK-LABEL: @foo
@@ -24,7 +24,7 @@ entry:
 define i32 @main() #0 {
 entry:
   %retval = alloca i32, align 4
-  store i32 0, i32* %retval
+  store i32 0, ptr %retval
   ret i32 0
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/assume.ll b/llvm/test/Transforms/GlobalOpt/assume.ll
index c88bf3b8a0836..4aee636b96789 100644
--- a/llvm/test/Transforms/GlobalOpt/assume.ll
+++ b/llvm/test/Transforms/GlobalOpt/assume.ll
@@ -2,7 +2,7 @@
 
 ; CHECK: @tmp = local_unnamed_addr global i32 42
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I_a, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I_a, ptr null }]
 @tmp = global i32 0
 
 define i32 @TheAnswerToLifeTheUniverseAndEverything() {
@@ -12,7 +12,7 @@ define i32 @TheAnswerToLifeTheUniverseAndEverything() {
 define void @_GLOBAL__I_a() {
 enter:
   %tmp1 = call i32 @TheAnswerToLifeTheUniverseAndEverything()
-  store i32 %tmp1, i32* @tmp
+  store i32 %tmp1, ptr @tmp
   %cmp = icmp eq i32 %tmp1, 42
   call void @llvm.assume(i1 %cmp)
   ret void

diff  --git a/llvm/test/Transforms/GlobalOpt/atexit.ll b/llvm/test/Transforms/GlobalOpt/atexit.ll
index 737ff685d2270..e6baeb770f0be 100644
--- a/llvm/test/Transforms/GlobalOpt/atexit.ll
+++ b/llvm/test/Transforms/GlobalOpt/atexit.ll
@@ -1,6 +1,6 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 
 ; CHECK: ModuleID
-define internal i32 @__cxa_atexit(void (i8*)* nocapture %func, i8* nocapture %arg, i8* nocapture %dso_handle) nounwind readnone optsize noimplicitfloat {
+define internal i32 @__cxa_atexit(ptr nocapture %func, ptr nocapture %arg, ptr nocapture %dso_handle) nounwind readnone optsize noimplicitfloat {
   unreachable
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/atomic.ll b/llvm/test/Transforms/GlobalOpt/atomic.ll
index 3d1f395606b1d..1145b9a6f6e2f 100644
--- a/llvm/test/Transforms/GlobalOpt/atomic.ll
+++ b/llvm/test/Transforms/GlobalOpt/atomic.ll
@@ -8,19 +8,19 @@
 
 define void @test1() {
 entry:
-  %0 = load atomic i8, i8* bitcast (i64* @GV1 to i8*) acquire, align 8
+  %0 = load atomic i8, ptr @GV1 acquire, align 8
   ret void
 }
 
 ; PR17163
 define void @test2a() {
 entry:
-  store atomic i32 10, i32* @GV2 seq_cst, align 4
+  store atomic i32 10, ptr @GV2 seq_cst, align 4
   ret void
 }
 define i32 @test2b() {
 entry:
-  %atomic-load = load atomic i32, i32* @GV2 seq_cst, align 4
+  %atomic-load = load atomic i32, ptr @GV2 seq_cst, align 4
   ret i32 %atomic-load
 }
 
@@ -29,6 +29,6 @@ define i64 @test3() {
 ; CHECK-LABEL: @test3
 ; CHECK: ret i64 1
 
-  %val = load atomic i64, i64* @GV1 acquire, align 8
+  %val = load atomic i64, ptr @GV1 acquire, align 8
   ret i64 %val
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/available_externally_global_ctors.ll b/llvm/test/Transforms/GlobalOpt/available_externally_global_ctors.ll
index eee1e24bbc065..f1f0075e7779b 100644
--- a/llvm/test/Transforms/GlobalOpt/available_externally_global_ctors.ll
+++ b/llvm/test/Transforms/GlobalOpt/available_externally_global_ctors.ll
@@ -4,14 +4,14 @@ target triple = "x86_64-apple-macosx10.11.0"
 ; RUN: opt -S -passes=globalopt < %s | FileCheck %s
 
 ; Verify that the initialization of the available_externally global is not eliminated
-; CHECK: @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @foo_static_init, i8* null }]
+; CHECK: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @foo_static_init, ptr null }]
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @foo_static_init, i8* null }]
- at foo_external = available_externally global void ()* null
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @foo_static_init, ptr null }]
+ at foo_external = available_externally global ptr null
 
 define internal void @foo_static_init() {
 entry:
-  store void ()* @foo_impl, void ()** @foo_external
+  store ptr @foo_impl, ptr @foo_external
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/basictest.ll b/llvm/test/Transforms/GlobalOpt/basictest.ll
index ee8ad33eb8d08..6d7fcdd96dfda 100644
--- a/llvm/test/Transforms/GlobalOpt/basictest.ll
+++ b/llvm/test/Transforms/GlobalOpt/basictest.ll
@@ -1,9 +1,9 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 
 ; CHECK-NOT: global
- at X = internal global i32 4              ; <i32*> [#uses=1]
+ at X = internal global i32 4              ; <ptr> [#uses=1]
 
 define i32 @foo() {
-        %V = load i32, i32* @X               ; <i32> [#uses=1]
+        %V = load i32, ptr @X               ; <i32> [#uses=1]
         ret i32 %V
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/blockaddress.ll b/llvm/test/Transforms/GlobalOpt/blockaddress.ll
index 8e22b7b8d09e2..b0083334eef4f 100644
--- a/llvm/test/Transforms/GlobalOpt/blockaddress.ll
+++ b/llvm/test/Transforms/GlobalOpt/blockaddress.ll
@@ -1,6 +1,6 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 
- at x = internal global i8* zeroinitializer
+ at x = internal global ptr zeroinitializer
 
 define void @f() {
 ; CHECK-LABEL: @f(
@@ -8,7 +8,7 @@ define void @f() {
 ; Check that we don't hit an assert in Constant::IsThreadDependent()
 ; when storing this blockaddress into a global.
 
-  store i8* blockaddress(@g, %here), i8** @x, align 8
+  store ptr blockaddress(@g, %here), ptr @x, align 8
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/calloc-promote.ll b/llvm/test/Transforms/GlobalOpt/calloc-promote.ll
index 9983bc66965fd..c369ed9b9fc11 100644
--- a/llvm/test/Transforms/GlobalOpt/calloc-promote.ll
+++ b/llvm/test/Transforms/GlobalOpt/calloc-promote.ll
@@ -1,21 +1,19 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=globalopt -S < %s | FileCheck %s
 
- at g = internal global i32* null, align 8
+ at g = internal global ptr null, align 8
 
 define signext i32 @f() local_unnamed_addr {
 ; CHECK-LABEL: @f(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i64(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @g.body, i32 0, i32 0), i8 0, i64 4, i1 false)
-; CHECK-NEXT:    store i16 -1, i16* bitcast ([4 x i8]* @g.body to i16*), align 2
+; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr @g.body, i8 0, i64 4, i1 false)
+; CHECK-NEXT:    store i16 -1, ptr @g.body, align 2
 ; CHECK-NEXT:    ret i32 0
 ;
 entry:
-  %call = call i8* @calloc(i64 1, i64 4)
-  %b = bitcast i8* %call to i32*
-  store i32* %b, i32** @g, align 8
-  %b2 = bitcast i8* %call to i16*
-  store i16 -1, i16* %b2
+  %call = call ptr @calloc(i64 1, i64 4)
+  store ptr %call, ptr @g, align 8
+  store i16 -1, ptr %call
   ret i32 0
 }
 
@@ -24,26 +22,26 @@ define signext i32 @main() {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[CALL:%.*]] = call signext i32 @f()
 ; CHECK-NEXT:    call void @f1()
-; CHECK-NEXT:    store i32 1, i32* bitcast ([4 x i8]* @g.body to i32*), align 4
+; CHECK-NEXT:    store i32 1, ptr @g.body, align 4
 ; CHECK-NEXT:    call void @f1()
-; CHECK-NEXT:    store i8 2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @g.body, i32 0, i32 0), align 4
+; CHECK-NEXT:    store i8 2, ptr @g.body, align 4
 ; CHECK-NEXT:    call void @f1()
-; CHECK-NEXT:    [[RES:%.*]] = load i32, i32* bitcast ([4 x i8]* @g.body to i32*), align 4
+; CHECK-NEXT:    [[RES:%.*]] = load i32, ptr @g.body, align 4
 ; CHECK-NEXT:    ret i32 [[RES]]
 ;
 entry:
   %call = call signext i32 @f()
   call void @f1()
-  %v0 = load i32*, i32** @g, align 8
-  store i32 1, i32* %v0, align 4
+  %v0 = load ptr, ptr @g, align 8
+  store i32 1, ptr %v0, align 4
   call void @f1()
-  %v1 = load i8*, i8** bitcast (i32** @g to i8**), align 8
-  store i8 2, i8* %v1, align 4
+  %v1 = load ptr, ptr @g, align 8
+  store i8 2, ptr %v1, align 4
   call void @f1()
-  %v2 = load i32*, i32** @g, align 8
-  %res = load i32, i32* %v2, align 4
+  %v2 = load ptr, ptr @g, align 8
+  %res = load i32, ptr %v2, align 4
   ret i32 %res
 }
 
-declare noalias align 16 i8* @calloc(i64, i64) allockind("alloc,zeroed") allocsize(0,1)
+declare noalias align 16 ptr @calloc(i64, i64) allockind("alloc,zeroed") allocsize(0,1)
 declare void @f1()

diff  --git a/llvm/test/Transforms/GlobalOpt/coldcc_stress_test.ll b/llvm/test/Transforms/GlobalOpt/coldcc_stress_test.ll
index ad289d835a555..35c5b30bc2643 100644
--- a/llvm/test/Transforms/GlobalOpt/coldcc_stress_test.ll
+++ b/llvm/test/Transforms/GlobalOpt/coldcc_stress_test.ll
@@ -1,38 +1,38 @@
 ; RUN: opt < %s -passes=globalopt -S -enable-coldcc-stress-test -mtriple=powerpc64le-unknown-linux-gnu | FileCheck %s -check-prefix=COLDCC
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s -check-prefix=CHECK
 
-define internal i32 @callee_default(i32* %m) {
+define internal i32 @callee_default(ptr %m) {
 ; COLDCC-LABEL: define internal coldcc i32 @callee_default
 ; CHECK-LABEL: define internal fastcc i32 @callee_default
-  %v = load i32, i32* %m
+  %v = load i32, ptr %m
   ret i32 %v
 }
 
-define internal fastcc i32 @callee_fastcc(i32* %m) {
+define internal fastcc i32 @callee_fastcc(ptr %m) {
 ; COLDCC-LABEL: define internal fastcc i32 @callee_fastcc
 ; CHECK-LABEL: define internal fastcc i32 @callee_fastcc
-  %v = load i32, i32* %m
+  %v = load i32, ptr %m
   ret i32 %v
 }
 
-define internal coldcc i32 @callee_coldcc(i32* %m) {
+define internal coldcc i32 @callee_coldcc(ptr %m) {
 ; COLDCC-LABEL: define internal coldcc i32 @callee_coldcc
 ; CHECK-LABEL: define internal coldcc i32 @callee_coldcc
-  %v = load i32, i32* %m
+  %v = load i32, ptr %m
   ret i32 %v
 }
 
-define i32 @callee(i32* %m) {
-  %v = load i32, i32* %m
+define i32 @callee(ptr %m) {
+  %v = load i32, ptr %m
   ret i32 %v
 }
 
 define void @caller() {
   %m = alloca i32
-  call i32 @callee_default(i32* %m)
-  call fastcc i32 @callee_fastcc(i32* %m)
-  call coldcc i32 @callee_coldcc(i32* %m)
-  call i32 @callee(i32* %m)
+  call i32 @callee_default(ptr %m)
+  call fastcc i32 @callee_fastcc(ptr %m)
+  call coldcc i32 @callee_coldcc(ptr %m)
+  call i32 @callee(ptr %m)
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/compiler-used.ll b/llvm/test/Transforms/GlobalOpt/compiler-used.ll
index e50e17d8df5a9..1e103b802cda1 100644
--- a/llvm/test/Transforms/GlobalOpt/compiler-used.ll
+++ b/llvm/test/Transforms/GlobalOpt/compiler-used.ll
@@ -7,10 +7,10 @@ define void @foo() {
   ret void
 }
 
- at llvm.used = appending global [1 x i8*] [i8* bitcast (void ()* @foo to i8*)], section "llvm.metadata"
+ at llvm.used = appending global [1 x ptr] [ptr @foo], section "llvm.metadata"
 
- at llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @foo to i8*)], section "llvm.metadata"
+ at llvm.compiler.used = appending global [1 x ptr] [ptr @foo], section "llvm.metadata"
 
 ; CHECK-NOT: @llvm.compiler.used
-; CHECK: @llvm.used = appending global [1 x i8*] [i8* bitcast (void ()* @foo to i8*)], section "llvm.metadata"
+; CHECK: @llvm.used = appending global [1 x ptr] [ptr @foo], section "llvm.metadata"
 ; CHECK-NOT: @llvm.compiler.used

diff  --git a/llvm/test/Transforms/GlobalOpt/const-return-status-atomic.ll b/llvm/test/Transforms/GlobalOpt/const-return-status-atomic.ll
index acc161edfc138..9bc1e5a4ac52f 100644
--- a/llvm/test/Transforms/GlobalOpt/const-return-status-atomic.ll
+++ b/llvm/test/Transforms/GlobalOpt/const-return-status-atomic.ll
@@ -13,7 +13,7 @@ define void @test1() local_unnamed_addr {
 ; CHECK-LABEL: @test1
 ; CHECK-NEXT: ret void
 
-  %val = load atomic i8, i8* bitcast (i64* @GV1 to i8*) acquire, align 8
+  %val = load atomic i8, ptr @GV1 acquire, align 8
   ret void
 }
 
@@ -21,6 +21,6 @@ define i64 @test2() local_unnamed_addr {
 ; CHECK-LABEL: @test2
 ; CHECK-NEXT: ret i64 1
 
-  %val = load atomic i64, i64* @GV1 acquire, align 8
+  %val = load atomic i64, ptr @GV1 acquire, align 8
   ret i64 %val
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/const-return-status.ll b/llvm/test/Transforms/GlobalOpt/const-return-status.ll
index 6d4c70b2102ec..3fe42c20a3482 100644
--- a/llvm/test/Transforms/GlobalOpt/const-return-status.ll
+++ b/llvm/test/Transforms/GlobalOpt/const-return-status.ll
@@ -9,7 +9,7 @@
 
 ; CHECK: entry:
 ; CHECK-NEXT: %call = call i32 @f(i32 0)
-; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 bitcast (i32* @dst to i8*), i8* align 4 bitcast ([1 x i32]* @src to i8*), i64 1, i1 false)
+; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 @dst, ptr align 4 @src, i64 1, i1 false)
 ; CHECK-NEXT: ret void
 
 @src = internal unnamed_addr global [1 x i32] zeroinitializer, align 4
@@ -17,12 +17,12 @@
 
 define dso_local void @d() local_unnamed_addr {
 entry:
-  %0 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @src, i64 0, i64 0), align 4
+  %0 = load i32, ptr @src, align 4
   %call = call i32 @f(i32 %0)
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 bitcast (i32* @dst to i8*), i8* align 4 bitcast ([1 x i32]* @src to i8*), i64 1, i1 false)
+  call void @llvm.memcpy.p0.p0.i64(ptr align 4 @dst, ptr align 4 @src, i64 1, i1 false)
   ret void
 }
 
 declare dso_local i32 @f(i32) local_unnamed_addr
 
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg)
+declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg)

diff  --git a/llvm/test/Transforms/GlobalOpt/constantexpr-dangle.ll b/llvm/test/Transforms/GlobalOpt/constantexpr-dangle.ll
index 715db352c8e89..82e7f6449611e 100644
--- a/llvm/test/Transforms/GlobalOpt/constantexpr-dangle.ll
+++ b/llvm/test/Transforms/GlobalOpt/constantexpr-dangle.ll
@@ -6,7 +6,7 @@ define internal float @foo() {
 }
 
 define float @bar() {
-        %tmp1 = call float (...) bitcast (float ()* @foo to float (...)*)( )
+        %tmp1 = call float (...) @foo( )
         %tmp2 = fmul float %tmp1, 1.000000e+01           ; <float> [#uses=1]
         ret float %tmp2
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/constantfold-initializers.ll b/llvm/test/Transforms/GlobalOpt/constantfold-initializers.ll
index eb9dad15088a1..ca844f63937ca 100644
--- a/llvm/test/Transforms/GlobalOpt/constantfold-initializers.ll
+++ b/llvm/test/Transforms/GlobalOpt/constantfold-initializers.ll
@@ -5,7 +5,7 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 @.str91250 = global [3 x i8] zeroinitializer
 
 ; CHECK: @A = local_unnamed_addr global i1 false
- at A = global i1 icmp ne (i64 sub nsw (i64 ptrtoint (i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str91250, i64 0, i64 1) to i64), i64 ptrtoint ([3 x i8]* @.str91250 to i64)), i64 1)
+ at A = global i1 icmp ne (i64 sub nsw (i64 ptrtoint (ptr getelementptr inbounds ([3 x i8], ptr @.str91250, i64 0, i64 1) to i64), i64 ptrtoint (ptr @.str91250 to i64)), i64 1)
 
 ; PR11352
 
@@ -15,13 +15,13 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 ; PR12642
 %PR12642.struct = type { i8 }
 @PR12642.s = global <{}> zeroinitializer, align 1
- at PR12642.p = constant %PR12642.struct* bitcast (i8* getelementptr (i8, i8* bitcast (<{}>* @PR12642.s to i8*), i64 1) to %PR12642.struct*), align 8
+ at PR12642.p = constant ptr getelementptr (i8, ptr @PR12642.s, i64 1), align 8
 
 define internal void @test1() {
 entry:
-  store i32 1, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @xs, i64 0, i64 0)
-  %0 = load i32, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @xs, i32 0, i64 0), align 4
-  store i32 %0, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @xs, i64 0, i64 1)
+  store i32 1, ptr @xs
+  %0 = load i32, ptr @xs, align 4
+  store i32 %0, ptr getelementptr inbounds ([2 x i32], ptr @xs, i64 0, i64 1)
   ret void
 }
 
@@ -34,50 +34,49 @@ entry:
 ; CHECK-NOT: @f
 ; CHECK: @m = local_unnamed_addr global i32 13
 
-define internal i32 @test2_helper(%closure* %this, i32 %b) {
+define internal i32 @test2_helper(ptr %this, i32 %b) {
 entry:
-  %0 = getelementptr inbounds %closure, %closure* %this, i32 0, i32 0
-  %1 = load i32, i32* %0, align 4
-  %add = add nsw i32 %1, %b
+  %0 = load i32, ptr %this, align 4
+  %add = add nsw i32 %0, %b
   ret i32 %add
 }
 
 define internal void @test2() {
 entry:
-  store i32 4, i32* getelementptr inbounds (%closure, %closure* @f, i32 0, i32 0)
-  %call = call i32 @test2_helper(%closure* @f, i32 9)
-  store i32 %call, i32* @m, align 4
+  store i32 4, ptr @f
+  %call = call i32 @test2_helper(ptr @f, i32 9)
+  store i32 %call, ptr @m, align 4
   ret void
 }
 
 ; PR19955
 
- at dllimportptr = global i32* null, align 4
-; CHECK: @dllimportptr = local_unnamed_addr global i32* null, align 4
+ at dllimportptr = global ptr null, align 4
+; CHECK: @dllimportptr = local_unnamed_addr global ptr null, align 4
 @dllimportvar = external dllimport global i32
 define internal void @test3() {
 entry:
-  store i32* @dllimportvar, i32** @dllimportptr, align 4
+  store ptr @dllimportvar, ptr @dllimportptr, align 4
   ret void
 }
 
- at dllexportptr = global i32* null, align 4
-; CHECK: @dllexportptr = local_unnamed_addr global i32* @dllexportvar, align 4
+ at dllexportptr = global ptr null, align 4
+; CHECK: @dllexportptr = local_unnamed_addr global ptr @dllexportvar, align 4
 @dllexportvar = dllexport global i32 0, align 4
 ; CHECK: @dllexportvar = dllexport global i32 20, align 4
 define internal void @test4() {
 entry:
-  store i32 20, i32* @dllexportvar, align 4
-  store i32* @dllexportvar, i32** @dllexportptr, align 4
+  store i32 20, ptr @dllexportvar, align 4
+  store ptr @dllexportvar, ptr @dllexportptr, align 4
   ret void
 }
 
- at threadlocalptr = global i32* null, align 4
-; CHECK: @threadlocalptr = global i32* null, align 4
+ at threadlocalptr = global ptr null, align 4
+; CHECK: @threadlocalptr = global ptr null, align 4
 @threadlocalvar = external thread_local global i32
 define internal void @test5() {
 entry:
-  store i32* @threadlocalvar, i32** @threadlocalptr, align 4
+  store ptr @threadlocalvar, ptr @threadlocalptr, align 4
   ret void
 }
 
@@ -85,19 +84,19 @@ entry:
 @test6_v2 = global i32 0, align 4
 ; CHECK: @test6_v2 = local_unnamed_addr global i32 42, align 4
 define internal void @test6() {
-  %load = load { i32, i32 }, { i32, i32 }* @test6_v1, align 8
+  %load = load { i32, i32 }, ptr @test6_v1, align 8
   %xv0 = extractvalue { i32, i32 } %load, 0
   %iv = insertvalue { i32, i32 } %load, i32 %xv0, 1
   %xv1 = extractvalue { i32, i32 } %iv, 1
-  store i32 %xv1, i32* @test6_v2, align 4
+  store i32 %xv1, ptr @test6_v2, align 4
   ret void
 }
 
 @llvm.global_ctors = appending constant
-  [6 x { i32, void ()*, i8* }]
-  [{ i32, void ()*, i8* } { i32 65535, void ()* @test1, i8* null },
-   { i32, void ()*, i8* } { i32 65535, void ()* @test2, i8* null },
-   { i32, void ()*, i8* } { i32 65535, void ()* @test3, i8* null },
-   { i32, void ()*, i8* } { i32 65535, void ()* @test4, i8* null },
-   { i32, void ()*, i8* } { i32 65535, void ()* @test5, i8* null },
-   { i32, void ()*, i8* } { i32 65535, void ()* @test6, i8* null }]
+  [6 x { i32, ptr, ptr }]
+  [{ i32, ptr, ptr } { i32 65535, ptr @test1, ptr null },
+   { i32, ptr, ptr } { i32 65535, ptr @test2, ptr null },
+   { i32, ptr, ptr } { i32 65535, ptr @test3, ptr null },
+   { i32, ptr, ptr } { i32 65535, ptr @test4, ptr null },
+   { i32, ptr, ptr } { i32 65535, ptr @test5, ptr null },
+   { i32, ptr, ptr } { i32 65535, ptr @test6, ptr null }]

diff  --git a/llvm/test/Transforms/GlobalOpt/crash-2.ll b/llvm/test/Transforms/GlobalOpt/crash-2.ll
index 3aabb6994a197..fe13faa0a6900 100644
--- a/llvm/test/Transforms/GlobalOpt/crash-2.ll
+++ b/llvm/test/Transforms/GlobalOpt/crash-2.ll
@@ -11,9 +11,9 @@
 @g_71 = internal global %struct.S0.1.7.13 { i8 1, i8 -93, i8 58, i8 -1, i16 -5, [2 x i8] undef }, align 4
 @g_114 = external global i8, align 1
 @g_30 = external global { i32, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }, align 4
- at g_271 = internal global [7 x [6 x [5 x i8*]]] [[6 x [5 x i8*]] [[5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* null], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* null, i8* null], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)]], [6 x [5 x i8*]] [[5 x i8*] [i8* @g_25, i8* null, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* @g_25, i8* @g_114, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25], [5 x i8*] [i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25, i8* @g_25, i8* @g_25], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)]], [6 x [5 x i8*]] [[5 x i8*] [i8* null, i8* @g_25, i8* @g_25, i8* @g_25, i8* null], [5 x i8*] [i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* null, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* null, i8* @g_25], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* null], [5 x i8*] [i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)]], [6 x [5 x i8*]] [[5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* null, i8* @g_25], [5 x i8*] [i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25], [5 x i8*] [i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* @g_114, i8* @g_25, i8* @g_25, i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)]], [6 x [5 x i8*]] [[5 x i8*] [i8* @g_25, i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_114], [5 x i8*] [i8* @g_25, i8* null, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* null], [5 x i8*] [i8* @g_114, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* @g_25]], [6 x [5 x i8*]] [[5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* @g_114, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25]], [6 x [5 x i8*]] [[5 x i8*] [i8* @g_25, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* null], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* @g_25, i8* @g_25, i8* @g_114], [5 x i8*] [i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* null, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* @g_25, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25], [5 x i8*] [i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25]]], align 4
+ at g_271 = internal global [7 x [6 x [5 x ptr]]] [[6 x [5 x i8*]] [[5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* null], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* null, i8* null], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)]], [6 x [5 x ptr]] [[5 x i8*] [i8* @g_25, i8* null, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* @g_25, i8* @g_114, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25], [5 x i8*] [i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25, i8* @g_25, i8* @g_25], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)]], [6 x [5 x ptr]] [[5 x i8*] [i8* null, i8* @g_25, i8* @g_25, i8* @g_25, i8* null], [5 x i8*] [i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* null, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* null, i8* @g_25], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* null], [5 x i8*] [i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)]], [6 x [5 x ptr]] [[5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* null, i8* @g_25], [5 x i8*] [i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25], [5 x i8*] [i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* @g_114, i8* @g_25, i8* @g_25, i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)]], [6 x [5 x ptr]] [[5 x i8*] [i8* @g_25, i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_114], [5 x i8*] [i8* @g_25, i8* null, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* null], [5 x i8*] [i8* @g_114, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* @g_25]], [6 x [5 x ptr]] [[5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* @g_114, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0)], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25]], [6 x [5 x ptr]] [[5 x i8*] [i8* @g_25, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* null], [5 x i8*] [i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* @g_25, i8* @g_25, i8* @g_114], [5 x i8*] [i8* null, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_25, i8* null, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_114, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* @g_114, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1)], [5 x i8*] [i8* @g_25, i8* @g_25, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25], [5 x i8*] [i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25, i8* @g_25, i8* getelementptr (i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), i64 1), i8* @g_25]]], align 4
 
 define i32 @func() {
-  %tmp = load i8, i8* getelementptr inbounds (%struct.S0.1.7.13, %struct.S0.1.7.13* @g_71, i32 0, i32 0), align 1
+  %tmp = load i8, ptr @g_71, align 1
   ret i32 0
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/crash.ll b/llvm/test/Transforms/GlobalOpt/crash.ll
index 89200681087b2..980a4ec9db1f3 100644
--- a/llvm/test/Transforms/GlobalOpt/crash.ll
+++ b/llvm/test/Transforms/GlobalOpt/crash.ll
@@ -2,16 +2,16 @@
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32"
 target triple = "i386-apple-darwin9.8"
 
-%0 = type { i32, void ()*, i8* }
+%0 = type { i32, ptr, ptr }
 %struct.btSimdScalar = type { %"union.btSimdScalar::$_14" }
 %"union.btSimdScalar::$_14" = type { <4 x float> }
 
- at _ZL6vTwist =  global %struct.btSimdScalar zeroinitializer ; <%struct.btSimdScalar*> [#uses=1]
- at llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, void ()* @_GLOBAL__I__ZN21btConeTwistConstraintC2Ev, i8* null }] ; <[12 x %0]*> [#uses=0]
+ at _ZL6vTwist =  global %struct.btSimdScalar zeroinitializer ; <ptr> [#uses=1]
+ at llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, ptr @_GLOBAL__I__ZN21btConeTwistConstraintC2Ev, ptr null }] ; <ptr> [#uses=0]
 
 define internal void @_GLOBAL__I__ZN21btConeTwistConstraintC2Ev() nounwind section "__TEXT,__StaticInit,regular,pure_instructions" {
 entry:
-  store float 1.0, float* getelementptr inbounds (%struct.btSimdScalar, %struct.btSimdScalar* @_ZL6vTwist, i32 0, i32 0, i32 0, i32 3), align 4
+  store float 1.0, ptr getelementptr inbounds (%struct.btSimdScalar, ptr @_ZL6vTwist, i32 0, i32 0, i32 0, i32 3), align 4
   ret void
 }
 
@@ -19,39 +19,37 @@ entry:
 ; PR6760
 %T = type { [5 x i32] }
 
- at switch_inf = internal global %T* null
+ at switch_inf = internal global ptr null
 
-define void @test(i8* %arch_file, i32 %route_type) {
+define void @test(ptr %arch_file, i32 %route_type) {
 entry:
   %A = sext i32 1 to i64
   %B = mul i64 %A, 20
-  %C = call noalias i8* @malloc(i64 %B) nounwind
-  %D = bitcast i8* %C to %T*
-  store %T* %D, %T** @switch_inf, align 8
+  %C = call noalias ptr @malloc(i64 %B) nounwind
+  store ptr %C, ptr @switch_inf, align 8
   unreachable
 
 bb.nph.i: 
-  %scevgep.i539 = getelementptr i8, i8* %C, i64 4
+  %scevgep.i539 = getelementptr i8, ptr %C, i64 4
   unreachable
 
 xx:
-  %E = load %T*, %T** @switch_inf, align 8 
+  %E = load ptr, ptr @switch_inf, align 8 
   unreachable
 }
 
-declare noalias i8* @malloc(i64) nounwind
+declare noalias ptr @malloc(i64) nounwind
 
 
 ; PR8063
- at permute_bitrev.bitrev = internal global i32* null, align 8
+ at permute_bitrev.bitrev = internal global ptr null, align 8
 define void @permute_bitrev() nounwind {
 entry:
-  %tmp = load i32*, i32** @permute_bitrev.bitrev, align 8
+  %tmp = load ptr, ptr @permute_bitrev.bitrev, align 8
   %conv = sext i32 0 to i64
   %mul = mul i64 %conv, 4
-  %call = call i8* @malloc(i64 %mul)
-  %0 = bitcast i8* %call to i32*
-  store i32* %0, i32** @permute_bitrev.bitrev, align 8
+  %call = call ptr @malloc(i64 %mul)
+  store ptr %call, ptr @permute_bitrev.bitrev, align 8
   ret void
 }
 
@@ -60,21 +58,21 @@ entry:
 
 @data8 = internal global [8000 x i8] zeroinitializer, align 16
 define void @memset_with_strange_user() ssp {
-  call void @llvm.memset.p0i8.i64(i8* align 16 getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i8 undef, i64 ptrtoint (i8* getelementptr ([8000 x i8], [8000 x i8]* @data8, i64 1, i64 sub (i64 0, i64 ptrtoint ([8000 x i8]* @data8 to i64))) to i64), i1 false)
+  call void @llvm.memset.p0.i64(ptr align 16 @data8, i8 undef, i64 ptrtoint (ptr getelementptr ([8000 x i8], ptr @data8, i64 1, i64 sub (i64 0, i64 ptrtoint (ptr @data8 to i64))) to i64), i1 false)
   ret void
 }
-declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) nounwind
+declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind
 
 
 ; PR9856
- at g_52 = internal global i32** null, align 8
- at g_90 = external global i32*, align 8
+ at g_52 = internal global ptr null, align 8
+ at g_90 = external global ptr, align 8
 
 define void @icmp_user_of_stored_once() nounwind ssp {
 entry:
-  %tmp4 = load i32**, i32*** @g_52, align 8
-  store i32** @g_90, i32*** @g_52
-  %cmp17 = icmp ne i32*** undef, @g_52
+  %tmp4 = load ptr, ptr @g_52, align 8
+  store ptr @g_90, ptr @g_52
+  %cmp17 = icmp ne ptr undef, @g_52
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/ctor-list-opt-constexpr.ll b/llvm/test/Transforms/GlobalOpt/ctor-list-opt-constexpr.ll
index 91e30b6a39329..4fdfc222b6759 100644
--- a/llvm/test/Transforms/GlobalOpt/ctor-list-opt-constexpr.ll
+++ b/llvm/test/Transforms/GlobalOpt/ctor-list-opt-constexpr.ll
@@ -2,32 +2,30 @@
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
 target triple = "x86_64-apple-darwin10.0.0"
 
-%0 = type { i32, void ()*, i8* }
-%struct.foo = type { i32* }
+%0 = type { i32, ptr, ptr }
+%struct.foo = type { ptr }
 %struct.bar = type { i128 }
 
 @G = global i32 0, align 4
 @H = global i32 0, align 4
 @X = global %struct.foo zeroinitializer, align 8
 @X2 = global %struct.bar zeroinitializer, align 8
- at llvm.global_ctors = appending global [2 x %0] [%0 { i32 65535, void ()* @init1, i8* null }, %0 { i32 65535, void ()* @init2, i8* null }]
+ at llvm.global_ctors = appending global [2 x %0] [%0 { i32 65535, ptr @init1, ptr null }, %0 { i32 65535, ptr @init2, ptr null }]
 
 ; PR8710 - GlobalOpt shouldn't change the global's initializer to have this
 ; arbitrary constant expression, the code generator can't handle it.
 define internal void @init1() {
 entry:
-  %tmp = getelementptr inbounds %struct.foo, %struct.foo* @X, i32 0, i32 0
-  store i32* inttoptr (i64 xor (i64 ptrtoint (i32* @G to i64), i64 ptrtoint (i32* @H to i64)) to i32*), i32** %tmp, align 8
+  store ptr inttoptr (i64 xor (i64 ptrtoint (ptr @G to i64), i64 ptrtoint (ptr @H to i64)) to ptr), ptr @X, align 8
   ret void
 }
 ; CHECK-LABEL: @init1(
-; CHECK: store i32*
+; CHECK: store ptr
 
 ; PR11705 - ptrtoint isn't safe in general in global initializers.
 define internal void @init2() {
 entry:
-  %tmp = getelementptr inbounds %struct.bar, %struct.bar* @X2, i32 0, i32 0
-  store i128 ptrtoint (i32* @G to i128), i128* %tmp, align 16
+  store i128 ptrtoint (ptr @G to i128), ptr @X2, align 16
   ret void
 }
 ; CHECK-LABEL: @init2(

diff  --git a/llvm/test/Transforms/GlobalOpt/ctor-list-opt-inbounds.ll b/llvm/test/Transforms/GlobalOpt/ctor-list-opt-inbounds.ll
index 94982e5c20e53..e990de7178e60 100644
--- a/llvm/test/Transforms/GlobalOpt/ctor-list-opt-inbounds.ll
+++ b/llvm/test/Transforms/GlobalOpt/ctor-list-opt-inbounds.ll
@@ -6,18 +6,18 @@
 ; CHECK: @H = local_unnamed_addr global i32 2
 ; CHECK: @I = local_unnamed_addr global i32 2
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [ { i32, void ()*, i8* } { i32 65535, void ()* @CTOR, i8* null } ]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [ { i32, ptr, ptr } { i32 65535, ptr @CTOR, ptr null } ]
 @addr = external global i32
 @G = internal global [6 x [5 x i32]] zeroinitializer
 @H = global i32 80
 @I = global i32 90
 
 define internal void @CTOR() {
-  store i32 1, i32* getelementptr ([6 x [5 x i32]], [6 x [5 x i32]]* @G, i64 0, i64 0, i64 0)
-  store i32 2, i32* getelementptr inbounds ([6 x [5 x i32]], [6 x [5 x i32]]* @G, i64 0, i64 0, i64 0)
-  %t = load i32, i32* getelementptr ([6 x [5 x i32]], [6 x [5 x i32]]* @G, i64 0, i64 0, i64 0)
-  store i32 %t, i32* @H
-  %s = load i32, i32* getelementptr inbounds ([6 x [5 x i32]], [6 x [5 x i32]]* @G, i64 0, i64 0, i64 0)
-  store i32 %s, i32* @I
+  store i32 1, ptr @G
+  store i32 2, ptr @G
+  %t = load i32, ptr @G
+  store i32 %t, ptr @H
+  %s = load i32, ptr @G
+  store i32 %s, ptr @I
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/ctor-list-opt.ll b/llvm/test/Transforms/GlobalOpt/ctor-list-opt.ll
index 68db618e1eef3..b0f62afd72c28 100644
--- a/llvm/test/Transforms/GlobalOpt/ctor-list-opt.ll
+++ b/llvm/test/Transforms/GlobalOpt/ctor-list-opt.ll
@@ -1,35 +1,35 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 ; CHECK-NOT: CTOR
-%ini = type { i32, void()*, i8* }
+%ini = type { i32, ptr, ptr }
 @llvm.global_ctors = appending global [16 x %ini] [
-	%ini { i32 65534, void ()* @CTOR1, i8* null },
-	%ini { i32 65535, void ()* @CTOR1, i8* null },
-	%ini { i32 65535, void ()* @CTOR1, i8* null },
-	%ini { i32 65535, void ()* @CTOR2, i8* null },
-	%ini { i32 65535, void ()* @CTOR3, i8* null },
-	%ini { i32 65535, void ()* @CTOR4, i8* null },
-	%ini { i32 65535, void ()* @CTOR5, i8* null },
-	%ini { i32 65535, void ()* @CTOR6, i8* null },
-	%ini { i32 65535, void ()* @CTOR7, i8* null },
-	%ini { i32 65535, void ()* @CTOR8, i8* null },
-	%ini { i32 65535, void ()* @CTOR9, i8* null },
-	%ini { i32 65535, void ()* @CTOR14,i8* null },
-	%ini { i32 65536, void ()* @CTOR10_EXTERNAL, i8* null },
-	%ini { i32 65536, void ()* @CTOR11, i8* null },
-	%ini { i32 65537, void ()* @CTOR12, i8* null },
-	%ini { i32 2147483647, void ()* null, i8* null }
+	%ini { i32 65534, ptr @CTOR1, ptr null },
+	%ini { i32 65535, ptr @CTOR1, ptr null },
+	%ini { i32 65535, ptr @CTOR1, ptr null },
+	%ini { i32 65535, ptr @CTOR2, ptr null },
+	%ini { i32 65535, ptr @CTOR3, ptr null },
+	%ini { i32 65535, ptr @CTOR4, ptr null },
+	%ini { i32 65535, ptr @CTOR5, ptr null },
+	%ini { i32 65535, ptr @CTOR6, ptr null },
+	%ini { i32 65535, ptr @CTOR7, ptr null },
+	%ini { i32 65535, ptr @CTOR8, ptr null },
+	%ini { i32 65535, ptr @CTOR9, ptr null },
+	%ini { i32 65535, ptr @CTOR14,ptr null },
+	%ini { i32 65536, ptr @CTOR10_EXTERNAL, ptr null },
+	%ini { i32 65536, ptr @CTOR11, ptr null },
+	%ini { i32 65537, ptr @CTOR12, ptr null },
+	%ini { i32 2147483647, ptr null, ptr null }
 ]
 
- at G = global i32 0		; <i32*> [#uses=1]
- at G2 = global i32 0		; <i32*> [#uses=1]
- at G3 = global i32 -123		; <i32*> [#uses=2]
- at X = global { i32, [2 x i32] } { i32 0, [2 x i32] [ i32 17, i32 21 ] }		; <{ i32, [2 x i32] }*> [#uses=2]
- at Y = global i32 -1		; <i32*> [#uses=2]
- at Z = global i32 123		; <i32*> [#uses=1]
- at D = global double 0.000000e+00		; <double*> [#uses=1]
- at CTORGV = internal global i1 false		; <i1*> [#uses=2]
- at GA = global i32 0		; <i32*> [#uses=1]
- at GA14 = global i32 0		; <i32*> [#uses=1]
+ at G = global i32 0		; <ptr> [#uses=1]
+ at G2 = global i32 0		; <ptr> [#uses=1]
+ at G3 = global i32 -123		; <ptr> [#uses=2]
+ at X = global { i32, [2 x i32] } { i32 0, [2 x i32] [ i32 17, i32 21 ] }		; <ptr> [#uses=2]
+ at Y = global i32 -1		; <ptr> [#uses=2]
+ at Z = global i32 123		; <ptr> [#uses=1]
+ at D = global double 0.000000e+00		; <ptr> [#uses=1]
+ at CTORGV = internal global i1 false		; <ptr> [#uses=2]
+ at GA = global i32 0		; <ptr> [#uses=1]
+ at GA14 = global i32 0		; <ptr> [#uses=1]
 
 define internal void @CTOR1() {
 	ret void
@@ -37,8 +37,8 @@ define internal void @CTOR1() {
 
 define internal void @CTOR2() {
 	%A = add i32 1, 23		; <i32> [#uses=1]
-	store i32 %A, i32* @G
-	store i1 true, i1* @CTORGV
+	store i32 %A, ptr @G
+	store i1 true, ptr @CTORGV
 	ret void
 }
 
@@ -50,7 +50,7 @@ Cont:		; preds = %0
 	br i1 %X, label %S, label %T
 
 S:		; preds = %Cont
-	store i32 24, i32* @G2
+	store i32 24, ptr @G2
 	ret void
 
 T:		; preds = %Cont
@@ -58,38 +58,38 @@ T:		; preds = %Cont
 }
 
 define internal void @CTOR4() {
-	%X = load i32, i32* @G3		; <i32> [#uses=1]
+	%X = load i32, ptr @G3		; <i32> [#uses=1]
 	%Y = add i32 %X, 123		; <i32> [#uses=1]
-	store i32 %Y, i32* @G3
+	store i32 %Y, ptr @G3
 	ret void
 }
 
 define internal void @CTOR5() {
-	%X.2p = getelementptr inbounds { i32, [2 x i32] }, { i32, [2 x i32] }* @X, i32 0, i32 1, i32 0		; <i32*> [#uses=2]
-	%X.2 = load i32, i32* %X.2p		; <i32> [#uses=1]
-	%X.1p = getelementptr inbounds { i32, [2 x i32] }, { i32, [2 x i32] }* @X, i32 0, i32 0		; <i32*> [#uses=1]
-	store i32 %X.2, i32* %X.1p
-	store i32 42, i32* %X.2p
+	%X.2p = getelementptr inbounds { i32, [2 x i32] }, ptr @X, i32 0, i32 1, i32 0		; <ptr> [#uses=2]
+	%X.2 = load i32, ptr %X.2p		; <i32> [#uses=1]
+	%X.1p = getelementptr inbounds { i32, [2 x i32] }, ptr @X, i32 0, i32 0		; <ptr> [#uses=1]
+	store i32 %X.2, ptr %X.1p
+	store i32 42, ptr %X.2p
 	ret void
 }
 
 define internal void @CTOR6() {
-	%A = alloca i32		; <i32*> [#uses=2]
-	%y = load i32, i32* @Y		; <i32> [#uses=1]
-	store i32 %y, i32* %A
-	%Av = load i32, i32* %A		; <i32> [#uses=1]
+	%A = alloca i32		; <ptr> [#uses=2]
+	%y = load i32, ptr @Y		; <i32> [#uses=1]
+	store i32 %y, ptr %A
+	%Av = load i32, ptr %A		; <i32> [#uses=1]
 	%Av1 = add i32 %Av, 1		; <i32> [#uses=1]
-	store i32 %Av1, i32* @Y
+	store i32 %Av1, ptr @Y
 	ret void
 }
 
 define internal void @CTOR7() {
-	call void @setto( i32* @Z, i32 0 )
+	call void @setto( ptr @Z, i32 0 )
 	ret void
 }
 
-define void @setto(i32* %P, i32 %V) {
-	store i32 %V, i32* %P
+define void @setto(ptr %P, i32 %V) {
+	store i32 %V, ptr %P
 	ret void
 }
 
@@ -97,27 +97,24 @@ declare double @cos(double)
 
 define internal void @CTOR8() {
 	%X = call double @cos( double 0.000000e+00 )		; <double> [#uses=1]
-	store double %X, double* @D
+	store double %X, ptr @D
 	ret void
 }
 
 define i1 @accessor() {
-	%V = load i1, i1* @CTORGV		; <i1> [#uses=1]
+	%V = load i1, ptr @CTORGV		; <i1> [#uses=1]
 	ret i1 %V
 }
 
 %struct.A = type { i32 }
-%struct.B = type { i32 (...)**, i8*, [4 x i8] }
+%struct.B = type { ptr, ptr, [4 x i8] }
 @GV1 = global %struct.B zeroinitializer, align 8
- at GV2 =  constant [3 x i8*] [i8* inttoptr (i64 16 to i8*), i8* null, i8* bitcast ({ i8*, i8*, i32, i32, i8*, i64 }* null to i8*)]
+ at GV2 =  constant [3 x ptr] [ptr inttoptr (i64 16 to ptr), ptr null, ptr null]
 ; CHECK-NOT: CTOR9
 define internal void @CTOR9() {
 entry:
-  %0 = bitcast %struct.B* @GV1 to i8*
-  %1 = getelementptr inbounds i8, i8* %0, i64 16
-  %2 = bitcast i8* %1 to %struct.A*
-  %3 = bitcast %struct.B* @GV1 to i8***
-  store i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @GV2, i64 1, i64 0), i8*** %3
+  %0 = getelementptr inbounds i8, ptr @GV1, i64 16
+  store ptr getelementptr inbounds ([3 x ptr], ptr @GV2, i64 1, i64 0), ptr @GV1
   ret void
 }
 
@@ -136,15 +133,15 @@ define internal void @CTOR12() {
 
 ; CHECK-NOT: CTOR13
 define internal void @CTOR13() {
-  store atomic i32 123, i32* @GA seq_cst, align 4
+  store atomic i32 123, ptr @GA seq_cst, align 4
   ret void
 }
 
 ; CHECK-NOT: CTOR14
 define internal void @CTOR14() {
-  %X = load atomic i32, i32* @GA14 seq_cst, align 4
+  %X = load atomic i32, ptr @GA14 seq_cst, align 4
   %Y = add i32 %X, 124
-  store i32 %Y, i32* @GA14
+  store i32 %Y, ptr @GA14
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/cxx-dtor.ll b/llvm/test/Transforms/GlobalOpt/cxx-dtor.ll
index 50d9ff77b5459..0292671dcd736 100644
--- a/llvm/test/Transforms/GlobalOpt/cxx-dtor.ll
+++ b/llvm/test/Transforms/GlobalOpt/cxx-dtor.ll
@@ -1,29 +1,28 @@
 ; RUN: opt < %s -S -passes='cgscc(inline),function(early-cse),globalopt' | FileCheck %s
 
-%0 = type { i32, void ()*, i8* }
+%0 = type { i32, ptr, ptr }
 %struct.A = type { i8 }
 %struct.B = type { }
 
 @a = global %struct.A zeroinitializer, align 1
- at __dso_handle = external global i8*
- at llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, void ()* @_GLOBAL__I_a, i8* null }]
+ at __dso_handle = external global ptr
+ at llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, ptr @_GLOBAL__I_a, ptr null }]
 
 ; CHECK-NOT: call i32 @__cxa_atexit
 
 define internal void @__cxx_global_var_init() nounwind section "__TEXT,__StaticInit,regular,pure_instructions" {
-  %1 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%struct.A*)* @_ZN1AD1Ev to void (i8*)*), i8* getelementptr inbounds (%struct.A, %struct.A* @a, i32 0, i32 0), i8* bitcast (i8** @__dso_handle to i8*))
+  %1 = call i32 @__cxa_atexit(ptr @_ZN1AD1Ev, ptr @a, ptr @__dso_handle)
   ret void
 }
 
-define linkonce_odr void @_ZN1AD1Ev(%struct.A* %this) nounwind align 2 {
-  %t = bitcast %struct.A* %this to %struct.B*
-  call void @_ZN1BD1Ev(%struct.B* %t)
+define linkonce_odr void @_ZN1AD1Ev(ptr %this) nounwind align 2 {
+  call void @_ZN1BD1Ev(ptr %this)
   ret void
 }
 
-declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*)
+declare i32 @__cxa_atexit(ptr, ptr, ptr)
 
-define linkonce_odr void @_ZN1BD1Ev(%struct.B* %this) nounwind align 2 {
+define linkonce_odr void @_ZN1BD1Ev(ptr %this) nounwind align 2 {
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/dead-constant-user.ll b/llvm/test/Transforms/GlobalOpt/dead-constant-user.ll
index 02b2ebe46c09c..87855e46571ec 100644
--- a/llvm/test/Transforms/GlobalOpt/dead-constant-user.ll
+++ b/llvm/test/Transforms/GlobalOpt/dead-constant-user.ll
@@ -2,15 +2,15 @@
 ; RUN: opt -S -passes='function(early-cse),globalopt' < %s | FileCheck %s
 ; RUN: opt -S -passes='function(early-cse)' < %s | opt -S -passes=globalopt | FileCheck %s
 
- at g = internal global [6 x i16*] undef
+ at g = internal global [6 x ptr] undef
 
 define void @test1() {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:    ret void
 ;
-  %xor4 = xor i32 zext (i1 icmp ne (i8* getelementptr (i8, i8* bitcast ([6 x i16*]* @g to i8*), i64 3), i8* null) to i32), 0
-  %t0 = load i16*, i16** bitcast (i8* getelementptr (i8, i8* bitcast ([6 x i16*]* @g to i8*), i64 3) to i16**), align 1
-  %t1 = load i16, i16* %t0, align 1
+  %xor4 = xor i32 zext (i1 icmp ne (ptr getelementptr (i8, ptr @g, i64 3), ptr null) to i32), 0
+  %t0 = load ptr, ptr getelementptr (i8, ptr @g, i64 3), align 1
+  %t1 = load i16, ptr %t0, align 1
   ret void
 }
 
@@ -18,6 +18,6 @@ define void @test2() {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:    ret void
 ;
-  store i16* null, i16** getelementptr inbounds ([6 x i16*], [6 x i16*]* @g, i32 0, i32 5)
+  store ptr null, ptr getelementptr inbounds ([6 x ptr], ptr @g, i32 0, i32 5)
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/dead-store-status.ll b/llvm/test/Transforms/GlobalOpt/dead-store-status.ll
index ed73ca7d9448d..9a8fbb8d65f0e 100644
--- a/llvm/test/Transforms/GlobalOpt/dead-store-status.ll
+++ b/llvm/test/Transforms/GlobalOpt/dead-store-status.ll
@@ -4,19 +4,19 @@
 ; false. This was caught by the pass return status check that is hidden under
 ; EXPENSIVE_CHECKS.
 
-; CHECK: @global = internal unnamed_addr global i16* null, align 1
+; CHECK: @global = internal unnamed_addr global ptr null, align 1
 
 ; CHECK-LABEL: @foo
 ; CHECK-NEXT: entry:
 ; CHECK-NEXT: ret i16 undef
 
- at global = internal unnamed_addr global i16* null, align 1
+ at global = internal unnamed_addr global ptr null, align 1
 
 ; Function Attrs: nofree noinline norecurse nounwind writeonly
 define i16 @foo(i16 %c) local_unnamed_addr #0 {
 entry:
   %local1.addr = alloca i16, align 1
-  store i16* %local1.addr, i16** @global, align 1
+  store ptr %local1.addr, ptr @global, align 1
   ret i16 undef
 }
 
@@ -24,19 +24,17 @@ entry:
 define i16 @bar() local_unnamed_addr #1 {
 entry:
   %local2 = alloca [1 x i16], align 1
-  %0 = bitcast [1 x i16]* %local2 to i8*
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %0)
-  %arraydecay = getelementptr inbounds [1 x i16], [1 x i16]* %local2, i16 0, i16 0
-  store i16* %arraydecay, i16** @global, align 1
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %0)
+  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %local2)
+  store ptr %local2, ptr @global, align 1
+  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %local2)
   ret i16 undef
 }
 
 ; Function Attrs: argmemonly nounwind willreturn
-declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2
+declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #2
 
 ; Function Attrs: argmemonly nounwind willreturn
-declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2
+declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #2
 
 attributes #0 = { nofree noinline norecurse nounwind writeonly }
 attributes #1 = { noinline nounwind writeonly }

diff  --git a/llvm/test/Transforms/GlobalOpt/deadfunction.ll b/llvm/test/Transforms/GlobalOpt/deadfunction.ll
index c8b8e6e9f050a..11a2d100a52ae 100644
--- a/llvm/test/Transforms/GlobalOpt/deadfunction.ll
+++ b/llvm/test/Transforms/GlobalOpt/deadfunction.ll
@@ -6,13 +6,13 @@ declare void @aa()
 declare void @bb()
 
 ; Test that we can erase a function which has a blockaddress referring to it
- at test.x = internal unnamed_addr constant [3 x i8*] [i8* blockaddress(@test, %a), i8* blockaddress(@test, %b), i8* blockaddress(@test, %c)], align 16
+ at test.x = internal unnamed_addr constant [3 x ptr] [ptr blockaddress(@test, %a), ptr blockaddress(@test, %b), ptr blockaddress(@test, %c)], align 16
 define internal void @test(i32 %n) nounwind noinline {
 entry:
   %idxprom = sext i32 %n to i64
-  %arrayidx = getelementptr inbounds [3 x i8*], [3 x i8*]* @test.x, i64 0, i64 %idxprom
-  %0 = load i8*, i8** %arrayidx, align 8
-  indirectbr i8* %0, [label %a, label %b, label %c]
+  %arrayidx = getelementptr inbounds [3 x ptr], ptr @test.x, i64 0, i64 %idxprom
+  %0 = load ptr, ptr %arrayidx, align 8
+  indirectbr ptr %0, [label %a, label %b, label %c]
 
 a:
   tail call void @aa() nounwind

diff  --git a/llvm/test/Transforms/GlobalOpt/deadglobal-2.ll b/llvm/test/Transforms/GlobalOpt/deadglobal-2.ll
index 74c51fb8c4836..dd12e39462bd3 100644
--- a/llvm/test/Transforms/GlobalOpt/deadglobal-2.ll
+++ b/llvm/test/Transforms/GlobalOpt/deadglobal-2.ll
@@ -5,7 +5,7 @@
 @G = internal global [4 x i32] zeroinitializer
 
 define void @foo(i32 %X) {
-	%Ptr = getelementptr [4 x i32], [4 x i32]* @G, i32 0, i32 %X
-	store i32 1, i32* %Ptr
+	%Ptr = getelementptr [4 x i32], ptr @G, i32 0, i32 %X
+	store i32 1, ptr %Ptr
 	ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/deadglobal-diarglist-use.ll b/llvm/test/Transforms/GlobalOpt/deadglobal-diarglist-use.ll
index 635030e608d51..4b396928b48e4 100644
--- a/llvm/test/Transforms/GlobalOpt/deadglobal-diarglist-use.ll
+++ b/llvm/test/Transforms/GlobalOpt/deadglobal-diarglist-use.ll
@@ -1,15 +1,12 @@
 ; RUN: opt < %s -passes=globalopt -S | llvm-as | llvm-dis | FileCheck %s
 
 ; The %struct.S type would not get emitted after @s was removed, resulting in
-; llvm-as failing to parse the dbg.value intrinsic using that type. The
-; FileCheck checks are just added to verify that the desired transformation is
-; done.
+; llvm-as failing to parse the dbg.value intrinsic using that type. However,
+; with opaque pointers this is no longer necessary.
 
-; CHECK-NOT: @s
-; CHECK: %struct.S = type { i32 }
 ; CHECK-NOT: @s
 
-; CHECK: call void @llvm.dbg.value(metadata !DIArgList([1 x %struct.S]* undef
+; CHECK: call void @llvm.dbg.value(metadata !DIArgList(ptr undef
 
 %struct.S = type { i32 }
 
@@ -18,9 +15,9 @@
 
 define dso_local void @fn() !dbg !20 {
 entry:
-  %0 = load i32, i32* @idx, align 4, !dbg !26
+  %0 = load i32, ptr @idx, align 4, !dbg !26
   %idxprom = sext i32 %0 to i64, !dbg !26
-  call void @llvm.dbg.value(metadata !DIArgList([1 x %struct.S]* @s, i64 %idxprom), metadata !24, metadata !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_constu, 4, DW_OP_mul, DW_OP_plus, DW_OP_stack_value)), !dbg !26
+  call void @llvm.dbg.value(metadata !DIArgList(ptr @s, i64 %idxprom), metadata !24, metadata !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_constu, 4, DW_OP_mul, DW_OP_plus, DW_OP_stack_value)), !dbg !26
   ret void, !dbg !26
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/deadglobal.ll b/llvm/test/Transforms/GlobalOpt/deadglobal.ll
index 4947f4212ac62..86df402ba46e5 100644
--- a/llvm/test/Transforms/GlobalOpt/deadglobal.ll
+++ b/llvm/test/Transforms/GlobalOpt/deadglobal.ll
@@ -1,7 +1,7 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 
- at G1 = internal global i32 123            ; <i32*> [#uses=1]
- at A1 = internal alias i32, i32* @G1
+ at G1 = internal global i32 123            ; <ptr> [#uses=1]
+ at A1 = internal alias i32, ptr @G1
 
 ; CHECK-NOT: @G1
 ; CHECK: @G2
@@ -12,7 +12,7 @@
 define void @foo1() {
 ; CHECK: define void @foo
 ; CHECK-NEXT: ret
-        store i32 1, i32* @G1
+        store i32 1, ptr @G1
         ret void
 }
 
@@ -21,7 +21,7 @@ define void @foo1() {
 define void @foo2() {
 ; CHECK-LABEL: define void @foo2(
 ; CHECK-NEXT: store
-        store i32 1, i32* @G2
+        store i32 1, ptr @G2
         ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-2.ll b/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-2.ll
index b429f8919fde6..e13577debbbf9 100644
--- a/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-2.ll
+++ b/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-2.ll
@@ -3,14 +3,14 @@
 ; Test the evaluation of a store and a load via a bitcast, and check
 ; that globals are constant folded to the correct value.
 
-; CHECK: @u = dso_local local_unnamed_addr global %union.A { i8* inttoptr (i64 12345 to i8*) }, align 8
+; CHECK: @u = dso_local local_unnamed_addr global %union.A { ptr inttoptr (i64 12345 to ptr) }, align 8
 ; CHECK: @l = dso_local local_unnamed_addr global i64 12345, align 8
 
 ; Test derived from:
 ;
 ; union A {
 ;   A(long long ll) : l(ll) {}
-;   void *p;
+;   ptr p;
 ;   long long l;
 ; } u(12345);
 ;
@@ -19,28 +19,27 @@
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
-%union.A = type { i8* }
+%union.A = type { ptr }
 
 $_ZN1AC2Ex = comdat any
 
 @u = dso_local global %union.A zeroinitializer, align 8
 @l = dso_local global i64 0, align 8
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_test.cpp, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_test.cpp, ptr null }]
 
 define internal void @__cxx_global_var_init() section ".text.startup" {
-  call void @_ZN1AC2Ex(%union.A* @u, i64 12345)
+  call void @_ZN1AC2Ex(ptr @u, i64 12345)
   ret void
 }
 
-define linkonce_odr dso_local void @_ZN1AC2Ex(%union.A* %this, i64 %ll) unnamed_addr comdat align 2 {
-  %l = bitcast %union.A* %this to i64*
-  store i64 %ll, i64* %l, align 8
+define linkonce_odr dso_local void @_ZN1AC2Ex(ptr %this, i64 %ll) unnamed_addr comdat align 2 {
+  store i64 %ll, ptr %this, align 8
   ret void
 }
 
 define internal void @__cxx_global_var_init.1() section ".text.startup" {
-  %1 = load i64, i64* bitcast (%union.A* @u to i64*), align 8
-  store i64 %1, i64* @l, align 8
+  %1 = load i64, ptr @u, align 8
+  store i64 %1, ptr @l, align 8
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-3.ll b/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-3.ll
index eb96cc4f4fb5f..f70cf82348e46 100644
--- a/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-3.ll
+++ b/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-3.ll
@@ -3,35 +3,34 @@
 ; Test the evaluation of a load via a bitcast and a store via a GEP.
 ; Check that globals are constant folded to the correct value.
 
-; CHECK: @u = dso_local local_unnamed_addr global %union.A { i8* inttoptr (i64 12345 to i8*) }, align 8
+; CHECK: @u = dso_local local_unnamed_addr global %union.A { ptr inttoptr (i64 12345 to ptr) }, align 8
 ; CHECK: @l = dso_local local_unnamed_addr global i64 12345, align 8
 
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
-%union.A = type { i8* }
+%union.A = type { ptr }
 
 $_ZN1AC2Ex = comdat any
 
 @u = dso_local global %union.A zeroinitializer, align 8
 @l = dso_local global i64 0, align 8
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_test.cpp, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_test.cpp, ptr null }]
 
 define internal void @__cxx_global_var_init() section ".text.startup" {
-  call void @_ZN1AC2Ex(%union.A* @u, i64 12345)
+  call void @_ZN1AC2Ex(ptr @u, i64 12345)
   ret void
 }
 
-define linkonce_odr dso_local void @_ZN1AC2Ex(%union.A* %this, i64 %ll) unnamed_addr comdat align 2 {
-  %l = inttoptr i64 %ll to i8*
-  %p = getelementptr inbounds %union.A, %union.A* %this, i64 0, i32 0
-  store i8* %l, i8** %p
+define linkonce_odr dso_local void @_ZN1AC2Ex(ptr %this, i64 %ll) unnamed_addr comdat align 2 {
+  %l = inttoptr i64 %ll to ptr
+  store ptr %l, ptr %this
   ret void
 }
 
 define internal void @__cxx_global_var_init.1() section ".text.startup" {
-  %1 = load i64, i64* bitcast (%union.A* @u to i64*), align 8
-  store i64 %1, i64* @l, align 8
+  %1 = load i64, ptr @u, align 8
+  store i64 %1, ptr @l, align 8
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-4.ll b/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-4.ll
index ac1fd34a2679b..761211c868074 100644
--- a/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-4.ll
+++ b/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-4.ll
@@ -4,19 +4,19 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
 target triple = "x86_64-unknown-linux-gnu"
 
 %struct.g = type opaque
-%struct.a = type { i32 (...)** }
+%struct.a = type { ptr }
 
 @l = dso_local global i32 0, align 4
 @h = external dso_local global %struct.g, align 1
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_bug48055.cc, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_bug48055.cc, ptr null }]
 
 ; Function Attrs: uwtable
 define internal void @__cxx_global_var_init() {
 entry:
-  %vtable = load i32 (%struct.a*)**, i32 (%struct.a*)*** bitcast (%struct.g* @h to i32 (%struct.a*)***), align 1
-  %0 = load i32 (%struct.a*)*, i32 (%struct.a*)** %vtable, align 8
-  %call = call i32 %0(%struct.a* nonnull dereferenceable(8) bitcast (%struct.g* @h to %struct.a*))
-  store i32 %call, i32* @l, align 4
+  %vtable = load ptr, ptr @h, align 1
+  %0 = load ptr, ptr %vtable, align 8
+  %call = call i32 %0(ptr nonnull dereferenceable(8) @h)
+  store i32 %call, ptr @l, align 4
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/evaluate-bitcast.ll b/llvm/test/Transforms/GlobalOpt/evaluate-bitcast.ll
index 5a129be92a965..6caecce142966 100644
--- a/llvm/test/Transforms/GlobalOpt/evaluate-bitcast.ll
+++ b/llvm/test/Transforms/GlobalOpt/evaluate-bitcast.ll
@@ -8,21 +8,21 @@
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-pc-linux-gnu"
 
-%struct.S = type { %struct.A* }
+%struct.S = type { ptr }
 %struct.A = type { i64, i64 }
 
 @s = internal local_unnamed_addr global %struct.S zeroinitializer, align 8
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_main.cpp, i8* null }]
- at gA = available_externally dso_local local_unnamed_addr global %struct.A* inttoptr (i64 69905 to %struct.A*), align 8
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_main.cpp, ptr null }]
+ at gA = available_externally dso_local local_unnamed_addr global ptr inttoptr (i64 69905 to ptr), align 8
 
 define dso_local i32 @main() local_unnamed_addr {
-  %1 = load i64, i64* bitcast (%struct.S* @s to i64*), align 8
+  %1 = load i64, ptr @s, align 8
   %2 = trunc i64 %1 to i32
   ret i32 %2
 }
 
 define internal void @_GLOBAL__sub_I_main.cpp() section ".text.startup" {
-  %1 = load i64, i64* bitcast (%struct.A** @gA to i64*), align 8
-  store i64 %1, i64* bitcast (%struct.S* @s to i64*), align 8
+  %1 = load i64, ptr @gA, align 8
+  store i64 %1, ptr @s, align 8
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/evaluate-call-errors.ll b/llvm/test/Transforms/GlobalOpt/evaluate-call-errors.ll
index 884ca514b8a2a..510edae69d7c4 100644
--- a/llvm/test/Transforms/GlobalOpt/evaluate-call-errors.ll
+++ b/llvm/test/Transforms/GlobalOpt/evaluate-call-errors.ll
@@ -15,76 +15,70 @@ target triple = "x86_64-apple-macosx10.12.0"
 
 @_s = global %struct.S zeroinitializer, align 4
 @_q = global %struct.Q zeroinitializer, align 4
- at llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_main2.cpp, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_main3.cpp, i8* null }]
+ at llvm.global_ctors = appending global [2 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_main2.cpp, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_main3.cpp, ptr null }]
 
 define internal void @__cxx_global_var_init() section "__TEXT,__StaticInit,regular,pure_instructions" {
-  call void @_ZN1SC1Ev(%struct.S* @_s)
+  call void @_ZN1SC1Ev(ptr @_s)
   ret void
 }
 
-define linkonce_odr void @_ZN1SC1Ev(%struct.S*) unnamed_addr align 2 {
-  %2 = alloca %struct.S*, align 8
-  store %struct.S* %0, %struct.S** %2, align 8
-  %3 = load %struct.S*, %struct.S** %2, align 8
-  call void @_ZN1SC2Ev(%struct.S* %3)
+define linkonce_odr void @_ZN1SC1Ev(ptr) unnamed_addr align 2 {
+  %2 = alloca ptr, align 8
+  store ptr %0, ptr %2, align 8
+  %3 = load ptr, ptr %2, align 8
+  call void @_ZN1SC2Ev(ptr %3)
   ret void
 }
 
 define internal void @__cxx_global_var_init.1() #0 section "__TEXT,__StaticInit,regular,pure_instructions" {
-  call void @_ZN1QC1Ev(%struct.Q* @_q)
+  call void @_ZN1QC1Ev(ptr @_q)
   ret void
 }
 
-define linkonce_odr void @_ZN1QC1Ev(%struct.Q*) unnamed_addr  align 2 {
-  %2 = alloca %struct.Q*, align 8
-  store %struct.Q* %0, %struct.Q** %2, align 8
-  %3 = load %struct.Q*, %struct.Q** %2, align 8
-  call void @_ZN1QC2Ev(%struct.Q* %3)
+define linkonce_odr void @_ZN1QC1Ev(ptr) unnamed_addr  align 2 {
+  %2 = alloca ptr, align 8
+  store ptr %0, ptr %2, align 8
+  %3 = load ptr, ptr %2, align 8
+  call void @_ZN1QC2Ev(ptr %3)
   ret void
 }
 
 define i32 @main() {
   %1 = alloca i32, align 4
-  store i32 0, i32* %1, align 4
+  store i32 0, ptr %1, align 4
   ret i32 0
 }
 
-define linkonce_odr void @_ZN1SC2Ev(%struct.S*) unnamed_addr align 2 {
-  %2 = alloca %struct.S*, align 8
+define linkonce_odr void @_ZN1SC2Ev(ptr) unnamed_addr align 2 {
+  %2 = alloca ptr, align 8
   %3 = alloca %struct.Foo, align 4
-  store %struct.S* %0, %struct.S** %2, align 8
-  %4 = load %struct.S*, %struct.S** %2, align 8
-  %5 = getelementptr inbounds %struct.S, %struct.S* %4, i32 0, i32 0
-  %6 = call i32 bitcast (%struct.Foo* ()* @_ZL3foov to i32 ()*)()
-  %7 = getelementptr inbounds %struct.Foo, %struct.Foo* %3, i32 0, i32 0
-  store i32 %6, i32* %7, align 4
-  %8 = getelementptr inbounds %struct.Foo, %struct.Foo* %3, i32 0, i32 0
-  %9 = load i32, i32* %8, align 4
-  store i32 %9, i32* %5, align 4
+  store ptr %0, ptr %2, align 8
+  %4 = load ptr, ptr %2, align 8
+  %5 = call i32 @_ZL3foov()
+  store i32 %5, ptr %3, align 4
+  %6 = load i32, ptr %3, align 4
+  store i32 %6, ptr %4, align 4
   ret void
 }
 
-define internal %struct.Foo* @_ZL3foov() {
-  ret %struct.Foo* getelementptr (%struct.Foo, %struct.Foo *null, i32 1)
+define internal ptr @_ZL3foov() {
+  ret ptr getelementptr (%struct.Foo, ptr null, i32 1)
 }
 
-define linkonce_odr void @_ZN1QC2Ev(%struct.Q*) unnamed_addr align 2 {
-  %2 = alloca %struct.Q*, align 8
-  store %struct.Q* %0, %struct.Q** %2, align 8
-  %3 = load %struct.Q*, %struct.Q** %2, align 8
-  %4 = getelementptr inbounds %struct.Q, %struct.Q* %3, i32 0, i32 0
-  %5 = call i32 bitcast (i32 (i32)* @_ZL3baz3Foo to i32 (%struct.Foo*)*)(%struct.Foo* getelementptr (%struct.Foo, %struct.Foo *null, i32 1))
-  store i32 %5, i32* %4, align 4
+define linkonce_odr void @_ZN1QC2Ev(ptr) unnamed_addr align 2 {
+  %2 = alloca ptr, align 8
+  store ptr %0, ptr %2, align 8
+  %3 = load ptr, ptr %2, align 8
+  %4 = call i32 @_ZL3baz3Foo(ptr getelementptr (%struct.Foo, ptr null, i32 1))
+  store i32 %4, ptr %3, align 4
   ret void
 }
 
 define internal i32 @_ZL3baz3Foo(i32) {
   %2 = alloca %struct.Foo, align 4
-  %3 = getelementptr inbounds %struct.Foo, %struct.Foo* %2, i32 0, i32 0
-  store i32 %0, i32* %3, align 4
-  %4 = getelementptr inbounds %struct.Foo, %struct.Foo* %2, i32 0, i32 0
-  %5 = load i32, i32* %4, align 4
-  ret i32 %5
+  store i32 %0, ptr %2, align 4
+  %3 = load i32, ptr %2, align 4
+  ret i32 %3
 }
 
 ; Function Attrs: noinline ssp uwtable

diff  --git a/llvm/test/Transforms/GlobalOpt/evaluate-call.ll b/llvm/test/Transforms/GlobalOpt/evaluate-call.ll
index 96b6d55f601d7..c0fda9068c553 100644
--- a/llvm/test/Transforms/GlobalOpt/evaluate-call.ll
+++ b/llvm/test/Transforms/GlobalOpt/evaluate-call.ll
@@ -1,9 +1,9 @@
 ; Checks if bitcasted call expression can be evaluated
 ; Given call expresion:
-;   %struct.Bar* bitcast (%struct.Foo* (%struct.Foo*)* @_ZL3fooP3Foo to %struct.Bar* (%struct.Bar*)*)(%struct.Bar* @gBar)
+;   ptr @_ZL3fooP3Foo(ptr @gBar)
 ; We evaluate call to function @_ZL3fooP3Foo casting both parameter and return value
 ; Given call expression:
-;   void bitcast (void (%struct.Foo*)* @_ZL3bazP3Foo to void (%struct.Bar*)*)(%struct.Bar* @gBar) 
+;   void @_ZL3bazP3Foo(ptr @gBar) 
 ; We evaluate call to function _ZL3bazP3Foo casting its parameter and check that evaluated value (nullptr)
 ; is handled correctly
 
@@ -11,7 +11,7 @@
 
 ; CHECK:      @gBar = local_unnamed_addr global %struct.Bar { i32 2 }
 ; CHECK-NEXT: @_s = local_unnamed_addr global %struct.S { i32 1 }, align 4
-; CHECK-NEXT: @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] zeroinitializer
+; CHECK-NEXT: @llvm.global_ctors = appending global [0 x { i32, ptr, ptr }] zeroinitializer
 
 ; CHECK:      define i32 @main()
 ; CHECK-NEXT:   ret i32 0
@@ -25,58 +25,54 @@ target triple = "x86_64-apple-macosx10.12.0"
 
 @gBar = global %struct.Bar zeroinitializer, align 4
 @_s = global %struct.S zeroinitializer, align 4
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_main.cpp, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_main.cpp, ptr null }]
 
 define internal void @__cxx_global_var_init() section "__TEXT,__StaticInit,regular,pure_instructions" {
-  call void @_ZN1SC1Ev_alias(%struct.S* @_s)
+  call void @_ZN1SC1Ev_alias(ptr @_s)
   ret void
 }
 
- at _ZN1SC1Ev_alias = linkonce_odr unnamed_addr alias void (%struct.S*), void (%struct.S*)* @_ZN1SC1Ev
+ at _ZN1SC1Ev_alias = linkonce_odr unnamed_addr alias void (ptr), ptr @_ZN1SC1Ev
 
-define linkonce_odr void @_ZN1SC1Ev(%struct.S*) unnamed_addr align 2 {
-  %2 = alloca %struct.S*, align 8
-  store %struct.S* %0, %struct.S** %2, align 8
-  %3 = load %struct.S*, %struct.S** %2, align 8
-  call void @_ZN1SC2Ev(%struct.S* %3)
+define linkonce_odr void @_ZN1SC1Ev(ptr) unnamed_addr align 2 {
+  %2 = alloca ptr, align 8
+  store ptr %0, ptr %2, align 8
+  %3 = load ptr, ptr %2, align 8
+  call void @_ZN1SC2Ev(ptr %3)
   ret void
 }
 
 define i32 @main()  {
   %1 = alloca i32, align 4
-  store i32 0, i32* %1, align 4
+  store i32 0, ptr %1, align 4
   ret i32 0
 }
 
-define linkonce_odr void @_ZN1SC2Ev(%struct.S*) unnamed_addr align 2 {
-  %2 = alloca %struct.S*, align 8
-  store %struct.S* %0, %struct.S** %2, align 8
-  %3 = load %struct.S*, %struct.S** %2, align 8
-  %4 = getelementptr inbounds %struct.S, %struct.S* %3, i32 0, i32 0
-  %5 = call %struct.Bar* bitcast (%struct.Foo* (%struct.Foo*)* @_ZL3fooP3Foo to %struct.Bar* (%struct.Bar*)*)(%struct.Bar* @gBar)
-  %6 = getelementptr inbounds %struct.Bar, %struct.Bar* %5, i32 0, i32 0
-  %7 = load i32, i32* %6, align 4
-  store i32 %7, i32* %4, align 4
-  call void bitcast (void (%struct.Foo*)* @_ZL3bazP3Foo to void (%struct.Bar*)*)(%struct.Bar* @gBar)
+define linkonce_odr void @_ZN1SC2Ev(ptr) unnamed_addr align 2 {
+  %2 = alloca ptr, align 8
+  store ptr %0, ptr %2, align 8
+  %3 = load ptr, ptr %2, align 8
+  %4 = call ptr @_ZL3fooP3Foo(ptr @gBar)
+  %5 = load i32, ptr %4, align 4
+  store i32 %5, ptr %3, align 4
+  call void @_ZL3bazP3Foo(ptr @gBar)
   ret void
 }
 
-define internal %struct.Foo* @_ZL3fooP3Foo(%struct.Foo*) {
-  %2 = alloca %struct.Foo*, align 8
-  store %struct.Foo* %0, %struct.Foo** %2, align 8
-  %3 = load %struct.Foo*, %struct.Foo** %2, align 8
-  %4 = getelementptr inbounds %struct.Foo, %struct.Foo* %3, i32 0, i32 0
-  store i32 1, i32* %4, align 4
-  %5 = load %struct.Foo*, %struct.Foo** %2, align 8
-  ret %struct.Foo* %5
+define internal ptr @_ZL3fooP3Foo(ptr) {
+  %2 = alloca ptr, align 8
+  store ptr %0, ptr %2, align 8
+  %3 = load ptr, ptr %2, align 8
+  store i32 1, ptr %3, align 4
+  %4 = load ptr, ptr %2, align 8
+  ret ptr %4
 }
 
-define internal void @_ZL3bazP3Foo(%struct.Foo*) {
-  %2 = alloca %struct.Foo*, align 8
-  store %struct.Foo* %0, %struct.Foo** %2, align 8
-  %3 = load %struct.Foo*, %struct.Foo** %2, align 8
-  %4 = getelementptr inbounds %struct.Foo, %struct.Foo* %3, i32 0, i32 0
-  store i32 2, i32* %4, align 4
+define internal void @_ZL3bazP3Foo(ptr) {
+  %2 = alloca ptr, align 8
+  store ptr %0, ptr %2, align 8
+  %3 = load ptr, ptr %2, align 8
+  store i32 2, ptr %3, align 4
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/evaluate-constfold-call.ll b/llvm/test/Transforms/GlobalOpt/evaluate-constfold-call.ll
index 0464926872abb..83d8bc6e7c24f 100644
--- a/llvm/test/Transforms/GlobalOpt/evaluate-constfold-call.ll
+++ b/llvm/test/Transforms/GlobalOpt/evaluate-constfold-call.ll
@@ -5,7 +5,7 @@
 
 ; CHECK:        @_q = dso_local local_unnamed_addr global %struct.Q { i32 1066527622 }
 ; CHECK:        define dso_local i32 @main
-; CHECK-NEXT:     %[[V:.+]] = load i32, i32* getelementptr inbounds (%struct.Q, %struct.Q* @_q, i64 0, i32 0)
+; CHECK-NEXT:     %[[V:.+]] = load i32, ptr @_q
 ; CHECK-NEXT:     ret i32 %[[V]]
 
 source_filename = "main.cpp"
@@ -17,31 +17,30 @@ target triple = "x86_64-none-linux-gnu"
 $_ZN1QC2Ev = comdat any
 
 @_q = dso_local global %struct.Q zeroinitializer, align 4
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_main.cpp, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_main.cpp, ptr null }]
 
 define internal void @__cxx_global_var_init() section ".text.startup" {
-  call void @_ZN1QC2Ev(%struct.Q* @_q)
+  call void @_ZN1QC2Ev(ptr @_q)
   ret void
 }
 
-define linkonce_odr dso_local void @_ZN1QC2Ev(%struct.Q*) unnamed_addr #1 comdat align 2 {
-  %2 = alloca %struct.Q*, align 8
-  store %struct.Q* %0, %struct.Q** %2, align 8
-  %3 = load %struct.Q*, %struct.Q** %2, align 8
-  %4 = getelementptr inbounds %struct.Q, %struct.Q* %3, i32 0, i32 0
-  %5 = call i32 bitcast (float (float, float)* @fmodf to i32 (float, float)*)(float 0x40091EB860000000, float 2.000000e+00)
-  store i32 %5, i32* %4, align 4
+define linkonce_odr dso_local void @_ZN1QC2Ev(ptr) unnamed_addr #1 comdat align 2 {
+  %2 = alloca ptr, align 8
+  store ptr %0, ptr %2, align 8
+  %3 = load ptr, ptr %2, align 8
+  %4 = call i32 @fmodf(float 0x40091EB860000000, float 2.000000e+00)
+  store i32 %4, ptr %3, align 4
   ret void
 }
 
-define dso_local i32 @main(i32, i8**) {
+define dso_local i32 @main(i32, ptr) {
   %3 = alloca i32, align 4
   %4 = alloca i32, align 4
-  %5 = alloca i8**, align 8
-  store i32 0, i32* %3, align 4
-  store i32 %0, i32* %4, align 4
-  store i8** %1, i8*** %5, align 8
-  %6 = load i32, i32* getelementptr inbounds (%struct.Q, %struct.Q* @_q, i32 0, i32 0), align 4
+  %5 = alloca ptr, align 8
+  store i32 0, ptr %3, align 4
+  store i32 %0, ptr %4, align 4
+  store ptr %1, ptr %5, align 8
+  %6 = load i32, ptr @_q, align 4
   ret i32 %6
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/evaluate-load-uniform.ll b/llvm/test/Transforms/GlobalOpt/evaluate-load-uniform.ll
index 64a2c70764001..568a28aa8aa9c 100644
--- a/llvm/test/Transforms/GlobalOpt/evaluate-load-uniform.ll
+++ b/llvm/test/Transforms/GlobalOpt/evaluate-load-uniform.ll
@@ -3,18 +3,18 @@
 
 ; Make sure that the load from uniform value @g1 succeeds during evaluation.
 
- at g1 = global [2 x i64*] zeroinitializer
- at g2 = global i64* inttoptr(i64 1 to i64*)
+ at g1 = global [2 x ptr] zeroinitializer
+ at g2 = global ptr inttoptr(i64 1 to ptr)
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @ctor, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @ctor, ptr null }]
 
 ;.
-; CHECK: @[[G1:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr global [2 x i64*] zeroinitializer
-; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr global i64* null
-; CHECK: @[[LLVM_GLOBAL_CTORS:[a-zA-Z0-9_$"\\.-]+]] = appending global [0 x { i32, void ()*, i8* }] zeroinitializer
+; CHECK: @[[G1:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr global [2 x ptr] zeroinitializer
+; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr global ptr null
+; CHECK: @[[LLVM_GLOBAL_CTORS:[a-zA-Z0-9_$"\\.-]+]] = appending global [0 x { i32, ptr, ptr }] zeroinitializer
 ;.
 define internal void @ctor() {
-  %v = load i64*, i64** getelementptr ([2 x i64*], [2 x i64*]* @g1, i64 0, i64 1)
-  store i64* %v, i64** @g2
+  %v = load ptr, ptr getelementptr ([2 x ptr], ptr @g1, i64 0, i64 1)
+  store ptr %v, ptr @g2
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/externally-initialized-aggregate.ll b/llvm/test/Transforms/GlobalOpt/externally-initialized-aggregate.ll
index eca0f8a7d9341..b53b9d447aea4 100644
--- a/llvm/test/Transforms/GlobalOpt/externally-initialized-aggregate.ll
+++ b/llvm/test/Transforms/GlobalOpt/externally-initialized-aggregate.ll
@@ -16,8 +16,8 @@ define i32 @foo() {
 ; CHECK-LABEL: define i32 @foo
 entry:
 ; This load uses the split global, but cannot be constant-propagated away.
-; CHECK: %0 = load i32, i32* @a.0
-  %0 = load i32, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @a, i32 0, i32 0), align 4
+; CHECK: %0 = load i32, ptr @a.0
+  %0 = load i32, ptr @a, align 4
   ret i32 %0
 }
 
@@ -25,8 +25,8 @@ define i32 @bar() {
 ; CHECK-LABEL: define i32 @bar
 entry:
 ; This load uses the split global, but cannot be constant-propagated away.
-; CHECK: %0 = load i32, i32* @b.0
-  %0 = load i32, i32* getelementptr inbounds ({i32, i32}, {i32, i32}* @b, i32 0, i32 0), align 4
+; CHECK: %0 = load i32, ptr @b.0
+  %0 = load i32, ptr getelementptr inbounds ({i32, i32}, ptr @b, i32 0, i32 0), align 4
   ret i32 %0
 }
 
@@ -34,17 +34,17 @@ define void @init() {
 ; CHECK-LABEL: define void @init
 entry:
 ; This store uses the split global, but cannot be constant-propagated away.
-; CHECK: store i32 1, i32* @a.0
-  store i32 1, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @a, i32 0, i32 0), align 4
+; CHECK: store i32 1, ptr @a.0
+  store i32 1, ptr @a, align 4
 ; This store can be removed, because the second element of @a is never read.
-; CHECK-NOT: store i32 2, i32* @a.1
-  store i32 2, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @a, i32 0, i32 1), align 4
+; CHECK-NOT: store i32 2, ptr @a.1
+  store i32 2, ptr getelementptr inbounds ([2 x i32], ptr @a, i32 0, i32 1), align 4
 
 ; This store uses the split global, but cannot be constant-propagated away.
-; CHECK: store i32 3, i32* @b.0
-  store i32 3, i32* getelementptr inbounds ({i32, i32}, {i32, i32}* @b, i32 0, i32 0), align 4
+; CHECK: store i32 3, ptr @b.0
+  store i32 3, ptr getelementptr inbounds ({i32, i32}, ptr @b, i32 0, i32 0), align 4
 ; This store can be removed, because the second element of @b is never read.
-; CHECK-NOT: store i32 4, i32* @b.1
-  store i32 4, i32* getelementptr inbounds ({i32, i32}, {i32, i32}* @b, i32 0, i32 1), align 4
+; CHECK-NOT: store i32 4, ptr @b.1
+  store i32 4, ptr getelementptr inbounds ({i32, i32}, ptr @b, i32 0, i32 1), align 4
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/externally-initialized-global-ctr.ll b/llvm/test/Transforms/GlobalOpt/externally-initialized-global-ctr.ll
index ddabcd99bb8ad..ad26a1a9bbfff 100644
--- a/llvm/test/Transforms/GlobalOpt/externally-initialized-global-ctr.ll
+++ b/llvm/test/Transforms/GlobalOpt/externally-initialized-global-ctr.ll
@@ -7,23 +7,23 @@
 
 target datalayout = "p:16:32:128" 
 
-%struct.ButtonInitData = type { i8* }
+%struct.ButtonInitData = type { ptr }
 
 @_ZL14buttonInitData = internal global [1 x %struct.ButtonInitData] zeroinitializer, align 4
 
 @"\01L_OBJC_METH_VAR_NAME_40" = internal global [7 x i8] c"print:\00", section "__TEXT,__objc_methname,cstring_literals", align 1
-@"\01L_OBJC_SELECTOR_REFERENCES_41" = internal externally_initialized  global i8* getelementptr inbounds ([7 x i8], [7 x i8]* @"\01L_OBJC_METH_VAR_NAME_40", i32 0, i32 0), section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
+@"\01L_OBJC_SELECTOR_REFERENCES_41" = internal externally_initialized  global ptr @"\01L_OBJC_METH_VAR_NAME_40", section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I_a, i8* null }]
- at llvm.used = appending global [2 x i8*] [i8* getelementptr inbounds ([7 x i8], [7 x i8]* @"\01L_OBJC_METH_VAR_NAME_40", i32 0, i32 0),  i8* bitcast (i8** @"\01L_OBJC_SELECTOR_REFERENCES_41" to i8*)]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I_a, ptr null }]
+ at llvm.used = appending global [2 x ptr] [ptr @"\01L_OBJC_METH_VAR_NAME_40",  ptr @"\01L_OBJC_SELECTOR_REFERENCES_41"]
 
 ; Choose the preferred alignment.
 
-; CHECK: @[[_ZL14BUTTONINITDATA_0_0:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global i8* null, align 16
+; CHECK: @[[_ZL14BUTTONINITDATA_0_0:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global ptr null, align 16
 ;.
 define internal void @__cxx_global_var_init() section "__TEXT,__StaticInit,regular,pure_instructions" {
-  %1 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_41", !invariant.load !2009
-  store i8* %1, i8** getelementptr inbounds ([1 x %struct.ButtonInitData], [1 x %struct.ButtonInitData]* @_ZL14buttonInitData, i32 0, i32 0, i32 0), align 4
+  %1 = load ptr, ptr @"\01L_OBJC_SELECTOR_REFERENCES_41", !invariant.load !2009
+  store ptr %1, ptr @_ZL14buttonInitData, align 4
   ret void
 }
 
@@ -32,18 +32,18 @@ define internal void @_GLOBAL__I_a() section "__TEXT,__StaticInit,regular,pure_i
   ret void
 }
 
-declare void @test(i8*)
+declare void @test(ptr)
 
 ; The preferred alignment is available.
 
 define void @print() {
 ; CHECK-LABEL: @print(
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8*, i8** @_ZL14buttonInitData.0, align 16
-; CHECK-NEXT:    call void @test(i8* [[TMP1]])
+; CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr @_ZL14buttonInitData.0, align 16
+; CHECK-NEXT:    call void @test(ptr [[TMP1]])
 ; CHECK-NEXT:    ret void
 ;
-  %1 = load i8*, i8** getelementptr inbounds ([1 x %struct.ButtonInitData], [1 x %struct.ButtonInitData]* @_ZL14buttonInitData, i32 0, i32 0, i32 0), align 4
-  call void @test(i8* %1)
+  %1 = load ptr, ptr @_ZL14buttonInitData, align 4
+  call void @test(ptr %1)
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/externally-initialized.ll b/llvm/test/Transforms/GlobalOpt/externally-initialized.ll
index 29ed13e38ef26..7a8244ea8297a 100644
--- a/llvm/test/Transforms/GlobalOpt/externally-initialized.ll
+++ b/llvm/test/Transforms/GlobalOpt/externally-initialized.ll
@@ -16,22 +16,22 @@
 define void @foo() {
 ; CHECK-LABEL: foo
 entry:
-; CHECK: store i32 42, i32* @a
-  store i32 42, i32* @a
+; CHECK: store i32 42, ptr @a
+  store i32 42, ptr @a
   ret void
 }
 define i32 @bar() {
 ; CHECK-LABEL: bar
 entry:
-; CHECK: %val = load i32, i32* @a
-  %val = load i32, i32* @a
+; CHECK: %val = load i32, ptr @a
+  %val = load i32, ptr @a
   ret i32 %val
 }
 
 define i32 @baz() {
 ; CHECK-LABEL: baz
 entry:
-; CHECK: %val = load i32, i32* @b
-  %val = load i32, i32* @b
+; CHECK: %val = load i32, ptr @b
+  %val = load i32, ptr @b
   ret i32 %val
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/global-demotion.ll b/llvm/test/Transforms/GlobalOpt/global-demotion.ll
index ec70acf469eeb..f29d4bd484219 100644
--- a/llvm/test/Transforms/GlobalOpt/global-demotion.ll
+++ b/llvm/test/Transforms/GlobalOpt/global-demotion.ll
@@ -9,8 +9,8 @@
 ; CHECK-LABEL: @test1
 define internal i32 @test1() norecurse {
 ; CHECK-NOT: @G1
-  store i32 4, i32* @G1
-  %a = load i32, i32* @G1
+  store i32 4, ptr @G1
+  %a = load i32, ptr @G1
 ; CHECK: ret
   ret i32 %a
 }
@@ -19,8 +19,8 @@ define internal i32 @test1() norecurse {
 ; CHECK-LABEL: @test2
 define internal i32 @test2() norecurse {
 ; CHECK-NOT: %G2
-  %a = load i32, i32* @G2
-  store i32 4, i32* @G2
+  %a = load i32, ptr @G2
+  store i32 4, ptr @G2
 ; CHECK: ret
   ret i32 %a
 }
@@ -31,9 +31,8 @@ define internal i32 @test2() norecurse {
 ; CHECK-LABEL: @test3
 define internal i32 @test3() norecurse {
 ; CHECK-NOT: %G3
-  %x = getelementptr i32,i32* @G3, i32 0
-  %a = load i32, i32* %x
-  store i32 4, i32* @G3
+  %a = load i32, ptr @G3
+  store i32 4, ptr @G3
 ; CHECK: ret
   ret i32 %a
 }
@@ -44,9 +43,8 @@ define internal i32 @test3() norecurse {
 ; CHECK-LABEL: @test4
 define internal i32 @test4() norecurse {
 ; CHECK-NOT: %G4
-  store i32 4, i32* @G4
-  %x = bitcast i32* @G4 to i64*
-  %a = load i64, i64* %x
+  store i32 4, ptr @G4
+  %a = load i64, ptr @G4
   %b = trunc i64 %a to i32
 ; CHECK: ret
   ret i32 %b
@@ -57,9 +55,8 @@ define internal i32 @test4() norecurse {
 ; CHECK-LABEL: @test5
 define internal i32 @test5() norecurse {
 ; CHECK-NOT: @G5
-  store i32 4, i32* @G5
-  %x = bitcast i32* @G5 to i16*
-  %a = load i16, i16* %x
+  store i32 4, ptr @G5
+  %a = load i16, ptr @G5
   %b = zext i16 %a to i32
 ; CHECK: ret
   ret i32 %b

diff  --git a/llvm/test/Transforms/GlobalOpt/globalsra-align.ll b/llvm/test/Transforms/GlobalOpt/globalsra-align.ll
index a370a2b4bfbb5..aadd5b866a822 100644
--- a/llvm/test/Transforms/GlobalOpt/globalsra-align.ll
+++ b/llvm/test/Transforms/GlobalOpt/globalsra-align.ll
@@ -3,7 +3,7 @@
 
 target datalayout = "p:16:32:64" ; 16-bit pointers with 32-bit ABI alignment and 64-bit preferred alignmentt
 
- at a = internal externally_initialized global [3 x [7 x i32*]] zeroinitializer, align 16
+ at a = internal externally_initialized global [3 x [7 x ptr]] zeroinitializer, align 16
 
 ; PR50253
 ; The alignments are correct initially, but they should be updated
@@ -14,47 +14,47 @@ target datalayout = "p:16:32:64" ; 16-bit pointers with 32-bit ABI alignment and
 ; preferred alignment from the datalayout.
 
 ;.
-; CHECK: @[[A_4:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr externally_initialized global i32* null, align 8
-; CHECK: @[[A_5:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr externally_initialized global i32* null, align 16
-; CHECK: @[[A_6:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr externally_initialized global i32* null, align 16
-; CHECK: @[[A_7:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr externally_initialized global i32* null, align 16
+; CHECK: @[[A_4:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr externally_initialized global ptr null, align 8
+; CHECK: @[[A_5:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr externally_initialized global ptr null, align 16
+; CHECK: @[[A_6:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr externally_initialized global ptr null, align 16
+; CHECK: @[[A_7:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr externally_initialized global ptr null, align 16
 ;.
-define i32* @reduce_align_0() {
+define ptr @reduce_align_0() {
 ; CHECK-LABEL: @reduce_align_0(
-; CHECK-NEXT:    [[X:%.*]] = load i32*, i32** @a.4, align 8
-; CHECK-NEXT:    ret i32* [[X]]
+; CHECK-NEXT:    [[X:%.*]] = load ptr, ptr @a.4, align 8
+; CHECK-NEXT:    ret ptr [[X]]
 ;
-  %x = load i32*, i32** getelementptr inbounds ([3 x [7 x i32*]], [3 x [7 x i32*]]* @a, i64 0, i64 2, i64 0), align 8
-  store i32* null, i32** getelementptr inbounds ([3 x [7 x i32*]], [3 x [7 x i32*]]* @a, i64 0, i64 1, i64 0), align 4
-  ret i32* %x
+  %x = load ptr, ptr getelementptr inbounds ([3 x [7 x ptr]], ptr @a, i64 0, i64 2, i64 0), align 8
+  store ptr null, ptr getelementptr inbounds ([3 x [7 x ptr]], ptr @a, i64 0, i64 1, i64 0), align 4
+  ret ptr %x
 }
 
-define i32* @reduce_align_1() {
+define ptr @reduce_align_1() {
 ; CHECK-LABEL: @reduce_align_1(
-; CHECK-NEXT:    [[X:%.*]] = load i32*, i32** @a.5, align 16
-; CHECK-NEXT:    ret i32* [[X]]
+; CHECK-NEXT:    [[X:%.*]] = load ptr, ptr @a.5, align 16
+; CHECK-NEXT:    ret ptr [[X]]
 ;
-  %x = load i32*, i32** getelementptr inbounds ([3 x [7 x i32*]], [3 x [7 x i32*]]* @a, i64 0, i64 2, i64 1), align 4
-  store i32* null, i32** getelementptr inbounds ([3 x [7 x i32*]], [3 x [7 x i32*]]* @a, i64 0, i64 1, i64 1), align 16
-  ret i32* %x
+  %x = load ptr, ptr getelementptr inbounds ([3 x [7 x ptr]], ptr @a, i64 0, i64 2, i64 1), align 4
+  store ptr null, ptr getelementptr inbounds ([3 x [7 x ptr]], ptr @a, i64 0, i64 1, i64 1), align 16
+  ret ptr %x
 }
 
-define i32* @reduce_align_2() {
+define ptr @reduce_align_2() {
 ; CHECK-LABEL: @reduce_align_2(
-; CHECK-NEXT:    [[X:%.*]] = load i32*, i32** @a.6, align 16
-; CHECK-NEXT:    ret i32* [[X]]
+; CHECK-NEXT:    [[X:%.*]] = load ptr, ptr @a.6, align 16
+; CHECK-NEXT:    ret ptr [[X]]
 ;
-  %x = load i32*, i32** getelementptr inbounds ([3 x [7 x i32*]], [3 x [7 x i32*]]* @a, i64 0, i64 2, i64 2), align 16
-  store i32* null, i32** getelementptr inbounds ([3 x [7 x i32*]], [3 x [7 x i32*]]* @a, i64 0, i64 1, i64 2), align 4
-  ret i32* %x
+  %x = load ptr, ptr getelementptr inbounds ([3 x [7 x ptr]], ptr @a, i64 0, i64 2, i64 2), align 16
+  store ptr null, ptr getelementptr inbounds ([3 x [7 x ptr]], ptr @a, i64 0, i64 1, i64 2), align 4
+  ret ptr %x
 }
 
-define i32* @reduce_align_3() {
+define ptr @reduce_align_3() {
 ; CHECK-LABEL: @reduce_align_3(
-; CHECK-NEXT:    [[X:%.*]] = load i32*, i32** @a.7, align 16
-; CHECK-NEXT:    ret i32* [[X]]
+; CHECK-NEXT:    [[X:%.*]] = load ptr, ptr @a.7, align 16
+; CHECK-NEXT:    ret ptr [[X]]
 ;
-  %x = load i32*, i32** getelementptr inbounds ([3 x [7 x i32*]], [3 x [7 x i32*]]* @a, i64 0, i64 2, i64 3), align 4
-  store i32* null, i32** getelementptr inbounds ([3 x [7 x i32*]], [3 x [7 x i32*]]* @a, i64 0, i64 1, i64 3), align 8
-  ret i32* %x
+  %x = load ptr, ptr getelementptr inbounds ([3 x [7 x ptr]], ptr @a, i64 0, i64 2, i64 3), align 4
+  store ptr null, ptr getelementptr inbounds ([3 x [7 x ptr]], ptr @a, i64 0, i64 1, i64 3), align 8
+  ret ptr %x
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/globalsra-generic-type.ll b/llvm/test/Transforms/GlobalOpt/globalsra-generic-type.ll
index d30fdae4ef56d..9c28bb3fac0ff 100644
--- a/llvm/test/Transforms/GlobalOpt/globalsra-generic-type.ll
+++ b/llvm/test/Transforms/GlobalOpt/globalsra-generic-type.ll
@@ -7,8 +7,8 @@ define void @test() {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:    ret void
 ;
-  store i32 1, i32* bitcast ([8 x i8]* @g to i32*)
-  store i32 2, i32* getelementptr (i32, i32* bitcast ([8 x i8]* @g to i32*), i64 1)
+  store i32 1, ptr @g
+  store i32 2, ptr getelementptr (i32, ptr @g, i64 1)
   ret void
 }
 
@@ -16,7 +16,7 @@ define i32 @load1() {
 ; CHECK-LABEL: @load1(
 ; CHECK-NEXT:    ret i32 1
 ;
-  %v = load i32, i32* bitcast ([8 x i8]* @g to i32*)
+  %v = load i32, ptr @g
   ret i32 %v
 }
 
@@ -24,6 +24,6 @@ define i32 @load2() {
 ; CHECK-LABEL: @load2(
 ; CHECK-NEXT:    ret i32 2
 ;
-  %v = load i32, i32* getelementptr (i32, i32* bitcast ([8 x i8]* @g to i32*), i64 1)
+  %v = load i32, ptr getelementptr (i32, ptr @g, i64 1)
   ret i32 %v
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/globalsra-multigep.ll b/llvm/test/Transforms/GlobalOpt/globalsra-multigep.ll
index c926489b9d7f7..be2575b4b011e 100644
--- a/llvm/test/Transforms/GlobalOpt/globalsra-multigep.ll
+++ b/llvm/test/Transforms/GlobalOpt/globalsra-multigep.ll
@@ -9,8 +9,8 @@ target triple = "x86_64-unknown-linux-gnu"
 
 define i16 @test(i64 %a1) {
 entry:
-  %g1 = getelementptr inbounds <{ [8 x i16], [8 x i16] }>, <{ [8 x i16], [8 x i16] }>* @g_data, i64 0, i32 0
-  %arrayidx.i = getelementptr inbounds [8 x i16], [8 x i16]* %g1, i64 0, i64 %a1
-  %r = load i16, i16* %arrayidx.i, align 2
+  %g1 = getelementptr inbounds <{ [8 x i16], [8 x i16] }>, ptr @g_data, i64 0, i32 0
+  %arrayidx.i = getelementptr inbounds [8 x i16], ptr %g1, i64 0, i64 %a1
+  %r = load i16, ptr %arrayidx.i, align 2
   ret i16 %r
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/globalsra-partial.ll b/llvm/test/Transforms/GlobalOpt/globalsra-partial.ll
index 0998dff2f9cde..17cc3210b92d6 100644
--- a/llvm/test/Transforms/GlobalOpt/globalsra-partial.ll
+++ b/llvm/test/Transforms/GlobalOpt/globalsra-partial.ll
@@ -3,23 +3,23 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
- at G = internal global { i32, [4 x float] } zeroinitializer               ; <{ i32, [4 x float] }*> [#uses=3]
+ at G = internal global { i32, [4 x float] } zeroinitializer               ; <ptr> [#uses=3]
 
 ; CHECK: @G = internal unnamed_addr global { i32, [4 x float] }
 ; CHECK: 12345
 define void @onlystore() {
-        store i32 12345, i32* getelementptr ({ i32, [4 x float] }, { i32, [4 x float] }* @G, i32 0, i32 0)
+        store i32 12345, ptr getelementptr ({ i32, [4 x float] }, ptr @G, i32 0, i32 0)
         ret void
 }
 
 define void @storeinit(i32 %i) {
-        %Ptr = getelementptr { i32, [4 x float] }, { i32, [4 x float] }* @G, i32 0, i32 1, i32 %i             ; <float*> [#uses=1]
-        store float 1.000000e+00, float* %Ptr
+        %Ptr = getelementptr { i32, [4 x float] }, ptr @G, i32 0, i32 1, i32 %i             ; <ptr> [#uses=1]
+        store float 1.000000e+00, ptr %Ptr
         ret void
 }
 
 define float @readval(i32 %i) {
-        %Ptr = getelementptr { i32, [4 x float] }, { i32, [4 x float] }* @G, i32 0, i32 1, i32 %i             ; <float*> [#uses=1]
-        %V = load float, float* %Ptr           ; <float> [#uses=1]
+        %Ptr = getelementptr { i32, [4 x float] }, ptr @G, i32 0, i32 1, i32 %i             ; <ptr> [#uses=1]
+        %V = load float, ptr %Ptr           ; <float> [#uses=1]
         ret float %V
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/globalsra-recursive.ll b/llvm/test/Transforms/GlobalOpt/globalsra-recursive.ll
index 0e40f65b5291f..14ec7da36f5fe 100644
--- a/llvm/test/Transforms/GlobalOpt/globalsra-recursive.ll
+++ b/llvm/test/Transforms/GlobalOpt/globalsra-recursive.ll
@@ -8,20 +8,20 @@
 
 define void @test() {
 ; CHECK-LABEL: @test(
-; CHECK-NEXT:    store { i32, i32 } zeroinitializer, { i32, i32 }* @g, align 4
-; CHECK-NEXT:    store { i32, i32 } { i32 0, i32 1 }, { i32, i32 }* @g, align 4
+; CHECK-NEXT:    store { i32, i32 } zeroinitializer, ptr @g, align 4
+; CHECK-NEXT:    store { i32, i32 } { i32 0, i32 1 }, ptr @g, align 4
 ; CHECK-NEXT:    ret void
 ;
-  store { i32, i32 } zeroinitializer, { i32, i32 }* @g
-  store { i32, i32 } { i32 0, i32 1 }, { i32, i32 }* @g
+  store { i32, i32 } zeroinitializer, ptr @g
+  store { i32, i32 } { i32 0, i32 1 }, ptr @g
   ret void
 }
 
 define { i32, i32 } @load() {
 ; CHECK-LABEL: @load(
-; CHECK-NEXT:    [[V:%.*]] = load { i32, i32 }, { i32, i32 }* @g, align 4
+; CHECK-NEXT:    [[V:%.*]] = load { i32, i32 }, ptr @g, align 4
 ; CHECK-NEXT:    ret { i32, i32 } [[V]]
 ;
-  %v = load { i32, i32 }, { i32, i32 }* @g
+  %v = load { i32, i32 }, ptr @g
   ret { i32, i32 } %v
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/globalsra-unknown-index.ll b/llvm/test/Transforms/GlobalOpt/globalsra-unknown-index.ll
index 972bab5d8b83b..aec795113e76c 100644
--- a/llvm/test/Transforms/GlobalOpt/globalsra-unknown-index.ll
+++ b/llvm/test/Transforms/GlobalOpt/globalsra-unknown-index.ll
@@ -10,7 +10,7 @@
 @addr = external global i8
 
 define void @frob() {
-  store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 ptrtoint (i8* @addr to i64)), align 4
+  store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 ptrtoint (ptr @addr to i64)), align 4
   ret void
 }
 
@@ -19,10 +19,9 @@ define void @frob() {
 ; CHECK: %b = load
 ; CHECK: add i32 %a, %b
 define i32 @borf(i64 %i, i64 %j) {
-  %p = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 0
-  %a = load i32, i32* %p
-  %q = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 1, i64 0
-  %b = load i32, i32* %q
+  %a = load i32, ptr @Y
+  %q = getelementptr inbounds [3 x %struct.X], ptr @Y, i64 0, i64 0, i32 1, i64 0
+  %b = load i32, ptr %q
   %c = add i32 %a, %b
   ret i32 %c
 }
@@ -32,10 +31,10 @@ define i32 @borf(i64 %i, i64 %j) {
 ; CHECK: %b = load
 ; CHECK: add i32 %a, %b
 define i32 @borg(i64 %i, i64 %j) {
-  %p = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 1, i32 0, i64 1
-  %a = load i32, i32* %p
-  %q = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 1, i32 1, i64 1
-  %b = load i32, i32* %q
+  %p = getelementptr inbounds [3 x %struct.X], ptr @Y, i64 0, i64 1, i32 0, i64 1
+  %a = load i32, ptr %p
+  %q = getelementptr inbounds [3 x %struct.X], ptr @Y, i64 0, i64 1, i32 1, i64 1
+  %b = load i32, ptr %q
   %c = add i32 %a, %b
   ret i32 %c
 }
@@ -45,10 +44,10 @@ define i32 @borg(i64 %i, i64 %j) {
 ; CHECK: %b = load
 ; CHECK: add i32 %a, %b
 define i32 @borh(i64 %i, i64 %j) {
-  %p = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 2, i32 0, i64 2
-  %a = load i32, i32* %p
-  %q = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 2, i32 1, i64 2
-  %b = load i32, i32* %q
+  %p = getelementptr inbounds [3 x %struct.X], ptr @Y, i64 0, i64 2, i32 0, i64 2
+  %a = load i32, ptr %p
+  %q = getelementptr inbounds [3 x %struct.X], ptr @Y, i64 0, i64 2, i32 1, i64 2
+  %b = load i32, ptr %q
   %c = add i32 %a, %b
   ret i32 %c
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/globalsra.ll b/llvm/test/Transforms/GlobalOpt/globalsra.ll
index bf7249ba31a63..3cc9259b3c686 100644
--- a/llvm/test/Transforms/GlobalOpt/globalsra.ll
+++ b/llvm/test/Transforms/GlobalOpt/globalsra.ll
@@ -5,41 +5,41 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
 @G = internal global { i32, float, { double } } {
     i32 1, 
     float 1.000000e+00, 
-    { double } { double 1.727000e+01 } }                ; <{ i32, float, { double } }*> [#uses=3]
+    { double } { double 1.727000e+01 } }                ; <ptr> [#uses=3]
 
 define void @onlystore() {
-        store i32 123, i32* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G, i32 0, i32 0)
+        store i32 123, ptr getelementptr ({ i32, float, { double } }, ptr @G, i32 0, i32 0)
         ret void
 }
 
 define float @storeinit() {
-        store float 1.000000e+00, float* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G, i32 0, i32 1)
-        %X = load float, float* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G, i32 0, i32 1)           ; <float> [#uses=1]
+        store float 1.000000e+00, ptr getelementptr ({ i32, float, { double } }, ptr @G, i32 0, i32 1)
+        %X = load float, ptr getelementptr ({ i32, float, { double } }, ptr @G, i32 0, i32 1)           ; <float> [#uses=1]
         ret float %X
 }
 
 define double @constantize() {
-        %X = load double, double* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G, i32 0, i32 2, i32 0)           ; <double> [#uses=1]
+        %X = load double, ptr getelementptr ({ i32, float, { double } }, ptr @G, i32 0, i32 2, i32 0)           ; <double> [#uses=1]
         ret double %X
 }
 
 @G2 = internal constant { i32, float, { double } } {
     i32 1, 
     float 1.000000e+00, 
-    { double } { double 1.727000e+01 } }                ; <{ i32, float, { double } }*> [#uses=3]
+    { double } { double 1.727000e+01 } }                ; <ptr> [#uses=3]
 
 define void @onlystore2() {
-        store i32 123, i32* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G2, i32 0, i32 0)
+        store i32 123, ptr getelementptr ({ i32, float, { double } }, ptr @G2, i32 0, i32 0)
         ret void
 }
 
 define float @storeinit2() {
-        store float 1.000000e+00, float* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G2, i32 0, i32 1)
-        %X = load float, float* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G2, i32 0, i32 1)           ; <float> [#uses=1]
+        store float 1.000000e+00, ptr getelementptr ({ i32, float, { double } }, ptr @G2, i32 0, i32 1)
+        %X = load float, ptr getelementptr ({ i32, float, { double } }, ptr @G2, i32 0, i32 1)           ; <float> [#uses=1]
         ret float %X
 }
 
 define double @constantize2() {
-        %X = load double, double* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G2, i32 0, i32 2, i32 0)           ; <double> [#uses=1]
+        %X = load double, ptr getelementptr ({ i32, float, { double } }, ptr @G2, i32 0, i32 2, i32 0)           ; <double> [#uses=1]
         ret double %X
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/heap-sra-1-no-null-opt.ll b/llvm/test/Transforms/GlobalOpt/heap-sra-1-no-null-opt.ll
index af50c9b392bb5..fd613cf12a135 100644
--- a/llvm/test/Transforms/GlobalOpt/heap-sra-1-no-null-opt.ll
+++ b/llvm/test/Transforms/GlobalOpt/heap-sra-1-no-null-opt.ll
@@ -2,31 +2,30 @@
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
 %struct.foo = type { i32, i32 }
- at X = internal global %struct.foo* null
+ at X = internal global ptr null
 ; CHECK: @X
 ; CHECK-NOT: @X.f0
 
 define void @bar(i64 %Size) nounwind noinline #0 {
 entry:
   %mallocsize = mul i64 %Size, 8                  ; <i64> [#uses=1]
-  %malloccall = tail call i8* @malloc(i64 %mallocsize) ; <i8*> [#uses=1]
-  %.sub = bitcast i8* %malloccall to %struct.foo* ; <%struct.foo*> [#uses=1]
-	store %struct.foo* %.sub, %struct.foo** @X, align 4
+  %malloccall = tail call ptr @malloc(i64 %mallocsize) ; <ptr> [#uses=1]
+	store ptr %malloccall, ptr @X, align 4
 	ret void
 }
 
-declare noalias i8* @malloc(i64)
+declare noalias ptr @malloc(i64)
 
 define i32 @baz() nounwind readonly noinline #0 {
 bb1.thread:
-	%0 = load %struct.foo*, %struct.foo** @X, align 4
+	%0 = load ptr, ptr @X, align 4
 	br label %bb1
 
 bb1:		; preds = %bb1, %bb1.thread
 	%i.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %indvar.next, %bb1 ]
 	%sum.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %3, %bb1 ]
-	%1 = getelementptr %struct.foo, %struct.foo* %0, i32 %i.0.reg2mem.0, i32 0
-	%2 = load i32, i32* %1, align 4
+	%1 = getelementptr %struct.foo, ptr %0, i32 %i.0.reg2mem.0, i32 0
+	%2 = load i32, ptr %1, align 4
 	%3 = add i32 %2, %sum.0.reg2mem.0
 	%indvar.next = add i32 %i.0.reg2mem.0, 1
 	%exitcond = icmp eq i32 %indvar.next, 1200

diff  --git a/llvm/test/Transforms/GlobalOpt/heap-sra-1.ll b/llvm/test/Transforms/GlobalOpt/heap-sra-1.ll
index d760f1a4851e4..e3318af328d64 100644
--- a/llvm/test/Transforms/GlobalOpt/heap-sra-1.ll
+++ b/llvm/test/Transforms/GlobalOpt/heap-sra-1.ll
@@ -4,29 +4,28 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
 ;; Heap SROA has been removed. This tests we don't perform heap SROA.
 ; CHECK: @X =
 	%struct.foo = type { i32, i32 }
- at X = internal global %struct.foo* null
+ at X = internal global ptr null
 
 define void @bar(i64 %Size) nounwind noinline {
 entry:
   %mallocsize = mul i64 %Size, 8                  ; <i64> [#uses=1]
-  %malloccall = tail call i8* @malloc(i64 %mallocsize) ; <i8*> [#uses=1]
-  %.sub = bitcast i8* %malloccall to %struct.foo* ; <%struct.foo*> [#uses=1]
-	store %struct.foo* %.sub, %struct.foo** @X, align 4
+  %malloccall = tail call ptr @malloc(i64 %mallocsize) ; <ptr> [#uses=1]
+	store ptr %malloccall, ptr @X, align 4
 	ret void
 }
 
-declare noalias i8* @malloc(i64)
+declare noalias ptr @malloc(i64)
 
 define i32 @baz() nounwind readonly noinline {
 bb1.thread:
-	%0 = load %struct.foo*, %struct.foo** @X, align 4		
+	%0 = load ptr, ptr @X, align 4		
 	br label %bb1
 
 bb1:		; preds = %bb1, %bb1.thread
 	%i.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %indvar.next, %bb1 ]
 	%sum.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %3, %bb1 ]
-	%1 = getelementptr %struct.foo, %struct.foo* %0, i32 %i.0.reg2mem.0, i32 0
-	%2 = load i32, i32* %1, align 4
+	%1 = getelementptr %struct.foo, ptr %0, i32 %i.0.reg2mem.0, i32 0
+	%2 = load i32, ptr %1, align 4
 	%3 = add i32 %2, %sum.0.reg2mem.0	
 	%indvar.next = add i32 %i.0.reg2mem.0, 1	
 	%exitcond = icmp eq i32 %indvar.next, 1200		
@@ -38,7 +37,7 @@ bb2:		; preds = %bb1
 
 define void @bam(i64 %Size) nounwind noinline #0 {
 entry:
-	%0 = load %struct.foo*, %struct.foo** @X, align 4
+	%0 = load ptr, ptr @X, align 4
         ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/heap-sra-2-no-null-opt.ll b/llvm/test/Transforms/GlobalOpt/heap-sra-2-no-null-opt.ll
index ed46fee7a0806..360ae5efc9d21 100644
--- a/llvm/test/Transforms/GlobalOpt/heap-sra-2-no-null-opt.ll
+++ b/llvm/test/Transforms/GlobalOpt/heap-sra-2-no-null-opt.ll
@@ -2,31 +2,30 @@
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
 %struct.foo = type { i32, i32 }
- at X = internal global %struct.foo* null		; <%struct.foo**> [#uses=2]
+ at X = internal global ptr null		; <ptr> [#uses=2]
 ; CHECK: @X
 ; CHECK-NOT: @X.f0
 
 define void @bar(i32 %Size) nounwind noinline #0 {
 entry:
-	%malloccall = tail call i8* @malloc(i64 8000000) ; <i8*> [#uses=1]
-	%0 = bitcast i8* %malloccall to [1000000 x %struct.foo]* ; <[1000000 x %struct.foo]*> [#uses=1]
-	%.sub = getelementptr [1000000 x %struct.foo], [1000000 x %struct.foo]* %0, i32 0, i32 0		; <%struct.foo*> [#uses=1]
-	store %struct.foo* %.sub, %struct.foo** @X, align 4
+	%malloccall = tail call ptr @malloc(i64 8000000) ; <ptr> [#uses=1]
+	%.sub = getelementptr [1000000 x %struct.foo], ptr %malloccall, i32 0, i32 0		; <ptr> [#uses=1]
+	store ptr %.sub, ptr @X, align 4
 	ret void
 }
 
-declare noalias i8* @malloc(i64)
+declare noalias ptr @malloc(i64)
 
 define i32 @baz() nounwind readonly noinline #0 {
 bb1.thread:
-	%0 = load %struct.foo*, %struct.foo** @X, align 4		; <%struct.foo*> [#uses=1]
+	%0 = load ptr, ptr @X, align 4		; <ptr> [#uses=1]
 	br label %bb1
 
 bb1:		; preds = %bb1, %bb1.thread
 	%i.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %indvar.next, %bb1 ]		; <i32> [#uses=2]
 	%sum.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %3, %bb1 ]		; <i32> [#uses=1]
-	%1 = getelementptr %struct.foo, %struct.foo* %0, i32 %i.0.reg2mem.0, i32 0		; <i32*> [#uses=1]
-	%2 = load i32, i32* %1, align 4		; <i32> [#uses=1]
+	%1 = getelementptr %struct.foo, ptr %0, i32 %i.0.reg2mem.0, i32 0		; <ptr> [#uses=1]
+	%2 = load i32, ptr %1, align 4		; <i32> [#uses=1]
 	%3 = add i32 %2, %sum.0.reg2mem.0		; <i32> [#uses=2]
 	%indvar.next = add i32 %i.0.reg2mem.0, 1		; <i32> [#uses=2]
 	%exitcond = icmp eq i32 %indvar.next, 1200		; <i1> [#uses=1]

diff  --git a/llvm/test/Transforms/GlobalOpt/heap-sra-2.ll b/llvm/test/Transforms/GlobalOpt/heap-sra-2.ll
index 4c8d690de65f9..094e5a92447ec 100644
--- a/llvm/test/Transforms/GlobalOpt/heap-sra-2.ll
+++ b/llvm/test/Transforms/GlobalOpt/heap-sra-2.ll
@@ -4,29 +4,28 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
 ;; Heap SROA has been removed. This tests we don't perform heap SROA.
 ; CHECK: @X =
 	%struct.foo = type { i32, i32 }
- at X = internal global %struct.foo* null		; <%struct.foo**> [#uses=2]
+ at X = internal global ptr null		; <ptr> [#uses=2]
 
 define void @bar(i32 %Size) nounwind noinline {
 entry:
-	%malloccall = tail call i8* @malloc(i64 8000000) ; <i8*> [#uses=1]
-	%0 = bitcast i8* %malloccall to [1000000 x %struct.foo]* ; <[1000000 x %struct.foo]*> [#uses=1]
-	%.sub = getelementptr [1000000 x %struct.foo], [1000000 x %struct.foo]* %0, i32 0, i32 0		; <%struct.foo*> [#uses=1]
-	store %struct.foo* %.sub, %struct.foo** @X, align 4
+	%malloccall = tail call ptr @malloc(i64 8000000) ; <ptr> [#uses=1]
+	%.sub = getelementptr [1000000 x %struct.foo], ptr %malloccall, i32 0, i32 0		; <ptr> [#uses=1]
+	store ptr %.sub, ptr @X, align 4
 	ret void
 }
 
-declare noalias i8* @malloc(i64)
+declare noalias ptr @malloc(i64)
 
 define i32 @baz() nounwind readonly noinline {
 bb1.thread:
-	%0 = load %struct.foo*, %struct.foo** @X, align 4		; <%struct.foo*> [#uses=1]
+	%0 = load ptr, ptr @X, align 4		; <ptr> [#uses=1]
 	br label %bb1
 
 bb1:		; preds = %bb1, %bb1.thread
 	%i.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %indvar.next, %bb1 ]		; <i32> [#uses=2]
 	%sum.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %3, %bb1 ]		; <i32> [#uses=1]
-	%1 = getelementptr %struct.foo, %struct.foo* %0, i32 %i.0.reg2mem.0, i32 0		; <i32*> [#uses=1]
-	%2 = load i32, i32* %1, align 4		; <i32> [#uses=1]
+	%1 = getelementptr %struct.foo, ptr %0, i32 %i.0.reg2mem.0, i32 0		; <ptr> [#uses=1]
+	%2 = load i32, ptr %1, align 4		; <i32> [#uses=1]
 	%3 = add i32 %2, %sum.0.reg2mem.0		; <i32> [#uses=2]
 	%indvar.next = add i32 %i.0.reg2mem.0, 1		; <i32> [#uses=2]
 	%exitcond = icmp eq i32 %indvar.next, 1200		; <i1> [#uses=1]
@@ -38,7 +37,7 @@ bb2:		; preds = %bb1
 
 define void @bam(i64 %Size) nounwind noinline #0 {
 entry:
-        %0 = load %struct.foo*, %struct.foo** @X, align 4
+        %0 = load ptr, ptr @X, align 4
         ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/heap-sra-phi-no-null-opt.ll b/llvm/test/Transforms/GlobalOpt/heap-sra-phi-no-null-opt.ll
index 2f700c014dda3..20d0e855fc46f 100644
--- a/llvm/test/Transforms/GlobalOpt/heap-sra-phi-no-null-opt.ll
+++ b/llvm/test/Transforms/GlobalOpt/heap-sra-phi-no-null-opt.ll
@@ -3,46 +3,45 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
 
 %struct.foo = type { i32, i32 }
 
- at X = internal global %struct.foo* null		; <%struct.foo**> [#uses=2]
+ at X = internal global ptr null		; <ptr> [#uses=2]
 ; CHECK: @X
 ; CHECK-NOT: @X.f0
 
 define void @bar(i32 %Size) nounwind noinline #0 {
 ;  CHECK-LABEL: @bar(
 entry:
-	%malloccall = tail call i8* @malloc(i64 8000000) ; <i8*> [#uses=1]
-	%tmp = bitcast i8* %malloccall to [1000000 x %struct.foo]* ; <[1000000 x %struct.foo]*> [#uses=1]
-	%.sub = getelementptr [1000000 x %struct.foo], [1000000 x %struct.foo]* %tmp, i32 0, i32 0		; <%struct.foo*> [#uses=1]
-	store %struct.foo* %.sub, %struct.foo** @X, align 4
+	%malloccall = tail call ptr @malloc(i64 8000000) ; <ptr> [#uses=1]
+	%.sub = getelementptr [1000000 x %struct.foo], ptr %malloccall, i32 0, i32 0		; <ptr> [#uses=1]
+	store ptr %.sub, ptr @X, align 4
 	ret void
 }
 
-declare noalias i8* @malloc(i64)
+declare noalias ptr @malloc(i64)
 
 define i32 @baz() nounwind readonly noinline #0 {
 ; CHECK-LABEL: @baz(
 bb1.thread:
-	%tmpLD1 = load %struct.foo*, %struct.foo** @X, align 4		; <%struct.foo*> [#uses=1]
-; CHECK: load %struct.foo*, %struct.foo** @X, align 4
+	%tmpLD1 = load ptr, ptr @X, align 4		; <ptr> [#uses=1]
+; CHECK: load ptr, ptr @X, align 4
 	br label %bb1
 
 bb1:		; preds = %bb1, %bb1.thread
-        %tmp = phi %struct.foo* [%tmpLD1, %bb1.thread ], [ %tmpLD2, %bb1 ]		; <i32> [#uses=2]
-; CHECK: %tmp = phi %struct.foo* [ %tmpLD1, %bb1.thread ], [ %tmpLD2, %bb1 ]
+        %tmp = phi ptr [%tmpLD1, %bb1.thread ], [ %tmpLD2, %bb1 ]		; <i32> [#uses=2]
+; CHECK: %tmp = phi ptr [ %tmpLD1, %bb1.thread ], [ %tmpLD2, %bb1 ]
 	%i.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %indvar.next, %bb1 ]		; <i32> [#uses=2]
 	%sum.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %tmp3, %bb1 ]		; <i32> [#uses=1]
-	%tmp1 = getelementptr %struct.foo, %struct.foo* %tmp, i32 %i.0.reg2mem.0, i32 0		; <i32*> [#uses=1]
-	%tmp2 = load i32, i32* %tmp1, align 4		; <i32> [#uses=1]
-; CHECK: load i32, i32* %tmp1, align 4
+	%tmp1 = getelementptr %struct.foo, ptr %tmp, i32 %i.0.reg2mem.0, i32 0		; <ptr> [#uses=1]
+	%tmp2 = load i32, ptr %tmp1, align 4		; <i32> [#uses=1]
+; CHECK: load i32, ptr %tmp1, align 4
 	%tmp6 = add i32 %tmp2, %sum.0.reg2mem.0		; <i32> [#uses=2]
-	%tmp4 = getelementptr %struct.foo, %struct.foo* %tmp, i32 %i.0.reg2mem.0, i32 1		; <i32*> [#uses=1]
-        %tmp5 = load i32 , i32 * %tmp4
-;  CHECK: load i32, i32* %tmp4
+	%tmp4 = getelementptr %struct.foo, ptr %tmp, i32 %i.0.reg2mem.0, i32 1		; <ptr> [#uses=1]
+        %tmp5 = load i32 , ptr %tmp4
+;  CHECK: load i32, ptr %tmp4
         %tmp3 = add i32 %tmp5, %tmp6
 	%indvar.next = add i32 %i.0.reg2mem.0, 1		; <i32> [#uses=2]
 
-      	%tmpLD2 = load %struct.foo*, %struct.foo** @X, align 4		; <%struct.foo*> [#uses=1]
-; CHECK: load %struct.foo*, %struct.foo** @X, align 4
+      	%tmpLD2 = load ptr, ptr @X, align 4		; <ptr> [#uses=1]
+; CHECK: load ptr, ptr @X, align 4
 
 	%exitcond = icmp eq i32 %indvar.next, 1200		; <i1> [#uses=1]
 	br i1 %exitcond, label %bb2, label %bb1

diff  --git a/llvm/test/Transforms/GlobalOpt/heap-sra-phi.ll b/llvm/test/Transforms/GlobalOpt/heap-sra-phi.ll
index cd9154a585c5b..9698078b75a7e 100644
--- a/llvm/test/Transforms/GlobalOpt/heap-sra-phi.ll
+++ b/llvm/test/Transforms/GlobalOpt/heap-sra-phi.ll
@@ -5,37 +5,36 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
 ;; Heap SROA has been removed. This tests we don't perform heap SROA.
 ; CHECK: @X =
 	%struct.foo = type { i32, i32 }
- at X = internal global %struct.foo* null		; <%struct.foo**> [#uses=2]
+ at X = internal global ptr null		; <ptr> [#uses=2]
 
 define void @bar(i32 %Size) nounwind noinline {
 entry:
-	%malloccall = tail call i8* @malloc(i64 8000000) ; <i8*> [#uses=1]
-	%tmp = bitcast i8* %malloccall to [1000000 x %struct.foo]* ; <[1000000 x %struct.foo]*> [#uses=1]
-	%.sub = getelementptr [1000000 x %struct.foo], [1000000 x %struct.foo]* %tmp, i32 0, i32 0		; <%struct.foo*> [#uses=1]
-	store %struct.foo* %.sub, %struct.foo** @X, align 4
+	%malloccall = tail call ptr @malloc(i64 8000000) ; <ptr> [#uses=1]
+	%.sub = getelementptr [1000000 x %struct.foo], ptr %malloccall, i32 0, i32 0		; <ptr> [#uses=1]
+	store ptr %.sub, ptr @X, align 4
 	ret void
 }
 
-declare noalias i8* @malloc(i64)
+declare noalias ptr @malloc(i64)
 
 define i32 @baz() nounwind readonly noinline {
 bb1.thread:
-	%tmpLD1 = load %struct.foo*, %struct.foo** @X, align 4		; <%struct.foo*> [#uses=1]
+	%tmpLD1 = load ptr, ptr @X, align 4		; <ptr> [#uses=1]
 	br label %bb1
 
 bb1:		; preds = %bb1, %bb1.thread
-        %tmp = phi %struct.foo* [%tmpLD1, %bb1.thread ], [ %tmpLD2, %bb1 ]		; <i32> [#uses=2]
+        %tmp = phi ptr [%tmpLD1, %bb1.thread ], [ %tmpLD2, %bb1 ]		; <i32> [#uses=2]
 	%i.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %indvar.next, %bb1 ]		; <i32> [#uses=2]
 	%sum.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %tmp3, %bb1 ]		; <i32> [#uses=1]
-	%tmp1 = getelementptr %struct.foo, %struct.foo* %tmp, i32 %i.0.reg2mem.0, i32 0		; <i32*> [#uses=1]
-	%tmp2 = load i32, i32* %tmp1, align 4		; <i32> [#uses=1]
+	%tmp1 = getelementptr %struct.foo, ptr %tmp, i32 %i.0.reg2mem.0, i32 0		; <ptr> [#uses=1]
+	%tmp2 = load i32, ptr %tmp1, align 4		; <i32> [#uses=1]
 	%tmp6 = add i32 %tmp2, %sum.0.reg2mem.0		; <i32> [#uses=2]
-	%tmp4 = getelementptr %struct.foo, %struct.foo* %tmp, i32 %i.0.reg2mem.0, i32 1		; <i32*> [#uses=1]
-        %tmp5 = load i32 , i32 * %tmp4
+	%tmp4 = getelementptr %struct.foo, ptr %tmp, i32 %i.0.reg2mem.0, i32 1		; <ptr> [#uses=1]
+        %tmp5 = load i32 , ptr %tmp4
         %tmp3 = add i32 %tmp5, %tmp6
 	%indvar.next = add i32 %i.0.reg2mem.0, 1		; <i32> [#uses=2]
         
-      	%tmpLD2 = load %struct.foo*, %struct.foo** @X, align 4		; <%struct.foo*> [#uses=1]
+      	%tmpLD2 = load ptr, ptr @X, align 4		; <ptr> [#uses=1]
 
 	%exitcond = icmp eq i32 %indvar.next, 1200		; <i1> [#uses=1]
 	br i1 %exitcond, label %bb2, label %bb1
@@ -46,7 +45,7 @@ bb2:		; preds = %bb1
 
 define void @bam(i64 %Size) nounwind noinline #0 {
 entry:
-        %0 = load %struct.foo*, %struct.foo** @X, align 4
+        %0 = load ptr, ptr @X, align 4
         ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/int_sideeffect.ll b/llvm/test/Transforms/GlobalOpt/int_sideeffect.ll
index c85a4d5aed3ad..02f126c9b7b51 100644
--- a/llvm/test/Transforms/GlobalOpt/int_sideeffect.ll
+++ b/llvm/test/Transforms/GlobalOpt/int_sideeffect.ll
@@ -6,11 +6,11 @@
 
 declare void @llvm.sideeffect()
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [ { i32, void ()*, i8* } { i32 65535, void ()* @ctor, i8* null } ]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [ { i32, ptr, ptr } { i32 65535, ptr @ctor, ptr null } ]
 @G = global i32 0
 
 define internal void @ctor() {
-    store i32 1, i32* @G
+    store i32 1, ptr @G
     call void @llvm.sideeffect()
     ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/integer-bool-dwarf.ll b/llvm/test/Transforms/GlobalOpt/integer-bool-dwarf.ll
index 8778eb6f17984..63fe72dc17ccf 100644
--- a/llvm/test/Transforms/GlobalOpt/integer-bool-dwarf.ll
+++ b/llvm/test/Transforms/GlobalOpt/integer-bool-dwarf.ll
@@ -11,21 +11,21 @@
 ; Function Attrs: noinline nounwind optnone uwtable
 define void @set1() #0 !dbg !11 {
 entry:
-  store i32 111, i32* @foo, align 4, !dbg !14
+  store i32 111, ptr @foo, align 4, !dbg !14
   ret void, !dbg !15
 }
 
 ; Function Attrs: noinline nounwind optnone uwtable
 define void @set2() #0 !dbg !16 {
 entry:
-  store i32 0, i32* @foo, align 4, !dbg !17
+  store i32 0, ptr @foo, align 4, !dbg !17
   ret void, !dbg !18
 }
 
 ; Function Attrs: noinline nounwind optnone uwtable
 define i32 @get() #0 !dbg !19 {
 entry:
-  %0 = load i32, i32* @foo, align 4, !dbg !22
+  %0 = load i32, ptr @foo, align 4, !dbg !22
   ret i32 %0, !dbg !23
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/integer-bool.ll b/llvm/test/Transforms/GlobalOpt/integer-bool.ll
index 3ea259182f556..84cf64d2ba4ac 100644
--- a/llvm/test/Transforms/GlobalOpt/integer-bool.ll
+++ b/llvm/test/Transforms/GlobalOpt/integer-bool.ll
@@ -7,20 +7,20 @@
 ; CHECK: global i1 false
 
 define void @set1() {
-  store i32 0, i32 addrspace(1)* @G
+  store i32 0, ptr addrspace(1) @G
 ; CHECK: store i1 false
   ret void
 }
 
 define void @set2() {
-  store i32 1, i32 addrspace(1)* @G
+  store i32 1, ptr addrspace(1) @G
 ; CHECK: store i1 true
   ret void
 }
 
 define i1 @get() {
 ; CHECK-LABEL: @get(
-  %A = load i32, i32 addrspace(1) * @G
+  %A = load i32, ptr addrspace(1) @G
   %C = icmp slt i32 %A, 2
   ret i1 %C
 ; CHECK: ret i1 true

diff  --git a/llvm/test/Transforms/GlobalOpt/invariant.group.ll b/llvm/test/Transforms/GlobalOpt/invariant.group.ll
index d758d58d5c731..f91bc954a3777 100644
--- a/llvm/test/Transforms/GlobalOpt/invariant.group.ll
+++ b/llvm/test/Transforms/GlobalOpt/invariant.group.ll
@@ -1,7 +1,7 @@
 ; RUN: opt -S -passes=globalopt < %s | FileCheck %s
 
 ; CHECK: @llvm.global_ctors = appending global [1 x {{.*}}@_GLOBAL__I_c
- at llvm.global_ctors = appending global [3 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I_a, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I_b, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I_c, i8* null }]
+ at llvm.global_ctors = appending global [3 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I_a, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I_b, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I_c, ptr null }]
 
 ; CHECK: @tmp = local_unnamed_addr global i32 42
 ; CHECK: @tmp2 = local_unnamed_addr global i32 42
@@ -9,7 +9,7 @@
 @tmp = global i32 0
 @tmp2 = global i32 0
 @tmp3 = global i32 0
- at ptrToTmp3 = global i32* null
+ at ptrToTmp3 = global ptr null
 
 define i32 @TheAnswerToLifeTheUniverseAndEverything() {
   ret i32 42
@@ -27,48 +27,43 @@ enter:
   %valptr = alloca i32
 
   %val = call i32 @TheAnswerToLifeTheUniverseAndEverything()
-  store i32 %val, i32* @tmp
-  store i32 %val, i32* %valptr
+  store i32 %val, ptr @tmp
+  store i32 %val, ptr %valptr
 
-  %0 = bitcast i32* %valptr to i8*
-  %barr = call i8* @llvm.launder.invariant.group(i8* %0)
-  %1 = getelementptr i8, i8* %barr, i32 0
-  %2 = bitcast i8* %1 to i32*
+  %barr = call ptr @llvm.launder.invariant.group(ptr %valptr)
 
-  %val2 = load i32, i32* %2
-  store i32 %val2, i32* @tmp2
+  %val2 = load i32, ptr %barr
+  store i32 %val2, ptr @tmp2
   ret void
 }
 
 ; We can't step through launder.invariant.group here, because that would change
 ; this load in @usage_of_globals()
-; %val = load i32, i32* %ptrVal, !invariant.group !0
+; %val = load i32, ptr %ptrVal, !invariant.group !0
 ; into
-; %val = load i32, i32* @tmp3, !invariant.group !0
+; %val = load i32, ptr @tmp3, !invariant.group !0
 ; and then we could assume that %val and %val2 to be the same, which coud be
 ; false, because @changeTmp3ValAndCallBarrierInside() may change the value
 ; of @tmp3.
 define void @_not_optimizable() {
 enter:
-  store i32 13, i32* @tmp3, !invariant.group !0
+  store i32 13, ptr @tmp3, !invariant.group !0
 
-  %0 = bitcast i32* @tmp3 to i8*
-  %barr = call i8* @llvm.launder.invariant.group(i8* %0)
-  %1 = bitcast i8* %barr to i32*
+  %barr = call ptr @llvm.launder.invariant.group(ptr @tmp3)
 
-  store i32* %1, i32** @ptrToTmp3
-  store i32 42, i32* %1, !invariant.group !0
+  store ptr %barr, ptr @ptrToTmp3
+  store i32 42, ptr %barr, !invariant.group !0
 
   ret void
 }
 
 define void @usage_of_globals() {
 entry:
-  %ptrVal = load i32*, i32** @ptrToTmp3
-  %val = load i32, i32* %ptrVal, !invariant.group !0
+  %ptrVal = load ptr, ptr @ptrToTmp3
+  %val = load i32, ptr %ptrVal, !invariant.group !0
 
   call void @changeTmp3ValAndCallBarrierInside()
-  %val2 = load i32, i32* @tmp3, !invariant.group !0
+  %val2 = load i32, ptr @tmp3, !invariant.group !0
   ret void;
 }
 
@@ -77,36 +72,32 @@ entry:
 define void @_GLOBAL__I_b() {
 enter:
   %val = call i32 @TheAnswerToLifeTheUniverseAndEverything()
-  %p1 = bitcast i32* @tmp4 to i8*
-  %p2 = call i8* @llvm.strip.invariant.group.p0i8(i8* %p1)
-  %p3 = bitcast i8* %p2 to i32*
-  store i32 %val, i32* %p3
+  %p2 = call ptr @llvm.strip.invariant.group.p0(ptr @tmp4)
+  store i32 %val, ptr %p2
   ret void
 }
 
 @tmp5 = global i32 0
- at tmp6 = global i32* null
-; CHECK: @tmp6 = local_unnamed_addr global i32* null
-
-define i32* @_dont_return_param(i32* %p) {
-  %p1 = bitcast i32* %p to i8*
-  %p2 = call i8* @llvm.launder.invariant.group(i8* %p1)
-  %p3 = bitcast i8* %p2 to i32*
-  ret i32* %p3
+ at tmp6 = global ptr null
+; CHECK: @tmp6 = local_unnamed_addr global ptr null
+
+define ptr @_dont_return_param(ptr %p) {
+  %p2 = call ptr @llvm.launder.invariant.group(ptr %p)
+  ret ptr %p2
 }
 
 ; We should bail out if we return any pointers derived via invariant.group intrinsics at any point.
 define void @_GLOBAL__I_c() {
 enter:
-  %tmp5 = call i32* @_dont_return_param(i32* @tmp5)
-  store i32* %tmp5, i32** @tmp6
+  %tmp5 = call ptr @_dont_return_param(ptr @tmp5)
+  store ptr %tmp5, ptr @tmp6
   ret void
 }
 
 
 declare void @changeTmp3ValAndCallBarrierInside()
 
-declare i8* @llvm.launder.invariant.group(i8*)
-declare i8* @llvm.strip.invariant.group.p0i8(i8*)
+declare ptr @llvm.launder.invariant.group(ptr)
+declare ptr @llvm.strip.invariant.group.p0(ptr)
 
 !0 = !{}

diff  --git a/llvm/test/Transforms/GlobalOpt/invoke.ll b/llvm/test/Transforms/GlobalOpt/invoke.ll
index 212d909cf11cb..b24b9aa54b468 100644
--- a/llvm/test/Transforms/GlobalOpt/invoke.ll
+++ b/llvm/test/Transforms/GlobalOpt/invoke.ll
@@ -4,24 +4,24 @@
 ; Globalopt should be able to evaluate an invoke.
 ; CHECK: @tmp = local_unnamed_addr global i32 1
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I_a, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I_a, ptr null }]
 @tmp = global i32 0
 
 define i32 @one() {
   ret i32 1
 }
 
-define void @_GLOBAL__I_a() personality i8* undef {
+define void @_GLOBAL__I_a() personality ptr undef {
 bb:
   %tmp1 = invoke i32 @one()
           to label %bb2 unwind label %bb4
 
 bb2:                                              ; preds = %bb
-  store i32 %tmp1, i32* @tmp
+  store i32 %tmp1, ptr @tmp
   ret void
 
 bb4:                                              ; preds = %bb
-  %tmp5 = landingpad { i8*, i32 }
-          filter [0 x i8*] zeroinitializer
+  %tmp5 = landingpad { ptr, i32 }
+          filter [0 x ptr] zeroinitializer
   unreachable
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/iterate.ll b/llvm/test/Transforms/GlobalOpt/iterate.ll
index 79f0750324e5e..be6ebe82bb081 100644
--- a/llvm/test/Transforms/GlobalOpt/iterate.ll
+++ b/llvm/test/Transforms/GlobalOpt/iterate.ll
@@ -1,11 +1,11 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 ; CHECK-NOT: %G
 
- at G = internal global i32 0              ; <i32*> [#uses=1]
- at H = internal global { i32* } { i32* @G }               ; <{ i32* }*> [#uses=1]
+ at G = internal global i32 0              ; <ptr> [#uses=1]
+ at H = internal global { ptr } { ptr @G }               ; <ptr> [#uses=1]
 
 define i32 @loadg() {
-        %G = load i32*, i32** getelementptr ({ i32* }, { i32* }* @H, i32 0, i32 0)              ; <i32*> [#uses=1]
-        %GV = load i32, i32* %G              ; <i32> [#uses=1]
+        %G = load ptr, ptr @H              ; <ptr> [#uses=1]
+        %GV = load i32, ptr %G              ; <i32> [#uses=1]
         ret i32 %GV
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/large-element-size.ll b/llvm/test/Transforms/GlobalOpt/large-element-size.ll
index 1c09152138084..914112af313a5 100644
--- a/llvm/test/Transforms/GlobalOpt/large-element-size.ll
+++ b/llvm/test/Transforms/GlobalOpt/large-element-size.ll
@@ -7,6 +7,6 @@ target datalayout = "p:32:32"
 %struct.u.0 = type { i32, i32, i32, i8 }
 
 @s = external global [700 x [24000 x %struct.s.2]], align 1
- at p = global %struct.s.2* bitcast (i8* getelementptr (i8, i8* bitcast ([700 x [24000 x %struct.s.2]]* @s to i8*), i64 2247483647) to %struct.s.2*), align 1
+ at p = global ptr getelementptr (i8, ptr @s, i64 2247483647), align 1
 
-; CHECK: @p = local_unnamed_addr global %struct.s.2* bitcast (i8* getelementptr (i8, i8* bitcast ([700 x [24000 x %struct.s.2]]* @s to i8*), i32 -2047483649) to %struct.s.2*), align 1
+; CHECK: @p = local_unnamed_addr global ptr getelementptr (i8, ptr @s, i32 -2047483649), align 1

diff  --git a/llvm/test/Transforms/GlobalOpt/large-int-crash.ll b/llvm/test/Transforms/GlobalOpt/large-int-crash.ll
index 0efdfdaf70096..73f1e3cb32504 100644
--- a/llvm/test/Transforms/GlobalOpt/large-int-crash.ll
+++ b/llvm/test/Transforms/GlobalOpt/large-int-crash.ll
@@ -5,19 +5,19 @@
 
 define void @foo() {
 ; CHECK-LABEL: @foo(
-; CHECK-NEXT:    [[T0_B:%.*]] = load i1, i1* @X
+; CHECK-NEXT:    [[T0_B:%.*]] = load i1, ptr @X
 ; CHECK-NEXT:    [[T0:%.*]] = select i1 [[T0_B]], i128 18446744073709551616, i128 0
 ; CHECK-NEXT:    ret void
 ;
-  %t0 = load i128, i128* @X, align 8
+  %t0 = load i128, ptr @X, align 8
   ret void
 }
 
 define void @store() {
 ; CHECK-LABEL: @store(
-; CHECK-NEXT:    store i1 true, i1* @X
+; CHECK-NEXT:    store i1 true, ptr @X
 ; CHECK-NEXT:    ret void
 ;
-  store i128 18446744073709551616, i128* @X, align 8
+  store i128 18446744073709551616, ptr @X, align 8
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/load-store-global-no-null-opt.ll b/llvm/test/Transforms/GlobalOpt/load-store-global-no-null-opt.ll
index 60d97cf06c9c0..4e8b0c4da68e9 100644
--- a/llvm/test/Transforms/GlobalOpt/load-store-global-no-null-opt.ll
+++ b/llvm/test/Transforms/GlobalOpt/load-store-global-no-null-opt.ll
@@ -1,26 +1,25 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 
- at a = internal global i64* null, align 8
+ at a = internal global ptr null, align 8
 ; CHECK: @a
 
 ; PR13968
 define void @qux_no_null_opt() nounwind #0 {
 ; CHECK-LABEL: @qux_no_null_opt(
-; CHECK: getelementptr i64*, i64** @a, i32 1
-; CHECK: store i64* inttoptr (i64 1 to i64*), i64** @a
-  %b = bitcast i64** @a to i8*
-  %g = getelementptr i64*, i64** @a, i32 1
-  %cmp = icmp ne i8* null, %b
-  %cmp2 = icmp eq i8* null, %b
-  %cmp3 = icmp eq i64** null, %g
-  store i64* inttoptr (i64 1 to i64*), i64** @a, align 8
-  %l = load i64*, i64** @a, align 8
+; CHECK: getelementptr ptr, ptr @a, i32 1
+; CHECK: store ptr inttoptr (i64 1 to ptr), ptr @a
+  %g = getelementptr ptr, ptr @a, i32 1
+  %cmp = icmp ne ptr null, @a
+  %cmp2 = icmp eq ptr null, @a
+  %cmp3 = icmp eq ptr null, %g
+  store ptr inttoptr (i64 1 to ptr), ptr @a, align 8
+  %l = load ptr, ptr @a, align 8
   ret void
 }
 
-define i64* @bar() {
-  %X = load i64*, i64** @a, align 8
-  ret i64* %X
+define ptr @bar() {
+  %X = load ptr, ptr @a, align 8
+  ret ptr %X
 ; CHECK-LABEL: @bar(
 ; CHECK: load
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/load-store-global.ll b/llvm/test/Transforms/GlobalOpt/load-store-global.ll
index a02469f930ea3..521279b5882f2 100644
--- a/llvm/test/Transforms/GlobalOpt/load-store-global.ll
+++ b/llvm/test/Transforms/GlobalOpt/load-store-global.ll
@@ -1,35 +1,34 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 
- at G = internal global i32 17             ; <i32*> [#uses=3]
+ at G = internal global i32 17             ; <ptr> [#uses=3]
 ; CHECK-NOT: @G
 
 define void @foo() {
-        %V = load i32, i32* @G               ; <i32> [#uses=1]
-        store i32 %V, i32* @G
+        %V = load i32, ptr @G               ; <i32> [#uses=1]
+        store i32 %V, ptr @G
         ret void
 ; CHECK-LABEL: @foo(
 ; CHECK-NEXT: ret void
 }
 
 define i32 @bar() {
-        %X = load i32, i32* @G               ; <i32> [#uses=1]
+        %X = load i32, ptr @G               ; <i32> [#uses=1]
         ret i32 %X
 ; CHECK-LABEL: @bar(
 ; CHECK-NEXT: ret i32 17
 }
 
- at a = internal global i64* null, align 8
+ at a = internal global ptr null, align 8
 ; CHECK-NOT: @a
 
 ; PR13968
 define void @qux() nounwind {
-  %b = bitcast i64** @a to i8*
-  %g = getelementptr i64*, i64** @a, i32 1
-  %cmp = icmp ne i8* null, %b
-  %cmp2 = icmp eq i8* null, %b
-  %cmp3 = icmp eq i64** null, %g
-  store i64* inttoptr (i64 1 to i64*), i64** @a, align 8
-  %l = load i64*, i64** @a, align 8
+  %g = getelementptr ptr, ptr @a, i32 1
+  %cmp = icmp ne ptr null, @a
+  %cmp2 = icmp eq ptr null, @a
+  %cmp3 = icmp eq ptr null, %g
+  store ptr inttoptr (i64 1 to ptr), ptr @a, align 8
+  %l = load ptr, ptr @a, align 8
   ret void
 ; CHECK-LABEL: @qux(
 ; CHECK-NOT: store

diff  --git a/llvm/test/Transforms/GlobalOpt/localize-constexpr-debuginfo.ll b/llvm/test/Transforms/GlobalOpt/localize-constexpr-debuginfo.ll
index 96ae7700ead89..18dc038fce66a 100644
--- a/llvm/test/Transforms/GlobalOpt/localize-constexpr-debuginfo.ll
+++ b/llvm/test/Transforms/GlobalOpt/localize-constexpr-debuginfo.ll
@@ -3,27 +3,25 @@
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
- at _ZL1x = internal global [200 x i8]* null, align 8, !dbg !0
+ at _ZL1x = internal global ptr null, align 8, !dbg !0
 
-define i32 @main(i32 %argc, i8** %argv) norecurse !dbg !18 {
+define i32 @main(i32 %argc, ptr %argv) norecurse !dbg !18 {
 ; CHECK: define i32 @main
 ; Make sure we localized the global.
-; CHECK: alloca [200 x i8]*
+; CHECK: alloca ptr
 ; Make sure the metadata is sane. Currently, we just drop the metadata,
 ; so it points to nothing.
 ; CHECK: call void @llvm.dbg.value(metadata !2,
 ; CHECK: !2 = !{}
 entry:
   call void @llvm.dbg.value(metadata i32 %argc, metadata !22, metadata !23), !dbg !24
-  call void @llvm.dbg.value(metadata i8** %argv, metadata !25, metadata !23), !dbg !26
-  %arrayidx = getelementptr inbounds i8*, i8** %argv, i64 0, !dbg !27
-  %0 = load i8*, i8** %arrayidx, align 8, !dbg !27
-  %1 = bitcast i8* %0 to [200 x i8]*, !dbg !28
-  store [200 x i8]* %1, [200 x i8]** @_ZL1x, align 8, !dbg !29
-  call void @llvm.dbg.value(metadata i8** bitcast ([200 x i8]** @_ZL1x to i8**), metadata !30, metadata !23), !dbg !31
-  %2 = load i8*, i8** bitcast ([200 x i8]** @_ZL1x to i8**), align 8, !dbg !32
-  %3 = load i8, i8* %2, align 1, !dbg !33
-  %conv = sext i8 %3 to i32, !dbg !33
+  call void @llvm.dbg.value(metadata ptr %argv, metadata !25, metadata !23), !dbg !26
+  %0 = load ptr, ptr %argv, align 8, !dbg !27
+  store ptr %0, ptr @_ZL1x, align 8, !dbg !29
+  call void @llvm.dbg.value(metadata ptr @_ZL1x, metadata !30, metadata !23), !dbg !31
+  %1 = load ptr, ptr @_ZL1x, align 8, !dbg !32
+  %2 = load i8, ptr %1, align 1, !dbg !33
+  %conv = sext i8 %2 to i32, !dbg !33
   ret i32 %conv, !dbg !34
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/localize-constexpr.ll b/llvm/test/Transforms/GlobalOpt/localize-constexpr.ll
index e1a06b58364a0..e6545e08b7138 100644
--- a/llvm/test/Transforms/GlobalOpt/localize-constexpr.ll
+++ b/llvm/test/Transforms/GlobalOpt/localize-constexpr.ll
@@ -7,13 +7,13 @@ define i8 @f() norecurse {
 ; CHECK: alloca
 ; CHECK-NOT: @G
 ; CHECK: }
-  store i32 42, i32* @G
-  %a = load i8, i8* bitcast (i32* @G to i8*)
+  store i32 42, ptr @G
+  %a = load i8, ptr @G
   ret i8 %a
 }
 
 @H = internal global i32 42
- at Halias = alias i32, i32* @H
+ at Halias = alias i32, ptr @H
 
 ; @H can't be localized because @Halias uses it, and @Halias can't be converted to an instruction.
 define i8 @g() norecurse {
@@ -21,8 +21,8 @@ define i8 @g() norecurse {
 ; CHECK-NOT: alloca
 ; CHECK: @H
 ; CHECK: }
-  store i32 42, i32* @H
-  %a = load i8, i8* bitcast (i32* @H to i8*)
+  store i32 42, ptr @H
+  %a = load i8, ptr @H
   ret i8 %a
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/long-compilation-global-sra.ll b/llvm/test/Transforms/GlobalOpt/long-compilation-global-sra.ll
index c71ac3258c403..1fd79379b311f 100644
--- a/llvm/test/Transforms/GlobalOpt/long-compilation-global-sra.ll
+++ b/llvm/test/Transforms/GlobalOpt/long-compilation-global-sra.ll
@@ -40,17 +40,17 @@ target triple = "x86_64-unknown-linux-gnu"
 ; Function Attrs: norecurse uwtable
 define dso_local i32 @main() #0 {
   %1 = alloca i32, align 4
-  store i32 0, i32* %1, align 4
-  store i8 0, i8* getelementptr inbounds ([67108864 x i8], [67108864 x i8]* @LargeBufferE, i64 0, i64 0), align 16
-  %2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0))
-  %3 = load i8, i8* getelementptr inbounds ([67108864 x i8], [67108864 x i8]* @LargeBufferE, i64 0, i64 0), align 16
+  store i32 0, ptr %1, align 4
+  store i8 0, ptr @LargeBufferE, align 16
+  %2 = call i32 (ptr, ...) @printf(ptr @.str)
+  %3 = load i8, ptr @LargeBufferE, align 16
   %4 = sext i8 %3 to i32
   %5 = icmp eq i32 %4, 0
   %6 = zext i1 %5 to i32
   ret i32 %6
 }
 
-declare dso_local i32 @printf(i8*, ...) #0
+declare dso_local i32 @printf(ptr, ...) #0
 
 attributes #0 = { norecurse uwtable }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/malloc-promote-1-no-null-opt.ll b/llvm/test/Transforms/GlobalOpt/malloc-promote-1-no-null-opt.ll
index 4cbe837669900..c5fb37033bb3c 100644
--- a/llvm/test/Transforms/GlobalOpt/malloc-promote-1-no-null-opt.ll
+++ b/llvm/test/Transforms/GlobalOpt/malloc-promote-1-no-null-opt.ll
@@ -2,38 +2,36 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
- at G = internal global i32* null          ; <i32**> [#uses=3]
+ at G = internal global ptr null          ; <ptr> [#uses=3]
 
 ;.
-; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global i32* null
+; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global ptr null
 ;.
 define void @init() #0 {
 ; CHECK-LABEL: @init(
-; CHECK-NEXT:    [[MALLOCCALL:%.*]] = tail call i8* @malloc(i64 4)
-; CHECK-NEXT:    [[P:%.*]] = bitcast i8* [[MALLOCCALL]] to i32*
-; CHECK-NEXT:    store i32* [[P]], i32** @G, align 8
-; CHECK-NEXT:    [[GV:%.*]] = load i32*, i32** @G, align 8
-; CHECK-NEXT:    store i32 0, i32* [[GV]], align 4
+; CHECK-NEXT:    [[MALLOCCALL:%.*]] = tail call ptr @malloc(i64 4)
+; CHECK-NEXT:    store ptr [[MALLOCCALL]], ptr @G, align 8
+; CHECK-NEXT:    [[GV:%.*]] = load ptr, ptr @G, align 8
+; CHECK-NEXT:    store i32 0, ptr [[GV]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %malloccall = tail call i8* @malloc(i64 4)
-  %P = bitcast i8* %malloccall to i32*
-  store i32* %P, i32** @G
-  %GV = load i32*, i32** @G
-  store i32 0, i32* %GV
+  %malloccall = tail call ptr @malloc(i64 4)
+  store ptr %malloccall, ptr @G
+  %GV = load ptr, ptr @G
+  store i32 0, ptr %GV
   ret void
 }
 
-declare noalias i8* @malloc(i64)
+declare noalias ptr @malloc(i64)
 
 define i32 @get() #0 {
 ; CHECK-LABEL: @get(
-; CHECK-NEXT:    [[GV:%.*]] = load i32*, i32** @G, align 8
-; CHECK-NEXT:    [[V:%.*]] = load i32, i32* [[GV]], align 4
+; CHECK-NEXT:    [[GV:%.*]] = load ptr, ptr @G, align 8
+; CHECK-NEXT:    [[V:%.*]] = load i32, ptr [[GV]], align 4
 ; CHECK-NEXT:    ret i32 [[V]]
 ;
-  %GV = load i32*, i32** @G
-  %V = load i32, i32* %GV
+  %GV = load ptr, ptr @G
+  %V = load i32, ptr %GV
   ret i32 %V
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/malloc-promote-1.ll b/llvm/test/Transforms/GlobalOpt/malloc-promote-1.ll
index b398d07532792..e1fa45f3ceecf 100644
--- a/llvm/test/Transforms/GlobalOpt/malloc-promote-1.ll
+++ b/llvm/test/Transforms/GlobalOpt/malloc-promote-1.ll
@@ -2,28 +2,27 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
- at G = internal global i32* null
+ at G = internal global ptr null
 
 define void @init() {
 ; CHECK-LABEL: @init(
 ; CHECK-NEXT:    ret void
 ;
-  %malloccall = tail call i8* @malloc(i64 4)
-  %P = bitcast i8* %malloccall to i32*
-  store i32* %P, i32** @G
-  %GV = load i32*, i32** @G
-  store i32 0, i32* %GV
+  %malloccall = tail call ptr @malloc(i64 4)
+  store ptr %malloccall, ptr @G
+  %GV = load ptr, ptr @G
+  store i32 0, ptr %GV
   ret void
 }
 
-declare noalias i8* @malloc(i64) allockind("alloc,uninitialized") allocsize(0)
+declare noalias ptr @malloc(i64) allockind("alloc,uninitialized") allocsize(0)
 
 define i32 @get() {
 ; CHECK-LABEL: @get(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %GV = load i32*, i32** @G
-  %V = load i32, i32* %GV
+  %GV = load ptr, ptr @G
+  %V = load i32, ptr %GV
   ret i32 %V
 }
 
@@ -33,7 +32,7 @@ define void @foo(i64 %Size) nounwind noinline #0 {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %0 = load i32*, i32** @G, align 4
+  %0 = load ptr, ptr @G, align 4
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/malloc-promote-2-no-null-opt.ll b/llvm/test/Transforms/GlobalOpt/malloc-promote-2-no-null-opt.ll
index 0b31aaf6a2825..ebfdd82cbedf5 100644
--- a/llvm/test/Transforms/GlobalOpt/malloc-promote-2-no-null-opt.ll
+++ b/llvm/test/Transforms/GlobalOpt/malloc-promote-2-no-null-opt.ll
@@ -2,31 +2,29 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
- at G = internal global i32* null
+ at G = internal global ptr null
 
 ;.
-; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global i32* null
+; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global ptr null
 ;.
 define void @t() #0 {
 ; CHECK-LABEL: @t(
-; CHECK-NEXT:    [[MALLOCCALL:%.*]] = tail call i8* @malloc(i64 400)
-; CHECK-NEXT:    [[P:%.*]] = bitcast i8* [[MALLOCCALL]] to i32*
-; CHECK-NEXT:    store i32* [[P]], i32** @G, align 8
-; CHECK-NEXT:    [[GV:%.*]] = load i32*, i32** @G, align 8
-; CHECK-NEXT:    [[GVE:%.*]] = getelementptr i32, i32* [[GV]], i32 40
-; CHECK-NEXT:    store i32 20, i32* [[GVE]], align 4
+; CHECK-NEXT:    [[MALLOCCALL:%.*]] = tail call ptr @malloc(i64 400)
+; CHECK-NEXT:    store ptr [[MALLOCCALL]], ptr @G, align 8
+; CHECK-NEXT:    [[GV:%.*]] = load ptr, ptr @G, align 8
+; CHECK-NEXT:    [[GVE:%.*]] = getelementptr i32, ptr [[GV]], i32 40
+; CHECK-NEXT:    store i32 20, ptr [[GVE]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %malloccall = tail call i8* @malloc(i64 mul (i64 100, i64 4))
-  %P = bitcast i8* %malloccall to i32*
-  store i32* %P, i32** @G
-  %GV = load i32*, i32** @G
-  %GVe = getelementptr i32, i32* %GV, i32 40
-  store i32 20, i32* %GVe
+  %malloccall = tail call ptr @malloc(i64 mul (i64 100, i64 4))
+  store ptr %malloccall, ptr @G
+  %GV = load ptr, ptr @G
+  %GVe = getelementptr i32, ptr %GV, i32 40
+  store i32 20, ptr %GVe
   ret void
 }
 
-declare noalias i8* @malloc(i64)
+declare noalias ptr @malloc(i64)
 attributes #0 = { null_pointer_is_valid }
 ;.
 ; CHECK: attributes #[[ATTR0:[0-9]+]] = { null_pointer_is_valid }

diff  --git a/llvm/test/Transforms/GlobalOpt/malloc-promote-2.ll b/llvm/test/Transforms/GlobalOpt/malloc-promote-2.ll
index d0cc063539d1e..766a3595607f9 100644
--- a/llvm/test/Transforms/GlobalOpt/malloc-promote-2.ll
+++ b/llvm/test/Transforms/GlobalOpt/malloc-promote-2.ll
@@ -2,22 +2,21 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
- at G = internal global i32* null
+ at G = internal global ptr null
 
 define void @t() {
 ; CHECK-LABEL: @t(
 ; CHECK-NEXT:    ret void
 ;
-  %malloccall = tail call i8* @malloc(i64 mul (i64 100, i64 4))
-  %P = bitcast i8* %malloccall to i32*
-  store i32* %P, i32** @G
-  %GV = load i32*, i32** @G
-  %GVe = getelementptr i32, i32* %GV, i32 40
-  store i32 20, i32* %GVe
+  %malloccall = tail call ptr @malloc(i64 mul (i64 100, i64 4))
+  store ptr %malloccall, ptr @G
+  %GV = load ptr, ptr @G
+  %GVe = getelementptr i32, ptr %GV, i32 40
+  store i32 20, ptr %GVe
   ret void
 }
 
-declare noalias i8* @malloc(i64) allockind("alloc,uninitialized") allocsize(0)
+declare noalias ptr @malloc(i64) allockind("alloc,uninitialized") allocsize(0)
 
 define void @foo(i64 %Size) nounwind noinline #0 {
 ; CHECK-LABEL: @foo(
@@ -25,7 +24,7 @@ define void @foo(i64 %Size) nounwind noinline #0 {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %0 = load i32*, i32** @G, align 4
+  %0 = load ptr, ptr @G, align 4
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/malloc-promote-3.ll b/llvm/test/Transforms/GlobalOpt/malloc-promote-3.ll
index fe7b4753dd5cc..ee98e7e2dd86f 100644
--- a/llvm/test/Transforms/GlobalOpt/malloc-promote-3.ll
+++ b/llvm/test/Transforms/GlobalOpt/malloc-promote-3.ll
@@ -2,31 +2,29 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
- at G = internal global i32* null
+ at G = internal global ptr null
 
 ;.
-; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global i32* null
+; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global ptr null
 ;.
 define void @t() {
 ; CHECK-LABEL: @t(
-; CHECK-NEXT:    [[MALLOCCALL:%.*]] = tail call i8* @malloc(i64 400) #[[ATTR0:[0-9]+]]
-; CHECK-NEXT:    [[P:%.*]] = bitcast i8* [[MALLOCCALL]] to i32*
-; CHECK-NEXT:    store i32* [[P]], i32** @G, align 8
-; CHECK-NEXT:    [[GV:%.*]] = load i32*, i32** @G, align 8
-; CHECK-NEXT:    [[GVE:%.*]] = getelementptr i32, i32* [[GV]], i32 40
-; CHECK-NEXT:    store i32 20, i32* [[GVE]], align 4
+; CHECK-NEXT:    [[MALLOCCALL:%.*]] = tail call ptr @malloc(i64 400) #[[ATTR0:[0-9]+]]
+; CHECK-NEXT:    store ptr [[MALLOCCALL]], ptr @G, align 8
+; CHECK-NEXT:    [[GV:%.*]] = load ptr, ptr @G, align 8
+; CHECK-NEXT:    [[GVE:%.*]] = getelementptr i32, ptr [[GV]], i32 40
+; CHECK-NEXT:    store i32 20, ptr [[GVE]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %malloccall = tail call i8* @malloc(i64 mul (i64 100, i64 4)) nobuiltin
-  %P = bitcast i8* %malloccall to i32*
-  store i32* %P, i32** @G
-  %GV = load i32*, i32** @G
-  %GVe = getelementptr i32, i32* %GV, i32 40
-  store i32 20, i32* %GVe
+  %malloccall = tail call ptr @malloc(i64 mul (i64 100, i64 4)) nobuiltin
+  store ptr %malloccall, ptr @G
+  %GV = load ptr, ptr @G
+  %GVe = getelementptr i32, ptr %GV, i32 40
+  store i32 20, ptr %GVe
   ret void
 }
 
-declare noalias i8* @malloc(i64)
+declare noalias ptr @malloc(i64)
 ;.
 ; CHECK: attributes #[[ATTR0]] = { nobuiltin }
 ;.

diff  --git a/llvm/test/Transforms/GlobalOpt/malloc-promote-4.ll b/llvm/test/Transforms/GlobalOpt/malloc-promote-4.ll
index a58d177e9f73a..9091806e657a6 100644
--- a/llvm/test/Transforms/GlobalOpt/malloc-promote-4.ll
+++ b/llvm/test/Transforms/GlobalOpt/malloc-promote-4.ll
@@ -1,14 +1,14 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals
 ; RUN: opt -S -passes=globalopt -o - < %s | FileCheck %s
 
- at g = internal global i32* null, align 8
+ at g = internal global ptr null, align 8
 
 ;.
 ; CHECK: @[[G_INIT:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global i1 false
 ;.
 define internal i32 @f1() {
 ; CHECK-LABEL: define {{[^@]+}}@f1() unnamed_addr {
-; CHECK-NEXT:    [[G_INIT_VAL:%.*]] = load i1, i1* @g.init, align 1
+; CHECK-NEXT:    [[G_INIT_VAL:%.*]] = load i1, ptr @g.init, align 1
 ; CHECK-NEXT:    call fastcc void @f2()
 ; CHECK-NEXT:    [[NOTINIT:%.*]] = xor i1 [[G_INIT_VAL]], true
 ; CHECK-NEXT:    br i1 [[NOTINIT]], label [[TMP1:%.*]], label [[TMP2:%.*]]
@@ -20,9 +20,9 @@ define internal i32 @f1() {
 ; CHECK-NEXT:    [[TMP4:%.*]] = phi i32 [ -1, [[TMP1]] ], [ 1, [[TMP2]] ]
 ; CHECK-NEXT:    ret i32 [[TMP4]]
 ;
-  %1 = load i32*, i32** @g, align 8
+  %1 = load ptr, ptr @g, align 8
   call void @f2();
-  %2 = icmp eq i32* %1, null
+  %2 = icmp eq ptr %1, null
   br i1 %2, label %3, label %4
 
 3:                                          ; preds = %0
@@ -38,24 +38,23 @@ define internal i32 @f1() {
 
 define internal void @f2() {
 ; CHECK-LABEL: define {{[^@]+}}@f2() unnamed_addr {
-; CHECK-NEXT:    store i1 true, i1* @g.init, align 1
+; CHECK-NEXT:    store i1 true, ptr @g.init, align 1
 ; CHECK-NEXT:    ret void
 ;
-  %1 = call noalias i8* @malloc(i64 4)
-  %2 = bitcast i8* %1 to i32*
-  store i32* %2, i32** @g, align 8
+  %1 = call noalias ptr @malloc(i64 4)
+  store ptr %1, ptr @g, align 8
   ret void
 }
 
 define dso_local i32 @main() {
 ; CHECK-LABEL: define {{[^@]+}}@main() local_unnamed_addr {
-; CHECK-NEXT:    store i1 false, i1* @g.init, align 1
+; CHECK-NEXT:    store i1 false, ptr @g.init, align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = call fastcc i32 @f1()
 ; CHECK-NEXT:    ret i32 [[TMP1]]
 ;
-  store i32* null, i32** @g, align 8
+  store ptr null, ptr @g, align 8
   %1 = call i32 @f1()
   ret i32 %1
 }
 
-declare dso_local noalias i8* @malloc(i64) allockind("alloc,uninitialized") allocsize(0)
+declare dso_local noalias ptr @malloc(i64) allockind("alloc,uninitialized") allocsize(0)

diff  --git a/llvm/test/Transforms/GlobalOpt/malloc-promote-5.ll b/llvm/test/Transforms/GlobalOpt/malloc-promote-5.ll
index f594b465bd6ca..92b1c946923cb 100644
--- a/llvm/test/Transforms/GlobalOpt/malloc-promote-5.ll
+++ b/llvm/test/Transforms/GlobalOpt/malloc-promote-5.ll
@@ -1,20 +1,18 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=globalopt -S < %s | FileCheck %s
 
- at g = internal global i32* null, align 8
+ at g = internal global ptr null, align 8
 
 define signext i32 @f() local_unnamed_addr {
 ; CHECK-LABEL: @f(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store i16 -1, i16* bitcast ([4 x i8]* @g.body to i16*), align 2
+; CHECK-NEXT:    store i16 -1, ptr @g.body, align 2
 ; CHECK-NEXT:    ret i32 0
 ;
 entry:
-  %call = call i8* @malloc(i64 4)
-  %b = bitcast i8* %call to i32*
-  store i32* %b, i32** @g, align 8
-  %b2 = bitcast i8* %call to i16*
-  store i16 -1, i16* %b2
+  %call = call ptr @malloc(i64 4)
+  store ptr %call, ptr @g, align 8
+  store i16 -1, ptr %call
   ret i32 0
 }
 
@@ -23,26 +21,26 @@ define signext i32 @main() {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[CALL:%.*]] = call signext i32 @f()
 ; CHECK-NEXT:    call void @f1()
-; CHECK-NEXT:    store i32 1, i32* bitcast ([4 x i8]* @g.body to i32*), align 4
+; CHECK-NEXT:    store i32 1, ptr @g.body, align 4
 ; CHECK-NEXT:    call void @f1()
-; CHECK-NEXT:    store i8 2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @g.body, i32 0, i32 0), align 4
+; CHECK-NEXT:    store i8 2, ptr @g.body, align 4
 ; CHECK-NEXT:    call void @f1()
-; CHECK-NEXT:    [[RES:%.*]] = load i32, i32* bitcast ([4 x i8]* @g.body to i32*), align 4
+; CHECK-NEXT:    [[RES:%.*]] = load i32, ptr @g.body, align 4
 ; CHECK-NEXT:    ret i32 [[RES]]
 ;
 entry:
   %call = call signext i32 @f()
   call void @f1()
-  %v0 = load i32*, i32** @g, align 8
-  store i32 1, i32* %v0, align 4
+  %v0 = load ptr, ptr @g, align 8
+  store i32 1, ptr %v0, align 4
   call void @f1()
-  %v1 = load i8*, i8** bitcast (i32** @g to i8**), align 8
-  store i8 2, i8* %v1, align 4
+  %v1 = load ptr, ptr @g, align 8
+  store i8 2, ptr %v1, align 4
   call void @f1()
-  %v2 = load i32*, i32** @g, align 8
-  %res = load i32, i32* %v2, align 4
+  %v2 = load ptr, ptr @g, align 8
+  %res = load i32, ptr %v2, align 4
   ret i32 %res
 }
 
-declare noalias align 16 i8* @malloc(i64) allockind("alloc,uninitialized") allocsize(0)
+declare noalias align 16 ptr @malloc(i64) allockind("alloc,uninitialized") allocsize(0)
 declare void @f1()

diff  --git a/llvm/test/Transforms/GlobalOpt/malloc-promote-6.ll b/llvm/test/Transforms/GlobalOpt/malloc-promote-6.ll
index f35e1aea60158..589bec58a982a 100644
--- a/llvm/test/Transforms/GlobalOpt/malloc-promote-6.ll
+++ b/llvm/test/Transforms/GlobalOpt/malloc-promote-6.ll
@@ -2,29 +2,27 @@
 
 ; CHECK-NOT: @global
 
- at global = internal global i8* null
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @zot, i8* null }]
+ at global = internal global ptr null
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @zot, ptr null }]
 
-declare i8* @_Znwm(i64)
+declare ptr @_Znwm(i64)
 
 define internal void @widget() {
-  %tmp = tail call i8* @_Znwm(i64 0)
-  %tmp2 = getelementptr inbounds i8, i8* %tmp, i64 0
-  store i8* %tmp, i8** @global, align 8
-  call void @baz(void ()* @spam)
+  %tmp = tail call ptr @_Znwm(i64 0)
+  store ptr %tmp, ptr @global, align 8
+  call void @baz(ptr @spam)
   ret void
 }
 
 define internal void @spam() {
-  %tmp = load i8*, i8** @global, align 8
-  %tmp2 = getelementptr inbounds i8, i8* %tmp, i64 0
+  %tmp = load ptr, ptr @global, align 8
   ret void
 }
 
 define internal void @zot() {
-  call void @baz(void ()* @widget)
+  call void @baz(ptr @widget)
   ret void
 }
 
-declare void @baz(void ()*)
+declare void @baz(ptr)
 

diff  --git a/llvm/test/Transforms/GlobalOpt/memcpy.ll b/llvm/test/Transforms/GlobalOpt/memcpy.ll
index c0700e5567f91..a2b5bad9a6a7b 100644
--- a/llvm/test/Transforms/GlobalOpt/memcpy.ll
+++ b/llvm/test/Transforms/GlobalOpt/memcpy.ll
@@ -1,13 +1,12 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 ; CHECK: G1 = internal unnamed_addr constant
 
- at G1 = internal global [58 x i8] c"asdlfkajsdlfkajsd;lfkajds;lfkjasd;flkajsd;lkfja;sdlkfjasd\00"         ; <[58 x i8]*> [#uses=1]
+ at G1 = internal global [58 x i8] c"asdlfkajsdlfkajsd;lfkajds;lfkjasd;flkajsd;lkfja;sdlkfjasd\00"         ; <ptr> [#uses=1]
 
 define void @foo() {
   %Blah = alloca [58 x i8]
-  %tmp.0 = getelementptr [58 x i8], [58 x i8]* %Blah, i32 0, i32 0
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 1 %tmp.0, i8* align 1 getelementptr inbounds ([58 x i8], [58 x i8]* @G1, i32 0, i32 0), i32 58, i1 false)
+  call void @llvm.memcpy.p0.p0.i32(ptr align 1 %Blah, ptr align 1 @G1, i32 58, i1 false)
   ret void
 }
 
-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/Transforms/GlobalOpt/memset-null.ll b/llvm/test/Transforms/GlobalOpt/memset-null.ll
index 9000b98056028..838c987e5d60b 100644
--- a/llvm/test/Transforms/GlobalOpt/memset-null.ll
+++ b/llvm/test/Transforms/GlobalOpt/memset-null.ll
@@ -1,29 +1,29 @@
 ; RUN: opt -passes=globalopt -S < %s | FileCheck %s
 ; PR10047
 
-%0 = type { i32, void ()*, i8* }
+%0 = type { i32, ptr, ptr }
 %struct.A = type { [100 x i32] }
 
 ; CHECK: @a
 @a = global %struct.A zeroinitializer, align 4
- at llvm.global_ctors = appending global [2 x %0] [%0 { i32 65535, void ()* @_GLOBAL__I_a, i8* null }, %0 { i32 65535, void ()* @_GLOBAL__I_b, i8* null }]
+ at llvm.global_ctors = appending global [2 x %0] [%0 { i32 65535, ptr @_GLOBAL__I_a, ptr null }, %0 { i32 65535, ptr @_GLOBAL__I_b, ptr null }]
 
-declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) nounwind
+declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind
 
 ; CHECK-NOT: GLOBAL__I_a
 define internal void @_GLOBAL__I_a() nounwind {
 entry:
-  tail call void @llvm.memset.p0i8.i64(i8* align 4 bitcast (%struct.A* @a to i8*), i8 0, i64 400, i1 false) nounwind
+  tail call void @llvm.memset.p0.i64(ptr align 4 @a, i8 0, i64 400, i1 false) nounwind
   ret void
 }
 
 %struct.X = type { i8 }
- at y = global i8* null, align 8
+ at y = global ptr null, align 8
 @x = global %struct.X zeroinitializer, align 1
 
 define internal void @_GLOBAL__I_b() nounwind {
 entry:
-  %tmp.i.i.i = load i8*, i8** @y, align 8
-  tail call void @llvm.memset.p0i8.i64(i8* %tmp.i.i.i, i8 0, i64 10, i1 false) nounwind
+  %tmp.i.i.i = load ptr, ptr @y, align 8
+  tail call void @llvm.memset.p0.i64(ptr %tmp.i.i.i, i8 0, i64 10, i1 false) nounwind
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/memset.ll b/llvm/test/Transforms/GlobalOpt/memset.ll
index 9248b239624cd..dad7571e2f00a 100644
--- a/llvm/test/Transforms/GlobalOpt/memset.ll
+++ b/llvm/test/Transforms/GlobalOpt/memset.ll
@@ -4,28 +4,26 @@
 
 ; Both globals are write only, delete them.
 
- at G0 = internal global [58 x i8] c"asdlfkajsdlfkajsd;lfkajds;lfkjasd;flkajsd;lkfja;sdlkfjasd\00"         ; <[58 x i8]*> [#uses=1]
- at G1 = internal global [4 x i32] [ i32 1, i32 2, i32 3, i32 4 ]          ; <[4 x i32]*> [#uses=1]
+ at G0 = internal global [58 x i8] c"asdlfkajsdlfkajsd;lfkajds;lfkjasd;flkajsd;lkfja;sdlkfjasd\00"         ; <ptr> [#uses=1]
+ at G1 = internal global [4 x i32] [ i32 1, i32 2, i32 3, i32 4 ]          ; <ptr> [#uses=1]
 
 define void @foo() {
   %Blah = alloca [58 x i8]
-  %tmp3 = bitcast [58 x i8]* %Blah to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* bitcast ([4 x i32]* @G1 to i8*), i8* %tmp3, i32 16, i1 false)
-  call void @llvm.memset.p0i8.i32(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @G0, i32 0, i32 0), i8 17, i32 58, i1 false)
+  call void @llvm.memcpy.p0.p0.i32(ptr @G1, ptr %Blah, i32 16, i1 false)
+  call void @llvm.memset.p0.i32(ptr @G0, i8 17, i32 58, i1 false)
   ret void
 }
 
- at G0_as1 = internal addrspace(1) global [58 x i8] c"asdlfkajsdlfkajsd;lfkajds;lfkjasd;flkajsd;lkfja;sdlkfjasd\00"         ; <[58 x i8]*> [#uses=1]
- at G1_as1 = internal addrspace(1) global [4 x i32] [ i32 1, i32 2, i32 3, i32 4 ]          ; <[4 x i32]*> [#uses=1]
+ at G0_as1 = internal addrspace(1) global [58 x i8] c"asdlfkajsdlfkajsd;lfkajds;lfkjasd;flkajsd;lkfja;sdlkfjasd\00"         ; <ptr> [#uses=1]
+ at G1_as1 = internal addrspace(1) global [4 x i32] [ i32 1, i32 2, i32 3, i32 4 ]          ; <ptr> [#uses=1]
 
 define void @foo_as1() {
   %Blah = alloca [58 x i8]
-  %tmp3 = bitcast [58 x i8]* %Blah to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* addrspacecast ([4 x i32] addrspace(1)* @G1_as1 to i8*), i8* %tmp3, i32 16, i1 false)
-  call void @llvm.memset.p1i8.i32(i8 addrspace(1)* getelementptr inbounds ([58 x i8], [58 x i8] addrspace(1)* @G0_as1, i32 0, i32 0), i8 17, i32 58, i1 false)
+  call void @llvm.memcpy.p0.p0.i32(ptr addrspacecast (ptr addrspace(1) @G1_as1 to ptr), ptr %Blah, i32 16, i1 false)
+  call void @llvm.memset.p1.i32(ptr addrspace(1) @G0_as1, i8 17, i32 58, i1 false)
   ret void
 }
 
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i1) nounwind
-declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i1) nounwind
-declare void @llvm.memset.p1i8.i32(i8 addrspace(1)* nocapture, i8, i32, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind
+declare void @llvm.memset.p0.i32(ptr nocapture, i8, i32, i1) nounwind
+declare void @llvm.memset.p1.i32(ptr addrspace(1) nocapture, i8, i32, i1) nounwind

diff  --git a/llvm/test/Transforms/GlobalOpt/metadata.ll b/llvm/test/Transforms/GlobalOpt/metadata.ll
index c420235d9cfb6..3b6e121d7ce6e 100644
--- a/llvm/test/Transforms/GlobalOpt/metadata.ll
+++ b/llvm/test/Transforms/GlobalOpt/metadata.ll
@@ -3,12 +3,12 @@
 ; PR6112 - When globalopt does RAUW(@G, %G), the metadata reference should drop
 ; to null.  Function local metadata that references @G from a 
diff erent function
 ; to that containing %G should likewise drop to null.
- at G = internal global i8** null
+ at G = internal global ptr null
 
-define i32 @main(i32 %argc, i8** %argv) norecurse {
+define i32 @main(i32 %argc, ptr %argv) norecurse {
 ; CHECK-LABEL: @main(
 ; CHECK: %G = alloca
-  store i8** %argv, i8*** @G
+  store ptr %argv, ptr @G
   ret i32 0
 }
 
@@ -17,7 +17,7 @@ define void @foo(i32 %x) {
 ; for 'MetadataAsValue::get(ValueAsMetadata::get(Value*))'.  When @G drops to
 ; null, the ValueAsMetadata instance gets replaced by metadata !{}, or
 ; MDNode::get({}).
-  call void @llvm.foo(metadata i8*** @G, metadata i32 %x)
+  call void @llvm.foo(metadata ptr @G, metadata i32 %x)
 ; CHECK: call void @llvm.foo(metadata ![[EMPTY:[0-9]+]], metadata i32 %x)
   ret void
 }
@@ -27,6 +27,6 @@ declare void @llvm.foo(metadata, metadata) nounwind readnone
 !named = !{!0}
 ; CHECK: !named = !{![[NULL:[0-9]+]]}
 
-!0 = !{i8*** @G}
+!0 = !{ptr @G}
 ; CHECK-DAG: ![[NULL]] = distinct !{null}
 ; CHECK-DAG: ![[EMPTY]] = !{}

diff  --git a/llvm/test/Transforms/GlobalOpt/naked_functions.ll b/llvm/test/Transforms/GlobalOpt/naked_functions.ll
index 1174070b32176..3b6064746a3e7 100644
--- a/llvm/test/Transforms/GlobalOpt/naked_functions.ll
+++ b/llvm/test/Transforms/GlobalOpt/naked_functions.ll
@@ -6,18 +6,18 @@
 
 define i32 @bar() {
 entry:
-  %call = call i32 @foo(i32* @g)
-; CHECK: %call = call i32 @foo(i32* @g)
+  %call = call i32 @foo(ptr @g)
+; CHECK: %call = call i32 @foo(ptr @g)
   ret i32 %call
 }
 
-define internal i32 @foo(i32*) #0 {
+define internal i32 @foo(ptr) #0 {
 entry:
   %retval = alloca i32, align 4
   call void asm sideeffect "ldr r0, [r0] \0Abx lr        \0A", ""()
   unreachable
 }
 
-; CHECK: define internal i32 @foo(i32* %0)
+; CHECK: define internal i32 @foo(ptr %0)
 
 attributes #0 = { naked }

diff  --git a/llvm/test/Transforms/GlobalOpt/new-promote.ll b/llvm/test/Transforms/GlobalOpt/new-promote.ll
index 24b8d03240ec8..bf0b6a91fd76d 100644
--- a/llvm/test/Transforms/GlobalOpt/new-promote.ll
+++ b/llvm/test/Transforms/GlobalOpt/new-promote.ll
@@ -1,7 +1,7 @@
 ; RUN: opt -passes=globalopt -S < %s | FileCheck %s
 
 %s = type { i32 }
- at g = internal global %s* null, align 8
+ at g = internal global ptr null, align 8
 
 ; Test code pattern for:
 ;   class s { int a; s() { a = 1;} };
@@ -12,11 +12,9 @@ define internal void @f() {
 ; CHECK-LABEL: @f(
 ; CHECK-NEXT:    ret void
 ;
-  %1 = tail call i8* @_Znwm(i64 4)
-  %2 = bitcast i8* %1 to %s*
-  %3 = getelementptr inbounds %s, %s* %2, i64 0, i32 0
-  store i32 1, i32* %3, align 4
-  store i8* %1, i8** bitcast (%s** @g to i8**), align 8
+  %1 = tail call ptr @_Znwm(i64 4)
+  store i32 1, ptr %1, align 4
+  store ptr %1, ptr @g, align 8
   ret void
 }
 
@@ -28,13 +26,12 @@ define dso_local signext i32 @main() {
 ;
 entry:
   call void @f()
-  %0 = load %s*, %s** @g, align 4
-  %1 = getelementptr inbounds %s, %s* %0, i64 0, i32 0
-  %2 = load i32, i32* %1, align 4
-  ret i32 %2
+  %0 = load ptr, ptr @g, align 4
+  %1 = load i32, ptr %0, align 4
+  ret i32 %1
 }
 
-declare nonnull i8* @_Znwm(i64)
+declare nonnull ptr @_Znwm(i64)
 
-declare signext i32 @printf(i8*, ...)
+declare signext i32 @printf(ptr, ...)
 

diff  --git a/llvm/test/Transforms/GlobalOpt/null-check-global-value.ll b/llvm/test/Transforms/GlobalOpt/null-check-global-value.ll
index e75df2343c4d5..bff1a79fd9eeb 100644
--- a/llvm/test/Transforms/GlobalOpt/null-check-global-value.ll
+++ b/llvm/test/Transforms/GlobalOpt/null-check-global-value.ll
@@ -1,32 +1,32 @@
 ; RUN: opt -passes=globalopt -S < %s | FileCheck %s
 
-%sometype = type { i8* }
+%sometype = type { ptr }
 
- at map = internal unnamed_addr global %sometype* null, align 8
+ at map = internal unnamed_addr global ptr null, align 8
 
 define void @Init() {
 ; CHECK-LABEL: @Init(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store i1 true, i1* @map.init, align 1
+; CHECK-NEXT:    store i1 true, ptr @map.init, align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %call = tail call noalias nonnull dereferenceable(48) i8* @_Znwm(i64 48)
-  store i8* %call, i8** bitcast (%sometype** @map to i8**), align 8
+  %call = tail call noalias nonnull dereferenceable(48) ptr @_Znwm(i64 48)
+  store ptr %call, ptr @map, align 8
   ret void
 }
 
 define void @Usage() {
 ; CHECK-LABEL: @Usage(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[MAP_INIT_VAL:%.*]] = load i1, i1* @map.init, align 1
+; CHECK-NEXT:    [[MAP_INIT_VAL:%.*]] = load i1, ptr @map.init, align 1
 ; CHECK-NEXT:    [[NOTINIT:%.*]] = xor i1 [[MAP_INIT_VAL]], true
 ; CHECK-NEXT:    unreachable
 ;
 entry:
-  %0 = load i8*, i8** bitcast (%sometype** @map to i8**), align 8
-  %.not = icmp eq i8* %0, null
+  %0 = load ptr, ptr @map, align 8
+  %.not = icmp eq ptr %0, null
   unreachable
 }
 
-declare i8* @_Znwm(i64)
+declare ptr @_Znwm(i64)

diff  --git a/llvm/test/Transforms/GlobalOpt/phi-select.ll b/llvm/test/Transforms/GlobalOpt/phi-select.ll
index c9cd5c2ba640f..0fe8b3e0028b7 100644
--- a/llvm/test/Transforms/GlobalOpt/phi-select.ll
+++ b/llvm/test/Transforms/GlobalOpt/phi-select.ll
@@ -4,12 +4,12 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 ; CHECK-NOT: global
 
- at X = internal global i32 4              ; <i32*> [#uses=2]
- at Y = internal global i32 5              ; <i32*> [#uses=2]
+ at X = internal global i32 4              ; <ptr> [#uses=2]
+ at Y = internal global i32 5              ; <ptr> [#uses=2]
 
 define i32 @test1(i1 %C) {
-        %P = select i1 %C, i32* @X, i32* @Y             ; <i32*> [#uses=1]
-        %V = load i32, i32* %P               ; <i32> [#uses=1]
+        %P = select i1 %C, ptr @X, ptr @Y             ; <ptr> [#uses=1]
+        %V = load i32, ptr %P               ; <i32> [#uses=1]
         ret i32 %V
 }
 
@@ -21,7 +21,7 @@ T:              ; preds = %0
         br label %Cont
 
 Cont:           ; preds = %T, %0
-        %P = phi i32* [ @X, %0 ], [ @Y, %T ]            ; <i32*> [#uses=1]
-        %V = load i32, i32* %P               ; <i32> [#uses=1]
+        %P = phi ptr [ @X, %0 ], [ @Y, %T ]            ; <ptr> [#uses=1]
+        %V = load i32, ptr %P               ; <i32> [#uses=1]
         ret i32 %V
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/pr33686.ll b/llvm/test/Transforms/GlobalOpt/pr33686.ll
index 6f09ba62dcbb1..da1c9cd43f887 100644
--- a/llvm/test/Transforms/GlobalOpt/pr33686.ll
+++ b/llvm/test/Transforms/GlobalOpt/pr33686.ll
@@ -12,6 +12,6 @@ entry:
   ret void
 
 notreachable:
-  %patatino = select i1 undef, i16* @glob, i16* %patatino
+  %patatino = select i1 undef, ptr @glob, ptr %patatino
   br label %notreachable
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/pr39751.ll b/llvm/test/Transforms/GlobalOpt/pr39751.ll
index a042d74b1222a..6214d890efb25 100644
--- a/llvm/test/Transforms/GlobalOpt/pr39751.ll
+++ b/llvm/test/Transforms/GlobalOpt/pr39751.ll
@@ -11,10 +11,10 @@
 define void @f1() {
 ; CHECK-LABEL: @f1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [2 x i16], [2 x i16]* @a, i32 0, <2 x i32> <i32 0, i32 1>
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [2 x i16], ptr @a, i32 0, <2 x i32> <i32 0, i32 1>
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %gep = getelementptr inbounds [2 x i16], [2 x i16]* @a, i32 0, <2 x i32> <i32 0, i32 1>
+  %gep = getelementptr inbounds [2 x i16], ptr @a, i32 0, <2 x i32> <i32 0, i32 1>
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/pr51879.ll b/llvm/test/Transforms/GlobalOpt/pr51879.ll
index 44ed0c8870207..007713e6d2ae9 100644
--- a/llvm/test/Transforms/GlobalOpt/pr51879.ll
+++ b/llvm/test/Transforms/GlobalOpt/pr51879.ll
@@ -1,27 +1,27 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
 ; RUN: opt -S -passes=globalopt < %s | FileCheck %s
 
-%type = type { { i8** } }
+%type = type { { ptr } }
 
 @g = internal global %type zeroinitializer
- at g2 = external global i8*
+ at g2 = external global ptr
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @ctor, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @ctor, ptr null }]
 
 ;.
-; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal global [[TYPE:%.*]] { { i8** } { i8** @g2 } }
-; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = external global i8*
-; CHECK: @[[LLVM_GLOBAL_CTORS:[a-zA-Z0-9_$"\\.-]+]] = appending global [0 x { i32, void ()*, i8* }] zeroinitializer
+; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal global [[TYPE:%.*]] { { ptr } { ptr @g2 } }
+; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = external global ptr
+; CHECK: @[[LLVM_GLOBAL_CTORS:[a-zA-Z0-9_$"\\.-]+]] = appending global [0 x { i32, ptr, ptr }] zeroinitializer
 ;.
 define internal void @ctor() {
-  store i64 0, i64* bitcast (%type* @g to i64*), align 8
-  store i8** @g2, i8*** getelementptr inbounds (%type, %type* @g, i64 0, i32 0, i32 0), align 8
+  store i64 0, ptr @g, align 8
+  store ptr @g2, ptr @g, align 8
   ret void
 }
 
-define %type* @test() {
+define ptr @test() {
 ; CHECK-LABEL: @test(
-; CHECK-NEXT:    ret %type* @g
+; CHECK-NEXT:    ret ptr @g
 ;
-  ret %type* @g
+  ret ptr @g
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/pr52994.ll b/llvm/test/Transforms/GlobalOpt/pr52994.ll
index 584d7155f3981..e023e3651fb1b 100644
--- a/llvm/test/Transforms/GlobalOpt/pr52994.ll
+++ b/llvm/test/Transforms/GlobalOpt/pr52994.ll
@@ -3,15 +3,15 @@
 
 ; Check that aggregate stores work correctly.
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @ctor, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @ctor, ptr null }]
 
 @g = global { i64, i64 } poison
 
 ;.
-; CHECK: @[[LLVM_GLOBAL_CTORS:[a-zA-Z0-9_$"\\.-]+]] = appending global [0 x { i32, void ()*, i8* }] zeroinitializer
+; CHECK: @[[LLVM_GLOBAL_CTORS:[a-zA-Z0-9_$"\\.-]+]] = appending global [0 x { i32, ptr, ptr }] zeroinitializer
 ; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr global { i64, i64 } { i64 1, i64 2 }
 ;.
 define internal void @ctor() {
-  store { i64, i64 } { i64 1, i64 2 }, { i64, i64 }* @g
+  store { i64, i64 } { i64 1, i64 2 }, ptr @g
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/pr53002.ll b/llvm/test/Transforms/GlobalOpt/pr53002.ll
index ee743d72b914a..770249c1acab1 100644
--- a/llvm/test/Transforms/GlobalOpt/pr53002.ll
+++ b/llvm/test/Transforms/GlobalOpt/pr53002.ll
@@ -8,17 +8,17 @@
 
 @g = global %T zeroinitializer
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @ctor, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @ctor, ptr null }]
 
 ;.
 ; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr global [[T:%.*]] zeroinitializer
-; CHECK: @[[LLVM_GLOBAL_CTORS:[a-zA-Z0-9_$"\\.-]+]] = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @ctor, i8* null }]
+; CHECK: @[[LLVM_GLOBAL_CTORS:[a-zA-Z0-9_$"\\.-]+]] = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @ctor, ptr null }]
 ;.
 define internal void @ctor() {
 ; CHECK-LABEL: @ctor(
-; CHECK-NEXT:    store i8 0, i8* getelementptr inbounds ([[T:%.*]], %T* @g, i64 0, i32 0, i64 5), align 1
+; CHECK-NEXT:    store i8 0, ptr getelementptr inbounds ([[T:%.*]], ptr @g, i64 0, i32 0, i64 5), align 1
 ; CHECK-NEXT:    ret void
 ;
-  store i8 0, i8* getelementptr inbounds (%T, %T* @g, i64 0, i32 0, i64 5)
+  store i8 0, ptr getelementptr inbounds (%T, ptr @g, i64 0, i32 0, i64 5)
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/preserve-comdats.ll b/llvm/test/Transforms/GlobalOpt/preserve-comdats.ll
index b8fbb70413fd7..cde7f90d9519e 100644
--- a/llvm/test/Transforms/GlobalOpt/preserve-comdats.ll
+++ b/llvm/test/Transforms/GlobalOpt/preserve-comdats.ll
@@ -7,31 +7,31 @@ $comdat_global = comdat any
 ; CHECK: @comdat_global = weak_odr global i8 0, comdat{{$}}
 ; CHECK: @simple_global = internal global i8 42
 
- at llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }] [
-    { i32, void ()*, i8* } { i32 65535, void ()* @init_comdat_global, i8* @comdat_global },
-    { i32, void ()*, i8* } { i32 65535, void ()* @init_simple_global, i8* null }
+ at llvm.global_ctors = appending global [2 x { i32, ptr, ptr }] [
+    { i32, ptr, ptr } { i32 65535, ptr @init_comdat_global, ptr @comdat_global },
+    { i32, ptr, ptr } { i32 65535, ptr @init_simple_global, ptr null }
 ]
-; CHECK: @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }]
-; CHECK: [{ i32, void ()*, i8* } { i32 65535, void ()* @init_comdat_global, i8* @comdat_global }]
+; CHECK: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }]
+; CHECK: [{ i32, ptr, ptr } { i32 65535, ptr @init_comdat_global, ptr @comdat_global }]
 
 define void @init_comdat_global() {
-  store i8 42, i8* @comdat_global
+  store i8 42, ptr @comdat_global
   ret void
 }
 ; CHECK: define void @init_comdat_global()
 
 define internal void @init_simple_global() comdat($comdat_global) {
-  store i8 42, i8* @simple_global
+  store i8 42, ptr @simple_global
   ret void
 }
 ; CHECK-NOT: @init_simple_global()
 
-define i8* @use_simple() {
-  ret i8* @simple_global
+define ptr @use_simple() {
+  ret ptr @simple_global
 }
-; CHECK: define i8* @use_simple()
+; CHECK: define ptr @use_simple()
 
-define i8* @use_comdat() {
-  ret i8* @comdat_global
+define ptr @use_comdat() {
+  ret ptr @comdat_global
 }
-; CHECK: define i8* @use_comdat()
+; CHECK: define ptr @use_comdat()

diff  --git a/llvm/test/Transforms/GlobalOpt/recursively-delete-dead-inst-assertion.ll b/llvm/test/Transforms/GlobalOpt/recursively-delete-dead-inst-assertion.ll
index eb3b32032f113..52b958693308a 100644
--- a/llvm/test/Transforms/GlobalOpt/recursively-delete-dead-inst-assertion.ll
+++ b/llvm/test/Transforms/GlobalOpt/recursively-delete-dead-inst-assertion.ll
@@ -5,16 +5,16 @@
 ; a constant in the meantime. Make sure this does not cause an assertion
 ; failure.
 
- at a = internal global i32** null
- at b = internal global i32*** @a
+ at a = internal global ptr null
+ at b = internal global ptr @a
 
 define void @test() {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:    ret void
 ;
-  %v1 = load i32***, i32**** @b
-  %v2 = load i32**, i32*** %v1
-  store i32** %v2, i32*** @a
+  %v1 = load ptr, ptr @b
+  %v2 = load ptr, ptr %v1
+  store ptr %v2, ptr @a
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/shrink-address-to-bool.ll b/llvm/test/Transforms/GlobalOpt/shrink-address-to-bool.ll
index 8084876872425..19b175ce533e3 100644
--- a/llvm/test/Transforms/GlobalOpt/shrink-address-to-bool.ll
+++ b/llvm/test/Transforms/GlobalOpt/shrink-address-to-bool.ll
@@ -1,17 +1,17 @@
 ;RUN: opt -S -passes=globalopt -f %s | FileCheck %s
 
 ;CHECK: @foo = {{.*}}, !dbg !0
- at foo = global i64 ptrtoint ([1 x i64]* @baa to i64), align 8, !dbg !0
+ at foo = global i64 ptrtoint (ptr @baa to i64), align 8, !dbg !0
 @baa = common global [1 x i64] zeroinitializer, align 8, !dbg !6
 
 ; Function Attrs: noinline nounwind optnone uwtable
 define void @fun() #0 !dbg !16 {
 entry:
-  %0 = load i64, i64* @foo, align 8, !dbg !19
-  %1 = inttoptr i64 %0 to i64*, !dbg !19
-  %cmp = icmp ugt i64* getelementptr inbounds ([1 x i64], [1 x i64]* @baa, i32 0, i32 0), %1, !dbg !20
+  %0 = load i64, ptr @foo, align 8, !dbg !19
+  %1 = inttoptr i64 %0 to ptr, !dbg !19
+  %cmp = icmp ugt ptr @baa, %1, !dbg !20
   %conv = zext i1 %cmp to i32, !dbg !20
-  store i64 0, i64* @foo, align 8, !dbg !21
+  store i64 0, ptr @foo, align 8, !dbg !21
   ret void, !dbg !22
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/shrink-global-to-bool-check-debug.ll b/llvm/test/Transforms/GlobalOpt/shrink-global-to-bool-check-debug.ll
index 1c917413c6f00..e453857a25863 100644
--- a/llvm/test/Transforms/GlobalOpt/shrink-global-to-bool-check-debug.ll
+++ b/llvm/test/Transforms/GlobalOpt/shrink-global-to-bool-check-debug.ll
@@ -4,19 +4,19 @@
 
 define void @store() {
 entry:
-  store i32 5, i32* @foo, align 4
+  store i32 5, ptr @foo, align 4
   ret void
 }
 
 define i32 @bar() {
 entry:
-  %0 = load i32, i32* @foo, align 4
+  %0 = load i32, ptr @foo, align 4
   ret i32 %0
 }
 
 ;CHECK:      @bar
 ;CHECK-NEXT: entry:
-;CHECK-NEXT:   %.b = load i1, i1* @foo, align 1, !dbg ![[DbgLocLoadSel:[0-9]+]]
+;CHECK-NEXT:   %.b = load i1, ptr @foo, align 1, !dbg ![[DbgLocLoadSel:[0-9]+]]
 ;CHECK-NEXT:   %0 = select i1 %.b, i32 5, i32 0, !dbg ![[DbgLocLoadSel]]
 ;CHECK-NEXT:   call void @llvm.dbg.value({{.*}}), !dbg ![[DbgLocLoadSel]]
 ;CHECK-NEXT:   ret i32 %0, !dbg ![[DbgLocRet:[0-9]+]]

diff  --git a/llvm/test/Transforms/GlobalOpt/shrink-global-to-bool.ll b/llvm/test/Transforms/GlobalOpt/shrink-global-to-bool.ll
index bdd515bf2e557..d9f336f837ad1 100644
--- a/llvm/test/Transforms/GlobalOpt/shrink-global-to-bool.ll
+++ b/llvm/test/Transforms/GlobalOpt/shrink-global-to-bool.ll
@@ -12,32 +12,32 @@
 
 define void @test_global_var(i1 %i) {
 ; CHECK-LABEL: @test_global_var(
-; CHECK:    store volatile i32 10, i32* undef, align 4
+; CHECK:    store volatile i32 10, ptr undef, align 4
 ;
 entry:
   br i1 %i, label %bb1, label %exit
 bb1:
-  store i32 10, i32* @gvar
+  store i32 10, ptr @gvar
   br label %exit
 exit:
-  %ld = load i32, i32* @gvar
-  store volatile i32 %ld, i32* undef
+  %ld = load i32, ptr @gvar
+  store volatile i32 %ld, ptr undef
   ret void
 }
 
 define void @test_lds_var(i1 %i) {
 ; CHECK-LABEL: @test_lds_var(
-; CHECK:    store i32 10, i32 addrspace(3)* @lvar, align 4
-; CHECK:    [[LD:%.*]] = load i32, i32 addrspace(3)* @lvar, align 4
-; CHECK:    store volatile i32 [[LD]], i32* undef, align 4
+; CHECK:    store i32 10, ptr addrspace(3) @lvar, align 4
+; CHECK:    [[LD:%.*]] = load i32, ptr addrspace(3) @lvar, align 4
+; CHECK:    store volatile i32 [[LD]], ptr undef, align 4
 ;
 entry:
   br i1 %i, label %bb1, label %exit
 bb1:
-  store i32 10, i32 addrspace(3)* @lvar
+  store i32 10, ptr addrspace(3) @lvar
   br label %exit
 exit:
-  %ld = load i32, i32 addrspace(3)* @lvar
-  store volatile i32 %ld, i32* undef
+  %ld = load i32, ptr addrspace(3) @lvar
+  store volatile i32 %ld, ptr undef
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/static-const-bitcast.ll b/llvm/test/Transforms/GlobalOpt/static-const-bitcast.ll
index 27e4ade2b5c4c..efdc12a51b3f6 100644
--- a/llvm/test/Transforms/GlobalOpt/static-const-bitcast.ll
+++ b/llvm/test/Transforms/GlobalOpt/static-const-bitcast.ll
@@ -10,45 +10,42 @@ $Wrapper = comdat any
 @kA = internal global %struct.A zeroinitializer, align 4
 ; CHECK: @kA = internal unnamed_addr constant %struct.A { %class.Wrapper { i32 1036831949 } }, align 4
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } {
-i32 65535, void ()* @_GLOBAL__sub_I_const_static.cc, i8* null }]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } {
+i32 65535, ptr @_GLOBAL__sub_I_const_static.cc, ptr null }]
 
-define dso_local i32 @AsBits(float* %x) #0 {
+define dso_local i32 @AsBits(ptr %x) #0 {
 entry:
-  %0 = bitcast float* %x to i32*
-  %1 = load i32, i32* %0, align 4
-  ret i32 %1
+  %0 = load i32, ptr %x, align 4
+  ret i32 %0
 }
 
 define internal void @__cxx_global_var_init() #1 section ".text.startup" {
 entry:
-  call void @Wrapper(%class.Wrapper* getelementptr inbounds (%struct.A, %struct.A* @kA, i32 0, i32 0), float 0x3FB99999A0000000)
-  %0 = call {}* @llvm.invariant.start.p0i8(i64 4, i8* bitcast (%struct.A* @kA to i8*))
+  call void @Wrapper(ptr @kA, float 0x3FB99999A0000000)
+  %0 = call ptr @llvm.invariant.start.p0(i64 4, ptr @kA)
   ret void
 }
 
-define linkonce_odr dso_local void @Wrapper(%class.Wrapper* %this, float %x) unnamed_addr #0 comdat align 2 {
+define linkonce_odr dso_local void @Wrapper(ptr %this, float %x) unnamed_addr #0 comdat align 2 {
 entry:
   %x.addr = alloca float, align 4
-  store float %x, float* %x.addr, align 4
-  %store_ = getelementptr inbounds %class.Wrapper, %class.Wrapper* %this, i32 0, i32 0
-  %call = call i32 @AsBits(float* %x.addr)
-  store i32 %call, i32* %store_, align 4
+  store float %x, ptr %x.addr, align 4
+  %call = call i32 @AsBits(ptr %x.addr)
+  store i32 %call, ptr %this, align 4
   ret void
 }
 
-declare {}* @llvm.invariant.start.p0i8(i64, i8* nocapture) #2
+declare ptr @llvm.invariant.start.p0(i64, ptr nocapture) #2
 
 ; Function Attrs: nounwind uwtable
-define dso_local void @LoadIt(%struct.A* %c) #0 {
+define dso_local void @LoadIt(ptr %c) #0 {
 entry:
-  %0 = bitcast %struct.A* %c to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 bitcast (%struct.A* @kA to i8*), i64 4, i1 false)
+  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %c, ptr align 4 @kA, i64 4, i1 false)
   ret void
 }
 
 ; Function Attrs: argmemonly nounwind
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #2
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1) #2
 
 ; Function Attrs: uwtable
 define internal void @_GLOBAL__sub_I_const_static.cc() #1 section ".text.startup" {

diff  --git a/llvm/test/Transforms/GlobalOpt/store-struct-element.ll b/llvm/test/Transforms/GlobalOpt/store-struct-element.ll
index 29d242d36c5d4..1f09ff2b9f9ee 100644
--- a/llvm/test/Transforms/GlobalOpt/store-struct-element.ll
+++ b/llvm/test/Transforms/GlobalOpt/store-struct-element.ll
@@ -4,20 +4,20 @@
 @A = local_unnamed_addr global %class.Class undef, align 4
 @B = local_unnamed_addr global %class.Class undef, align 4
 
- at llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }] [
-  { i32, void ()*, i8* } { i32 65535, void ()* @initA, i8* null },
-  { i32, void ()*, i8* } { i32 65535, void ()* @initB, i8* null }
+ at llvm.global_ctors = appending global [2 x { i32, ptr, ptr }] [
+  { i32, ptr, ptr } { i32 65535, ptr @initA, ptr null },
+  { i32, ptr, ptr } { i32 65535, ptr @initB, ptr null }
 ]
 
 define internal void @initA() section "__TEXT,__StaticInit,regular,pure_instructions" {
 entry:
-  store i32 -1, i32* bitcast (%class.Class* @A to i32*), align 4
+  store i32 -1, ptr @A, align 4
   ret void
 }
 
 define internal void @initB() section "__TEXT,__StaticInit,regular,pure_instructions" {
 entry:
-  store i8 -1, i8* bitcast (%class.Class* @B to i8*), align 4
+  store i8 -1, ptr @B, align 4
   ret void
 }
 

diff  --git a/llvm/test/Transforms/GlobalOpt/stored-once-
diff erent-type.ll b/llvm/test/Transforms/GlobalOpt/stored-once-
diff erent-type.ll
index 60178797f68c8..ed1891e794585 100644
--- a/llvm/test/Transforms/GlobalOpt/stored-once-
diff erent-type.ll
+++ b/llvm/test/Transforms/GlobalOpt/stored-once-
diff erent-type.ll
@@ -10,7 +10,7 @@ define void @store() {
 ; CHECK-LABEL: @store(
 ; CHECK-NEXT:    ret void
 ;
-  store i32 42, i32* bitcast ([4 x i8]* @g to i32*)
+  store i32 42, ptr @g
   ret void
 }
 
@@ -18,7 +18,7 @@ define i32 @load1() {
 ; CHECK-LABEL: @load1(
 ; CHECK-NEXT:    ret i32 42
 ;
-  %v = load i32, i32* bitcast ([4 x i8]* @g to i32*)
+  %v = load i32, ptr @g
   ret i32 %v
 }
 
@@ -26,15 +26,15 @@ define i16 @load2() {
 ; CHECK-LABEL: @load2(
 ; CHECK-NEXT:    ret i16 42
 ;
-  %v = load i16, i16* bitcast ([4 x i8]* @g to i16*)
+  %v = load i16, ptr @g
   ret i16 %v
 }
 
 define [4 x i8] @load3() {
 ; CHECK-LABEL: @load3(
-; CHECK-NEXT:    [[V:%.*]] = load [4 x i8], [4 x i8]* bitcast (i32* @g to [4 x i8]*), align 1
+; CHECK-NEXT:    [[V:%.*]] = load [4 x i8], ptr @g, align 1
 ; CHECK-NEXT:    ret [4 x i8] [[V]]
 ;
-  %v = load [4 x i8], [4 x i8]* @g
+  %v = load [4 x i8], ptr @g
   ret [4 x i8] %v
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/stored-once-through-gep.ll b/llvm/test/Transforms/GlobalOpt/stored-once-through-gep.ll
index 6f9d53fd36888..bb83f38d1046f 100644
--- a/llvm/test/Transforms/GlobalOpt/stored-once-through-gep.ll
+++ b/llvm/test/Transforms/GlobalOpt/stored-once-through-gep.ll
@@ -14,8 +14,7 @@ define void @store() {
 ; CHECK-LABEL: @store(
 ; CHECK-NEXT:    ret void
 ;
-  %addr = getelementptr inbounds %s, %s* bitcast (i32* @g to %s*), i64 0, i32 0
-  store i32 1, i32* %addr, align 4
+  store i32 1, ptr @g, align 4
   ret void
 }
 
@@ -25,6 +24,6 @@ define i32 @load() {
 ; CHECK-NEXT:    ret i32 1
 ;
   call fastcc void @store()
-  %v = load i32, i32* @g
+  %v = load i32, ptr @g
   ret i32 %v
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/stored-once-value-type.ll b/llvm/test/Transforms/GlobalOpt/stored-once-value-type.ll
index a971f74f3d77c..e1ed8836979b3 100644
--- a/llvm/test/Transforms/GlobalOpt/stored-once-value-type.ll
+++ b/llvm/test/Transforms/GlobalOpt/stored-once-value-type.ll
@@ -2,24 +2,22 @@
 ; RUN: opt -passes=globalopt < %s -S | FileCheck %s
 
 ; Check that we don't try to set a global initializer to a value of a 
diff erent type.
-; In this case, we were trying to set @0's initializer to be i32* null.
+; In this case, we were trying to set @0's initializer to be ptr null.
 
-%T = type { i32* }
+%T = type { ptr }
 
- at 0 = internal global %T* null
+ at 0 = internal global ptr null
 
 define void @a() {
 ; CHECK-LABEL: @a(
 ; CHECK-NEXT:    ret void
 ;
-  %1 = tail call i8* @_Znwm(i64 8)
-  %2 = bitcast i8* %1 to %T*
-  %3 = getelementptr inbounds %T, %T* %2, i64 0, i32 0
-  store i32* null, i32** %3, align 8
-  store i8* %1, i8** bitcast (%T** @0 to i8**), align 8
-  %4 = load i64*, i64** bitcast (%T** @0 to i64**), align 8
-  %5 = load atomic i64, i64* %4 acquire, align 8
+  %1 = tail call ptr @_Znwm(i64 8)
+  store ptr null, ptr %1, align 8
+  store ptr %1, ptr @0, align 8
+  %2 = load ptr, ptr @0, align 8
+  %3 = load atomic i64, ptr %2 acquire, align 8
   ret void
 }
 
-declare i8* @_Znwm(i64)
+declare ptr @_Znwm(i64)

diff  --git a/llvm/test/Transforms/GlobalOpt/storepointer-compare-no-null-opt.ll b/llvm/test/Transforms/GlobalOpt/storepointer-compare-no-null-opt.ll
index 7a777e41b7fee..c94921a88618c 100644
--- a/llvm/test/Transforms/GlobalOpt/storepointer-compare-no-null-opt.ll
+++ b/llvm/test/Transforms/GlobalOpt/storepointer-compare-no-null-opt.ll
@@ -1,7 +1,7 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 ; CHECK: global
 
- at G = internal global void ()* null              ; <void ()**> [#uses=2]
+ at G = internal global ptr null              ; <ptr> [#uses=2]
 
 define internal void @Actual() {
 ; CHECK-LABEL: Actual(
@@ -10,17 +10,17 @@ define internal void @Actual() {
 
 define void @init() {
 ; CHECK-LABEL: init(
-; CHECK: store void ()* @Actual, void ()** @G
-        store void ()* @Actual, void ()** @G
+; CHECK: store ptr @Actual, ptr @G
+        store ptr @Actual, ptr @G
         ret void
 }
 
 define void @doit() #0 {
 ; CHECK-LABEL: doit(
-        %FP = load void ()*, void ()** @G         ; <void ()*> [#uses=2]
-; CHECK: %FP = load void ()*, void ()** @G
-        %CC = icmp eq void ()* %FP, null                ; <i1> [#uses=1]
-; CHECK: %CC = icmp eq void ()* %FP, null
+        %FP = load ptr, ptr @G         ; <ptr> [#uses=2]
+; CHECK: %FP = load ptr, ptr @G
+        %CC = icmp eq ptr %FP, null                ; <i1> [#uses=1]
+; CHECK: %CC = icmp eq ptr %FP, null
         br i1 %CC, label %isNull, label %DoCall
 ; CHECK: br i1 %CC, label %isNull, label %DoCall
 

diff  --git a/llvm/test/Transforms/GlobalOpt/storepointer-compare.ll b/llvm/test/Transforms/GlobalOpt/storepointer-compare.ll
index fdb3b131a8c98..89efe26dbdc81 100644
--- a/llvm/test/Transforms/GlobalOpt/storepointer-compare.ll
+++ b/llvm/test/Transforms/GlobalOpt/storepointer-compare.ll
@@ -4,20 +4,20 @@
 ; Check that a comparison does not prevent an indirect call from being made 
 ; direct.  The global will still remain, but indirect call elim is still good.
 
- at G = internal global void ()* null              ; <void ()**> [#uses=2]
+ at G = internal global ptr null              ; <ptr> [#uses=2]
 
 define internal void @Actual() {
         ret void
 }
 
 define void @init() {
-        store void ()* @Actual, void ()** @G
+        store ptr @Actual, ptr @G
         ret void
 }
 
 define void @doit() {
-        %FP = load void ()*, void ()** @G         ; <void ()*> [#uses=2]
-        %CC = icmp eq void ()* %FP, null                ; <i1> [#uses=1]
+        %FP = load ptr, ptr @G         ; <ptr> [#uses=2]
+        %CC = icmp eq ptr %FP, null                ; <i1> [#uses=1]
         br i1 %CC, label %isNull, label %DoCall
 
 DoCall:         ; preds = %0

diff  --git a/llvm/test/Transforms/GlobalOpt/storepointer-no-null-opt.ll b/llvm/test/Transforms/GlobalOpt/storepointer-no-null-opt.ll
index db8b050b9275a..a759de98f05f3 100644
--- a/llvm/test/Transforms/GlobalOpt/storepointer-no-null-opt.ll
+++ b/llvm/test/Transforms/GlobalOpt/storepointer-no-null-opt.ll
@@ -1,6 +1,6 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 
- at G = internal global void ()* null              ; <void ()**> [#uses=2]
+ at G = internal global ptr null              ; <ptr> [#uses=2]
 ; CHECK: global
 
 define internal void @Actual() {
@@ -10,16 +10,16 @@ define internal void @Actual() {
 
 define void @init() {
 ; CHECK-LABEL: init(
-; CHECK:  store void ()* @Actual, void ()** @G
-        store void ()* @Actual, void ()** @G
+; CHECK:  store ptr @Actual, ptr @G
+        store ptr @Actual, ptr @G
         ret void
 }
 
 define void @doit() #0 {
 ; CHECK-LABEL: doit(
-; CHECK: %FP = load void ()*, void ()** @G
+; CHECK: %FP = load ptr, ptr @G
 ; CHECK: call void %FP()
-        %FP = load void ()*, void ()** @G         ; <void ()*> [#uses=1]
+        %FP = load ptr, ptr @G         ; <ptr> [#uses=1]
         call void %FP( )
         ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/storepointer.ll b/llvm/test/Transforms/GlobalOpt/storepointer.ll
index 64e5d7f9da0ac..9a88ee0a21763 100644
--- a/llvm/test/Transforms/GlobalOpt/storepointer.ll
+++ b/llvm/test/Transforms/GlobalOpt/storepointer.ll
@@ -1,19 +1,19 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 ; CHECK-NOT: global
 
- at G = internal global void ()* null              ; <void ()**> [#uses=2]
+ at G = internal global ptr null              ; <ptr> [#uses=2]
 
 define internal void @Actual() {
         ret void
 }
 
 define void @init() {
-        store void ()* @Actual, void ()** @G
+        store ptr @Actual, ptr @G
         ret void
 }
 
 define void @doit() {
-        %FP = load void ()*, void ()** @G         ; <void ()*> [#uses=1]
+        %FP = load ptr, ptr @G         ; <ptr> [#uses=1]
         call void %FP( )
         ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/tls.ll b/llvm/test/Transforms/GlobalOpt/tls.ll
index add7b2224dc12..6ba003ff30b2e 100644
--- a/llvm/test/Transforms/GlobalOpt/tls.ll
+++ b/llvm/test/Transforms/GlobalOpt/tls.ll
@@ -3,10 +3,10 @@
 
 declare void @wait()
 declare void @signal()
-declare void @start_thread(void ()*)
+declare void @start_thread(ptr)
 
 @x = internal thread_local global [100 x i32] zeroinitializer, align 16
- at ip = internal global i32* null, align 8
+ at ip = internal global ptr null, align 8
 
 ; PR14309: GlobalOpt would think that the value of @ip is always the address of
 ; x[1]. However, that address is 
diff erent for 
diff erent threads so @ip cannot
@@ -15,34 +15,34 @@ declare void @start_thread(void ()*)
 define i32 @f() {
 entry:
   ; Set @ip to point to x[1] for thread 1.
-  store i32* getelementptr inbounds ([100 x i32], [100 x i32]* @x, i64 0, i64 1), i32** @ip, align 8
+  store ptr getelementptr inbounds ([100 x i32], ptr @x, i64 0, i64 1), ptr @ip, align 8
 
   ; Run g on a new thread.
-  tail call void @start_thread(void ()* @g) nounwind
+  tail call void @start_thread(ptr @g) nounwind
   tail call void @wait() nounwind
 
   ; Reset x[1] for thread 1.
-  store i32 0, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @x, i64 0, i64 1), align 4
+  store i32 0, ptr getelementptr inbounds ([100 x i32], ptr @x, i64 0, i64 1), align 4
 
   ; Read the value of @ip, which now points at x[1] for thread 2.
-  %0 = load i32*, i32** @ip, align 8
+  %0 = load ptr, ptr @ip, align 8
 
-  %1 = load i32, i32* %0, align 4
+  %1 = load i32, ptr %0, align 4
   ret i32 %1
 
 ; CHECK-LABEL: @f(
 ; Make sure that the load from @ip hasn't been removed.
-; CHECK: load i32*, i32** @ip
+; CHECK: load ptr, ptr @ip
 ; CHECK: ret
 }
 
 define internal void @g() nounwind uwtable {
 entry:
   ; Set @ip to point to x[1] for thread 2.
-  store i32* getelementptr inbounds ([100 x i32], [100 x i32]* @x, i64 0, i64 1), i32** @ip, align 8
+  store ptr getelementptr inbounds ([100 x i32], ptr @x, i64 0, i64 1), ptr @ip, align 8
 
   ; Store 50 in x[1] for thread 2.
-  store i32 50, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @x, i64 0, i64 1), align 4
+  store i32 50, ptr getelementptr inbounds ([100 x i32], ptr @x, i64 0, i64 1), align 4
 
   tail call void @signal() nounwind
   ret void

diff  --git a/llvm/test/Transforms/GlobalOpt/trivialstore.ll b/llvm/test/Transforms/GlobalOpt/trivialstore.ll
index 87efe5d60561b..f56083a069f5d 100644
--- a/llvm/test/Transforms/GlobalOpt/trivialstore.ll
+++ b/llvm/test/Transforms/GlobalOpt/trivialstore.ll
@@ -1,19 +1,19 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 ; CHECK-NOT: G
 
- at G = internal global i32 17             ; <i32*> [#uses=3]
+ at G = internal global i32 17             ; <ptr> [#uses=3]
 
 define void @foo() {
-        store i32 17, i32* @G
+        store i32 17, ptr @G
         ret void
 }
 
 define i32 @bar() {
-        %X = load i32, i32* @G               ; <i32> [#uses=1]
+        %X = load i32, ptr @G               ; <i32> [#uses=1]
         ret i32 %X
 }
 
 define internal void @dead() {
-        store i32 123, i32* @G
+        store i32 123, ptr @G
         ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/undef-ctor-dtor.ll b/llvm/test/Transforms/GlobalOpt/undef-ctor-dtor.ll
index 00aa45dc3afcb..b14c5fca2e58e 100644
--- a/llvm/test/Transforms/GlobalOpt/undef-ctor-dtor.ll
+++ b/llvm/test/Transforms/GlobalOpt/undef-ctor-dtor.ll
@@ -2,8 +2,8 @@
 
 ; Gracefully handle undef global_ctors/global_dtors
 
-; CHECK: @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] undef
-; CHECK: @llvm.global_dtors = appending global [0 x { i32, void ()*, i8* }] undef
+; CHECK: @llvm.global_ctors = appending global [0 x { i32, ptr, ptr }] undef
+; CHECK: @llvm.global_dtors = appending global [0 x { i32, ptr, ptr }] undef
 
- at llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] undef
- at llvm.global_dtors = appending global [0 x { i32, void ()*, i8* }] undef
+ at llvm.global_ctors = appending global [0 x { i32, ptr, ptr }] undef
+ at llvm.global_dtors = appending global [0 x { i32, ptr, ptr }] undef

diff  --git a/llvm/test/Transforms/GlobalOpt/undef-init.ll b/llvm/test/Transforms/GlobalOpt/undef-init.ll
index fb0029158ba8e..958f9ac68112c 100644
--- a/llvm/test/Transforms/GlobalOpt/undef-init.ll
+++ b/llvm/test/Transforms/GlobalOpt/undef-init.ll
@@ -1,17 +1,17 @@
 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
 ; CHECK-NOT: store
 
- at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [ { i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__I__Z3foov, i8* null } ]          ; <[1 x { i32, void ()*, i8* }]*> [#uses=0]
- at X.0 = internal global i32 undef                ; <i32*> [#uses=2]
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [ { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I__Z3foov, ptr null } ]          ; <ptr> [#uses=0]
+ at X.0 = internal global i32 undef                ; <ptr> [#uses=2]
 
 define i32 @_Z3foov() {
 entry:
-        %tmp.1 = load i32, i32* @X.0         ; <i32> [#uses=1]
+        %tmp.1 = load i32, ptr @X.0         ; <i32> [#uses=1]
         ret i32 %tmp.1
 }
 
 define internal void @_GLOBAL__I__Z3foov() {
 entry:
-        store i32 1, i32* @X.0
+        store i32 1, ptr @X.0
         ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/unnamed-addr.ll b/llvm/test/Transforms/GlobalOpt/unnamed-addr.ll
index c954ccf5bf446..ac8d8e203b05f 100644
--- a/llvm/test/Transforms/GlobalOpt/unnamed-addr.ll
+++ b/llvm/test/Transforms/GlobalOpt/unnamed-addr.ll
@@ -21,43 +21,42 @@ define internal void @used_internal() {
 
 define i32 @get_e() {
        call void @used_internal()
-       %t = load i32, i32* @e
+       %t = load i32, ptr @e
        ret i32 %t
 }
 
 define void @set_e(i32 %x) {
-       store i32 %x, i32* @e
+       store i32 %x, ptr @e
        ret void
 }
 
 define i1 @bah(i64 %i) nounwind readonly optsize ssp {
 entry:
-  %arrayidx4 = getelementptr inbounds [4 x i8], [4 x i8]* @d, i64 0, i64 %i
-  %tmp5 = load i8, i8* %arrayidx4, align 1
-  %array0 = bitcast [4 x i8]* @d to i8*
-  %tmp6 = load i8, i8* %array0, align 1
+  %arrayidx4 = getelementptr inbounds [4 x i8], ptr @d, i64 0, i64 %i
+  %tmp5 = load i8, ptr %arrayidx4, align 1
+  %tmp6 = load i8, ptr @d, align 1
   %cmp = icmp eq i8 %tmp5, %tmp6
   ret i1 %cmp
 }
 
 define void @baz(i32 %x) {
 entry:
-  store i32 %x, i32* @a, align 4
-  store i32 %x, i32* @b, align 4
-  store i32 %x, i32* @c, align 4
+  store i32 %x, ptr @a, align 4
+  store i32 %x, ptr @b, align 4
+  store i32 %x, ptr @c, align 4
   ret void
 }
 
-define i32 @foo(i32* %x) nounwind readnone optsize ssp {
+define i32 @foo(ptr %x) nounwind readnone optsize ssp {
 entry:
-  %cmp = icmp eq i32* %x, @a
+  %cmp = icmp eq ptr %x, @a
   %conv = zext i1 %cmp to i32
   ret i32 %conv
 }
 
 define i32 @bar() {
 entry:
-  switch i64 ptrtoint (i32* @b to i64), label %sw.epilog [
+  switch i64 ptrtoint (ptr @b to i64), label %sw.epilog [
     i64 1, label %return
     i64 0, label %return
   ]
@@ -71,18 +70,18 @@ return:
 
 define i32 @zed() {
 entry:
-  %tmp1 = load i32, i32* @c, align 4
+  %tmp1 = load i32, ptr @c, align 4
   ret i32 %tmp1
 }
 
 define float @use_addrspace_cast_for_load() {
-  %p = addrspacecast float addrspace(3)* @f to float*
-  %v = load float, float* %p
+  %p = addrspacecast ptr addrspace(3) @f to ptr
+  %v = load float, ptr %p
   ret float %v
 }
 
 define void @use_addrspace_cast_for_store(float %x) {
-  %p = addrspacecast float addrspace(3)* @f to float*
-  store float %x, float* %p
+  %p = addrspacecast ptr addrspace(3) @f to ptr
+  store float %x, ptr %p
   ret void
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/x86_mmx_load.ll b/llvm/test/Transforms/GlobalOpt/x86_mmx_load.ll
index e63b74da73fdb..e352900e2a458 100644
--- a/llvm/test/Transforms/GlobalOpt/x86_mmx_load.ll
+++ b/llvm/test/Transforms/GlobalOpt/x86_mmx_load.ll
@@ -7,6 +7,6 @@ define i32 @load_mmx() {
 ; CHECK-LABEL: @load_mmx(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %temp = load x86_mmx, x86_mmx* bitcast (<1 x i64>* @m64 to x86_mmx*)
+  %temp = load x86_mmx, ptr @m64
   ret i32 0
 }

diff  --git a/llvm/test/Transforms/GlobalOpt/zeroinitializer-gep-load.ll b/llvm/test/Transforms/GlobalOpt/zeroinitializer-gep-load.ll
index 514e6fde620bb..b6bbb8057c6af 100644
--- a/llvm/test/Transforms/GlobalOpt/zeroinitializer-gep-load.ll
+++ b/llvm/test/Transforms/GlobalOpt/zeroinitializer-gep-load.ll
@@ -3,8 +3,8 @@
 @zero = internal global [10 x i32] zeroinitializer
 
 define i32 @test1(i64 %idx) nounwind {
-  %arrayidx = getelementptr inbounds [10 x i32], [10 x i32]* @zero, i64 0, i64 %idx
-  %l = load i32, i32* %arrayidx
+  %arrayidx = getelementptr inbounds [10 x i32], ptr @zero, i64 0, i64 %idx
+  %l = load i32, ptr %arrayidx
   ret i32 %l
 ; CHECK-LABEL: @test1(
 ; CHECK: ret i32 0


        


More information about the llvm-commits mailing list