[llvm] ee27890 - [MergeFunc] Convert tests to opaque pointers (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 4 08:07:39 PST 2023


Author: Nikita Popov
Date: 2023-01-04T17:07:15+01:00
New Revision: ee2789001b8558656a13502f0de2c81dcb419430

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

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

Added: 
    

Modified: 
    llvm/test/Transforms/MergeFunc/2011-02-08-RemoveEqual.ll
    llvm/test/Transforms/MergeFunc/address-spaces.ll
    llvm/test/Transforms/MergeFunc/alias.ll
    llvm/test/Transforms/MergeFunc/alloca.ll
    llvm/test/Transforms/MergeFunc/apply_function_attributes.ll
    llvm/test/Transforms/MergeFunc/byval-attr-congruent-type.ll
    llvm/test/Transforms/MergeFunc/byval-attr-type.ll
    llvm/test/Transforms/MergeFunc/call-and-invoke-with-ranges.ll
    llvm/test/Transforms/MergeFunc/comdat.ll
    llvm/test/Transforms/MergeFunc/crash.ll
    llvm/test/Transforms/MergeFunc/crash2.ll
    llvm/test/Transforms/MergeFunc/dso_local_equivalent_merged.ll
    llvm/test/Transforms/MergeFunc/dso_local_equivalent_unmerged.ll
    llvm/test/Transforms/MergeFunc/gep-base-type.ll
    llvm/test/Transforms/MergeFunc/inline-asm.ll
    llvm/test/Transforms/MergeFunc/inttoptr-address-space.ll
    llvm/test/Transforms/MergeFunc/inttoptr.ll
    llvm/test/Transforms/MergeFunc/linkonce_odr.ll
    llvm/test/Transforms/MergeFunc/merge-block-address-other-function.ll
    llvm/test/Transforms/MergeFunc/merge-block-address.ll
    llvm/test/Transforms/MergeFunc/merge-const-ptr-and-int.ll
    llvm/test/Transforms/MergeFunc/merge-different-vector-types.ll
    llvm/test/Transforms/MergeFunc/merge-ptr-and-int.ll
    llvm/test/Transforms/MergeFunc/merge-small-unnamed-addr.ll
    llvm/test/Transforms/MergeFunc/merge-unnamed-addr-bitcast.ll
    llvm/test/Transforms/MergeFunc/merge-unnamed-addr.ll
    llvm/test/Transforms/MergeFunc/merge-used.ll
    llvm/test/Transforms/MergeFunc/mergefunc-preserve-debug-info.ll
    llvm/test/Transforms/MergeFunc/mergefunc-struct-return.ll
    llvm/test/Transforms/MergeFunc/mismatching-attr-crash.ll
    llvm/test/Transforms/MergeFunc/no-merge-block-address-different-labels.ll
    llvm/test/Transforms/MergeFunc/no-merge-block-address-other-function.ll
    llvm/test/Transforms/MergeFunc/no-merge-ptr-different-sizes.ll
    llvm/test/Transforms/MergeFunc/no-merge-ptr-int-different-values.ll
    llvm/test/Transforms/MergeFunc/nonzero-address-spaces.ll
    llvm/test/Transforms/MergeFunc/ptr-int-transitivity-1.ll
    llvm/test/Transforms/MergeFunc/ptr-int-transitivity-2.ll
    llvm/test/Transforms/MergeFunc/ptr-int-transitivity-3.ll
    llvm/test/Transforms/MergeFunc/ranges-multiple.ll
    llvm/test/Transforms/MergeFunc/ranges.ll
    llvm/test/Transforms/MergeFunc/self-referential-global.ll
    llvm/test/Transforms/MergeFunc/undef-different-types.ll
    llvm/test/Transforms/MergeFunc/va_arg.ll
    llvm/test/Transforms/MergeFunc/vector-GEP-crash.ll
    llvm/test/Transforms/MergeFunc/vector.ll
    llvm/test/Transforms/MergeFunc/weak-small.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/MergeFunc/2011-02-08-RemoveEqual.ll b/llvm/test/Transforms/MergeFunc/2011-02-08-RemoveEqual.ll
index 3d29583482c57..526efe9cb98af 100644
--- a/llvm/test/Transforms/MergeFunc/2011-02-08-RemoveEqual.ll
+++ b/llvm/test/Transforms/MergeFunc/2011-02-08-RemoveEqual.ll
@@ -5,117 +5,107 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 target triple = "i386-pc-linux-gnu"
 
 %"struct.kc::impl_Ccode_option" = type { %"struct.kc::impl_abstract_phylum" }
-%"struct.kc::impl_CexpressionDQ" = type { %"struct.kc::impl_Ccode_option", %"struct.kc::impl_Ccode_option"*, %"struct.kc::impl_CexpressionDQ"* }
-%"struct.kc::impl_Ctext" = type { %"struct.kc::impl_Ccode_option", i32, %"struct.kc::impl_casestring__Str"*, %"struct.kc::impl_Ctext_elem"*, %"struct.kc::impl_Ctext"* }
-%"struct.kc::impl_Ctext_elem" = type { %"struct.kc::impl_abstract_phylum", i32, %"struct.kc::impl_casestring__Str"* }
-%"struct.kc::impl_ID" = type { %"struct.kc::impl_abstract_phylum", %"struct.kc::impl_Ccode_option"*, %"struct.kc::impl_casestring__Str"*, i32, %"struct.kc::impl_casestring__Str"* }
-%"struct.kc::impl_abstract_phylum" = type { i32 (...)** }
-%"struct.kc::impl_ac_abstract_declarator_AcAbsdeclDirdecl" = type { %"struct.kc::impl_Ccode_option", %"struct.kc::impl_Ccode_option"*, %"struct.kc::impl_Ccode_option"* }
-%"struct.kc::impl_casestring__Str" = type { %"struct.kc::impl_abstract_phylum", i8* }
-%"struct.kc::impl_elem_patternrepresentation" = type { %"struct.kc::impl_abstract_phylum", i32, %"struct.kc::impl_casestring__Str"*, %"struct.kc::impl_ID"* }
-%"struct.kc::impl_fileline" = type { %"struct.kc::impl_abstract_phylum", %"struct.kc::impl_casestring__Str"*, i32 }
+%"struct.kc::impl_CexpressionDQ" = type { %"struct.kc::impl_Ccode_option", ptr, ptr }
+%"struct.kc::impl_Ctext" = type { %"struct.kc::impl_Ccode_option", i32, ptr, ptr, ptr }
+%"struct.kc::impl_Ctext_elem" = type { %"struct.kc::impl_abstract_phylum", i32, ptr }
+%"struct.kc::impl_ID" = type { %"struct.kc::impl_abstract_phylum", ptr, ptr, i32, ptr }
+%"struct.kc::impl_abstract_phylum" = type { ptr }
+%"struct.kc::impl_ac_abstract_declarator_AcAbsdeclDirdecl" = type { %"struct.kc::impl_Ccode_option", ptr, ptr }
+%"struct.kc::impl_casestring__Str" = type { %"struct.kc::impl_abstract_phylum", ptr }
+%"struct.kc::impl_elem_patternrepresentation" = type { %"struct.kc::impl_abstract_phylum", i32, ptr, ptr }
+%"struct.kc::impl_fileline" = type { %"struct.kc::impl_abstract_phylum", ptr, i32 }
 %"struct.kc::impl_fileline_FileLine" = type { %"struct.kc::impl_fileline" }
-%"struct.kc::impl_outmostpatterns" = type { %"struct.kc::impl_Ccode_option", %"struct.kc::impl_elem_patternrepresentation"*, %"struct.kc::impl_outmostpatterns"* }
-%"struct.kc::impl_withcaseinfo_Withcaseinfo" = type { %"struct.kc::impl_Ccode_option", %"struct.kc::impl_outmostpatterns"*, %"struct.kc::impl_outmostpatterns"*, %"struct.kc::impl_Ctext"* }
+%"struct.kc::impl_outmostpatterns" = type { %"struct.kc::impl_Ccode_option", ptr, ptr }
+%"struct.kc::impl_withcaseinfo_Withcaseinfo" = type { %"struct.kc::impl_Ccode_option", ptr, ptr, ptr }
 
- at _ZTVN2kc13impl_filelineE = external constant [13 x i32 (...)*], align 32
+ at _ZTVN2kc13impl_filelineE = external constant [13 x ptr], align 32
 @.str = external constant [1 x i8], align 1
- at _ZTVN2kc22impl_fileline_FileLineE = external constant [13 x i32 (...)*], align 32
+ at _ZTVN2kc22impl_fileline_FileLineE = external constant [13 x ptr], align 32
 
-define void @_ZN2kc22impl_fileline_FileLineC2EPNS_20impl_casestring__StrEi(%"struct.kc::impl_fileline_FileLine"* %this, %"struct.kc::impl_casestring__Str"* %_file, i32 %_line) align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define void @_ZN2kc22impl_fileline_FileLineC2EPNS_20impl_casestring__StrEi(ptr %this, ptr %_file, i32 %_line) align 2 personality ptr @__gxx_personality_v0 {
 entry:
-  %this_addr = alloca %"struct.kc::impl_fileline_FileLine"*, align 4
-  %_file_addr = alloca %"struct.kc::impl_casestring__Str"*, align 4
+  %this_addr = alloca ptr, align 4
+  %_file_addr = alloca ptr, align 4
   %_line_addr = alloca i32, align 4
   %save_filt.150 = alloca i32
-  %save_eptr.149 = alloca i8*
-  %iftmp.99 = alloca %"struct.kc::impl_casestring__Str"*
-  %eh_exception = alloca i8*
+  %save_eptr.149 = alloca ptr
+  %iftmp.99 = alloca ptr
+  %eh_exception = alloca ptr
   %eh_selector = alloca i32
   %"alloca point" = bitcast i32 0 to i32
-  store %"struct.kc::impl_fileline_FileLine"* %this, %"struct.kc::impl_fileline_FileLine"** %this_addr
-  store %"struct.kc::impl_casestring__Str"* %_file, %"struct.kc::impl_casestring__Str"** %_file_addr
-  store i32 %_line, i32* %_line_addr
-  %0 = load %"struct.kc::impl_fileline_FileLine"*, %"struct.kc::impl_fileline_FileLine"** %this_addr, align 4
-  %1 = getelementptr inbounds %"struct.kc::impl_fileline_FileLine", %"struct.kc::impl_fileline_FileLine"* %0, i32 0, i32 0
+  store ptr %this, ptr %this_addr
+  store ptr %_file, ptr %_file_addr
+  store i32 %_line, ptr %_line_addr
+  %0 = load ptr, ptr %this_addr, align 4
   call void @_ZN2kc13impl_filelineC2Ev() nounwind
-  %2 = load %"struct.kc::impl_fileline_FileLine"*, %"struct.kc::impl_fileline_FileLine"** %this_addr, align 4
-  %3 = getelementptr inbounds %"struct.kc::impl_fileline_FileLine", %"struct.kc::impl_fileline_FileLine"* %2, i32 0, i32 0
-  %4 = getelementptr inbounds %"struct.kc::impl_fileline", %"struct.kc::impl_fileline"* %3, i32 0, i32 0
-  %5 = getelementptr inbounds %"struct.kc::impl_abstract_phylum", %"struct.kc::impl_abstract_phylum"* %4, i32 0, i32 0
-  store i32 (...)** getelementptr inbounds ([13 x i32 (...)*], [13 x i32 (...)*]* @_ZTVN2kc22impl_fileline_FileLineE, i32 0, i32 2), i32 (...)*** %5, align 4
-  %6 = load %"struct.kc::impl_casestring__Str"*, %"struct.kc::impl_casestring__Str"** %_file_addr, align 4
-  %7 = icmp eq %"struct.kc::impl_casestring__Str"* %6, null
-  br i1 %7, label %bb, label %bb1
+  %1 = load ptr, ptr %this_addr, align 4
+  store ptr getelementptr inbounds ([13 x ptr], ptr @_ZTVN2kc22impl_fileline_FileLineE, i32 0, i32 2), ptr %1, align 4
+  %2 = load ptr, ptr %_file_addr, align 4
+  %3 = icmp eq ptr %2, null
+  br i1 %3, label %bb, label %bb1
 
 bb:                                               ; preds = %entry
-  %8 = invoke %"struct.kc::impl_casestring__Str"* @_ZN2kc12mkcasestringEPKci()
+  %4 = invoke ptr @_ZN2kc12mkcasestringEPKci()
           to label %invcont unwind label %lpad
 
 invcont:                                          ; preds = %bb
-  store %"struct.kc::impl_casestring__Str"* %8, %"struct.kc::impl_casestring__Str"** %iftmp.99, align 4
+  store ptr %4, ptr %iftmp.99, align 4
   br label %bb2
 
 bb1:                                              ; preds = %entry
-  %9 = load %"struct.kc::impl_casestring__Str"*, %"struct.kc::impl_casestring__Str"** %_file_addr, align 4
-  store %"struct.kc::impl_casestring__Str"* %9, %"struct.kc::impl_casestring__Str"** %iftmp.99, align 4
+  %5 = load ptr, ptr %_file_addr, align 4
+  store ptr %5, ptr %iftmp.99, align 4
   br label %bb2
 
 bb2:                                              ; preds = %bb1, %invcont
-  %10 = load %"struct.kc::impl_fileline_FileLine"*, %"struct.kc::impl_fileline_FileLine"** %this_addr, align 4
-  %11 = getelementptr inbounds %"struct.kc::impl_fileline_FileLine", %"struct.kc::impl_fileline_FileLine"* %10, i32 0, i32 0
-  %12 = getelementptr inbounds %"struct.kc::impl_fileline", %"struct.kc::impl_fileline"* %11, i32 0, i32 1
-  %13 = load %"struct.kc::impl_casestring__Str"*, %"struct.kc::impl_casestring__Str"** %iftmp.99, align 4
-  store %"struct.kc::impl_casestring__Str"* %13, %"struct.kc::impl_casestring__Str"** %12, align 4
-  %14 = load %"struct.kc::impl_fileline_FileLine"*, %"struct.kc::impl_fileline_FileLine"** %this_addr, align 4
-  %15 = getelementptr inbounds %"struct.kc::impl_fileline_FileLine", %"struct.kc::impl_fileline_FileLine"* %14, i32 0, i32 0
-  %16 = getelementptr inbounds %"struct.kc::impl_fileline", %"struct.kc::impl_fileline"* %15, i32 0, i32 2
-  %17 = load i32, i32* %_line_addr, align 4
-  store i32 %17, i32* %16, align 4
+  %6 = load ptr, ptr %this_addr, align 4
+  %7 = getelementptr inbounds %"struct.kc::impl_fileline", ptr %6, i32 0, i32 1
+  %8 = load ptr, ptr %iftmp.99, align 4
+  store ptr %8, ptr %7, align 4
+  %9 = load ptr, ptr %this_addr, align 4
+  %10 = getelementptr inbounds %"struct.kc::impl_fileline", ptr %9, i32 0, i32 2
+  %11 = load i32, ptr %_line_addr, align 4
+  store i32 %11, ptr %10, align 4
   ret void
 
 lpad:                                             ; preds = %bb
-  %eh_ptr = landingpad { i8*, i32 }
+  %eh_ptr = landingpad { ptr, i32 }
               cleanup
-  %exn = extractvalue { i8*, i32 } %eh_ptr, 0
-  store i8* %exn, i8** %eh_exception
-  %eh_ptr4 = load i8*, i8** %eh_exception
-  %eh_select5 = extractvalue { i8*, i32 } %eh_ptr, 1
-  store i32 %eh_select5, i32* %eh_selector
-  %eh_select = load i32, i32* %eh_selector
-  store i32 %eh_select, i32* %save_filt.150, align 4
-  %eh_value = load i8*, i8** %eh_exception
-  store i8* %eh_value, i8** %save_eptr.149, align 4
-  %18 = load %"struct.kc::impl_fileline_FileLine"*, %"struct.kc::impl_fileline_FileLine"** %this_addr, align 4
-  %19 = bitcast %"struct.kc::impl_fileline_FileLine"* %18 to %"struct.kc::impl_fileline"*
-  call void @_ZN2kc13impl_filelineD2Ev(%"struct.kc::impl_fileline"* %19) nounwind
-  %20 = load i8*, i8** %save_eptr.149, align 4
-  store i8* %20, i8** %eh_exception, align 4
-  %21 = load i32, i32* %save_filt.150, align 4
-  store i32 %21, i32* %eh_selector, align 4
-  %eh_ptr6 = load i8*, i8** %eh_exception
+  %exn = extractvalue { ptr, i32 } %eh_ptr, 0
+  store ptr %exn, ptr %eh_exception
+  %eh_ptr4 = load ptr, ptr %eh_exception
+  %eh_select5 = extractvalue { ptr, i32 } %eh_ptr, 1
+  store i32 %eh_select5, ptr %eh_selector
+  %eh_select = load i32, ptr %eh_selector
+  store i32 %eh_select, ptr %save_filt.150, align 4
+  %eh_value = load ptr, ptr %eh_exception
+  store ptr %eh_value, ptr %save_eptr.149, align 4
+  %12 = load ptr, ptr %this_addr, align 4
+  call void @_ZN2kc13impl_filelineD2Ev(ptr %12) nounwind
+  %13 = load ptr, ptr %save_eptr.149, align 4
+  store ptr %13, ptr %eh_exception, align 4
+  %14 = load i32, ptr %save_filt.150, align 4
+  store i32 %14, ptr %eh_selector, align 4
+  %eh_ptr6 = load ptr, ptr %eh_exception
   call void @_Unwind_Resume_or_Rethrow()
   unreachable
 }
 
 declare void @_ZN2kc13impl_filelineC2Ev() nounwind align 2
 
-define void @_ZN2kc13impl_filelineD1Ev(%"struct.kc::impl_fileline"* %this) nounwind align 2 {
+define void @_ZN2kc13impl_filelineD1Ev(ptr %this) nounwind align 2 {
 entry:
-  %this_addr = alloca %"struct.kc::impl_fileline"*, align 4
+  %this_addr = alloca ptr, align 4
   %"alloca point" = bitcast i32 0 to i32
-  store %"struct.kc::impl_fileline"* %this, %"struct.kc::impl_fileline"** %this_addr
-  %0 = load %"struct.kc::impl_fileline"*, %"struct.kc::impl_fileline"** %this_addr, align 4
-  %1 = getelementptr inbounds %"struct.kc::impl_fileline", %"struct.kc::impl_fileline"* %0, i32 0, i32 0
-  %2 = getelementptr inbounds %"struct.kc::impl_abstract_phylum", %"struct.kc::impl_abstract_phylum"* %1, i32 0, i32 0
-  store i32 (...)** getelementptr inbounds ([13 x i32 (...)*], [13 x i32 (...)*]* @_ZTVN2kc13impl_filelineE, i32 0, i32 2), i32 (...)*** %2, align 4
-  %3 = trunc i32 0 to i8
-  %toBool = icmp ne i8 %3, 0
+  store ptr %this, ptr %this_addr
+  %0 = load ptr, ptr %this_addr, align 4
+  store ptr getelementptr inbounds ([13 x ptr], ptr @_ZTVN2kc13impl_filelineE, i32 0, i32 2), ptr %0, align 4
+  %1 = trunc i32 0 to i8
+  %toBool = icmp ne i8 %1, 0
   br i1 %toBool, label %bb1, label %return
 
 bb1:                                              ; preds = %entry
-  %4 = load %"struct.kc::impl_fileline"*, %"struct.kc::impl_fileline"** %this_addr, align 4
-  %5 = bitcast %"struct.kc::impl_fileline"* %4 to i8*
+  %2 = load ptr, ptr %this_addr, align 4
   call void @_ZdlPv() nounwind
   br label %return
 
@@ -125,22 +115,19 @@ return:                                           ; preds = %bb1, %entry
 
 declare void @_ZdlPv() nounwind
 
-define void @_ZN2kc13impl_filelineD2Ev(%"struct.kc::impl_fileline"* %this) nounwind align 2 {
+define void @_ZN2kc13impl_filelineD2Ev(ptr %this) nounwind align 2 {
 entry:
-  %this_addr = alloca %"struct.kc::impl_fileline"*, align 4
+  %this_addr = alloca ptr, align 4
   %"alloca point" = bitcast i32 0 to i32
-  store %"struct.kc::impl_fileline"* %this, %"struct.kc::impl_fileline"** %this_addr
-  %0 = load %"struct.kc::impl_fileline"*, %"struct.kc::impl_fileline"** %this_addr, align 4
-  %1 = getelementptr inbounds %"struct.kc::impl_fileline", %"struct.kc::impl_fileline"* %0, i32 0, i32 0
-  %2 = getelementptr inbounds %"struct.kc::impl_abstract_phylum", %"struct.kc::impl_abstract_phylum"* %1, i32 0, i32 0
-  store i32 (...)** getelementptr inbounds ([13 x i32 (...)*], [13 x i32 (...)*]* @_ZTVN2kc13impl_filelineE, i32 0, i32 2), i32 (...)*** %2, align 4
-  %3 = trunc i32 0 to i8
-  %toBool = icmp ne i8 %3, 0
+  store ptr %this, ptr %this_addr
+  %0 = load ptr, ptr %this_addr, align 4
+  store ptr getelementptr inbounds ([13 x ptr], ptr @_ZTVN2kc13impl_filelineE, i32 0, i32 2), ptr %0, align 4
+  %1 = trunc i32 0 to i8
+  %toBool = icmp ne i8 %1, 0
   br i1 %toBool, label %bb1, label %return
 
 bb1:                                              ; preds = %entry
-  %4 = load %"struct.kc::impl_fileline"*, %"struct.kc::impl_fileline"** %this_addr, align 4
-  %5 = bitcast %"struct.kc::impl_fileline"* %4 to i8*
+  %2 = load ptr, ptr %this_addr, align 4
   call void @_ZdlPv() nounwind
   br label %return
 
@@ -148,78 +135,71 @@ return:                                           ; preds = %bb1, %entry
   ret void
 }
 
-define void @_ZN2kc22impl_fileline_FileLineC1EPNS_20impl_casestring__StrEi(%"struct.kc::impl_fileline_FileLine"* %this, %"struct.kc::impl_casestring__Str"* %_file, i32 %_line) align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define void @_ZN2kc22impl_fileline_FileLineC1EPNS_20impl_casestring__StrEi(ptr %this, ptr %_file, i32 %_line) align 2 personality ptr @__gxx_personality_v0 {
 entry:
-  %this_addr = alloca %"struct.kc::impl_fileline_FileLine"*, align 4
-  %_file_addr = alloca %"struct.kc::impl_casestring__Str"*, align 4
+  %this_addr = alloca ptr, align 4
+  %_file_addr = alloca ptr, align 4
   %_line_addr = alloca i32, align 4
   %save_filt.148 = alloca i32
-  %save_eptr.147 = alloca i8*
-  %iftmp.99 = alloca %"struct.kc::impl_casestring__Str"*
-  %eh_exception = alloca i8*
+  %save_eptr.147 = alloca ptr
+  %iftmp.99 = alloca ptr
+  %eh_exception = alloca ptr
   %eh_selector = alloca i32
   %"alloca point" = bitcast i32 0 to i32
-  store %"struct.kc::impl_fileline_FileLine"* %this, %"struct.kc::impl_fileline_FileLine"** %this_addr
-  store %"struct.kc::impl_casestring__Str"* %_file, %"struct.kc::impl_casestring__Str"** %_file_addr
-  store i32 %_line, i32* %_line_addr
-  %0 = load %"struct.kc::impl_fileline_FileLine"*, %"struct.kc::impl_fileline_FileLine"** %this_addr, align 4
-  %1 = getelementptr inbounds %"struct.kc::impl_fileline_FileLine", %"struct.kc::impl_fileline_FileLine"* %0, i32 0, i32 0
+  store ptr %this, ptr %this_addr
+  store ptr %_file, ptr %_file_addr
+  store i32 %_line, ptr %_line_addr
+  %0 = load ptr, ptr %this_addr, align 4
   call void @_ZN2kc13impl_filelineC2Ev() nounwind
-  %2 = load %"struct.kc::impl_fileline_FileLine"*, %"struct.kc::impl_fileline_FileLine"** %this_addr, align 4
-  %3 = getelementptr inbounds %"struct.kc::impl_fileline_FileLine", %"struct.kc::impl_fileline_FileLine"* %2, i32 0, i32 0
-  %4 = getelementptr inbounds %"struct.kc::impl_fileline", %"struct.kc::impl_fileline"* %3, i32 0, i32 0
-  %5 = getelementptr inbounds %"struct.kc::impl_abstract_phylum", %"struct.kc::impl_abstract_phylum"* %4, i32 0, i32 0
-  store i32 (...)** getelementptr inbounds ([13 x i32 (...)*], [13 x i32 (...)*]* @_ZTVN2kc22impl_fileline_FileLineE, i32 0, i32 2), i32 (...)*** %5, align 4
-  %6 = load %"struct.kc::impl_casestring__Str"*, %"struct.kc::impl_casestring__Str"** %_file_addr, align 4
-  %7 = icmp eq %"struct.kc::impl_casestring__Str"* %6, null
-  br i1 %7, label %bb, label %bb1
+  %1 = load ptr, ptr %this_addr, align 4
+  store ptr getelementptr inbounds ([13 x ptr], ptr @_ZTVN2kc22impl_fileline_FileLineE, i32 0, i32 2), ptr %1, align 4
+  %2 = load ptr, ptr %_file_addr, align 4
+  %3 = icmp eq ptr %2, null
+  br i1 %3, label %bb, label %bb1
 
 bb:                                               ; preds = %entry
-  %8 = invoke %"struct.kc::impl_casestring__Str"* @_ZN2kc12mkcasestringEPKci()
+  %4 = invoke ptr @_ZN2kc12mkcasestringEPKci()
           to label %invcont unwind label %lpad
 
 invcont:                                          ; preds = %bb
-  store %"struct.kc::impl_casestring__Str"* %8, %"struct.kc::impl_casestring__Str"** %iftmp.99, align 4
+  store ptr %4, ptr %iftmp.99, align 4
   br label %bb2
 
 bb1:                                              ; preds = %entry
-  %9 = load %"struct.kc::impl_casestring__Str"*, %"struct.kc::impl_casestring__Str"** %_file_addr, align 4
-  store %"struct.kc::impl_casestring__Str"* %9, %"struct.kc::impl_casestring__Str"** %iftmp.99, align 4
+  %5 = load ptr, ptr %_file_addr, align 4
+  store ptr %5, ptr %iftmp.99, align 4
   br label %bb2
 
 bb2:                                              ; preds = %bb1, %invcont
-  %10 = load %"struct.kc::impl_fileline_FileLine"*, %"struct.kc::impl_fileline_FileLine"** %this_addr, align 4
-  %11 = getelementptr inbounds %"struct.kc::impl_fileline_FileLine", %"struct.kc::impl_fileline_FileLine"* %10, i32 0, i32 0
-  %12 = getelementptr inbounds %"struct.kc::impl_fileline", %"struct.kc::impl_fileline"* %11, i32 0, i32 1
-  %13 = load %"struct.kc::impl_casestring__Str"*, %"struct.kc::impl_casestring__Str"** %iftmp.99, align 4
-  store %"struct.kc::impl_casestring__Str"* %13, %"struct.kc::impl_casestring__Str"** %12, align 4
-  %14 = load %"struct.kc::impl_fileline_FileLine"*, %"struct.kc::impl_fileline_FileLine"** %this_addr, align 4
-  %15 = getelementptr inbounds %"struct.kc::impl_fileline_FileLine", %"struct.kc::impl_fileline_FileLine"* %14, i32 0, i32 0
-  %16 = getelementptr inbounds %"struct.kc::impl_fileline", %"struct.kc::impl_fileline"* %15, i32 0, i32 2
-  %17 = load i32, i32* %_line_addr, align 4
-  store i32 %17, i32* %16, align 4
+  %6 = load ptr, ptr %this_addr, align 4
+  %7 = getelementptr inbounds %"struct.kc::impl_fileline", ptr %6, i32 0, i32 1
+  %8 = load ptr, ptr %iftmp.99, align 4
+  store ptr %8, ptr %7, align 4
+  %9 = load ptr, ptr %this_addr, align 4
+  %10 = getelementptr inbounds %"struct.kc::impl_fileline", ptr %9, i32 0, i32 2
+  %11 = load i32, ptr %_line_addr, align 4
+  store i32 %11, ptr %10, align 4
   ret void
 
 lpad:                                             ; preds = %bb
-  %eh_ptr = landingpad { i8*, i32 }
+  %eh_ptr = landingpad { ptr, i32 }
               cleanup
-  %exn = extractvalue { i8*, i32 } %eh_ptr, 0
-  store i8* %exn, i8** %eh_exception
-  %eh_ptr4 = load i8*, i8** %eh_exception
-  %eh_select5 = extractvalue { i8*, i32 } %eh_ptr, 1
-  store i32 %eh_select5, i32* %eh_selector
-  %eh_select = load i32, i32* %eh_selector
-  store i32 %eh_select, i32* %save_filt.148, align 4
-  %eh_value = load i8*, i8** %eh_exception
-  store i8* %eh_value, i8** %save_eptr.147, align 4
-  %18 = load %"struct.kc::impl_fileline_FileLine"*, %"struct.kc::impl_fileline_FileLine"** %this_addr, align 4
-  %19 = bitcast %"struct.kc::impl_fileline_FileLine"* %18 to %"struct.kc::impl_fileline"*
-  call void @_ZN2kc13impl_filelineD2Ev(%"struct.kc::impl_fileline"* %19) nounwind
-  %20 = load i8*, i8** %save_eptr.147, align 4
-  store i8* %20, i8** %eh_exception, align 4
-  %21 = load i32, i32* %save_filt.148, align 4
-  store i32 %21, i32* %eh_selector, align 4
-  %eh_ptr6 = load i8*, i8** %eh_exception
+  %exn = extractvalue { ptr, i32 } %eh_ptr, 0
+  store ptr %exn, ptr %eh_exception
+  %eh_ptr4 = load ptr, ptr %eh_exception
+  %eh_select5 = extractvalue { ptr, i32 } %eh_ptr, 1
+  store i32 %eh_select5, ptr %eh_selector
+  %eh_select = load i32, ptr %eh_selector
+  store i32 %eh_select, ptr %save_filt.148, align 4
+  %eh_value = load ptr, ptr %eh_exception
+  store ptr %eh_value, ptr %save_eptr.147, align 4
+  %12 = load ptr, ptr %this_addr, align 4
+  call void @_ZN2kc13impl_filelineD2Ev(ptr %12) nounwind
+  %13 = load ptr, ptr %save_eptr.147, align 4
+  store ptr %13, ptr %eh_exception, align 4
+  %14 = load i32, ptr %save_filt.148, align 4
+  store i32 %14, ptr %eh_selector, align 4
+  %eh_ptr6 = load ptr, ptr %eh_exception
   call void @_Unwind_Resume_or_Rethrow()
   unreachable
 }
@@ -228,49 +208,49 @@ declare i32 @__gxx_personality_v0(...)
 
 declare void @_Unwind_Resume_or_Rethrow()
 
-define void @_ZN2kc21printer_functor_classC2Ev(%"struct.kc::impl_abstract_phylum"* %this) nounwind align 2 {
+define void @_ZN2kc21printer_functor_classC2Ev(ptr %this) nounwind align 2 {
 entry:
   unreachable
 }
 
-define %"struct.kc::impl_Ccode_option"* @_ZN2kc11phylum_castIPNS_17impl_withcaseinfoES1_EET_PT0_(%"struct.kc::impl_Ccode_option"* %t) nounwind {
+define ptr @_ZN2kc11phylum_castIPNS_17impl_withcaseinfoES1_EET_PT0_(ptr %t) nounwind {
 entry:
-  ret %"struct.kc::impl_Ccode_option"* null
+  ret ptr null
 }
 
-define %"struct.kc::impl_abstract_phylum"* @_ZNK2kc43impl_ac_direct_declarator_AcDirectDeclProto9subphylumEi(%"struct.kc::impl_ac_abstract_declarator_AcAbsdeclDirdecl"* %this, i32 %no) nounwind align 2 {
+define ptr @_ZNK2kc43impl_ac_direct_declarator_AcDirectDeclProto9subphylumEi(ptr %this, i32 %no) nounwind align 2 {
 entry:
-  ret %"struct.kc::impl_abstract_phylum"* undef
+  ret ptr undef
 }
 
-define void @_ZN2kc30impl_withcaseinfo_WithcaseinfoD0Ev(%"struct.kc::impl_withcaseinfo_Withcaseinfo"* %this) nounwind align 2 {
+define void @_ZN2kc30impl_withcaseinfo_WithcaseinfoD0Ev(ptr %this) nounwind align 2 {
 entry:
   unreachable
 }
 
-define void @_ZN2kc30impl_withcaseinfo_WithcaseinfoC1EPNS_26impl_patternrepresentationES2_PNS_10impl_CtextE(%"struct.kc::impl_withcaseinfo_Withcaseinfo"* %this, %"struct.kc::impl_outmostpatterns"* %_patternrepresentation_1, %"struct.kc::impl_outmostpatterns"* %_patternrepresentation_2, %"struct.kc::impl_Ctext"* %_Ctext_1) nounwind align 2 {
+define void @_ZN2kc30impl_withcaseinfo_WithcaseinfoC1EPNS_26impl_patternrepresentationES2_PNS_10impl_CtextE(ptr %this, ptr %_patternrepresentation_1, ptr %_patternrepresentation_2, ptr %_Ctext_1) nounwind align 2 {
 entry:
   unreachable
 }
 
-define void @_ZN2kc21impl_rewriteviewsinfoC2EPNS_20impl_rewriteviewinfoEPS0_(%"struct.kc::impl_CexpressionDQ"* %this, %"struct.kc::impl_Ccode_option"* %p1, %"struct.kc::impl_CexpressionDQ"* %p2) nounwind align 2 {
+define void @_ZN2kc21impl_rewriteviewsinfoC2EPNS_20impl_rewriteviewinfoEPS0_(ptr %this, ptr %p1, ptr %p2) nounwind align 2 {
 entry:
   unreachable
 }
 
-define %"struct.kc::impl_Ctext_elem"* @_ZN2kc11phylum_castIPNS_9impl_termENS_20impl_abstract_phylumEEET_PT0_(%"struct.kc::impl_abstract_phylum"* %t) nounwind {
+define ptr @_ZN2kc11phylum_castIPNS_9impl_termENS_20impl_abstract_phylumEEET_PT0_(ptr %t) nounwind {
 entry:
   unreachable
 }
 
-define void @_ZN2kc27impl_ac_parameter_type_listD2Ev(%"struct.kc::impl_Ccode_option"* %this) nounwind align 2 {
+define void @_ZN2kc27impl_ac_parameter_type_listD2Ev(ptr %this) nounwind align 2 {
 entry:
   ret void
 }
 
-define void @_ZN2kc21impl_ac_operator_nameD2Ev(%"struct.kc::impl_Ctext_elem"* %this) nounwind align 2 {
+define void @_ZN2kc21impl_ac_operator_nameD2Ev(ptr %this) nounwind align 2 {
 entry:
   ret void
 }
 
-declare %"struct.kc::impl_casestring__Str"* @_ZN2kc12mkcasestringEPKci()
+declare ptr @_ZN2kc12mkcasestringEPKci()

diff  --git a/llvm/test/Transforms/MergeFunc/address-spaces.ll b/llvm/test/Transforms/MergeFunc/address-spaces.ll
index fa2dfd67bd3c3..49cae20f82289 100644
--- a/llvm/test/Transforms/MergeFunc/address-spaces.ll
+++ b/llvm/test/Transforms/MergeFunc/address-spaces.ll
@@ -6,29 +6,29 @@ declare void @foo(i32) nounwind
 
 ; None of these functions should be merged
 
-define i32 @store_as0(i32* %x) {
+define i32 @store_as0(ptr %x) {
 ; CHECK-LABEL: @store_as0(
 ; CHECK: call void @foo(
-  %gep = getelementptr i32, i32* %x, i32 4
-  %y = load i32, i32* %gep
+  %gep = getelementptr i32, ptr %x, i32 4
+  %y = load i32, ptr %gep
   call void @foo(i32 %y) nounwind
   ret i32 %y
 }
 
-define i32 @store_as1(i32 addrspace(1)* %x) {
+define i32 @store_as1(ptr addrspace(1) %x) {
 ; CHECK-LABEL: @store_as1(
 ; CHECK: call void @foo(
-  %gep = getelementptr i32, i32 addrspace(1)* %x, i32 4
-  %y = load i32, i32 addrspace(1)* %gep
+  %gep = getelementptr i32, ptr addrspace(1) %x, i32 4
+  %y = load i32, ptr addrspace(1) %gep
   call void @foo(i32 %y) nounwind
   ret i32 %y
 }
 
-define i32 @store_as2(i32 addrspace(2)* %x) {
+define i32 @store_as2(ptr addrspace(2) %x) {
 ; CHECK-LABEL: @store_as2(
 ; CHECK: call void @foo(
-  %gep = getelementptr i32, i32 addrspace(2)* %x, i32 4
-  %y = load i32, i32 addrspace(2)* %gep
+  %gep = getelementptr i32, ptr addrspace(2) %x, i32 4
+  %y = load i32, ptr addrspace(2) %gep
   call void @foo(i32 %y) nounwind
   ret i32 %y
 }

diff  --git a/llvm/test/Transforms/MergeFunc/alias.ll b/llvm/test/Transforms/MergeFunc/alias.ll
index e58ab3463dcd5..e4fe1b8a39165 100644
--- a/llvm/test/Transforms/MergeFunc/alias.ll
+++ b/llvm/test/Transforms/MergeFunc/alias.ll
@@ -3,25 +3,25 @@
 ; Aliases should always be created for the weak functions, and
 ; for external functions if there is no local function
 
-; CHECK: @external_external_2 = unnamed_addr alias void (float*), bitcast (void (i32*)* @external_external_1 to void (float*)*)
-; CHECK: @weak_weak_2 = weak unnamed_addr alias void (float*), bitcast (void (i32*)* @0 to void (float*)*)
-; CHECK: @weak_weak_1 = weak unnamed_addr alias void (i32*), void (i32*)* @0
-; CHECK: @weak_external_1 = weak unnamed_addr alias void (i32*), bitcast (void (float*)* @weak_external_2 to void (i32*)*)
-; CHECK: @external_weak_2 = weak unnamed_addr alias void (float*), bitcast (void (i32*)* @external_weak_1 to void (float*)*)
-; CHECK: @weak_internal_1 = weak unnamed_addr alias void (i32*), bitcast (void (float*)* @weak_internal_2 to void (i32*)*)
-; CHECK: @internal_weak_2 = weak unnamed_addr alias void (float*), bitcast (void (i32*)* @internal_weak_1 to void (float*)*)
+; CHECK: @external_external_2 = unnamed_addr alias void (ptr), ptr @external_external_1
+; CHECK: @weak_weak_2 = weak unnamed_addr alias void (ptr), ptr @0
+; CHECK: @weak_weak_1 = weak unnamed_addr alias void (ptr), ptr @0
+; CHECK: @weak_external_1 = weak unnamed_addr alias void (ptr), ptr @weak_external_2
+; CHECK: @external_weak_2 = weak unnamed_addr alias void (ptr), ptr @external_weak_1
+; CHECK: @weak_internal_1 = weak unnamed_addr alias void (ptr), ptr @weak_internal_2
+; CHECK: @internal_weak_2 = weak unnamed_addr alias void (ptr), ptr @internal_weak_1
 
 ; A strong backing function had to be created for the weak-weak pair
 
-; CHECK: define private void @0(i32* %a) unnamed_addr
+; CHECK: define private void @0(ptr %a) unnamed_addr
 ; CHECK-NEXT: call void @dummy4()
 
 ; These internal functions are dropped in favor of the external ones
 
-; CHECK-NOT: define internal void @external_internal_2(float *%a) unnamed_addr
-; CHECK-NOT: define internal void @internal_external_1(i32 *%a) unnamed_addr
-; CHECK-NOT: define internal void @internal_external_1(i32 *%a) unnamed_addr
-; CHECK-NOT: define internal void @internal_external_2(float *%a) unnamed_addr
+; CHECK-NOT: define internal void @external_internal_2(ptr %a) unnamed_addr
+; CHECK-NOT: define internal void @internal_external_1(ptr %a) unnamed_addr
+; CHECK-NOT: define internal void @internal_external_1(ptr %a) unnamed_addr
+; CHECK-NOT: define internal void @internal_external_2(ptr %a) unnamed_addr
 
 ; Only used to mark which functions should be merged.
 declare void @dummy1()
@@ -34,83 +34,83 @@ declare void @dummy7()
 declare void @dummy8()
 declare void @dummy9()
 
-define void @external_external_1(i32 *%a) unnamed_addr {
+define void @external_external_1(ptr %a) unnamed_addr {
   call void @dummy1()
   ret void
 }
-define void @external_external_2(float *%a) unnamed_addr {
+define void @external_external_2(ptr %a) unnamed_addr {
   call void @dummy1()
   ret void
 }
 
-define void @external_internal_1(i32 *%a) unnamed_addr {
+define void @external_internal_1(ptr %a) unnamed_addr {
   call void @dummy2()
   ret void
 }
-define internal void @external_internal_2(float *%a) unnamed_addr {
+define internal void @external_internal_2(ptr %a) unnamed_addr {
   call void @dummy2()
   ret void
 }
 
-define internal void @internal_external_1(i32 *%a) unnamed_addr {
+define internal void @internal_external_1(ptr %a) unnamed_addr {
   call void @dummy3()
   ret void
 }
-define void @internal_external_2(float *%a) unnamed_addr {
+define void @internal_external_2(ptr %a) unnamed_addr {
   call void @dummy3()
   ret void
 }
 
-define weak void @weak_weak_1(i32 *%a) unnamed_addr {
+define weak void @weak_weak_1(ptr %a) unnamed_addr {
   call void @dummy4()
   ret void
 }
-define weak void @weak_weak_2(float *%a) unnamed_addr {
+define weak void @weak_weak_2(ptr %a) unnamed_addr {
   call void @dummy4()
   ret void
 }
 
-define weak void @weak_external_1(i32 *%a) unnamed_addr {
+define weak void @weak_external_1(ptr %a) unnamed_addr {
   call void @dummy5()
   ret void
 }
-define external void @weak_external_2(float *%a) unnamed_addr {
+define external void @weak_external_2(ptr %a) unnamed_addr {
   call void @dummy5()
   ret void
 }
 
-define external void @external_weak_1(i32 *%a) unnamed_addr {
+define external void @external_weak_1(ptr %a) unnamed_addr {
   call void @dummy6()
   ret void
 }
-define weak void @external_weak_2(float *%a) unnamed_addr {
+define weak void @external_weak_2(ptr %a) unnamed_addr {
   call void @dummy6()
   ret void
 }
 
-define weak void @weak_internal_1(i32 *%a) unnamed_addr {
+define weak void @weak_internal_1(ptr %a) unnamed_addr {
   call void @dummy7()
   ret void
 }
-define internal void @weak_internal_2(float *%a) unnamed_addr {
+define internal void @weak_internal_2(ptr %a) unnamed_addr {
   call void @dummy7()
   ret void
 }
 
-define internal void @internal_weak_1(i32 *%a) unnamed_addr {
+define internal void @internal_weak_1(ptr %a) unnamed_addr {
   call void @dummy8()
   ret void
 }
-define weak void @internal_weak_2(float *%a) unnamed_addr {
+define weak void @internal_weak_2(ptr %a) unnamed_addr {
   call void @dummy8()
   ret void
 }
 
-define internal void @internal_internal_1(i32 *%a) unnamed_addr {
+define internal void @internal_internal_1(ptr %a) unnamed_addr {
   call void @dummy9()
   ret void
 }
-define internal void @internal_internal_2(float *%a) unnamed_addr {
+define internal void @internal_internal_2(ptr %a) unnamed_addr {
   call void @dummy9()
   ret void
 }

diff  --git a/llvm/test/Transforms/MergeFunc/alloca.ll b/llvm/test/Transforms/MergeFunc/alloca.ll
index 6a36bb78fb1d7..26622434a0d61 100644
--- a/llvm/test/Transforms/MergeFunc/alloca.ll
+++ b/llvm/test/Transforms/MergeFunc/alloca.ll
@@ -12,25 +12,23 @@ target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32"
 
 ; CHECK-LABEL: define void @size1
 ; CHECK-NOT: call void @
-define void @size1(i8 *%f) {
+define void @size1(ptr %f) {
   %v = alloca %kv1, align 8
-  %f_2 = bitcast i8* %f to void (%kv1 *)*
-  call void %f_2(%kv1 * %v)
-  call void %f_2(%kv1 * %v)
-  call void %f_2(%kv1 * %v)
-  call void %f_2(%kv1 * %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
   ret void
 }
 
 ; CHECK-LABEL: define void @size2
 ; CHECK-NOT: call void @
-define void @size2(i8 *%f) {
+define void @size2(ptr %f) {
   %v = alloca %kv2, align 8
-  %f_2 = bitcast i8* %f to void (%kv2 *)*
-  call void %f_2(%kv2 * %v)
-  call void %f_2(%kv2 * %v)
-  call void %f_2(%kv2 * %v)
-  call void %f_2(%kv2 * %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
   ret void
 }
 
@@ -38,24 +36,22 @@ define void @size2(i8 *%f) {
 
 ; CHECK-LABEL: define void @align1
 ; CHECK-NOT: call void @
-define void @align1(i8 *%f) {
+define void @align1(ptr %f) {
   %v = alloca %kv3, align 8
-  %f_2 = bitcast i8* %f to void (%kv3 *)*
-  call void %f_2(%kv3 * %v)
-  call void %f_2(%kv3 * %v)
-  call void %f_2(%kv3 * %v)
-  call void %f_2(%kv3 * %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
   ret void
 }
 
 ; CHECK-LABEL: define void @align2
 ; CHECK-NOT: call void @
-define void @align2(i8 *%f) {
+define void @align2(ptr %f) {
   %v = alloca %kv3, align 16
-  %f_2 = bitcast i8* %f to void (%kv3 *)*
-  call void %f_2(%kv3 * %v)
-  call void %f_2(%kv3 * %v)
-  call void %f_2(%kv3 * %v)
-  call void %f_2(%kv3 * %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
+  call void %f(ptr %v)
   ret void
 }

diff  --git a/llvm/test/Transforms/MergeFunc/apply_function_attributes.ll b/llvm/test/Transforms/MergeFunc/apply_function_attributes.ll
index 7578899273090..a0fc34636719e 100644
--- a/llvm/test/Transforms/MergeFunc/apply_function_attributes.ll
+++ b/llvm/test/Transforms/MergeFunc/apply_function_attributes.ll
@@ -6,27 +6,27 @@
 %Di = type <{ i32 }>
 %Si = type <{ i32 }>
 
-define void @B(%Opaque_type* sret(%Opaque_type) %a, %S2i* %b, i32* %xp, i32* %yp) {
-  %x = load i32, i32* %xp
-  %y = load i32, i32* %yp
+define void @B(ptr sret(%Opaque_type) %a, ptr %b, ptr %xp, ptr %yp) {
+  %x = load i32, ptr %xp
+  %y = load i32, ptr %yp
   %sum = add i32 %x, %y
   %sum2 = add i32 %sum, %y
   %sum3 = add i32 %sum2, %y
   ret void
 }
 
-define void @C(%Opaque_type* sret(%Opaque_type) %a, %S2i* %b, i32* %xp, i32* %yp) {
-  %x = load i32, i32* %xp
-  %y = load i32, i32* %yp
+define void @C(ptr sret(%Opaque_type) %a, ptr %b, ptr %xp, ptr %yp) {
+  %x = load i32, ptr %xp
+  %y = load i32, ptr %yp
   %sum = add i32 %x, %y
   %sum2 = add i32 %sum, %y
   %sum3 = add i32 %sum2, %y
   ret void
 }
 
-define void @A(%Opaque_type* sret(%Opaque_type) %a, %D2i* %b, i32* %xp, i32* %yp) {
-  %x = load i32, i32* %xp
-  %y = load i32, i32* %yp
+define void @A(ptr sret(%Opaque_type) %a, ptr %b, ptr %xp, ptr %yp) {
+  %x = load i32, ptr %xp
+  %y = load i32, ptr %yp
   %sum = add i32 %x, %y
   %sum2 = add i32 %sum, %y
   %sum3 = add i32 %sum2, %y
@@ -34,14 +34,13 @@ define void @A(%Opaque_type* sret(%Opaque_type) %a, %D2i* %b, i32* %xp, i32* %yp
 }
 
 ; Make sure we transfer the parameter attributes to the call site.
-; CHECK-LABEL: define void @C(%Opaque_type* sret
-; CHECK:  tail call void bitcast (void (%Opaque_type*, %D2i*, i32*, i32*)* @A to void (%Opaque_type*, %S2i*, i32*, i32*)*)(%Opaque_type* sret(%Opaque_type) %0, %S2i* %1, i32* %2, i32* %3)
+; CHECK-LABEL: define void @C(ptr sret
+; CHECK:  tail call void @A(ptr sret(%Opaque_type) %0, ptr %1, ptr %2, ptr %3)
 ; CHECK:  ret void
 
 
 ; Make sure we transfer the parameter attributes to the call site.
-; CHECK-LABEL: define void @B(%Opaque_type* sret
-; CHECK:  %5 = bitcast
-; CHECK:  tail call void @A(%Opaque_type* sret(%Opaque_type) %0, %D2i* %5, i32* %2, i32* %3)
+; CHECK-LABEL: define void @B(ptr sret
+; CHECK:  tail call void @A(ptr sret(%Opaque_type) %0, ptr %1, ptr %2, ptr %3)
 ; CHECK:  ret void
 

diff  --git a/llvm/test/Transforms/MergeFunc/byval-attr-congruent-type.ll b/llvm/test/Transforms/MergeFunc/byval-attr-congruent-type.ll
index b060d1792459d..ce521fa9e4716 100644
--- a/llvm/test/Transforms/MergeFunc/byval-attr-congruent-type.ll
+++ b/llvm/test/Transforms/MergeFunc/byval-attr-congruent-type.ll
@@ -6,14 +6,14 @@
 
 @d = external dso_local global %struct.c
 
-define void @e(%struct.a* byval(%struct.a) %f) {
+define void @e(ptr byval(%struct.a) %f) {
 ; CHECK-LABEL: @e(
 ; CHECK-NEXT:    ret void
 ;
   ret void
 }
 
-define void @g(%struct.c* byval(%struct.c) %f) {
+define void @g(ptr byval(%struct.c) %f) {
 ; CHECK-LABEL: @g(
 ; CHECK-NEXT:    ret void
 ;
@@ -22,9 +22,9 @@ define void @g(%struct.c* byval(%struct.c) %f) {
 
 define void @h() {
 ; CHECK-LABEL: @h(
-; CHECK-NEXT:    call void bitcast (void (%struct.a*)* @e to void (%struct.c*)*)(%struct.c* byval(%struct.c) @d)
+; CHECK-NEXT:    call void @e(ptr byval(%struct.c) @d)
 ; CHECK-NEXT:    ret void
 ;
-  call void @g(%struct.c* byval(%struct.c) @d)
+  call void @g(ptr byval(%struct.c) @d)
   ret void
 }

diff  --git a/llvm/test/Transforms/MergeFunc/byval-attr-type.ll b/llvm/test/Transforms/MergeFunc/byval-attr-type.ll
index 0925f52f1b93a..804124967a007 100644
--- a/llvm/test/Transforms/MergeFunc/byval-attr-type.ll
+++ b/llvm/test/Transforms/MergeFunc/byval-attr-type.ll
@@ -5,19 +5,19 @@
 
 define internal void @foo() {
 ; CHECK: define internal void @foo()
-  call void @callee_i32(i32* byval(i32) @i)
+  call void @callee_i32(ptr byval(i32) @i)
   ret void
 }
 
 define internal void @bar() {
 ; CHECK: define internal void @bar()
-  call void @callee_float(float* byval(float) @f)
+  call void @callee_float(ptr byval(float) @f)
   ret void
 }
 
 define internal void @baz() {
 ; CHECK-NOT: define{{.*}}@bar
-  call void @callee_float(float* byval(float) @f)
+  call void @callee_float(ptr byval(float) @f)
   ret void
 }
 
@@ -33,5 +33,5 @@ define void @user() {
   ret void
 }
 
-declare void @callee_i32(i32* byval(i32))
-declare void @callee_float(float* byval(float))
+declare void @callee_i32(ptr byval(i32))
+declare void @callee_float(ptr byval(float))

diff  --git a/llvm/test/Transforms/MergeFunc/call-and-invoke-with-ranges.ll b/llvm/test/Transforms/MergeFunc/call-and-invoke-with-ranges.ll
index 9a2dfa0cc124b..e7718ca84d316 100644
--- a/llvm/test/Transforms/MergeFunc/call-and-invoke-with-ranges.ll
+++ b/llvm/test/Transforms/MergeFunc/call-and-invoke-with-ranges.ll
@@ -26,18 +26,18 @@ define i8 @call_
diff erent_range() {
   ret i8 %out
 }
 
-define i8 @invoke_with_range() personality i8* undef {
+define i8 @invoke_with_range() personality ptr undef {
   %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !0
 
 next:
   ret i8 %out
 
 lpad:
-  %pad = landingpad { i8*, i32 } cleanup
-  resume { i8*, i32 } zeroinitializer
+  %pad = landingpad { ptr, i32 } cleanup
+  resume { ptr, i32 } zeroinitializer
 }
 
-define i8 @invoke_no_range() personality i8* undef {
+define i8 @invoke_no_range() personality ptr undef {
 ; CHECK-LABEL: @invoke_no_range()
 ; CHECK-NEXT: invoke i8 @dummy
   %out = invoke i8 @dummy() to label %next unwind label %lpad
@@ -46,11 +46,11 @@ next:
   ret i8 %out
 
 lpad:
-  %pad = landingpad { i8*, i32 } cleanup
-  resume { i8*, i32 } zeroinitializer
+  %pad = landingpad { ptr, i32 } cleanup
+  resume { ptr, i32 } zeroinitializer
 }
 
-define i8 @invoke_
diff erent_range() personality i8* undef {
+define i8 @invoke_
diff erent_range() personality ptr undef {
 ; CHECK-LABEL: @invoke_
diff erent_range()
 ; CHECK-NEXT: invoke i8 @dummy
   %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !1
@@ -59,11 +59,11 @@ next:
   ret i8 %out
 
 lpad:
-  %pad = landingpad { i8*, i32 } cleanup
-  resume { i8*, i32 } zeroinitializer
+  %pad = landingpad { ptr, i32 } cleanup
+  resume { ptr, i32 } zeroinitializer
 }
 
-define i8 @invoke_with_same_range() personality i8* undef {
+define i8 @invoke_with_same_range() personality ptr undef {
 ; CHECK-LABEL: @invoke_with_same_range()
 ; CHECK: tail call i8 @invoke_with_range()
   %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !0
@@ -72,8 +72,8 @@ next:
   ret i8 %out
 
 lpad:
-  %pad = landingpad { i8*, i32 } cleanup
-  resume { i8*, i32 } zeroinitializer
+  %pad = landingpad { ptr, i32 } cleanup
+  resume { ptr, i32 } zeroinitializer
 }
 
 define i8 @call_with_same_range() {

diff  --git a/llvm/test/Transforms/MergeFunc/comdat.ll b/llvm/test/Transforms/MergeFunc/comdat.ll
index afad9102f2910..f6e104625bc41 100644
--- a/llvm/test/Transforms/MergeFunc/comdat.ll
+++ b/llvm/test/Transforms/MergeFunc/comdat.ll
@@ -1,6 +1,6 @@
 ; RUN: opt -S -passes=mergefunc %s | FileCheck %s
 
- at symbols = linkonce_odr global <{ i8*, i8* }> <{ i8* bitcast (i32 (i32, i32)* @f to i8*), i8* bitcast (i32 (i32, i32)* @g to i8*) }>
+ at symbols = linkonce_odr global <{ ptr, ptr }> <{ ptr @f, ptr @g }>
 
 $f = comdat any
 $g = comdat any

diff  --git a/llvm/test/Transforms/MergeFunc/crash.ll b/llvm/test/Transforms/MergeFunc/crash.ll
index 1436c912eba55..abfdf403efe0e 100644
--- a/llvm/test/Transforms/MergeFunc/crash.ll
+++ b/llvm/test/Transforms/MergeFunc/crash.ll
@@ -5,12 +5,12 @@ target triple = "i386-pc-linux-gnu"
 
 %.qux.2496 = type { i32, %.qux.2497 }
 %.qux.2497 = type { i8, i32 }
-%.qux.2585 = type { i32, i32, i8* }
+%.qux.2585 = type { i32, i32, ptr }
 
 @g2 = external unnamed_addr constant [9 x i8], align 1
- at g3 = internal unnamed_addr constant [1 x i8*] [i8* bitcast (i8* (%.qux.2585*)* @func35 to i8*)]
+ at g3 = internal unnamed_addr constant [1 x ptr] [ptr @func35]
 
-define internal i32 @func1(i32* %ptr, { i32, i32 }* nocapture %method) align 2 {
+define internal i32 @func1(ptr %ptr, ptr nocapture %method) align 2 {
   br label %1
 
 ; <label>:1
@@ -20,27 +20,26 @@ define internal i32 @func1(i32* %ptr, { i32, i32 }* nocapture %method) align 2 {
   ret i32 undef
 }
 
-define internal i32 @func10(%.qux.2496* nocapture %this) align 2 {
-  %1 = getelementptr inbounds %.qux.2496, %.qux.2496* %this, i32 0, i32 1, i32 1
-  %2 = load i32, i32* %1, align 4
+define internal i32 @func10(ptr nocapture %this) align 2 {
+  %1 = getelementptr inbounds %.qux.2496, ptr %this, i32 0, i32 1, i32 1
+  %2 = load i32, ptr %1, align 4
   ret i32 %2
 }
 
-define internal i8* @func29(i32* nocapture %this) align 2 {
-  ret i8* getelementptr inbounds ([9 x i8], [9 x i8]* @g2, i32 0, i32 0)
+define internal ptr @func29(ptr nocapture %this) align 2 {
+  ret ptr @g2
 }
 
-define internal i32* @func33(%.qux.2585* nocapture %this) align 2 {
-  ret i32* undef
+define internal ptr @func33(ptr nocapture %this) align 2 {
+  ret ptr undef
 }
 
-define internal i32* @func34(%.qux.2585* nocapture %this) align 2 {
-  %1 = getelementptr inbounds %.qux.2585, %.qux.2585* %this, i32 0
-  ret i32* undef
+define internal ptr @func34(ptr nocapture %this) align 2 {
+  ret ptr undef
 }
 
-define internal i8* @func35(%.qux.2585* nocapture %this) align 2 {
-  %1 = getelementptr inbounds %.qux.2585, %.qux.2585* %this, i32 0, i32 2
-  %2 = load i8*, i8** %1, align 4
-  ret i8* %2
+define internal ptr @func35(ptr nocapture %this) align 2 {
+  %1 = getelementptr inbounds %.qux.2585, ptr %this, i32 0, i32 2
+  %2 = load ptr, ptr %1, align 4
+  ret ptr %2
 }

diff  --git a/llvm/test/Transforms/MergeFunc/crash2.ll b/llvm/test/Transforms/MergeFunc/crash2.ll
index b9d48ec77af61..5a4d65b256216 100644
--- a/llvm/test/Transforms/MergeFunc/crash2.ll
+++ b/llvm/test/Transforms/MergeFunc/crash2.ll
@@ -8,31 +8,31 @@
 ; causes an assert in the ValueHandle call back because we are RAUWing with a
 ; 
diff erent type (AllocaInst) than its key type (GlobalValue).
 
- at G = internal global i8** null
- at G2 = internal global i8** null
+ at G = internal global ptr null
+ at G2 = internal global ptr null
 
-define i32 @main(i32 %argc, i8** %argv) norecurse {
+define i32 @main(i32 %argc, ptr %argv) norecurse {
 ; CHECK: alloca
-  store i8** %argv, i8*** @G
+  store ptr %argv, ptr @G
   ret i32 0
 }
 
-define internal i8** @dead1(i64 %p) {
+define internal ptr @dead1(i64 %p) {
   call void @right(i64 %p)
   call void @right(i64 %p)
   call void @right(i64 %p)
   call void @right(i64 %p)
-  %tmp = load i8**, i8*** @G
-  ret i8** %tmp
+  %tmp = load ptr, ptr @G
+  ret ptr %tmp
 }
 
-define internal i8** @dead2(i64 %p) {
+define internal ptr @dead2(i64 %p) {
   call void @right(i64 %p)
   call void @right(i64 %p)
   call void @right(i64 %p)
   call void @right(i64 %p)
-  %tmp = load i8**, i8*** @G2
-  ret i8** %tmp
+  %tmp = load ptr, ptr @G2
+  ret ptr %tmp
 }
 
 define void @left(i64 %p) {

diff  --git a/llvm/test/Transforms/MergeFunc/dso_local_equivalent_merged.ll b/llvm/test/Transforms/MergeFunc/dso_local_equivalent_merged.ll
index 4c8c0cf9a6c3d..ca279f91ec1a4 100644
--- a/llvm/test/Transforms/MergeFunc/dso_local_equivalent_merged.ll
+++ b/llvm/test/Transforms/MergeFunc/dso_local_equivalent_merged.ll
@@ -4,8 +4,8 @@
 
 ; CHECK-NOT: @b
 
- at x = constant { i32 ()*, i32 ()* } { i32 ()* @a, i32 ()* @b }
-; CHECK: { i32 ()* @a, i32 ()* @a }
+ at x = constant { ptr, ptr } { ptr @a, ptr @b }
+; CHECK: { ptr @a, ptr @a }
 
 define i32 @func() {
 ; CHECK-LABEL: @func(

diff  --git a/llvm/test/Transforms/MergeFunc/dso_local_equivalent_unmerged.ll b/llvm/test/Transforms/MergeFunc/dso_local_equivalent_unmerged.ll
index d112244250c60..a6d3577e5643f 100644
--- a/llvm/test/Transforms/MergeFunc/dso_local_equivalent_unmerged.ll
+++ b/llvm/test/Transforms/MergeFunc/dso_local_equivalent_unmerged.ll
@@ -2,11 +2,11 @@
 ;; Check the cases involving dso_local_equivalent where we do not expect functions to be merged.
 ; RUN: opt -S -passes=mergefunc < %s | FileCheck %s
 
- at x = constant { i32 ()*, i32 ()* } { i32 ()* @a, i32 ()* @b }
-; CHECK: { i32 ()* @a, i32 ()* @b }
+ at x = constant { ptr, ptr } { ptr @a, ptr @b }
+; CHECK: { ptr @a, ptr @b }
 
- at x2 = constant { i32 ()*, i32 ()* } { i32 ()* @c, i32 ()* @d }
-; CHECK: { i32 ()* @c, i32 ()* @d }
+ at x2 = constant { ptr, ptr } { ptr @c, ptr @d }
+; CHECK: { ptr @c, ptr @d }
 
 ;; func1 and func2 are 
diff erent functions.
 declare i32 @func1()

diff  --git a/llvm/test/Transforms/MergeFunc/gep-base-type.ll b/llvm/test/Transforms/MergeFunc/gep-base-type.ll
index 2d535d485fe70..76a9d23a76197 100644
--- a/llvm/test/Transforms/MergeFunc/gep-base-type.ll
+++ b/llvm/test/Transforms/MergeFunc/gep-base-type.ll
@@ -4,10 +4,10 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 ; These should not be merged, the type of the GEP pointer argument does not have
 ; the same stride.
 
-%"struct1" = type <{ i8*, i32, [4 x i8] }>
-%"struct2" = type { i8*, { i64, i64 } }
+%"struct1" = type <{ ptr, i32, [4 x i8] }>
+%"struct2" = type { ptr, { i64, i64 } }
 
-define internal %struct2* @Ffunc(%struct2* %P, i64 %i) {
+define internal ptr @Ffunc(ptr %P, i64 %i) {
 ; CHECK-LABEL: @Ffunc(
 ; CHECK-NEXT: getelementptr
 ; CHECK-NEXT: getelementptr
@@ -16,17 +16,17 @@ define internal %struct2* @Ffunc(%struct2* %P, i64 %i) {
 ; CHECK-NEXT: getelementptr
 ; CHECK-NEXT: getelementptr
 ; CHECK-NEXT: ret
-  %1 = getelementptr inbounds %"struct2", %"struct2"* %P, i64 %i
-  %2 = getelementptr inbounds %"struct2", %"struct2"* %P, i64 %i
-  %3 = getelementptr inbounds %"struct2", %"struct2"* %P, i64 %i
-  %4 = getelementptr inbounds %"struct2", %"struct2"* %P, i64 %i
-  %5 = getelementptr inbounds %"struct2", %"struct2"* %P, i64 %i
-  %6 = getelementptr inbounds %"struct2", %"struct2"* %P, i64 %i
-  ret %struct2* %6
+  %1 = getelementptr inbounds %"struct2", ptr %P, i64 %i
+  %2 = getelementptr inbounds %"struct2", ptr %P, i64 %i
+  %3 = getelementptr inbounds %"struct2", ptr %P, i64 %i
+  %4 = getelementptr inbounds %"struct2", ptr %P, i64 %i
+  %5 = getelementptr inbounds %"struct2", ptr %P, i64 %i
+  %6 = getelementptr inbounds %"struct2", ptr %P, i64 %i
+  ret ptr %6
 }
 
 
-define internal %struct1* @Gfunc(%struct1* %P, i64 %i) {
+define internal ptr @Gfunc(ptr %P, i64 %i) {
 ; CHECK-LABEL: @Gfunc(
 ; CHECK-NEXT: getelementptr
 ; CHECK-NEXT: getelementptr
@@ -35,12 +35,12 @@ define internal %struct1* @Gfunc(%struct1* %P, i64 %i) {
 ; CHECK-NEXT: getelementptr
 ; CHECK-NEXT: getelementptr
 ; CHECK-NEXT: ret
-  %1 = getelementptr inbounds %"struct1", %"struct1"* %P, i64 %i
-  %2 = getelementptr inbounds %"struct1", %"struct1"* %P, i64 %i
-  %3 = getelementptr inbounds %"struct1", %"struct1"* %P, i64 %i
-  %4 = getelementptr inbounds %"struct1", %"struct1"* %P, i64 %i
-  %5 = getelementptr inbounds %"struct1", %"struct1"* %P, i64 %i
-  %6 = getelementptr inbounds %"struct1", %"struct1"* %P, i64 %i
-  ret %struct1* %6
+  %1 = getelementptr inbounds %"struct1", ptr %P, i64 %i
+  %2 = getelementptr inbounds %"struct1", ptr %P, i64 %i
+  %3 = getelementptr inbounds %"struct1", ptr %P, i64 %i
+  %4 = getelementptr inbounds %"struct1", ptr %P, i64 %i
+  %5 = getelementptr inbounds %"struct1", ptr %P, i64 %i
+  %6 = getelementptr inbounds %"struct1", ptr %P, i64 %i
+  ret ptr %6
 }
 

diff  --git a/llvm/test/Transforms/MergeFunc/inline-asm.ll b/llvm/test/Transforms/MergeFunc/inline-asm.ll
index ac9b76713d682..7cc6afd2f8f7b 100644
--- a/llvm/test/Transforms/MergeFunc/inline-asm.ll
+++ b/llvm/test/Transforms/MergeFunc/inline-asm.ll
@@ -7,47 +7,46 @@
 ; CHECK-NEXT: tail call void @float_ptr_null()
 
 ; CHECK-LABEL: @int_ptr_arg_same
-; CHECK-NEXT: %2 = bitcast i32* %0 to float*
-; CHECK-NEXT: tail call void @float_ptr_arg_same(float* %2)
+; CHECK-NEXT: tail call void @float_ptr_arg_same(ptr %0)
 
 ; Used to satisfy minimum size limit
 declare void @stuff()
 
 ; Can be merged
 define void @float_ptr_null() {
-  call void asm "nop", "r"(float* null)
+  call void asm "nop", "r"(ptr null)
   call void @stuff()
   ret void
 }
 
 define void @int_ptr_null() {
-  call void asm "nop", "r"(i32* null)
+  call void asm "nop", "r"(ptr null)
   call void @stuff()
   ret void
 }
 
 ; Can be merged (uses same argument 
diff ering by pointer type)
-define void @float_ptr_arg_same(float*) {
-  call void asm "nop", "r"(float* %0)
+define void @float_ptr_arg_same(ptr) {
+  call void asm "nop", "r"(ptr %0)
   call void @stuff()
   ret void
 }
 
-define void @int_ptr_arg_same(i32*) {
-  call void asm "nop", "r"(i32* %0)
+define void @int_ptr_arg_same(ptr) {
+  call void asm "nop", "r"(ptr %0)
   call void @stuff()
   ret void
 }
 
 ; Can not be merged (uses 
diff erent arguments)
-define void @float_ptr_arg_
diff erent(float*, float*) {
-  call void asm "nop", "r"(float* %0)
+define void @float_ptr_arg_
diff erent(ptr, ptr) {
+  call void asm "nop", "r"(ptr %0)
   call void @stuff()
   ret void
 }
 
-define void @int_ptr_arg_
diff erent(i32*, i32*) {
-  call void asm "nop", "r"(i32* %1)
+define void @int_ptr_arg_
diff erent(ptr, ptr) {
+  call void asm "nop", "r"(ptr %1)
   call void @stuff()
   ret void
 }

diff  --git a/llvm/test/Transforms/MergeFunc/inttoptr-address-space.ll b/llvm/test/Transforms/MergeFunc/inttoptr-address-space.ll
index dd62de8ff13ad..49ba7b7feb6af 100644
--- a/llvm/test/Transforms/MergeFunc/inttoptr-address-space.ll
+++ b/llvm/test/Transforms/MergeFunc/inttoptr-address-space.ll
@@ -3,27 +3,26 @@ target datalayout = "e-p:32:32:32-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-
 
 %.qux.2496 = type { i32, %.qux.2497 }
 %.qux.2497 = type { i8, i32 }
-%.qux.2585 = type { i32, i32, i8* }
+%.qux.2585 = type { i32, i32, ptr }
 
 @g2 = external addrspace(1) constant [9 x i8], align 1
- at g3 = internal unnamed_addr constant [1 x i8*] [i8* bitcast (i8* (%.qux.2585 addrspace(1)*)* @func35 to i8*)]
+ at g3 = internal unnamed_addr constant [1 x ptr] [ptr @func35]
 
 
-define internal i32 @func10(%.qux.2496 addrspace(1)* nocapture %this) align 2 {
+define internal i32 @func10(ptr addrspace(1) nocapture %this) align 2 {
 bb:
-  %tmp = getelementptr inbounds %.qux.2496, %.qux.2496 addrspace(1)* %this, i32 0, i32 1, i32 1
-  %tmp1 = load i32, i32 addrspace(1)* %tmp, align 4
+  %tmp = getelementptr inbounds %.qux.2496, ptr addrspace(1) %this, i32 0, i32 1, i32 1
+  %tmp1 = load i32, ptr addrspace(1) %tmp, align 4
   ret i32 %tmp1
 }
 
 ; Check for pointer bitwidth equal assertion failure
-define internal i8* @func35(%.qux.2585 addrspace(1)* nocapture %this) align 2 {
+define internal ptr @func35(ptr addrspace(1) nocapture %this) align 2 {
 bb:
 ; CHECK-LABEL: @func35(
-; CHECK: %[[V2:.+]] = bitcast %.qux.2585 addrspace(1)* %{{.*}} to %.qux.2496 addrspace(1)*
-; CHECK: %[[V3:.+]] = tail call i32 @func10(%.qux.2496 addrspace(1)* nocapture %[[V2]])
-; CHECK: %{{.*}} = inttoptr i32 %[[V3]] to i8*
-  %tmp = getelementptr inbounds %.qux.2585, %.qux.2585 addrspace(1)* %this, i32 0, i32 2
-  %tmp1 = load i8*, i8* addrspace(1)* %tmp, align 4
-  ret i8* %tmp1
+; CHECK: %[[V3:.+]] = tail call i32 @func10(ptr addrspace(1) nocapture %{{.*}})
+; CHECK: %{{.*}} = inttoptr i32 %[[V3]] to ptr
+  %tmp = getelementptr inbounds %.qux.2585, ptr addrspace(1) %this, i32 0, i32 2
+  %tmp1 = load ptr, ptr addrspace(1) %tmp, align 4
+  ret ptr %tmp1
 }

diff  --git a/llvm/test/Transforms/MergeFunc/inttoptr.ll b/llvm/test/Transforms/MergeFunc/inttoptr.ll
index c1715c18d3d32..6d6168b6c6988 100644
--- a/llvm/test/Transforms/MergeFunc/inttoptr.ll
+++ b/llvm/test/Transforms/MergeFunc/inttoptr.ll
@@ -5,12 +5,12 @@ target triple = "i386-pc-linux-gnu"
 
 %.qux.2496 = type { i32, %.qux.2497 }
 %.qux.2497 = type { i8, i32 }
-%.qux.2585 = type { i32, i32, i8* }
+%.qux.2585 = type { i32, i32, ptr }
 
 @g2 = external unnamed_addr constant [9 x i8], align 1
- at g3 = internal unnamed_addr constant [1 x i8*] [i8* bitcast (i8* (%.qux.2585*)* @func35 to i8*)]
+ at g3 = internal unnamed_addr constant [1 x ptr] [ptr @func35]
 
-define internal i32 @func1(i32* %ptr, { i32, i32 }* nocapture %method) align 2 {
+define internal i32 @func1(ptr %ptr, ptr nocapture %method) align 2 {
 bb:
   br label %bb1
 
@@ -21,36 +21,34 @@ bb2:                                              ; preds = %bb1
   ret i32 undef
 }
 
-define internal i32 @func10(%.qux.2496* nocapture %this) align 2 {
+define internal i32 @func10(ptr nocapture %this) align 2 {
 bb:
-  %tmp = getelementptr inbounds %.qux.2496, %.qux.2496* %this, i32 0, i32 1, i32 1
-  %tmp1 = load i32, i32* %tmp, align 4
+  %tmp = getelementptr inbounds %.qux.2496, ptr %this, i32 0, i32 1, i32 1
+  %tmp1 = load i32, ptr %tmp, align 4
   ret i32 %tmp1
 }
 
-define internal i8* @func29(i32* nocapture %this) align 2 {
+define internal ptr @func29(ptr nocapture %this) align 2 {
 bb:
-  ret i8* getelementptr inbounds ([9 x i8], [9 x i8]* @g2, i32 0, i32 0)
+  ret ptr @g2
 }
 
-define internal i32* @func33(%.qux.2585* nocapture %this) align 2 {
+define internal ptr @func33(ptr nocapture %this) align 2 {
 bb:
-  ret i32* undef
+  ret ptr undef
 }
 
-define internal i32* @func34(%.qux.2585* nocapture %this) align 2 {
+define internal ptr @func34(ptr nocapture %this) align 2 {
 bb:
-  %tmp = getelementptr inbounds %.qux.2585, %.qux.2585* %this, i32 0
-  ret i32* undef
+  ret ptr undef
 }
 
-define internal i8* @func35(%.qux.2585* nocapture %this) align 2 {
+define internal ptr @func35(ptr nocapture %this) align 2 {
 bb:
 ; CHECK-LABEL: @func35(
-; CHECK: %[[V2:.+]] = bitcast %.qux.2585* %{{.*}} to %.qux.2496*
-; CHECK: %[[V3:.+]] = tail call i32 @func10(%.qux.2496* nocapture %[[V2]])
-; CHECK: %{{.*}} = inttoptr i32 %[[V3]] to i8*
-  %tmp = getelementptr inbounds %.qux.2585, %.qux.2585* %this, i32 0, i32 2
-  %tmp1 = load i8*, i8** %tmp, align 4
-  ret i8* %tmp1
+; CHECK: %[[V3:.+]] = tail call i32 @func10(ptr nocapture %{{.*}})
+; CHECK: %{{.*}} = inttoptr i32 %[[V3]] to ptr
+  %tmp = getelementptr inbounds %.qux.2585, ptr %this, i32 0, i32 2
+  %tmp1 = load ptr, ptr %tmp, align 4
+  ret ptr %tmp1
 }

diff  --git a/llvm/test/Transforms/MergeFunc/linkonce_odr.ll b/llvm/test/Transforms/MergeFunc/linkonce_odr.ll
index 6bd4251aa0fee..23305c04f7b6f 100644
--- a/llvm/test/Transforms/MergeFunc/linkonce_odr.ll
+++ b/llvm/test/Transforms/MergeFunc/linkonce_odr.ll
@@ -39,4 +39,4 @@ define linkonce_odr i32 @funA(i32 %x, i32 %y) {
 ; This creates a use of @funB, preventing -passes=mergefunc from deleting it.
 ; @funC, however, can safely be deleted as it has no uses, and is discardable
 ; if unused.
- at take_addr_of_funB = global i8* bitcast (i32 (i32, i32)* @funB to i8*)
+ at take_addr_of_funB = global ptr @funB

diff  --git a/llvm/test/Transforms/MergeFunc/merge-block-address-other-function.ll b/llvm/test/Transforms/MergeFunc/merge-block-address-other-function.ll
index d4b75d5318f33..746ad8a74dbc4 100644
--- a/llvm/test/Transforms/MergeFunc/merge-block-address-other-function.ll
+++ b/llvm/test/Transforms/MergeFunc/merge-block-address-other-function.ll
@@ -7,43 +7,43 @@ define i32 @_Z1fi(i32 %i) #0 {
 entry:
   %retval = alloca i32, align 4
   %i.addr = alloca i32, align 4
-  store i32 %i, i32* %i.addr, align 4
-  %0 = load i32, i32* %i.addr, align 4
+  store i32 %i, ptr %i.addr, align 4
+  %0 = load i32, ptr %i.addr, align 4
   %cmp = icmp eq i32 %0, 1
   br i1 %cmp, label %if.then, label %if.end
 
 if.then:
-  store i32 3, i32* %retval
+  store i32 3, ptr %retval
   br label %return
 
 if.end:
-  %1 = load i32, i32* %i.addr, align 4
+  %1 = load i32, ptr %i.addr, align 4
   %cmp1 = icmp eq i32 %1, 3
   br i1 %cmp1, label %if.then.2, label %if.end.3
 
 if.then.2:
-  store i32 56, i32* %retval
+  store i32 56, ptr %retval
   br label %return
 
 if.end.3:
-  store i32 0, i32* %retval
+  store i32 0, ptr %retval
   br label %return
 
 return:
-  %2 = load i32, i32* %retval
+  %2 = load i32, ptr %retval
   ret i32 %2
 }
 
 
-define internal i8* @Afunc(i32* %P) {
-  store i32 1, i32* %P
-  store i32 3, i32* %P
-  ret i8* blockaddress(@_Z1fi, %if.then.2)
+define internal ptr @Afunc(ptr %P) {
+  store i32 1, ptr %P
+  store i32 3, ptr %P
+  ret ptr blockaddress(@_Z1fi, %if.then.2)
 }
 
-define internal i8* @Bfunc(i32* %P) {
+define internal ptr @Bfunc(ptr %P) {
 ; CHECK-NOT: @Bfunc
-  store i32 1, i32* %P
-  store i32 3, i32* %P
-  ret i8* blockaddress(@_Z1fi, %if.then.2)
+  store i32 1, ptr %P
+  store i32 3, ptr %P
+  ret ptr blockaddress(@_Z1fi, %if.then.2)
 }

diff  --git a/llvm/test/Transforms/MergeFunc/merge-block-address.ll b/llvm/test/Transforms/MergeFunc/merge-block-address.ll
index 40c6b5f706d77..a31646bb27115 100644
--- a/llvm/test/Transforms/MergeFunc/merge-block-address.ll
+++ b/llvm/test/Transforms/MergeFunc/merge-block-address.ll
@@ -13,39 +13,39 @@ define i32 @_Z1fi(i32 %i) #0 {
 entry:
   %i.addr = alloca i32, align 4
   %ret = alloca i32, align 4
-  %l = alloca i8*, align 8
-  store i32 %i, i32* %i.addr, align 4
-  store i32 0, i32* %ret, align 4
-  store i8* blockaddress(@_Z1fi, %val_0), i8** %l, align 8
-  %0 = load i32, i32* %i.addr, align 4
+  %l = alloca ptr, align 8
+  store i32 %i, ptr %i.addr, align 4
+  store i32 0, ptr %ret, align 4
+  store ptr blockaddress(@_Z1fi, %val_0), ptr %l, align 8
+  %0 = load i32, ptr %i.addr, align 4
   %and = and i32 %0, 256
   %cmp = icmp eq i32 %and, 0
   br i1 %cmp, label %if.then, label %if.end
 
 if.then:
-  store i8* blockaddress(@_Z1fi, %val_1), i8** %l, align 8
+  store ptr blockaddress(@_Z1fi, %val_1), ptr %l, align 8
   br label %if.end
 
 if.end:
-  %1 = load i8*, i8** %l, align 8
+  %1 = load ptr, ptr %l, align 8
   br label %indirectgoto
 
 val_1:
-  store i32 42, i32* %ret, align 4
+  store i32 42, ptr %ret, align 4
   br label %end
 
 val_0:
-  store i32 12, i32* %ret, align 4
+  store i32 12, ptr %ret, align 4
   br label %end
 
 
 end:
-  %2 = load i32, i32* %ret, align 4
+  %2 = load i32, ptr %ret, align 4
   ret i32 %2
 
 indirectgoto:
-  %indirect.goto.dest = phi i8* [ %1, %if.end ]
-  indirectbr i8* %indirect.goto.dest, [label %val_0, label %val_1]
+  %indirect.goto.dest = phi ptr [ %1, %if.end ]
+  indirectbr ptr %indirect.goto.dest, [label %val_0, label %val_1]
 }
 
 define i32 @_Z1gi(i32 %i) #0 {
@@ -55,37 +55,37 @@ define i32 @_Z1gi(i32 %i) #0 {
 entry:
   %i.addr = alloca i32, align 4
   %ret = alloca i32, align 4
-  %l = alloca i8*, align 8
-  store i32 %i, i32* %i.addr, align 4
-  store i32 0, i32* %ret, align 4
-  store i8* blockaddress(@_Z1gi, %val_0), i8** %l, align 8
-  %0 = load i32, i32* %i.addr, align 4
+  %l = alloca ptr, align 8
+  store i32 %i, ptr %i.addr, align 4
+  store i32 0, ptr %ret, align 4
+  store ptr blockaddress(@_Z1gi, %val_0), ptr %l, align 8
+  %0 = load i32, ptr %i.addr, align 4
   %and = and i32 %0, 256
   %cmp = icmp eq i32 %and, 0
   br i1 %cmp, label %if.then, label %if.end
 
 if.then:
-  store i8* blockaddress(@_Z1gi, %val_1), i8** %l, align 8
+  store ptr blockaddress(@_Z1gi, %val_1), ptr %l, align 8
   br label %if.end
 
 if.end:
-  %1 = load i8*, i8** %l, align 8
+  %1 = load ptr, ptr %l, align 8
   br label %indirectgoto
 
 val_0:
-  store i32 12, i32* %ret, align 4
+  store i32 12, ptr %ret, align 4
   br label %end
 
 val_1:
-  store i32 42, i32* %ret, align 4
+  store i32 42, ptr %ret, align 4
   br label %end
 
 end:
-  %2 = load i32, i32* %ret, align 4
+  %2 = load i32, ptr %ret, align 4
   ret i32 %2
 
 indirectgoto:
-  %indirect.goto.dest = phi i8* [ %1, %if.end ]
-  indirectbr i8* %indirect.goto.dest, [label %val_0, label %val_1]
+  %indirect.goto.dest = phi ptr [ %1, %if.end ]
+  indirectbr ptr %indirect.goto.dest, [label %val_0, label %val_1]
 }
 

diff  --git a/llvm/test/Transforms/MergeFunc/merge-const-ptr-and-int.ll b/llvm/test/Transforms/MergeFunc/merge-const-ptr-and-int.ll
index 11d43c99b76fc..f596bdd32a2ec 100644
--- a/llvm/test/Transforms/MergeFunc/merge-const-ptr-and-int.ll
+++ b/llvm/test/Transforms/MergeFunc/merge-const-ptr-and-int.ll
@@ -4,17 +4,17 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 
 ; Afunc and Bfunc 
diff er only in that one returns i64, the other a pointer.
 ; These should be merged.
-define internal i64 @Afunc(i32* %P, i32* %Q) {
+define internal i64 @Afunc(ptr %P, ptr %Q) {
 ; CHECK-LABEL: define internal i64 @Afunc
-  store i32 4, i32* %P
-  store i32 6, i32* %Q
+  store i32 4, ptr %P
+  store i32 6, ptr %Q
   ret i64 0
 }
 
-define internal i64* @Bfunc(i32* %P, i32* %Q) {
+define internal ptr @Bfunc(ptr %P, ptr %Q) {
 ; MERGE-NOT: @Bfunc
-  store i32 4, i32* %P
-  store i32 6, i32* %Q
-  ret i64* null
+  store i32 4, ptr %P
+  store i32 6, ptr %Q
+  ret ptr null
 }
 

diff  --git a/llvm/test/Transforms/MergeFunc/merge-
diff erent-vector-types.ll b/llvm/test/Transforms/MergeFunc/merge-
diff erent-vector-types.ll
index c2fd65be3c3fd..42a6905c5036f 100644
--- a/llvm/test/Transforms/MergeFunc/merge-
diff erent-vector-types.ll
+++ b/llvm/test/Transforms/MergeFunc/merge-
diff erent-vector-types.ll
@@ -3,16 +3,16 @@
 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-S128"
 
 ; Merging should still work even if the values are wrapped in a vector.
-define internal <2 x i64> @Mfunc(i32* %P, i32* %Q) {
+define internal <2 x i64> @Mfunc(ptr %P, ptr %Q) {
 ; CHECK-LABEL: define internal <2 x i64> @Mfunc
-  store i32 1, i32* %P
-  store i32 1, i32* %Q
+  store i32 1, ptr %P
+  store i32 1, ptr %Q
   ret <2 x i64> <i64 0, i64 0>
 }
 
-define internal <2 x i64*> @Nfunc(i32* %P, i32* %Q) {
+define internal <2 x ptr> @Nfunc(ptr %P, ptr %Q) {
 ; MERGE-NOT: @Nfunc
-  store i32 1, i32* %P
-  store i32 1, i32* %Q
-  ret <2 x i64*> <i64* null, i64* null>
+  store i32 1, ptr %P
+  store i32 1, ptr %Q
+  ret <2 x ptr> <ptr null, ptr null>
 }

diff  --git a/llvm/test/Transforms/MergeFunc/merge-ptr-and-int.ll b/llvm/test/Transforms/MergeFunc/merge-ptr-and-int.ll
index 59fc2bec190d0..cefd2202b148c 100644
--- a/llvm/test/Transforms/MergeFunc/merge-ptr-and-int.ll
+++ b/llvm/test/Transforms/MergeFunc/merge-ptr-and-int.ll
@@ -14,10 +14,10 @@ entry:
 }
 
 ; CHECK-LABEL: @f1(
-; CHECK: ptrtoint i64*
+; CHECK: ptrtoint ptr
 ; CHECK: tail call void @f0(i64
 
-define void @f1(i64* %p0) {
+define void @f1(ptr %p0) {
 entry:
   call void @stuff()
   call void @stuff()

diff  --git a/llvm/test/Transforms/MergeFunc/merge-small-unnamed-addr.ll b/llvm/test/Transforms/MergeFunc/merge-small-unnamed-addr.ll
index 0f113d9b16c06..44b8a71631e87 100644
--- a/llvm/test/Transforms/MergeFunc/merge-small-unnamed-addr.ll
+++ b/llvm/test/Transforms/MergeFunc/merge-small-unnamed-addr.ll
@@ -2,8 +2,8 @@
 
 ; CHECK-NOT: @b
 
- at x = constant { void ()*, void ()* } { void ()* @a, void ()* @b }
-; CHECK: { void ()* @a, void ()* @a }
+ at x = constant { ptr, ptr } { ptr @a, ptr @b }
+; CHECK: { ptr @a, ptr @a }
 
 define internal void @a() unnamed_addr {
   ret void

diff  --git a/llvm/test/Transforms/MergeFunc/merge-unnamed-addr-bitcast.ll b/llvm/test/Transforms/MergeFunc/merge-unnamed-addr-bitcast.ll
index 2d6c7bb1da009..dab9e452fda44 100644
--- a/llvm/test/Transforms/MergeFunc/merge-unnamed-addr-bitcast.ll
+++ b/llvm/test/Transforms/MergeFunc/merge-unnamed-addr-bitcast.ll
@@ -5,10 +5,10 @@
 
 ; CHECK-NOT: @b
 
- at x = constant { i32 (i32)*, i32 (i32)* }
-  { i32 (i32)* bitcast (i32 (%A)* @a to i32 (i32)*),
-    i32 (i32)* bitcast (i32 (%B)* @b to i32 (i32)*) }
-; CHECK: { i32 (i32)* bitcast (i32 (%A)* @a to i32 (i32)*), i32 (i32)* bitcast (i32 (%A)* @a to i32 (i32)*) }
+ at x = constant { ptr, ptr }
+  { ptr @a,
+    ptr @b }
+; CHECK: { ptr @a, ptr @a }
 
 define internal i32 @a(%A) unnamed_addr {
   extractvalue %A %0, 0
@@ -25,6 +25,6 @@ define internal i32 @b(%B) unnamed_addr {
 define i32 @c(i32) {
   insertvalue %B undef, i32 %0, 0
   call i32 @b(%B %2)
-; CHECK: call i32 bitcast (i32 (%A)* @a to i32 (%B)*)(%B %2)
+; CHECK: call i32 @a(%B %2)
   ret i32 %3
 }

diff  --git a/llvm/test/Transforms/MergeFunc/merge-unnamed-addr.ll b/llvm/test/Transforms/MergeFunc/merge-unnamed-addr.ll
index 99c5148526f97..c1f023fa3d384 100644
--- a/llvm/test/Transforms/MergeFunc/merge-unnamed-addr.ll
+++ b/llvm/test/Transforms/MergeFunc/merge-unnamed-addr.ll
@@ -2,8 +2,8 @@
 
 ; CHECK-NOT: @b
 
- at x = constant { i32 (i32)*, i32 (i32)* } { i32 (i32)* @a, i32 (i32)* @b }
-; CHECK: { i32 (i32)* @a, i32 (i32)* @a }
+ at x = constant { ptr, ptr } { ptr @a, ptr @b }
+; CHECK: { ptr @a, ptr @a }
 
 define internal i32 @a(i32 %a) unnamed_addr {
   %b = xor i32 %a, 0

diff  --git a/llvm/test/Transforms/MergeFunc/merge-used.ll b/llvm/test/Transforms/MergeFunc/merge-used.ll
index a63fbce1c6db2..1bd748ffc6236 100644
--- a/llvm/test/Transforms/MergeFunc/merge-used.ll
+++ b/llvm/test/Transforms/MergeFunc/merge-used.ll
@@ -1,6 +1,6 @@
 ; RUN: opt -S -passes=mergefunc < %s | FileCheck %s
 
- at llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (i32 (i32)* @a to i8*)], section "llvm.metadata"
+ at llvm.compiler.used = appending global [1 x ptr] [ptr @a], section "llvm.metadata"
 
 define internal i32 @a(i32 %a) unnamed_addr {
   %b = xor i32 %a, 0
@@ -19,7 +19,7 @@ define i32 @c(i32 %a) unnamed_addr {
   ret i32 %b
 }
 
-; CHECK-LABEL: @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (i32 (i32)* @a to i8*)], section "llvm.metadata"
+; CHECK-LABEL: @llvm.compiler.used = appending global [1 x ptr] [ptr @a], section "llvm.metadata"
 
 ; CHECK-LABEL: define i32 @b(i32 %a) unnamed_addr
 ; CHECK-NEXT:    xor

diff  --git a/llvm/test/Transforms/MergeFunc/mergefunc-preserve-debug-info.ll b/llvm/test/Transforms/MergeFunc/mergefunc-preserve-debug-info.ll
index 5cbbf7a1f631e..13d94f8cf6a25 100644
--- a/llvm/test/Transforms/MergeFunc/mergefunc-preserve-debug-info.ll
+++ b/llvm/test/Transforms/MergeFunc/mergefunc-preserve-debug-info.ll
@@ -49,30 +49,30 @@ entry:
   %i = alloca i32, align 4
   %m = alloca i32, align 4
   %j = alloca i32, align 4
-  store i32 %x, i32* %x.addr, align 4
-  call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !11, metadata !12), !dbg !13
-  store i32 %y, i32* %y.addr, align 4
-  call void @llvm.dbg.declare(metadata i32* %y.addr, metadata !14, metadata !12), !dbg !15
-  call void @llvm.dbg.declare(metadata i32* %i, metadata !16, metadata !12), !dbg !17
-  call void @llvm.dbg.declare(metadata i32* %m, metadata !18, metadata !12), !dbg !19
-  call void @llvm.dbg.declare(metadata i32* %j, metadata !20, metadata !12), !dbg !21
-  %0 = load i32, i32* %x.addr, align 4, !dbg !22
-  %1 = load i32, i32* %y.addr, align 4, !dbg !24
+  store i32 %x, ptr %x.addr, align 4
+  call void @llvm.dbg.declare(metadata ptr %x.addr, metadata !11, metadata !12), !dbg !13
+  store i32 %y, ptr %y.addr, align 4
+  call void @llvm.dbg.declare(metadata ptr %y.addr, metadata !14, metadata !12), !dbg !15
+  call void @llvm.dbg.declare(metadata ptr %i, metadata !16, metadata !12), !dbg !17
+  call void @llvm.dbg.declare(metadata ptr %m, metadata !18, metadata !12), !dbg !19
+  call void @llvm.dbg.declare(metadata ptr %j, metadata !20, metadata !12), !dbg !21
+  %0 = load i32, ptr %x.addr, align 4, !dbg !22
+  %1 = load i32, ptr %y.addr, align 4, !dbg !24
   %cmp = icmp sgt i32 %0, %1, !dbg !25
   br i1 %cmp, label %if.then, label %if.else, !dbg !26
 
 if.then:                                          ; preds = %entry
-  %2 = load i32, i32* %x.addr, align 4, !dbg !27
-  store i32 %2, i32* %m, align 4, !dbg !28
+  %2 = load i32, ptr %x.addr, align 4, !dbg !27
+  store i32 %2, ptr %m, align 4, !dbg !28
   br label %if.end, !dbg !29
 
 if.else:                                          ; preds = %entry
-  %3 = load i32, i32* %y.addr, align 4, !dbg !30
-  store i32 %3, i32* %m, align 4, !dbg !31
+  %3 = load i32, ptr %y.addr, align 4, !dbg !30
+  store i32 %3, ptr %m, align 4, !dbg !31
   br label %if.end
 
 if.end:                                           ; preds = %if.else, %if.then
-  %4 = load i32, i32* %m, align 4, !dbg !32
+  %4 = load i32, ptr %m, align 4, !dbg !32
   ret i32 %4, !dbg !33
 }
 
@@ -86,10 +86,10 @@ define i32 @maxB(i32 %x, i32 %y) !dbg !34 {
 ; OPTIMIZATION_LEVEL_0-NEXT: entry:
 ; OPTIMIZATION_LEVEL_0-NEXT: %x.addr = alloca i32, align 4
 ; OPTIMIZATION_LEVEL_0-NEXT: %y.addr = alloca i32, align 4
-; OPTIMIZATION_LEVEL_0-NEXT: store i32 %x, i32* %x.addr, align 4
-; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !{{[0-9]+}}, metadata !DIExpression()), !dbg !{{[0-9]+}}
-; OPTIMIZATION_LEVEL_0-NEXT: store i32 %y, i32* %y.addr, align 4
-; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata i32* %y.addr, metadata !{{[0-9]+}}, metadata !DIExpression()), !dbg !{{[0-9]+}}
+; OPTIMIZATION_LEVEL_0-NEXT: store i32 %x, ptr %x.addr, align 4
+; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata ptr %x.addr, metadata !{{[0-9]+}}, metadata !DIExpression()), !dbg !{{[0-9]+}}
+; OPTIMIZATION_LEVEL_0-NEXT: store i32 %y, ptr %y.addr, align 4
+; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata ptr %y.addr, metadata !{{[0-9]+}}, metadata !DIExpression()), !dbg !{{[0-9]+}}
 ; OPTIMIZATION_LEVEL_0-NEXT: %0 = tail call i32 @maxA(i32 %x, i32 %y), !dbg !{{[0-9]+}}
 ; OPTIMIZATION_LEVEL_0-NEXT: ret i32 %0, !dbg !{{[0-9]+}}
 ; OPTIMIZATION_LEVEL_0-NEXT: }
@@ -108,30 +108,30 @@ entry:
   %i = alloca i32, align 4
   %m = alloca i32, align 4
   %j = alloca i32, align 4
-  store i32 %x, i32* %x.addr, align 4
-  call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !35, metadata !12), !dbg !36
-  store i32 %y, i32* %y.addr, align 4
-  call void @llvm.dbg.declare(metadata i32* %y.addr, metadata !37, metadata !12), !dbg !38
-  call void @llvm.dbg.declare(metadata i32* %i, metadata !39, metadata !12), !dbg !40
-  call void @llvm.dbg.declare(metadata i32* %m, metadata !41, metadata !12), !dbg !42
-  call void @llvm.dbg.declare(metadata i32* %j, metadata !43, metadata !12), !dbg !44
-  %0 = load i32, i32* %x.addr, align 4, !dbg !45
-  %1 = load i32, i32* %y.addr, align 4, !dbg !47
+  store i32 %x, ptr %x.addr, align 4
+  call void @llvm.dbg.declare(metadata ptr %x.addr, metadata !35, metadata !12), !dbg !36
+  store i32 %y, ptr %y.addr, align 4
+  call void @llvm.dbg.declare(metadata ptr %y.addr, metadata !37, metadata !12), !dbg !38
+  call void @llvm.dbg.declare(metadata ptr %i, metadata !39, metadata !12), !dbg !40
+  call void @llvm.dbg.declare(metadata ptr %m, metadata !41, metadata !12), !dbg !42
+  call void @llvm.dbg.declare(metadata ptr %j, metadata !43, metadata !12), !dbg !44
+  %0 = load i32, ptr %x.addr, align 4, !dbg !45
+  %1 = load i32, ptr %y.addr, align 4, !dbg !47
   %cmp = icmp sgt i32 %0, %1, !dbg !48
   br i1 %cmp, label %if.then, label %if.else, !dbg !49
 
 if.then:                                          ; preds = %entry
-  %2 = load i32, i32* %x.addr, align 4, !dbg !50
-  store i32 %2, i32* %m, align 4, !dbg !51
+  %2 = load i32, ptr %x.addr, align 4, !dbg !50
+  store i32 %2, ptr %m, align 4, !dbg !51
   br label %if.end, !dbg !52
 
 if.else:                                          ; preds = %entry
-  %3 = load i32, i32* %y.addr, align 4, !dbg !53
-  store i32 %3, i32* %m, align 4, !dbg !54
+  %3 = load i32, ptr %y.addr, align 4, !dbg !53
+  store i32 %3, ptr %m, align 4, !dbg !54
   br label %if.end
 
 if.end:                                           ; preds = %if.else, %if.then
-  %4 = load i32, i32* %m, align 4, !dbg !55
+  %4 = load i32, ptr %m, align 4, !dbg !55
   ret i32 %4, !dbg !56
 }
 

diff  --git a/llvm/test/Transforms/MergeFunc/mergefunc-struct-return.ll b/llvm/test/Transforms/MergeFunc/mergefunc-struct-return.ll
index d25522201c2e8..4f3ad059577c8 100644
--- a/llvm/test/Transforms/MergeFunc/mergefunc-struct-return.ll
+++ b/llvm/test/Transforms/MergeFunc/mergefunc-struct-return.ll
@@ -5,20 +5,18 @@
 
 target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32"
 
-%kv1 = type { i32*, i32* }
-%kv2 = type { i8*, i8* }
+%kv1 = type { ptr, ptr }
+%kv2 = type { ptr, ptr }
 
 declare void @noop()
 
 define %kv1 @fn1() {
 ; CHECK-LABEL: @fn1(
   %tmp = alloca %kv1
-  %v1 = getelementptr %kv1, %kv1* %tmp, i32 0, i32 0
-  store i32* null, i32** %v1
-  %v2 = getelementptr %kv1, %kv1* %tmp, i32 0, i32 0
-  store i32* null, i32** %v2
+  store ptr null, ptr %tmp
+  store ptr null, ptr %tmp
   call void @noop()
-  %v3 = load %kv1, %kv1* %tmp
+  %v3 = load %kv1, ptr %tmp
   ret %kv1 %v3
 }
 
@@ -26,15 +24,12 @@ define %kv2 @fn2() {
 ; CHECK-LABEL: @fn2(
 ; CHECK: %1 = tail call %kv1 @fn1()
 ; CHECK: %2 = extractvalue %kv1 %1, 0
-; CHECK: %3 = bitcast i32* %2 to i8*
-; CHECK: %4 = insertvalue %kv2 poison, i8* %3, 0
+; CHECK: %3 = insertvalue %kv2 poison, ptr %2, 0
   %tmp = alloca %kv2
-  %v1 = getelementptr %kv2, %kv2* %tmp, i32 0, i32 0
-  store i8* null, i8** %v1
-  %v2 = getelementptr %kv2, %kv2* %tmp, i32 0, i32 0
-  store i8* null, i8** %v2
+  store ptr null, ptr %tmp
+  store ptr null, ptr %tmp
   call void @noop()
 
-  %v3 = load %kv2, %kv2* %tmp
+  %v3 = load %kv2, ptr %tmp
   ret %kv2 %v3
 }

diff  --git a/llvm/test/Transforms/MergeFunc/mismatching-attr-crash.ll b/llvm/test/Transforms/MergeFunc/mismatching-attr-crash.ll
index f00e5f1b635ef..f72c30a561970 100644
--- a/llvm/test/Transforms/MergeFunc/mismatching-attr-crash.ll
+++ b/llvm/test/Transforms/MergeFunc/mismatching-attr-crash.ll
@@ -1,20 +1,18 @@
 ; RUN: opt -S -passes=mergefunc %s | FileCheck %s
 
 ; CHECK-LABEL: define void @foo
-; CHECK: call void %bc
-define void @foo(i8* byval(i8) %a0, i8* swiftself %a4) {
+; CHECK: call void %a0
+define void @foo(ptr byval(i8) %a0, ptr swiftself %a4) {
 entry:
-  %bc = bitcast i8* %a0 to void (i8*, i8*)*
-  call void %bc(i8* byval(i8) %a0, i8* swiftself %a4)
+  call void %a0(ptr byval(i8) %a0, ptr swiftself %a4)
   ret void
 }
 
 ; CHECK-LABEL: define void @bar
-; CHECK: call void %bc
-define void @bar(i8* byval(i8) %a0, i8** swifterror %a4) {
+; CHECK: call void %a0
+define void @bar(ptr byval(i8) %a0, ptr swifterror %a4) {
 entry:
-  %bc = bitcast i8* %a0 to void (i8*, i8**)*
-  call void %bc(i8* byval(i8) %a0, i8** swifterror %a4)
+  call void %a0(ptr byval(i8) %a0, ptr swifterror %a4)
   ret void
 }
 

diff  --git a/llvm/test/Transforms/MergeFunc/no-merge-block-address-
diff erent-labels.ll b/llvm/test/Transforms/MergeFunc/no-merge-block-address-
diff erent-labels.ll
index a7ec0edb212c4..2dd137f50bd3c 100644
--- a/llvm/test/Transforms/MergeFunc/no-merge-block-address-
diff erent-labels.ll
+++ b/llvm/test/Transforms/MergeFunc/no-merge-block-address-
diff erent-labels.ll
@@ -16,39 +16,39 @@ define i32 @_Z1fi(i32 %i) #0 {
 entry:
   %i.addr = alloca i32, align 4
   %ret = alloca i32, align 4
-  %l = alloca i8*, align 8
-  store i32 %i, i32* %i.addr, align 4
-  store i32 0, i32* %ret, align 4
+  %l = alloca ptr, align 8
+  store i32 %i, ptr %i.addr, align 4
+  store i32 0, ptr %ret, align 4
 ; Right here, this is val_0, and later the if might assign val_1
-  store i8* blockaddress(@_Z1fi, %val_0), i8** %l, align 8
-  %0 = load i32, i32* %i.addr, align 4
+  store ptr blockaddress(@_Z1fi, %val_0), ptr %l, align 8
+  %0 = load i32, ptr %i.addr, align 4
   %and = and i32 %0, 256
   %cmp = icmp eq i32 %and, 0
   br i1 %cmp, label %if.then, label %if.end
 
 if.then:
-  store i8* blockaddress(@_Z1fi, %val_1), i8** %l, align 8
+  store ptr blockaddress(@_Z1fi, %val_1), ptr %l, align 8
   br label %if.end
 
 if.end:
-  %1 = load i8*, i8** %l, align 8
+  %1 = load ptr, ptr %l, align 8
   br label %indirectgoto
 
 val_0:
-  store i32 12, i32* %ret, align 4
+  store i32 12, ptr %ret, align 4
   br label %end
 
 val_1:
-  store i32 42, i32* %ret, align 4
+  store i32 42, ptr %ret, align 4
   br label %end
 
 end:
-  %2 = load i32, i32* %ret, align 4
+  %2 = load i32, ptr %ret, align 4
   ret i32 %2
 
 indirectgoto:
-  %indirect.goto.dest = phi i8* [ %1, %if.end ]
-  indirectbr i8* %indirect.goto.dest, [label %val_0, label %val_1]
+  %indirect.goto.dest = phi ptr [ %1, %if.end ]
+  indirectbr ptr %indirect.goto.dest, [label %val_0, label %val_1]
 }
 
 ; Function Attrs: nounwind uwtable
@@ -59,38 +59,38 @@ define i32 @_Z1gi(i32 %i) #0 {
 entry:
   %i.addr = alloca i32, align 4
   %ret = alloca i32, align 4
-  %l = alloca i8*, align 8
-  store i32 %i, i32* %i.addr, align 4
-  store i32 0, i32* %ret, align 4
+  %l = alloca ptr, align 8
+  store i32 %i, ptr %i.addr, align 4
+  store i32 0, ptr %ret, align 4
 ; This time, we store val_1 initially, and later the if might assign val_0
-  store i8* blockaddress(@_Z1gi, %val_1), i8** %l, align 8
-  %0 = load i32, i32* %i.addr, align 4
+  store ptr blockaddress(@_Z1gi, %val_1), ptr %l, align 8
+  %0 = load i32, ptr %i.addr, align 4
   %and = and i32 %0, 256
   %cmp = icmp eq i32 %and, 0
   br i1 %cmp, label %if.then, label %if.end
 
 if.then:
-  store i8* blockaddress(@_Z1gi, %val_0), i8** %l, align 8
+  store ptr blockaddress(@_Z1gi, %val_0), ptr %l, align 8
   br label %if.end
 
 if.end:
-  %1 = load i8*, i8** %l, align 8
+  %1 = load ptr, ptr %l, align 8
   br label %indirectgoto
 
 val_0:
-  store i32 12, i32* %ret, align 4
+  store i32 12, ptr %ret, align 4
   br label %end
 
 val_1:
-  store i32 42, i32* %ret, align 4
+  store i32 42, ptr %ret, align 4
   br label %end
 
 end:
-  %2 = load i32, i32* %ret, align 4
+  %2 = load i32, ptr %ret, align 4
   ret i32 %2
 
 indirectgoto:
-  %indirect.goto.dest = phi i8* [ %1, %if.end ]
-  indirectbr i8* %indirect.goto.dest, [label %val_1, label %val_0]
+  %indirect.goto.dest = phi ptr [ %1, %if.end ]
+  indirectbr ptr %indirect.goto.dest, [label %val_1, label %val_0]
 }
 

diff  --git a/llvm/test/Transforms/MergeFunc/no-merge-block-address-other-function.ll b/llvm/test/Transforms/MergeFunc/no-merge-block-address-other-function.ll
index 2e2c37399381a..6fd368b39e3fc 100644
--- a/llvm/test/Transforms/MergeFunc/no-merge-block-address-other-function.ll
+++ b/llvm/test/Transforms/MergeFunc/no-merge-block-address-other-function.ll
@@ -7,24 +7,24 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
 
-define internal i8* @Afunc(i32* %P) {
+define internal ptr @Afunc(ptr %P) {
 ; CHECK-LABEL: @Afunc
 ; CHECK-NEXT: store
 ; CHECK-NEXT: store
 ; CHECK-NEXT: ret
-  store i32 1, i32* %P
-  store i32 3, i32* %P
-  ret i8* blockaddress(@_Z1fi, %if.then)
+  store i32 1, ptr %P
+  store i32 3, ptr %P
+  ret ptr blockaddress(@_Z1fi, %if.then)
 }
 
-define internal i8* @Bfunc(i32* %P) {
+define internal ptr @Bfunc(ptr %P) {
 ; CHECK-LABEL: @Bfunc
 ; CHECK-NEXT: store
 ; CHECK-NEXT: store
 ; CHECK-NEXT: ret
-  store i32 1, i32* %P
-  store i32 3, i32* %P
-  ret i8* blockaddress(@_Z1fi, %if.then.2)
+  store i32 1, ptr %P
+  store i32 3, ptr %P
+  ret ptr blockaddress(@_Z1fi, %if.then.2)
 }
 
 
@@ -33,29 +33,29 @@ define i32 @_Z1fi(i32 %i) #0 {
 entry:
   %retval = alloca i32, align 4
   %i.addr = alloca i32, align 4
-  store i32 %i, i32* %i.addr, align 4
-  %0 = load i32, i32* %i.addr, align 4
+  store i32 %i, ptr %i.addr, align 4
+  %0 = load i32, ptr %i.addr, align 4
   %cmp = icmp eq i32 %0, 1
   br i1 %cmp, label %if.then, label %if.end
 
 if.then:
-  store i32 3, i32* %retval
+  store i32 3, ptr %retval
   br label %return
 
 if.end:
-  %1 = load i32, i32* %i.addr, align 4
+  %1 = load i32, ptr %i.addr, align 4
   %cmp1 = icmp eq i32 %1, 3
   br i1 %cmp1, label %if.then.2, label %if.end.3
 
 if.then.2:
-  store i32 56, i32* %retval
+  store i32 56, ptr %retval
   br label %return
 
 if.end.3:
-  store i32 0, i32* %retval
+  store i32 0, ptr %retval
   br label %return
 
 return:
-  %2 = load i32, i32* %retval
+  %2 = load i32, ptr %retval
   ret i32 %2
 }

diff  --git a/llvm/test/Transforms/MergeFunc/no-merge-ptr-
diff erent-sizes.ll b/llvm/test/Transforms/MergeFunc/no-merge-ptr-
diff erent-sizes.ll
index ff0ff3d19b8eb..ec57f2e2bfbb9 100644
--- a/llvm/test/Transforms/MergeFunc/no-merge-ptr-
diff erent-sizes.ll
+++ b/llvm/test/Transforms/MergeFunc/no-merge-ptr-
diff erent-sizes.ll
@@ -3,22 +3,22 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 
 ; These should not be merged, as the datalayout says a pointer is 64 bits. No
 ; sext/zext is specified, so these functions could lower 
diff erently.
-define internal i32 @Ffunc(i32* %P, i32* %Q) {
+define internal i32 @Ffunc(ptr %P, ptr %Q) {
 ; CHECK-LABEL: define internal i32 @Ffunc
 ; CHECK-NEXT: store
 ; CHECK-NEXT: store
 ; CHECK-NEXT: ret
-  store i32 1, i32* %P
-  store i32 3, i32* %Q
+  store i32 1, ptr %P
+  store i32 3, ptr %Q
   ret i32 0
 }
 
-define internal i64* @Gfunc(i32* %P, i32* %Q) {
-; CHECK-LABEL: define internal i64* @Gfunc
+define internal ptr @Gfunc(ptr %P, ptr %Q) {
+; CHECK-LABEL: define internal ptr @Gfunc
 ; CHECK-NEXT: store
 ; CHECK-NEXT: store
 ; CHECK-NEXT: ret
-  store i32 1, i32* %P
-  store i32 3, i32* %Q
-  ret i64* null
+  store i32 1, ptr %P
+  store i32 3, ptr %Q
+  ret ptr null
 }

diff  --git a/llvm/test/Transforms/MergeFunc/no-merge-ptr-int-
diff erent-values.ll b/llvm/test/Transforms/MergeFunc/no-merge-ptr-int-
diff erent-values.ll
index 81c492c73754f..ba4a301e0ccd4 100644
--- a/llvm/test/Transforms/MergeFunc/no-merge-ptr-int-
diff erent-values.ll
+++ b/llvm/test/Transforms/MergeFunc/no-merge-ptr-int-
diff erent-values.ll
@@ -2,22 +2,22 @@
 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-S128"
 
 ; These should not be merged, as 1 != 0.
-define internal i64 @Ifunc(i32* %P, i32* %Q) {
+define internal i64 @Ifunc(ptr %P, ptr %Q) {
 ; CHECK-LABEL: define internal i64 @Ifunc
 ; CHECK-NEXT: store
 ; CHECK-NEXT: store
 ; CHECK-NEXT: ret
-  store i32 10, i32* %P
-  store i32 10, i32* %Q
+  store i32 10, ptr %P
+  store i32 10, ptr %Q
   ret i64 1
 }
 
-define internal i64* @Jfunc(i32* %P, i32* %Q) {
-; CHECK-LABEL: define internal i64* @Jfunc
+define internal ptr @Jfunc(ptr %P, ptr %Q) {
+; CHECK-LABEL: define internal ptr @Jfunc
 ; CHECK-NEXT: store
 ; CHECK-NEXT: store
 ; CHECK-NEXT: ret
-  store i32 10, i32* %P
-  store i32 10, i32* %Q
-  ret i64* null
+  store i32 10, ptr %P
+  store i32 10, ptr %Q
+  ret ptr null
 }

diff  --git a/llvm/test/Transforms/MergeFunc/nonzero-address-spaces.ll b/llvm/test/Transforms/MergeFunc/nonzero-address-spaces.ll
index 72b633a04312b..0ab662b6d6b29 100644
--- a/llvm/test/Transforms/MergeFunc/nonzero-address-spaces.ll
+++ b/llvm/test/Transforms/MergeFunc/nonzero-address-spaces.ll
@@ -17,10 +17,10 @@ entry:
 }
 
 ; CHECK-LABEL: @f1(
-; CHECK: ptrtoint i64*
+; CHECK: ptrtoint ptr
 ; CHECK: tail call addrspace(1) void @f0(i64
 
-define void @f1(i64* %p0) {
+define void @f1(ptr %p0) {
 entry:
   call void @stuff()
   call void @stuff()

diff  --git a/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-1.ll b/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-1.ll
index 9bf248d0d4101..b21d6f69aac0a 100644
--- a/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-1.ll
+++ b/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-1.ll
@@ -11,7 +11,7 @@ entry:
   ret void
 }
 
-define void @f2(i64 addrspace(1)* %p0) {
+define void @f2(ptr addrspace(1) %p0) {
 entry:
   call void @stuff()
   call void @stuff()

diff  --git a/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-2.ll b/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-2.ll
index 46e8df4fafd35..5b3c81868a8d5 100644
--- a/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-2.ll
+++ b/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-2.ll
@@ -12,10 +12,10 @@ entry:
 }
 
 ; CHECK-LABEL: @f0
-; CHECK:  %2 = ptrtoint i64* %0 to i64
+; CHECK:  %2 = ptrtoint ptr %0 to i64
 ; CHECK:  tail call void @f0(i64 %2)
 ; CHECK:  ret void
-define void @f1(i64 addrspace(0)* %p0) {
+define void @f1(ptr addrspace(0) %p0) {
 entry:
   call void @stuff()
   call void @stuff()

diff  --git a/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-3.ll b/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-3.ll
index 1c5679a30309b..66fb5c182495e 100644
--- a/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-3.ll
+++ b/llvm/test/Transforms/MergeFunc/ptr-int-transitivity-3.ll
@@ -3,7 +3,7 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 
 declare void @stuff()
 
-define void @f0(i64 addrspace(0)* %p0) {
+define void @f0(ptr addrspace(0) %p0) {
 entry:
   call void @stuff()
   call void @stuff()
@@ -11,7 +11,7 @@ entry:
   ret void
 }
 
-define void @f2(i64 addrspace(1)* %p0) {
+define void @f2(ptr addrspace(1) %p0) {
 entry:
   call void @stuff()
   call void @stuff()

diff  --git a/llvm/test/Transforms/MergeFunc/ranges-multiple.ll b/llvm/test/Transforms/MergeFunc/ranges-multiple.ll
index 801387253d28f..181c084e9cf9c 100644
--- a/llvm/test/Transforms/MergeFunc/ranges-multiple.ll
+++ b/llvm/test/Transforms/MergeFunc/ranges-multiple.ll
@@ -1,40 +1,40 @@
 ; RUN: opt -passes=mergefunc -S < %s | FileCheck %s
-define i1 @cmp_with_range(i8*, i8*) {
-  %v1 = load i8, i8* %0, !range !0
-  %v2 = load i8, i8* %1, !range !0
+define i1 @cmp_with_range(ptr, ptr) {
+  %v1 = load i8, ptr %0, !range !0
+  %v2 = load i8, ptr %1, !range !0
   %out = icmp eq i8 %v1, %v2
   ret i1 %out
 }
 
-define i1 @cmp_no_range(i8*, i8*) {
+define i1 @cmp_no_range(ptr, ptr) {
 ; CHECK-LABEL: @cmp_no_range
-; CHECK-NEXT: %v1 = load i8, i8* %0
-; CHECK-NEXT:  %v2 = load i8, i8* %1
+; CHECK-NEXT: %v1 = load i8, ptr %0
+; CHECK-NEXT:  %v2 = load i8, ptr %1
 ; CHECK-NEXT:  %out = icmp eq i8 %v1, %v2
 ; CHECK-NEXT:  ret i1 %out
-  %v1 = load i8, i8* %0
-  %v2 = load i8, i8* %1
+  %v1 = load i8, ptr %0
+  %v2 = load i8, ptr %1
   %out = icmp eq i8 %v1, %v2
   ret i1 %out
 }
 
-define i1 @cmp_
diff erent_range(i8*, i8*) {
+define i1 @cmp_
diff erent_range(ptr, ptr) {
 ; CHECK-LABEL: @cmp_
diff erent_range
-; CHECK-NEXT:  %v1 = load i8, i8* %0, align 1, !range !1
-; CHECK-NEXT:  %v2 = load i8, i8* %1, align 1, !range !1
+; CHECK-NEXT:  %v1 = load i8, ptr %0, align 1, !range !1
+; CHECK-NEXT:  %v2 = load i8, ptr %1, align 1, !range !1
 ; CHECK-NEXT:  %out = icmp eq i8 %v1, %v2
 ; CHECK-NEXT:  ret i1 %out
-  %v1 = load i8, i8* %0, !range !1
-  %v2 = load i8, i8* %1, !range !1
+  %v1 = load i8, ptr %0, !range !1
+  %v2 = load i8, ptr %1, !range !1
   %out = icmp eq i8 %v1, %v2
   ret i1 %out
 }
 
-define i1 @cmp_with_same_range(i8*, i8*) {
+define i1 @cmp_with_same_range(ptr, ptr) {
 ; CHECK-LABEL: @cmp_with_same_range
 ; CHECK: tail call i1 @cmp_with_range
-  %v1 = load i8, i8* %0, !range !0
-  %v2 = load i8, i8* %1, !range !0
+  %v1 = load i8, ptr %0, !range !0
+  %v2 = load i8, ptr %1, !range !0
   %out = icmp eq i8 %v1, %v2
   ret i1 %out
 }

diff  --git a/llvm/test/Transforms/MergeFunc/ranges.ll b/llvm/test/Transforms/MergeFunc/ranges.ll
index 039467bae798e..94ed8eb7b0b07 100644
--- a/llvm/test/Transforms/MergeFunc/ranges.ll
+++ b/llvm/test/Transforms/MergeFunc/ranges.ll
@@ -1,40 +1,40 @@
 ; RUN: opt -passes=mergefunc -S < %s | FileCheck %s
-define i1 @cmp_with_range(i8*, i8*) {
-  %v1 = load i8, i8* %0, !range !0
-  %v2 = load i8, i8* %1, !range !0
+define i1 @cmp_with_range(ptr, ptr) {
+  %v1 = load i8, ptr %0, !range !0
+  %v2 = load i8, ptr %1, !range !0
   %out = icmp eq i8 %v1, %v2
   ret i1 %out
 }
 
-define i1 @cmp_no_range(i8*, i8*) {
+define i1 @cmp_no_range(ptr, ptr) {
 ; CHECK-LABEL: @cmp_no_range
-; CHECK-NEXT: %v1 = load i8, i8* %0
-; CHECK-NEXT:  %v2 = load i8, i8* %1
+; CHECK-NEXT: %v1 = load i8, ptr %0
+; CHECK-NEXT:  %v2 = load i8, ptr %1
 ; CHECK-NEXT:  %out = icmp eq i8 %v1, %v2
 ; CHECK-NEXT:  ret i1 %out
-  %v1 = load i8, i8* %0
-  %v2 = load i8, i8* %1
+  %v1 = load i8, ptr %0
+  %v2 = load i8, ptr %1
   %out = icmp eq i8 %v1, %v2
   ret i1 %out
 }
 
-define i1 @cmp_
diff erent_range(i8*, i8*) {
+define i1 @cmp_
diff erent_range(ptr, ptr) {
 ; CHECK-LABEL: @cmp_
diff erent_range
-; CHECK-NEXT:  %v1 = load i8, i8* %0, align 1, !range !1
-; CHECK-NEXT:  %v2 = load i8, i8* %1, align 1, !range !1
+; CHECK-NEXT:  %v1 = load i8, ptr %0, align 1, !range !1
+; CHECK-NEXT:  %v2 = load i8, ptr %1, align 1, !range !1
 ; CHECK-NEXT:  %out = icmp eq i8 %v1, %v2
 ; CHECK-NEXT:  ret i1 %out
-  %v1 = load i8, i8* %0, !range !1
-  %v2 = load i8, i8* %1, !range !1
+  %v1 = load i8, ptr %0, !range !1
+  %v2 = load i8, ptr %1, !range !1
   %out = icmp eq i8 %v1, %v2
   ret i1 %out
 }
 
-define i1 @cmp_with_same_range(i8*, i8*) {
+define i1 @cmp_with_same_range(ptr, ptr) {
 ; CHECK-LABEL: @cmp_with_same_range
 ; CHECK: tail call i1 @cmp_with_range
-  %v1 = load i8, i8* %0, !range !0
-  %v2 = load i8, i8* %1, !range !0
+  %v1 = load i8, ptr %0, !range !0
+  %v2 = load i8, ptr %1, !range !0
   %out = icmp eq i8 %v1, %v2
   ret i1 %out
 }

diff  --git a/llvm/test/Transforms/MergeFunc/self-referential-global.ll b/llvm/test/Transforms/MergeFunc/self-referential-global.ll
index 20cffe84e59ca..f7a65dc05372c 100644
--- a/llvm/test/Transforms/MergeFunc/self-referential-global.ll
+++ b/llvm/test/Transforms/MergeFunc/self-referential-global.ll
@@ -1,14 +1,14 @@
 ; RUN: opt -passes=mergefunc -disable-output < %s
 
 ; A linked list type and simple payload
-%LL = type { %S, %LL* }
-%S = type { void (%S*, i32)* }
+%LL = type { %S, ptr }
+%S = type { ptr }
 
 ; Table refers to itself via GEP
- at Table = internal global [3 x %LL] [%LL { %S { void (%S*, i32)* @B }, %LL* getelementptr inbounds ([3 x %LL], [3 x %LL]* @Table, i32 0, i32 0) }, %LL { %S { void (%S*, i32)* @A }, %LL* getelementptr inbounds ([3 x %LL], [3 x %LL]* @Table, i32 0, i32 0) }, %LL { %S { void (%S*, i32)* @A }, %LL* getelementptr inbounds ([3 x %LL], [3 x %LL]* @Table, i32 0, i32 0) }], align 16
+ at Table = internal global [3 x %LL] [%LL { %S { ptr @B }, ptr @Table }, %LL { %S { ptr @A }, ptr @Table }, %LL { %S { ptr @A }, ptr @Table }], align 16
 
 ; The body of this is irrelevant; it is long so that mergefunc doesn't skip it as a small function.
-define internal void @A(%S* %self, i32 %a) {
+define internal void @A(ptr %self, i32 %a) {
   %1 = add i32 %a, 32
   %2 = add i32 %1, 32
   %3 = add i32 %2, 32
@@ -23,7 +23,7 @@ define internal void @A(%S* %self, i32 %a) {
   ret void
 }
 
-define internal void @B(%S* %self, i32 %a) {
+define internal void @B(ptr %self, i32 %a) {
   %1 = add i32 %a, 32
   %2 = add i32 %1, 32
   %3 = add i32 %2, 32

diff  --git a/llvm/test/Transforms/MergeFunc/undef-
diff erent-types.ll b/llvm/test/Transforms/MergeFunc/undef-
diff erent-types.ll
index 4cef4d5fee812..12b1b8ed8a7f9 100644
--- a/llvm/test/Transforms/MergeFunc/undef-
diff erent-types.ll
+++ b/llvm/test/Transforms/MergeFunc/undef-
diff erent-types.ll
@@ -6,16 +6,16 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 ; both return undef. They should be merged. Note undef cannot be merged with
 ; anything else, because this implies the ordering will be inconsistent (i.e.
 ; -1 == undef and undef == 1, but -1 < 1, so we must have undef != <any int>).
-define internal i64 @Cfunc(i32* %P, i32* %Q) {
+define internal i64 @Cfunc(ptr %P, ptr %Q) {
 ; CHECK-LABEL: define internal i64 @Cfunc
-  store i32 4, i32* %P
-  store i32 6, i32* %Q
+  store i32 4, ptr %P
+  store i32 6, ptr %Q
   ret i64 undef
 }
 
-define internal i64* @Dfunc(i32* %P, i32* %Q) {
+define internal ptr @Dfunc(ptr %P, ptr %Q) {
 ; MERGE-NOT: @Dfunc
-  store i32 4, i32* %P
-  store i32 6, i32* %Q
-  ret i64* undef
+  store i32 4, ptr %P
+  store i32 6, ptr %Q
+  ret ptr undef
 }

diff  --git a/llvm/test/Transforms/MergeFunc/va_arg.ll b/llvm/test/Transforms/MergeFunc/va_arg.ll
index fd42dff1bef9e..005cf37c9945c 100644
--- a/llvm/test/Transforms/MergeFunc/va_arg.ll
+++ b/llvm/test/Transforms/MergeFunc/va_arg.ll
@@ -4,90 +4,84 @@
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
-; ALIAS: @_Z9simple_vaPKcz = unnamed_addr alias void (i8*, ...), void (i8*, ...)* @_Z10simple_va2PKcz
+; ALIAS: @_Z9simple_vaPKcz = unnamed_addr alias void (ptr, ...), ptr @_Z10simple_va2PKcz
 ; ALIAS-NOT: @_Z9simple_vaPKcz
 
-%struct.__va_list_tag = type { i32, i32, i8*, i8* }
+%struct.__va_list_tag = type { i32, i32, ptr, ptr }
 
 ; CHECK-LABEL: define {{.*}}@_Z9simple_vaPKcz
 ; CHECK: call void @llvm.va_start
 ; CHECK: call void @llvm.va_end
-define dso_local void @_Z9simple_vaPKcz(i8* nocapture readnone, ...) unnamed_addr {
+define dso_local void @_Z9simple_vaPKcz(ptr nocapture readnone, ...) unnamed_addr {
   %2 = alloca [1 x %struct.__va_list_tag], align 16
-  %3 = bitcast [1 x %struct.__va_list_tag]* %2 to i8*
-  call void @llvm.va_start(i8* nonnull %3)
-  %4 = getelementptr inbounds [1 x %struct.__va_list_tag], [1 x %struct.__va_list_tag]* %2, i64 0, i64 0, i32 0
-  %5 = load i32, i32* %4, align 16
-  %6 = icmp ult i32 %5, 41
-  br i1 %6, label %7, label %13
+  call void @llvm.va_start(ptr nonnull %2)
+  %3 = load i32, ptr %2, align 16
+  %4 = icmp ult i32 %3, 41
+  br i1 %4, label %5, label %11
 
 ; <label>:7:                                      ; preds = %1
-  %8 = getelementptr inbounds [1 x %struct.__va_list_tag], [1 x %struct.__va_list_tag]* %2, i64 0, i64 0, i32 3
-  %9 = load i8*, i8** %8, align 16
-  %10 = sext i32 %5 to i64
-  %11 = getelementptr i8, i8* %9, i64 %10
-  %12 = add i32 %5, 8
-  store i32 %12, i32* %4, align 16
-  br label %17
+  %6 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %2, i64 0, i64 0, i32 3
+  %7 = load ptr, ptr %6, align 16
+  %8 = sext i32 %3 to i64
+  %9 = getelementptr i8, ptr %7, i64 %8
+  %10 = add i32 %3, 8
+  store i32 %10, ptr %2, align 16
+  br label %15
 
 ; <label>:13:                                     ; preds = %1
-  %14 = getelementptr inbounds [1 x %struct.__va_list_tag], [1 x %struct.__va_list_tag]* %2, i64 0, i64 0, i32 2
-  %15 = load i8*, i8** %14, align 8
-  %16 = getelementptr i8, i8* %15, i64 8
-  store i8* %16, i8** %14, align 8
-  br label %17
+  %12 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %2, i64 0, i64 0, i32 2
+  %13 = load ptr, ptr %12, align 8
+  %14 = getelementptr i8, ptr %13, i64 8
+  store ptr %14, ptr %12, align 8
+  br label %15
 
-; <label>:17:                                     ; preds = %13, %7
-  %18 = phi i8* [ %11, %7 ], [ %15, %13 ]
-  %19 = bitcast i8* %18 to i32*
-  %20 = load i32, i32* %19, align 4
-  call void @_Z6escapei(i32 %20)
-  call void @llvm.va_end(i8* nonnull %3)
+; <label>:17:                                     ; preds = %11, %5
+  %16 = phi ptr [ %9, %5 ], [ %13, %11 ]
+  %17 = load i32, ptr %16, align 4
+  call void @_Z6escapei(i32 %17)
+  call void @llvm.va_end(ptr nonnull %2)
   ret void
 }
 
 ; Function Attrs: nounwind
-declare void @llvm.va_start(i8*)
+declare void @llvm.va_start(ptr)
 
 ; Function Attrs: minsize optsize
 declare dso_local void @_Z6escapei(i32) local_unnamed_addr
 
 ; Function Attrs: nounwind
-declare void @llvm.va_end(i8*)
+declare void @llvm.va_end(ptr)
 
 ; CHECK-LABEL: define {{.*}}@_Z10simple_va2PKcz
 ; CHECK: call void @llvm.va_start
 ; CHECK: call void @llvm.va_end
-define dso_local void @_Z10simple_va2PKcz(i8* nocapture readnone, ...) unnamed_addr {
+define dso_local void @_Z10simple_va2PKcz(ptr nocapture readnone, ...) unnamed_addr {
   %2 = alloca [1 x %struct.__va_list_tag], align 16
-  %3 = bitcast [1 x %struct.__va_list_tag]* %2 to i8*
-  call void @llvm.va_start(i8* nonnull %3)
-  %4 = getelementptr inbounds [1 x %struct.__va_list_tag], [1 x %struct.__va_list_tag]* %2, i64 0, i64 0, i32 0
-  %5 = load i32, i32* %4, align 16
-  %6 = icmp ult i32 %5, 41
-  br i1 %6, label %7, label %13
+  call void @llvm.va_start(ptr nonnull %2)
+  %3 = load i32, ptr %2, align 16
+  %4 = icmp ult i32 %3, 41
+  br i1 %4, label %5, label %11
 
 ; <label>:7:                                      ; preds = %1
-  %8 = getelementptr inbounds [1 x %struct.__va_list_tag], [1 x %struct.__va_list_tag]* %2, i64 0, i64 0, i32 3
-  %9 = load i8*, i8** %8, align 16
-  %10 = sext i32 %5 to i64
-  %11 = getelementptr i8, i8* %9, i64 %10
-  %12 = add i32 %5, 8
-  store i32 %12, i32* %4, align 16
-  br label %17
+  %6 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %2, i64 0, i64 0, i32 3
+  %7 = load ptr, ptr %6, align 16
+  %8 = sext i32 %3 to i64
+  %9 = getelementptr i8, ptr %7, i64 %8
+  %10 = add i32 %3, 8
+  store i32 %10, ptr %2, align 16
+  br label %15
 
 ; <label>:13:                                     ; preds = %1
-  %14 = getelementptr inbounds [1 x %struct.__va_list_tag], [1 x %struct.__va_list_tag]* %2, i64 0, i64 0, i32 2
-  %15 = load i8*, i8** %14, align 8
-  %16 = getelementptr i8, i8* %15, i64 8
-  store i8* %16, i8** %14, align 8
-  br label %17
+  %12 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %2, i64 0, i64 0, i32 2
+  %13 = load ptr, ptr %12, align 8
+  %14 = getelementptr i8, ptr %13, i64 8
+  store ptr %14, ptr %12, align 8
+  br label %15
 
-; <label>:17:                                     ; preds = %13, %7
-  %18 = phi i8* [ %11, %7 ], [ %15, %13 ]
-  %19 = bitcast i8* %18 to i32*
-  %20 = load i32, i32* %19, align 4
-  call void @_Z6escapei(i32 %20)
-  call void @llvm.va_end(i8* nonnull %3)
+; <label>:17:                                     ; preds = %11, %5
+  %16 = phi ptr [ %9, %5 ], [ %13, %11 ]
+  %17 = load i32, ptr %16, align 4
+  call void @_Z6escapei(i32 %17)
+  call void @llvm.va_end(ptr nonnull %2)
   ret void
 }

diff  --git a/llvm/test/Transforms/MergeFunc/vector-GEP-crash.ll b/llvm/test/Transforms/MergeFunc/vector-GEP-crash.ll
index a8cc115ea581f..050190f5780f7 100644
--- a/llvm/test/Transforms/MergeFunc/vector-GEP-crash.ll
+++ b/llvm/test/Transforms/MergeFunc/vector-GEP-crash.ll
@@ -1,12 +1,12 @@
 ; RUN: opt -passes=mergefunc -disable-output < %s
 ; This used to cause a crash when compairing the GEPs
 
-define void @foo(<2 x i64*>) {
-  %tmp = getelementptr i64, <2 x i64*> %0, <2 x i64> <i64 0, i64 0>
+define void @foo(<2 x ptr>) {
+  %tmp = getelementptr i64, <2 x ptr> %0, <2 x i64> <i64 0, i64 0>
   ret void
 }
 
-define void @bar(<2 x i64*>) {
-  %tmp = getelementptr i64, <2 x i64*> %0, <2 x i64> <i64 0, i64 0>
+define void @bar(<2 x ptr>) {
+  %tmp = getelementptr i64, <2 x ptr> %0, <2 x i64> <i64 0, i64 0>
   ret void
 }

diff  --git a/llvm/test/Transforms/MergeFunc/vector.ll b/llvm/test/Transforms/MergeFunc/vector.ll
index ae63be756c227..6f18b81facfcd 100644
--- a/llvm/test/Transforms/MergeFunc/vector.ll
+++ b/llvm/test/Transforms/MergeFunc/vector.ll
@@ -4,49 +4,45 @@
 ; This test is checks whether we can merge
 ;   vector<intptr_t>::push_back(0)
 ; and
-;   vector<void *>::push_back(0)
+;   vector<ptr>::push_back(0)
 ; .
 
 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-unknown-linux-gnu"
 
-%0 = type { i32, void ()*, i8* }
+%0 = type { i32, ptr, ptr }
 %1 = type { i64, i1 }
 %"class.std::vector" = type { [24 x i8] }
 
 @vi = global %"class.std::vector" zeroinitializer, align 8
- at __dso_handle = external unnamed_addr global i8*
+ at __dso_handle = external unnamed_addr global ptr
 @vp = global %"class.std::vector" zeroinitializer, align 8
- at llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, void ()* @_GLOBAL__I_a, i8* null }]
+ at llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, ptr @_GLOBAL__I_a, ptr null }]
 
-define linkonce_odr void @_ZNSt6vectorIlSaIlEED1Ev(%"class.std::vector"* nocapture %this) unnamed_addr align 2 {
+define linkonce_odr void @_ZNSt6vectorIlSaIlEED1Ev(ptr nocapture %this) unnamed_addr align 2 {
 entry:
-  %tmp2.i.i = bitcast %"class.std::vector"* %this to i64**
-  %tmp3.i.i = load i64*, i64** %tmp2.i.i, align 8
-  %tobool.i.i.i = icmp eq i64* %tmp3.i.i, null
+  %tmp3.i.i = load ptr, ptr %this, align 8
+  %tobool.i.i.i = icmp eq ptr %tmp3.i.i, null
   br i1 %tobool.i.i.i, label %_ZNSt6vectorIlSaIlEED2Ev.exit, label %if.then.i.i.i
 
 if.then.i.i.i:                                    ; preds = %entry
-  %0 = bitcast i64* %tmp3.i.i to i8*
-  tail call void @_ZdlPv(i8* %0) nounwind
+  tail call void @_ZdlPv(ptr %tmp3.i.i) nounwind
   ret void
 
 _ZNSt6vectorIlSaIlEED2Ev.exit:                    ; preds = %entry
   ret void
 }
 
-declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*)
+declare i32 @__cxa_atexit(ptr, ptr, ptr)
 
-define linkonce_odr void @_ZNSt6vectorIPvSaIS0_EED1Ev(%"class.std::vector"* nocapture %this) unnamed_addr align 2 {
+define linkonce_odr void @_ZNSt6vectorIPvSaIS0_EED1Ev(ptr nocapture %this) unnamed_addr align 2 {
 entry:
-  %tmp2.i.i = bitcast %"class.std::vector"* %this to i8***
-  %tmp3.i.i = load i8**, i8*** %tmp2.i.i, align 8
-  %tobool.i.i.i = icmp eq i8** %tmp3.i.i, null
+  %tmp3.i.i = load ptr, ptr %this, align 8
+  %tobool.i.i.i = icmp eq ptr %tmp3.i.i, null
   br i1 %tobool.i.i.i, label %_ZNSt6vectorIPvSaIS0_EED2Ev.exit, label %if.then.i.i.i
 
 if.then.i.i.i:                                    ; preds = %entry
-  %0 = bitcast i8** %tmp3.i.i to i8*
-  tail call void @_ZdlPv(i8* %0) nounwind
+  tail call void @_ZdlPv(ptr %tmp3.i.i) nounwind
   ret void
 
 _ZNSt6vectorIPvSaIS0_EED2Ev.exit:                 ; preds = %entry
@@ -55,18 +51,18 @@ _ZNSt6vectorIPvSaIS0_EED2Ev.exit:                 ; preds = %entry
 
 declare void @_Z1fv()
 
-declare void @_ZNSt6vectorIPvSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_(%"class.std::vector"* nocapture %this, i8** %__position.coerce, i8** nocapture %__x) align 2
+declare void @_ZNSt6vectorIPvSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_(ptr nocapture %this, ptr %__position.coerce, ptr nocapture %__x) align 2
 
-declare void @_ZdlPv(i8*) nounwind
+declare void @_ZdlPv(ptr) nounwind
 
-declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1) nounwind
+declare void @llvm.memmove.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1) nounwind
 
 declare void @_ZSt17__throw_bad_allocv() noreturn
 
-declare noalias i8* @_Znwm(i64)
+declare noalias ptr @_Znwm(i64)
 
-declare void @_ZNSt6vectorIlSaIlEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPlS1_EERKl(%"class.std::vector"* nocapture %this, i64* %__position.coerce, i64* nocapture %__x) align 2
+declare void @_ZNSt6vectorIlSaIlEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPlS1_EERKl(ptr nocapture %this, ptr %__position.coerce, ptr nocapture %__x) align 2
 
 declare void @_GLOBAL__I_a()
 
-declare %1 @llvm.uadd.with.overflow.i64(i64, i64) nounwind readnone
+declare %0 @llvm.uadd.with.overflow.i64(i64, i64) nounwind readnone

diff  --git a/llvm/test/Transforms/MergeFunc/weak-small.ll b/llvm/test/Transforms/MergeFunc/weak-small.ll
index 067f45b7a0b8b..3d5dd20b1dea1 100644
--- a/llvm/test/Transforms/MergeFunc/weak-small.ll
+++ b/llvm/test/Transforms/MergeFunc/weak-small.ll
@@ -2,15 +2,15 @@
 
 ; Weak functions too small for merging to be profitable
 
-; CHECK: define weak i32 @foo(i8* %0, i32 %1)
+; CHECK: define weak i32 @foo(ptr %0, i32 %1)
 ; CHECK-NEXT: ret i32 %1
-; CHECK: define weak i32 @bar(i8* %0, i32 %1)
+; CHECK: define weak i32 @bar(ptr %0, i32 %1)
 ; CHECK-NEXT: ret i32 %1
 
-define weak i32 @foo(i8* %0, i32 %1) #0 {
+define weak i32 @foo(ptr %0, i32 %1) #0 {
     ret i32 %1
 }
 
-define weak i32 @bar(i8* %0, i32 %1) #0 {
+define weak i32 @bar(ptr %0, i32 %1) #0 {
     ret i32 %1
 }


        


More information about the llvm-commits mailing list