[llvm] 4f4787e - [Attributor] Convert some tests to opaque pointers (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 23 00:56:24 PST 2022


Author: Nikita Popov
Date: 2022-12-23T09:56:14+01:00
New Revision: 4f4787e3f64c2ba79c938fe561c53616bdb675f2

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

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

These were converted without adjustments.

Added: 
    

Modified: 
    llvm/test/Transforms/Attributor/ArgumentPromotion/2008-02-01-ReturnAttrs.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/2008-07-02-array-indexing.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-07-CGUpdate.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/aggregate-promote.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/alignment.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/alloca-as.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/array.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/basictest.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/chained.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/control-flow.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/control-flow2.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/crash.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/dbg.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/inalloca.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/invalidation.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/naked_functions.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/nonzero-address-spaces.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/pr27568.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/pr32917.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/profile.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/reserve-tbaa.ll
    llvm/test/Transforms/Attributor/ArgumentPromotion/variadic.ll
    llvm/test/Transforms/Attributor/IPConstantProp/PR26044.ll
    llvm/test/Transforms/Attributor/IPConstantProp/PR43857.ll
    llvm/test/Transforms/Attributor/IPConstantProp/dangling-block-address.ll
    llvm/test/Transforms/Attributor/IPConstantProp/global.ll
    llvm/test/Transforms/Attributor/IPConstantProp/multiple_callbacks.ll
    llvm/test/Transforms/Attributor/IPConstantProp/musttail-call.ll
    llvm/test/Transforms/Attributor/IPConstantProp/openmp_parallel_for.ll
    llvm/test/Transforms/Attributor/IPConstantProp/pthreads.ll
    llvm/test/Transforms/Attributor/IPConstantProp/return-argument.ll
    llvm/test/Transforms/Attributor/IPConstantProp/return-constant.ll
    llvm/test/Transforms/Attributor/IPConstantProp/thread_local_acs.ll
    llvm/test/Transforms/Attributor/alwaysinline.ll
    llvm/test/Transforms/Attributor/callbacks.ll
    llvm/test/Transforms/Attributor/callgraph.ll
    llvm/test/Transforms/Attributor/cgscc_bugs.ll
    llvm/test/Transforms/Attributor/depgraph.ll
    llvm/test/Transforms/Attributor/internal-noalias.ll
    llvm/test/Transforms/Attributor/lowerheap.ll
    llvm/test/Transforms/Attributor/memory_locations.ll
    llvm/test/Transforms/Attributor/multiple-offsets-pointer-info.ll
    llvm/test/Transforms/Attributor/nocapture-1.ll
    llvm/test/Transforms/Attributor/nonnull.ll
    llvm/test/Transforms/Attributor/noreturn_async.ll
    llvm/test/Transforms/Attributor/noreturn_sync.ll
    llvm/test/Transforms/Attributor/noundef.ll
    llvm/test/Transforms/Attributor/nounwind.ll
    llvm/test/Transforms/Attributor/openmp_parallel.ll
    llvm/test/Transforms/Attributor/pointer-info.ll
    llvm/test/Transforms/Attributor/range.ll
    llvm/test/Transforms/Attributor/read_write_returned_arguments_scc.ll
    llvm/test/Transforms/Attributor/readattrs.ll
    llvm/test/Transforms/Attributor/reduced/register_benchmark_test.ll
    llvm/test/Transforms/Attributor/undefined_behavior.ll
    llvm/test/Transforms/Attributor/value-simplify-assume.ll
    llvm/test/Transforms/Attributor/value-simplify-gpu.ll
    llvm/test/Transforms/Attributor/value-simplify-instances.ll
    llvm/test/Transforms/Attributor/value-simplify.ll
    llvm/test/Transforms/Attributor/wrapper.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-02-01-ReturnAttrs.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-02-01-ReturnAttrs.ll
index 771e2b8a91268..9147ec8b866ef 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-02-01-ReturnAttrs.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-02-01-ReturnAttrs.ll
@@ -2,18 +2,18 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal  -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=11 -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 
-define internal i32 @deref(i32* %x) nounwind {
+define internal i32 @deref(ptr %x) nounwind {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@deref
 ; CGSCC-SAME: (i32 [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[X_PRIV:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 [[TMP0]], i32* [[X_PRIV]], align 4
-; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, i32* [[X_PRIV]], align 4
+; CGSCC-NEXT:    store i32 [[TMP0]], ptr [[X_PRIV]], align 4
+; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, ptr [[X_PRIV]], align 4
 ; CGSCC-NEXT:    ret i32 [[TMP2]]
 ;
 entry:
-  %tmp2 = load i32, i32* %x, align 4
+  %tmp2 = load i32, ptr %x, align 4
   ret i32 %tmp2
 }
 
@@ -23,7 +23,7 @@ define i32 @f(i32 %x) {
 ; TUNIT-SAME: (i32 returned [[X:%.*]]) #[[ATTR0:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[X_ADDR:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    store i32 [[X]], i32* [[X_ADDR]], align 4
+; TUNIT-NEXT:    store i32 [[X]], ptr [[X_ADDR]], align 4
 ; TUNIT-NEXT:    ret i32 [[X]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
@@ -31,14 +31,14 @@ define i32 @f(i32 %x) {
 ; CGSCC-SAME: (i32 [[X:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[X_ADDR:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 [[X]], i32* [[X_ADDR]], align 4
+; CGSCC-NEXT:    store i32 [[X]], ptr [[X_ADDR]], align 4
 ; CGSCC-NEXT:    [[TMP1:%.*]] = call i32 @deref(i32 [[X]]) #[[ATTR2:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 [[TMP1]]
 ;
 entry:
   %x_addr = alloca i32
-  store i32 %x, i32* %x_addr, align 4
-  %tmp1 = call i32 @deref( i32* %x_addr ) nounwind
+  store i32 %x, ptr %x_addr, align 4
+  %tmp1 = call i32 @deref( ptr %x_addr ) nounwind
   ret i32 %tmp1
 }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-07-02-array-indexing.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-07-02-array-indexing.ll
index 553ba1c633de8..e1f7975bf184d 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-07-02-array-indexing.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-07-02-array-indexing.ll
@@ -5,24 +5,24 @@
 
 ; This test tries to convince CHECK about promoting the load from %A + 2,
 ; because there is a load of %A in the entry block
-define internal i32 @callee(i1 %C, i32* %A) {
+define internal i32 @callee(i1 %C, ptr %A) {
 ;
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; CHECK-LABEL: define {{[^@]+}}@callee
-; CHECK-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A_0:%.*]] = load i32, i32* [[A]], align 4
+; CHECK-NEXT:    [[A_0:%.*]] = load i32, ptr [[A]], align 4
 ; CHECK-NEXT:    br label [[F:%.*]]
 ; CHECK:       T:
 ; CHECK-NEXT:    unreachable
 ; CHECK:       F:
-; CHECK-NEXT:    [[A_2:%.*]] = getelementptr i32, i32* [[A]], i32 2
-; CHECK-NEXT:    [[R:%.*]] = load i32, i32* [[A_2]], align 4
+; CHECK-NEXT:    [[A_2:%.*]] = getelementptr i32, ptr [[A]], i32 2
+; CHECK-NEXT:    [[R:%.*]] = load i32, ptr [[A_2]], align 4
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
 entry:
   ; Unconditonally load the element at %A
-  %A.0 = load i32, i32* %A
+  %A.0 = load i32, ptr %A
   br i1 %C, label %T, label %F
 
 T:
@@ -30,25 +30,25 @@ T:
 
 F:
   ; Load the element at offset two from %A. This should not be promoted!
-  %A.2 = getelementptr i32, i32* %A, i32 2
-  %R = load i32, i32* %A.2
+  %A.2 = getelementptr i32, ptr %A, i32 2
+  %R = load i32, ptr %A.2
   ret i32 %R
 }
 
-define i32 @foo(i32* %A) {
+define i32 @foo(ptr %A) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; TUNIT-LABEL: define {{[^@]+}}@foo
-; TUNIT-SAME: (i32* nocapture nofree readonly [[A:%.*]]) #[[ATTR0]] {
-; TUNIT-NEXT:    [[X:%.*]] = call i32 @callee(i32* nocapture nofree readonly align 4 [[A]]) #[[ATTR1:[0-9]+]]
+; TUNIT-SAME: (ptr nocapture nofree readonly [[A:%.*]]) #[[ATTR0]] {
+; TUNIT-NEXT:    [[X:%.*]] = call i32 @callee(ptr nocapture nofree readonly align 4 [[A]]) #[[ATTR1:[0-9]+]]
 ; TUNIT-NEXT:    ret i32 [[X]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@foo
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR1:[0-9]+]] {
-; CGSCC-NEXT:    [[X:%.*]] = call i32 @callee(i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]]) #[[ATTR2:[0-9]+]]
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR1:[0-9]+]] {
+; CGSCC-NEXT:    [[X:%.*]] = call i32 @callee(ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]]) #[[ATTR2:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 [[X]]
 ;
-  %X = call i32 @callee(i1 false, i32* %A)             ; <i32> [#uses=1]
+  %X = call i32 @callee(i1 false, ptr %A)             ; <i32> [#uses=1]
   ret i32 %X
 }
 

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-07-CGUpdate.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-07-CGUpdate.ll
index c299f5ac5e713..d1ca94960a222 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-07-CGUpdate.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-07-CGUpdate.ll
@@ -2,7 +2,7 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal  -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=2 -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 
-define internal fastcc i32 @hash(i32* %ts, i32 %mod) nounwind {
+define internal fastcc i32 @hash(ptr %ts, i32 %mod) nounwind {
 ; CGSCC: Function Attrs: nofree norecurse noreturn nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@hash
 ; CGSCC-SAME: () #[[ATTR0:[0-9]+]] {
@@ -13,21 +13,21 @@ entry:
   unreachable
 }
 
-define void @encode(i32* %m, i32* %ts, i32* %new) nounwind {
+define void @encode(ptr %m, ptr %ts, ptr %new) nounwind {
 ; TUNIT: Function Attrs: nofree norecurse noreturn nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@encode
-; TUNIT-SAME: (i32* nocapture nofree readnone [[M:%.*]], i32* nocapture nofree readnone [[TS:%.*]], i32* nocapture nofree readnone [[NEW:%.*]]) #[[ATTR0:[0-9]+]] {
+; TUNIT-SAME: (ptr nocapture nofree readnone [[M:%.*]], ptr nocapture nofree readnone [[TS:%.*]], ptr nocapture nofree readnone [[NEW:%.*]]) #[[ATTR0:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    unreachable
 ;
 ; CGSCC: Function Attrs: nofree noreturn nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@encode
-; CGSCC-SAME: (i32* nocapture nofree readnone [[M:%.*]], i32* nocapture nofree readnone [[TS:%.*]], i32* nocapture nofree readnone [[NEW:%.*]]) #[[ATTR1:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture nofree readnone [[M:%.*]], ptr nocapture nofree readnone [[TS:%.*]], ptr nocapture nofree readnone [[NEW:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    unreachable
 ;
 entry:
-  %0 = call fastcc i32 @hash( i32* %ts, i32 0 ) nounwind		; <i32> [#uses=0]
+  %0 = call fastcc i32 @hash( ptr %ts, i32 0 ) nounwind		; <i32> [#uses=0]
   unreachable
 }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll
index c764aa9f570b4..5393d9ee61bca 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll
@@ -2,7 +2,7 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal  -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=2 -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 
-define internal fastcc i32 @term_SharingList(i32* %Term, i32* %List) nounwind {
+define internal fastcc i32 @term_SharingList(ptr %Term, ptr %List) nounwind {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@term_SharingList
 ; CGSCC-SAME: () #[[ATTR0:[0-9]+]] {
@@ -17,17 +17,17 @@ entry:
   br i1 false, label %bb, label %bb5
 
 bb:		; preds = %entry
-  %0 = call fastcc i32 @term_SharingList( i32* null, i32* %List ) nounwind		; <i32> [#uses=0]
+  %0 = call fastcc i32 @term_SharingList( ptr null, ptr %List ) nounwind		; <i32> [#uses=0]
   unreachable
 
 bb5:		; preds = %entry
   ret i32 0
 }
 
-define i32 @term_Sharing(i32* %Term) nounwind {
+define i32 @term_Sharing(ptr %Term) nounwind {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@term_Sharing
-; CHECK-SAME: (i32* nocapture nofree readnone [[TERM:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-SAME: (ptr nocapture nofree readnone [[TERM:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 false, label [[BB_I:%.*]], label [[BB14:%.*]]
 ; CHECK:       bb.i:
@@ -39,7 +39,7 @@ entry:
   br i1 false, label %bb.i, label %bb14
 
 bb.i:		; preds = %entry
-  %0 = call fastcc i32 @term_SharingList( i32* null, i32* null ) nounwind		; <i32> [#uses=0]
+  %0 = call fastcc i32 @term_SharingList( ptr null, ptr null ) nounwind		; <i32> [#uses=0]
   ret i32 1
 
 bb14:		; preds = %entry

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/aggregate-promote.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/aggregate-promote.ll
index 8d35c196aa5b1..4d43356b8d361 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/aggregate-promote.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/aggregate-promote.ll
@@ -8,7 +8,7 @@
 ;.
 ; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = constant [[T:%.*]] { i32 0, i32 0, i32 17, i32 25 }
 ;.
-define internal i32 @test(%T* %p) {
+define internal i32 @test(ptr %p) {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@test
 ; CGSCC-SAME: () #[[ATTR0:[0-9]+]] {
@@ -16,10 +16,10 @@ define internal i32 @test(%T* %p) {
 ; CGSCC-NEXT:    ret i32 42
 ;
 entry:
-  %a.gep = getelementptr %T, %T* %p, i64 0, i32 3
-  %b.gep = getelementptr %T, %T* %p, i64 0, i32 2
-  %a = load i32, i32* %a.gep
-  %b = load i32, i32* %b.gep
+  %a.gep = getelementptr %T, ptr %p, i64 0, i32 3
+  %b.gep = getelementptr %T, ptr %p, i64 0, i32 2
+  %a = load i32, ptr %a.gep
+  %b = load i32, ptr %b.gep
   %v = add i32 %a, %b
   ret i32 %v
 }
@@ -40,7 +40,7 @@ define i32 @caller() {
 ; CGSCC-NEXT:    ret i32 [[V]]
 ;
 entry:
-  %v = call i32 @test(%T* @G)
+  %v = call i32 @test(ptr @G)
   ret i32 %v
 }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/alignment.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/alignment.ll
index 31fc10745c1c6..ee8cd1cadf42e 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/alignment.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/alignment.ll
@@ -6,7 +6,7 @@ define void @f() {
 ; TUNIT-LABEL: define {{[^@]+}}@f() {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[A:%.*]] = alloca i32, align 1
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, i32* [[A]], align 1
+; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A]], align 1
 ; TUNIT-NEXT:    call void @g(i32 [[TMP0]])
 ; TUNIT-NEXT:    ret void
 ;
@@ -17,20 +17,20 @@ define void @f() {
 ;
 entry:
   %a = alloca i32, align 1
-  call void @g(i32* %a)
+  call void @g(ptr %a)
   ret void
 }
 
-define internal void @g(i32* %a) {
+define internal void @g(ptr %a) {
 ; CHECK-LABEL: define {{[^@]+}}@g
 ; CHECK-SAME: (i32 [[TMP0:%.*]]) {
 ; CHECK-NEXT:    [[A_PRIV:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    store i32 [[TMP0]], i32* [[A_PRIV]], align 4
-; CHECK-NEXT:    [[AA:%.*]] = load i32, i32* [[A_PRIV]], align 1
+; CHECK-NEXT:    store i32 [[TMP0]], ptr [[A_PRIV]], align 4
+; CHECK-NEXT:    [[AA:%.*]] = load i32, ptr [[A_PRIV]], align 1
 ; CHECK-NEXT:    call void @z(i32 [[AA]])
 ; CHECK-NEXT:    ret void
 ;
-  %aa = load i32, i32* %a, align 1
+  %aa = load i32, ptr %a, align 1
   call void @z(i32 %aa)
   ret void
 }
@@ -39,14 +39,14 @@ declare void @z(i32)
 
 ; Test2
 ; Different alignemnt privatizable arguments
-define internal i32 @test(i32* %X, i64* %Y) {
+define internal i32 @test(ptr %X, ptr %Y) {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@test
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[X:%.*]], i64 [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[X:%.*]], i64 [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:    [[Y_PRIV:%.*]] = alloca i64, align 8
-; CGSCC-NEXT:    store i64 [[TMP0]], i64* [[Y_PRIV]], align 4
-; CGSCC-NEXT:    [[A:%.*]] = load i32, i32* [[X]], align 4
-; CGSCC-NEXT:    [[B:%.*]] = load i64, i64* [[Y_PRIV]], align 8
+; CGSCC-NEXT:    store i64 [[TMP0]], ptr [[Y_PRIV]], align 4
+; CGSCC-NEXT:    [[A:%.*]] = load i32, ptr [[X]], align 4
+; CGSCC-NEXT:    [[B:%.*]] = load i64, ptr [[Y_PRIV]], align 8
 ; CGSCC-NEXT:    [[C:%.*]] = add i32 [[A]], 1
 ; CGSCC-NEXT:    [[D:%.*]] = add i64 [[B]], 1
 ; CGSCC-NEXT:    [[COND:%.*]] = icmp sgt i64 [[D]], -1
@@ -56,8 +56,8 @@ define internal i32 @test(i32* %X, i64* %Y) {
 ; CGSCC:       Return2:
 ; CGSCC-NEXT:    ret i32 [[A]]
 ;
-  %A = load i32, i32* %X
-  %B = load i64, i64* %Y
+  %A = load i32, ptr %X
+  %B = load i64, ptr %Y
   %C = add i32 %A, 1
   %D = add i64 %B, 1
   %cond = icmp sgt i64 %D, -1
@@ -68,18 +68,18 @@ Return2:
   ret i32 %A
 }
 
-define internal i32 @caller(i32* %A) {
+define internal i32 @caller(ptr %A) {
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@caller
 ; CGSCC-SAME: (i32 [[TMP0:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:    [[A_PRIV:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 [[TMP0]], i32* [[A_PRIV]], align 4
-; CGSCC-NEXT:    [[C:%.*]] = call i32 @test(i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A_PRIV]], i64 noundef 1) #[[ATTR3:[0-9]+]]
+; CGSCC-NEXT:    store i32 [[TMP0]], ptr [[A_PRIV]], align 4
+; CGSCC-NEXT:    [[C:%.*]] = call i32 @test(ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A_PRIV]], i64 noundef 1) #[[ATTR3:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 [[C]]
 ;
   %B = alloca i64
-  store i64 1, i64* %B
-  %C = call i32 @test(i32* %A, i64* %B)
+  store i64 1, ptr %B
+  %C = call i32 @test(ptr %A, ptr %B)
   ret i32 %C
 }
 
@@ -97,8 +97,8 @@ define i32 @callercaller() {
 ; CGSCC-NEXT:    ret i32 [[X]]
 ;
   %B = alloca i32
-  store i32 2, i32* %B
-  %X = call i32 @caller(i32* %B)
+  store i32 2, ptr %B
+  %X = call i32 @caller(ptr %B)
   ret i32 %X
 }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/alloca-as.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/alloca-as.ll
index 53719c2b1e7af..4b8672230b7ff 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/alloca-as.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/alloca-as.ll
@@ -11,8 +11,8 @@ define i32 @bar(i32 %arg) {
 ; TUNIT-SAME: (i32 [[ARG:%.*]]) {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    store i32 [[ARG]], i32* [[STACK]], align 4
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, i32* [[STACK]], align 4
+; TUNIT-NEXT:    store i32 [[ARG]], ptr [[STACK]], align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr [[STACK]], align 4
 ; TUNIT-NEXT:    [[CALL:%.*]] = call i32 @foo(i32 [[TMP0]])
 ; TUNIT-NEXT:    ret i32 [[CALL]]
 ;
@@ -20,30 +20,30 @@ define i32 @bar(i32 %arg) {
 ; CGSCC-SAME: (i32 [[ARG:%.*]]) {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 [[ARG]], i32* [[STACK]], align 4
+; CGSCC-NEXT:    store i32 [[ARG]], ptr [[STACK]], align 4
 ; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @foo(i32 [[ARG]])
 ; CGSCC-NEXT:    ret i32 [[CALL]]
 ;
 entry:
   %stack = alloca i32
-  store i32 %arg, i32* %stack
-  %call = call i32 @foo(i32* %stack)
+  store i32 %arg, ptr %stack
+  %call = call i32 @foo(ptr %stack)
   ret i32 %call
 }
 
-define internal i32 @foo(i32* %arg) {
+define internal i32 @foo(ptr %arg) {
 ; CHECK-LABEL: define {{[^@]+}}@foo
 ; CHECK-SAME: (i32 [[TMP0:%.*]]) {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[ARG_PRIV:%.*]] = alloca i32, align 4, addrspace(7)
-; CHECK-NEXT:    store i32 [[TMP0]], i32 addrspace(7)* [[ARG_PRIV]], align 4
-; CHECK-NEXT:    [[TMP1:%.*]] = addrspacecast i32 addrspace(7)* [[ARG_PRIV]] to i32*
-; CHECK-NEXT:    [[L:%.*]] = load i32, i32* [[TMP1]], align 4
+; CHECK-NEXT:    store i32 [[TMP0]], ptr addrspace(7) [[ARG_PRIV]], align 4
+; CHECK-NEXT:    [[TMP1:%.*]] = addrspacecast ptr addrspace(7) [[ARG_PRIV]] to ptr
+; CHECK-NEXT:    [[L:%.*]] = load i32, ptr [[TMP1]], align 4
 ; CHECK-NEXT:    call void @use(i32 [[L]])
 ; CHECK-NEXT:    ret i32 [[L]]
 ;
 entry:
-  %l = load i32, i32* %arg
+  %l = load i32, ptr %arg
   call void @use(i32 %l)
   ret i32 %l
 }

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/array.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/array.ll
index 9a48badc31b69..8c86c6f3cadf5 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/array.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/array.ll
@@ -4,20 +4,17 @@
 ;
 ; FIXME: The GEP + BC + GEP solution we create is not great but correct.
 
-declare void @use(i32* nocapture readonly %arg)
+declare void @use(ptr nocapture readonly %arg)
 
 define void @caller() {
 ; TUNIT-LABEL: define {{[^@]+}}@caller() {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[LEFT:%.*]] = alloca [3 x i32], align 4
-; TUNIT-NEXT:    [[ARRAYDECAY:%.*]] = getelementptr inbounds [3 x i32], [3 x i32]* [[LEFT]], i64 0, i64 0
-; TUNIT-NEXT:    [[TMP0:%.*]] = bitcast i32* [[ARRAYDECAY]] to [3 x i32]*
-; TUNIT-NEXT:    [[DOTCAST:%.*]] = bitcast [3 x i32]* [[TMP0]] to i32*
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* [[DOTCAST]], align 4
-; TUNIT-NEXT:    [[DOT0_1:%.*]] = getelementptr [3 x i32], [3 x i32]* [[TMP0]], i64 0, i64 1
-; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOT0_1]], align 4
-; TUNIT-NEXT:    [[DOT0_2:%.*]] = getelementptr [3 x i32], [3 x i32]* [[TMP0]], i64 0, i64 2
-; TUNIT-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOT0_2]], align 4
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr [[LEFT]], align 4
+; TUNIT-NEXT:    [[DOT0_1:%.*]] = getelementptr [3 x i32], ptr [[LEFT]], i64 0, i64 1
+; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOT0_1]], align 4
+; TUNIT-NEXT:    [[DOT0_2:%.*]] = getelementptr [3 x i32], ptr [[LEFT]], i64 0, i64 2
+; TUNIT-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOT0_2]], align 4
 ; TUNIT-NEXT:    call void @callee(i32 [[TMP1]], i32 [[TMP2]], i32 [[TMP3]])
 ; TUNIT-NEXT:    ret void
 ;
@@ -28,27 +25,24 @@ define void @caller() {
 ;
 entry:
   %left = alloca [3 x i32], align 4
-  %arraydecay = getelementptr inbounds [3 x i32], [3 x i32]* %left, i64 0, i64 0
-  call void @callee(i32* %arraydecay)
+  call void @callee(ptr %left)
   ret void
 }
 
-define internal void @callee(i32* noalias %arg) {
+define internal void @callee(ptr noalias %arg) {
 ; CHECK-LABEL: define {{[^@]+}}@callee
 ; CHECK-SAME: (i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]]) {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[ARG_PRIV:%.*]] = alloca [3 x i32], align 4
-; CHECK-NEXT:    [[ARG_PRIV_CAST:%.*]] = bitcast [3 x i32]* [[ARG_PRIV]] to i32*
-; CHECK-NEXT:    store i32 [[TMP0]], i32* [[ARG_PRIV_CAST]], align 4
-; CHECK-NEXT:    [[ARG_PRIV_0_1:%.*]] = getelementptr [3 x i32], [3 x i32]* [[ARG_PRIV]], i64 0, i64 1
-; CHECK-NEXT:    store i32 [[TMP1]], i32* [[ARG_PRIV_0_1]], align 4
-; CHECK-NEXT:    [[ARG_PRIV_0_2:%.*]] = getelementptr [3 x i32], [3 x i32]* [[ARG_PRIV]], i64 0, i64 2
-; CHECK-NEXT:    store i32 [[TMP2]], i32* [[ARG_PRIV_0_2]], align 4
-; CHECK-NEXT:    [[TMP3:%.*]] = bitcast [3 x i32]* [[ARG_PRIV]] to i32*
-; CHECK-NEXT:    call void @use(i32* noalias nocapture noundef nonnull readonly align 4 dereferenceable(12) [[TMP3]])
+; CHECK-NEXT:    store i32 [[TMP0]], ptr [[ARG_PRIV]], align 4
+; CHECK-NEXT:    [[ARG_PRIV_0_1:%.*]] = getelementptr [3 x i32], ptr [[ARG_PRIV]], i64 0, i64 1
+; CHECK-NEXT:    store i32 [[TMP1]], ptr [[ARG_PRIV_0_1]], align 4
+; CHECK-NEXT:    [[ARG_PRIV_0_2:%.*]] = getelementptr [3 x i32], ptr [[ARG_PRIV]], i64 0, i64 2
+; CHECK-NEXT:    store i32 [[TMP2]], ptr [[ARG_PRIV_0_2]], align 4
+; CHECK-NEXT:    call void @use(ptr noalias nocapture noundef nonnull readonly align 4 dereferenceable(12) [[ARG_PRIV]])
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  call void @use(i32* %arg)
+  call void @use(ptr %arg)
   ret void
 }

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/basictest.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/basictest.ll
index a805c6b0d8d28..bb92fa87a799f 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/basictest.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/basictest.ll
@@ -3,35 +3,35 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
-define internal i32 @test(i32* %X, i32* %Y) {
+define internal i32 @test(ptr %X, ptr %Y) {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@test
-; CGSCC-SAME: (i32 [[TMP0:%.*]], i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR0:[0-9]+]] {
+; CGSCC-SAME: (i32 [[TMP0:%.*]], ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:    [[X_PRIV:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 [[TMP0]], i32* [[X_PRIV]], align 4
-; CGSCC-NEXT:    [[A:%.*]] = load i32, i32* [[X_PRIV]], align 4
-; CGSCC-NEXT:    [[B:%.*]] = load i32, i32* [[Y]], align 4
+; CGSCC-NEXT:    store i32 [[TMP0]], ptr [[X_PRIV]], align 4
+; CGSCC-NEXT:    [[A:%.*]] = load i32, ptr [[X_PRIV]], align 4
+; CGSCC-NEXT:    [[B:%.*]] = load i32, ptr [[Y]], align 4
 ; CGSCC-NEXT:    [[C:%.*]] = add i32 [[A]], [[B]]
 ; CGSCC-NEXT:    ret i32 [[C]]
 ;
-  %A = load i32, i32* %X
-  %B = load i32, i32* %Y
+  %A = load i32, ptr %X
+  %B = load i32, ptr %Y
   %C = add i32 %A, %B
   ret i32 %C
 }
 
-define internal i32 @caller(i32* %B) {
+define internal i32 @caller(ptr %B) {
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@caller
 ; CGSCC-SAME: (i32 [[TMP0:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:    [[B_PRIV:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 [[TMP0]], i32* [[B_PRIV]], align 4
-; CGSCC-NEXT:    [[C:%.*]] = call i32 @test(i32 noundef 1, i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B_PRIV]]) #[[ATTR3:[0-9]+]]
+; CGSCC-NEXT:    store i32 [[TMP0]], ptr [[B_PRIV]], align 4
+; CGSCC-NEXT:    [[C:%.*]] = call i32 @test(i32 noundef 1, ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B_PRIV]]) #[[ATTR3:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 [[C]]
 ;
   %A = alloca i32
-  store i32 1, i32* %A
-  %C = call i32 @test(i32* %A, i32* %B)
+  store i32 1, ptr %A
+  %C = call i32 @test(ptr %A, ptr %B)
   ret i32 %C
 }
 
@@ -49,8 +49,8 @@ define i32 @callercaller() {
 ; CGSCC-NEXT:    ret i32 [[X]]
 ;
   %B = alloca i32
-  store i32 2, i32* %B
-  %X = call i32 @caller(i32* %B)
+  store i32 2, ptr %B
+  %X = call i32 @caller(ptr %B)
   ret i32 %X
 }
 

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/chained.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/chained.ll
index 2a6d3dc3378a1..316060e5997b0 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/chained.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/chained.ll
@@ -3,24 +3,24 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 
 @G1 = constant i32 0
- at G2 = constant i32* @G1
+ at G2 = constant ptr @G1
 
 ;.
 ; CHECK: @[[G1:[a-zA-Z0-9_$"\\.-]+]] = constant i32 0
-; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = constant i32* @G1
+; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = constant ptr @G1
 ;.
-define internal i32 @test(i32** %x) {
+define internal i32 @test(ptr %x) {
 ;
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@test
 ; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[Z:%.*]] = load i32, i32* @G1, align 4
+; CHECK-NEXT:    [[Z:%.*]] = load i32, ptr @G1, align 4
 ; CHECK-NEXT:    ret i32 [[Z]]
 ;
 entry:
-  %y = load i32*, i32** %x
-  %z = load i32, i32* %y
+  %y = load ptr, ptr %x
+  %z = load i32, ptr %y
   ret i32 %z
 }
 
@@ -40,7 +40,7 @@ define i32 @caller() {
 ; CGSCC-NEXT:    ret i32 [[X]]
 ;
 entry:
-  %x = call i32 @test(i32** @G2)
+  %x = call i32 @test(ptr @G2)
   ret i32 %x
 }
 

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/control-flow.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/control-flow.ll
index 44ce05fd82363..bf49e34c69041 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/control-flow.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/control-flow.ll
@@ -3,16 +3,16 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 
 ; Don't promote around control flow.
-define internal i32 @callee(i1 %C, i32* %P) {
+define internal i32 @callee(i1 %C, ptr %P) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; CHECK-LABEL: define {{[^@]+}}@callee
-; CHECK-SAME: (i1 [[C:%.*]], i32* nocapture nofree readonly [[P:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-SAME: (i1 [[C:%.*]], ptr nocapture nofree readonly [[P:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CHECK:       T:
 ; CHECK-NEXT:    ret i32 17
 ; CHECK:       F:
-; CHECK-NEXT:    [[X:%.*]] = load i32, i32* [[P]], align 4
+; CHECK-NEXT:    [[X:%.*]] = load i32, ptr [[P]], align 4
 ; CHECK-NEXT:    ret i32 [[X]]
 ;
 entry:
@@ -22,27 +22,27 @@ T:
   ret i32 17
 
 F:
-  %X = load i32, i32* %P
+  %X = load i32, ptr %P
   ret i32 %X
 }
 
-define i32 @foo(i1 %C, i32* %P) {
+define i32 @foo(i1 %C, ptr %P) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; TUNIT-LABEL: define {{[^@]+}}@foo
-; TUNIT-SAME: (i1 [[C:%.*]], i32* nocapture nofree readonly [[P:%.*]]) #[[ATTR0]] {
+; TUNIT-SAME: (i1 [[C:%.*]], ptr nocapture nofree readonly [[P:%.*]]) #[[ATTR0]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[X:%.*]] = call i32 @callee(i1 [[C]], i32* nocapture nofree readonly [[P]]) #[[ATTR1:[0-9]+]]
+; TUNIT-NEXT:    [[X:%.*]] = call i32 @callee(i1 [[C]], ptr nocapture nofree readonly [[P]]) #[[ATTR1:[0-9]+]]
 ; TUNIT-NEXT:    ret i32 [[X]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@foo
-; CGSCC-SAME: (i1 [[C:%.*]], i32* nocapture nofree readonly [[P:%.*]]) #[[ATTR1:[0-9]+]] {
+; CGSCC-SAME: (i1 [[C:%.*]], ptr nocapture nofree readonly [[P:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[X:%.*]] = call i32 @callee(i1 [[C]], i32* nocapture nofree readonly [[P]]) #[[ATTR2:[0-9]+]]
+; CGSCC-NEXT:    [[X:%.*]] = call i32 @callee(i1 [[C]], ptr nocapture nofree readonly [[P]]) #[[ATTR2:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 [[X]]
 ;
 entry:
-  %X = call i32 @callee(i1 %C, i32* %P)
+  %X = call i32 @callee(i1 %C, ptr %P)
   ret i32 %X
 }
 

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/control-flow2.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/control-flow2.ll
index 1f54121582e0d..5e067044ef6d3 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/control-flow2.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/control-flow2.ll
@@ -4,17 +4,17 @@
 
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
-define internal i32 @callee(i1 %C, i32* %P) {
+define internal i32 @callee(i1 %C, ptr %P) {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@callee
 ; CGSCC-SAME: (i32 [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:    [[P_PRIV:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 [[TMP0]], i32* [[P_PRIV]], align 4
+; CGSCC-NEXT:    store i32 [[TMP0]], ptr [[P_PRIV]], align 4
 ; CGSCC-NEXT:    br label [[F:%.*]]
 ; CGSCC:       T:
 ; CGSCC-NEXT:    unreachable
 ; CGSCC:       F:
-; CGSCC-NEXT:    [[X:%.*]] = load i32, i32* [[P_PRIV]], align 4
+; CGSCC-NEXT:    [[X:%.*]] = load i32, ptr [[P_PRIV]], align 4
 ; CGSCC-NEXT:    ret i32 [[X]]
 ;
   br i1 %C, label %T, label %F
@@ -23,7 +23,7 @@ T:              ; preds = %0
   ret i32 17
 
 F:              ; preds = %0
-  %X = load i32, i32* %P               ; <i32> [#uses=1]
+  %X = load i32, ptr %P               ; <i32> [#uses=1]
   ret i32 %X
 }
 
@@ -40,9 +40,9 @@ define i32 @foo() {
 ; CGSCC-NEXT:    [[X:%.*]] = call i32 @callee(i32 noundef 17) #[[ATTR2:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 [[X]]
 ;
-  %A = alloca i32         ; <i32*> [#uses=2]
-  store i32 17, i32* %A
-  %X = call i32 @callee( i1 false, i32* %A )              ; <i32> [#uses=1]
+  %A = alloca i32         ; <ptr> [#uses=2]
+  store i32 17, ptr %A
+  %X = call i32 @callee( i1 false, ptr %A )              ; <i32> [#uses=1]
   ret i32 %X
 }
 

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/crash.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/crash.ll
index 3f94e253a8d6b..89f418ff8eff1 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/crash.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/crash.ll
@@ -2,14 +2,14 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal  -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=3 -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 
-%S = type { %S* }
+%S = type { ptr }
 
 ; Inlining should nuke the invoke (and any inlined calls) here even with
 ; argument promotion running along with it.
-define void @zot() personality i32 (...)* @wibble {
+define void @zot() personality ptr @wibble {
 ; TUNIT: Function Attrs: nofree norecurse noreturn nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@zot
-; TUNIT-SAME: () #[[ATTR0:[0-9]+]] personality i32 (...)* @wibble {
+; TUNIT-SAME: () #[[ATTR0:[0-9]+]] personality ptr @wibble {
 ; TUNIT-NEXT:  bb:
 ; TUNIT-NEXT:    call void @hoge() #[[ATTR2:[0-9]+]]
 ; TUNIT-NEXT:    unreachable
@@ -20,7 +20,7 @@ define void @zot() personality i32 (...)* @wibble {
 ;
 ; CGSCC: Function Attrs: nofree noreturn nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@zot
-; CGSCC-SAME: () #[[ATTR0:[0-9]+]] personality i32 (...)* @wibble {
+; CGSCC-SAME: () #[[ATTR0:[0-9]+]] personality ptr @wibble {
 ; CGSCC-NEXT:  bb:
 ; CGSCC-NEXT:    call void @hoge() #[[ATTR4:[0-9]+]]
 ; CGSCC-NEXT:    unreachable
@@ -37,7 +37,7 @@ bb1:
   unreachable
 
 bb2:
-  %tmp = landingpad { i8*, i32 }
+  %tmp = landingpad { ptr, i32 }
   cleanup
   unreachable
 }
@@ -56,12 +56,12 @@ define internal void @hoge() {
 ; CGSCC-NEXT:    unreachable
 ;
 bb:
-  %tmp = call fastcc i8* @spam(i1 (i8*)* @eggs)
-  %tmp1 = call fastcc i8* @spam(i1 (i8*)* @barney)
+  %tmp = call fastcc ptr @spam(ptr @eggs)
+  %tmp1 = call fastcc ptr @spam(ptr @barney)
   unreachable
 }
 
-define internal fastcc i8* @spam(i1 (i8*)* %arg) {
+define internal fastcc ptr @spam(ptr %arg) {
 ; CGSCC: Function Attrs: nofree norecurse noreturn nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@spam
 ; CGSCC-SAME: () #[[ATTR1:[0-9]+]] {
@@ -72,19 +72,19 @@ bb:
   unreachable
 }
 
-define internal i1 @eggs(i8* %arg) {
+define internal i1 @eggs(ptr %arg) {
 ; CGSCC-LABEL: define {{[^@]+}}@eggs
-; CGSCC-SAME: (i8* [[ARG:%.*]]) {
+; CGSCC-SAME: (ptr [[ARG:%.*]]) {
 ; CGSCC-NEXT:  bb:
 ; CGSCC-NEXT:    [[TMP:%.*]] = call zeroext i1 @barney()
 ; CGSCC-NEXT:    unreachable
 ;
 bb:
-  %tmp = call zeroext i1 @barney(i8* %arg)
+  %tmp = call zeroext i1 @barney(ptr %arg)
   unreachable
 }
 
-define internal i1 @barney(i8* %arg) {
+define internal i1 @barney(ptr %arg) {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@barney
 ; CGSCC-SAME: () #[[ATTR2:[0-9]+]] {
@@ -113,12 +113,12 @@ define i32 @test_inf_promote_caller(i32 %arg) {
 bb:
   %tmp = alloca %S
   %tmp1 = alloca %S
-  %tmp2 = call i32 @test_inf_promote_callee(%S* %tmp, %S* %tmp1)
+  %tmp2 = call i32 @test_inf_promote_callee(ptr %tmp, ptr %tmp1)
 
   ret i32 0
 }
 
-define internal i32 @test_inf_promote_callee(%S* %arg, %S* %arg1) {
+define internal i32 @test_inf_promote_callee(ptr %arg, ptr %arg1) {
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@test_inf_promote_callee
 ; CGSCC-SAME: () #[[ATTR3]] {
@@ -126,11 +126,9 @@ define internal i32 @test_inf_promote_callee(%S* %arg, %S* %arg1) {
 ; CGSCC-NEXT:    ret i32 undef
 ;
 bb:
-  %tmp = getelementptr %S, %S* %arg1, i32 0, i32 0
-  %tmp2 = load %S*, %S** %tmp
-  %tmp3 = getelementptr %S, %S* %arg, i32 0, i32 0
-  %tmp4 = load %S*, %S** %tmp3
-  %tmp5 = call i32 @test_inf_promote_callee(%S* %tmp4, %S* %tmp2)
+  %tmp2 = load ptr, ptr %arg1
+  %tmp4 = load ptr, ptr %arg
+  %tmp5 = call i32 @test_inf_promote_callee(ptr %tmp4, ptr %tmp2)
 
   ret i32 0
 }

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/dbg.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/dbg.ll
index 77e8a214b81b8..1910894590fd0 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/dbg.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/dbg.ll
@@ -4,23 +4,23 @@
 
 declare void @sink(i32)
 
-define internal void @test(i32** %X) !dbg !2 {
+define internal void @test(ptr %X) !dbg !2 {
 ; CHECK-LABEL: define {{[^@]+}}@test
-; CHECK-SAME: (i32** nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[X:%.*]]) !dbg [[DBG3:![0-9]+]] {
-; CHECK-NEXT:    [[TMP1:%.*]] = load i32*, i32** [[X]], align 8
-; CHECK-NEXT:    [[TMP2:%.*]] = load i32, i32* [[TMP1]], align 8
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[X:%.*]]) !dbg [[DBG3:![0-9]+]] {
+; CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[X]], align 8
+; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 8
 ; CHECK-NEXT:    call void @sink(i32 [[TMP2]])
 ; CHECK-NEXT:    ret void
 ;
-  %1 = load i32*, i32** %X, align 8
-  %2 = load i32, i32* %1, align 8
+  %1 = load ptr, ptr %X, align 8
+  %2 = load i32, ptr %1, align 8
   call void @sink(i32 %2)
   ret void
 }
 
 %struct.pair = type { i32, i32 }
 
-define internal void @test_byval(%struct.pair* byval(%struct.pair) %P) {
+define internal void @test_byval(ptr byval(%struct.pair) %P) {
 ; CHECK-LABEL: define {{[^@]+}}@test_byval() {
 ; CHECK-NEXT:    call void @sink(i32 noundef 0)
 ; CHECK-NEXT:    ret void
@@ -29,22 +29,22 @@ define internal void @test_byval(%struct.pair* byval(%struct.pair) %P) {
   ret void
 }
 
-define void @caller(i32** %Y, %struct.pair* %P) {
+define void @caller(ptr %Y, ptr %P) {
 ; TUNIT-LABEL: define {{[^@]+}}@caller
-; TUNIT-SAME: (i32** nocapture nofree readonly [[Y:%.*]], %struct.pair* nocapture nofree readnone [[P:%.*]]) {
-; TUNIT-NEXT:    call void @test(i32** nocapture nofree readonly align 8 [[Y]]), !dbg [[DBG4:![0-9]+]]
+; TUNIT-SAME: (ptr nocapture nofree readonly [[Y:%.*]], ptr nocapture nofree readnone [[P:%.*]]) {
+; TUNIT-NEXT:    call void @test(ptr nocapture nofree readonly align 8 [[Y]]), !dbg [[DBG4:![0-9]+]]
 ; TUNIT-NEXT:    call void @test_byval(), !dbg [[DBG5:![0-9]+]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@caller
-; CGSCC-SAME: (i32** nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[Y:%.*]], %struct.pair* nocapture nofree readnone [[P:%.*]]) {
-; CGSCC-NEXT:    call void @test(i32** nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[Y]]), !dbg [[DBG4:![0-9]+]]
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[Y:%.*]], ptr nocapture nofree readnone [[P:%.*]]) {
+; CGSCC-NEXT:    call void @test(ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[Y]]), !dbg [[DBG4:![0-9]+]]
 ; CGSCC-NEXT:    call void @test_byval(), !dbg [[DBG5:![0-9]+]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @test(i32** %Y), !dbg !1
+  call void @test(ptr %Y), !dbg !1
 
-  call void @test_byval(%struct.pair* byval(%struct.pair) %P), !dbg !6
+  call void @test_byval(ptr byval(%struct.pair) %P), !dbg !6
   ret void
 }
 

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/inalloca.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/inalloca.ll
index 01f537744a452..d22218caa5de4 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/inalloca.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/inalloca.ll
@@ -7,23 +7,21 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
 %struct.ss = type { i32, i32 }
 
 ; Argpromote + sroa should change this to passing the two integers by value.
-define internal i32 @f(%struct.ss* inalloca(%struct.ss) %s) {
+define internal i32 @f(ptr inalloca(%struct.ss) %s) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; CHECK-LABEL: define {{[^@]+}}@f
-; CHECK-SAME: (%struct.ss* noalias nocapture nofree noundef nonnull inalloca([[STRUCT_SS:%.*]]) align 4 dereferenceable(8) [[S:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-SAME: (ptr noalias nocapture nofree noundef nonnull inalloca([[STRUCT_SS:%.*]]) align 4 dereferenceable(8) [[S:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[F0:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 0
-; CHECK-NEXT:    [[F1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 1
-; CHECK-NEXT:    [[A:%.*]] = load i32, i32* [[F0]], align 4
-; CHECK-NEXT:    [[B:%.*]] = load i32, i32* [[F1]], align 4
+; CHECK-NEXT:    [[F1:%.*]] = getelementptr [[STRUCT_SS]], ptr [[S]], i32 0, i32 1
+; CHECK-NEXT:    [[A:%.*]] = load i32, ptr [[S]], align 4
+; CHECK-NEXT:    [[B:%.*]] = load i32, ptr [[F1]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = add i32 [[A]], [[B]]
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
 entry:
-  %f0 = getelementptr %struct.ss, %struct.ss* %s, i32 0, i32 0
-  %f1 = getelementptr %struct.ss, %struct.ss* %s, i32 0, i32 1
-  %a = load i32, i32* %f0, align 4
-  %b = load i32, i32* %f1, align 4
+  %f1 = getelementptr %struct.ss, ptr %s, i32 0, i32 1
+  %a = load i32, ptr %s, align 4
+  %b = load i32, ptr %f1, align 4
   %r = add i32 %a, %b
   ret i32 %r
 }
@@ -34,11 +32,10 @@ define i32 @main() {
 ; TUNIT-SAME: () #[[ATTR1:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[S:%.*]] = alloca inalloca [[STRUCT_SS:%.*]], align 4
-; TUNIT-NEXT:    [[F0:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 0
-; TUNIT-NEXT:    [[F1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 1
-; TUNIT-NEXT:    store i32 1, i32* [[F0]], align 4
-; TUNIT-NEXT:    store i32 2, i32* [[F1]], align 4
-; TUNIT-NEXT:    [[R:%.*]] = call i32 @f(%struct.ss* noalias nocapture nofree noundef nonnull inalloca([[STRUCT_SS]]) align 4 dereferenceable(8) [[S]]) #[[ATTR2:[0-9]+]]
+; TUNIT-NEXT:    [[F1:%.*]] = getelementptr [[STRUCT_SS]], ptr [[S]], i32 0, i32 1
+; TUNIT-NEXT:    store i32 1, ptr [[S]], align 4
+; TUNIT-NEXT:    store i32 2, ptr [[F1]], align 4
+; TUNIT-NEXT:    [[R:%.*]] = call i32 @f(ptr noalias nocapture nofree noundef nonnull inalloca([[STRUCT_SS]]) align 4 dereferenceable(8) [[S]]) #[[ATTR2:[0-9]+]]
 ; TUNIT-NEXT:    ret i32 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
@@ -46,33 +43,31 @@ define i32 @main() {
 ; CGSCC-SAME: () #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[S:%.*]] = alloca inalloca [[STRUCT_SS:%.*]], align 4
-; CGSCC-NEXT:    [[F0:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 0
-; CGSCC-NEXT:    [[F1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 1
-; CGSCC-NEXT:    store i32 1, i32* [[F0]], align 4
-; CGSCC-NEXT:    store i32 2, i32* [[F1]], align 4
-; CGSCC-NEXT:    [[R:%.*]] = call i32 @f(%struct.ss* noalias nocapture nofree noundef nonnull inalloca([[STRUCT_SS]]) align 4 dereferenceable(8) [[S]]) #[[ATTR3:[0-9]+]]
+; CGSCC-NEXT:    [[F1:%.*]] = getelementptr [[STRUCT_SS]], ptr [[S]], i32 0, i32 1
+; CGSCC-NEXT:    store i32 1, ptr [[S]], align 4
+; CGSCC-NEXT:    store i32 2, ptr [[F1]], align 4
+; CGSCC-NEXT:    [[R:%.*]] = call i32 @f(ptr noalias nocapture nofree noundef nonnull inalloca([[STRUCT_SS]]) align 4 dereferenceable(8) [[S]]) #[[ATTR3:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 [[R]]
 ;
 entry:
   %S = alloca inalloca %struct.ss
-  %f0 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 0
-  %f1 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 1
-  store i32 1, i32* %f0, align 4
-  store i32 2, i32* %f1, align 4
-  %r = call i32 @f(%struct.ss* inalloca(%struct.ss) %S)
+  %f1 = getelementptr %struct.ss, ptr %S, i32 0, i32 1
+  store i32 1, ptr %S, align 4
+  store i32 2, ptr %f1, align 4
+  %r = call i32 @f(ptr inalloca(%struct.ss) %S)
   ret i32 %r
 }
 
 ; Argpromote can't promote %a because of the icmp use.
-define internal i1 @g(%struct.ss* %a, %struct.ss* inalloca(%struct.ss) %b) nounwind  {
+define internal i1 @g(ptr %a, ptr inalloca(%struct.ss) %b) nounwind  {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@g
-; CGSCC-SAME: (%struct.ss* noalias nocapture nofree nonnull readnone align 4 dereferenceable(8) [[A:%.*]], %struct.ss* noalias nocapture nofree nonnull writeonly inalloca([[STRUCT_SS:%.*]]) align 4 dereferenceable(8) [[B:%.*]]) #[[ATTR2:[0-9]+]] {
+; CGSCC-SAME: (ptr noalias nocapture nofree nonnull readnone align 4 dereferenceable(8) [[A:%.*]], ptr noalias nocapture nofree nonnull writeonly inalloca([[STRUCT_SS:%.*]]) align 4 dereferenceable(8) [[B:%.*]]) #[[ATTR2:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    ret i1 undef
 ;
 entry:
-  %c = icmp eq %struct.ss* %a, %b
+  %c = icmp eq ptr %a, %b
   ret i1 %c
 }
 
@@ -91,7 +86,7 @@ define i32 @test() {
 ;
 entry:
   %S = alloca inalloca %struct.ss
-  %c = call i1 @g(%struct.ss* %S, %struct.ss* inalloca(%struct.ss) %S)
+  %c = call i1 @g(ptr %S, ptr inalloca(%struct.ss) %S)
   ret i32 0
 }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/invalidation.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/invalidation.ll
index 4446607a08fae..d64f62dd33b27 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/invalidation.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/invalidation.ll
@@ -14,9 +14,9 @@
 ;.
 ; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = constant i32 0
 ;.
-define internal i32 @a(i32* %x) {
+define internal i32 @a(ptr %x) {
 entry:
-  %v = load i32, i32* %x
+  %v = load i32, ptr %x
   ret i32 %v
 }
 
@@ -28,7 +28,7 @@ define i32 @b() {
 ; CHECK-NEXT:    ret i32 0
 ;
 entry:
-  %v = call i32 @a(i32* @G)
+  %v = call i32 @a(ptr @G)
   ret i32 %v
 }
 
@@ -40,7 +40,7 @@ define i32 @c() {
 ; CHECK-NEXT:    ret i32 0
 ;
 entry:
-  %v1 = call i32 @a(i32* @G)
+  %v1 = call i32 @a(ptr @G)
   %v2 = call i32 @b()
   %result = add i32 %v1, %v2
   ret i32 %result

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead.ll
index dd2c1c69c2b80..0dda2d748e07d 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead.ll
@@ -5,45 +5,45 @@
 
 define internal void @dead() {
 ; CGSCC-LABEL: define {{[^@]+}}@dead() {
-; CGSCC-NEXT:    [[TMP1:%.*]] = call i32 @test(i32* noalias noundef align 4294967296 null)
+; CGSCC-NEXT:    [[TMP1:%.*]] = call i32 @test(ptr noalias noundef align 4294967296 null)
 ; CGSCC-NEXT:    ret void
 ;
-  call i32 @test(i32* null, i32* null)
+  call i32 @test(ptr null, ptr null)
   ret void
 }
 
-define internal i32 @test(i32* %X, i32* %Y) {
+define internal i32 @test(ptr %X, ptr %Y) {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@test
-; CGSCC-SAME: (i32* noalias nocapture nofree noundef writeonly align 4 [[X:%.*]]) #[[ATTR0:[0-9]+]] {
+; CGSCC-SAME: (ptr noalias nocapture nofree noundef writeonly align 4 [[X:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:    br i1 true, label [[LIVE:%.*]], label [[DEAD:%.*]]
 ; CGSCC:       live:
-; CGSCC-NEXT:    store i32 0, i32* [[X]], align 4
+; CGSCC-NEXT:    store i32 0, ptr [[X]], align 4
 ; CGSCC-NEXT:    ret i32 undef
 ; CGSCC:       dead:
 ; CGSCC-NEXT:    unreachable
 ;
   br i1 true, label %live, label %dead
 live:
-  store i32 0, i32* %X
+  store i32 0, ptr %X
   ret i32 0
 dead:
-  call i32 @caller(i32* null)
+  call i32 @caller(ptr null)
   call void @dead()
   ret i32 1
 }
 
-define internal i32 @caller(i32* %B) {
+define internal i32 @caller(ptr %B) {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@caller
 ; CGSCC-SAME: () #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:    [[A:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    [[C:%.*]] = call i32 @test(i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A]]) #[[ATTR3:[0-9]+]]
+; CGSCC-NEXT:    [[C:%.*]] = call i32 @test(ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A]]) #[[ATTR3:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 0
 ;
   %A = alloca i32
-  store i32 1, i32* %A
-  %C = call i32 @test(i32* %A, i32* %B)
+  store i32 1, ptr %A
+  %C = call i32 @test(ptr %A, ptr %B)
   ret i32 %C
 }
 
@@ -62,8 +62,8 @@ define i32 @callercaller() {
 ; CGSCC-NEXT:    ret i32 [[X]]
 ;
   %B = alloca i32
-  store i32 2, i32* %B
-  %X = call i32 @caller(i32* %B)
+  store i32 2, ptr %B
+  %X = call i32 @caller(ptr %B)
   ret i32 %X
 }
 

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll
index c65dfa45b305e..a5be8effece8f 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll
@@ -5,52 +5,52 @@
 
 define internal void @dead() {
 ; CGSCC-LABEL: define {{[^@]+}}@dead() {
-; CGSCC-NEXT:    [[TMP1:%.*]] = call i32 @test(i32* noalias noundef align 4294967296 null)
+; CGSCC-NEXT:    [[TMP1:%.*]] = call i32 @test(ptr noalias noundef align 4294967296 null)
 ; CGSCC-NEXT:    ret void
 ;
-  call i32 @test(i32* null, i32* null)
+  call i32 @test(ptr null, ptr null)
   ret void
 }
 
-define internal i32 @test(i32* %X, i32* %Y) {
+define internal i32 @test(ptr %X, ptr %Y) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CHECK-LABEL: define {{[^@]+}}@test
-; CHECK-SAME: (i32* noalias nocapture nofree noundef writeonly align 4 [[X:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-SAME: (ptr noalias nocapture nofree noundef writeonly align 4 [[X:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:    br i1 true, label [[LIVE:%.*]], label [[DEAD:%.*]]
 ; CHECK:       live:
-; CHECK-NEXT:    store i32 0, i32* [[X]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[X]], align 4
 ; CHECK-NEXT:    ret i32 undef
 ; CHECK:       dead:
 ; CHECK-NEXT:    unreachable
 ;
   br i1 true, label %live, label %dead
 live:
-  store i32 0, i32* %X
+  store i32 0, ptr %X
   ret i32 0
 dead:
-  call i32 @caller(i32* null)
+  call i32 @caller(ptr null)
   call void @dead()
   ret i32 1
 }
 
-define internal i32 @caller(i32* %B) {
+define internal i32 @caller(ptr %B) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@caller
-; TUNIT-SAME: (i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
+; TUNIT-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
 ; TUNIT-NEXT:    [[A:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    [[C:%.*]] = call i32 @test(i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B]]) #[[ATTR2:[0-9]+]]
+; TUNIT-NEXT:    [[C:%.*]] = call i32 @test(ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B]]) #[[ATTR2:[0-9]+]]
 ; TUNIT-NEXT:    ret i32 undef
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@caller
-; CGSCC-SAME: (i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
+; CGSCC-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
 ; CGSCC-NEXT:    [[A:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    [[C:%.*]] = call i32 @test(i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B]]) #[[ATTR2:[0-9]+]]
+; CGSCC-NEXT:    [[C:%.*]] = call i32 @test(ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B]]) #[[ATTR2:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 0
 ;
   %A = alloca i32
-  store i32 1, i32* %A
-  %C = call i32 @test(i32* %B, i32* %A)
+  store i32 1, ptr %A
+  %C = call i32 @test(ptr %B, ptr %A)
   ret i32 %C
 }
 
@@ -59,20 +59,20 @@ define i32 @callercaller() {
 ; TUNIT-LABEL: define {{[^@]+}}@callercaller
 ; TUNIT-SAME: () #[[ATTR1:[0-9]+]] {
 ; TUNIT-NEXT:    [[B:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    [[X:%.*]] = call i32 @caller(i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B]]) #[[ATTR2]]
+; TUNIT-NEXT:    [[X:%.*]] = call i32 @caller(ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B]]) #[[ATTR2]]
 ; TUNIT-NEXT:    ret i32 0
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@callercaller
 ; CGSCC-SAME: () #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:    [[B:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 2, i32* [[B]], align 4
-; CGSCC-NEXT:    [[X:%.*]] = call noundef i32 @caller(i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B]]) #[[ATTR3:[0-9]+]]
+; CGSCC-NEXT:    store i32 2, ptr [[B]], align 4
+; CGSCC-NEXT:    [[X:%.*]] = call noundef i32 @caller(ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B]]) #[[ATTR3:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 [[X]]
 ;
   %B = alloca i32
-  store i32 2, i32* %B
-  %X = call i32 @caller(i32* %B)
+  store i32 2, ptr %B
+  %X = call i32 @caller(ptr %B)
   ret i32 %X
 }
 

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/naked_functions.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/naked_functions.ll
index c10674f095381..b57e74bfd70de 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/naked_functions.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/naked_functions.ll
@@ -12,18 +12,18 @@
 define i32 @bar() {
 ; CHECK-LABEL: define {{[^@]+}}@bar() {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CALL:%.*]] = call i32 @foo(i32* noundef nonnull align 4 dereferenceable(4) @g)
+; CHECK-NEXT:    [[CALL:%.*]] = call i32 @foo(ptr noundef nonnull align 4 dereferenceable(4) @g)
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
 entry:
-  %call = call i32 @foo(i32* @g)
+  %call = call i32 @foo(ptr @g)
   ret i32 %call
 }
 
-define internal i32 @foo(i32*) #0 {
+define internal i32 @foo(ptr) #0 {
 ; CHECK: Function Attrs: naked
 ; CHECK-LABEL: define {{[^@]+}}@foo
-; CHECK-SAME: (i32* [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-SAME: (ptr [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4
 ; CHECK-NEXT:    call void asm sideeffect "ldr r0, [r0] \0Abx lr \0A", ""()

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/nonzero-address-spaces.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/nonzero-address-spaces.ll
index 3f56bc0b94821..27da1aae7372e 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/nonzero-address-spaces.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/nonzero-address-spaces.ll
@@ -20,11 +20,11 @@ define i32 @bar() {
 ;
 
 entry:
-  %call = call i32 @foo(i32* @g)
+  %call = call i32 @foo(ptr @g)
   ret i32 %call
 }
 
-define internal i32 @foo(i32*) {
+define internal i32 @foo(ptr) {
 ; CHECK: Function Attrs: noreturn
 ; CHECK-LABEL: define {{[^@]+}}@foo
 ; CHECK-SAME: () addrspace(1) #[[ATTR0]] {

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/pr27568.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/pr27568.ll
index 15dcfc9f20f14..925595c01774f 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/pr27568.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/pr27568.ll
@@ -3,7 +3,7 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 target triple = "x86_64-pc-windows-msvc"
 
-define internal void @callee(i8*) {
+define internal void @callee(ptr) {
 ; CHECK-LABEL: define {{[^@]+}}@callee() {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    call void @thunk()
@@ -14,8 +14,8 @@ entry:
   ret void
 }
 
-define void @test1() personality i32 (...)* @__CxxFrameHandler3 {
-; CHECK-LABEL: define {{[^@]+}}@test1() personality i32 (...)* @__CxxFrameHandler3 {
+define void @test1() personality ptr @__CxxFrameHandler3 {
+; CHECK-LABEL: define {{[^@]+}}@test1() personality ptr @__CxxFrameHandler3 {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    invoke void @thunk()
 ; CHECK-NEXT:    to label [[OUT:%.*]] unwind label [[CPAD:%.*]]
@@ -35,7 +35,7 @@ out:
 
 cpad:
   %pad = cleanuppad within none []
-  call void @callee(i8* null) [ "funclet"(token %pad) ]
+  call void @callee(ptr null) [ "funclet"(token %pad) ]
   cleanupret from %pad unwind to caller
 }
 

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/pr32917.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/pr32917.ll
index d13c5d2ff6207..01e18d61229bf 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/pr32917.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/pr32917.ll
@@ -14,48 +14,48 @@ define i32 @fn2() local_unnamed_addr {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@fn2
 ; TUNIT-SAME: () local_unnamed_addr #[[ATTR0:[0-9]+]] {
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* @b, align 4
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr @b, align 4
 ; TUNIT-NEXT:    [[TMP2:%.*]] = sext i32 [[TMP1]] to i64
-; TUNIT-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to i32*
-; TUNIT-NEXT:    call fastcc void @fn1(i32* nocapture nofree readonly align 4 [[TMP3]]) #[[ATTR1:[0-9]+]]
+; TUNIT-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
+; TUNIT-NEXT:    call fastcc void @fn1(ptr nocapture nofree readonly align 4 [[TMP3]]) #[[ATTR1:[0-9]+]]
 ; TUNIT-NEXT:    ret i32 undef
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@fn2
 ; CGSCC-SAME: () local_unnamed_addr #[[ATTR0:[0-9]+]] {
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, i32* @b, align 4
+; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr @b, align 4
 ; CGSCC-NEXT:    [[TMP2:%.*]] = sext i32 [[TMP1]] to i64
-; CGSCC-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to i32*
-; CGSCC-NEXT:    call fastcc void @fn1(i32* nocapture nofree nonnull readonly align 4 [[TMP3]]) #[[ATTR2:[0-9]+]]
+; CGSCC-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
+; CGSCC-NEXT:    call fastcc void @fn1(ptr nocapture nofree nonnull readonly align 4 [[TMP3]]) #[[ATTR2:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 undef
 ;
-  %1 = load i32, i32* @b, align 4
+  %1 = load i32, ptr @b, align 4
   %2 = sext i32 %1 to i64
-  %3 = inttoptr i64 %2 to i32*
-  call fastcc void @fn1(i32* %3)
+  %3 = inttoptr i64 %2 to ptr
+  call fastcc void @fn1(ptr %3)
   ret i32 undef
 }
 
-define internal fastcc void @fn1(i32* nocapture readonly) unnamed_addr {
+define internal fastcc void @fn1(ptr nocapture readonly) unnamed_addr {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@fn1
-; TUNIT-SAME: (i32* nocapture nofree nonnull readonly align 4 [[TMP0:%.*]]) unnamed_addr #[[ATTR0]] {
-; TUNIT-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, i32* [[TMP0]], i64 -1
-; TUNIT-NEXT:    [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4
-; TUNIT-NEXT:    store i32 [[TMP3]], i32* @a, align 4
+; TUNIT-SAME: (ptr nocapture nofree nonnull readonly align 4 [[TMP0:%.*]]) unnamed_addr #[[ATTR0]] {
+; TUNIT-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 -1
+; TUNIT-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4
+; TUNIT-NEXT:    store i32 [[TMP3]], ptr @a, align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@fn1
-; CGSCC-SAME: (i32* nocapture nofree nonnull readonly align 4 [[TMP0:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] {
-; CGSCC-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, i32* [[TMP0]], i64 -1
-; CGSCC-NEXT:    [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4
-; CGSCC-NEXT:    store i32 [[TMP3]], i32* @a, align 4
+; CGSCC-SAME: (ptr nocapture nofree nonnull readonly align 4 [[TMP0:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] {
+; CGSCC-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 -1
+; CGSCC-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4
+; CGSCC-NEXT:    store i32 [[TMP3]], ptr @a, align 4
 ; CGSCC-NEXT:    ret void
 ;
-  %2 = getelementptr inbounds i32, i32* %0, i64 -1
-  %3 = load i32, i32* %2, align 4
-  store i32 %3, i32* @a, align 4
+  %2 = getelementptr inbounds i32, ptr %0, i64 -1
+  %3 = load i32, ptr %2, align 4
+  store i32 %3, ptr @a, align 4
   ret void
 }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
index 6783e908b67db..59a33276b0571 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
@@ -8,26 +8,26 @@
 ; The %p argument should be removed, and the use of it in dbg.value should be
 ; changed to undef.
 
-%p_t = type i16*
-%fun_t = type void (%p_t)*
+%p_t = type ptr
+%fun_t = type ptr
 
 define void @foo() {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@foo
 ; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
-; CHECK-NEXT:    [[TMP:%.*]] = alloca void (i16*)*, align 8
+; CHECK-NEXT:    [[TMP:%.*]] = alloca ptr, align 8
 ; CHECK-NEXT:    ret void
 ;
   %tmp = alloca %fun_t
-  store %fun_t @bar, %fun_t* %tmp
+  store %fun_t @bar, ptr %tmp
   ret void
 }
 
 define internal void @bar(%p_t %p)  {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@bar
-; CGSCC-SAME: (i16* nocapture nofree readnone [[P:%.*]]) #[[ATTR0]] {
-; CGSCC-NEXT:    call void @llvm.dbg.value(metadata i16* [[P]], metadata [[META3:![0-9]+]], metadata !DIExpression()) #[[ATTR2:[0-9]+]], !dbg [[DBG5:![0-9]+]]
+; CGSCC-SAME: (ptr nocapture nofree readnone [[P:%.*]]) #[[ATTR0]] {
+; CGSCC-NEXT:    call void @llvm.dbg.value(metadata ptr [[P]], metadata [[META3:![0-9]+]], metadata !DIExpression()) #[[ATTR2:[0-9]+]], !dbg [[DBG5:![0-9]+]]
 ; CGSCC-NEXT:    ret void
 ;
   call void @llvm.dbg.value(metadata %p_t %p, metadata !4, metadata !5), !dbg !6

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/profile.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/profile.ll
index 13cc1794f9ab8..0f818f25a6fac 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/profile.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/profile.ll
@@ -8,8 +8,8 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
 define void @caller() #0 {
 ; TUNIT-LABEL: define {{[^@]+}}@caller() {
 ; TUNIT-NEXT:    [[X:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    store i32 42, i32* [[X]], align 4
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* [[X]], align 4
+; TUNIT-NEXT:    store i32 42, ptr [[X]], align 4
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr [[X]], align 4
 ; TUNIT-NEXT:    call void @promote_i32_ptr(i32 [[TMP1]]), !prof [[PROF0:![0-9]+]]
 ; TUNIT-NEXT:    ret void
 ;
@@ -18,21 +18,21 @@ define void @caller() #0 {
 ; CGSCC-NEXT:    ret void
 ;
   %x = alloca i32
-  store i32 42, i32* %x
-  call void @promote_i32_ptr(i32* %x), !prof !0
+  store i32 42, ptr %x
+  call void @promote_i32_ptr(ptr %x), !prof !0
   ret void
 }
 
-define internal void @promote_i32_ptr(i32* %xp) {
+define internal void @promote_i32_ptr(ptr %xp) {
 ; CHECK-LABEL: define {{[^@]+}}@promote_i32_ptr
 ; CHECK-SAME: (i32 [[TMP0:%.*]]) {
 ; CHECK-NEXT:    [[XP_PRIV:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    store i32 [[TMP0]], i32* [[XP_PRIV]], align 4
-; CHECK-NEXT:    [[X:%.*]] = load i32, i32* [[XP_PRIV]], align 4
+; CHECK-NEXT:    store i32 [[TMP0]], ptr [[XP_PRIV]], align 4
+; CHECK-NEXT:    [[X:%.*]] = load i32, ptr [[XP_PRIV]], align 4
 ; CHECK-NEXT:    call void @use_i32(i32 [[X]])
 ; CHECK-NEXT:    ret void
 ;
-  %x = load i32, i32* %xp
+  %x = load i32, ptr %xp
   call void @use_i32(i32 %x)
   ret void
 }

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/reserve-tbaa.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/reserve-tbaa.ll
index 79b0a07f1a5c2..cf6e978101704 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/reserve-tbaa.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/reserve-tbaa.ll
@@ -8,35 +8,35 @@
 ; This testing case makes sure that we correctly transfer the tbaa tags from the
 ; original loads to the newly-created loads when promoting pointer arguments.
 
- at a = global i32* null, align 8
- at e = global i32** @a, align 8
+ at a = global ptr null, align 8
+ at e = global ptr @a, align 8
 @g = global i32 0, align 4
 @c = global i64 0, align 8
 @d = global i8 0, align 1
 
 ;.
-; CHECK: @[[A:[a-zA-Z0-9_$"\\.-]+]] = global i32* null, align 8
-; CHECK: @[[E:[a-zA-Z0-9_$"\\.-]+]] = global i32** @a, align 8
+; CHECK: @[[A:[a-zA-Z0-9_$"\\.-]+]] = global ptr null, align 8
+; CHECK: @[[E:[a-zA-Z0-9_$"\\.-]+]] = global ptr @a, align 8
 ; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = global i32 0, align 4
 ; CHECK: @[[C:[a-zA-Z0-9_$"\\.-]+]] = global i64 0, align 8
 ; CHECK: @[[D:[a-zA-Z0-9_$"\\.-]+]] = global i8 0, align 1
 ;.
-define internal fastcc void @fn(i32* nocapture readonly %p1, i64* nocapture readonly %p2) {
+define internal fastcc void @fn(ptr nocapture readonly %p1, ptr nocapture readonly %p2) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; CHECK-LABEL: define {{[^@]+}}@fn
 ; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* @g, align 4, !tbaa [[TBAA0:![0-9]+]]
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr @g, align 4, !tbaa [[TBAA0:![0-9]+]]
 ; CHECK-NEXT:    [[CONV1:%.*]] = trunc i32 [[TMP0]] to i8
-; CHECK-NEXT:    store i8 [[CONV1]], i8* @d, align 1, !tbaa [[TBAA4:![0-9]+]]
+; CHECK-NEXT:    store i8 [[CONV1]], ptr @d, align 1, !tbaa [[TBAA4:![0-9]+]]
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %0 = load i64, i64* %p2, align 8, !tbaa !1
+  %0 = load i64, ptr %p2, align 8, !tbaa !1
   %conv = trunc i64 %0 to i32
-  %1 = load i32, i32* %p1, align 4, !tbaa !5
+  %1 = load i32, ptr %p1, align 4, !tbaa !5
   %conv1 = trunc i32 %1 to i8
-  store i8 %conv1, i8* @d, align 1, !tbaa !7
+  store i8 %conv1, ptr @d, align 1, !tbaa !7
   ret void
 }
 
@@ -45,10 +45,10 @@ define i32 @main() {
 ; TUNIT-LABEL: define {{[^@]+}}@main
 ; TUNIT-SAME: () #[[ATTR0]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32**, i32*** @e, align 8, !tbaa [[TBAA5:![0-9]+]]
-; TUNIT-NEXT:    store i32* @g, i32** [[TMP0]], align 8, !tbaa [[TBAA5]]
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32*, i32** @a, align 8, !tbaa [[TBAA5]]
-; TUNIT-NEXT:    store i32 1, i32* [[TMP1]], align 4, !tbaa [[TBAA0]]
+; TUNIT-NEXT:    [[TMP0:%.*]] = load ptr, ptr @e, align 8, !tbaa [[TBAA5:![0-9]+]]
+; TUNIT-NEXT:    store ptr @g, ptr [[TMP0]], align 8, !tbaa [[TBAA5]]
+; TUNIT-NEXT:    [[TMP1:%.*]] = load ptr, ptr @a, align 8, !tbaa [[TBAA5]]
+; TUNIT-NEXT:    store i32 1, ptr [[TMP1]], align 4, !tbaa [[TBAA0]]
 ; TUNIT-NEXT:    call fastcc void @fn() #[[ATTR1:[0-9]+]]
 ; TUNIT-NEXT:    ret i32 0
 ;
@@ -56,19 +56,19 @@ define i32 @main() {
 ; CGSCC-LABEL: define {{[^@]+}}@main
 ; CGSCC-SAME: () #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32**, i32*** @e, align 8, !tbaa [[TBAA5:![0-9]+]]
-; CGSCC-NEXT:    store i32* @g, i32** [[TMP0]], align 8, !tbaa [[TBAA5]]
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i32*, i32** @a, align 8, !tbaa [[TBAA5]]
-; CGSCC-NEXT:    store i32 1, i32* [[TMP1]], align 4, !tbaa [[TBAA0]]
+; CGSCC-NEXT:    [[TMP0:%.*]] = load ptr, ptr @e, align 8, !tbaa [[TBAA5:![0-9]+]]
+; CGSCC-NEXT:    store ptr @g, ptr [[TMP0]], align 8, !tbaa [[TBAA5]]
+; CGSCC-NEXT:    [[TMP1:%.*]] = load ptr, ptr @a, align 8, !tbaa [[TBAA5]]
+; CGSCC-NEXT:    store i32 1, ptr [[TMP1]], align 4, !tbaa [[TBAA0]]
 ; CGSCC-NEXT:    call fastcc void @fn() #[[ATTR2:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 0
 ;
 entry:
-  %0 = load i32**, i32*** @e, align 8, !tbaa !8
-  store i32* @g, i32** %0, align 8, !tbaa !8
-  %1 = load i32*, i32** @a, align 8, !tbaa !8
-  store i32 1, i32* %1, align 4, !tbaa !5
-  call fastcc void @fn(i32* @g, i64* @c)
+  %0 = load ptr, ptr @e, align 8, !tbaa !8
+  store ptr @g, ptr %0, align 8, !tbaa !8
+  %1 = load ptr, ptr @a, align 8, !tbaa !8
+  store i32 1, ptr %1, align 4, !tbaa !5
+  call fastcc void @fn(ptr @g, ptr @c)
 
   ret i32 0
 }

diff  --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/variadic.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/variadic.ll
index e9a09a6a2f1dc..d80d57f4f108b 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/variadic.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/variadic.ll
@@ -10,7 +10,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
 %struct.tt0 = type { i64, i64 }
-%struct.__va_list_tag = type { i32, i32, i8*, i8* }
+%struct.__va_list_tag = type { i32, i32, ptr, ptr }
 
 @t45 = internal global %struct.tt0 { i64 1335139741, i64 438042995 }, align 8
 
@@ -18,22 +18,22 @@ target triple = "x86_64-unknown-linux-gnu"
 ;.
 ; CHECK: @[[T45:[a-zA-Z0-9_$"\\.-]+]] = internal global [[STRUCT_TT0:%.*]] { i64 1335139741, i64 438042995 }, align 8
 ;.
-define i32 @main(i32 %argc, i8** nocapture readnone %argv) #0 {
+define i32 @main(i32 %argc, ptr nocapture readnone %argv) #0 {
 ; CHECK-LABEL: define {{[^@]+}}@main
-; CHECK-SAME: (i32 [[ARGC:%.*]], i8** nocapture nofree readnone [[ARGV:%.*]]) {
+; CHECK-SAME: (i32 [[ARGC:%.*]], ptr nocapture nofree readnone [[ARGV:%.*]]) {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    tail call void (i8*, i8*, i8*, i8*, i8*, ...) @callee_t0f(i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, %struct.tt0* noundef nonnull byval([[STRUCT_TT0:%.*]]) align 8 dereferenceable(16) @t45)
+; CHECK-NEXT:    tail call void (ptr, ptr, ptr, ptr, ptr, ...) @callee_t0f(ptr undef, ptr undef, ptr undef, ptr undef, ptr undef, ptr noundef nonnull byval([[STRUCT_TT0:%.*]]) align 8 dereferenceable(16) @t45)
 ; CHECK-NEXT:    ret i32 0
 ;
 entry:
-  tail call void (i8*, i8*, i8*, i8*, i8*, ...) @callee_t0f(i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, %struct.tt0* byval(%struct.tt0) align 8 @t45)
+  tail call void (ptr, ptr, ptr, ptr, ptr, ...) @callee_t0f(ptr undef, ptr undef, ptr undef, ptr undef, ptr undef, ptr byval(%struct.tt0) align 8 @t45)
   ret i32 0
 }
 
 ; Function Attrs: nounwind uwtable
-define internal void @callee_t0f(i8* nocapture readnone %tp13, i8* nocapture readnone %tp14, i8* nocapture readnone %tp15, i8* nocapture readnone %tp16, i8* nocapture readnone %tp17, ...) {
+define internal void @callee_t0f(ptr nocapture readnone %tp13, ptr nocapture readnone %tp14, ptr nocapture readnone %tp15, ptr nocapture readnone %tp16, ptr nocapture readnone %tp17, ...) {
 ; CHECK-LABEL: define {{[^@]+}}@callee_t0f
-; CHECK-SAME: (i8* noalias nocapture nofree nonnull readnone align 4294967296 [[TP13:%.*]], i8* noalias nocapture nofree nonnull readnone align 4294967296 [[TP14:%.*]], i8* noalias nocapture nofree nonnull readnone align 4294967296 [[TP15:%.*]], i8* noalias nocapture nofree nonnull readnone align 4294967296 [[TP16:%.*]], i8* noalias nocapture nofree nonnull readnone align 4294967296 [[TP17:%.*]], ...) {
+; CHECK-SAME: (ptr noalias nocapture nofree nonnull readnone align 4294967296 [[TP13:%.*]], ptr noalias nocapture nofree nonnull readnone align 4294967296 [[TP14:%.*]], ptr noalias nocapture nofree nonnull readnone align 4294967296 [[TP15:%.*]], ptr noalias nocapture nofree nonnull readnone align 4294967296 [[TP16:%.*]], ptr noalias nocapture nofree nonnull readnone align 4294967296 [[TP17:%.*]], ...) {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    call void @sink(i32 noundef 0)
 ; CHECK-NEXT:    ret void

diff  --git a/llvm/test/Transforms/Attributor/IPConstantProp/PR26044.ll b/llvm/test/Transforms/Attributor/IPConstantProp/PR26044.ll
index b8bc69e0b25c0..d623d81ae5630 100644
--- a/llvm/test/Transforms/Attributor/IPConstantProp/PR26044.ll
+++ b/llvm/test/Transforms/Attributor/IPConstantProp/PR26044.ll
@@ -4,35 +4,35 @@
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
-define void @fn2(i32* %P, i1 %C) {
+define void @fn2(ptr %P, i1 %C) {
 ;
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@fn2
-; TUNIT-SAME: (i32* nocapture nofree [[P:%.*]], i1 [[C:%.*]]) #[[ATTR0:[0-9]+]] {
+; TUNIT-SAME: (ptr nocapture nofree [[P:%.*]], i1 [[C:%.*]]) #[[ATTR0:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    br label [[IF_END:%.*]]
 ; TUNIT:       for.cond1:
 ; TUNIT-NEXT:    br i1 [[C]], label [[IF_END]], label [[EXIT:%.*]]
 ; TUNIT:       if.end:
-; TUNIT-NEXT:    [[E_2:%.*]] = phi i32* [ [[P]], [[ENTRY:%.*]] ], [ null, [[FOR_COND1:%.*]] ]
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, i32* [[E_2]], align 4
-; TUNIT-NEXT:    store i32 [[TMP0]], i32* [[P]], align 4
+; TUNIT-NEXT:    [[E_2:%.*]] = phi ptr [ [[P]], [[ENTRY:%.*]] ], [ null, [[FOR_COND1:%.*]] ]
+; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr [[E_2]], align 4
+; TUNIT-NEXT:    store i32 [[TMP0]], ptr [[P]], align 4
 ; TUNIT-NEXT:    br label [[FOR_COND1]]
 ; TUNIT:       exit:
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@fn2
-; CGSCC-SAME: (i32* nocapture nofree nonnull align 4 dereferenceable(4) [[P:%.*]], i1 [[C:%.*]]) #[[ATTR0:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture nofree nonnull align 4 dereferenceable(4) [[P:%.*]], i1 [[C:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    br label [[IF_END:%.*]]
 ; CGSCC:       for.cond1:
 ; CGSCC-NEXT:    br i1 [[C]], label [[IF_END]], label [[EXIT:%.*]]
 ; CGSCC:       if.end:
-; CGSCC-NEXT:    [[E_2:%.*]] = phi i32* [ [[P]], [[ENTRY:%.*]] ], [ null, [[FOR_COND1:%.*]] ]
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, i32* [[E_2]], align 4
+; CGSCC-NEXT:    [[E_2:%.*]] = phi ptr [ [[P]], [[ENTRY:%.*]] ], [ null, [[FOR_COND1:%.*]] ]
+; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr [[E_2]], align 4
 ; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @fn1(i32 [[TMP0]])
-; CGSCC-NEXT:    store i32 [[CALL]], i32* [[P]], align 4
+; CGSCC-NEXT:    store i32 [[CALL]], ptr [[P]], align 4
 ; CGSCC-NEXT:    br label [[FOR_COND1]]
 ; CGSCC:       exit:
 ; CGSCC-NEXT:    ret void
@@ -44,10 +44,10 @@ for.cond1:                                        ; preds = %if.end
   br i1 %C, label %if.end, label %exit
 
 if.end:                                           ; preds = %entry, %for.cond1
-  %e.2 = phi i32* [ %P, %entry ], [ null, %for.cond1 ]
-  %0 = load i32, i32* %e.2, align 4
+  %e.2 = phi ptr [ %P, %entry ], [ null, %for.cond1 ]
+  %0 = load i32, ptr %e.2, align 4
   %call = call i32 @fn1(i32 %0)
-  store i32 %call, i32* %P
+  store i32 %call, ptr %P
   br label %for.cond1
 exit:
   ret void
@@ -66,35 +66,35 @@ entry:
   ret i32 %cond
 }
 
-define void @fn_no_null_opt(i32* %P, i1 %C) null_pointer_is_valid {
+define void @fn_no_null_opt(ptr %P, i1 %C) null_pointer_is_valid {
 ;
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind null_pointer_is_valid
 ; TUNIT-LABEL: define {{[^@]+}}@fn_no_null_opt
-; TUNIT-SAME: (i32* nocapture nofree writeonly [[P:%.*]], i1 [[C:%.*]]) #[[ATTR1:[0-9]+]] {
+; TUNIT-SAME: (ptr nocapture nofree writeonly [[P:%.*]], i1 [[C:%.*]]) #[[ATTR1:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    br label [[IF_END:%.*]]
 ; TUNIT:       for.cond1:
 ; TUNIT-NEXT:    br i1 [[C]], label [[IF_END]], label [[EXIT:%.*]]
 ; TUNIT:       if.end:
-; TUNIT-NEXT:    [[E_2:%.*]] = phi i32* [ undef, [[ENTRY:%.*]] ], [ null, [[FOR_COND1:%.*]] ]
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, i32* null, align 4294967296
-; TUNIT-NEXT:    store i32 [[TMP0]], i32* [[P]], align 4
+; TUNIT-NEXT:    [[E_2:%.*]] = phi ptr [ undef, [[ENTRY:%.*]] ], [ null, [[FOR_COND1:%.*]] ]
+; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr null, align 4294967296
+; TUNIT-NEXT:    store i32 [[TMP0]], ptr [[P]], align 4
 ; TUNIT-NEXT:    br label [[FOR_COND1]]
 ; TUNIT:       exit:
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind null_pointer_is_valid
 ; CGSCC-LABEL: define {{[^@]+}}@fn_no_null_opt
-; CGSCC-SAME: (i32* nocapture nofree writeonly align 4 dereferenceable_or_null(4) [[P:%.*]], i1 [[C:%.*]]) #[[ATTR2:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture nofree writeonly align 4 dereferenceable_or_null(4) [[P:%.*]], i1 [[C:%.*]]) #[[ATTR2:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    br label [[IF_END:%.*]]
 ; CGSCC:       for.cond1:
 ; CGSCC-NEXT:    br i1 [[C]], label [[IF_END]], label [[EXIT:%.*]]
 ; CGSCC:       if.end:
-; CGSCC-NEXT:    [[E_2:%.*]] = phi i32* [ undef, [[ENTRY:%.*]] ], [ null, [[FOR_COND1:%.*]] ]
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, i32* null, align 4294967296
+; CGSCC-NEXT:    [[E_2:%.*]] = phi ptr [ undef, [[ENTRY:%.*]] ], [ null, [[FOR_COND1:%.*]] ]
+; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr null, align 4294967296
 ; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @fn0(i32 [[TMP0]])
-; CGSCC-NEXT:    store i32 [[CALL]], i32* [[P]], align 4
+; CGSCC-NEXT:    store i32 [[CALL]], ptr [[P]], align 4
 ; CGSCC-NEXT:    br label [[FOR_COND1]]
 ; CGSCC:       exit:
 ; CGSCC-NEXT:    ret void
@@ -106,10 +106,10 @@ for.cond1:                                        ; preds = %if.end
   br i1 %C, label %if.end, label %exit
 
 if.end:                                           ; preds = %entry, %for.cond1
-  %e.2 = phi i32* [ undef, %entry ], [ null, %for.cond1 ]
-  %0 = load i32, i32* %e.2, align 4
+  %e.2 = phi ptr [ undef, %entry ], [ null, %for.cond1 ]
+  %0 = load i32, ptr %e.2, align 4
   %call = call i32 @fn0(i32 %0)
-  store i32 %call, i32* %P
+  store i32 %call, ptr %P
   br label %for.cond1
 exit:
   ret void

diff  --git a/llvm/test/Transforms/Attributor/IPConstantProp/PR43857.ll b/llvm/test/Transforms/Attributor/IPConstantProp/PR43857.ll
index 79a6774836475..975dd81d78d4e 100644
--- a/llvm/test/Transforms/Attributor/IPConstantProp/PR43857.ll
+++ b/llvm/test/Transforms/Attributor/IPConstantProp/PR43857.ll
@@ -5,7 +5,7 @@
 %struct.wobble = type { i32 }
 %struct.zot = type { %struct.wobble, %struct.wobble, %struct.wobble }
 
-declare dso_local fastcc float @bar(%struct.wobble* noalias, <8 x i32>) unnamed_addr
+declare dso_local fastcc float @bar(ptr noalias, <8 x i32>) unnamed_addr
 
 define %struct.zot @widget(<8 x i32> %arg) local_unnamed_addr {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)

diff  --git a/llvm/test/Transforms/Attributor/IPConstantProp/dangling-block-address.ll b/llvm/test/Transforms/Attributor/IPConstantProp/dangling-block-address.ll
index dda6fe5129568..3afee7ad67dac 100644
--- a/llvm/test/Transforms/Attributor/IPConstantProp/dangling-block-address.ll
+++ b/llvm/test/Transforms/Attributor/IPConstantProp/dangling-block-address.ll
@@ -6,15 +6,15 @@
 ; IPSCCP should prove that the blocks are dead and delete them, and
 ; properly handle the dangling blockaddress constants.
 
- at code = global [5 x i32] [i32 0, i32 0, i32 0, i32 0, i32 1], align 4 ; <[5 x i32]*> [#uses=0]
- at bar.l = internal constant [2 x i8*] [i8* blockaddress(@bar, %lab0), i8* blockaddress(@bar, %end)] ; <[2 x i8*]*> [#uses=1]
+ at code = global [5 x i32] [i32 0, i32 0, i32 0, i32 0, i32 1], align 4 ; <ptr> [#uses=0]
+ at bar.l = internal constant [2 x ptr] [ptr blockaddress(@bar, %lab0), ptr blockaddress(@bar, %end)] ; <ptr> [#uses=1]
 
 ;.
 ; TUNIT: @[[CODE:[a-zA-Z0-9_$"\\.-]+]] = global [5 x i32] [i32 0, i32 0, i32 0, i32 0, i32 1], align 4
-; TUNIT: @[[BAR_L:[a-zA-Z0-9_$"\\.-]+]] = internal constant [2 x i8*] [i8* inttoptr (i32 1 to i8*), i8* inttoptr (i32 1 to i8*)]
+; TUNIT: @[[BAR_L:[a-zA-Z0-9_$"\\.-]+]] = internal constant [2 x ptr] [ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 1 to ptr)]
 ;.
 ; CGSCC: @[[CODE:[a-zA-Z0-9_$"\\.-]+]] = global [5 x i32] [i32 0, i32 0, i32 0, i32 0, i32 1], align 4
-; CGSCC: @[[BAR_L:[a-zA-Z0-9_$"\\.-]+]] = internal constant [2 x i8*] [i8* blockaddress(@bar, [[LAB0:%.*]]), i8* blockaddress(@bar, [[END:%.*]])]
+; CGSCC: @[[BAR_L:[a-zA-Z0-9_$"\\.-]+]] = internal constant [2 x ptr] [ptr blockaddress(@bar, [[LAB0:%.*]]), ptr blockaddress(@bar, [[END:%.*]])]
 ;.
 define internal void @foo(i32 %x) nounwind readnone {
 ; CGSCC: Function Attrs: nounwind memory(none)
@@ -22,19 +22,19 @@ define internal void @foo(i32 %x) nounwind readnone {
 ; CGSCC-SAME: (i32 [[X:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[B:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store volatile i32 -1, i32* [[B]], align 4
+; CGSCC-NEXT:    store volatile i32 -1, ptr [[B]], align 4
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %b = alloca i32, align 4                        ; <i32*> [#uses=1]
-  store volatile i32 -1, i32* %b
+  %b = alloca i32, align 4                        ; <ptr> [#uses=1]
+  store volatile i32 -1, ptr %b
   ret void
 }
 
-define internal void @bar(i32* nocapture %pc) nounwind readonly {
+define internal void @bar(ptr nocapture %pc) nounwind readonly {
 ; CGSCC: Function Attrs: nounwind memory(read)
 ; CGSCC-LABEL: define {{[^@]+}}@bar
-; CGSCC-SAME: (i32* nocapture [[PC:%.*]]) #[[ATTR1:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture [[PC:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    br label [[INDIRECTGOTO:%.*]]
 ; CGSCC:       lab0:
@@ -44,11 +44,11 @@ define internal void @bar(i32* nocapture %pc) nounwind readonly {
 ; CGSCC-NEXT:    ret void
 ; CGSCC:       indirectgoto:
 ; CGSCC-NEXT:    [[INDVAR]] = phi i32 [ [[INDVAR_NEXT]], [[LAB0:%.*]] ], [ 0, [[ENTRY:%.*]] ]
-; CGSCC-NEXT:    [[PC_ADDR_0:%.*]] = getelementptr i32, i32* [[PC]], i32 [[INDVAR]]
-; CGSCC-NEXT:    [[TMP1_PN:%.*]] = load i32, i32* [[PC_ADDR_0]], align 4
-; CGSCC-NEXT:    [[INDIRECT_GOTO_DEST_IN:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* @bar.l, i32 0, i32 [[TMP1_PN]]
-; CGSCC-NEXT:    [[INDIRECT_GOTO_DEST:%.*]] = load i8*, i8** [[INDIRECT_GOTO_DEST_IN]], align 8
-; CGSCC-NEXT:    indirectbr i8* [[INDIRECT_GOTO_DEST]], [label [[LAB0]], label %end]
+; CGSCC-NEXT:    [[PC_ADDR_0:%.*]] = getelementptr i32, ptr [[PC]], i32 [[INDVAR]]
+; CGSCC-NEXT:    [[TMP1_PN:%.*]] = load i32, ptr [[PC_ADDR_0]], align 4
+; CGSCC-NEXT:    [[INDIRECT_GOTO_DEST_IN:%.*]] = getelementptr inbounds [2 x ptr], ptr @bar.l, i32 0, i32 [[TMP1_PN]]
+; CGSCC-NEXT:    [[INDIRECT_GOTO_DEST:%.*]] = load ptr, ptr [[INDIRECT_GOTO_DEST_IN]], align 8
+; CGSCC-NEXT:    indirectbr ptr [[INDIRECT_GOTO_DEST]], [label [[LAB0]], label %end]
 ;
 entry:
   br label %indirectgoto
@@ -62,11 +62,11 @@ end:                                              ; preds = %indirectgoto
 
 indirectgoto:                                     ; preds = %lab0, %entry
   %indvar = phi i32 [ %indvar.next, %lab0 ], [ 0, %entry ] ; <i32> [#uses=2]
-  %pc.addr.0 = getelementptr i32, i32* %pc, i32 %indvar ; <i32*> [#uses=1]
-  %tmp1.pn = load i32, i32* %pc.addr.0                 ; <i32> [#uses=1]
-  %indirect.goto.dest.in = getelementptr inbounds [2 x i8*], [2 x i8*]* @bar.l, i32 0, i32 %tmp1.pn ; <i8**> [#uses=1]
-  %indirect.goto.dest = load i8*, i8** %indirect.goto.dest.in ; <i8*> [#uses=1]
-  indirectbr i8* %indirect.goto.dest, [label %lab0, label %end]
+  %pc.addr.0 = getelementptr i32, ptr %pc, i32 %indvar ; <ptr> [#uses=1]
+  %tmp1.pn = load i32, ptr %pc.addr.0                 ; <i32> [#uses=1]
+  %indirect.goto.dest.in = getelementptr inbounds [2 x ptr], ptr @bar.l, i32 0, i32 %tmp1.pn ; <ptr> [#uses=1]
+  %indirect.goto.dest = load ptr, ptr %indirect.goto.dest.in ; <ptr> [#uses=1]
+  indirectbr ptr %indirect.goto.dest, [label %lab0, label %end]
 }
 
 define i32 @main() nounwind readnone {

diff  --git a/llvm/test/Transforms/Attributor/IPConstantProp/global.ll b/llvm/test/Transforms/Attributor/IPConstantProp/global.ll
index 8191851004d61..471e61182ce6b 100644
--- a/llvm/test/Transforms/Attributor/IPConstantProp/global.ll
+++ b/llvm/test/Transforms/Attributor/IPConstantProp/global.ll
@@ -19,12 +19,12 @@ define void @_Z7test1f1v() nounwind {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %tmp = load i32, i32* @_ZL6test1g, align 4
+  %tmp = load i32, ptr @_ZL6test1g, align 4
   %cmp = icmp eq i32 %tmp, 0
   br i1 %cmp, label %if.then, label %if.end
 
 if.then:                                          ; preds = %entry
-  store i32 0, i32* @_ZL6test1g, align 4
+  store i32 0, ptr @_ZL6test1g, align 4
   br label %if.end
 
 if.end:                                           ; preds = %if.then, %entry
@@ -39,7 +39,7 @@ define i32 @_Z7test1f2v() nounwind {
 ; CHECK-NEXT:    ret i32 42
 ;
 entry:
-  %tmp = load i32, i32* @_ZL6test1g, align 4
+  %tmp = load i32, ptr @_ZL6test1g, align 4
   ret i32 %tmp
 }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/IPConstantProp/multiple_callbacks.ll b/llvm/test/Transforms/Attributor/IPConstantProp/multiple_callbacks.ll
index b86c92a306cc5..49a3dd40ddf6c 100644
--- a/llvm/test/Transforms/Attributor/IPConstantProp/multiple_callbacks.ll
+++ b/llvm/test/Transforms/Attributor/IPConstantProp/multiple_callbacks.ll
@@ -102,23 +102,23 @@ entry:
 define void @foo() {
 ; CHECK-LABEL: define {{[^@]+}}@foo() {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    call void @broker(i32 (i32)* noundef nonnull @cb0, i32 (i32)* noundef nonnull @cb1, i32 (i32)* noundef nonnull @cb0, i32 noundef 0, i32 noundef 1)
-; CHECK-NEXT:    call void @broker(i32 (i32)* noundef nonnull @cb1, i32 (i32)* noundef nonnull @cb2, i32 (i32)* noundef nonnull @cb2, i32 noundef 0, i32 noundef 1)
-; CHECK-NEXT:    call void @broker(i32 (i32)* noundef nonnull @cb3, i32 (i32)* noundef nonnull @cb2, i32 (i32)* noundef nonnull @cb3, i32 noundef 0, i32 noundef 1)
-; CHECK-NEXT:    call void @broker(i32 (i32)* noundef nonnull @cb4, i32 (i32)* noundef nonnull @cb4, i32 (i32)* noundef nonnull @cb4, i32 noundef 0, i32 noundef 1)
+; CHECK-NEXT:    call void @broker(ptr noundef nonnull @cb0, ptr noundef nonnull @cb1, ptr noundef nonnull @cb0, i32 noundef 0, i32 noundef 1)
+; CHECK-NEXT:    call void @broker(ptr noundef nonnull @cb1, ptr noundef nonnull @cb2, ptr noundef nonnull @cb2, i32 noundef 0, i32 noundef 1)
+; CHECK-NEXT:    call void @broker(ptr noundef nonnull @cb3, ptr noundef nonnull @cb2, ptr noundef nonnull @cb3, i32 noundef 0, i32 noundef 1)
+; CHECK-NEXT:    call void @broker(ptr noundef nonnull @cb4, ptr noundef nonnull @cb4, ptr noundef nonnull @cb4, i32 noundef 0, i32 noundef 1)
 ; CHECK-NEXT:    ret void
 ;
 entry:
   %call = call i32 @cb0(i32 0)
   %call1 = call i32 @cb3(i32 1)
-  call void @broker(i32 (i32)* nonnull @cb0, i32 (i32)* nonnull @cb1, i32 (i32)* nonnull @cb0, i32 0, i32 1)
-  call void @broker(i32 (i32)* nonnull @cb1, i32 (i32)* nonnull @cb2, i32 (i32)* nonnull @cb2, i32 0, i32 1)
-  call void @broker(i32 (i32)* nonnull @cb3, i32 (i32)* nonnull @cb2, i32 (i32)* nonnull @cb3, i32 0, i32 1)
-  call void @broker(i32 (i32)* nonnull @cb4, i32 (i32)* nonnull @cb4, i32 (i32)* nonnull @cb4, i32 0, i32 1)
+  call void @broker(ptr nonnull @cb0, ptr nonnull @cb1, ptr nonnull @cb0, i32 0, i32 1)
+  call void @broker(ptr nonnull @cb1, ptr nonnull @cb2, ptr nonnull @cb2, i32 0, i32 1)
+  call void @broker(ptr nonnull @cb3, ptr nonnull @cb2, ptr nonnull @cb3, i32 0, i32 1)
+  call void @broker(ptr nonnull @cb4, ptr nonnull @cb4, ptr nonnull @cb4, i32 0, i32 1)
   ret void
 }
 
-declare !callback !3 void @broker(i32 (i32)*, i32 (i32)*, i32 (i32)*, i32, i32)
+declare !callback !3 void @broker(ptr, ptr, ptr, i32, i32)
 
 !0 = !{i64 0, i64 3, i1 false}
 !1 = !{i64 1, i64 4, i1 false}

diff  --git a/llvm/test/Transforms/Attributor/IPConstantProp/musttail-call.ll b/llvm/test/Transforms/Attributor/IPConstantProp/musttail-call.ll
index 539faa222c5dd..cecee0b321bef 100644
--- a/llvm/test/Transforms/Attributor/IPConstantProp/musttail-call.ll
+++ b/llvm/test/Transforms/Attributor/IPConstantProp/musttail-call.ll
@@ -6,64 +6,64 @@
 
 declare i32 @external()
 
-define i8* @start(i8 %v) {
+define ptr @start(i8 %v) {
 ;
 ; TUNIT-LABEL: define {{[^@]+}}@start
 ; TUNIT-SAME: (i8 [[V:%.*]]) {
 ; TUNIT-NEXT:    [[C1:%.*]] = icmp eq i8 [[V]], 0
 ; TUNIT-NEXT:    br i1 [[C1]], label [[TRUE:%.*]], label [[FALSE:%.*]]
 ; TUNIT:       true:
-; TUNIT-NEXT:    [[CA:%.*]] = musttail call noalias noundef align 4294967296 i8* @side_effects(i8 [[V]])
-; TUNIT-NEXT:    ret i8* [[CA]]
+; TUNIT-NEXT:    [[CA:%.*]] = musttail call noalias noundef align 4294967296 ptr @side_effects(i8 [[V]])
+; TUNIT-NEXT:    ret ptr [[CA]]
 ; TUNIT:       false:
 ; TUNIT-NEXT:    [[C2:%.*]] = icmp eq i8 [[V]], 1
 ; TUNIT-NEXT:    br i1 [[C2]], label [[C2_TRUE:%.*]], label [[C2_FALSE:%.*]]
 ; TUNIT:       c2_true:
-; TUNIT-NEXT:    ret i8* null
+; TUNIT-NEXT:    ret ptr null
 ; TUNIT:       c2_false:
-; TUNIT-NEXT:    [[CA2:%.*]] = musttail call noalias noundef align 4294967296 i8* @dont_zap_me(i8 undef)
-; TUNIT-NEXT:    ret i8* [[CA2]]
+; TUNIT-NEXT:    [[CA2:%.*]] = musttail call noalias noundef align 4294967296 ptr @dont_zap_me(i8 undef)
+; TUNIT-NEXT:    ret ptr [[CA2]]
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@start
 ; CGSCC-SAME: (i8 [[V:%.*]]) {
 ; CGSCC-NEXT:    [[C1:%.*]] = icmp eq i8 [[V]], 0
 ; CGSCC-NEXT:    br i1 [[C1]], label [[TRUE:%.*]], label [[FALSE:%.*]]
 ; CGSCC:       true:
-; CGSCC-NEXT:    [[CA:%.*]] = musttail call noalias noundef align 4294967296 i8* @side_effects(i8 [[V]])
-; CGSCC-NEXT:    ret i8* [[CA]]
+; CGSCC-NEXT:    [[CA:%.*]] = musttail call noalias noundef align 4294967296 ptr @side_effects(i8 [[V]])
+; CGSCC-NEXT:    ret ptr [[CA]]
 ; CGSCC:       false:
 ; CGSCC-NEXT:    [[C2:%.*]] = icmp eq i8 [[V]], 1
 ; CGSCC-NEXT:    br i1 [[C2]], label [[C2_TRUE:%.*]], label [[C2_FALSE:%.*]]
 ; CGSCC:       c2_true:
-; CGSCC-NEXT:    [[CA1:%.*]] = musttail call noalias noundef align 4294967296 i8* @no_side_effects(i8 [[V]])
-; CGSCC-NEXT:    ret i8* [[CA1]]
+; CGSCC-NEXT:    [[CA1:%.*]] = musttail call noalias noundef align 4294967296 ptr @no_side_effects(i8 [[V]])
+; CGSCC-NEXT:    ret ptr [[CA1]]
 ; CGSCC:       c2_false:
-; CGSCC-NEXT:    [[CA2:%.*]] = musttail call noalias noundef align 4294967296 i8* @dont_zap_me(i8 [[V]])
-; CGSCC-NEXT:    ret i8* [[CA2]]
+; CGSCC-NEXT:    [[CA2:%.*]] = musttail call noalias noundef align 4294967296 ptr @dont_zap_me(i8 [[V]])
+; CGSCC-NEXT:    ret ptr [[CA2]]
 ;
   %c1 = icmp eq i8 %v, 0
   br i1 %c1, label %true, label %false
 true:
   ; FIXME: propagate the value information for %v
-  %ca = musttail call i8* @side_effects(i8 %v)
-  ret i8* %ca
+  %ca = musttail call ptr @side_effects(i8 %v)
+  ret ptr %ca
 false:
   %c2 = icmp eq i8 %v, 1
   br i1 %c2, label %c2_true, label %c2_false
 c2_true:
-  %ca1 = musttail call i8* @no_side_effects(i8 %v)
-  ret i8* %ca1
+  %ca1 = musttail call ptr @no_side_effects(i8 %v)
+  ret ptr %ca1
 c2_false:
-  %ca2 = musttail call i8* @dont_zap_me(i8 %v)
-  ret i8* %ca2
+  %ca2 = musttail call ptr @dont_zap_me(i8 %v)
+  ret ptr %ca2
 }
 
-define internal i8* @side_effects(i8 %v) {
+define internal ptr @side_effects(i8 %v) {
 ; CHECK-LABEL: define {{[^@]+}}@side_effects
 ; CHECK-SAME: (i8 [[V:%.*]]) {
 ; CHECK-NEXT:    [[I1:%.*]] = call i32 @external()
-; CHECK-NEXT:    [[CA:%.*]] = musttail call noalias noundef align 4294967296 i8* @start(i8 0)
-; CHECK-NEXT:    ret i8* [[CA]]
+; CHECK-NEXT:    [[CA:%.*]] = musttail call noalias noundef align 4294967296 ptr @start(i8 0)
+; CHECK-NEXT:    ret ptr [[CA]]
 ;
   %i1 = call i32 @external()
 
@@ -71,29 +71,29 @@ define internal i8* @side_effects(i8 %v) {
   ; is always `null`.
   ; The call can't be removed due to `external` call above, though.
 
-  %ca = musttail call i8* @start(i8 %v)
+  %ca = musttail call ptr @start(i8 %v)
 
   ; Thus the result must be returned anyway
-  ret i8* %ca
+  ret ptr %ca
 }
 
-define internal i8* @no_side_effects(i8 %v) readonly nounwind {
+define internal ptr @no_side_effects(i8 %v) readonly nounwind {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@no_side_effects
 ; CGSCC-SAME: (i8 [[V:%.*]]) #[[ATTR0:[0-9]+]] {
-; CGSCC-NEXT:    ret i8* null
+; CGSCC-NEXT:    ret ptr null
 ;
-  ret i8* null
+  ret ptr null
 }
 
-define internal i8* @dont_zap_me(i8 %v) {
+define internal ptr @dont_zap_me(i8 %v) {
 ; CHECK-LABEL: define {{[^@]+}}@dont_zap_me
 ; CHECK-SAME: (i8 [[V:%.*]]) {
 ; CHECK-NEXT:    [[I1:%.*]] = call i32 @external()
-; CHECK-NEXT:    ret i8* null
+; CHECK-NEXT:    ret ptr null
 ;
   %i1 = call i32 @external()
-  ret i8* null
+  ret ptr null
 }
 ;.
 ; CGSCC: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind willreturn memory(none) }

diff  --git a/llvm/test/Transforms/Attributor/IPConstantProp/openmp_parallel_for.ll b/llvm/test/Transforms/Attributor/IPConstantProp/openmp_parallel_for.ll
index dcd8d64c74c4e..8fe817505a35a 100644
--- a/llvm/test/Transforms/Attributor/IPConstantProp/openmp_parallel_for.ll
+++ b/llvm/test/Transforms/Attributor/IPConstantProp/openmp_parallel_for.ll
@@ -19,16 +19,16 @@
 ;
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 
-%struct.ident_t = type { i32, i32, i32, i32, i8* }
+%struct.ident_t = type { i32, i32, i32, i32, ptr }
 
 @.str = private unnamed_addr constant [23 x i8] c";unknown;unknown;0;0;;\00", align 1
- at 0 = private unnamed_addr global %struct.ident_t { i32 0, i32 514, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i32 0, i32 0) }, align 8
- at 1 = private unnamed_addr global %struct.ident_t { i32 0, i32 2, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i32 0, i32 0) }, align 8
+ at 0 = private unnamed_addr global %struct.ident_t { i32 0, i32 514, i32 0, i32 0, ptr @.str }, align 8
+ at 1 = private unnamed_addr global %struct.ident_t { i32 0, i32 2, i32 0, i32 0, ptr @.str }, align 8
 
 ;.
 ; CHECK: @[[_STR:[a-zA-Z0-9_$"\\.-]+]] = private unnamed_addr constant [23 x i8] c"
-; CHECK: @[[GLOB0:[0-9]+]] = private unnamed_addr global [[STRUCT_IDENT_T:%.*]] { i32 0, i32 514, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i32 0, i32 0) }, align 8
-; CHECK: @[[GLOB1:[0-9]+]] = private unnamed_addr global [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i32 0, i32 0) }, align 8
+; CHECK: @[[GLOB0:[0-9]+]] = private unnamed_addr global [[STRUCT_IDENT_T:%.*]] { i32 0, i32 514, i32 0, i32 0, ptr @.str }, align 8
+; CHECK: @[[GLOB1:[0-9]+]] = private unnamed_addr global [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 0, i32 0, ptr @.str }, align 8
 ;.
 define dso_local void @foo(i32 %N) {
 ; TUNIT-LABEL: define {{[^@]+}}@foo
@@ -36,9 +36,9 @@ define dso_local void @foo(i32 %N) {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 4
 ; TUNIT-NEXT:    [[P:%.*]] = alloca float, align 4
-; TUNIT-NEXT:    store i32 [[N]], i32* [[N_ADDR]], align 4
-; TUNIT-NEXT:    store i32 7, i32* [[N_ADDR]], align 4
-; TUNIT-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 noundef 3, void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, float*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[N_ADDR]], float* noalias nocapture nofree nonnull readnone align 4 dereferenceable(4) undef, i64 undef)
+; TUNIT-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 4
+; TUNIT-NEXT:    store i32 7, ptr [[N_ADDR]], align 4
+; TUNIT-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 noundef 3, ptr noundef @.omp_outlined., ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[N_ADDR]], ptr noalias nocapture nofree nonnull readnone align 4 dereferenceable(4) undef, i64 undef)
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@foo
@@ -46,67 +46,66 @@ define dso_local void @foo(i32 %N) {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 4
 ; CGSCC-NEXT:    [[P:%.*]] = alloca float, align 4
-; CGSCC-NEXT:    store i32 [[N]], i32* [[N_ADDR]], align 4
-; CGSCC-NEXT:    store float 3.000000e+00, float* [[P]], align 4
-; CGSCC-NEXT:    store i32 7, i32* [[N_ADDR]], align 4
-; CGSCC-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 noundef 3, void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, float*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i32* nofree noundef nonnull readonly align 4 dereferenceable(4) [[N_ADDR]], float* nofree noundef nonnull readonly align 4 dereferenceable(4) [[P]], i64 noundef 4617315517961601024)
+; CGSCC-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 4
+; CGSCC-NEXT:    store float 3.000000e+00, ptr [[P]], align 4
+; CGSCC-NEXT:    store i32 7, ptr [[N_ADDR]], align 4
+; CGSCC-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 noundef 3, ptr noundef @.omp_outlined., ptr nofree noundef nonnull readonly align 4 dereferenceable(4) [[N_ADDR]], ptr nofree noundef nonnull readonly align 4 dereferenceable(4) [[P]], i64 noundef 4617315517961601024)
 ; CGSCC-NEXT:    ret void
 ;
 entry:
   %N.addr = alloca i32, align 4
   %p = alloca float, align 4
-  store i32 %N, i32* %N.addr, align 4
-  store float 3.000000e+00, float* %p, align 4
-  store i32 7, i32* %N.addr, align 4
-  call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull @1, i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*, float*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i32* nonnull %N.addr, float* nonnull %p, i64 4617315517961601024)
+  store i32 %N, ptr %N.addr, align 4
+  store float 3.000000e+00, ptr %p, align 4
+  store i32 7, ptr %N.addr, align 4
+  call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr nonnull @1, i32 3, ptr @.omp_outlined., ptr nonnull %N.addr, ptr nonnull %p, i64 4617315517961601024)
   ret void
 }
 
-define internal void @.omp_outlined.(i32* noalias %.global_tid., i32* noalias %.bound_tid., i32* dereferenceable(4) %N, float* dereferenceable(4) %p, i64 %q) {
+define internal void @.omp_outlined.(ptr noalias %.global_tid., ptr noalias %.bound_tid., ptr dereferenceable(4) %N, ptr dereferenceable(4) %p, i64 %q) {
 ; TUNIT-LABEL: define {{[^@]+}}@.omp_outlined.
-; TUNIT-SAME: (i32* noalias nocapture nofree readonly [[DOTGLOBAL_TID_:%.*]], i32* noalias nocapture nofree readnone [[DOTBOUND_TID_:%.*]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[N:%.*]], float* noalias nocapture nofree nonnull readnone align 4 dereferenceable(4) [[P:%.*]], i64 [[Q:%.*]]) {
+; TUNIT-SAME: (ptr noalias nocapture nofree readonly [[DOTGLOBAL_TID_:%.*]], ptr noalias nocapture nofree readnone [[DOTBOUND_TID_:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[N:%.*]], ptr noalias nocapture nofree nonnull readnone align 4 dereferenceable(4) [[P:%.*]], i64 [[Q:%.*]]) {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[Q_ADDR:%.*]] = alloca i64, align 8
 ; TUNIT-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4
 ; TUNIT-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4
 ; TUNIT-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4
 ; TUNIT-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    store i64 4617315517961601024, i64* [[Q_ADDR]], align 8
-; TUNIT-NEXT:    [[CONV:%.*]] = bitcast i64* [[Q_ADDR]] to double*
-; TUNIT-NEXT:    [[TMP:%.*]] = load i32, i32* [[N]], align 4
+; TUNIT-NEXT:    store i64 4617315517961601024, ptr [[Q_ADDR]], align 8
+; TUNIT-NEXT:    [[TMP:%.*]] = load i32, ptr [[N]], align 4
 ; TUNIT-NEXT:    [[SUB3:%.*]] = add nsw i32 [[TMP]], -3
 ; TUNIT-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP]], 2
 ; TUNIT-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]
 ; TUNIT:       omp.precond.then:
-; TUNIT-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 4
-; TUNIT-NEXT:    store i32 [[SUB3]], i32* [[DOTOMP_UB]], align 4
-; TUNIT-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 4
-; TUNIT-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 4
-; TUNIT-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTGLOBAL_TID_]], align 4
-; TUNIT-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB0]], i32 [[TMP5]], i32 noundef 34, i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]], i32 noundef 1, i32 noundef 1)
-; TUNIT-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4
+; TUNIT-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4
+; TUNIT-NEXT:    store i32 [[SUB3]], ptr [[DOTOMP_UB]], align 4
+; TUNIT-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4
+; TUNIT-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4
+; TUNIT-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTGLOBAL_TID_]], align 4
+; TUNIT-NEXT:    call void @__kmpc_for_static_init_4(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB0]], i32 [[TMP5]], i32 noundef 34, ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]], i32 noundef 1, i32 noundef 1)
+; TUNIT-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4
 ; TUNIT-NEXT:    [[CMP6:%.*]] = icmp sgt i32 [[TMP6]], [[SUB3]]
 ; TUNIT-NEXT:    br i1 [[CMP6]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
 ; TUNIT:       cond.true:
 ; TUNIT-NEXT:    br label [[COND_END:%.*]]
 ; TUNIT:       cond.false:
-; TUNIT-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4
+; TUNIT-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4
 ; TUNIT-NEXT:    br label [[COND_END]]
 ; TUNIT:       cond.end:
 ; TUNIT-NEXT:    [[COND:%.*]] = phi i32 [ [[SUB3]], [[COND_TRUE]] ], [ [[TMP7]], [[COND_FALSE]] ]
-; TUNIT-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 4
-; TUNIT-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTOMP_LB]], align 4
+; TUNIT-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4
+; TUNIT-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4
 ; TUNIT-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]
 ; TUNIT:       omp.inner.for.cond:
 ; TUNIT-NEXT:    [[DOTOMP_IV_0:%.*]] = phi i32 [ [[TMP8]], [[COND_END]] ], [ [[ADD11:%.*]], [[OMP_INNER_FOR_INC:%.*]] ]
-; TUNIT-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4
+; TUNIT-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4
 ; TUNIT-NEXT:    [[CMP8:%.*]] = icmp sgt i32 [[DOTOMP_IV_0]], [[TMP9]]
 ; TUNIT-NEXT:    br i1 [[CMP8]], label [[OMP_INNER_FOR_COND_CLEANUP:%.*]], label [[OMP_INNER_FOR_BODY:%.*]]
 ; TUNIT:       omp.inner.for.cond.cleanup:
 ; TUNIT-NEXT:    br label [[OMP_INNER_FOR_END:%.*]]
 ; TUNIT:       omp.inner.for.body:
 ; TUNIT-NEXT:    [[ADD10:%.*]] = add nsw i32 [[DOTOMP_IV_0]], 2
-; TUNIT-NEXT:    [[TMP11:%.*]] = load double, double* [[CONV]], align 8
+; TUNIT-NEXT:    [[TMP11:%.*]] = load double, ptr [[Q_ADDR]], align 8
 ; TUNIT-NEXT:    call void @bar(i32 [[ADD10]], float 3.000000e+00, double noundef [[TMP11]])
 ; TUNIT-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]
 ; TUNIT:       omp.body.continue:
@@ -117,57 +116,56 @@ define internal void @.omp_outlined.(i32* noalias %.global_tid., i32* noalias %.
 ; TUNIT:       omp.inner.for.end:
 ; TUNIT-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]
 ; TUNIT:       omp.loop.exit:
-; TUNIT-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTGLOBAL_TID_]], align 4
-; TUNIT-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB0]], i32 [[TMP12]])
+; TUNIT-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID_]], align 4
+; TUNIT-NEXT:    call void @__kmpc_for_static_fini(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB0]], i32 [[TMP12]])
 ; TUNIT-NEXT:    br label [[OMP_PRECOND_END]]
 ; TUNIT:       omp.precond.end:
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@.omp_outlined.
-; CGSCC-SAME: (i32* noalias nocapture nofree readonly [[DOTGLOBAL_TID_:%.*]], i32* noalias nocapture nofree readnone [[DOTBOUND_TID_:%.*]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[N:%.*]], float* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]], i64 [[Q:%.*]]) {
+; CGSCC-SAME: (ptr noalias nocapture nofree readonly [[DOTGLOBAL_TID_:%.*]], ptr noalias nocapture nofree readnone [[DOTBOUND_TID_:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[N:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]], i64 [[Q:%.*]]) {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[Q_ADDR:%.*]] = alloca i64, align 8
 ; CGSCC-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4
 ; CGSCC-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4
 ; CGSCC-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4
 ; CGSCC-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i64 4617315517961601024, i64* [[Q_ADDR]], align 8
-; CGSCC-NEXT:    [[CONV:%.*]] = bitcast i64* [[Q_ADDR]] to double*
-; CGSCC-NEXT:    [[TMP:%.*]] = load i32, i32* [[N]], align 4
+; CGSCC-NEXT:    store i64 4617315517961601024, ptr [[Q_ADDR]], align 8
+; CGSCC-NEXT:    [[TMP:%.*]] = load i32, ptr [[N]], align 4
 ; CGSCC-NEXT:    [[SUB3:%.*]] = add nsw i32 [[TMP]], -3
 ; CGSCC-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP]], 2
 ; CGSCC-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]
 ; CGSCC:       omp.precond.then:
-; CGSCC-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 4
-; CGSCC-NEXT:    store i32 [[SUB3]], i32* [[DOTOMP_UB]], align 4
-; CGSCC-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 4
-; CGSCC-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 4
-; CGSCC-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTGLOBAL_TID_]], align 4
-; CGSCC-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB0]], i32 [[TMP5]], i32 noundef 34, i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]], i32 noundef 1, i32 noundef 1)
-; CGSCC-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4
+; CGSCC-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4
+; CGSCC-NEXT:    store i32 [[SUB3]], ptr [[DOTOMP_UB]], align 4
+; CGSCC-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4
+; CGSCC-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4
+; CGSCC-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTGLOBAL_TID_]], align 4
+; CGSCC-NEXT:    call void @__kmpc_for_static_init_4(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB0]], i32 [[TMP5]], i32 noundef 34, ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]], i32 noundef 1, i32 noundef 1)
+; CGSCC-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4
 ; CGSCC-NEXT:    [[CMP6:%.*]] = icmp sgt i32 [[TMP6]], [[SUB3]]
 ; CGSCC-NEXT:    br i1 [[CMP6]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
 ; CGSCC:       cond.true:
 ; CGSCC-NEXT:    br label [[COND_END:%.*]]
 ; CGSCC:       cond.false:
-; CGSCC-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4
+; CGSCC-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4
 ; CGSCC-NEXT:    br label [[COND_END]]
 ; CGSCC:       cond.end:
 ; CGSCC-NEXT:    [[COND:%.*]] = phi i32 [ [[SUB3]], [[COND_TRUE]] ], [ [[TMP7]], [[COND_FALSE]] ]
-; CGSCC-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 4
-; CGSCC-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTOMP_LB]], align 4
+; CGSCC-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4
+; CGSCC-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4
 ; CGSCC-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]
 ; CGSCC:       omp.inner.for.cond:
 ; CGSCC-NEXT:    [[DOTOMP_IV_0:%.*]] = phi i32 [ [[TMP8]], [[COND_END]] ], [ [[ADD11:%.*]], [[OMP_INNER_FOR_INC:%.*]] ]
-; CGSCC-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4
+; CGSCC-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4
 ; CGSCC-NEXT:    [[CMP8:%.*]] = icmp sgt i32 [[DOTOMP_IV_0]], [[TMP9]]
 ; CGSCC-NEXT:    br i1 [[CMP8]], label [[OMP_INNER_FOR_COND_CLEANUP:%.*]], label [[OMP_INNER_FOR_BODY:%.*]]
 ; CGSCC:       omp.inner.for.cond.cleanup:
 ; CGSCC-NEXT:    br label [[OMP_INNER_FOR_END:%.*]]
 ; CGSCC:       omp.inner.for.body:
 ; CGSCC-NEXT:    [[ADD10:%.*]] = add nsw i32 [[DOTOMP_IV_0]], 2
-; CGSCC-NEXT:    [[TMP10:%.*]] = load float, float* [[P]], align 4
-; CGSCC-NEXT:    [[TMP11:%.*]] = load double, double* [[CONV]], align 8
+; CGSCC-NEXT:    [[TMP10:%.*]] = load float, ptr [[P]], align 4
+; CGSCC-NEXT:    [[TMP11:%.*]] = load double, ptr [[Q_ADDR]], align 8
 ; CGSCC-NEXT:    call void @bar(i32 [[ADD10]], float [[TMP10]], double noundef [[TMP11]])
 ; CGSCC-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]
 ; CGSCC:       omp.body.continue:
@@ -178,8 +176,8 @@ define internal void @.omp_outlined.(i32* noalias %.global_tid., i32* noalias %.
 ; CGSCC:       omp.inner.for.end:
 ; CGSCC-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]
 ; CGSCC:       omp.loop.exit:
-; CGSCC-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTGLOBAL_TID_]], align 4
-; CGSCC-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB0]], i32 [[TMP12]])
+; CGSCC-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID_]], align 4
+; CGSCC-NEXT:    call void @__kmpc_for_static_fini(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB0]], i32 [[TMP12]])
 ; CGSCC-NEXT:    br label [[OMP_PRECOND_END]]
 ; CGSCC:       omp.precond.end:
 ; CGSCC-NEXT:    ret void
@@ -190,21 +188,20 @@ entry:
   %.omp.ub = alloca i32, align 4
   %.omp.stride = alloca i32, align 4
   %.omp.is_last = alloca i32, align 4
-  store i64 %q, i64* %q.addr, align 8
-  %conv = bitcast i64* %q.addr to double*
-  %tmp = load i32, i32* %N, align 4
+  store i64 %q, ptr %q.addr, align 8
+  %tmp = load i32, ptr %N, align 4
   %sub3 = add nsw i32 %tmp, -3
   %cmp = icmp sgt i32 %tmp, 2
   br i1 %cmp, label %omp.precond.then, label %omp.precond.end
 
 omp.precond.then:                                 ; preds = %entry
-  store i32 0, i32* %.omp.lb, align 4
-  store i32 %sub3, i32* %.omp.ub, align 4
-  store i32 1, i32* %.omp.stride, align 4
-  store i32 0, i32* %.omp.is_last, align 4
-  %tmp5 = load i32, i32* %.global_tid., align 4
-  call void @__kmpc_for_static_init_4(%struct.ident_t* nonnull @0, i32 %tmp5, i32 34, i32* nonnull %.omp.is_last, i32* nonnull %.omp.lb, i32* nonnull %.omp.ub, i32* nonnull %.omp.stride, i32 1, i32 1)
-  %tmp6 = load i32, i32* %.omp.ub, align 4
+  store i32 0, ptr %.omp.lb, align 4
+  store i32 %sub3, ptr %.omp.ub, align 4
+  store i32 1, ptr %.omp.stride, align 4
+  store i32 0, ptr %.omp.is_last, align 4
+  %tmp5 = load i32, ptr %.global_tid., align 4
+  call void @__kmpc_for_static_init_4(ptr nonnull @0, i32 %tmp5, i32 34, ptr nonnull %.omp.is_last, ptr nonnull %.omp.lb, ptr nonnull %.omp.ub, ptr nonnull %.omp.stride, i32 1, i32 1)
+  %tmp6 = load i32, ptr %.omp.ub, align 4
   %cmp6 = icmp sgt i32 %tmp6, %sub3
   br i1 %cmp6, label %cond.true, label %cond.false
 
@@ -212,18 +209,18 @@ cond.true:                                        ; preds = %omp.precond.then
   br label %cond.end
 
 cond.false:                                       ; preds = %omp.precond.then
-  %tmp7 = load i32, i32* %.omp.ub, align 4
+  %tmp7 = load i32, ptr %.omp.ub, align 4
   br label %cond.end
 
 cond.end:                                         ; preds = %cond.false, %cond.true
   %cond = phi i32 [ %sub3, %cond.true ], [ %tmp7, %cond.false ]
-  store i32 %cond, i32* %.omp.ub, align 4
-  %tmp8 = load i32, i32* %.omp.lb, align 4
+  store i32 %cond, ptr %.omp.ub, align 4
+  %tmp8 = load i32, ptr %.omp.lb, align 4
   br label %omp.inner.for.cond
 
 omp.inner.for.cond:                               ; preds = %omp.inner.for.inc, %cond.end
   %.omp.iv.0 = phi i32 [ %tmp8, %cond.end ], [ %add11, %omp.inner.for.inc ]
-  %tmp9 = load i32, i32* %.omp.ub, align 4
+  %tmp9 = load i32, ptr %.omp.ub, align 4
   %cmp8 = icmp sgt i32 %.omp.iv.0, %tmp9
   br i1 %cmp8, label %omp.inner.for.cond.cleanup, label %omp.inner.for.body
 
@@ -232,8 +229,8 @@ omp.inner.for.cond.cleanup:                       ; preds = %omp.inner.for.cond
 
 omp.inner.for.body:                               ; preds = %omp.inner.for.cond
   %add10 = add nsw i32 %.omp.iv.0, 2
-  %tmp10 = load float, float* %p, align 4
-  %tmp11 = load double, double* %conv, align 8
+  %tmp10 = load float, ptr %p, align 4
+  %tmp11 = load double, ptr %q.addr, align 8
   call void @bar(i32 %add10, float %tmp10, double %tmp11)
   br label %omp.body.continue
 
@@ -248,21 +245,21 @@ omp.inner.for.end:                                ; preds = %omp.inner.for.cond.
   br label %omp.loop.exit
 
 omp.loop.exit:                                    ; preds = %omp.inner.for.end
-  %tmp12 = load i32, i32* %.global_tid., align 4
-  call void @__kmpc_for_static_fini(%struct.ident_t* nonnull @0, i32 %tmp12)
+  %tmp12 = load i32, ptr %.global_tid., align 4
+  call void @__kmpc_for_static_fini(ptr nonnull @0, i32 %tmp12)
   br label %omp.precond.end
 
 omp.precond.end:                                  ; preds = %omp.loop.exit, %entry
   ret void
 }
 
-declare dso_local void @__kmpc_for_static_init_4(%struct.ident_t*, i32, i32, i32*, i32*, i32*, i32*, i32, i32)
+declare dso_local void @__kmpc_for_static_init_4(ptr, i32, i32, ptr, ptr, ptr, ptr, i32, i32)
 
 declare dso_local void @bar(i32, float, double)
 
-declare dso_local void @__kmpc_for_static_fini(%struct.ident_t*, i32)
+declare dso_local void @__kmpc_for_static_fini(ptr, i32)
 
-declare !callback !0 dso_local void @__kmpc_fork_call(%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...)
+declare !callback !0 dso_local void @__kmpc_fork_call(ptr, i32, ptr, ...)
 
 !1 = !{i64 2, i64 -1, i64 -1, i1 true}
 !0 = !{!1}

diff  --git a/llvm/test/Transforms/Attributor/IPConstantProp/pthreads.ll b/llvm/test/Transforms/Attributor/IPConstantProp/pthreads.ll
index 451ccd13d5b65..2dadd16e678ce 100644
--- a/llvm/test/Transforms/Attributor/IPConstantProp/pthreads.ll
+++ b/llvm/test/Transforms/Attributor/IPConstantProp/pthreads.ll
@@ -4,10 +4,10 @@
 ;
 ;    #include <pthread.h>
 ;
-;    void *GlobalVPtr;
+;    ptr GlobalVPtr;
 ;
-;    static void *foo(void *arg) { return arg; }
-;    static void *bar(void *arg) { return arg; }
+;    static ptr foo(ptr arg) { return arg; }
+;    static ptr bar(ptr arg) { return arg; }
 ;
 ;    int main() {
 ;      pthread_t thread;
@@ -23,13 +23,13 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 
 %union.pthread_attr_t = type { i64, [48 x i8] }
 
- at GlobalVPtr = common dso_local global i8* null, align 8
+ at GlobalVPtr = common dso_local global ptr null, align 8
 
 ; FIXME: nocapture & noalias for @GlobalVPtr in %call1
 ; FIXME: nocapture & noalias for %alloc2 in %call3
 
 ;.
-; CHECK: @[[GLOBALVPTR:[a-zA-Z0-9_$"\\.-]+]] = common dso_local global i8* null, align 8
+; CHECK: @[[GLOBALVPTR:[a-zA-Z0-9_$"\\.-]+]] = common dso_local global ptr null, align 8
 ;.
 define dso_local i32 @main() {
 ; TUNIT-LABEL: define {{[^@]+}}@main() {
@@ -37,10 +37,10 @@ define dso_local i32 @main() {
 ; TUNIT-NEXT:    [[ALLOC1:%.*]] = alloca i8, align 8
 ; TUNIT-NEXT:    [[ALLOC2:%.*]] = alloca i8, align 8
 ; TUNIT-NEXT:    [[THREAD:%.*]] = alloca i64, align 8
-; TUNIT-NEXT:    [[CALL:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 4294967296 null, i8* (i8*)* noundef nonnull @foo, i8* noalias nocapture nofree readnone align 4294967296 undef)
-; TUNIT-NEXT:    [[CALL1:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 4294967296 null, i8* (i8*)* noundef nonnull @bar, i8* noalias nocapture nofree nonnull readnone align 8 dereferenceable(8) undef)
-; TUNIT-NEXT:    [[CALL2:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 4294967296 null, i8* (i8*)* noundef nonnull @baz, i8* noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC1]])
-; TUNIT-NEXT:    [[CALL3:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 4294967296 null, i8* (i8*)* noundef nonnull @buz, i8* noalias nofree noundef nonnull readnone align 8 dereferenceable(1) "no-capture-maybe-returned" [[ALLOC2]])
+; TUNIT-NEXT:    [[CALL:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noalias nocapture noundef align 4294967296 null, ptr noundef nonnull @foo, ptr noalias nocapture nofree readnone align 4294967296 undef)
+; TUNIT-NEXT:    [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noalias nocapture noundef align 4294967296 null, ptr noundef nonnull @bar, ptr noalias nocapture nofree nonnull readnone align 8 dereferenceable(8) undef)
+; TUNIT-NEXT:    [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noalias nocapture noundef align 4294967296 null, ptr noundef nonnull @baz, ptr noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC1]])
+; TUNIT-NEXT:    [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noalias nocapture noundef align 4294967296 null, ptr noundef nonnull @buz, ptr noalias nofree noundef nonnull readnone align 8 dereferenceable(1) "no-capture-maybe-returned" [[ALLOC2]])
 ; TUNIT-NEXT:    ret i32 0
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@main() {
@@ -48,67 +48,67 @@ define dso_local i32 @main() {
 ; CGSCC-NEXT:    [[ALLOC1:%.*]] = alloca i8, align 8
 ; CGSCC-NEXT:    [[ALLOC2:%.*]] = alloca i8, align 8
 ; CGSCC-NEXT:    [[THREAD:%.*]] = alloca i64, align 8
-; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 4294967296 null, i8* (i8*)* noundef nonnull @foo, i8* noalias nocapture nofree noundef readnone align 4294967296 null)
-; CGSCC-NEXT:    [[CALL1:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 4294967296 null, i8* (i8*)* noundef nonnull @bar, i8* noalias nofree noundef nonnull readnone align 8 dereferenceable(8) bitcast (i8** @GlobalVPtr to i8*))
-; CGSCC-NEXT:    [[CALL2:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 4294967296 null, i8* (i8*)* noundef nonnull @baz, i8* noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC1]])
-; CGSCC-NEXT:    [[CALL3:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 4294967296 null, i8* (i8*)* noundef nonnull @buz, i8* noalias nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC2]])
+; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noalias nocapture noundef align 4294967296 null, ptr noundef nonnull @foo, ptr noalias nocapture nofree noundef readnone align 4294967296 null)
+; CGSCC-NEXT:    [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noalias nocapture noundef align 4294967296 null, ptr noundef nonnull @bar, ptr noalias nofree noundef nonnull readnone align 8 dereferenceable(8) @GlobalVPtr)
+; CGSCC-NEXT:    [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noalias nocapture noundef align 4294967296 null, ptr noundef nonnull @baz, ptr noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC1]])
+; CGSCC-NEXT:    [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noalias nocapture noundef align 4294967296 null, ptr noundef nonnull @buz, ptr noalias nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC2]])
 ; CGSCC-NEXT:    ret i32 0
 ;
 entry:
   %alloc1 = alloca i8, align 8
   %alloc2 = alloca i8, align 8
   %thread = alloca i64, align 8
-  %call = call i32 @pthread_create(i64* nonnull %thread, %union.pthread_attr_t* null, i8* (i8*)* nonnull @foo, i8* null)
-  %call1 = call i32 @pthread_create(i64* nonnull %thread, %union.pthread_attr_t* null, i8* (i8*)* nonnull @bar, i8* bitcast (i8** @GlobalVPtr to i8*))
-  %call2 = call i32 @pthread_create(i64* nonnull %thread, %union.pthread_attr_t* null, i8* (i8*)* nonnull @baz, i8* nocapture %alloc1)
-  %call3 = call i32 @pthread_create(i64* nonnull %thread, %union.pthread_attr_t* null, i8* (i8*)* nonnull @buz, i8* %alloc2)
+  %call = call i32 @pthread_create(ptr nonnull %thread, ptr null, ptr nonnull @foo, ptr null)
+  %call1 = call i32 @pthread_create(ptr nonnull %thread, ptr null, ptr nonnull @bar, ptr @GlobalVPtr)
+  %call2 = call i32 @pthread_create(ptr nonnull %thread, ptr null, ptr nonnull @baz, ptr nocapture %alloc1)
+  %call3 = call i32 @pthread_create(ptr nonnull %thread, ptr null, ptr nonnull @buz, ptr %alloc2)
   ret i32 0
 }
 
-declare !callback !0 dso_local i32 @pthread_create(i64*, %union.pthread_attr_t*, i8* (i8*)*, i8*)
+declare !callback !0 dso_local i32 @pthread_create(ptr, ptr, ptr, ptr)
 
-define internal i8* @foo(i8* %arg) {
+define internal ptr @foo(ptr %arg) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@foo
-; CHECK-SAME: (i8* noalias nocapture nofree readnone align 4294967296 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-SAME: (ptr noalias nocapture nofree readnone align 4294967296 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    ret i8* null
+; CHECK-NEXT:    ret ptr null
 ;
 entry:
-  ret i8* %arg
+  ret ptr %arg
 }
 
-define internal i8* @bar(i8* %arg) {
+define internal ptr @bar(ptr %arg) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@bar
-; CHECK-SAME: (i8* noalias nocapture nofree nonnull readnone align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] {
+; CHECK-SAME: (ptr noalias nocapture nofree nonnull readnone align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    ret i8* bitcast (i8** @GlobalVPtr to i8*)
+; CHECK-NEXT:    ret ptr @GlobalVPtr
 ;
 entry:
-  ret i8* %arg
+  ret ptr %arg
 }
 
-define internal i8* @baz(i8* %arg) {
+define internal ptr @baz(ptr %arg) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@baz
-; CHECK-SAME: (i8* noalias nofree noundef nonnull readnone returned align 8 dereferenceable(1) "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR0]] {
+; CHECK-SAME: (ptr noalias nofree noundef nonnull readnone returned align 8 dereferenceable(1) "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR0]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    ret i8* [[ARG]]
+; CHECK-NEXT:    ret ptr [[ARG]]
 ;
 entry:
-  ret i8* %arg
+  ret ptr %arg
 }
 
-define internal i8* @buz(i8* %arg) {
+define internal ptr @buz(ptr %arg) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@buz
-; CHECK-SAME: (i8* noalias nofree noundef nonnull readnone returned align 8 dereferenceable(1) "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR0]] {
+; CHECK-SAME: (ptr noalias nofree noundef nonnull readnone returned align 8 dereferenceable(1) "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR0]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    ret i8* [[ARG]]
+; CHECK-NEXT:    ret ptr [[ARG]]
 ;
 entry:
-  ret i8* %arg
+  ret ptr %arg
 }
 
 !1 = !{i64 2, i64 3, i1 false}

diff  --git a/llvm/test/Transforms/Attributor/IPConstantProp/return-argument.ll b/llvm/test/Transforms/Attributor/IPConstantProp/return-argument.ll
index 1e50c74bf5b6b..99e3b5b6be2e3 100644
--- a/llvm/test/Transforms/Attributor/IPConstantProp/return-argument.ll
+++ b/llvm/test/Transforms/Attributor/IPConstantProp/return-argument.ll
@@ -3,42 +3,42 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 
 ;; This function returns its second argument on all return statements
-define internal i32* @incdec(i1 %C, i32* %V) {
+define internal ptr @incdec(i1 %C, ptr %V) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@incdec
-; TUNIT-SAME: (i1 [[C:%.*]], i32* noalias nofree noundef nonnull returned writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[V:%.*]]) #[[ATTR0:[0-9]+]] {
+; TUNIT-SAME: (i1 [[C:%.*]], ptr noalias nofree noundef nonnull returned writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[V:%.*]]) #[[ATTR0:[0-9]+]] {
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       T:
-; TUNIT-NEXT:    ret i32* [[V]]
+; TUNIT-NEXT:    ret ptr [[V]]
 ; TUNIT:       F:
-; TUNIT-NEXT:    ret i32* [[V]]
+; TUNIT-NEXT:    ret ptr [[V]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@incdec
-; CGSCC-SAME: (i1 [[C:%.*]], i32* nofree noundef nonnull returned align 4 dereferenceable(4) "no-capture-maybe-returned" [[V:%.*]]) #[[ATTR0:[0-9]+]] {
-; CGSCC-NEXT:    [[X:%.*]] = load i32, i32* [[V]], align 4
+; CGSCC-SAME: (i1 [[C:%.*]], ptr nofree noundef nonnull returned align 4 dereferenceable(4) "no-capture-maybe-returned" [[V:%.*]]) #[[ATTR0:[0-9]+]] {
+; CGSCC-NEXT:    [[X:%.*]] = load i32, ptr [[V]], align 4
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       T:
 ; CGSCC-NEXT:    [[X1:%.*]] = add i32 [[X]], 1
-; CGSCC-NEXT:    store i32 [[X1]], i32* [[V]], align 4
-; CGSCC-NEXT:    ret i32* [[V]]
+; CGSCC-NEXT:    store i32 [[X1]], ptr [[V]], align 4
+; CGSCC-NEXT:    ret ptr [[V]]
 ; CGSCC:       F:
 ; CGSCC-NEXT:    [[X2:%.*]] = sub i32 [[X]], 1
-; CGSCC-NEXT:    store i32 [[X2]], i32* [[V]], align 4
-; CGSCC-NEXT:    ret i32* [[V]]
+; CGSCC-NEXT:    store i32 [[X2]], ptr [[V]], align 4
+; CGSCC-NEXT:    ret ptr [[V]]
 ;
-  %X = load i32, i32* %V
+  %X = load i32, ptr %V
   br i1 %C, label %T, label %F
 
 T:              ; preds = %0
   %X1 = add i32 %X, 1
-  store i32 %X1, i32* %V
-  ret i32* %V
+  store i32 %X1, ptr %V
+  ret ptr %V
 
 F:              ; preds = %0
   %X2 = sub i32 %X, 1
-  store i32 %X2, i32* %V
-  ret i32* %V
+  store i32 %X2, ptr %V
+  ret ptr %V
 }
 
 ;; This function returns its first argument as a part of a multiple return
@@ -58,12 +58,12 @@ define internal { i32, i32 } @foo(i32 %A, i32 %B) {
   ret { i32, i32 } %Z
 }
 
-define void @caller(i1 %C) personality i32 (...)* @__gxx_personality_v0 {
+define void @caller(i1 %C) personality ptr @__gxx_personality_v0 {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@caller
-; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1:[0-9]+]] personality i32 (...)* @__gxx_personality_v0 {
+; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1:[0-9]+]] personality ptr @__gxx_personality_v0 {
 ; TUNIT-NEXT:    [[Q:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    [[W:%.*]] = call align 4 i32* @incdec(i1 [[C]], i32* noalias nofree noundef nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[Q]]) #[[ATTR2:[0-9]+]]
+; TUNIT-NEXT:    [[W:%.*]] = call align 4 ptr @incdec(i1 [[C]], ptr noalias nofree noundef nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[Q]]) #[[ATTR2:[0-9]+]]
 ; TUNIT-NEXT:    br label [[OK:%.*]]
 ; TUNIT:       OK:
 ; TUNIT-NEXT:    br label [[RET:%.*]]
@@ -74,9 +74,9 @@ define void @caller(i1 %C) personality i32 (...)* @__gxx_personality_v0 {
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@caller
-; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR2:[0-9]+]] personality i32 (...)* @__gxx_personality_v0 {
+; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR2:[0-9]+]] personality ptr @__gxx_personality_v0 {
 ; CGSCC-NEXT:    [[Q:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    [[W:%.*]] = call align 4 i32* @incdec(i1 [[C]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[Q]]) #[[ATTR3:[0-9]+]]
+; CGSCC-NEXT:    [[W:%.*]] = call align 4 ptr @incdec(i1 [[C]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[Q]]) #[[ATTR3:[0-9]+]]
 ; CGSCC-NEXT:    [[S1:%.*]] = call { i32, i32 } @foo(i32 noundef 1, i32 noundef 2) #[[ATTR4:[0-9]+]]
 ; CGSCC-NEXT:    [[X1:%.*]] = extractvalue { i32, i32 } [[S1]], 0
 ; CGSCC-NEXT:    [[S2:%.*]] = call { i32, i32 } @foo(i32 noundef 3, i32 noundef 4) #[[ATTR3]]
@@ -84,7 +84,7 @@ define void @caller(i1 %C) personality i32 (...)* @__gxx_personality_v0 {
 ; CGSCC:       OK:
 ; CGSCC-NEXT:    [[X2:%.*]] = extractvalue { i32, i32 } [[S2]], 0
 ; CGSCC-NEXT:    [[Z:%.*]] = add i32 [[X1]], [[X2]]
-; CGSCC-NEXT:    store i32 [[Z]], i32* [[W]], align 4
+; CGSCC-NEXT:    store i32 [[Z]], ptr [[W]], align 4
 ; CGSCC-NEXT:    br label [[RET:%.*]]
 ; CGSCC:       LPAD:
 ; CGSCC-NEXT:    unreachable
@@ -93,7 +93,7 @@ define void @caller(i1 %C) personality i32 (...)* @__gxx_personality_v0 {
 ;
   %Q = alloca i32
   ;; Call incdec to see if %W is properly replaced by %Q
-  %W = call i32* @incdec(i1 %C, i32* %Q )             ; <i32> [#uses=1]
+  %W = call ptr @incdec(i1 %C, ptr %Q )             ; <i32> [#uses=1]
   ;; Call @foo twice, to prevent the arguments from propagating into the
   ;; function (so we can check the returned argument is properly
   ;; propagated per-caller).
@@ -104,11 +104,11 @@ define void @caller(i1 %C) personality i32 (...)* @__gxx_personality_v0 {
 OK:
   %X2 = extractvalue { i32, i32 } %S2, 0
   %Z  = add i32 %X1, %X2
-  store i32 %Z, i32* %W
+  store i32 %Z, ptr %W
   br label %RET
 
 LPAD:
-  %exn = landingpad {i8*, i32}
+  %exn = landingpad {ptr, i32}
   cleanup
   br label %RET
 

diff  --git a/llvm/test/Transforms/Attributor/IPConstantProp/return-constant.ll b/llvm/test/Transforms/Attributor/IPConstantProp/return-constant.ll
index 5bca5b670956b..2d14f38ee8dc7 100644
--- a/llvm/test/Transforms/Attributor/IPConstantProp/return-constant.ll
+++ b/llvm/test/Transforms/Attributor/IPConstantProp/return-constant.ll
@@ -4,10 +4,10 @@
 
 ; FIXME: icmp folding is missing
 
-define i1 @invokecaller(i1 %C) personality i32 (...)* @__gxx_personality_v0 {
+define i1 @invokecaller(i1 %C) personality ptr @__gxx_personality_v0 {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@invokecaller
-; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0:[0-9]+]] personality i32 (...)* @__gxx_personality_v0 {
+; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0:[0-9]+]] personality ptr @__gxx_personality_v0 {
 ; TUNIT-NEXT:    [[X:%.*]] = call i32 @foo(i1 [[C]]) #[[ATTR1:[0-9]+]]
 ; TUNIT-NEXT:    br label [[OK:%.*]]
 ; TUNIT:       OK:
@@ -17,7 +17,7 @@ define i1 @invokecaller(i1 %C) personality i32 (...)* @__gxx_personality_v0 {
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@invokecaller
-; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0:[0-9]+]] personality i32 (...)* @__gxx_personality_v0 {
+; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0:[0-9]+]] personality ptr @__gxx_personality_v0 {
 ; CGSCC-NEXT:    [[X:%.*]] = call i32 @foo(i1 [[C]]) #[[ATTR2:[0-9]+]]
 ; CGSCC-NEXT:    br label [[OK:%.*]]
 ; CGSCC:       OK:
@@ -31,7 +31,7 @@ OK:
   %Y = icmp ne i32 %X, 0          ; <i1> [#uses=1]
   ret i1 %Y
 FAIL:
-  %exn = landingpad {i8*, i32}
+  %exn = landingpad {ptr, i32}
   cleanup
   ret i1 false
 }

diff  --git a/llvm/test/Transforms/Attributor/IPConstantProp/thread_local_acs.ll b/llvm/test/Transforms/Attributor/IPConstantProp/thread_local_acs.ll
index f7d145d49ae5e..f84e452d97239 100644
--- a/llvm/test/Transforms/Attributor/IPConstantProp/thread_local_acs.ll
+++ b/llvm/test/Transforms/Attributor/IPConstantProp/thread_local_acs.ll
@@ -25,19 +25,19 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 ; CHECK: @[[GTL:[a-zA-Z0-9_$"\\.-]+]] = dso_local thread_local global i32 0, align 4
 ; CHECK: @[[GSH:[a-zA-Z0-9_$"\\.-]+]] = dso_local global i32 0, align 4
 ;.
-define internal i32 @callee(i32* %thread_local_ptr, i32* %shared_ptr) {
+define internal i32 @callee(ptr %thread_local_ptr, ptr %shared_ptr) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(read)
 ; CHECK-LABEL: define {{[^@]+}}@callee
-; CHECK-SAME: (i32* nocapture nofree nonnull readonly align 4 dereferenceable(4) [[THREAD_LOCAL_PTR:%.*]], i32* nocapture nofree nonnull readonly align 4 dereferenceable(4) [[SHARED_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-SAME: (ptr nocapture nofree nonnull readonly align 4 dereferenceable(4) [[THREAD_LOCAL_PTR:%.*]], ptr nocapture nofree nonnull readonly align 4 dereferenceable(4) [[SHARED_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP:%.*]] = load i32, i32* @gtl, align 4
-; CHECK-NEXT:    [[TMP1:%.*]] = load i32, i32* @gsh, align 4
+; CHECK-NEXT:    [[TMP:%.*]] = load i32, ptr @gtl, align 4
+; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr @gsh, align 4
 ; CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP]], [[TMP1]]
 ; CHECK-NEXT:    ret i32 [[ADD]]
 ;
 entry:
-  %tmp = load i32, i32* %thread_local_ptr, align 4
-  %tmp1 = load i32, i32* %shared_ptr, align 4
+  %tmp = load i32, ptr %thread_local_ptr, align 4
+  %tmp1 = load i32, ptr %shared_ptr, align 4
   %add = add nsw i32 %tmp, %tmp1
   ret i32 %add
 }
@@ -45,20 +45,20 @@ entry:
 define dso_local void @caller() {
 ; TUNIT-LABEL: define {{[^@]+}}@caller() {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    call void @broker(i32* nocapture nofree nonnull readonly align 4 dereferenceable(4) undef, i32 (i32*, i32*)* noundef nonnull @callee, i32* nocapture nofree nonnull readonly align 4 dereferenceable(4) undef)
+; TUNIT-NEXT:    call void @broker(ptr nocapture nofree nonnull readonly align 4 dereferenceable(4) undef, ptr noundef nonnull @callee, ptr nocapture nofree nonnull readonly align 4 dereferenceable(4) undef)
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@caller() {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    call void @broker(i32* nofree noundef nonnull readonly align 4 dereferenceable(4) @gtl, i32 (i32*, i32*)* noundef nonnull @callee, i32* nofree noundef nonnull readonly align 4 dereferenceable(4) @gsh)
+; CGSCC-NEXT:    call void @broker(ptr nofree noundef nonnull readonly align 4 dereferenceable(4) @gtl, ptr noundef nonnull @callee, ptr nofree noundef nonnull readonly align 4 dereferenceable(4) @gsh)
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  call void @broker(i32* nonnull @gtl, i32 (i32*, i32*)* nonnull @callee, i32* nonnull @gsh)
+  call void @broker(ptr nonnull @gtl, ptr nonnull @callee, ptr nonnull @gsh)
   ret void
 }
 
-declare !callback !0 dso_local void @broker(i32*, i32 (i32*, i32*)*, i32*)
+declare !callback !0 dso_local void @broker(ptr, ptr, ptr)
 
 !1 = !{i64 1, i64 0, i64 2, i1 false}
 !0 = !{!1}

diff  --git a/llvm/test/Transforms/Attributor/alwaysinline.ll b/llvm/test/Transforms/Attributor/alwaysinline.ll
index e1602a38a9f6f..4d7100f4abccb 100644
--- a/llvm/test/Transforms/Attributor/alwaysinline.ll
+++ b/llvm/test/Transforms/Attributor/alwaysinline.ll
@@ -69,12 +69,12 @@ entry:
 ; This function cannot be inlined although it is marked alwaysinline
 ; it is `unexactly defined` and alwaysinline but cannot be inlined.
 ; so it will not be analyzed
-define linkonce i32 @inner3(i8* %addr) alwaysinline {
+define linkonce i32 @inner3(ptr %addr) alwaysinline {
 ; TUNIT: Function Attrs: alwaysinline
 ; TUNIT-LABEL: define {{[^@]+}}@inner3
-; TUNIT-SAME: (i8* [[ADDR:%.*]]) #[[ATTR3]] {
+; TUNIT-SAME: (ptr [[ADDR:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    indirectbr i8* [[ADDR]], [label [[ONE:%.*]], label %two]
+; TUNIT-NEXT:    indirectbr ptr [[ADDR]], [label [[ONE:%.*]], label %two]
 ; TUNIT:       one:
 ; TUNIT-NEXT:    ret i32 42
 ; TUNIT:       two:
@@ -82,16 +82,16 @@ define linkonce i32 @inner3(i8* %addr) alwaysinline {
 ;
 ; CGSCC: Function Attrs: alwaysinline
 ; CGSCC-LABEL: define {{[^@]+}}@inner3
-; CGSCC-SAME: (i8* [[ADDR:%.*]]) #[[ATTR2]] {
+; CGSCC-SAME: (ptr [[ADDR:%.*]]) #[[ATTR2]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    indirectbr i8* [[ADDR]], [label [[ONE:%.*]], label %two]
+; CGSCC-NEXT:    indirectbr ptr [[ADDR]], [label [[ONE:%.*]], label %two]
 ; CGSCC:       one:
 ; CGSCC-NEXT:    ret i32 42
 ; CGSCC:       two:
 ; CGSCC-NEXT:    ret i32 44
 ;
 entry:
-  indirectbr i8* %addr, [ label %one, label %two ]
+  indirectbr ptr %addr, [ label %one, label %two ]
 
 one:
   ret i32 42
@@ -105,20 +105,20 @@ define i32 @outer3(i32 %x) {
 ; TUNIT-LABEL: define {{[^@]+}}@outer3
 ; TUNIT-SAME: (i32 [[X:%.*]]) #[[ATTR2]] {
 ; TUNIT-NEXT:    [[CMP:%.*]] = icmp slt i32 [[X]], 42
-; TUNIT-NEXT:    [[ADDR:%.*]] = select i1 [[CMP]], i8* blockaddress(@inner3, [[ONE:%.*]]), i8* blockaddress(@inner3, [[TWO:%.*]])
-; TUNIT-NEXT:    [[CALL:%.*]] = call i32 @inner3(i8* [[ADDR]])
+; TUNIT-NEXT:    [[ADDR:%.*]] = select i1 [[CMP]], ptr blockaddress(@inner3, [[ONE:%.*]]), ptr blockaddress(@inner3, [[TWO:%.*]])
+; TUNIT-NEXT:    [[CALL:%.*]] = call i32 @inner3(ptr [[ADDR]])
 ; TUNIT-NEXT:    ret i32 [[CALL]]
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@outer3
 ; CGSCC-SAME: (i32 [[X:%.*]]) {
 ; CGSCC-NEXT:    [[CMP:%.*]] = icmp slt i32 [[X]], 42
-; CGSCC-NEXT:    [[ADDR:%.*]] = select i1 [[CMP]], i8* blockaddress(@inner3, [[ONE:%.*]]), i8* blockaddress(@inner3, [[TWO:%.*]])
-; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @inner3(i8* [[ADDR]])
+; CGSCC-NEXT:    [[ADDR:%.*]] = select i1 [[CMP]], ptr blockaddress(@inner3, [[ONE:%.*]]), ptr blockaddress(@inner3, [[TWO:%.*]])
+; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @inner3(ptr [[ADDR]])
 ; CGSCC-NEXT:    ret i32 [[CALL]]
 ;
   %cmp = icmp slt i32 %x, 42
-  %addr = select i1 %cmp, i8* blockaddress(@inner3, %one), i8* blockaddress(@inner3, %two)
-  %call = call i32 @inner3(i8* %addr)
+  %addr = select i1 %cmp, ptr blockaddress(@inner3, %one), ptr blockaddress(@inner3, %two)
+  %call = call i32 @inner3(ptr %addr)
   ret i32 %call
 }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/callbacks.ll b/llvm/test/Transforms/Attributor/callbacks.ll
index 153237b5f3afa..e90db279e8dba 100644
--- a/llvm/test/Transforms/Attributor/callbacks.ll
+++ b/llvm/test/Transforms/Attributor/callbacks.ll
@@ -13,191 +13,182 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
 ; arguments 2-4 of the callback callee. Here we should see information and value
 ; transfer in both directions.
 
-define void @t0_caller(i32* %a) {
+define void @t0_caller(ptr %a) {
 ; TUNIT-LABEL: define {{[^@]+}}@t0_caller
-; TUNIT-SAME: (i32* align 256 [[A:%.*]]) {
+; TUNIT-SAME: (ptr align 256 [[A:%.*]]) {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[B:%.*]] = alloca i32, align 32
-; TUNIT-NEXT:    [[C:%.*]] = alloca i32*, align 64
+; TUNIT-NEXT:    [[C:%.*]] = alloca ptr, align 64
 ; TUNIT-NEXT:    [[PTR:%.*]] = alloca i32, align 128
-; TUNIT-NEXT:    [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
-; TUNIT-NEXT:    store i32 42, i32* [[B]], align 32
-; TUNIT-NEXT:    store i32* [[B]], i32** [[C]], align 64
-; TUNIT-NEXT:    call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t0_callback_broker(i32* noalias nocapture noundef align 4294967296 null, i32* noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t0_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
+; TUNIT-NEXT:    store i32 42, ptr [[B]], align 32
+; TUNIT-NEXT:    store ptr [[B]], ptr [[C]], align 64
+; TUNIT-NEXT:    call void (ptr, ptr, ptr, ...) @t0_callback_broker(ptr noalias nocapture noundef align 4294967296 null, ptr noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr noundef @t0_callback_callee, ptr align 256 [[A]], i64 undef, ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@t0_caller
-; CGSCC-SAME: (i32* align 256 [[A:%.*]]) {
+; CGSCC-SAME: (ptr align 256 [[A:%.*]]) {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[B:%.*]] = alloca i32, align 32
-; CGSCC-NEXT:    [[C:%.*]] = alloca i32*, align 64
+; CGSCC-NEXT:    [[C:%.*]] = alloca ptr, align 64
 ; CGSCC-NEXT:    [[PTR:%.*]] = alloca i32, align 128
-; CGSCC-NEXT:    [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
-; CGSCC-NEXT:    store i32 42, i32* [[B]], align 32
-; CGSCC-NEXT:    store i32* [[B]], i32** [[C]], align 64
-; CGSCC-NEXT:    call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t0_callback_broker(i32* noalias nocapture noundef align 4294967296 null, i32* noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t0_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 noundef 99, i32** nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
+; CGSCC-NEXT:    store i32 42, ptr [[B]], align 32
+; CGSCC-NEXT:    store ptr [[B]], ptr [[C]], align 64
+; CGSCC-NEXT:    call void (ptr, ptr, ptr, ...) @t0_callback_broker(ptr noalias nocapture noundef align 4294967296 null, ptr noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr noundef @t0_callback_callee, ptr align 256 [[A]], i64 noundef 99, ptr nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
 ; CGSCC-NEXT:    ret void
 ;
 entry:
   %b = alloca i32, align 32
-  %c = alloca i32*, align 64
+  %c = alloca ptr, align 64
   %ptr = alloca i32, align 128
-  %0 = bitcast i32* %b to i8*
-  store i32 42, i32* %b, align 4
-  store i32* %b, i32** %c, align 8
-  call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t0_callback_broker(i32* null, i32* %ptr, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*, i64, i32**)* @t0_callback_callee to void (i32*, i32*, ...)*), i32* %a, i64 99, i32** %c)
+  store i32 42, ptr %b, align 4
+  store ptr %b, ptr %c, align 8
+  call void (ptr, ptr, ptr, ...) @t0_callback_broker(ptr null, ptr %ptr, ptr @t0_callback_callee, ptr %a, i64 99, ptr %c)
   ret void
 }
 
 ; Note that the first two arguments are provided by the callback_broker according to the callback in !1 below!
 ; The others are annotated with alignment information, amongst others, or even replaced by the constants passed to the call.
-define internal void @t0_callback_callee(i32* %is_not_null, i32* %ptr, i32* %a, i64 %b, i32** %c) {
+define internal void @t0_callback_callee(ptr %is_not_null, ptr %ptr, ptr %a, i64 %b, ptr %c) {
 ;
 ; TUNIT-LABEL: define {{[^@]+}}@t0_callback_callee
-; TUNIT-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], i32* nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], i32* align 256 [[A:%.*]], i64 [[B:%.*]], i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], ptr align 256 [[A:%.*]], i64 [[B:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[PTR_VAL:%.*]] = load i32, i32* [[PTR]], align 8
-; TUNIT-NEXT:    store i32 [[PTR_VAL]], i32* [[IS_NOT_NULL]], align 4
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[C]], align 64
-; TUNIT-NEXT:    tail call void @t0_check(i32* align 256 [[A]], i64 noundef 99, i32* nonnull align 32 [[TMP0]])
+; TUNIT-NEXT:    [[PTR_VAL:%.*]] = load i32, ptr [[PTR]], align 8
+; TUNIT-NEXT:    store i32 [[PTR_VAL]], ptr [[IS_NOT_NULL]], align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[C]], align 64
+; TUNIT-NEXT:    tail call void @t0_check(ptr align 256 [[A]], i64 noundef 99, ptr nonnull align 32 [[TMP0]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@t0_callback_callee
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], i32* nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], i32* align 256 [[A:%.*]], i64 [[B:%.*]], i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], ptr align 256 [[A:%.*]], i64 [[B:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[PTR_VAL:%.*]] = load i32, i32* [[PTR]], align 8
-; CGSCC-NEXT:    store i32 [[PTR_VAL]], i32* [[IS_NOT_NULL]], align 4
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[C]], align 64
-; CGSCC-NEXT:    tail call void @t0_check(i32* align 256 [[A]], i64 noundef 99, i32* [[TMP0]])
+; CGSCC-NEXT:    [[PTR_VAL:%.*]] = load i32, ptr [[PTR]], align 8
+; CGSCC-NEXT:    store i32 [[PTR_VAL]], ptr [[IS_NOT_NULL]], align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[C]], align 64
+; CGSCC-NEXT:    tail call void @t0_check(ptr align 256 [[A]], i64 noundef 99, ptr [[TMP0]])
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %ptr_val = load i32, i32* %ptr, align 8
-  store i32 %ptr_val, i32* %is_not_null
-  %0 = load i32*, i32** %c, align 8
-  tail call void @t0_check(i32* %a, i64 %b, i32* %0)
+  %ptr_val = load i32, ptr %ptr, align 8
+  store i32 %ptr_val, ptr %is_not_null
+  %0 = load ptr, ptr %c, align 8
+  tail call void @t0_check(ptr %a, i64 %b, ptr %0)
   ret void
 }
 
-declare void @t0_check(i32* align 256, i64, i32*)
+declare void @t0_check(ptr align 256, i64, ptr)
 
-declare !callback !0 void @t0_callback_broker(i32*, i32*, void (i32*, i32*, ...)*, ...)
+declare !callback !0 void @t0_callback_broker(ptr, ptr, ptr, ...)
 
 ; Test 1
 ;
 ; Similar to test 0 but with some additional annotations (noalias/nocapute) to make sure
 ; we deduce and propagate noalias and others properly.
 
-define void @t1_caller(i32* noalias %a) {
+define void @t1_caller(ptr noalias %a) {
 ;
 ; TUNIT-LABEL: define {{[^@]+}}@t1_caller
-; TUNIT-SAME: (i32* noalias nocapture align 256 [[A:%.*]]) {
+; TUNIT-SAME: (ptr noalias nocapture align 256 [[A:%.*]]) {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[B:%.*]] = alloca i32, align 32
-; TUNIT-NEXT:    [[C:%.*]] = alloca i32*, align 64
+; TUNIT-NEXT:    [[C:%.*]] = alloca ptr, align 64
 ; TUNIT-NEXT:    [[PTR:%.*]] = alloca i32, align 128
-; TUNIT-NEXT:    [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
-; TUNIT-NEXT:    store i32 42, i32* [[B]], align 32
-; TUNIT-NEXT:    store i32* [[B]], i32** [[C]], align 64
-; TUNIT-NEXT:    call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t1_callback_broker(i32* noalias nocapture noundef align 4294967296 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t1_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
+; TUNIT-NEXT:    store i32 42, ptr [[B]], align 32
+; TUNIT-NEXT:    store ptr [[B]], ptr [[C]], align 64
+; TUNIT-NEXT:    call void (ptr, ptr, ptr, ...) @t1_callback_broker(ptr noalias nocapture noundef align 4294967296 null, ptr noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr nocapture noundef @t1_callback_callee, ptr nocapture align 256 [[A]], i64 undef, ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@t1_caller
-; CGSCC-SAME: (i32* noalias align 256 [[A:%.*]]) {
+; CGSCC-SAME: (ptr noalias align 256 [[A:%.*]]) {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[B:%.*]] = alloca i32, align 32
-; CGSCC-NEXT:    [[C:%.*]] = alloca i32*, align 64
+; CGSCC-NEXT:    [[C:%.*]] = alloca ptr, align 64
 ; CGSCC-NEXT:    [[PTR:%.*]] = alloca i32, align 128
-; CGSCC-NEXT:    [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
-; CGSCC-NEXT:    store i32 42, i32* [[B]], align 32
-; CGSCC-NEXT:    store i32* [[B]], i32** [[C]], align 64
-; CGSCC-NEXT:    call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t1_callback_broker(i32* noalias nocapture noundef align 4294967296 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t1_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 noundef 99, i32** nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
+; CGSCC-NEXT:    store i32 42, ptr [[B]], align 32
+; CGSCC-NEXT:    store ptr [[B]], ptr [[C]], align 64
+; CGSCC-NEXT:    call void (ptr, ptr, ptr, ...) @t1_callback_broker(ptr noalias nocapture noundef align 4294967296 null, ptr noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr nocapture noundef @t1_callback_callee, ptr align 256 [[A]], i64 noundef 99, ptr nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
 ; CGSCC-NEXT:    ret void
 ;
 entry:
   %b = alloca i32, align 32
-  %c = alloca i32*, align 64
+  %c = alloca ptr, align 64
   %ptr = alloca i32, align 128
-  %0 = bitcast i32* %b to i8*
-  store i32 42, i32* %b, align 4
-  store i32* %b, i32** %c, align 8
-  call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t1_callback_broker(i32* null, i32* %ptr, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*, i64, i32**)* @t1_callback_callee to void (i32*, i32*, ...)*), i32* %a, i64 99, i32** %c)
+  store i32 42, ptr %b, align 4
+  store ptr %b, ptr %c, align 8
+  call void (ptr, ptr, ptr, ...) @t1_callback_broker(ptr null, ptr %ptr, ptr @t1_callback_callee, ptr %a, i64 99, ptr %c)
   ret void
 }
 
 ; Note that the first two arguments are provided by the callback_broker according to the callback in !1 below!
 ; The others are annotated with alignment information, amongst others, or even replaced by the constants passed to the call.
-define internal void @t1_callback_callee(i32* %is_not_null, i32* %ptr, i32* %a, i64 %b, i32** %c) {
+define internal void @t1_callback_callee(ptr %is_not_null, ptr %ptr, ptr %a, i64 %b, ptr %c) {
 ;
 ; TUNIT: Function Attrs: nosync
 ; TUNIT-LABEL: define {{[^@]+}}@t1_callback_callee
-; TUNIT-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], i32* nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], i32* nocapture align 256 [[A:%.*]], i64 [[B:%.*]], i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) #[[ATTR0:[0-9]+]] {
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], ptr nocapture align 256 [[A:%.*]], i64 [[B:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) #[[ATTR0:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[PTR_VAL:%.*]] = load i32, i32* [[PTR]], align 8
-; TUNIT-NEXT:    store i32 [[PTR_VAL]], i32* [[IS_NOT_NULL]], align 4
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[C]], align 64
-; TUNIT-NEXT:    tail call void @t1_check(i32* nocapture align 256 [[A]], i64 noundef 99, i32* nocapture nonnull align 32 [[TMP0]])
+; TUNIT-NEXT:    [[PTR_VAL:%.*]] = load i32, ptr [[PTR]], align 8
+; TUNIT-NEXT:    store i32 [[PTR_VAL]], ptr [[IS_NOT_NULL]], align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[C]], align 64
+; TUNIT-NEXT:    tail call void @t1_check(ptr nocapture align 256 [[A]], i64 noundef 99, ptr nocapture nonnull align 32 [[TMP0]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nosync
 ; CGSCC-LABEL: define {{[^@]+}}@t1_callback_callee
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], i32* nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], i32* nocapture align 256 [[A:%.*]], i64 [[B:%.*]], i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) #[[ATTR0:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], ptr nocapture align 256 [[A:%.*]], i64 [[B:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[PTR_VAL:%.*]] = load i32, i32* [[PTR]], align 8
-; CGSCC-NEXT:    store i32 [[PTR_VAL]], i32* [[IS_NOT_NULL]], align 4
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[C]], align 64
-; CGSCC-NEXT:    tail call void @t1_check(i32* nocapture align 256 [[A]], i64 noundef 99, i32* nocapture [[TMP0]])
+; CGSCC-NEXT:    [[PTR_VAL:%.*]] = load i32, ptr [[PTR]], align 8
+; CGSCC-NEXT:    store i32 [[PTR_VAL]], ptr [[IS_NOT_NULL]], align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[C]], align 64
+; CGSCC-NEXT:    tail call void @t1_check(ptr nocapture align 256 [[A]], i64 noundef 99, ptr nocapture [[TMP0]])
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %ptr_val = load i32, i32* %ptr, align 8
-  store i32 %ptr_val, i32* %is_not_null
-  %0 = load i32*, i32** %c, align 8
-  tail call void @t1_check(i32* %a, i64 %b, i32* %0)
+  %ptr_val = load i32, ptr %ptr, align 8
+  store i32 %ptr_val, ptr %is_not_null
+  %0 = load ptr, ptr %c, align 8
+  tail call void @t1_check(ptr %a, i64 %b, ptr %0)
   ret void
 }
 
-declare void @t1_check(i32* nocapture align 256, i64, i32* nocapture) nosync
+declare void @t1_check(ptr nocapture align 256, i64, ptr nocapture) nosync
 
-declare !callback !0 void @t1_callback_broker(i32* nocapture , i32* nocapture , void (i32*, i32*, ...)* nocapture, ...)
+declare !callback !0 void @t1_callback_broker(ptr nocapture , ptr nocapture , ptr nocapture, ...)
 
 ; Test 2
 ;
 ; Similar to test 1 but checking that the noalias is only placed if potential synchronization through @t2_check is preserved.
 
-define void @t2_caller(i32* noalias %a) {
+define void @t2_caller(ptr noalias %a) {
 ; TUNIT-LABEL: define {{[^@]+}}@t2_caller
-; TUNIT-SAME: (i32* noalias nocapture align 256 [[A:%.*]]) {
+; TUNIT-SAME: (ptr noalias nocapture align 256 [[A:%.*]]) {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[B:%.*]] = alloca i32, align 32
-; TUNIT-NEXT:    [[C:%.*]] = alloca i32*, align 64
+; TUNIT-NEXT:    [[C:%.*]] = alloca ptr, align 64
 ; TUNIT-NEXT:    [[PTR:%.*]] = alloca i32, align 128
-; TUNIT-NEXT:    [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
-; TUNIT-NEXT:    store i32 42, i32* [[B]], align 32
-; TUNIT-NEXT:    store i32* [[B]], i32** [[C]], align 64
-; TUNIT-NEXT:    call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t2_callback_broker(i32* noalias nocapture noundef align 4294967296 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t2_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
+; TUNIT-NEXT:    store i32 42, ptr [[B]], align 32
+; TUNIT-NEXT:    store ptr [[B]], ptr [[C]], align 64
+; TUNIT-NEXT:    call void (ptr, ptr, ptr, ...) @t2_callback_broker(ptr noalias nocapture noundef align 4294967296 null, ptr noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr nocapture noundef @t2_callback_callee, ptr nocapture align 256 [[A]], i64 undef, ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@t2_caller
-; CGSCC-SAME: (i32* noalias align 256 [[A:%.*]]) {
+; CGSCC-SAME: (ptr noalias align 256 [[A:%.*]]) {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[B:%.*]] = alloca i32, align 32
-; CGSCC-NEXT:    [[C:%.*]] = alloca i32*, align 64
+; CGSCC-NEXT:    [[C:%.*]] = alloca ptr, align 64
 ; CGSCC-NEXT:    [[PTR:%.*]] = alloca i32, align 128
-; CGSCC-NEXT:    [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
-; CGSCC-NEXT:    store i32 42, i32* [[B]], align 32
-; CGSCC-NEXT:    store i32* [[B]], i32** [[C]], align 64
-; CGSCC-NEXT:    call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t2_callback_broker(i32* noalias nocapture noundef align 4294967296 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t2_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 noundef 99, i32** nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
+; CGSCC-NEXT:    store i32 42, ptr [[B]], align 32
+; CGSCC-NEXT:    store ptr [[B]], ptr [[C]], align 64
+; CGSCC-NEXT:    call void (ptr, ptr, ptr, ...) @t2_callback_broker(ptr noalias nocapture noundef align 4294967296 null, ptr noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr nocapture noundef @t2_callback_callee, ptr align 256 [[A]], i64 noundef 99, ptr nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
 ; CGSCC-NEXT:    ret void
 ;
 entry:
   %b = alloca i32, align 32
-  %c = alloca i32*, align 64
+  %c = alloca ptr, align 64
   %ptr = alloca i32, align 128
-  %0 = bitcast i32* %b to i8*
-  store i32 42, i32* %b, align 4
-  store i32* %b, i32** %c, align 8
-  call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t2_callback_broker(i32* null, i32* %ptr, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*, i64, i32**)* @t2_callback_callee to void (i32*, i32*, ...)*), i32* %a, i64 99, i32** %c)
+  store i32 42, ptr %b, align 4
+  store ptr %b, ptr %c, align 8
+  call void (ptr, ptr, ptr, ...) @t2_callback_broker(ptr null, ptr %ptr, ptr @t2_callback_callee, ptr %a, i64 99, ptr %c)
   ret void
 }
 
@@ -205,78 +196,75 @@ entry:
 ; The others are annotated with alignment information, amongst others, or even replaced by the constants passed to the call.
 ;
 ; FIXME: We should derive noalias for %a and add a "fake use" of %a in all potentially synchronizing calls.
-define internal void @t2_callback_callee(i32* %is_not_null, i32* %ptr, i32* %a, i64 %b, i32** %c) {
+define internal void @t2_callback_callee(ptr %is_not_null, ptr %ptr, ptr %a, i64 %b, ptr %c) {
 ;
 ; TUNIT-LABEL: define {{[^@]+}}@t2_callback_callee
-; TUNIT-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], i32* nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], i32* nocapture align 256 [[A:%.*]], i64 [[B:%.*]], i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], ptr nocapture align 256 [[A:%.*]], i64 [[B:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[PTR_VAL:%.*]] = load i32, i32* [[PTR]], align 8
-; TUNIT-NEXT:    store i32 [[PTR_VAL]], i32* [[IS_NOT_NULL]], align 4
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[C]], align 64
-; TUNIT-NEXT:    tail call void @t2_check(i32* nocapture align 256 [[A]], i64 noundef 99, i32* nocapture nonnull align 32 [[TMP0]])
+; TUNIT-NEXT:    [[PTR_VAL:%.*]] = load i32, ptr [[PTR]], align 8
+; TUNIT-NEXT:    store i32 [[PTR_VAL]], ptr [[IS_NOT_NULL]], align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[C]], align 64
+; TUNIT-NEXT:    tail call void @t2_check(ptr nocapture align 256 [[A]], i64 noundef 99, ptr nocapture nonnull align 32 [[TMP0]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@t2_callback_callee
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], i32* nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], i32* nocapture align 256 [[A:%.*]], i64 [[B:%.*]], i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], ptr nocapture align 256 [[A:%.*]], i64 [[B:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[PTR_VAL:%.*]] = load i32, i32* [[PTR]], align 8
-; CGSCC-NEXT:    store i32 [[PTR_VAL]], i32* [[IS_NOT_NULL]], align 4
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[C]], align 64
-; CGSCC-NEXT:    tail call void @t2_check(i32* nocapture align 256 [[A]], i64 noundef 99, i32* nocapture [[TMP0]])
+; CGSCC-NEXT:    [[PTR_VAL:%.*]] = load i32, ptr [[PTR]], align 8
+; CGSCC-NEXT:    store i32 [[PTR_VAL]], ptr [[IS_NOT_NULL]], align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[C]], align 64
+; CGSCC-NEXT:    tail call void @t2_check(ptr nocapture align 256 [[A]], i64 noundef 99, ptr nocapture [[TMP0]])
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %ptr_val = load i32, i32* %ptr, align 8
-  store i32 %ptr_val, i32* %is_not_null
-  %0 = load i32*, i32** %c, align 8
-  tail call void @t2_check(i32* %a, i64 %b, i32* %0)
+  %ptr_val = load i32, ptr %ptr, align 8
+  store i32 %ptr_val, ptr %is_not_null
+  %0 = load ptr, ptr %c, align 8
+  tail call void @t2_check(ptr %a, i64 %b, ptr %0)
   ret void
 }
 
-declare void @t2_check(i32* nocapture align 256, i64, i32* nocapture)
+declare void @t2_check(ptr nocapture align 256, i64, ptr nocapture)
 
-declare !callback !0 void @t2_callback_broker(i32* nocapture , i32* nocapture , void (i32*, i32*, ...)* nocapture, ...)
+declare !callback !0 void @t2_callback_broker(ptr nocapture , ptr nocapture , ptr nocapture, ...)
 
 ; Test 3
 ;
 ; Basically test 2 with the casted callback callee used twice.
 
-define void @t3_caller(i32* noalias %a) {
+define void @t3_caller(ptr noalias %a) {
 ; TUNIT-LABEL: define {{[^@]+}}@t3_caller
-; TUNIT-SAME: (i32* noalias nocapture align 256 [[A:%.*]]) {
+; TUNIT-SAME: (ptr noalias nocapture align 256 [[A:%.*]]) {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[B:%.*]] = alloca i32, align 32
-; TUNIT-NEXT:    [[C:%.*]] = alloca i32*, align 64
+; TUNIT-NEXT:    [[C:%.*]] = alloca ptr, align 64
 ; TUNIT-NEXT:    [[PTR:%.*]] = alloca i32, align 128
-; TUNIT-NEXT:    [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
-; TUNIT-NEXT:    store i32 42, i32* [[B]], align 32
-; TUNIT-NEXT:    store i32* [[B]], i32** [[C]], align 64
-; TUNIT-NEXT:    call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 4294967296 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
-; TUNIT-NEXT:    call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 4294967296 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
+; TUNIT-NEXT:    store i32 42, ptr [[B]], align 32
+; TUNIT-NEXT:    store ptr [[B]], ptr [[C]], align 64
+; TUNIT-NEXT:    call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noalias nocapture noundef align 4294967296 null, ptr noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr nocapture noundef @t3_callback_callee, ptr nocapture align 256 [[A]], i64 undef, ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
+; TUNIT-NEXT:    call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noalias nocapture noundef align 4294967296 null, ptr noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr nocapture noundef @t3_callback_callee, ptr nocapture align 256 [[A]], i64 undef, ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@t3_caller
-; CGSCC-SAME: (i32* noalias align 256 [[A:%.*]]) {
+; CGSCC-SAME: (ptr noalias align 256 [[A:%.*]]) {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[B:%.*]] = alloca i32, align 32
-; CGSCC-NEXT:    [[C:%.*]] = alloca i32*, align 64
+; CGSCC-NEXT:    [[C:%.*]] = alloca ptr, align 64
 ; CGSCC-NEXT:    [[PTR:%.*]] = alloca i32, align 128
-; CGSCC-NEXT:    [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
-; CGSCC-NEXT:    store i32 42, i32* [[B]], align 32
-; CGSCC-NEXT:    store i32* [[B]], i32** [[C]], align 64
-; CGSCC-NEXT:    call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 4294967296 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 noundef 99, i32** nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
-; CGSCC-NEXT:    call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 4294967296 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 noundef 99, i32** nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
+; CGSCC-NEXT:    store i32 42, ptr [[B]], align 32
+; CGSCC-NEXT:    store ptr [[B]], ptr [[C]], align 64
+; CGSCC-NEXT:    call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noalias nocapture noundef align 4294967296 null, ptr noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr nocapture noundef @t3_callback_callee, ptr align 256 [[A]], i64 noundef 99, ptr nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
+; CGSCC-NEXT:    call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noalias nocapture noundef align 4294967296 null, ptr noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr nocapture noundef @t3_callback_callee, ptr align 256 [[A]], i64 noundef 99, ptr nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
 ; CGSCC-NEXT:    ret void
 ;
 entry:
   %b = alloca i32, align 32
-  %c = alloca i32*, align 64
+  %c = alloca ptr, align 64
   %ptr = alloca i32, align 128
-  %0 = bitcast i32* %b to i8*
-  store i32 42, i32* %b, align 4
-  store i32* %b, i32** %c, align 8
-  call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* null, i32* %ptr, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* %a, i64 99, i32** %c)
-  call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* null, i32* %ptr, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* %a, i64 99, i32** %c)
+  store i32 42, ptr %b, align 4
+  store ptr %b, ptr %c, align 8
+  call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr null, ptr %ptr, ptr @t3_callback_callee, ptr %a, i64 99, ptr %c)
+  call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr null, ptr %ptr, ptr @t3_callback_callee, ptr %a, i64 99, ptr %c)
   ret void
 }
 
@@ -284,37 +272,37 @@ entry:
 ; The others are annotated with alignment information, amongst others, or even replaced by the constants passed to the call.
 ;
 ; FIXME: We should derive noalias for %a and add a "fake use" of %a in all potentially synchronizing calls.
-define internal void @t3_callback_callee(i32* %is_not_null, i32* %ptr, i32* %a, i64 %b, i32** %c) {
+define internal void @t3_callback_callee(ptr %is_not_null, ptr %ptr, ptr %a, i64 %b, ptr %c) {
 ;
 ; TUNIT-LABEL: define {{[^@]+}}@t3_callback_callee
-; TUNIT-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], i32* nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], i32* nocapture align 256 [[A:%.*]], i64 [[B:%.*]], i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], ptr nocapture align 256 [[A:%.*]], i64 [[B:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[PTR_VAL:%.*]] = load i32, i32* [[PTR]], align 8
-; TUNIT-NEXT:    store i32 [[PTR_VAL]], i32* [[IS_NOT_NULL]], align 4
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[C]], align 64
-; TUNIT-NEXT:    tail call void @t3_check(i32* nocapture align 256 [[A]], i64 noundef 99, i32* nocapture nonnull align 32 [[TMP0]])
+; TUNIT-NEXT:    [[PTR_VAL:%.*]] = load i32, ptr [[PTR]], align 8
+; TUNIT-NEXT:    store i32 [[PTR_VAL]], ptr [[IS_NOT_NULL]], align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[C]], align 64
+; TUNIT-NEXT:    tail call void @t3_check(ptr nocapture align 256 [[A]], i64 noundef 99, ptr nocapture nonnull align 32 [[TMP0]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@t3_callback_callee
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], i32* nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], i32* nocapture align 256 [[A:%.*]], i64 [[B:%.*]], i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[IS_NOT_NULL:%.*]], ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[PTR:%.*]], ptr nocapture align 256 [[A:%.*]], i64 [[B:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C:%.*]]) {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[PTR_VAL:%.*]] = load i32, i32* [[PTR]], align 8
-; CGSCC-NEXT:    store i32 [[PTR_VAL]], i32* [[IS_NOT_NULL]], align 4
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[C]], align 64
-; CGSCC-NEXT:    tail call void @t3_check(i32* nocapture align 256 [[A]], i64 noundef 99, i32* nocapture [[TMP0]])
+; CGSCC-NEXT:    [[PTR_VAL:%.*]] = load i32, ptr [[PTR]], align 8
+; CGSCC-NEXT:    store i32 [[PTR_VAL]], ptr [[IS_NOT_NULL]], align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[C]], align 64
+; CGSCC-NEXT:    tail call void @t3_check(ptr nocapture align 256 [[A]], i64 noundef 99, ptr nocapture [[TMP0]])
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %ptr_val = load i32, i32* %ptr, align 8
-  store i32 %ptr_val, i32* %is_not_null
-  %0 = load i32*, i32** %c, align 8
-  tail call void @t3_check(i32* %a, i64 %b, i32* %0)
+  %ptr_val = load i32, ptr %ptr, align 8
+  store i32 %ptr_val, ptr %is_not_null
+  %0 = load ptr, ptr %c, align 8
+  tail call void @t3_check(ptr %a, i64 %b, ptr %0)
   ret void
 }
 
-declare void @t3_check(i32* nocapture align 256, i64, i32* nocapture)
+declare void @t3_check(ptr nocapture align 256, i64, ptr nocapture)
 
-declare !callback !0 void @t3_callback_broker(i32* nocapture , i32* nocapture , void (i32*, i32*, ...)* nocapture, ...)
+declare !callback !0 void @t3_callback_broker(ptr nocapture , ptr nocapture , ptr nocapture, ...)
 
 !0 = !{!1}
 !1 = !{i64 2, i64 -1, i64 -1, i1 true}

diff  --git a/llvm/test/Transforms/Attributor/callgraph.ll b/llvm/test/Transforms/Attributor/callgraph.ll
index 202dd7c8efd9d..97b6f343b9a36 100644
--- a/llvm/test/Transforms/Attributor/callgraph.ll
+++ b/llvm/test/Transforms/Attributor/callgraph.ll
@@ -39,17 +39,17 @@ define dso_local void @func2() {
 define void @func5(i32 %0) {
 ; CHECK-LABEL: define {{[^@]+}}@func5(
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i32 [[TMP0:%.*]], 0
-; CHECK-NEXT:    [[TMP3:%.*]] = select i1 [[TMP2]], void ()* @func4, void ()* @func3
+; CHECK-NEXT:    [[TMP3:%.*]] = select i1 [[TMP2]], ptr @func4, ptr @func3
 ; CHECK-NEXT:    call void [[TMP3]]()
 ; CHECK-NEXT:    ret void
 ;
   %2 = icmp ne i32 %0, 0
-  %3 = select i1 %2, void ()* @func4, void ()* @func3
+  %3 = select i1 %2, ptr @func4, ptr @func3
   call void () %3()
   ret void
 }
 
-define void @broker(void ()* %unknown) !callback !0 {
+define void @broker(ptr %unknown) !callback !0 {
 ; CHECK-LABEL: define {{[^@]+}}@broker(
 ; CHECK-NEXT:    call void [[UNKNOWN:%.*]]()
 ; CHECK-NEXT:    ret void
@@ -60,14 +60,14 @@ define void @broker(void ()* %unknown) !callback !0 {
 
 define void @func6() {
 ; CHECK-LABEL: define {{[^@]+}}@func6(
-; CHECK-NEXT:    call void @broker(void ()* nocapture nofree noundef @func3)
+; CHECK-NEXT:    call void @broker(ptr nocapture nofree noundef @func3)
 ; CHECK-NEXT:    ret void
 ;
-  call void @broker(void ()* @func3)
+  call void @broker(ptr @func3)
   ret void
 }
 
-define void @func7(void ()* %unknown) {
+define void @func7(ptr %unknown) {
 ; CHECK-LABEL: define {{[^@]+}}@func7(
 ; CHECK-NEXT:    call void [[UNKNOWN:%.*]](), !callees !2
 ; CHECK-NEXT:    ret void
@@ -80,18 +80,18 @@ define void @func7(void ()* %unknown) {
 define void @undef_in_callees() {
 ; CHECK-LABEL: define {{[^@]+}}@undef_in_callees(
 ; CHECK-NEXT:  cond.end.i:
-; CHECK-NEXT:    call void undef(i8* undef, i32 undef, i8* undef), !callees !3
+; CHECK-NEXT:    call void undef(ptr undef, i32 undef, ptr undef), !callees !3
 ; CHECK-NEXT:    ret void
 ;
 cond.end.i:
-  call void undef(i8* undef, i32 undef, i8* undef), !callees !3
+  call void undef(ptr undef, i32 undef, ptr undef), !callees !3
   ret void
 }
 
 !0 = !{!1}
 !1 = !{i64 0, i1 false}
-!2 = !{void ()* @func3, void ()* @func4}
-!3 = distinct !{void (i8*, i32, i8*)* undef, void (i8*, i32, i8*)* null}
+!2 = !{ptr @func3, ptr @func4}
+!3 = distinct !{ptr undef, ptr null}
 
 ; UTC_ARGS: --disable
 

diff  --git a/llvm/test/Transforms/Attributor/cgscc_bugs.ll b/llvm/test/Transforms/Attributor/cgscc_bugs.ll
index 22332b91c0c50..f9055980c0002 100644
--- a/llvm/test/Transforms/Attributor/cgscc_bugs.ll
+++ b/llvm/test/Transforms/Attributor/cgscc_bugs.ll
@@ -4,32 +4,32 @@
 
 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 
-%0 = type { i32, %1, %2* }
+%0 = type { i32, %1, ptr }
 %1 = type { i32 }
 %2 = type opaque
 
-define hidden %0* @f1(i64 %0, i64 %1) {
+define hidden ptr @f1(i64 %0, i64 %1) {
 ; CHECK-LABEL: define {{[^@]+}}@f1
 ; CHECK-SAME: (i64 [[TMP0:%.*]], i64 [[TMP1:%.*]]) {
-; CHECK-NEXT:    [[TMP3:%.*]] = call { %0*, i64 } @f3(i64 [[TMP0]])
-; CHECK-NEXT:    ret %0* undef
+; CHECK-NEXT:    [[TMP3:%.*]] = call { ptr, i64 } @f3(i64 [[TMP0]])
+; CHECK-NEXT:    ret ptr undef
 ;
-  %3 = call { %0*, i64 } @f3(i64 %0)
-  ret %0* undef
+  %3 = call { ptr, i64 } @f3(i64 %0)
+  ret ptr undef
 }
 
-define linkonce_odr hidden { %0*, i64 } @f3(i64 %0) align 2 {
+define linkonce_odr hidden { ptr, i64 } @f3(i64 %0) align 2 {
 ; CHECK-LABEL: define {{[^@]+}}@f3
 ; CHECK-SAME: (i64 [[TMP0:%.*]]) align 2 {
 ; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @f4()
 ; CHECK-NEXT:    [[TMP3:%.*]] = zext i32 [[TMP2]] to i64
 ; CHECK-NEXT:    call void @f5(i64 [[TMP3]], i64 [[TMP0]]) #[[ATTR0:[0-9]+]]
-; CHECK-NEXT:    ret { %0*, i64 } undef
+; CHECK-NEXT:    ret { ptr, i64 } undef
 ;
   %2 = call i32 @f4()
   %3 = zext i32 %2 to i64
   call void @f5(i64 %3, i64 %0)
-  ret { %0*, i64 } undef
+  ret { ptr, i64 } undef
 }
 
 define linkonce_odr hidden i32 @f4() align 2 {

diff  --git a/llvm/test/Transforms/Attributor/depgraph.ll b/llvm/test/Transforms/Attributor/depgraph.ll
index 0531916d8c8a4..12254def5abdc 100644
--- a/llvm/test/Transforms/Attributor/depgraph.ll
+++ b/llvm/test/Transforms/Attributor/depgraph.ll
@@ -13,258 +13,258 @@
 ;   return p;
 ; }
 ;
-define i32* @checkAndAdvance(i32* align 16 %0) {
+define ptr @checkAndAdvance(ptr align 16 %0) {
 ; CHECK: Function Attrs: nofree nosync nounwind memory(argmem: read)
 ; CHECK-LABEL: define {{[^@]+}}@checkAndAdvance
-; CHECK-SAME: (i32* nofree noundef nonnull readonly align 16 dereferenceable(4) [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
-; CHECK-NEXT:    [[TMP2:%.*]] = load i32, i32* [[TMP0]], align 16
+; CHECK-SAME: (ptr nofree noundef nonnull readonly align 16 dereferenceable(4) [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 16
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 0
 ; CHECK-NEXT:    br i1 [[TMP3]], label [[TMP4:%.*]], label [[TMP7:%.*]]
 ; CHECK:       4:
-; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i32, i32* [[TMP0]], i64 4
-; CHECK-NEXT:    [[TMP6:%.*]] = call i32* @checkAndAdvance(i32* nofree nonnull readonly align 16 [[TMP5]]) #[[ATTR1:[0-9]+]]
+; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 4
+; CHECK-NEXT:    [[TMP6:%.*]] = call ptr @checkAndAdvance(ptr nofree nonnull readonly align 16 [[TMP5]]) #[[ATTR1:[0-9]+]]
 ; CHECK-NEXT:    br label [[TMP8:%.*]]
 ; CHECK:       7:
 ; CHECK-NEXT:    br label [[TMP8]]
 ; CHECK:       8:
-; CHECK-NEXT:    [[DOT0:%.*]] = phi i32* [ [[TMP5]], [[TMP4]] ], [ [[TMP0]], [[TMP7]] ]
-; CHECK-NEXT:    ret i32* [[DOT0]]
+; CHECK-NEXT:    [[DOT0:%.*]] = phi ptr [ [[TMP5]], [[TMP4]] ], [ [[TMP0]], [[TMP7]] ]
+; CHECK-NEXT:    ret ptr [[DOT0]]
 ;
-  %2 = load i32, i32* %0, align 4
+  %2 = load i32, ptr %0, align 4
   %3 = icmp eq i32 %2, 0
   br i1 %3, label %4, label %7
 
 4:                                                ; preds = %1
-  %5 = getelementptr inbounds i32, i32* %0, i64 4
-  %6 = call i32* @checkAndAdvance(i32* %5)
+  %5 = getelementptr inbounds i32, ptr %0, i64 4
+  %6 = call ptr @checkAndAdvance(ptr %5)
   br label %8
 
 7:                                                ; preds = %1
   br label %8
 
 8:                                                ; preds = %7, %4
-  %.0 = phi i32* [ %6, %4 ], [ %0, %7 ]
-  ret i32* %.0
+  %.0 = phi ptr [ %6, %4 ], [ %0, %7 ]
+  ret ptr %.0
 }
 
 ;
 ; Check for graph
 ;
 
-; GRAPH:      [AAIsDead] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state Live[#BB 4/4][#TBEP 0][#KDE 1]
+; GRAPH:      [AAIsDead] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state Live[#BB 4/4][#TBEP 0][#KDE 1]
 ; GRAPH-EMPTY:
 ; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %3 = icmp eq i32 %2, 0' at position {flt: [@-1]} with state set-state(< {  %3 = icmp eq i32 %2, 0[3], } >)
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %2 = load i32, i32* %0, align 4' at position {flt: [@-1]} with state set-state(< {  %2 = load i32, i32* %0, align 4[3], } >)
+; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %2 = load i32, ptr %0, align 4' at position {flt: [@-1]} with state set-state(< {  %2 = load i32, ptr %0, align 4[3], } >)
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state set-state(< {i32* %0[3], } >)
+; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state set-state(< {ptr %0[3], } >)
 ; GRAPH-EMPTY:
 ; GRAPH-NEXT: [AAPotentialValues] for CtxI <<null inst>> at position {flt: [@-1]} with state set-state(< {i32 0[3], } >)
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoReturn] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state may-return
+; GRAPH-NEXT: [AANoReturn] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state may-return
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoReturn] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state may-return
+; GRAPH-NEXT: [AANoReturn] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state may-return
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAIsDead] for CtxI '  ret i32* %.0' at position {flt: [@-1]} with state assumed-live
+; GRAPH-NEXT: [AAIsDead] for CtxI '  ret ptr %.0' at position {flt: [@-1]} with state assumed-live
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAWillReturn] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state may-noreturn
+; GRAPH-NEXT: [AAWillReturn] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state may-noreturn
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAIsDead] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {flt: [@-1]} with state assumed-live
+; GRAPH-NEXT: [AAIsDead] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {flt: [@-1]} with state assumed-live
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoUnwind] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state nounwind
-; GRAPH-NEXT:   updates [AANoUnwind] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nounwind
-; GRAPH-NEXT:   updates [AANoUnwind] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nounwind
+; GRAPH-NEXT: [AANoUnwind] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state nounwind
+; GRAPH-NEXT:   updates [AANoUnwind] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nounwind
+; GRAPH-NEXT:   updates [AANoUnwind] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nounwind
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoUnwind] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nounwind
-; GRAPH-NEXT:   updates [AANoUnwind] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state nounwind
-; GRAPH-NEXT:   updates [AANoUnwind] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state nounwind
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AANoUnwind] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state nounwind
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT: [AANoUnwind] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nounwind
+; GRAPH-NEXT:   updates [AANoUnwind] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state nounwind
+; GRAPH-NEXT:   updates [AANoUnwind] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state nounwind
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AANoUnwind] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state nounwind
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAMemoryLocation] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state memory:argument
-; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state memory:argument
+; GRAPH-NEXT: [AAMemoryLocation] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state memory:argument
+; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state memory:argument
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAMemoryLocation] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state memory:argument
-; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state memory:argument
-; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state memory:argument
+; GRAPH-NEXT: [AAMemoryLocation] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state memory:argument
+; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state memory:argument
+; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state memory:argument
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAMemoryBehavior] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state readonly
-; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state readonly
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state readonly
-; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state readonly
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state readonly
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state readonly
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT: [AAMemoryBehavior] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state readonly
+; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state readonly
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state readonly
+; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state readonly
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state readonly
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state readonly
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAIsDead] for CtxI '  %2 = load i32, i32* %0, align 4' at position {flt: [@-1]} with state assumed-live
+; GRAPH-NEXT: [AAIsDead] for CtxI '  %2 = load i32, ptr %0, align 4' at position {flt: [@-1]} with state assumed-live
 ; GRAPH-EMPTY:
 ; GRAPH-NEXT: [AAIsDead] for CtxI '  %3 = icmp eq i32 %2, 0' at position {flt: [@-1]} with state assumed-live
 ; GRAPH-EMPTY:
 ; GRAPH-NEXT: [AAIsDead] for CtxI '  br i1 %3, label %4, label %7' at position {flt: [@-1]} with state assumed-live
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAMemoryBehavior] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state readonly
-; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state readonly
-; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state readonly
+; GRAPH-NEXT: [AAMemoryBehavior] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state readonly
+; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state readonly
+; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state readonly
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_ret: [@-1]} with state set-state(< {  %5 = getelementptr inbounds i32, i32* %0, i64 4[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
-; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %.0 = phi i32* [ %6, %4 ], [ %0, %7 ]' at position {flt:.0 [.0 at -1]} with state set-state(< {i32* %0[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
-; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %.0 = phi i32* [ %6, %4 ], [ %0, %7 ]' at position {flt:.0 [.0 at -1]} with state set-state(< {i32* %0[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
-; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %.0 = phi i32* [ %6, %4 ], [ %0, %7 ]' at position {flt:.0 [.0 at -1]} with state set-state(< {i32* %0[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
-; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %.0 = phi i32* [ %6, %4 ], [ %0, %7 ]' at position {flt:.0 [.0 at -1]} with state set-state(< {i32* %0[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
+; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_ret: [@-1]} with state set-state(< {  %5 = getelementptr inbounds i32, ptr %0, i64 4[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
+; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %.0 = phi ptr [ %6, %4 ], [ %0, %7 ]' at position {flt:.0 [.0 at -1]} with state set-state(< {ptr %0[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
+; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %.0 = phi ptr [ %6, %4 ], [ %0, %7 ]' at position {flt:.0 [.0 at -1]} with state set-state(< {ptr %0[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
+; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %.0 = phi ptr [ %6, %4 ], [ %0, %7 ]' at position {flt:.0 [.0 at -1]} with state set-state(< {ptr %0[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
+; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %.0 = phi ptr [ %6, %4 ], [ %0, %7 ]' at position {flt:.0 [.0 at -1]} with state set-state(< {ptr %0[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state set-state(< {i32* %0[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
-; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_ret: [@-1]} with state set-state(< {  %5 = getelementptr inbounds i32, i32* %0, i64 4[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
-; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_ret: [@-1]} with state set-state(< {  %5 = getelementptr inbounds i32, i32* %0, i64 4[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
+; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state set-state(< {ptr %0[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
+; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_ret: [@-1]} with state set-state(< {  %5 = getelementptr inbounds i32, ptr %0, i64 4[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
+; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_ret: [@-1]} with state set-state(< {  %5 = getelementptr inbounds i32, ptr %0, i64 4[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAReturnedValues] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state may-return(#2)
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state nonnull
-; GRAPH-NEXT:   updates [AAAlign] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state align<1-16>
-; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state set-state(< {i32* %0[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
-; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state set-state(< {i32* %0[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
+; GRAPH-NEXT: [AAReturnedValues] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state may-return(#2)
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state nonnull
+; GRAPH-NEXT:   updates [AAAlign] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state align<1-16>
+; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state set-state(< {ptr %0[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
+; GRAPH-NEXT:   updates [AAPotentialValues] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state set-state(< {ptr %0[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %.0 = phi i32* [ %6, %4 ], [ %0, %7 ]' at position {flt:.0 [.0 at -1]} with state set-state(< {i32* %0[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3],   %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
-; GRAPH-NEXT:   updates [AAReturnedValues] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state may-return(#2)
+; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %.0 = phi ptr [ %6, %4 ], [ %0, %7 ]' at position {flt:.0 [.0 at -1]} with state set-state(< {ptr %0[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3],   %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
+; GRAPH-NEXT:   updates [AAReturnedValues] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state may-return(#2)
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %5 = getelementptr inbounds i32, i32* %0, i64 4' at position {flt: [@-1]} with state set-state(< {  %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
+; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %5 = getelementptr inbounds i32, ptr %0, i64 4' at position {flt: [@-1]} with state set-state(< {  %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
 ; GRAPH-EMPTY:
 ; GRAPH-NEXT: [AAPotentialValues] for CtxI <<null inst>> at position {flt: [@-1]} with state set-state(< {i64 4[3], } >)
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %2 = load i32, i32* %0, align 4' at position {flt:checkAndAdvance [checkAndAdvance at -1]} with state set-state(< {@checkAndAdvance[3], } >)
+; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %2 = load i32, ptr %0, align 4' at position {flt:checkAndAdvance [checkAndAdvance at -1]} with state set-state(< {@checkAndAdvance[3], } >)
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state set-state(< {  %5 = getelementptr inbounds i32, i32* %0, i64 4[3], } >)
+; GRAPH-NEXT: [AAPotentialValues] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state set-state(< {  %5 = getelementptr inbounds i32, ptr %0, i64 4[3], } >)
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAInstanceInfo] for CtxI '  %5 = getelementptr inbounds i32, i32* %0, i64 4' at position {flt: [@-1]} with state <unique [fAa]>
+; GRAPH-NEXT: [AAInstanceInfo] for CtxI '  %5 = getelementptr inbounds i32, ptr %0, i64 4' at position {flt: [@-1]} with state <unique [fAa]>
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoRecurse] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state may-recurse
+; GRAPH-NEXT: [AANoRecurse] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state may-recurse
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAFunctionReachability] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state FunctionReachability [1,1]
+; GRAPH-NEXT: [AAFunctionReachability] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state FunctionReachability [1,1]
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AACallEdges] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state CallEdges[0,1]
+; GRAPH-NEXT: [AACallEdges] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state CallEdges[0,1]
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AACallEdges] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state CallEdges[0,1]
+; GRAPH-NEXT: [AACallEdges] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state CallEdges[0,1]
 ; GRAPH-EMPTY:
 ; GRAPH-NEXT: [AAIsDead] for CtxI '  br label %8' at position {flt: [@-1]} with state assumed-live
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAWillReturn] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state may-noreturn
+; GRAPH-NEXT: [AAWillReturn] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state may-noreturn
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoRecurse] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state may-recurse
+; GRAPH-NEXT: [AANoRecurse] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state may-recurse
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAUndefinedBehavior] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state undefined-behavior
+; GRAPH-NEXT: [AAUndefinedBehavior] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state undefined-behavior
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoUndef] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state may-undef-or-poison
+; GRAPH-NEXT: [AANoUndef] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state may-undef-or-poison
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoUndef] for CtxI '  %5 = getelementptr inbounds i32, i32* %0, i64 4' at position {flt: [@-1]} with state may-undef-or-poison
+; GRAPH-NEXT: [AANoUndef] for CtxI '  %5 = getelementptr inbounds i32, ptr %0, i64 4' at position {flt: [@-1]} with state may-undef-or-poison
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAIsDead] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state assumed-live
+; GRAPH-NEXT: [AAIsDead] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state assumed-live
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoUndef] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state may-undef-or-poison
+; GRAPH-NEXT: [AANoUndef] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state may-undef-or-poison
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoUndef] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state noundef
+; GRAPH-NEXT: [AANoUndef] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state noundef
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoSync] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nosync
-; GRAPH-NEXT:   updates [AANoSync] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state nosync
-; GRAPH-NEXT:   updates [AANoSync] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state nosync
+; GRAPH-NEXT: [AANoSync] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nosync
+; GRAPH-NEXT:   updates [AANoSync] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state nosync
+; GRAPH-NEXT:   updates [AANoSync] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state nosync
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoSync] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state nosync
-; GRAPH-NEXT:   updates [AANoSync] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nosync
-; GRAPH-NEXT:   updates [AANoSync] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nosync
+; GRAPH-NEXT: [AANoSync] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state nosync
+; GRAPH-NEXT:   updates [AANoSync] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nosync
+; GRAPH-NEXT:   updates [AANoSync] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nosync
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoFree] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nofree
-; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state nofree
-; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state nofree
-; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state nofree
-; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state nofree
+; GRAPH-NEXT: [AANoFree] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nofree
+; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state nofree
+; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state nofree
+; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state nofree
+; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state nofree
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoFree] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state nofree
-; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nofree
-; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nofree
+; GRAPH-NEXT: [AANoFree] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state nofree
+; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nofree
+; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state nofree
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAAssumptionInfo] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state Known [], Assumed []
+; GRAPH-NEXT: [AAAssumptionInfo] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state Known [], Assumed []
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAHeapToStack] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state [H2S] Mallocs Good/Bad: 0/0
+; GRAPH-NEXT: [AAHeapToStack] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state [H2S] Mallocs Good/Bad: 0/0
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAAlign] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state align<1-16>
+; GRAPH-NEXT: [AAAlign] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state align<1-16>
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAAlign] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state align<16-16>
+; GRAPH-NEXT: [AAAlign] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state align<16-16>
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAAlign] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state align<16-16>
+; GRAPH-NEXT: [AAAlign] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state align<16-16>
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAAlign] for CtxI '  %5 = getelementptr inbounds i32, i32* %0, i64 4' at position {flt: [@-1]} with state align<16-16>
+; GRAPH-NEXT: [AAAlign] for CtxI '  %5 = getelementptr inbounds i32, ptr %0, i64 4' at position {flt: [@-1]} with state align<16-16>
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANonNull] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state nonnull
+; GRAPH-NEXT: [AANonNull] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state nonnull
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANonNull] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state nonnull
+; GRAPH-NEXT: [AANonNull] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state nonnull
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoAlias] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state may-alias
+; GRAPH-NEXT: [AANoAlias] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state may-alias
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AADereferenceable] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state unknown-dereferenceable
+; GRAPH-NEXT: [AADereferenceable] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state unknown-dereferenceable
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AADereferenceable] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state dereferenceable<4-4>
-; GRAPH-NEXT:   updates [AADereferenceable] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state unknown-dereferenceable
+; GRAPH-NEXT: [AADereferenceable] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state dereferenceable<4-4>
+; GRAPH-NEXT:   updates [AADereferenceable] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state unknown-dereferenceable
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AADereferenceable] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state unknown-dereferenceable
+; GRAPH-NEXT: [AADereferenceable] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state unknown-dereferenceable
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANonNull] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state nonnull
+; GRAPH-NEXT: [AANonNull] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state nonnull
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANonNull] for CtxI '  %5 = getelementptr inbounds i32, i32* %0, i64 4' at position {flt: [@-1]} with state nonnull
-; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %5 = getelementptr inbounds i32, i32* %0, i64 4' at position {flt: [@-1]} with state nonnull
-; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state nonnull
-; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state nonnull
-; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %5 = getelementptr inbounds i32, i32* %0, i64 4' at position {flt: [@-1]} with state nonnull
-; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state nonnull
+; GRAPH-NEXT: [AANonNull] for CtxI '  %5 = getelementptr inbounds i32, ptr %0, i64 4' at position {flt: [@-1]} with state nonnull
+; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %5 = getelementptr inbounds i32, ptr %0, i64 4' at position {flt: [@-1]} with state nonnull
+; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state nonnull
+; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state nonnull
+; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %5 = getelementptr inbounds i32, ptr %0, i64 4' at position {flt: [@-1]} with state nonnull
+; GRAPH-NEXT:   updates [AANonNull] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance at -1]} with state nonnull
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAIsDead] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed-live
+; GRAPH-NEXT: [AAIsDead] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed-live
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoAlias] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state may-alias
+; GRAPH-NEXT: [AANoAlias] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state may-alias
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state readonly
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT: [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state readonly
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state assumed not-captured-maybe-returned
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAIsDead] for CtxI '  %5 = getelementptr inbounds i32, i32* %0, i64 4' at position {flt: [@-1]} with state assumed-live
+; GRAPH-NEXT: [AAIsDead] for CtxI '  %5 = getelementptr inbounds i32, ptr %0, i64 4' at position {flt: [@-1]} with state assumed-live
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAIsDead] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state assumed-live
+; GRAPH-NEXT: [AAIsDead] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state assumed-live
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoCapture] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
-; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT: [AANoCapture] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
+; GRAPH-NEXT:   updates [AANoCapture] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state assumed not-captured-maybe-returned
 ; GRAPH-EMPTY:
 ; GRAPH-NEXT: [AAIsDead] for CtxI '  br label %8' at position {flt: [@-1]} with state assumed-live
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAMemoryBehavior] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state readonly
-; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state readonly
-; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state readonly
+; GRAPH-NEXT: [AAMemoryBehavior] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state readonly
+; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state readonly
+; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state readonly
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAMemoryBehavior] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state readonly
-; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state readonly
-; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state memory:argument
-; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state memory:argument
-; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %2 = load i32, i32* %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state memory:argument
+; GRAPH-NEXT: [AAMemoryBehavior] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state readonly
+; GRAPH-NEXT:   updates [AAMemoryBehavior] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state readonly
+; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state memory:argument
+; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state memory:argument
+; GRAPH-NEXT:   updates [AAMemoryLocation] for CtxI '  %2 = load i32, ptr %0, align 4' at position {fn:checkAndAdvance [checkAndAdvance at -1]} with state memory:argument
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoFree] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state nofree
-; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state nofree
-; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state nofree
+; GRAPH-NEXT: [AANoFree] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state nofree
+; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state nofree
+; GRAPH-NEXT:   updates [AANoFree] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state nofree
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAPrivatizablePtr] for CtxI '  %2 = load i32, i32* %0, align 4' at position {arg: [@0]} with state [no-priv]
+; GRAPH-NEXT: [AAPrivatizablePtr] for CtxI '  %2 = load i32, ptr %0, align 4' at position {arg: [@0]} with state [no-priv]
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AAAssumptionInfo] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs: [@-1]} with state Known [], Assumed []
+; GRAPH-NEXT: [AAAssumptionInfo] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs: [@-1]} with state Known [], Assumed []
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoAlias] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state may-alias
+; GRAPH-NEXT: [AANoAlias] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state may-alias
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoAlias] for CtxI '  %5 = getelementptr inbounds i32, i32* %0, i64 4' at position {flt: [@-1]} with state may-alias
+; GRAPH-NEXT: [AANoAlias] for CtxI '  %5 = getelementptr inbounds i32, ptr %0, i64 4' at position {flt: [@-1]} with state may-alias
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AANoFree] for CtxI '  %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_arg: [@0]} with state nofree
+; GRAPH-NEXT: [AANoFree] for CtxI '  %6 = call ptr @checkAndAdvance(ptr %5)' at position {cs_arg: [@0]} with state nofree
 ; GRAPH-EMPTY:
-; GRAPH-NEXT: [AADereferenceable] for CtxI '  %5 = getelementptr inbounds i32, i32* %0, i64 4' at position {flt: [@-1]} with state unknown-dereferenceable
+; GRAPH-NEXT: [AADereferenceable] for CtxI '  %5 = getelementptr inbounds i32, ptr %0, i64 4' at position {flt: [@-1]} with state unknown-dereferenceable
 
 ; GRAPH-NOT: update
 

diff  --git a/llvm/test/Transforms/Attributor/internal-noalias.ll b/llvm/test/Transforms/Attributor/internal-noalias.ll
index 74608c93b3bb3..56f707cc3fc3b 100644
--- a/llvm/test/Transforms/Attributor/internal-noalias.ll
+++ b/llvm/test/Transforms/Attributor/internal-noalias.ll
@@ -2,138 +2,138 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal  -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=7 -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 
-define dso_local i32 @visible(i32* noalias %A, i32* noalias %B) #0 {
+define dso_local i32 @visible(ptr noalias %A, ptr noalias %B) #0 {
 ; TUNIT: Function Attrs: nofree noinline norecurse nosync nounwind willreturn memory(argmem: read) uwtable
 ; TUNIT-LABEL: define {{[^@]+}}@visible
-; TUNIT-SAME: (i32* noalias nocapture nofree readonly [[A:%.*]], i32* noalias nocapture nofree readonly align 4 [[B:%.*]]) #[[ATTR0:[0-9]+]] {
+; TUNIT-SAME: (ptr noalias nocapture nofree readonly [[A:%.*]], ptr noalias nocapture nofree readonly align 4 [[B:%.*]]) #[[ATTR0:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[CALL1:%.*]] = call i32 @noalias_args(i32* noalias nocapture nofree readonly align 4 [[A]], i32* noalias nocapture nofree readonly align 4 [[B]]) #[[ATTR3:[0-9]+]]
-; TUNIT-NEXT:    [[CALL2:%.*]] = call i32 @noalias_args_argmem(i32* noalias nocapture nofree readonly align 4 [[A]], i32* noalias nocapture nofree readonly align 4 [[B]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL1:%.*]] = call i32 @noalias_args(ptr noalias nocapture nofree readonly align 4 [[A]], ptr noalias nocapture nofree readonly align 4 [[B]]) #[[ATTR3:[0-9]+]]
+; TUNIT-NEXT:    [[CALL2:%.*]] = call i32 @noalias_args_argmem(ptr noalias nocapture nofree readonly align 4 [[A]], ptr noalias nocapture nofree readonly align 4 [[B]]) #[[ATTR3]]
 ; TUNIT-NEXT:    [[ADD:%.*]] = add nsw i32 [[CALL1]], [[CALL2]]
 ; TUNIT-NEXT:    ret i32 [[ADD]]
 ;
 ; CGSCC: Function Attrs: nofree noinline nosync nounwind willreturn memory(argmem: read) uwtable
 ; CGSCC-LABEL: define {{[^@]+}}@visible
-; CGSCC-SAME: (i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
+; CGSCC-SAME: (ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[CALL1:%.*]] = call i32 @noalias_args(i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]])
-; CGSCC-NEXT:    [[CALL2:%.*]] = call i32 @noalias_args_argmem(i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]])
+; CGSCC-NEXT:    [[CALL1:%.*]] = call i32 @noalias_args(ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]])
+; CGSCC-NEXT:    [[CALL2:%.*]] = call i32 @noalias_args_argmem(ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]])
 ; CGSCC-NEXT:    [[ADD:%.*]] = add nsw i32 [[CALL1]], [[CALL2]]
 ; CGSCC-NEXT:    ret i32 [[ADD]]
 ;
 entry:
-  %call1 = call i32 @noalias_args(i32* %A, i32* %B)
-  %call2 = call i32 @noalias_args_argmem(i32* %A, i32* %B)
+  %call1 = call i32 @noalias_args(ptr %A, ptr %B)
+  %call2 = call i32 @noalias_args_argmem(ptr %A, ptr %B)
   %add = add nsw i32 %call1, %call2
   ret i32 %add
 }
 
-define private i32 @noalias_args(i32* %A, i32* %B) #0 {
+define private i32 @noalias_args(ptr %A, ptr %B) #0 {
 ; TUNIT: Function Attrs: nofree noinline norecurse nosync nounwind willreturn memory(argmem: read) uwtable
 ; TUNIT-LABEL: define {{[^@]+}}@noalias_args
-; TUNIT-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, i32* [[A]], align 4
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* [[B]], align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A]], align 4
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr [[B]], align 4
 ; TUNIT-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
-; TUNIT-NEXT:    [[CALL:%.*]] = call i32 @noalias_args_argmem(i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL:%.*]] = call i32 @noalias_args_argmem(ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR3]]
 ; TUNIT-NEXT:    [[ADD2:%.*]] = add nsw i32 [[ADD]], [[CALL]]
 ; TUNIT-NEXT:    ret i32 [[ADD2]]
 ;
 ; CGSCC: Function Attrs: nofree noinline nosync nounwind willreturn memory(argmem: read) uwtable
 ; CGSCC-LABEL: define {{[^@]+}}@noalias_args
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, i32* [[A]], align 4
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, i32* [[B]], align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A]], align 4
+; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr [[B]], align 4
 ; CGSCC-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
-; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @noalias_args_argmem(i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR5:[0-9]+]]
+; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @noalias_args_argmem(ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR5:[0-9]+]]
 ; CGSCC-NEXT:    [[ADD2:%.*]] = add nsw i32 [[ADD]], [[CALL]]
 ; CGSCC-NEXT:    ret i32 [[ADD2]]
 ;
 entry:
-  %0 = load i32, i32* %A, align 4
-  %1 = load i32, i32* %B, align 4
+  %0 = load i32, ptr %A, align 4
+  %1 = load i32, ptr %B, align 4
   %add = add nsw i32 %0, %1
-  %call = call i32 @noalias_args_argmem(i32* %A, i32* %B)
+  %call = call i32 @noalias_args_argmem(ptr %A, ptr %B)
   %add2 = add nsw i32 %add, %call
   ret i32 %add2
 }
 
 
-define internal i32 @noalias_args_argmem(i32* %A, i32* %B) #1 {
+define internal i32 @noalias_args_argmem(ptr %A, ptr %B) #1 {
 ; TUNIT: Function Attrs: nofree noinline norecurse nosync nounwind willreturn memory(argmem: read) uwtable
 ; TUNIT-LABEL: define {{[^@]+}}@noalias_args_argmem
-; TUNIT-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, i32* [[A]], align 4
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* [[B]], align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A]], align 4
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr [[B]], align 4
 ; TUNIT-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
 ; TUNIT-NEXT:    ret i32 [[ADD]]
 ;
 ; CGSCC: Function Attrs: nofree noinline norecurse nosync nounwind willreturn memory(argmem: read) uwtable
 ; CGSCC-LABEL: define {{[^@]+}}@noalias_args_argmem
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR1:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, i32* [[A]], align 4
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, i32* [[B]], align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A]], align 4
+; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr [[B]], align 4
 ; CGSCC-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
 ; CGSCC-NEXT:    ret i32 [[ADD]]
 ;
 entry:
-  %0 = load i32, i32* %A, align 4
-  %1 = load i32, i32* %B, align 4
+  %0 = load i32, ptr %A, align 4
+  %1 = load i32, ptr %B, align 4
   %add = add nsw i32 %0, %1
   ret i32 %add
 }
 
-define dso_local i32 @visible_local(i32* %A) #0 {
+define dso_local i32 @visible_local(ptr %A) #0 {
 ; TUNIT: Function Attrs: nofree noinline norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable
 ; TUNIT-LABEL: define {{[^@]+}}@visible_local
-; TUNIT-SAME: (i32* nocapture nofree readonly [[A:%.*]]) #[[ATTR1:[0-9]+]] {
+; TUNIT-SAME: (ptr nocapture nofree readonly [[A:%.*]]) #[[ATTR1:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[B:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    store i32 5, i32* [[B]], align 4
-; TUNIT-NEXT:    [[CALL1:%.*]] = call i32 @noalias_args(i32* nocapture nofree readonly align 4 [[A]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL2:%.*]] = call i32 @noalias_args_argmem(i32* nocapture nofree readonly align 4 [[A]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR3]]
+; TUNIT-NEXT:    store i32 5, ptr [[B]], align 4
+; TUNIT-NEXT:    [[CALL1:%.*]] = call i32 @noalias_args(ptr nocapture nofree readonly align 4 [[A]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL2:%.*]] = call i32 @noalias_args_argmem(ptr nocapture nofree readonly align 4 [[A]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR3]]
 ; TUNIT-NEXT:    [[ADD:%.*]] = add nsw i32 [[CALL1]], [[CALL2]]
 ; TUNIT-NEXT:    ret i32 [[ADD]]
 ;
 ; CGSCC: Function Attrs: nofree noinline nosync nounwind willreturn memory(argmem: readwrite) uwtable
 ; CGSCC-LABEL: define {{[^@]+}}@visible_local
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[B:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 5, i32* [[B]], align 4
-; CGSCC-NEXT:    [[CALL1:%.*]] = call i32 @noalias_args(i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]])
-; CGSCC-NEXT:    [[CALL2:%.*]] = call i32 @noalias_args_argmem(i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]])
+; CGSCC-NEXT:    store i32 5, ptr [[B]], align 4
+; CGSCC-NEXT:    [[CALL1:%.*]] = call i32 @noalias_args(ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]])
+; CGSCC-NEXT:    [[CALL2:%.*]] = call i32 @noalias_args_argmem(ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]])
 ; CGSCC-NEXT:    [[ADD:%.*]] = add nsw i32 [[CALL1]], [[CALL2]]
 ; CGSCC-NEXT:    ret i32 [[ADD]]
 ;
 entry:
   %B = alloca i32, align 4
-  store i32 5, i32* %B, align 4
-  %call1 = call i32 @noalias_args(i32* %A, i32* nonnull %B)
-  %call2 = call i32 @noalias_args_argmem(i32* %A, i32* nonnull %B)
+  store i32 5, ptr %B, align 4
+  %call1 = call i32 @noalias_args(ptr %A, ptr nonnull %B)
+  %call2 = call i32 @noalias_args_argmem(ptr %A, ptr nonnull %B)
   %add = add nsw i32 %call1, %call2
   ret i32 %add
 }
 
-define internal i32 @noalias_args_argmem_ro(i32* %A, i32* %B) #1 {
+define internal i32 @noalias_args_argmem_ro(ptr %A, ptr %B) #1 {
 ; CGSCC: Function Attrs: nofree noinline norecurse nosync nounwind willreturn memory(argmem: read) uwtable
 ; CGSCC-LABEL: define {{[^@]+}}@noalias_args_argmem_ro
 ; CGSCC-SAME: (i32 [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR1]] {
 ; CGSCC-NEXT:    [[B_PRIV:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 [[TMP1]], i32* [[B_PRIV]], align 4
+; CGSCC-NEXT:    store i32 [[TMP1]], ptr [[B_PRIV]], align 4
 ; CGSCC-NEXT:    [[A_PRIV:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 [[TMP0]], i32* [[A_PRIV]], align 4
-; CGSCC-NEXT:    [[T0:%.*]] = load i32, i32* [[A_PRIV]], align 4
-; CGSCC-NEXT:    [[T1:%.*]] = load i32, i32* [[B_PRIV]], align 4
+; CGSCC-NEXT:    store i32 [[TMP0]], ptr [[A_PRIV]], align 4
+; CGSCC-NEXT:    [[T0:%.*]] = load i32, ptr [[A_PRIV]], align 4
+; CGSCC-NEXT:    [[T1:%.*]] = load i32, ptr [[B_PRIV]], align 4
 ; CGSCC-NEXT:    [[ADD:%.*]] = add nsw i32 [[T0]], [[T1]]
 ; CGSCC-NEXT:    ret i32 [[ADD]]
 ;
-  %t0 = load i32, i32* %A, align 4
-  %t1 = load i32, i32* %B, align 4
+  %t0 = load i32, ptr %A, align 4
+  %t1 = load i32, ptr %B, align 4
   %add = add nsw i32 %t0, %t1
   ret i32 %add
 }
@@ -152,27 +152,27 @@ define i32 @visible_local_2() {
 ; CGSCC-NEXT:    ret i32 [[CALL]]
 ;
   %B = alloca i32, align 4
-  store i32 5, i32* %B, align 4
-  %call = call i32 @noalias_args_argmem_ro(i32* %B, i32* %B)
+  store i32 5, ptr %B, align 4
+  %call = call i32 @noalias_args_argmem_ro(ptr %B, ptr %B)
   ret i32 %call
 }
 
-define internal i32 @noalias_args_argmem_rn(i32* %A, i32* %B) #1 {
+define internal i32 @noalias_args_argmem_rn(ptr %A, ptr %B) #1 {
 ; TUNIT: Function Attrs: nofree noinline norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable
 ; TUNIT-LABEL: define {{[^@]+}}@noalias_args_argmem_rn
-; TUNIT-SAME: (i32* noalias nocapture nofree noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR1]] {
-; TUNIT-NEXT:    [[T0:%.*]] = load i32, i32* [[B]], align 4
+; TUNIT-SAME: (ptr noalias nocapture nofree noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR1]] {
+; TUNIT-NEXT:    [[T0:%.*]] = load i32, ptr [[B]], align 4
 ; TUNIT-NEXT:    ret i32 [[T0]]
 ;
 ; CGSCC: Function Attrs: nofree noinline norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable
 ; CGSCC-LABEL: define {{[^@]+}}@noalias_args_argmem_rn
-; CGSCC-SAME: (i32* noalias nocapture nofree noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR4:[0-9]+]] {
-; CGSCC-NEXT:    [[T0:%.*]] = load i32, i32* [[B]], align 4
-; CGSCC-NEXT:    store i32 0, i32* [[B]], align 4
+; CGSCC-SAME: (ptr noalias nocapture nofree noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR4:[0-9]+]] {
+; CGSCC-NEXT:    [[T0:%.*]] = load i32, ptr [[B]], align 4
+; CGSCC-NEXT:    store i32 0, ptr [[B]], align 4
 ; CGSCC-NEXT:    ret i32 [[T0]]
 ;
-  %t0 = load i32, i32* %B, align 4
-  store i32 0, i32* %B
+  %t0 = load i32, ptr %B, align 4
+  store i32 0, ptr %B
   ret i32 %t0
 }
 
@@ -181,21 +181,21 @@ define i32 @visible_local_3() {
 ; TUNIT-LABEL: define {{[^@]+}}@visible_local_3
 ; TUNIT-SAME: () #[[ATTR2]] {
 ; TUNIT-NEXT:    [[B:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    store i32 5, i32* [[B]], align 4
-; TUNIT-NEXT:    [[CALL:%.*]] = call i32 @noalias_args_argmem_rn(i32* noalias nocapture nofree noundef nonnull align 4 dereferenceable(4) [[B]]) #[[ATTR4:[0-9]+]]
+; TUNIT-NEXT:    store i32 5, ptr [[B]], align 4
+; TUNIT-NEXT:    [[CALL:%.*]] = call i32 @noalias_args_argmem_rn(ptr noalias nocapture nofree noundef nonnull align 4 dereferenceable(4) [[B]]) #[[ATTR4:[0-9]+]]
 ; TUNIT-NEXT:    ret i32 [[CALL]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@visible_local_3
 ; CGSCC-SAME: () #[[ATTR3]] {
 ; CGSCC-NEXT:    [[B:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 5, i32* [[B]], align 4
-; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @noalias_args_argmem_rn(i32* noalias nocapture nofree noundef nonnull align 4 dereferenceable(4) [[B]]) #[[ATTR7:[0-9]+]]
+; CGSCC-NEXT:    store i32 5, ptr [[B]], align 4
+; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @noalias_args_argmem_rn(ptr noalias nocapture nofree noundef nonnull align 4 dereferenceable(4) [[B]]) #[[ATTR7:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 [[CALL]]
 ;
   %B = alloca i32, align 4
-  store i32 5, i32* %B, align 4
-  %call = call i32 @noalias_args_argmem_rn(i32* %B, i32* %B)
+  store i32 5, ptr %B, align 4
+  %call = call i32 @noalias_args_argmem_rn(ptr %B, ptr %B)
   ret i32 %call
 }
 

diff  --git a/llvm/test/Transforms/Attributor/lowerheap.ll b/llvm/test/Transforms/Attributor/lowerheap.ll
index 0b10c1db35a9c..6aee51864d7ef 100644
--- a/llvm/test/Transforms/Attributor/lowerheap.ll
+++ b/llvm/test/Transforms/Attributor/lowerheap.ll
@@ -2,24 +2,24 @@
 ; RUN: opt -max-heap-to-stack-size=-1 -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal  -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=2 -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
 ; RUN: opt -max-heap-to-stack-size=-1 -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 
-declare i64 @subfn(i8*) #0
+declare i64 @subfn(ptr) #0
 
-declare noalias i8* @malloc(i64) allockind("alloc,uninitialized") allocsize(0) "alloc-family"="malloc"
-declare noalias i8* @calloc(i64, i64) allockind("alloc,zeroed") allocsize(0,1) "alloc-family"="malloc"
-declare void @free(i8*) allockind("free") "alloc-family"="malloc"
+declare noalias ptr @malloc(i64) allockind("alloc,uninitialized") allocsize(0) "alloc-family"="malloc"
+declare noalias ptr @calloc(i64, i64) allockind("alloc,zeroed") allocsize(0,1) "alloc-family"="malloc"
+declare void @free(ptr) allockind("free") "alloc-family"="malloc"
 
 define i64 @f(i64 %len) {
 ; CHECK-LABEL: define {{[^@]+}}@f
 ; CHECK-SAME: (i64 [[LEN:%.*]]) {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[MEM_H2S:%.*]] = alloca i8, i64 [[LEN]], align 1
-; CHECK-NEXT:    [[RES:%.*]] = call i64 @subfn(i8* [[MEM_H2S]]) #[[ATTR5:[0-9]+]]
+; CHECK-NEXT:    [[RES:%.*]] = call i64 @subfn(ptr [[MEM_H2S]]) #[[ATTR5:[0-9]+]]
 ; CHECK-NEXT:    ret i64 [[RES]]
 ;
 entry:
-  %mem = call i8* @malloc(i64 %len)
-  %res = call i64 @subfn(i8* %mem)
-  call void @free(i8* %mem)
+  %mem = call ptr @malloc(i64 %len)
+  %res = call i64 @subfn(ptr %mem)
+  call void @free(ptr %mem)
   ret i64 %res
 }
 
@@ -30,14 +30,14 @@ define i64 @g(i64 %len) {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TMP0:%.*]] = mul i64 [[LEN]], 8
 ; CHECK-NEXT:    [[MEM_H2S:%.*]] = alloca i8, i64 [[TMP0]], align 1
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i64(i8* [[MEM_H2S]], i8 0, i64 [[TMP0]], i1 false)
-; CHECK-NEXT:    [[RES:%.*]] = call i64 @subfn(i8* [[MEM_H2S]]) #[[ATTR5]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr [[MEM_H2S]], i8 0, i64 [[TMP0]], i1 false)
+; CHECK-NEXT:    [[RES:%.*]] = call i64 @subfn(ptr [[MEM_H2S]]) #[[ATTR5]]
 ; CHECK-NEXT:    ret i64 [[RES]]
 ;
 entry:
-  %mem = call i8* @calloc(i64 %len, i64 8)
-  %res = call i64 @subfn(i8* %mem)
-  call void @free(i8* %mem)
+  %mem = call ptr @calloc(i64 %len, i64 8)
+  %res = call i64 @subfn(ptr %mem)
+  call void @free(ptr %mem)
   ret i64 %res
 }
 

diff  --git a/llvm/test/Transforms/Attributor/memory_locations.ll b/llvm/test/Transforms/Attributor/memory_locations.ll
index ae1084f8abcb8..dd65eba234752 100644
--- a/llvm/test/Transforms/Attributor/memory_locations.ll
+++ b/llvm/test/Transforms/Attributor/memory_locations.ll
@@ -5,27 +5,27 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
 
 @G = external dso_local global i32, align 4
 
-declare noalias i8* @malloc(i64) inaccessiblememonly
+declare noalias ptr @malloc(i64) inaccessiblememonly
 
 ;.
 ; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = external dso_local global i32, align 4
 ;.
-define dso_local i8* @internal_only(i32 %arg) {
+define dso_local ptr @internal_only(i32 %arg) {
 ; CHECK: Function Attrs: memory(inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@internal_only
 ; CHECK-SAME: (i32 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[ARG]] to i64
-; CHECK-NEXT:    [[CALL:%.*]] = call noalias i8* @malloc(i64 [[CONV]])
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    [[CALL:%.*]] = call noalias ptr @malloc(i64 [[CONV]])
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
 entry:
   %conv = sext i32 %arg to i64
-  %call = call i8* @malloc(i64 %conv)
-  ret i8* %call
+  %call = call ptr @malloc(i64 %conv)
+  ret ptr %call
 }
 
-define dso_local i8* @internal_only_rec(i32 %arg) {
+define dso_local ptr @internal_only_rec(i32 %arg) {
 ; CHECK: Function Attrs: memory(inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@internal_only_rec
 ; CHECK-SAME: (i32 [[ARG:%.*]]) #[[ATTR0]] {
@@ -35,15 +35,15 @@ define dso_local i8* @internal_only_rec(i32 %arg) {
 ; CHECK-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
 ; CHECK-NEXT:    [[DIV:%.*]] = sdiv i32 [[ARG]], 2
-; CHECK-NEXT:    [[CALL:%.*]] = call noalias i8* @internal_only_rec(i32 [[DIV]])
+; CHECK-NEXT:    [[CALL:%.*]] = call noalias ptr @internal_only_rec(i32 [[DIV]])
 ; CHECK-NEXT:    br label [[RETURN:%.*]]
 ; CHECK:       if.end:
 ; CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[ARG]] to i64
-; CHECK-NEXT:    [[CALL1:%.*]] = call noalias i8* @malloc(i64 [[CONV]])
+; CHECK-NEXT:    [[CALL1:%.*]] = call noalias ptr @malloc(i64 [[CONV]])
 ; CHECK-NEXT:    br label [[RETURN]]
 ; CHECK:       return:
-; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi i8* [ [[CALL]], [[IF_THEN]] ], [ [[CALL1]], [[IF_END]] ]
-; CHECK-NEXT:    ret i8* [[RETVAL_0]]
+; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi ptr [ [[CALL]], [[IF_THEN]] ], [ [[CALL1]], [[IF_END]] ]
+; CHECK-NEXT:    ret ptr [[RETVAL_0]]
 ;
 entry:
   %rem = srem i32 %arg, 2
@@ -52,33 +52,33 @@ entry:
 
 if.then:                                          ; preds = %entry
   %div = sdiv i32 %arg, 2
-  %call = call i8* @internal_only_rec(i32 %div)
+  %call = call ptr @internal_only_rec(i32 %div)
   br label %return
 
 if.end:                                           ; preds = %entry
   %conv = sext i32 %arg to i64
-  %call1 = call i8* @malloc(i64 %conv)
+  %call1 = call ptr @malloc(i64 %conv)
   br label %return
 
 return:                                           ; preds = %if.end, %if.then
-  %retval.0 = phi i8* [ %call, %if.then ], [ %call1, %if.end ]
-  ret i8* %retval.0
+  %retval.0 = phi ptr [ %call, %if.then ], [ %call1, %if.end ]
+  ret ptr %retval.0
 }
 
-define dso_local i8* @internal_only_rec_static_helper(i32 %arg) {
+define dso_local ptr @internal_only_rec_static_helper(i32 %arg) {
 ; CHECK: Function Attrs: memory(inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@internal_only_rec_static_helper
 ; CHECK-SAME: (i32 [[ARG:%.*]]) #[[ATTR0]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CALL:%.*]] = call noalias i8* @internal_only_rec_static(i32 [[ARG]])
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    [[CALL:%.*]] = call noalias ptr @internal_only_rec_static(i32 [[ARG]])
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
 entry:
-  %call = call i8* @internal_only_rec_static(i32 %arg)
-  ret i8* %call
+  %call = call ptr @internal_only_rec_static(i32 %arg)
+  ret ptr %call
 }
 
-define internal i8* @internal_only_rec_static(i32 %arg) {
+define internal ptr @internal_only_rec_static(i32 %arg) {
 ; CHECK: Function Attrs: memory(inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@internal_only_rec_static
 ; CHECK-SAME: (i32 [[ARG:%.*]]) #[[ATTR0]] {
@@ -88,15 +88,15 @@ define internal i8* @internal_only_rec_static(i32 %arg) {
 ; CHECK-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
 ; CHECK-NEXT:    [[DIV:%.*]] = sdiv i32 [[ARG]], 2
-; CHECK-NEXT:    [[CALL:%.*]] = call noalias i8* @internal_only_rec(i32 [[DIV]])
+; CHECK-NEXT:    [[CALL:%.*]] = call noalias ptr @internal_only_rec(i32 [[DIV]])
 ; CHECK-NEXT:    br label [[RETURN:%.*]]
 ; CHECK:       if.end:
 ; CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[ARG]] to i64
-; CHECK-NEXT:    [[CALL1:%.*]] = call noalias i8* @malloc(i64 [[CONV]])
+; CHECK-NEXT:    [[CALL1:%.*]] = call noalias ptr @malloc(i64 [[CONV]])
 ; CHECK-NEXT:    br label [[RETURN]]
 ; CHECK:       return:
-; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi i8* [ [[CALL]], [[IF_THEN]] ], [ [[CALL1]], [[IF_END]] ]
-; CHECK-NEXT:    ret i8* [[RETVAL_0]]
+; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi ptr [ [[CALL]], [[IF_THEN]] ], [ [[CALL1]], [[IF_END]] ]
+; CHECK-NEXT:    ret ptr [[RETVAL_0]]
 ;
 entry:
   %rem = srem i32 %arg, 2
@@ -105,33 +105,33 @@ entry:
 
 if.then:                                          ; preds = %entry
   %div = sdiv i32 %arg, 2
-  %call = call i8* @internal_only_rec(i32 %div)
+  %call = call ptr @internal_only_rec(i32 %div)
   br label %return
 
 if.end:                                           ; preds = %entry
   %conv = sext i32 %arg to i64
-  %call1 = call i8* @malloc(i64 %conv)
+  %call1 = call ptr @malloc(i64 %conv)
   br label %return
 
 return:                                           ; preds = %if.end, %if.then
-  %retval.0 = phi i8* [ %call, %if.then ], [ %call1, %if.end ]
-  ret i8* %retval.0
+  %retval.0 = phi ptr [ %call, %if.then ], [ %call1, %if.end ]
+  ret ptr %retval.0
 }
 
-define dso_local i8* @internal_only_rec_static_helper_malloc_noescape(i32 %arg) {
+define dso_local ptr @internal_only_rec_static_helper_malloc_noescape(i32 %arg) {
 ; FIXME: This is actually inaccessiblememonly because the malloced memory does not escape
 ; CHECK-LABEL: define {{[^@]+}}@internal_only_rec_static_helper_malloc_noescape
 ; CHECK-SAME: (i32 [[ARG:%.*]]) {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CALL:%.*]] = call noalias i8* @internal_only_rec_static_malloc_noescape(i32 [[ARG]])
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    [[CALL:%.*]] = call noalias ptr @internal_only_rec_static_malloc_noescape(i32 [[ARG]])
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
 entry:
-  %call = call i8* @internal_only_rec_static_malloc_noescape(i32 %arg)
-  ret i8* %call
+  %call = call ptr @internal_only_rec_static_malloc_noescape(i32 %arg)
+  ret ptr %call
 }
 
-define internal i8* @internal_only_rec_static_malloc_noescape(i32 %arg) {
+define internal ptr @internal_only_rec_static_malloc_noescape(i32 %arg) {
 ; FIXME: This is actually inaccessiblememonly because the malloced memory does not escape
 ; CHECK-LABEL: define {{[^@]+}}@internal_only_rec_static_malloc_noescape
 ; CHECK-SAME: (i32 [[ARG:%.*]]) {
@@ -141,15 +141,15 @@ define internal i8* @internal_only_rec_static_malloc_noescape(i32 %arg) {
 ; CHECK-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
 ; CHECK-NEXT:    [[DIV:%.*]] = sdiv i32 [[ARG]], 2
-; CHECK-NEXT:    [[CALL:%.*]] = call noalias i8* @internal_only_rec(i32 [[DIV]])
+; CHECK-NEXT:    [[CALL:%.*]] = call noalias ptr @internal_only_rec(i32 [[DIV]])
 ; CHECK-NEXT:    br label [[RETURN:%.*]]
 ; CHECK:       if.end:
 ; CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[ARG]] to i64
-; CHECK-NEXT:    [[CALL1:%.*]] = call noalias i8* @malloc(i64 [[CONV]])
+; CHECK-NEXT:    [[CALL1:%.*]] = call noalias ptr @malloc(i64 [[CONV]])
 ; CHECK-NEXT:    br label [[RETURN]]
 ; CHECK:       return:
-; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi i8* [ [[CALL]], [[IF_THEN]] ], [ null, [[IF_END]] ]
-; CHECK-NEXT:    ret i8* [[RETVAL_0]]
+; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi ptr [ [[CALL]], [[IF_THEN]] ], [ null, [[IF_END]] ]
+; CHECK-NEXT:    ret ptr [[RETVAL_0]]
 ;
 entry:
   %rem = srem i32 %arg, 2
@@ -158,101 +158,101 @@ entry:
 
 if.then:                                          ; preds = %entry
   %div = sdiv i32 %arg, 2
-  %call = call i8* @internal_only_rec(i32 %div)
+  %call = call ptr @internal_only_rec(i32 %div)
   br label %return
 
 if.end:                                           ; preds = %entry
   %conv = sext i32 %arg to i64
-  %call1 = call i8* @malloc(i64 %conv)
-  store i8 0, i8* %call1
+  %call1 = call ptr @malloc(i64 %conv)
+  store i8 0, ptr %call1
   br label %return
 
 return:                                           ; preds = %if.end, %if.then
-  %retval.0 = phi i8* [ %call, %if.then ], [ null, %if.end ]
-  ret i8* %retval.0
+  %retval.0 = phi ptr [ %call, %if.then ], [ null, %if.end ]
+  ret ptr %retval.0
 }
 
-define dso_local i8* @internal_argmem_only_read(i32* %arg) {
+define dso_local ptr @internal_argmem_only_read(ptr %arg) {
 ; CHECK: Function Attrs: memory(argmem: readwrite, inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@internal_argmem_only_read
-; CHECK-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR1:[0-9]+]] {
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP:%.*]] = load i32, i32* [[ARG]], align 4
+; CHECK-NEXT:    [[TMP:%.*]] = load i32, ptr [[ARG]], align 4
 ; CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[TMP]] to i64
-; CHECK-NEXT:    [[CALL:%.*]] = call noalias i8* @malloc(i64 [[CONV]])
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    [[CALL:%.*]] = call noalias ptr @malloc(i64 [[CONV]])
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
 entry:
-  %tmp = load i32, i32* %arg, align 4
+  %tmp = load i32, ptr %arg, align 4
   %conv = sext i32 %tmp to i64
-  %call = call i8* @malloc(i64 %conv)
-  ret i8* %call
+  %call = call ptr @malloc(i64 %conv)
+  ret ptr %call
 }
 
-define dso_local i8* @internal_argmem_only_write(i32* %arg) {
+define dso_local ptr @internal_argmem_only_write(ptr %arg) {
 ; CHECK: Function Attrs: memory(argmem: readwrite, inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@internal_argmem_only_write
-; CHECK-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR1]] {
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR1]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store i32 10, i32* [[ARG]], align 4
-; CHECK-NEXT:    [[CALL:%.*]] = call noalias dereferenceable_or_null(10) i8* @malloc(i64 noundef 10)
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    store i32 10, ptr [[ARG]], align 4
+; CHECK-NEXT:    [[CALL:%.*]] = call noalias dereferenceable_or_null(10) ptr @malloc(i64 noundef 10)
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
 entry:
-  store i32 10, i32* %arg, align 4
-  %call = call dereferenceable_or_null(10) i8* @malloc(i64 10)
-  ret i8* %call
+  store i32 10, ptr %arg, align 4
+  %call = call dereferenceable_or_null(10) ptr @malloc(i64 10)
+  ret ptr %call
 }
 
-define dso_local i8* @internal_argmem_only_rec(i32* %arg) {
+define dso_local ptr @internal_argmem_only_rec(ptr %arg) {
 ; TUNIT: Function Attrs: memory(argmem: readwrite, inaccessiblemem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@internal_argmem_only_rec
-; TUNIT-SAME: (i32* nocapture nofree [[ARG:%.*]]) #[[ATTR1]] {
+; TUNIT-SAME: (ptr nocapture nofree [[ARG:%.*]]) #[[ATTR1]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[CALL:%.*]] = call noalias i8* @internal_argmem_only_rec_1(i32* nocapture nofree align 4 [[ARG]])
-; TUNIT-NEXT:    ret i8* [[CALL]]
+; TUNIT-NEXT:    [[CALL:%.*]] = call noalias ptr @internal_argmem_only_rec_1(ptr nocapture nofree align 4 [[ARG]])
+; TUNIT-NEXT:    ret ptr [[CALL]]
 ;
 ; CGSCC: Function Attrs: memory(argmem: readwrite, inaccessiblemem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@internal_argmem_only_rec
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR1]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR1]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[CALL:%.*]] = call noalias i8* @internal_argmem_only_rec_1(i32* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[ARG]])
-; CGSCC-NEXT:    ret i8* [[CALL]]
+; CGSCC-NEXT:    [[CALL:%.*]] = call noalias ptr @internal_argmem_only_rec_1(ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[ARG]])
+; CGSCC-NEXT:    ret ptr [[CALL]]
 ;
 entry:
-  %call = call i8* @internal_argmem_only_rec_1(i32* %arg)
-  ret i8* %call
+  %call = call ptr @internal_argmem_only_rec_1(ptr %arg)
+  ret ptr %call
 }
 
-define internal i8* @internal_argmem_only_rec_1(i32* %arg) {
+define internal ptr @internal_argmem_only_rec_1(ptr %arg) {
 ; CHECK: Function Attrs: memory(argmem: readwrite, inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@internal_argmem_only_rec_1
-; CHECK-SAME: (i32* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR1]] {
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR1]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP:%.*]] = load i32, i32* [[ARG]], align 4
+; CHECK-NEXT:    [[TMP:%.*]] = load i32, ptr [[ARG]], align 4
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP]], 0
 ; CHECK-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
 ; CHECK-NEXT:    br label [[RETURN:%.*]]
 ; CHECK:       if.end:
-; CHECK-NEXT:    [[TMP1:%.*]] = load i32, i32* [[ARG]], align 4
+; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[ARG]], align 4
 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[TMP1]], 1
 ; CHECK-NEXT:    br i1 [[CMP1]], label [[IF_THEN2:%.*]], label [[IF_END3:%.*]]
 ; CHECK:       if.then2:
-; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i32, i32* [[ARG]], i64 -1
-; CHECK-NEXT:    [[CALL:%.*]] = call noalias i8* @internal_argmem_only_rec_2(i32* nocapture nofree nonnull align 4 dereferenceable(4) [[ADD_PTR]])
+; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[ARG]], i64 -1
+; CHECK-NEXT:    [[CALL:%.*]] = call noalias ptr @internal_argmem_only_rec_2(ptr nocapture nofree nonnull align 4 dereferenceable(4) [[ADD_PTR]])
 ; CHECK-NEXT:    br label [[RETURN]]
 ; CHECK:       if.end3:
-; CHECK-NEXT:    [[TMP2:%.*]] = load i32, i32* [[ARG]], align 4
+; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ARG]], align 4
 ; CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[TMP2]] to i64
-; CHECK-NEXT:    [[CALL4:%.*]] = call noalias i8* @malloc(i64 [[CONV]])
+; CHECK-NEXT:    [[CALL4:%.*]] = call noalias ptr @malloc(i64 [[CONV]])
 ; CHECK-NEXT:    br label [[RETURN]]
 ; CHECK:       return:
-; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi i8* [ null, [[IF_THEN]] ], [ [[CALL]], [[IF_THEN2]] ], [ [[CALL4]], [[IF_END3]] ]
-; CHECK-NEXT:    ret i8* [[RETVAL_0]]
+; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi ptr [ null, [[IF_THEN]] ], [ [[CALL]], [[IF_THEN2]] ], [ [[CALL4]], [[IF_END3]] ]
+; CHECK-NEXT:    ret ptr [[RETVAL_0]]
 ;
 entry:
-  %tmp = load i32, i32* %arg, align 4
+  %tmp = load i32, ptr %arg, align 4
   %cmp = icmp eq i32 %tmp, 0
   br i1 %cmp, label %if.then, label %if.end
 
@@ -260,66 +260,66 @@ if.then:                                          ; preds = %entry
   br label %return
 
 if.end:                                           ; preds = %entry
-  %tmp1 = load i32, i32* %arg, align 4
+  %tmp1 = load i32, ptr %arg, align 4
   %cmp1 = icmp eq i32 %tmp1, 1
   br i1 %cmp1, label %if.then2, label %if.end3
 
 if.then2:                                         ; preds = %if.end
-  %add.ptr = getelementptr inbounds i32, i32* %arg, i64 -1
-  %call = call i8* @internal_argmem_only_rec_2(i32* nonnull %add.ptr)
+  %add.ptr = getelementptr inbounds i32, ptr %arg, i64 -1
+  %call = call ptr @internal_argmem_only_rec_2(ptr nonnull %add.ptr)
   br label %return
 
 if.end3:                                          ; preds = %if.end
-  %tmp2 = load i32, i32* %arg, align 4
+  %tmp2 = load i32, ptr %arg, align 4
   %conv = sext i32 %tmp2 to i64
-  %call4 = call i8* @malloc(i64 %conv)
+  %call4 = call ptr @malloc(i64 %conv)
   br label %return
 
 return:                                           ; preds = %if.end3, %if.then2, %if.then
-  %retval.0 = phi i8* [ null, %if.then ], [ %call, %if.then2 ], [ %call4, %if.end3 ]
-  ret i8* %retval.0
+  %retval.0 = phi ptr [ null, %if.then ], [ %call, %if.then2 ], [ %call4, %if.end3 ]
+  ret ptr %retval.0
 }
 
-define internal i8* @internal_argmem_only_rec_2(i32* %arg) {
+define internal ptr @internal_argmem_only_rec_2(ptr %arg) {
 ; CHECK: Function Attrs: memory(argmem: readwrite, inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@internal_argmem_only_rec_2
-; CHECK-SAME: (i32* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR1]] {
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR1]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store i32 0, i32* [[ARG]], align 4
-; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i32, i32* [[ARG]], i64 -1
-; CHECK-NEXT:    [[CALL:%.*]] = call noalias i8* @internal_argmem_only_rec_1(i32* nocapture nofree nonnull align 4 dereferenceable(4) [[ADD_PTR]])
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    store i32 0, ptr [[ARG]], align 4
+; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[ARG]], i64 -1
+; CHECK-NEXT:    [[CALL:%.*]] = call noalias ptr @internal_argmem_only_rec_1(ptr nocapture nofree nonnull align 4 dereferenceable(4) [[ADD_PTR]])
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
 entry:
-  store i32 0, i32* %arg, align 4
-  %add.ptr = getelementptr inbounds i32, i32* %arg, i64 -1
-  %call = call i8* @internal_argmem_only_rec_1(i32* nonnull %add.ptr)
-  ret i8* %call
+  store i32 0, ptr %arg, align 4
+  %add.ptr = getelementptr inbounds i32, ptr %arg, i64 -1
+  %call = call ptr @internal_argmem_only_rec_1(ptr nonnull %add.ptr)
+  ret ptr %call
 }
 
-declare i8* @unknown_ptr() readnone
-declare i8* @argmem_only(i8* %arg) argmemonly
-declare i8* @inaccesible_argmem_only_decl(i8* %arg) inaccessiblemem_or_argmemonly
-declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) nounwind argmemonly willreturn
+declare ptr @unknown_ptr() readnone
+declare ptr @argmem_only(ptr %arg) argmemonly
+declare ptr @inaccesible_argmem_only_decl(ptr %arg) inaccessiblemem_or_argmemonly
+declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) nounwind argmemonly willreturn
 
-define void @callerA1(i8* %arg) {
+define void @callerA1(ptr %arg) {
 ; CHECK: Function Attrs: memory(argmem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@callerA1
-; CHECK-SAME: (i8* [[ARG:%.*]]) #[[ATTR3:[0-9]+]] {
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @argmem_only(i8* [[ARG]])
+; CHECK-SAME: (ptr [[ARG:%.*]]) #[[ATTR3:[0-9]+]] {
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @argmem_only(ptr [[ARG]])
 ; CHECK-NEXT:    ret void
 ;
-  call i8* @argmem_only(i8* %arg)
+  call ptr @argmem_only(ptr %arg)
   ret void
 }
-define void @callerA2(i8* %arg) {
+define void @callerA2(ptr %arg) {
 ; CHECK: Function Attrs: memory(argmem: readwrite, inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@callerA2
-; CHECK-SAME: (i8* [[ARG:%.*]]) #[[ATTR1]] {
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @inaccesible_argmem_only_decl(i8* [[ARG]])
+; CHECK-SAME: (ptr [[ARG:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @inaccesible_argmem_only_decl(ptr [[ARG]])
 ; CHECK-NEXT:    ret void
 ;
-  call i8* @inaccesible_argmem_only_decl(i8* %arg)
+  call ptr @inaccesible_argmem_only_decl(ptr %arg)
   ret void
 }
 define void @callerB1() {
@@ -327,11 +327,11 @@ define void @callerB1() {
 ; CHECK-LABEL: define {{[^@]+}}@callerB1
 ; CHECK-SAME: () #[[ATTR2:[0-9]+]] {
 ; CHECK-NEXT:    [[STACK:%.*]] = alloca i8, align 1
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @argmem_only(i8* noundef nonnull dereferenceable(1) [[STACK]])
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @argmem_only(ptr noundef nonnull dereferenceable(1) [[STACK]])
 ; CHECK-NEXT:    ret void
 ;
   %stack = alloca i8
-  call i8* @argmem_only(i8* %stack)
+  call ptr @argmem_only(ptr %stack)
   ret void
 }
 define void @callerB2() {
@@ -339,61 +339,61 @@ define void @callerB2() {
 ; CHECK-LABEL: define {{[^@]+}}@callerB2
 ; CHECK-SAME: () #[[ATTR0]] {
 ; CHECK-NEXT:    [[STACK:%.*]] = alloca i8, align 1
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @inaccesible_argmem_only_decl(i8* noundef nonnull dereferenceable(1) [[STACK]])
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @inaccesible_argmem_only_decl(ptr noundef nonnull dereferenceable(1) [[STACK]])
 ; CHECK-NEXT:    ret void
 ;
   %stack = alloca i8
-  call i8* @inaccesible_argmem_only_decl(i8* %stack)
+  call ptr @inaccesible_argmem_only_decl(ptr %stack)
   ret void
 }
 define void @callerC1() {
 ; CHECK-LABEL: define {{[^@]+}}@callerC1() {
-; CHECK-NEXT:    [[UNKNOWN:%.*]] = call i8* @unknown_ptr()
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @argmem_only(i8* [[UNKNOWN]])
+; CHECK-NEXT:    [[UNKNOWN:%.*]] = call ptr @unknown_ptr()
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @argmem_only(ptr [[UNKNOWN]])
 ; CHECK-NEXT:    ret void
 ;
-  %unknown = call i8* @unknown_ptr()
-  call i8* @argmem_only(i8* %unknown)
+  %unknown = call ptr @unknown_ptr()
+  call ptr @argmem_only(ptr %unknown)
   ret void
 }
 define void @callerC2() {
 ; CHECK-LABEL: define {{[^@]+}}@callerC2() {
-; CHECK-NEXT:    [[UNKNOWN:%.*]] = call i8* @unknown_ptr()
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @inaccesible_argmem_only_decl(i8* [[UNKNOWN]])
+; CHECK-NEXT:    [[UNKNOWN:%.*]] = call ptr @unknown_ptr()
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @inaccesible_argmem_only_decl(ptr [[UNKNOWN]])
 ; CHECK-NEXT:    ret void
 ;
-  %unknown = call i8* @unknown_ptr()
-  call i8* @inaccesible_argmem_only_decl(i8* %unknown)
+  %unknown = call ptr @unknown_ptr()
+  call ptr @inaccesible_argmem_only_decl(ptr %unknown)
   ret void
 }
 define void @callerD1() {
 ; CHECK-LABEL: define {{[^@]+}}@callerD1() {
-; CHECK-NEXT:    [[UNKNOWN:%.*]] = call i8* @argmem_only(i8* noalias nocapture noundef align 4294967296 null)
-; CHECK-NEXT:    store i8 0, i8* [[UNKNOWN]], align 1
+; CHECK-NEXT:    [[UNKNOWN:%.*]] = call ptr @argmem_only(ptr noalias nocapture noundef align 4294967296 null)
+; CHECK-NEXT:    store i8 0, ptr [[UNKNOWN]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  %unknown = call i8* @argmem_only(i8* null)
-  store i8 0, i8* %unknown
+  %unknown = call ptr @argmem_only(ptr null)
+  store i8 0, ptr %unknown
   ret void
 }
 define void @callerD2() {
 ; CHECK-LABEL: define {{[^@]+}}@callerD2() {
-; CHECK-NEXT:    [[UNKNOWN:%.*]] = call i8* @inaccesible_argmem_only_decl(i8* noalias nocapture noundef align 4294967296 null)
-; CHECK-NEXT:    store i8 0, i8* [[UNKNOWN]], align 1
+; CHECK-NEXT:    [[UNKNOWN:%.*]] = call ptr @inaccesible_argmem_only_decl(ptr noalias nocapture noundef align 4294967296 null)
+; CHECK-NEXT:    store i8 0, ptr [[UNKNOWN]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  %unknown = call i8* @inaccesible_argmem_only_decl(i8* null)
-  store i8 0, i8* %unknown
+  %unknown = call ptr @inaccesible_argmem_only_decl(ptr null)
+  store i8 0, ptr %unknown
   ret void
 }
 
-define void @callerE(i8* %arg) {
+define void @callerE(ptr %arg) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@callerE
-; CHECK-SAME: (i8* nocapture nofree readnone [[ARG:%.*]]) #[[ATTR5:[0-9]+]] {
+; CHECK-SAME: (ptr nocapture nofree readnone [[ARG:%.*]]) #[[ATTR5:[0-9]+]] {
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.lifetime.start.p0i8(i64 4, i8* %arg)
+  call void @llvm.lifetime.start.p0(i64 4, ptr %arg)
   ret void
 }
 
@@ -402,30 +402,30 @@ define void @write_global() {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; CHECK-LABEL: define {{[^@]+}}@write_global
 ; CHECK-SAME: () #[[ATTR6:[0-9]+]] {
-; CHECK-NEXT:    store i32 0, i32* @G, align 4
+; CHECK-NEXT:    store i32 0, ptr @G, align 4
 ; CHECK-NEXT:    ret void
 ;
-  store i32 0, i32* @G, align 4
+  store i32 0, ptr @G, align 4
   ret void
 }
-define void @write_global_via_arg(i32* %GPtr) {
+define void @write_global_via_arg(ptr %GPtr) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CHECK-LABEL: define {{[^@]+}}@write_global_via_arg
-; CHECK-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[GPTR:%.*]]) #[[ATTR7:[0-9]+]] {
-; CHECK-NEXT:    store i32 0, i32* [[GPTR]], align 4
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[GPTR:%.*]]) #[[ATTR7:[0-9]+]] {
+; CHECK-NEXT:    store i32 0, ptr [[GPTR]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  store i32 0, i32* %GPtr, align 4
+  store i32 0, ptr %GPtr, align 4
   ret void
 }
-define internal void @write_global_via_arg_internal(i32* %GPtr) {
+define internal void @write_global_via_arg_internal(ptr %GPtr) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; CHECK-LABEL: define {{[^@]+}}@write_global_via_arg_internal
 ; CHECK-SAME: () #[[ATTR6]] {
-; CHECK-NEXT:    store i32 0, i32* @G, align 4
+; CHECK-NEXT:    store i32 0, ptr @G, align 4
 ; CHECK-NEXT:    ret void
 ;
-  store i32 0, i32* %GPtr, align 4
+  store i32 0, ptr %GPtr, align 4
   ret void
 }
 
@@ -449,16 +449,16 @@ define void @writeonly_global_via_arg() {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@writeonly_global_via_arg
 ; TUNIT-SAME: () #[[ATTR6]] {
-; TUNIT-NEXT:    call void @write_global_via_arg(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) @G) #[[ATTR10]]
+; TUNIT-NEXT:    call void @write_global_via_arg(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) @G) #[[ATTR10]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@writeonly_global_via_arg
 ; CGSCC-SAME: () #[[ATTR8]] {
-; CGSCC-NEXT:    call void @write_global_via_arg(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) @G) #[[ATTR11]]
+; CGSCC-NEXT:    call void @write_global_via_arg(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) @G) #[[ATTR11]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @write_global_via_arg(i32* @G)
+  call void @write_global_via_arg(ptr @G)
   ret void
 }
 
@@ -476,79 +476,79 @@ define void @writeonly_global_via_arg_internal() {
 ; CGSCC-NEXT:    call void @write_global_via_arg_internal() #[[ATTR11]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @write_global_via_arg_internal(i32* @G)
+  call void @write_global_via_arg_internal(ptr @G)
   ret void
 }
 
-define i8 @recursive_not_readnone(i8* %ptr, i1 %c) {
+define i8 @recursive_not_readnone(ptr %ptr, i1 %c) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@recursive_not_readnone
-; TUNIT-SAME: (i8* nocapture nofree writeonly [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR8:[0-9]+]] {
+; TUNIT-SAME: (ptr nocapture nofree writeonly [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR8:[0-9]+]] {
 ; TUNIT-NEXT:    [[ALLOC:%.*]] = alloca i8, align 1
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR11:[0-9]+]]
+; TUNIT-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR11:[0-9]+]]
 ; TUNIT-NEXT:    ret i8 1
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i8 1, i8* [[PTR]], align 1
+; TUNIT-NEXT:    store i8 1, ptr [[PTR]], align 1
 ; TUNIT-NEXT:    ret i8 0
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@recursive_not_readnone
-; CGSCC-SAME: (i8* nocapture nofree writeonly [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR9:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture nofree writeonly [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR9:[0-9]+]] {
 ; CGSCC-NEXT:    [[ALLOC:%.*]] = alloca i8, align 1
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR12:[0-9]+]]
+; CGSCC-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR12:[0-9]+]]
 ; CGSCC-NEXT:    ret i8 1
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i8 1, i8* [[PTR]], align 1
+; CGSCC-NEXT:    store i8 1, ptr [[PTR]], align 1
 ; CGSCC-NEXT:    ret i8 0
 ;
   %alloc = alloca i8
   br i1 %c, label %t, label %f
 t:
-  call i8 @recursive_not_readnone(i8* %alloc, i1 false)
-  %r = load i8, i8* %alloc
+  call i8 @recursive_not_readnone(ptr %alloc, i1 false)
+  %r = load i8, ptr %alloc
   ret i8 %r
 f:
-  store i8 1, i8* %ptr
+  store i8 1, ptr %ptr
   ret i8 0
 }
 
-define internal i8 @recursive_not_readnone_internal(i8* %ptr, i1 %c) {
+define internal i8 @recursive_not_readnone_internal(ptr %ptr, i1 %c) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@recursive_not_readnone_internal
-; TUNIT-SAME: (i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR8]] {
+; TUNIT-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR8]] {
 ; TUNIT-NEXT:    [[ALLOC:%.*]] = alloca i8, align 1
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone_internal(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR11]]
+; TUNIT-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone_internal(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR11]]
 ; TUNIT-NEXT:    ret i8 1
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i8 1, i8* [[PTR]], align 1
+; TUNIT-NEXT:    store i8 1, ptr [[PTR]], align 1
 ; TUNIT-NEXT:    ret i8 0
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@recursive_not_readnone_internal
-; CGSCC-SAME: (i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR9]] {
+; CGSCC-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR9]] {
 ; CGSCC-NEXT:    [[ALLOC:%.*]] = alloca i8, align 1
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone_internal(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR12]]
+; CGSCC-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone_internal(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR12]]
 ; CGSCC-NEXT:    ret i8 1
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i8 1, i8* [[PTR]], align 1
+; CGSCC-NEXT:    store i8 1, ptr [[PTR]], align 1
 ; CGSCC-NEXT:    ret i8 0
 ;
   %alloc = alloca i8
   br i1 %c, label %t, label %f
 t:
-  call i8 @recursive_not_readnone_internal(i8* %alloc, i1 false)
-  %r = load i8, i8* %alloc
+  call i8 @recursive_not_readnone_internal(ptr %alloc, i1 false)
+  %r = load i8, ptr %alloc
   ret i8 %r
 f:
-  store i8 1, i8* %ptr
+  store i8 1, ptr %ptr
   ret i8 0
 }
 
@@ -557,54 +557,54 @@ define i8 @readnone_caller(i1 %c) {
 ; TUNIT-LABEL: define {{[^@]+}}@readnone_caller
 ; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR9:[0-9]+]] {
 ; TUNIT-NEXT:    [[A:%.*]] = alloca i8, align 1
-; TUNIT-NEXT:    [[R:%.*]] = call i8 @recursive_not_readnone_internal(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[A]], i1 [[C]]) #[[ATTR11]]
+; TUNIT-NEXT:    [[R:%.*]] = call i8 @recursive_not_readnone_internal(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[A]], i1 [[C]]) #[[ATTR11]]
 ; TUNIT-NEXT:    ret i8 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@readnone_caller
 ; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR10:[0-9]+]] {
 ; CGSCC-NEXT:    [[A:%.*]] = alloca i8, align 1
-; CGSCC-NEXT:    [[R:%.*]] = call i8 @recursive_not_readnone_internal(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[A]], i1 [[C]]) #[[ATTR13:[0-9]+]]
+; CGSCC-NEXT:    [[R:%.*]] = call i8 @recursive_not_readnone_internal(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[A]], i1 [[C]]) #[[ATTR13:[0-9]+]]
 ; CGSCC-NEXT:    ret i8 [[R]]
 ;
   %a = alloca i8
-  %r = call i8 @recursive_not_readnone_internal(i8* %a, i1 %c)
+  %r = call i8 @recursive_not_readnone_internal(ptr %a, i1 %c)
   ret i8 %r
 }
 
-define internal i8 @recursive_readnone_internal2(i8* %ptr, i1 %c) {
+define internal i8 @recursive_readnone_internal2(ptr %ptr, i1 %c) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@recursive_readnone_internal2
-; TUNIT-SAME: (i8* nocapture nofree nonnull writeonly [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR8]] {
+; TUNIT-SAME: (ptr nocapture nofree nonnull writeonly [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR8]] {
 ; TUNIT-NEXT:    [[ALLOC:%.*]] = alloca i8, align 1
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    [[TMP1:%.*]] = call i8 @recursive_readnone_internal2(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR11]]
+; TUNIT-NEXT:    [[TMP1:%.*]] = call i8 @recursive_readnone_internal2(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR11]]
 ; TUNIT-NEXT:    ret i8 1
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i8 1, i8* [[PTR]], align 1
+; TUNIT-NEXT:    store i8 1, ptr [[PTR]], align 1
 ; TUNIT-NEXT:    ret i8 0
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@recursive_readnone_internal2
-; CGSCC-SAME: (i8* nocapture nofree nonnull writeonly [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR9]] {
+; CGSCC-SAME: (ptr nocapture nofree nonnull writeonly [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR9]] {
 ; CGSCC-NEXT:    [[ALLOC:%.*]] = alloca i8, align 1
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    [[TMP1:%.*]] = call i8 @recursive_readnone_internal2(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR12]]
+; CGSCC-NEXT:    [[TMP1:%.*]] = call i8 @recursive_readnone_internal2(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR12]]
 ; CGSCC-NEXT:    ret i8 1
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i8 1, i8* [[PTR]], align 1
+; CGSCC-NEXT:    store i8 1, ptr [[PTR]], align 1
 ; CGSCC-NEXT:    ret i8 0
 ;
   %alloc = alloca i8
   br i1 %c, label %t, label %f
 t:
-  call i8 @recursive_readnone_internal2(i8* %alloc, i1 false)
-  %r = load i8, i8* %alloc
+  call i8 @recursive_readnone_internal2(ptr %alloc, i1 false)
+  %r = load i8, ptr %alloc
   ret i8 %r
 f:
-  store i8 1, i8* %ptr
+  store i8 1, ptr %ptr
   ret i8 0
 }
 
@@ -612,52 +612,52 @@ define i8 @readnone_caller2(i1 %c) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@readnone_caller2
 ; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR9]] {
-; TUNIT-NEXT:    [[R:%.*]] = call i8 @recursive_readnone_internal2(i8* undef, i1 [[C]]) #[[ATTR11]]
+; TUNIT-NEXT:    [[R:%.*]] = call i8 @recursive_readnone_internal2(ptr undef, i1 [[C]]) #[[ATTR11]]
 ; TUNIT-NEXT:    ret i8 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@readnone_caller2
 ; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR10]] {
-; CGSCC-NEXT:    [[R:%.*]] = call i8 @recursive_readnone_internal2(i8* undef, i1 [[C]]) #[[ATTR13]]
+; CGSCC-NEXT:    [[R:%.*]] = call i8 @recursive_readnone_internal2(ptr undef, i1 [[C]]) #[[ATTR13]]
 ; CGSCC-NEXT:    ret i8 [[R]]
 ;
-  %r = call i8 @recursive_readnone_internal2(i8* undef, i1 %c)
+  %r = call i8 @recursive_readnone_internal2(ptr undef, i1 %c)
   ret i8 %r
 }
 
-define internal i8 @recursive_not_readnone_internal3(i8* %ptr, i1 %c) {
+define internal i8 @recursive_not_readnone_internal3(ptr %ptr, i1 %c) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@recursive_not_readnone_internal3
-; TUNIT-SAME: (i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR8]] {
+; TUNIT-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR8]] {
 ; TUNIT-NEXT:    [[ALLOC:%.*]] = alloca i8, align 1
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone_internal3(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR11]]
+; TUNIT-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone_internal3(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR11]]
 ; TUNIT-NEXT:    ret i8 1
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i8 1, i8* [[PTR]], align 1
+; TUNIT-NEXT:    store i8 1, ptr [[PTR]], align 1
 ; TUNIT-NEXT:    ret i8 0
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@recursive_not_readnone_internal3
-; CGSCC-SAME: (i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR9]] {
+; CGSCC-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[PTR:%.*]], i1 [[C:%.*]]) #[[ATTR9]] {
 ; CGSCC-NEXT:    [[ALLOC:%.*]] = alloca i8, align 1
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone_internal3(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR12]]
+; CGSCC-NEXT:    [[TMP1:%.*]] = call i8 @recursive_not_readnone_internal3(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 noundef false) #[[ATTR12]]
 ; CGSCC-NEXT:    ret i8 1
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i8 1, i8* [[PTR]], align 1
+; CGSCC-NEXT:    store i8 1, ptr [[PTR]], align 1
 ; CGSCC-NEXT:    ret i8 0
 ;
   %alloc = alloca i8
   br i1 %c, label %t, label %f
 t:
-  call i8 @recursive_not_readnone_internal3(i8* %alloc, i1 false)
-  %r = load i8, i8* %alloc
+  call i8 @recursive_not_readnone_internal3(ptr %alloc, i1 false)
+  %r = load i8, ptr %alloc
   ret i8 %r
 f:
-  store i8 1, i8* %ptr
+  store i8 1, ptr %ptr
   ret i8 0
 }
 
@@ -666,29 +666,29 @@ define i8 @readnone_caller3(i1 %c) {
 ; TUNIT-LABEL: define {{[^@]+}}@readnone_caller3
 ; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR9]] {
 ; TUNIT-NEXT:    [[ALLOC:%.*]] = alloca i8, align 1
-; TUNIT-NEXT:    [[R:%.*]] = call i8 @recursive_not_readnone_internal3(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 [[C]]) #[[ATTR11]]
+; TUNIT-NEXT:    [[R:%.*]] = call i8 @recursive_not_readnone_internal3(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 [[C]]) #[[ATTR11]]
 ; TUNIT-NEXT:    ret i8 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@readnone_caller3
 ; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR10]] {
 ; CGSCC-NEXT:    [[ALLOC:%.*]] = alloca i8, align 1
-; CGSCC-NEXT:    [[R:%.*]] = call i8 @recursive_not_readnone_internal3(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 [[C]]) #[[ATTR13]]
+; CGSCC-NEXT:    [[R:%.*]] = call i8 @recursive_not_readnone_internal3(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[ALLOC]], i1 [[C]]) #[[ATTR13]]
 ; CGSCC-NEXT:    ret i8 [[R]]
 ;
   %alloc = alloca i8
-  %r = call i8 @recursive_not_readnone_internal3(i8* %alloc, i1 %c)
+  %r = call i8 @recursive_not_readnone_internal3(ptr %alloc, i1 %c)
   ret i8 %r
 }
 
-define internal void @argmemonly_before_ipconstprop(i32* %p) argmemonly {
+define internal void @argmemonly_before_ipconstprop(ptr %p) argmemonly {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; CHECK-LABEL: define {{[^@]+}}@argmemonly_before_ipconstprop
 ; CHECK-SAME: () #[[ATTR6]] {
-; CHECK-NEXT:    store i32 0, i32* @G, align 4
+; CHECK-NEXT:    store i32 0, ptr @G, align 4
 ; CHECK-NEXT:    ret void
 ;
-  store i32 0, i32* %p
+  store i32 0, ptr %p
   ret void
 }
 
@@ -705,7 +705,7 @@ define void @argmemonky_caller() {
 ; CGSCC-NEXT:    call void @argmemonly_before_ipconstprop() #[[ATTR11]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @argmemonly_before_ipconstprop(i32* @G)
+  call void @argmemonly_before_ipconstprop(ptr @G)
   ret void
 }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/multiple-offsets-pointer-info.ll b/llvm/test/Transforms/Attributor/multiple-offsets-pointer-info.ll
index 02664665cf6fb..e5eee9ba9e492 100644
--- a/llvm/test/Transforms/Attributor/multiple-offsets-pointer-info.ll
+++ b/llvm/test/Transforms/Attributor/multiple-offsets-pointer-info.ll
@@ -10,37 +10,37 @@ define i8 @select_offsets_simplifiable_1(i1 %cnd1, i1 %cnd2) {
 ; CHECK-SAME: (i1 [[CND1:%.*]], i1 [[CND2:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
-; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 23
-; CHECK-NEXT:    store i8 23, i8* [[GEP23]], align 4
-; CHECK-NEXT:    [[GEP29:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 29
-; CHECK-NEXT:    store i8 29, i8* [[GEP29]], align 4
-; CHECK-NEXT:    [[GEP7:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 7
-; CHECK-NEXT:    store i8 7, i8* [[GEP7]], align 4
-; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 31
+; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 23
+; CHECK-NEXT:    store i8 23, ptr [[GEP23]], align 4
+; CHECK-NEXT:    [[GEP29:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 29
+; CHECK-NEXT:    store i8 29, ptr [[GEP29]], align 4
+; CHECK-NEXT:    [[GEP7:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 7
+; CHECK-NEXT:    store i8 7, ptr [[GEP7]], align 4
+; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 31
 ; CHECK-NEXT:    [[SEL0:%.*]] = select i1 [[CND1]], i64 23, i64 29
 ; CHECK-NEXT:    [[SEL1:%.*]] = select i1 [[CND2]], i64 [[SEL0]], i64 7
-; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 [[SEL1]]
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* [[GEP_SEL]], align 4
+; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 [[SEL1]]
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[GEP_SEL]], align 4
 ; CHECK-NEXT:    ret i8 [[I]]
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
 
-  %gep23 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 23
-  store i8 23, i8* %gep23, align 4
-  %gep29 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 29
-  store i8 29, i8* %gep29, align 4
-  %gep7 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 7
-  store i8 7, i8* %gep7, align 4
+  %gep23 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 23
+  store i8 23, ptr %gep23, align 4
+  %gep29 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 29
+  store i8 29, ptr %gep29, align 4
+  %gep7 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 7
+  store i8 7, ptr %gep7, align 4
 
   ;; This store is redundant, hence removed.
-  %gep31 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 31
-  store i8 42, i8* %gep31, align 4
+  %gep31 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 31
+  store i8 42, ptr %gep31, align 4
 
   %sel0 = select i1 %cnd1, i64 23, i64 29
   %sel1 = select i1 %cnd2, i64 %sel0, i64 7
-  %gep.sel = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 %sel1
-  %i = load i8, i8* %gep.sel, align 4
+  %gep.sel = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 %sel1
+  %i = load i8, ptr %gep.sel, align 4
   ret i8 %i
 }
 
@@ -50,40 +50,40 @@ define i8 @select_offsets_simplifiable_2(i1 %cnd1, i1 %cnd2) {
 ; CHECK-SAME: (i1 [[CND1:%.*]], i1 [[CND2:%.*]]) #[[ATTR0]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
-; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 23
-; CHECK-NEXT:    store i8 23, i8* [[GEP23]], align 4
-; CHECK-NEXT:    [[GEP29:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 29
-; CHECK-NEXT:    store i8 29, i8* [[GEP29]], align 4
-; CHECK-NEXT:    [[GEP7:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 7
-; CHECK-NEXT:    store i8 7, i8* [[GEP7]], align 4
-; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 31
+; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 23
+; CHECK-NEXT:    store i8 23, ptr [[GEP23]], align 4
+; CHECK-NEXT:    [[GEP29:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 29
+; CHECK-NEXT:    store i8 29, ptr [[GEP29]], align 4
+; CHECK-NEXT:    [[GEP7:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 7
+; CHECK-NEXT:    store i8 7, ptr [[GEP7]], align 4
+; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 31
 ; CHECK-NEXT:    [[SEL0:%.*]] = select i1 [[CND1]], i64 20, i64 26
 ; CHECK-NEXT:    [[SEL1:%.*]] = select i1 [[CND2]], i64 [[SEL0]], i64 4
-; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 [[SEL1]]
-; CHECK-NEXT:    [[GEP_PLUS:%.*]] = getelementptr inbounds i8, i8* [[GEP_SEL]], i64 3
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* [[GEP_PLUS]], align 4
+; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 [[SEL1]]
+; CHECK-NEXT:    [[GEP_PLUS:%.*]] = getelementptr inbounds i8, ptr [[GEP_SEL]], i64 3
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[GEP_PLUS]], align 4
 ; CHECK-NEXT:    ret i8 [[I]]
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
 
-  %gep23 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 23
-  store i8 23, i8* %gep23, align 4
-  %gep29 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 29
-  store i8 29, i8* %gep29, align 4
-  %gep7 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 7
-  store i8 7, i8* %gep7, align 4
+  %gep23 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 23
+  store i8 23, ptr %gep23, align 4
+  %gep29 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 29
+  store i8 29, ptr %gep29, align 4
+  %gep7 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 7
+  store i8 7, ptr %gep7, align 4
 
   ;; This store is redundant, hence removed.
-  %gep31 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 31
-  store i8 42, i8* %gep31, align 4
+  %gep31 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 31
+  store i8 42, ptr %gep31, align 4
 
   ;; Adjust the offsets so that they match the stores after adding 3
   %sel0 = select i1 %cnd1, i64 20, i64 26
   %sel1 = select i1 %cnd2, i64 %sel0, i64 4
-  %gep.sel = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 %sel1
-  %gep.plus = getelementptr inbounds i8, i8* %gep.sel, i64 3
-  %i = load i8, i8* %gep.plus, align 4
+  %gep.sel = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 %sel1
+  %gep.plus = getelementptr inbounds i8, ptr %gep.sel, i64 3
+  %i = load i8, ptr %gep.plus, align 4
   ret i8 %i
 }
 
@@ -95,18 +95,18 @@ define i8 @select_offsets_simplifiable_3(i1 %cnd1, i1 %cnd2) {
 ; CHECK-NEXT:    [[BUNDLE:%.*]] = alloca [[STRUCT_T:%.*]], align 64
 ; CHECK-NEXT:    [[SEL1:%.*]] = select i1 [[CND1]], i64 1, i64 3
 ; CHECK-NEXT:    [[SEL2:%.*]] = select i1 [[CND2]], i64 5, i64 11
-; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [[STRUCT_T]], %struct.T* [[BUNDLE]], i64 0, i32 1, i64 [[SEL1]], i64 [[SEL2]]
+; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [[STRUCT_T]], ptr [[BUNDLE]], i64 0, i32 1, i64 [[SEL1]], i64 [[SEL2]]
 ; CHECK-NEXT:    ret i8 100
 ;
 entry:
   %bundle = alloca %struct.T, align 64
-  %gep.fixed = getelementptr inbounds %struct.T, %struct.T* %bundle, i64 0, i32 1, i64 1, i64 1
-  store i8 100, i8* %gep.fixed, align 4
+  %gep.fixed = getelementptr inbounds %struct.T, ptr %bundle, i64 0, i32 1, i64 1, i64 1
+  store i8 100, ptr %gep.fixed, align 4
   %sel1 = select i1 %cnd1, i64 1, i64 3
   %sel2 = select i1 %cnd2, i64 5, i64 11
-  %gep.sel = getelementptr inbounds %struct.T, %struct.T* %bundle, i64 0, i32 1, i64 %sel1, i64 %sel2
-  store i8 42, i8* %gep.sel, align 4
-  %i = load i8, i8* %gep.fixed, align 4
+  %gep.sel = getelementptr inbounds %struct.T, ptr %bundle, i64 0, i32 1, i64 %sel1, i64 %sel2
+  store i8 42, ptr %gep.sel, align 4
+  %i = load i8, ptr %gep.fixed, align 4
   ret i8 %i
 }
 
@@ -118,20 +118,20 @@ define i8 @select_offsets_not_simplifiable_1(i1 %cnd1, i1 %cnd2) {
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
 ; CHECK-NEXT:    [[SEL0:%.*]] = select i1 [[CND1]], i64 23, i64 29
 ; CHECK-NEXT:    [[SEL1:%.*]] = select i1 [[CND2]], i64 [[SEL0]], i64 7
-; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 23
-; CHECK-NEXT:    store i8 100, i8* [[GEP23]], align 4
-; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 [[SEL1]]
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* [[GEP_SEL]], align 4
+; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 23
+; CHECK-NEXT:    store i8 100, ptr [[GEP23]], align 4
+; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 [[SEL1]]
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[GEP_SEL]], align 4
 ; CHECK-NEXT:    ret i8 [[I]]
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
   %sel0 = select i1 %cnd1, i64 23, i64 29
   %sel1 = select i1 %cnd2, i64 %sel0, i64 7
-  %gep23 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 23
-  store i8 100, i8* %gep23, align 4
-  %gep.sel = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 %sel1
-  %i = load i8, i8* %gep.sel, align 4
+  %gep23 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 23
+  store i8 100, ptr %gep23, align 4
+  %gep.sel = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 %sel1
+  %i = load i8, ptr %gep.sel, align 4
   ret i8 %i
 }
 
@@ -143,22 +143,22 @@ define i8 @select_offsets_not_simplifiable_2(i1 %cnd1, i1 %cnd2) {
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
 ; CHECK-NEXT:    [[SEL0:%.*]] = select i1 [[CND1]], i64 23, i64 29
 ; CHECK-NEXT:    [[SEL1:%.*]] = select i1 [[CND2]], i64 [[SEL0]], i64 7
-; CHECK-NEXT:    [[GEP32:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 32
-; CHECK-NEXT:    store i8 100, i8* [[GEP32]], align 16
-; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 [[SEL1]]
-; CHECK-NEXT:    [[GEP_PLUS:%.*]] = getelementptr inbounds i8, i8* [[GEP_SEL]], i64 3
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* [[GEP_PLUS]], align 4
+; CHECK-NEXT:    [[GEP32:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 32
+; CHECK-NEXT:    store i8 100, ptr [[GEP32]], align 16
+; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 [[SEL1]]
+; CHECK-NEXT:    [[GEP_PLUS:%.*]] = getelementptr inbounds i8, ptr [[GEP_SEL]], i64 3
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[GEP_PLUS]], align 4
 ; CHECK-NEXT:    ret i8 [[I]]
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
   %sel0 = select i1 %cnd1, i64 23, i64 29
   %sel1 = select i1 %cnd2, i64 %sel0, i64 7
-  %gep32 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 32
-  store i8 100, i8* %gep32, align 4
-  %gep.sel = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 %sel1
-  %gep.plus = getelementptr inbounds i8, i8* %gep.sel, i64 3
-  %i = load i8, i8* %gep.plus, align 4
+  %gep32 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 32
+  store i8 100, ptr %gep32, align 4
+  %gep.sel = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 %sel1
+  %gep.plus = getelementptr inbounds i8, ptr %gep.sel, i64 3
+  %i = load i8, ptr %gep.plus, align 4
   ret i8 %i
 }
 
@@ -170,20 +170,20 @@ define i8 @select_offsets_not_simplifiable_3(i1 %cnd1, i1 %cnd2) {
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
 ; CHECK-NEXT:    [[SEL0:%.*]] = select i1 [[CND1]], i64 23, i64 29
 ; CHECK-NEXT:    [[SEL1:%.*]] = select i1 [[CND2]], i64 [[SEL0]], i64 7
-; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 [[SEL1]]
-; CHECK-NEXT:    store i8 100, i8* [[GEP_SEL]], align 4
-; CHECK-NEXT:    [[GEP29:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 29
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* [[GEP29]], align 4
+; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 [[SEL1]]
+; CHECK-NEXT:    store i8 100, ptr [[GEP_SEL]], align 4
+; CHECK-NEXT:    [[GEP29:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 29
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[GEP29]], align 4
 ; CHECK-NEXT:    ret i8 [[I]]
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
   %sel0 = select i1 %cnd1, i64 23, i64 29
   %sel1 = select i1 %cnd2, i64 %sel0, i64 7
-  %gep.sel = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 %sel1
-  store i8 100, i8* %gep.sel, align 4
-  %gep29 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 29
-  %i = load i8, i8* %gep29, align 4
+  %gep.sel = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 %sel1
+  store i8 100, ptr %gep.sel, align 4
+  %gep29 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 29
+  %i = load i8, ptr %gep29, align 4
   ret i8 %i
 }
 
@@ -195,22 +195,22 @@ define i8 @select_offsets_not_simplifiable_4(i1 %cnd1, i1 %cnd2) {
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
 ; CHECK-NEXT:    [[SEL0:%.*]] = select i1 [[CND1]], i64 23, i64 29
 ; CHECK-NEXT:    [[SEL1:%.*]] = select i1 [[CND2]], i64 [[SEL0]], i64 7
-; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 [[SEL1]]
-; CHECK-NEXT:    [[GEP_PLUS:%.*]] = getelementptr inbounds i8, i8* [[GEP_SEL]], i64 3
-; CHECK-NEXT:    store i8 100, i8* [[GEP_PLUS]], align 4
-; CHECK-NEXT:    [[GEP32:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 32
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* [[GEP32]], align 16
+; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 [[SEL1]]
+; CHECK-NEXT:    [[GEP_PLUS:%.*]] = getelementptr inbounds i8, ptr [[GEP_SEL]], i64 3
+; CHECK-NEXT:    store i8 100, ptr [[GEP_PLUS]], align 4
+; CHECK-NEXT:    [[GEP32:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 32
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[GEP32]], align 16
 ; CHECK-NEXT:    ret i8 [[I]]
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
   %sel0 = select i1 %cnd1, i64 23, i64 29
   %sel1 = select i1 %cnd2, i64 %sel0, i64 7
-  %gep.sel = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 %sel1
-  %gep.plus = getelementptr inbounds i8, i8* %gep.sel, i64 3
-  store i8 100, i8* %gep.plus, align 4
-  %gep32 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 32
-  %i = load i8, i8* %gep32, align 4
+  %gep.sel = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 %sel1
+  %gep.plus = getelementptr inbounds i8, ptr %gep.sel, i64 3
+  store i8 100, ptr %gep.plus, align 4
+  %gep32 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 32
+  %i = load i8, ptr %gep32, align 4
   ret i8 %i
 }
 
@@ -220,27 +220,27 @@ define i8 @select_offsets_not_simplifiable_5(i1 %cnd1, i1 %cnd2) {
 ; CHECK-SAME: (i1 [[CND1:%.*]], i1 [[CND2:%.*]]) #[[ATTR0]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[BUNDLE:%.*]] = alloca [[STRUCT_T:%.*]], align 64
-; CHECK-NEXT:    [[GEP_FIXED:%.*]] = getelementptr inbounds [[STRUCT_T]], %struct.T* [[BUNDLE]], i64 0, i32 1, i64 3, i64 5
-; CHECK-NEXT:    store i8 100, i8* [[GEP_FIXED]], align 4
+; CHECK-NEXT:    [[GEP_FIXED:%.*]] = getelementptr inbounds [[STRUCT_T]], ptr [[BUNDLE]], i64 0, i32 1, i64 3, i64 5
+; CHECK-NEXT:    store i8 100, ptr [[GEP_FIXED]], align 4
 ; CHECK-NEXT:    [[SEL1:%.*]] = select i1 [[CND1]], i64 1, i64 3
 ; CHECK-NEXT:    [[SEL2:%.*]] = select i1 [[CND2]], i64 5, i64 11
-; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [[STRUCT_T]], %struct.T* [[BUNDLE]], i64 0, i32 1, i64 [[SEL1]], i64 [[SEL2]]
-; CHECK-NEXT:    store i8 42, i8* [[GEP_SEL]], align 4
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* [[GEP_FIXED]], align 4
+; CHECK-NEXT:    [[GEP_SEL:%.*]] = getelementptr inbounds [[STRUCT_T]], ptr [[BUNDLE]], i64 0, i32 1, i64 [[SEL1]], i64 [[SEL2]]
+; CHECK-NEXT:    store i8 42, ptr [[GEP_SEL]], align 4
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[GEP_FIXED]], align 4
 ; CHECK-NEXT:    ret i8 [[I]]
 ;
 entry:
   %bundle = alloca %struct.T, align 64
-  %gep.fixed = getelementptr inbounds %struct.T, %struct.T* %bundle, i64 0, i32 1, i64 3, i64 5
-  store i8 100, i8* %gep.fixed, align 4
+  %gep.fixed = getelementptr inbounds %struct.T, ptr %bundle, i64 0, i32 1, i64 3, i64 5
+  store i8 100, ptr %gep.fixed, align 4
   %sel1 = select i1 %cnd1, i64 1, i64 3
   %sel2 = select i1 %cnd2, i64 5, i64 11
-  %gep.sel = getelementptr inbounds %struct.T, %struct.T* %bundle, i64 0, i32 1, i64 %sel1, i64 %sel2
+  %gep.sel = getelementptr inbounds %struct.T, ptr %bundle, i64 0, i32 1, i64 %sel1, i64 %sel2
 
   ;; This store prevents the constant 100 from being propagated to ret
-  store i8 42, i8* %gep.sel, align 4
+  store i8 42, ptr %gep.sel, align 4
 
-  %i = load i8, i8* %gep.fixed, align 4
+  %i = load i8, ptr %gep.fixed, align 4
   ret i8 %i
 }
 
@@ -250,21 +250,21 @@ define i8 @select_gep_simplifiable_1(i1 %cnd1, i1 %cnd2) {
 ; CHECK-SAME: (i1 [[CND1:%.*]], i1 [[CND2:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
-; CHECK-NEXT:    [[GEP7:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 7
-; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 23
-; CHECK-NEXT:    [[SEL_PTR:%.*]] = select i1 [[CND1]], i8* [[GEP7]], i8* [[GEP23]]
-; CHECK-NEXT:    store i8 42, i8* [[SEL_PTR]], align 4
+; CHECK-NEXT:    [[GEP7:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 7
+; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 23
+; CHECK-NEXT:    [[SEL_PTR:%.*]] = select i1 [[CND1]], ptr [[GEP7]], ptr [[GEP23]]
+; CHECK-NEXT:    store i8 42, ptr [[SEL_PTR]], align 4
 ; CHECK-NEXT:    ret i8 21
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
-  %gep3 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 3
-  store i8 21, i8* %gep3, align 4
-  %gep7 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 7
-  %gep23 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 23
-  %sel.ptr = select i1 %cnd1, i8* %gep7, i8* %gep23
-  store i8 42, i8* %sel.ptr, align 4
-  %i = load i8, i8* %gep3, align 4
+  %gep3 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 3
+  store i8 21, ptr %gep3, align 4
+  %gep7 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 7
+  %gep23 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 23
+  %sel.ptr = select i1 %cnd1, ptr %gep7, ptr %gep23
+  store i8 42, ptr %sel.ptr, align 4
+  %i = load i8, ptr %gep3, align 4
   ret i8 %i
 }
 
@@ -274,20 +274,20 @@ define i8 @select_gep_not_simplifiable_1(i1 %cnd1, i1 %cnd2) {
 ; CHECK-SAME: (i1 [[CND1:%.*]], i1 [[CND2:%.*]]) #[[ATTR2:[0-9]+]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
-; CHECK-NEXT:    [[GEP7:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 7
-; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 23
-; CHECK-NEXT:    [[SEL_PTR:%.*]] = select i1 [[CND1]], i8* [[GEP7]], i8* [[GEP23]]
-; CHECK-NEXT:    store i8 42, i8* [[SEL_PTR]], align 4
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* [[GEP7]], align 4
+; CHECK-NEXT:    [[GEP7:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 7
+; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 23
+; CHECK-NEXT:    [[SEL_PTR:%.*]] = select i1 [[CND1]], ptr [[GEP7]], ptr [[GEP23]]
+; CHECK-NEXT:    store i8 42, ptr [[SEL_PTR]], align 4
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[GEP7]], align 4
 ; CHECK-NEXT:    ret i8 [[I]]
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
-  %gep7 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 7
-  %gep23 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 23
-  %sel.ptr = select i1 %cnd1, i8* %gep7, i8* %gep23
-  store i8 42, i8* %sel.ptr, align 4
-  %i = load i8, i8* %gep7, align 4
+  %gep7 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 7
+  %gep23 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 23
+  %sel.ptr = select i1 %cnd1, ptr %gep7, ptr %gep23
+  store i8 42, ptr %sel.ptr, align 4
+  %i = load i8, ptr %gep7, align 4
   ret i8 %i
 }
 
@@ -301,17 +301,17 @@ define i8 @phi_gep_simplifiable_1(i1 %cnd1, i1 %cnd2) {
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
 ; CHECK-NEXT:    br i1 [[CND1]], label [[THEN:%.*]], label [[ELSE:%.*]]
 ; CHECK:       then:
-; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 23
-; CHECK-NEXT:    store i8 21, i8* [[GEP23]], align 4
+; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 23
+; CHECK-NEXT:    store i8 21, ptr [[GEP23]], align 4
 ; CHECK-NEXT:    br label [[JOIN:%.*]]
 ; CHECK:       else:
-; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 31
-; CHECK-NEXT:    store i8 21, i8* [[GEP31]], align 4
+; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 31
+; CHECK-NEXT:    store i8 21, ptr [[GEP31]], align 4
 ; CHECK-NEXT:    br label [[JOIN]]
 ; CHECK:       join:
-; CHECK-NEXT:    [[PHI_PTR:%.*]] = phi i8* [ [[GEP23]], [[THEN]] ], [ [[GEP31]], [[ELSE]] ]
-; CHECK-NEXT:    [[GEP29:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 29
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* [[PHI_PTR]], align 4
+; CHECK-NEXT:    [[PHI_PTR:%.*]] = phi ptr [ [[GEP23]], [[THEN]] ], [ [[GEP31]], [[ELSE]] ]
+; CHECK-NEXT:    [[GEP29:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 29
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[PHI_PTR]], align 4
 ; CHECK-NEXT:    ret i8 [[I]]
 ;
 entry:
@@ -319,21 +319,21 @@ entry:
   br i1 %cnd1, label %then, label %else
 
 then:
-  %gep23 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 23
-  store i8 21, i8* %gep23, align 4
+  %gep23 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 23
+  store i8 21, ptr %gep23, align 4
   br label %join
 
 else:
-  %gep31 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 31
-  store i8 21, i8* %gep31, align 4
+  %gep31 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 31
+  store i8 21, ptr %gep31, align 4
   br label %join
 
 join:
-  %phi.ptr = phi i8* [%gep23, %then], [%gep31, %else]
+  %phi.ptr = phi ptr [%gep23, %then], [%gep31, %else]
   ;; This store is eliminated
-  %gep29 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 29
-  store i8 42, i8* %gep29, align 4
-  %i = load i8, i8* %phi.ptr, align 4
+  %gep29 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 29
+  store i8 42, ptr %gep29, align 4
+  %i = load i8, ptr %phi.ptr, align 4
   ret i8 %i
 }
 
@@ -347,36 +347,36 @@ define i8 @phi_gep_simplifiable_2(i1 %cnd1, i1 %cnd2) {
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
 ; CHECK-NEXT:    br i1 [[CND1]], label [[THEN:%.*]], label [[ELSE:%.*]]
 ; CHECK:       then:
-; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 23
+; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 23
 ; CHECK-NEXT:    br label [[JOIN:%.*]]
 ; CHECK:       else:
-; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 31
+; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 31
 ; CHECK-NEXT:    br label [[JOIN]]
 ; CHECK:       join:
-; CHECK-NEXT:    [[PHI_PTR:%.*]] = phi i8* [ [[GEP23]], [[THEN]] ], [ [[GEP31]], [[ELSE]] ]
-; CHECK-NEXT:    store i8 21, i8* [[PHI_PTR]], align 4
+; CHECK-NEXT:    [[PHI_PTR:%.*]] = phi ptr [ [[GEP23]], [[THEN]] ], [ [[GEP31]], [[ELSE]] ]
+; CHECK-NEXT:    store i8 21, ptr [[PHI_PTR]], align 4
 ; CHECK-NEXT:    ret i8 42
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
-  %gep29 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 29
+  %gep29 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 29
   ;; This store is propagated to the load.
-  store i8 42, i8* %gep29, align 4
+  store i8 42, ptr %gep29, align 4
   br i1 %cnd1, label %then, label %else
 
 then:
-  %gep23 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 23
+  %gep23 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 23
   br label %join
 
 else:
-  %gep31 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 31
+  %gep31 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 31
   br label %join
 
 join:
-  %phi.ptr = phi i8* [%gep23, %then], [%gep31, %else]
-  store i8 21, i8* %phi.ptr, align 4
+  %phi.ptr = phi ptr [%gep23, %then], [%gep31, %else]
+  store i8 21, ptr %phi.ptr, align 4
   ;; Replaced with the constant, and both store/load are eliminated.
-  %i = load i8, i8* %gep29, align 4
+  %i = load i8, ptr %gep29, align 4
   ret i8 %i
 }
 
@@ -386,36 +386,36 @@ define i8 @phi_gep_not_simplifiable_1(i1 %cnd1, i1 %cnd2) {
 ; CHECK-SAME: (i1 [[CND1:%.*]], i1 [[CND2:%.*]]) #[[ATTR2]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
-; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 23
+; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 23
 ; CHECK-NEXT:    br i1 [[CND1]], label [[THEN:%.*]], label [[ELSE:%.*]]
 ; CHECK:       then:
 ; CHECK-NEXT:    br label [[JOIN:%.*]]
 ; CHECK:       else:
-; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 31
+; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 31
 ; CHECK-NEXT:    br label [[JOIN]]
 ; CHECK:       join:
-; CHECK-NEXT:    [[PHI_PTR:%.*]] = phi i8* [ [[GEP23]], [[THEN]] ], [ [[GEP31]], [[ELSE]] ]
-; CHECK-NEXT:    store i8 42, i8* [[GEP23]], align 4
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* [[PHI_PTR]], align 4
+; CHECK-NEXT:    [[PHI_PTR:%.*]] = phi ptr [ [[GEP23]], [[THEN]] ], [ [[GEP31]], [[ELSE]] ]
+; CHECK-NEXT:    store i8 42, ptr [[GEP23]], align 4
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[PHI_PTR]], align 4
 ; CHECK-NEXT:    ret i8 [[I]]
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
-  %gep23 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 23
+  %gep23 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 23
   br i1 %cnd1, label %then, label %else
 
 then:
   br label %join
 
 else:
-  %gep31 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 31
+  %gep31 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 31
   br label %join
 
 join:
-  %phi.ptr = phi i8* [%gep23, %then], [%gep31, %else]
+  %phi.ptr = phi ptr [%gep23, %then], [%gep31, %else]
   ;; This store cannot be eliminated
-  store i8 42, i8* %gep23, align 4
-  %i = load i8, i8* %phi.ptr, align 4
+  store i8 42, ptr %gep23, align 4
+  %i = load i8, ptr %phi.ptr, align 4
   ret i8 %i
 }
 
@@ -425,35 +425,35 @@ define i8 @phi_gep_not_simplifiable_2(i1 %cnd1, i1 %cnd2) {
 ; CHECK-SAME: (i1 [[CND1:%.*]], i1 [[CND2:%.*]]) #[[ATTR2]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[BYTES:%.*]] = alloca [1024 x i8], align 16
-; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 23
+; CHECK-NEXT:    [[GEP23:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 23
 ; CHECK-NEXT:    br i1 [[CND1]], label [[THEN:%.*]], label [[ELSE:%.*]]
 ; CHECK:       then:
 ; CHECK-NEXT:    br label [[JOIN:%.*]]
 ; CHECK:       else:
-; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 31
+; CHECK-NEXT:    [[GEP31:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 31
 ; CHECK-NEXT:    br label [[JOIN]]
 ; CHECK:       join:
-; CHECK-NEXT:    [[PHI_PTR:%.*]] = phi i8* [ [[GEP23]], [[THEN]] ], [ [[GEP31]], [[ELSE]] ]
-; CHECK-NEXT:    store i8 21, i8* [[PHI_PTR]], align 4
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* [[GEP23]], align 4
+; CHECK-NEXT:    [[PHI_PTR:%.*]] = phi ptr [ [[GEP23]], [[THEN]] ], [ [[GEP31]], [[ELSE]] ]
+; CHECK-NEXT:    store i8 21, ptr [[PHI_PTR]], align 4
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[GEP23]], align 4
 ; CHECK-NEXT:    ret i8 [[I]]
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
-  %gep23 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 23
+  %gep23 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 23
   br i1 %cnd1, label %then, label %else
 
 then:
   br label %join
 
 else:
-  %gep31 = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 31
+  %gep31 = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 31
   br label %join
 
 join:
-  %phi.ptr = phi i8* [%gep23, %then], [%gep31, %else]
-  store i8 21, i8* %phi.ptr, align 4
-  %i = load i8, i8* %gep23, align 4
+  %phi.ptr = phi ptr [%gep23, %then], [%gep31, %else]
+  store i8 21, ptr %phi.ptr, align 4
+  %i = load i8, ptr %gep23, align 4
   ret i8 %i
 }
 
@@ -470,13 +470,12 @@ define i8 @phi_offsets(i1 %cnd1, i1 %cnd2) {
 ; CHECK-NEXT:    br label [[JOIN]]
 ; CHECK:       join:
 ; CHECK-NEXT:    [[PHI:%.*]] = phi i64 [ 3, [[THEN]] ], [ 11, [[ELSE]] ]
-; CHECK-NEXT:    [[GEP_PHI:%.*]] = getelementptr inbounds [1024 x i8], [1024 x i8]* [[BYTES]], i64 0, i64 [[PHI]]
+; CHECK-NEXT:    [[GEP_PHI:%.*]] = getelementptr inbounds [1024 x i8], ptr [[BYTES]], i64 0, i64 [[PHI]]
 ; CHECK-NEXT:    ret i8 100
 ;
 entry:
   %Bytes = alloca [1024 x i8], align 16
-  %gep.fixed = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 0
-  store i8 100, i8* %gep.fixed, align 4
+  store i8 100, ptr %Bytes, align 4
   br i1 %cnd1, label %then, label %else
 
 then:
@@ -487,9 +486,9 @@ else:
 
 join:
   %phi = phi i64 [ 3, %then ], [ 11, %else ]
-  %gep.phi = getelementptr inbounds [1024 x i8], [1024 x i8]* %Bytes, i64 0, i64 %phi
-  store i8 42, i8* %gep.phi, align 4
-  %i = load i8, i8* %gep.fixed, align 4
+  %gep.phi = getelementptr inbounds [1024 x i8], ptr %Bytes, i64 0, i64 %phi
+  store i8 42, ptr %gep.phi, align 4
+  %i = load i8, ptr %Bytes, align 4
   ret i8 %i
 }
 

diff  --git a/llvm/test/Transforms/Attributor/nocapture-1.ll b/llvm/test/Transforms/Attributor/nocapture-1.ll
index 65a93dcfc44a3..2f5830768ce26 100644
--- a/llvm/test/Transforms/Attributor/nocapture-1.ll
+++ b/llvm/test/Transforms/Attributor/nocapture-1.ll
@@ -2,57 +2,57 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal  -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=3 -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 
- at g = global i32* null		; <i32**> [#uses=1]
+ at g = global ptr null		; <ptr> [#uses=1]
 
 ;.
-; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = global i32* null
+; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = global ptr null
 ; CHECK: @[[LOOKUP_TABLE:[a-zA-Z0-9_$"\\.-]+]] = global [2 x i1] [i1 false, i1 true]
-; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = global i8* null
-; CHECK: @[[G3:[a-zA-Z0-9_$"\\.-]+]] = global i8* null
+; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = global ptr null
+; CHECK: @[[G3:[a-zA-Z0-9_$"\\.-]+]] = global ptr null
 ;.
-define i32* @c1(i32* %q) {
+define ptr @c1(ptr %q) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@c1
-; CHECK-SAME: (i32* nofree readnone returned "no-capture-maybe-returned" [[Q:%.*]]) #[[ATTR0:[0-9]+]] {
-; CHECK-NEXT:    ret i32* [[Q]]
+; CHECK-SAME: (ptr nofree readnone returned "no-capture-maybe-returned" [[Q:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT:    ret ptr [[Q]]
 ;
-  ret i32* %q
+  ret ptr %q
 }
 
 ; It would also be acceptable to mark %q as readnone. Update @c3 too.
-define void @c2(i32* %q) {
+define void @c2(ptr %q) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; CHECK-LABEL: define {{[^@]+}}@c2
-; CHECK-SAME: (i32* nofree writeonly [[Q:%.*]]) #[[ATTR1:[0-9]+]] {
-; CHECK-NEXT:    store i32* [[Q]], i32** @g, align 8
+; CHECK-SAME: (ptr nofree writeonly [[Q:%.*]]) #[[ATTR1:[0-9]+]] {
+; CHECK-NEXT:    store ptr [[Q]], ptr @g, align 8
 ; CHECK-NEXT:    ret void
 ;
-  store i32* %q, i32** @g
+  store ptr %q, ptr @g
   ret void
 }
 
-define void @c3(i32* %q) {
+define void @c3(ptr %q) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@c3
-; TUNIT-SAME: (i32* nofree writeonly [[Q:%.*]]) #[[ATTR1]] {
-; TUNIT-NEXT:    call void @c2(i32* nofree writeonly [[Q]]) #[[ATTR14:[0-9]+]]
+; TUNIT-SAME: (ptr nofree writeonly [[Q:%.*]]) #[[ATTR1]] {
+; TUNIT-NEXT:    call void @c2(ptr nofree writeonly [[Q]]) #[[ATTR14:[0-9]+]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@c3
-; CGSCC-SAME: (i32* nofree writeonly [[Q:%.*]]) #[[ATTR2:[0-9]+]] {
-; CGSCC-NEXT:    call void @c2(i32* nofree writeonly [[Q]]) #[[ATTR14:[0-9]+]]
+; CGSCC-SAME: (ptr nofree writeonly [[Q:%.*]]) #[[ATTR2:[0-9]+]] {
+; CGSCC-NEXT:    call void @c2(ptr nofree writeonly [[Q]]) #[[ATTR14:[0-9]+]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @c2(i32* %q)
+  call void @c2(ptr %q)
   ret void
 }
 
-define i1 @c4(i32* %q, i32 %bitno) {
+define i1 @c4(ptr %q, i32 %bitno) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@c4
-; CHECK-SAME: (i32* nofree readnone [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR0]] {
-; CHECK-NEXT:    [[TMP:%.*]] = ptrtoint i32* [[Q]] to i32
+; CHECK-SAME: (ptr nofree readnone [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[TMP:%.*]] = ptrtoint ptr [[Q]] to i32
 ; CHECK-NEXT:    [[TMP2:%.*]] = lshr i32 [[TMP]], [[BITNO]]
 ; CHECK-NEXT:    [[BIT:%.*]] = trunc i32 [[TMP2]] to i1
 ; CHECK-NEXT:    br i1 [[BIT]], label [[L1:%.*]], label [[L0:%.*]]
@@ -61,7 +61,7 @@ define i1 @c4(i32* %q, i32 %bitno) {
 ; CHECK:       l1:
 ; CHECK-NEXT:    ret i1 true
 ;
-  %tmp = ptrtoint i32* %q to i32
+  %tmp = ptrtoint ptr %q to i32
   %tmp2 = lshr i32 %tmp, %bitno
   %bit = trunc i32 %tmp2 to i1
   br i1 %bit, label %l1, label %l0
@@ -72,11 +72,11 @@ l1:
 }
 
 ; c4b is c4 but without the escaping part
-define i1 @c4b(i32* %q, i32 %bitno) {
+define i1 @c4b(ptr %q, i32 %bitno) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@c4b
-; CHECK-SAME: (i32* nocapture nofree readnone [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR0]] {
-; CHECK-NEXT:    [[TMP:%.*]] = ptrtoint i32* [[Q]] to i32
+; CHECK-SAME: (ptr nocapture nofree readnone [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[TMP:%.*]] = ptrtoint ptr [[Q]] to i32
 ; CHECK-NEXT:    [[TMP2:%.*]] = lshr i32 [[TMP]], [[BITNO]]
 ; CHECK-NEXT:    [[BIT:%.*]] = trunc i32 [[TMP2]] to i1
 ; CHECK-NEXT:    br i1 [[BIT]], label [[L1:%.*]], label [[L0:%.*]]
@@ -85,7 +85,7 @@ define i1 @c4b(i32* %q, i32 %bitno) {
 ; CHECK:       l1:
 ; CHECK-NEXT:    ret i1 false
 ;
-  %tmp = ptrtoint i32* %q to i32
+  %tmp = ptrtoint ptr %q to i32
   %tmp2 = lshr i32 %tmp, %bitno
   %bit = trunc i32 %tmp2 to i1
   br i1 %bit, label %l1, label %l0
@@ -97,220 +97,219 @@ l1:
 
 @lookup_table = global [2 x i1] [ i1 0, i1 1 ]
 
-define i1 @c5(i32* %q, i32 %bitno) {
+define i1 @c5(ptr %q, i32 %bitno) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(read)
 ; TUNIT-LABEL: define {{[^@]+}}@c5
-; TUNIT-SAME: (i32* nofree readonly [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR2:[0-9]+]] {
-; TUNIT-NEXT:    [[TMP:%.*]] = ptrtoint i32* [[Q]] to i32
+; TUNIT-SAME: (ptr nofree readonly [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR2:[0-9]+]] {
+; TUNIT-NEXT:    [[TMP:%.*]] = ptrtoint ptr [[Q]] to i32
 ; TUNIT-NEXT:    [[TMP2:%.*]] = lshr i32 [[TMP]], [[BITNO]]
 ; TUNIT-NEXT:    [[BIT:%.*]] = and i32 [[TMP2]], 1
-; TUNIT-NEXT:    [[LOOKUP:%.*]] = getelementptr [2 x i1], [2 x i1]* @lookup_table, i32 0, i32 [[BIT]]
-; TUNIT-NEXT:    [[VAL:%.*]] = load i1, i1* [[LOOKUP]], align 1
+; TUNIT-NEXT:    [[LOOKUP:%.*]] = getelementptr [2 x i1], ptr @lookup_table, i32 0, i32 [[BIT]]
+; TUNIT-NEXT:    [[VAL:%.*]] = load i1, ptr [[LOOKUP]], align 1
 ; TUNIT-NEXT:    ret i1 [[VAL]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(read)
 ; CGSCC-LABEL: define {{[^@]+}}@c5
-; CGSCC-SAME: (i32* nofree readonly [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR3:[0-9]+]] {
-; CGSCC-NEXT:    [[TMP:%.*]] = ptrtoint i32* [[Q]] to i32
+; CGSCC-SAME: (ptr nofree readonly [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR3:[0-9]+]] {
+; CGSCC-NEXT:    [[TMP:%.*]] = ptrtoint ptr [[Q]] to i32
 ; CGSCC-NEXT:    [[TMP2:%.*]] = lshr i32 [[TMP]], [[BITNO]]
 ; CGSCC-NEXT:    [[BIT:%.*]] = and i32 [[TMP2]], 1
-; CGSCC-NEXT:    [[LOOKUP:%.*]] = getelementptr [2 x i1], [2 x i1]* @lookup_table, i32 0, i32 [[BIT]]
-; CGSCC-NEXT:    [[VAL:%.*]] = load i1, i1* [[LOOKUP]], align 1
+; CGSCC-NEXT:    [[LOOKUP:%.*]] = getelementptr [2 x i1], ptr @lookup_table, i32 0, i32 [[BIT]]
+; CGSCC-NEXT:    [[VAL:%.*]] = load i1, ptr [[LOOKUP]], align 1
 ; CGSCC-NEXT:    ret i1 [[VAL]]
 ;
-  %tmp = ptrtoint i32* %q to i32
+  %tmp = ptrtoint ptr %q to i32
   %tmp2 = lshr i32 %tmp, %bitno
   %bit = and i32 %tmp2, 1
   ; subtle escape mechanism follows
-  %lookup = getelementptr [2 x i1], [2 x i1]* @lookup_table, i32 0, i32 %bit
-  %val = load i1, i1* %lookup
+  %lookup = getelementptr [2 x i1], ptr @lookup_table, i32 0, i32 %bit
+  %val = load i1, ptr %lookup
   ret i1 %val
 }
 
-declare void @throw_if_bit_set(i8*, i8) readonly
+declare void @throw_if_bit_set(ptr, i8) readonly
 
-define i1 @c6(i8* %q, i8 %bit) personality i32 (...)* @__gxx_personality_v0 {
+define i1 @c6(ptr %q, i8 %bit) personality ptr @__gxx_personality_v0 {
 ; TUNIT: Function Attrs: nounwind memory(read)
 ; TUNIT-LABEL: define {{[^@]+}}@c6
-; TUNIT-SAME: (i8* readonly [[Q:%.*]], i8 [[BIT:%.*]]) #[[ATTR4:[0-9]+]] personality i32 (...)* @__gxx_personality_v0 {
-; TUNIT-NEXT:    invoke void @throw_if_bit_set(i8* readonly [[Q]], i8 [[BIT]])
+; TUNIT-SAME: (ptr readonly [[Q:%.*]], i8 [[BIT:%.*]]) #[[ATTR4:[0-9]+]] personality ptr @__gxx_personality_v0 {
+; TUNIT-NEXT:    invoke void @throw_if_bit_set(ptr readonly [[Q]], i8 [[BIT]])
 ; TUNIT-NEXT:    to label [[RET0:%.*]] unwind label [[RET1:%.*]]
 ; TUNIT:       ret0:
 ; TUNIT-NEXT:    ret i1 false
 ; TUNIT:       ret1:
-; TUNIT-NEXT:    [[EXN:%.*]] = landingpad { i8*, i32 }
+; TUNIT-NEXT:    [[EXN:%.*]] = landingpad { ptr, i32 }
 ; TUNIT-NEXT:    cleanup
 ; TUNIT-NEXT:    ret i1 true
 ;
 ; CGSCC: Function Attrs: nounwind memory(read)
 ; CGSCC-LABEL: define {{[^@]+}}@c6
-; CGSCC-SAME: (i8* readonly [[Q:%.*]], i8 [[BIT:%.*]]) #[[ATTR5:[0-9]+]] personality i32 (...)* @__gxx_personality_v0 {
-; CGSCC-NEXT:    invoke void @throw_if_bit_set(i8* readonly [[Q]], i8 [[BIT]])
+; CGSCC-SAME: (ptr readonly [[Q:%.*]], i8 [[BIT:%.*]]) #[[ATTR5:[0-9]+]] personality ptr @__gxx_personality_v0 {
+; CGSCC-NEXT:    invoke void @throw_if_bit_set(ptr readonly [[Q]], i8 [[BIT]])
 ; CGSCC-NEXT:    to label [[RET0:%.*]] unwind label [[RET1:%.*]]
 ; CGSCC:       ret0:
 ; CGSCC-NEXT:    ret i1 false
 ; CGSCC:       ret1:
-; CGSCC-NEXT:    [[EXN:%.*]] = landingpad { i8*, i32 }
+; CGSCC-NEXT:    [[EXN:%.*]] = landingpad { ptr, i32 }
 ; CGSCC-NEXT:    cleanup
 ; CGSCC-NEXT:    ret i1 true
 ;
-  invoke void @throw_if_bit_set(i8* %q, i8 %bit)
+  invoke void @throw_if_bit_set(ptr %q, i8 %bit)
   to label %ret0 unwind label %ret1
 ret0:
   ret i1 0
 ret1:
-  %exn = landingpad {i8*, i32}
+  %exn = landingpad {ptr, i32}
   cleanup
   ret i1 1
 }
 
 declare i32 @__gxx_personality_v0(...)
 
-define i1* @lookup_bit(i32* %q, i32 %bitno) readnone nounwind {
+define ptr @lookup_bit(ptr %q, i32 %bitno) readnone nounwind {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@lookup_bit
-; CHECK-SAME: (i32* nofree readnone [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR0]] {
-; CHECK-NEXT:    [[TMP:%.*]] = ptrtoint i32* [[Q]] to i32
+; CHECK-SAME: (ptr nofree readnone [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[TMP:%.*]] = ptrtoint ptr [[Q]] to i32
 ; CHECK-NEXT:    [[TMP2:%.*]] = lshr i32 [[TMP]], [[BITNO]]
 ; CHECK-NEXT:    [[BIT:%.*]] = and i32 [[TMP2]], 1
-; CHECK-NEXT:    [[LOOKUP:%.*]] = getelementptr [2 x i1], [2 x i1]* @lookup_table, i32 0, i32 [[BIT]]
-; CHECK-NEXT:    ret i1* [[LOOKUP]]
+; CHECK-NEXT:    [[LOOKUP:%.*]] = getelementptr [2 x i1], ptr @lookup_table, i32 0, i32 [[BIT]]
+; CHECK-NEXT:    ret ptr [[LOOKUP]]
 ;
-  %tmp = ptrtoint i32* %q to i32
+  %tmp = ptrtoint ptr %q to i32
   %tmp2 = lshr i32 %tmp, %bitno
   %bit = and i32 %tmp2, 1
-  %lookup = getelementptr [2 x i1], [2 x i1]* @lookup_table, i32 0, i32 %bit
-  ret i1* %lookup
+  %lookup = getelementptr [2 x i1], ptr @lookup_table, i32 0, i32 %bit
+  ret ptr %lookup
 }
 
-define i1 @c7(i32* %q, i32 %bitno) {
+define i1 @c7(ptr %q, i32 %bitno) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(read)
 ; TUNIT-LABEL: define {{[^@]+}}@c7
-; TUNIT-SAME: (i32* nofree readonly [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR2]] {
-; TUNIT-NEXT:    [[PTR:%.*]] = call i1* @lookup_bit(i32* noalias nofree readnone [[Q]], i32 [[BITNO]]) #[[ATTR15:[0-9]+]]
-; TUNIT-NEXT:    [[VAL:%.*]] = load i1, i1* [[PTR]], align 1
+; TUNIT-SAME: (ptr nofree readonly [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR2]] {
+; TUNIT-NEXT:    [[PTR:%.*]] = call ptr @lookup_bit(ptr noalias nofree readnone [[Q]], i32 [[BITNO]]) #[[ATTR15:[0-9]+]]
+; TUNIT-NEXT:    [[VAL:%.*]] = load i1, ptr [[PTR]], align 1
 ; TUNIT-NEXT:    ret i1 [[VAL]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(read)
 ; CGSCC-LABEL: define {{[^@]+}}@c7
-; CGSCC-SAME: (i32* nofree readonly [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR6:[0-9]+]] {
-; CGSCC-NEXT:    [[PTR:%.*]] = call i1* @lookup_bit(i32* noalias nofree readnone [[Q]], i32 [[BITNO]]) #[[ATTR17:[0-9]+]]
-; CGSCC-NEXT:    [[VAL:%.*]] = load i1, i1* [[PTR]], align 1
+; CGSCC-SAME: (ptr nofree readonly [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR6:[0-9]+]] {
+; CGSCC-NEXT:    [[PTR:%.*]] = call ptr @lookup_bit(ptr noalias nofree readnone [[Q]], i32 [[BITNO]]) #[[ATTR17:[0-9]+]]
+; CGSCC-NEXT:    [[VAL:%.*]] = load i1, ptr [[PTR]], align 1
 ; CGSCC-NEXT:    ret i1 [[VAL]]
 ;
-  %ptr = call i1* @lookup_bit(i32* %q, i32 %bitno)
-  %val = load i1, i1* %ptr
+  %ptr = call ptr @lookup_bit(ptr %q, i32 %bitno)
+  %val = load i1, ptr %ptr
   ret i1 %val
 }
 
 
-define i32 @nc1(i32* %q, i32* %p, i1 %b) {
+define i32 @nc1(ptr %q, ptr %p, i1 %b) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@nc1
-; TUNIT-SAME: (i32* nofree [[Q:%.*]], i32* nocapture nofree [[P:%.*]], i1 [[B:%.*]]) #[[ATTR5:[0-9]+]] {
+; TUNIT-SAME: (ptr nofree [[Q:%.*]], ptr nocapture nofree [[P:%.*]], i1 [[B:%.*]]) #[[ATTR5:[0-9]+]] {
 ; TUNIT-NEXT:  e:
 ; TUNIT-NEXT:    br label [[L:%.*]]
 ; TUNIT:       l:
-; TUNIT-NEXT:    [[X:%.*]] = phi i32* [ [[P]], [[E:%.*]] ]
-; TUNIT-NEXT:    [[Y:%.*]] = phi i32* [ [[Q]], [[E]] ]
-; TUNIT-NEXT:    [[TMP2:%.*]] = select i1 [[B]], i32* [[P]], i32* [[Q]]
-; TUNIT-NEXT:    [[VAL:%.*]] = load i32, i32* [[TMP2]], align 4
-; TUNIT-NEXT:    store i32 0, i32* [[P]], align 4
-; TUNIT-NEXT:    store i32* [[Q]], i32** @g, align 8
+; TUNIT-NEXT:    [[X:%.*]] = phi ptr [ [[P]], [[E:%.*]] ]
+; TUNIT-NEXT:    [[Y:%.*]] = phi ptr [ [[Q]], [[E]] ]
+; TUNIT-NEXT:    [[TMP2:%.*]] = select i1 [[B]], ptr [[P]], ptr [[Q]]
+; TUNIT-NEXT:    [[VAL:%.*]] = load i32, ptr [[TMP2]], align 4
+; TUNIT-NEXT:    store i32 0, ptr [[P]], align 4
+; TUNIT-NEXT:    store ptr [[Q]], ptr @g, align 8
 ; TUNIT-NEXT:    ret i32 [[VAL]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@nc1
-; CGSCC-SAME: (i32* nofree [[Q:%.*]], i32* nocapture nofree [[P:%.*]], i1 [[B:%.*]]) #[[ATTR7:[0-9]+]] {
+; CGSCC-SAME: (ptr nofree [[Q:%.*]], ptr nocapture nofree [[P:%.*]], i1 [[B:%.*]]) #[[ATTR7:[0-9]+]] {
 ; CGSCC-NEXT:  e:
 ; CGSCC-NEXT:    br label [[L:%.*]]
 ; CGSCC:       l:
-; CGSCC-NEXT:    [[X:%.*]] = phi i32* [ [[P]], [[E:%.*]] ]
-; CGSCC-NEXT:    [[Y:%.*]] = phi i32* [ [[Q]], [[E]] ]
-; CGSCC-NEXT:    [[TMP2:%.*]] = select i1 [[B]], i32* [[P]], i32* [[Q]]
-; CGSCC-NEXT:    [[VAL:%.*]] = load i32, i32* [[TMP2]], align 4
-; CGSCC-NEXT:    store i32 0, i32* [[P]], align 4
-; CGSCC-NEXT:    store i32* [[Q]], i32** @g, align 8
+; CGSCC-NEXT:    [[X:%.*]] = phi ptr [ [[P]], [[E:%.*]] ]
+; CGSCC-NEXT:    [[Y:%.*]] = phi ptr [ [[Q]], [[E]] ]
+; CGSCC-NEXT:    [[TMP2:%.*]] = select i1 [[B]], ptr [[P]], ptr [[Q]]
+; CGSCC-NEXT:    [[VAL:%.*]] = load i32, ptr [[TMP2]], align 4
+; CGSCC-NEXT:    store i32 0, ptr [[P]], align 4
+; CGSCC-NEXT:    store ptr [[Q]], ptr @g, align 8
 ; CGSCC-NEXT:    ret i32 [[VAL]]
 ;
 e:
   br label %l
 l:
-  %x = phi i32* [ %p, %e ]
-  %y = phi i32* [ %q, %e ]
-  %tmp = bitcast i32* %x to i32*		; <i32*> [#uses=2]
-  %tmp2 = select i1 %b, i32* %tmp, i32* %y
-  %val = load i32, i32* %tmp2		; <i32> [#uses=1]
-  store i32 0, i32* %tmp
-  store i32* %y, i32** @g
+  %x = phi ptr [ %p, %e ]
+  %y = phi ptr [ %q, %e ]
+  %tmp2 = select i1 %b, ptr %x, ptr %y
+  %val = load i32, ptr %tmp2		; <i32> [#uses=1]
+  store i32 0, ptr %x
+  store ptr %y, ptr @g
   ret i32 %val
 }
 
-define i32 @nc1_addrspace(i32* %q, i32 addrspace(1)* %p, i1 %b) {
+define i32 @nc1_addrspace(ptr %q, ptr addrspace(1) %p, i1 %b) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@nc1_addrspace
-; TUNIT-SAME: (i32* nofree [[Q:%.*]], i32 addrspace(1)* nocapture nofree [[P:%.*]], i1 [[B:%.*]]) #[[ATTR5]] {
+; TUNIT-SAME: (ptr nofree [[Q:%.*]], ptr addrspace(1) nocapture nofree [[P:%.*]], i1 [[B:%.*]]) #[[ATTR5]] {
 ; TUNIT-NEXT:  e:
 ; TUNIT-NEXT:    br label [[L:%.*]]
 ; TUNIT:       l:
-; TUNIT-NEXT:    [[X:%.*]] = phi i32 addrspace(1)* [ [[P]], [[E:%.*]] ]
-; TUNIT-NEXT:    [[Y:%.*]] = phi i32* [ [[Q]], [[E]] ]
-; TUNIT-NEXT:    [[TMP:%.*]] = addrspacecast i32 addrspace(1)* [[P]] to i32*
-; TUNIT-NEXT:    [[TMP2:%.*]] = select i1 [[B]], i32* [[TMP]], i32* [[Q]]
-; TUNIT-NEXT:    [[VAL:%.*]] = load i32, i32* [[TMP2]], align 4
-; TUNIT-NEXT:    store i32 0, i32* [[TMP]], align 4
-; TUNIT-NEXT:    store i32* [[Q]], i32** @g, align 8
+; TUNIT-NEXT:    [[X:%.*]] = phi ptr addrspace(1) [ [[P]], [[E:%.*]] ]
+; TUNIT-NEXT:    [[Y:%.*]] = phi ptr [ [[Q]], [[E]] ]
+; TUNIT-NEXT:    [[TMP:%.*]] = addrspacecast ptr addrspace(1) [[P]] to ptr
+; TUNIT-NEXT:    [[TMP2:%.*]] = select i1 [[B]], ptr [[TMP]], ptr [[Q]]
+; TUNIT-NEXT:    [[VAL:%.*]] = load i32, ptr [[TMP2]], align 4
+; TUNIT-NEXT:    store i32 0, ptr [[TMP]], align 4
+; TUNIT-NEXT:    store ptr [[Q]], ptr @g, align 8
 ; TUNIT-NEXT:    ret i32 [[VAL]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@nc1_addrspace
-; CGSCC-SAME: (i32* nofree [[Q:%.*]], i32 addrspace(1)* nocapture nofree [[P:%.*]], i1 [[B:%.*]]) #[[ATTR7]] {
+; CGSCC-SAME: (ptr nofree [[Q:%.*]], ptr addrspace(1) nocapture nofree [[P:%.*]], i1 [[B:%.*]]) #[[ATTR7]] {
 ; CGSCC-NEXT:  e:
 ; CGSCC-NEXT:    br label [[L:%.*]]
 ; CGSCC:       l:
-; CGSCC-NEXT:    [[X:%.*]] = phi i32 addrspace(1)* [ [[P]], [[E:%.*]] ]
-; CGSCC-NEXT:    [[Y:%.*]] = phi i32* [ [[Q]], [[E]] ]
-; CGSCC-NEXT:    [[TMP:%.*]] = addrspacecast i32 addrspace(1)* [[P]] to i32*
-; CGSCC-NEXT:    [[TMP2:%.*]] = select i1 [[B]], i32* [[TMP]], i32* [[Q]]
-; CGSCC-NEXT:    [[VAL:%.*]] = load i32, i32* [[TMP2]], align 4
-; CGSCC-NEXT:    store i32 0, i32* [[TMP]], align 4
-; CGSCC-NEXT:    store i32* [[Q]], i32** @g, align 8
+; CGSCC-NEXT:    [[X:%.*]] = phi ptr addrspace(1) [ [[P]], [[E:%.*]] ]
+; CGSCC-NEXT:    [[Y:%.*]] = phi ptr [ [[Q]], [[E]] ]
+; CGSCC-NEXT:    [[TMP:%.*]] = addrspacecast ptr addrspace(1) [[P]] to ptr
+; CGSCC-NEXT:    [[TMP2:%.*]] = select i1 [[B]], ptr [[TMP]], ptr [[Q]]
+; CGSCC-NEXT:    [[VAL:%.*]] = load i32, ptr [[TMP2]], align 4
+; CGSCC-NEXT:    store i32 0, ptr [[TMP]], align 4
+; CGSCC-NEXT:    store ptr [[Q]], ptr @g, align 8
 ; CGSCC-NEXT:    ret i32 [[VAL]]
 ;
 e:
   br label %l
 l:
-  %x = phi i32 addrspace(1)* [ %p, %e ]
-  %y = phi i32* [ %q, %e ]
-  %tmp = addrspacecast i32 addrspace(1)* %x to i32*		; <i32*> [#uses=2]
-  %tmp2 = select i1 %b, i32* %tmp, i32* %y
-  %val = load i32, i32* %tmp2		; <i32> [#uses=1]
-  store i32 0, i32* %tmp
-  store i32* %y, i32** @g
+  %x = phi ptr addrspace(1) [ %p, %e ]
+  %y = phi ptr [ %q, %e ]
+  %tmp = addrspacecast ptr addrspace(1) %x to ptr		; <ptr> [#uses=2]
+  %tmp2 = select i1 %b, ptr %tmp, ptr %y
+  %val = load i32, ptr %tmp2		; <i32> [#uses=1]
+  store i32 0, ptr %tmp
+  store ptr %y, ptr @g
   ret i32 %val
 }
 
-define void @nc2(i32* %p, i32* %q) {
+define void @nc2(ptr %p, ptr %q) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@nc2
-; TUNIT-SAME: (i32* nocapture nofree [[P:%.*]], i32* nofree [[Q:%.*]]) #[[ATTR5]] {
-; TUNIT-NEXT:    [[TMP1:%.*]] = call i32 @nc1(i32* nofree [[Q]], i32* nocapture nofree [[P]], i1 noundef false) #[[ATTR14]]
+; TUNIT-SAME: (ptr nocapture nofree [[P:%.*]], ptr nofree [[Q:%.*]]) #[[ATTR5]] {
+; TUNIT-NEXT:    [[TMP1:%.*]] = call i32 @nc1(ptr nofree [[Q]], ptr nocapture nofree [[P]], i1 noundef false) #[[ATTR14]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@nc2
-; CGSCC-SAME: (i32* nocapture nofree align 4 [[P:%.*]], i32* nofree [[Q:%.*]]) #[[ATTR8:[0-9]+]] {
-; CGSCC-NEXT:    [[TMP1:%.*]] = call i32 @nc1(i32* nofree [[Q]], i32* nocapture nofree align 4 [[P]], i1 noundef false) #[[ATTR14]]
+; CGSCC-SAME: (ptr nocapture nofree align 4 [[P:%.*]], ptr nofree [[Q:%.*]]) #[[ATTR8:[0-9]+]] {
+; CGSCC-NEXT:    [[TMP1:%.*]] = call i32 @nc1(ptr nofree [[Q]], ptr nocapture nofree align 4 [[P]], i1 noundef false) #[[ATTR14]]
 ; CGSCC-NEXT:    ret void
 ;
-  %1 = call i32 @nc1(i32* %q, i32* %p, i1 0)		; <i32> [#uses=0]
+  %1 = call i32 @nc1(ptr %q, ptr %p, i1 0)		; <i32> [#uses=0]
   ret void
 }
 
 
-define void @nc3(void ()* %p) {
+define void @nc3(ptr %p) {
 ; CHECK-LABEL: define {{[^@]+}}@nc3
-; CHECK-SAME: (void ()* nocapture nofree noundef nonnull [[P:%.*]]) {
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull [[P:%.*]]) {
 ; CHECK-NEXT:    call void [[P]]()
 ; CHECK-NEXT:    ret void
 ;
@@ -320,530 +319,523 @@ define void @nc3(void ()* %p) {
 
 ; The following test is tricky because improvements to AAIsDead can cause the call to be removed.
 ; FIXME: readonly and nocapture missing on the pointer.
-declare void @external(i8* readonly) nounwind argmemonly
-define void @nc4(i8* %p) {
+declare void @external(ptr readonly) nounwind argmemonly
+define void @nc4(ptr %p) {
 ; TUNIT: Function Attrs: nounwind memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@nc4
-; TUNIT-SAME: (i8* [[P:%.*]]) #[[ATTR6:[0-9]+]] {
-; TUNIT-NEXT:    call void @external(i8* readonly [[P]]) #[[ATTR16:[0-9]+]]
+; TUNIT-SAME: (ptr [[P:%.*]]) #[[ATTR6:[0-9]+]] {
+; TUNIT-NEXT:    call void @external(ptr readonly [[P]]) #[[ATTR16:[0-9]+]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nounwind memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@nc4
-; CGSCC-SAME: (i8* [[P:%.*]]) #[[ATTR9:[0-9]+]] {
-; CGSCC-NEXT:    call void @external(i8* readonly [[P]]) #[[ATTR18:[0-9]+]]
+; CGSCC-SAME: (ptr [[P:%.*]]) #[[ATTR9:[0-9]+]] {
+; CGSCC-NEXT:    call void @external(ptr readonly [[P]]) #[[ATTR18:[0-9]+]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @external(i8* %p)
+  call void @external(ptr %p)
   ret void
 }
 
-define void @nc5(void (i8*)* %f, i8* %p) {
+define void @nc5(ptr %f, ptr %p) {
 ; CHECK-LABEL: define {{[^@]+}}@nc5
-; CHECK-SAME: (void (i8*)* nocapture nofree noundef nonnull [[F:%.*]], i8* nocapture [[P:%.*]]) {
-; CHECK-NEXT:    call void [[F]](i8* nocapture [[P]])
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull [[F:%.*]], ptr nocapture [[P:%.*]]) {
+; CHECK-NEXT:    call void [[F]](ptr nocapture [[P]])
 ; CHECK-NEXT:    ret void
 ;
-  call void %f(i8* %p) readonly nounwind
-  call void %f(i8* nocapture %p)
+  call void %f(ptr %p) readonly nounwind
+  call void %f(ptr nocapture %p)
   ret void
 }
 
 ; It would be acceptable to add readnone to %y1_1 and %y1_2.
-define void @test1_1(i8* %x1_1, i8* %y1_1, i1 %c) {
+define void @test1_1(ptr %x1_1, ptr %y1_1, i1 %c) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@test1_1
-; TUNIT-SAME: (i8* nocapture nofree readnone [[X1_1:%.*]], i8* nocapture nofree readnone [[Y1_1:%.*]], i1 [[C:%.*]]) #[[ATTR7:[0-9]+]] {
-; TUNIT-NEXT:    [[TMP1:%.*]] = call i8* @test1_2(i8* noalias nocapture nofree readnone undef, i8* noalias nofree readnone "no-capture-maybe-returned" [[Y1_1]], i1 [[C]]) #[[ATTR17:[0-9]+]]
-; TUNIT-NEXT:    store i32* null, i32** @g, align 8
+; TUNIT-SAME: (ptr nocapture nofree readnone [[X1_1:%.*]], ptr nocapture nofree readnone [[Y1_1:%.*]], i1 [[C:%.*]]) #[[ATTR7:[0-9]+]] {
+; TUNIT-NEXT:    [[TMP1:%.*]] = call ptr @test1_2(ptr noalias nocapture nofree readnone undef, ptr noalias nofree readnone "no-capture-maybe-returned" [[Y1_1]], i1 [[C]]) #[[ATTR17:[0-9]+]]
+; TUNIT-NEXT:    store ptr null, ptr @g, align 8
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@test1_1
-; CGSCC-SAME: (i8* nocapture nofree readnone [[X1_1:%.*]], i8* nocapture nofree readnone [[Y1_1:%.*]], i1 [[C:%.*]]) #[[ATTR10:[0-9]+]] {
-; CGSCC-NEXT:    [[TMP1:%.*]] = call i8* @test1_2(i8* noalias nocapture nofree readnone undef, i8* noalias nofree readnone "no-capture-maybe-returned" [[Y1_1]], i1 [[C]]) #[[ATTR19:[0-9]+]]
-; CGSCC-NEXT:    store i32* null, i32** @g, align 8
+; CGSCC-SAME: (ptr nocapture nofree readnone [[X1_1:%.*]], ptr nocapture nofree readnone [[Y1_1:%.*]], i1 [[C:%.*]]) #[[ATTR10:[0-9]+]] {
+; CGSCC-NEXT:    [[TMP1:%.*]] = call ptr @test1_2(ptr noalias nocapture nofree readnone undef, ptr noalias nofree readnone "no-capture-maybe-returned" [[Y1_1]], i1 [[C]]) #[[ATTR19:[0-9]+]]
+; CGSCC-NEXT:    store ptr null, ptr @g, align 8
 ; CGSCC-NEXT:    ret void
 ;
-  call i8* @test1_2(i8* %x1_1, i8* %y1_1, i1 %c)
-  store i32* null, i32** @g
+  call ptr @test1_2(ptr %x1_1, ptr %y1_1, i1 %c)
+  store ptr null, ptr @g
   ret void
 }
 
-define i8* @test1_2(i8* %x1_2, i8* %y1_2, i1 %c) {
+define ptr @test1_2(ptr %x1_2, ptr %y1_2, i1 %c) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@test1_2
-; TUNIT-SAME: (i8* nocapture nofree readnone [[X1_2:%.*]], i8* nofree readnone returned "no-capture-maybe-returned" [[Y1_2:%.*]], i1 [[C:%.*]]) #[[ATTR7]] {
+; TUNIT-SAME: (ptr nocapture nofree readnone [[X1_2:%.*]], ptr nofree readnone returned "no-capture-maybe-returned" [[Y1_2:%.*]], i1 [[C:%.*]]) #[[ATTR7]] {
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    call void @test1_1(i8* noalias nocapture nofree readnone undef, i8* noalias nocapture nofree readnone [[Y1_2]], i1 noundef [[C]]) #[[ATTR17]]
-; TUNIT-NEXT:    store i32* null, i32** @g, align 8
+; TUNIT-NEXT:    call void @test1_1(ptr noalias nocapture nofree readnone undef, ptr noalias nocapture nofree readnone [[Y1_2]], i1 noundef [[C]]) #[[ATTR17]]
+; TUNIT-NEXT:    store ptr null, ptr @g, align 8
 ; TUNIT-NEXT:    br label [[F]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    ret i8* [[Y1_2]]
+; TUNIT-NEXT:    ret ptr [[Y1_2]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@test1_2
-; CGSCC-SAME: (i8* nocapture nofree readnone [[X1_2:%.*]], i8* nofree readnone returned "no-capture-maybe-returned" [[Y1_2:%.*]], i1 [[C:%.*]]) #[[ATTR10]] {
+; CGSCC-SAME: (ptr nocapture nofree readnone [[X1_2:%.*]], ptr nofree readnone returned "no-capture-maybe-returned" [[Y1_2:%.*]], i1 [[C:%.*]]) #[[ATTR10]] {
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    call void @test1_1(i8* noalias nocapture nofree readnone undef, i8* noalias nocapture nofree readnone [[Y1_2]], i1 noundef [[C]]) #[[ATTR19]]
-; CGSCC-NEXT:    store i32* null, i32** @g, align 8
+; CGSCC-NEXT:    call void @test1_1(ptr noalias nocapture nofree readnone undef, ptr noalias nocapture nofree readnone [[Y1_2]], i1 noundef [[C]]) #[[ATTR19]]
+; CGSCC-NEXT:    store ptr null, ptr @g, align 8
 ; CGSCC-NEXT:    br label [[F]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    ret i8* [[Y1_2]]
+; CGSCC-NEXT:    ret ptr [[Y1_2]]
 ;
   br i1 %c, label %t, label %f
 t:
-  call void @test1_1(i8* %x1_2, i8* %y1_2, i1 %c)
-  store i32* null, i32** @g
+  call void @test1_1(ptr %x1_2, ptr %y1_2, i1 %c)
+  store ptr null, ptr @g
   br label %f
 f:
-  ret i8* %y1_2
+  ret ptr %y1_2
 }
 
-define void @test2(i8* %x2) {
+define void @test2(ptr %x2) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@test2
-; TUNIT-SAME: (i8* nocapture nofree readnone [[X2:%.*]]) #[[ATTR7]] {
-; TUNIT-NEXT:    call void @test2(i8* noalias nocapture nofree readnone undef) #[[ATTR17]]
-; TUNIT-NEXT:    store i32* null, i32** @g, align 8
+; TUNIT-SAME: (ptr nocapture nofree readnone [[X2:%.*]]) #[[ATTR7]] {
+; TUNIT-NEXT:    call void @test2(ptr noalias nocapture nofree readnone undef) #[[ATTR17]]
+; TUNIT-NEXT:    store ptr null, ptr @g, align 8
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@test2
-; CGSCC-SAME: (i8* nocapture nofree readnone [[X2:%.*]]) #[[ATTR10]] {
-; CGSCC-NEXT:    call void @test2(i8* noalias nocapture nofree readnone undef) #[[ATTR19]]
-; CGSCC-NEXT:    store i32* null, i32** @g, align 8
+; CGSCC-SAME: (ptr nocapture nofree readnone [[X2:%.*]]) #[[ATTR10]] {
+; CGSCC-NEXT:    call void @test2(ptr noalias nocapture nofree readnone undef) #[[ATTR19]]
+; CGSCC-NEXT:    store ptr null, ptr @g, align 8
 ; CGSCC-NEXT:    ret void
 ;
-  call void @test2(i8* %x2)
-  store i32* null, i32** @g
+  call void @test2(ptr %x2)
+  store ptr null, ptr @g
   ret void
 }
 
-define void @test3(i8* %x3, i8* %y3, i8* %z3) {
+define void @test3(ptr %x3, ptr %y3, ptr %z3) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@test3
-; TUNIT-SAME: (i8* nocapture nofree readnone [[X3:%.*]], i8* nocapture nofree readnone [[Y3:%.*]], i8* nocapture nofree readnone [[Z3:%.*]]) #[[ATTR7]] {
-; TUNIT-NEXT:    call void @test3(i8* noalias nocapture nofree readnone undef, i8* noalias nocapture nofree readnone undef, i8* noalias nocapture nofree readnone undef) #[[ATTR17]]
-; TUNIT-NEXT:    store i32* null, i32** @g, align 8
+; TUNIT-SAME: (ptr nocapture nofree readnone [[X3:%.*]], ptr nocapture nofree readnone [[Y3:%.*]], ptr nocapture nofree readnone [[Z3:%.*]]) #[[ATTR7]] {
+; TUNIT-NEXT:    call void @test3(ptr noalias nocapture nofree readnone undef, ptr noalias nocapture nofree readnone undef, ptr noalias nocapture nofree readnone undef) #[[ATTR17]]
+; TUNIT-NEXT:    store ptr null, ptr @g, align 8
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@test3
-; CGSCC-SAME: (i8* nocapture nofree readnone [[X3:%.*]], i8* nocapture nofree readnone [[Y3:%.*]], i8* nocapture nofree readnone [[Z3:%.*]]) #[[ATTR10]] {
-; CGSCC-NEXT:    call void @test3(i8* noalias nocapture nofree readnone undef, i8* noalias nocapture nofree readnone undef, i8* noalias nocapture nofree readnone undef) #[[ATTR19]]
-; CGSCC-NEXT:    store i32* null, i32** @g, align 8
+; CGSCC-SAME: (ptr nocapture nofree readnone [[X3:%.*]], ptr nocapture nofree readnone [[Y3:%.*]], ptr nocapture nofree readnone [[Z3:%.*]]) #[[ATTR10]] {
+; CGSCC-NEXT:    call void @test3(ptr noalias nocapture nofree readnone undef, ptr noalias nocapture nofree readnone undef, ptr noalias nocapture nofree readnone undef) #[[ATTR19]]
+; CGSCC-NEXT:    store ptr null, ptr @g, align 8
 ; CGSCC-NEXT:    ret void
 ;
-  call void @test3(i8* %z3, i8* %y3, i8* %x3)
-  store i32* null, i32** @g
+  call void @test3(ptr %z3, ptr %y3, ptr %x3)
+  store ptr null, ptr @g
   ret void
 }
 
-define void @test4_1(i8* %x4_1, i1 %c) {
+define void @test4_1(ptr %x4_1, i1 %c) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@test4_1
-; TUNIT-SAME: (i8* nocapture nofree readnone [[X4_1:%.*]], i1 [[C:%.*]]) #[[ATTR7]] {
-; TUNIT-NEXT:    [[TMP1:%.*]] = call i8* @test4_2(i8* noalias nocapture nofree readnone undef, i8* noalias nofree readnone "no-capture-maybe-returned" [[X4_1]], i8* noalias nocapture nofree readnone undef, i1 [[C]]) #[[ATTR17]]
-; TUNIT-NEXT:    store i32* null, i32** @g, align 8
+; TUNIT-SAME: (ptr nocapture nofree readnone [[X4_1:%.*]], i1 [[C:%.*]]) #[[ATTR7]] {
+; TUNIT-NEXT:    [[TMP1:%.*]] = call ptr @test4_2(ptr noalias nocapture nofree readnone undef, ptr noalias nofree readnone "no-capture-maybe-returned" [[X4_1]], ptr noalias nocapture nofree readnone undef, i1 [[C]]) #[[ATTR17]]
+; TUNIT-NEXT:    store ptr null, ptr @g, align 8
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@test4_1
-; CGSCC-SAME: (i8* nocapture nofree readnone [[X4_1:%.*]], i1 [[C:%.*]]) #[[ATTR10]] {
-; CGSCC-NEXT:    [[TMP1:%.*]] = call i8* @test4_2(i8* noalias nocapture nofree readnone undef, i8* noalias nofree readnone "no-capture-maybe-returned" [[X4_1]], i8* noalias nocapture nofree readnone undef, i1 [[C]]) #[[ATTR19]]
-; CGSCC-NEXT:    store i32* null, i32** @g, align 8
+; CGSCC-SAME: (ptr nocapture nofree readnone [[X4_1:%.*]], i1 [[C:%.*]]) #[[ATTR10]] {
+; CGSCC-NEXT:    [[TMP1:%.*]] = call ptr @test4_2(ptr noalias nocapture nofree readnone undef, ptr noalias nofree readnone "no-capture-maybe-returned" [[X4_1]], ptr noalias nocapture nofree readnone undef, i1 [[C]]) #[[ATTR19]]
+; CGSCC-NEXT:    store ptr null, ptr @g, align 8
 ; CGSCC-NEXT:    ret void
 ;
-  call i8* @test4_2(i8* %x4_1, i8* %x4_1, i8* %x4_1, i1 %c)
-  store i32* null, i32** @g
+  call ptr @test4_2(ptr %x4_1, ptr %x4_1, ptr %x4_1, i1 %c)
+  store ptr null, ptr @g
   ret void
 }
 
-define i8* @test4_2(i8* %x4_2, i8* %y4_2, i8* %z4_2, i1 %c) {
+define ptr @test4_2(ptr %x4_2, ptr %y4_2, ptr %z4_2, i1 %c) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@test4_2
-; TUNIT-SAME: (i8* nocapture nofree readnone [[X4_2:%.*]], i8* nofree readnone returned "no-capture-maybe-returned" [[Y4_2:%.*]], i8* nocapture nofree readnone [[Z4_2:%.*]], i1 [[C:%.*]]) #[[ATTR7]] {
+; TUNIT-SAME: (ptr nocapture nofree readnone [[X4_2:%.*]], ptr nofree readnone returned "no-capture-maybe-returned" [[Y4_2:%.*]], ptr nocapture nofree readnone [[Z4_2:%.*]], i1 [[C:%.*]]) #[[ATTR7]] {
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    call void @test4_1(i8* noalias nocapture nofree noundef readnone align 4294967296 null, i1 noundef [[C]]) #[[ATTR17]]
-; TUNIT-NEXT:    store i32* null, i32** @g, align 8
+; TUNIT-NEXT:    call void @test4_1(ptr noalias nocapture nofree noundef readnone align 4294967296 null, i1 noundef [[C]]) #[[ATTR17]]
+; TUNIT-NEXT:    store ptr null, ptr @g, align 8
 ; TUNIT-NEXT:    br label [[F]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    ret i8* [[Y4_2]]
+; TUNIT-NEXT:    ret ptr [[Y4_2]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@test4_2
-; CGSCC-SAME: (i8* nocapture nofree readnone [[X4_2:%.*]], i8* nofree readnone returned "no-capture-maybe-returned" [[Y4_2:%.*]], i8* nocapture nofree readnone [[Z4_2:%.*]], i1 [[C:%.*]]) #[[ATTR10]] {
+; CGSCC-SAME: (ptr nocapture nofree readnone [[X4_2:%.*]], ptr nofree readnone returned "no-capture-maybe-returned" [[Y4_2:%.*]], ptr nocapture nofree readnone [[Z4_2:%.*]], i1 [[C:%.*]]) #[[ATTR10]] {
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    call void @test4_1(i8* noalias nocapture nofree noundef readnone align 4294967296 null, i1 noundef [[C]]) #[[ATTR19]]
-; CGSCC-NEXT:    store i32* null, i32** @g, align 8
+; CGSCC-NEXT:    call void @test4_1(ptr noalias nocapture nofree noundef readnone align 4294967296 null, i1 noundef [[C]]) #[[ATTR19]]
+; CGSCC-NEXT:    store ptr null, ptr @g, align 8
 ; CGSCC-NEXT:    br label [[F]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    ret i8* [[Y4_2]]
+; CGSCC-NEXT:    ret ptr [[Y4_2]]
 ;
   br i1 %c, label %t, label %f
 t:
-  call void @test4_1(i8* null, i1 %c)
-  store i32* null, i32** @g
+  call void @test4_1(ptr null, i1 %c)
+  store ptr null, ptr @g
   br label %f
 f:
-  ret i8* %y4_2
+  ret ptr %y4_2
 }
 
-declare i8* @test5_1(i8* %x5_1)
+declare ptr @test5_1(ptr %x5_1)
 
-define void @test5_2(i8* %x5_2) {
+define void @test5_2(ptr %x5_2) {
 ; CHECK-LABEL: define {{[^@]+}}@test5_2
-; CHECK-SAME: (i8* [[X5_2:%.*]]) {
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @test5_1(i8* [[X5_2]])
-; CHECK-NEXT:    store i32* null, i32** @g, align 8
+; CHECK-SAME: (ptr [[X5_2:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @test5_1(ptr [[X5_2]])
+; CHECK-NEXT:    store ptr null, ptr @g, align 8
 ; CHECK-NEXT:    ret void
 ;
-  call i8* @test5_1(i8* %x5_2)
-  store i32* null, i32** @g
+  call ptr @test5_1(ptr %x5_2)
+  store ptr null, ptr @g
   ret void
 }
 
-declare void @test6_1(i8* %x6_1, i8* nocapture %y6_1, ...)
+declare void @test6_1(ptr %x6_1, ptr nocapture %y6_1, ...)
 
-define void @test6_2(i8* %x6_2, i8* %y6_2, i8* %z6_2) {
+define void @test6_2(ptr %x6_2, ptr %y6_2, ptr %z6_2) {
 ; CHECK-LABEL: define {{[^@]+}}@test6_2
-; CHECK-SAME: (i8* [[X6_2:%.*]], i8* nocapture [[Y6_2:%.*]], i8* [[Z6_2:%.*]]) {
-; CHECK-NEXT:    call void (i8*, i8*, ...) @test6_1(i8* [[X6_2]], i8* nocapture [[Y6_2]], i8* [[Z6_2]])
-; CHECK-NEXT:    store i32* null, i32** @g, align 8
+; CHECK-SAME: (ptr [[X6_2:%.*]], ptr nocapture [[Y6_2:%.*]], ptr [[Z6_2:%.*]]) {
+; CHECK-NEXT:    call void (ptr, ptr, ...) @test6_1(ptr [[X6_2]], ptr nocapture [[Y6_2]], ptr [[Z6_2]])
+; CHECK-NEXT:    store ptr null, ptr @g, align 8
 ; CHECK-NEXT:    ret void
 ;
-  call void (i8*, i8*, ...) @test6_1(i8* %x6_2, i8* %y6_2, i8* %z6_2)
-  store i32* null, i32** @g
+  call void (ptr, ptr, ...) @test6_1(ptr %x6_2, ptr %y6_2, ptr %z6_2)
+  store ptr null, ptr @g
   ret void
 }
 
-define void @test_cmpxchg(i32* %p) {
+define void @test_cmpxchg(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nounwind willreturn memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@test_cmpxchg
-; TUNIT-SAME: (i32* nocapture nofree noundef nonnull dereferenceable(4) [[P:%.*]]) #[[ATTR8:[0-9]+]] {
-; TUNIT-NEXT:    [[TMP1:%.*]] = cmpxchg i32* [[P]], i32 0, i32 1 acquire monotonic, align 4
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull dereferenceable(4) [[P:%.*]]) #[[ATTR8:[0-9]+]] {
+; TUNIT-NEXT:    [[TMP1:%.*]] = cmpxchg ptr [[P]], i32 0, i32 1 acquire monotonic, align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nounwind willreturn memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@test_cmpxchg
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull dereferenceable(4) [[P:%.*]]) #[[ATTR11:[0-9]+]] {
-; CGSCC-NEXT:    [[TMP1:%.*]] = cmpxchg i32* [[P]], i32 0, i32 1 acquire monotonic, align 4
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull dereferenceable(4) [[P:%.*]]) #[[ATTR11:[0-9]+]] {
+; CGSCC-NEXT:    [[TMP1:%.*]] = cmpxchg ptr [[P]], i32 0, i32 1 acquire monotonic, align 4
 ; CGSCC-NEXT:    ret void
 ;
-  cmpxchg i32* %p, i32 0, i32 1 acquire monotonic
+  cmpxchg ptr %p, i32 0, i32 1 acquire monotonic
   ret void
 }
 
-define void @test_cmpxchg_ptr(i32** %p, i32* %q) {
+define void @test_cmpxchg_ptr(ptr %p, ptr %q) {
 ; TUNIT: Function Attrs: nofree norecurse nounwind willreturn memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@test_cmpxchg_ptr
-; TUNIT-SAME: (i32** nocapture nofree noundef nonnull dereferenceable(8) [[P:%.*]], i32* nofree [[Q:%.*]]) #[[ATTR8]] {
-; TUNIT-NEXT:    [[TMP1:%.*]] = cmpxchg i32** [[P]], i32* null, i32* [[Q]] acquire monotonic, align 8
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull dereferenceable(8) [[P:%.*]], ptr nofree [[Q:%.*]]) #[[ATTR8]] {
+; TUNIT-NEXT:    [[TMP1:%.*]] = cmpxchg ptr [[P]], ptr null, ptr [[Q]] acquire monotonic, align 8
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nounwind willreturn memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@test_cmpxchg_ptr
-; CGSCC-SAME: (i32** nocapture nofree noundef nonnull dereferenceable(8) [[P:%.*]], i32* nofree [[Q:%.*]]) #[[ATTR11]] {
-; CGSCC-NEXT:    [[TMP1:%.*]] = cmpxchg i32** [[P]], i32* null, i32* [[Q]] acquire monotonic, align 8
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull dereferenceable(8) [[P:%.*]], ptr nofree [[Q:%.*]]) #[[ATTR11]] {
+; CGSCC-NEXT:    [[TMP1:%.*]] = cmpxchg ptr [[P]], ptr null, ptr [[Q]] acquire monotonic, align 8
 ; CGSCC-NEXT:    ret void
 ;
-  cmpxchg i32** %p, i32* null, i32* %q acquire monotonic
+  cmpxchg ptr %p, ptr null, ptr %q acquire monotonic
   ret void
 }
 
-define void @test_atomicrmw(i32* %p) {
+define void @test_atomicrmw(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nounwind willreturn memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@test_atomicrmw
-; TUNIT-SAME: (i32* nocapture nofree noundef nonnull dereferenceable(4) [[P:%.*]]) #[[ATTR8]] {
-; TUNIT-NEXT:    [[TMP1:%.*]] = atomicrmw add i32* [[P]], i32 1 seq_cst, align 4
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull dereferenceable(4) [[P:%.*]]) #[[ATTR8]] {
+; TUNIT-NEXT:    [[TMP1:%.*]] = atomicrmw add ptr [[P]], i32 1 seq_cst, align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nounwind willreturn memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@test_atomicrmw
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull dereferenceable(4) [[P:%.*]]) #[[ATTR11]] {
-; CGSCC-NEXT:    [[TMP1:%.*]] = atomicrmw add i32* [[P]], i32 1 seq_cst, align 4
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull dereferenceable(4) [[P:%.*]]) #[[ATTR11]] {
+; CGSCC-NEXT:    [[TMP1:%.*]] = atomicrmw add ptr [[P]], i32 1 seq_cst, align 4
 ; CGSCC-NEXT:    ret void
 ;
-  atomicrmw add i32* %p, i32 1 seq_cst
+  atomicrmw add ptr %p, i32 1 seq_cst
   ret void
 }
 
-define void @test_volatile(i32* %x) {
+define void @test_volatile(ptr %x) {
 ; TUNIT: Function Attrs: nofree norecurse nounwind willreturn memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@test_volatile
-; TUNIT-SAME: (i32* nofree align 4 [[X:%.*]]) #[[ATTR8]] {
+; TUNIT-SAME: (ptr nofree align 4 [[X:%.*]]) #[[ATTR8]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[GEP:%.*]] = getelementptr i32, i32* [[X]], i64 1
-; TUNIT-NEXT:    store volatile i32 0, i32* [[GEP]], align 4
+; TUNIT-NEXT:    [[GEP:%.*]] = getelementptr i32, ptr [[X]], i64 1
+; TUNIT-NEXT:    store volatile i32 0, ptr [[GEP]], align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nounwind willreturn memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@test_volatile
-; CGSCC-SAME: (i32* nofree align 4 [[X:%.*]]) #[[ATTR11]] {
+; CGSCC-SAME: (ptr nofree align 4 [[X:%.*]]) #[[ATTR11]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[GEP:%.*]] = getelementptr i32, i32* [[X]], i64 1
-; CGSCC-NEXT:    store volatile i32 0, i32* [[GEP]], align 4
+; CGSCC-NEXT:    [[GEP:%.*]] = getelementptr i32, ptr [[X]], i64 1
+; CGSCC-NEXT:    store volatile i32 0, ptr [[GEP]], align 4
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %gep = getelementptr i32, i32* %x, i64 1
-  store volatile i32 0, i32* %gep, align 4
+  %gep = getelementptr i32, ptr %x, i64 1
+  store volatile i32 0, ptr %gep, align 4
   ret void
 }
 
-define void @nocaptureLaunder(i8* %p) {
+define void @nocaptureLaunder(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@nocaptureLaunder
-; TUNIT-SAME: (i8* nocapture nofree [[P:%.*]]) #[[ATTR5]] {
+; TUNIT-SAME: (ptr nocapture nofree [[P:%.*]]) #[[ATTR5]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[B:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* nofree [[P]]) #[[ATTR18:[0-9]+]]
-; TUNIT-NEXT:    store i8 42, i8* [[B]], align 1
+; TUNIT-NEXT:    [[B:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr nofree [[P]]) #[[ATTR18:[0-9]+]]
+; TUNIT-NEXT:    store i8 42, ptr [[B]], align 1
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@nocaptureLaunder
-; CGSCC-SAME: (i8* nocapture nofree [[P:%.*]]) #[[ATTR7]] {
+; CGSCC-SAME: (ptr nocapture nofree [[P:%.*]]) #[[ATTR7]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[B:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* nofree [[P]]) #[[ATTR17]]
-; CGSCC-NEXT:    store i8 42, i8* [[B]], align 1
+; CGSCC-NEXT:    [[B:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr nofree [[P]]) #[[ATTR17]]
+; CGSCC-NEXT:    store i8 42, ptr [[B]], align 1
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %b = call i8* @llvm.launder.invariant.group.p0i8(i8* %p)
-  store i8 42, i8* %b
+  %b = call ptr @llvm.launder.invariant.group.p0(ptr %p)
+  store i8 42, ptr %b
   ret void
 }
 
- at g2 = global i8* null
-define void @captureLaunder(i8* %p) {
+ at g2 = global ptr null
+define void @captureLaunder(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@captureLaunder
-; TUNIT-SAME: (i8* nofree [[P:%.*]]) #[[ATTR5]] {
-; TUNIT-NEXT:    [[B:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* nofree [[P]]) #[[ATTR18]]
-; TUNIT-NEXT:    store i8* [[B]], i8** @g2, align 8
+; TUNIT-SAME: (ptr nofree [[P:%.*]]) #[[ATTR5]] {
+; TUNIT-NEXT:    [[B:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr nofree [[P]]) #[[ATTR18]]
+; TUNIT-NEXT:    store ptr [[B]], ptr @g2, align 8
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@captureLaunder
-; CGSCC-SAME: (i8* nofree [[P:%.*]]) #[[ATTR7]] {
-; CGSCC-NEXT:    [[B:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* nofree [[P]]) #[[ATTR17]]
-; CGSCC-NEXT:    store i8* [[B]], i8** @g2, align 8
+; CGSCC-SAME: (ptr nofree [[P:%.*]]) #[[ATTR7]] {
+; CGSCC-NEXT:    [[B:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr nofree [[P]]) #[[ATTR17]]
+; CGSCC-NEXT:    store ptr [[B]], ptr @g2, align 8
 ; CGSCC-NEXT:    ret void
 ;
-  %b = call i8* @llvm.launder.invariant.group.p0i8(i8* %p)
-  store i8* %b, i8** @g2
+  %b = call ptr @llvm.launder.invariant.group.p0(ptr %p)
+  store ptr %b, ptr @g2
   ret void
 }
 
-define void @nocaptureStrip(i8* %p) {
+define void @nocaptureStrip(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@nocaptureStrip
-; TUNIT-SAME: (i8* nocapture nofree writeonly [[P:%.*]]) #[[ATTR1]] {
+; TUNIT-SAME: (ptr nocapture nofree writeonly [[P:%.*]]) #[[ATTR1]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[B:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* noalias nofree readnone [[P]]) #[[ATTR18]]
-; TUNIT-NEXT:    store i8 42, i8* [[B]], align 1
+; TUNIT-NEXT:    [[B:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr noalias nofree readnone [[P]]) #[[ATTR18]]
+; TUNIT-NEXT:    store i8 42, ptr [[B]], align 1
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@nocaptureStrip
-; CGSCC-SAME: (i8* nocapture nofree writeonly [[P:%.*]]) #[[ATTR1]] {
+; CGSCC-SAME: (ptr nocapture nofree writeonly [[P:%.*]]) #[[ATTR1]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[B:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* noalias nofree readnone [[P]]) #[[ATTR17]]
-; CGSCC-NEXT:    store i8 42, i8* [[B]], align 1
+; CGSCC-NEXT:    [[B:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr noalias nofree readnone [[P]]) #[[ATTR17]]
+; CGSCC-NEXT:    store i8 42, ptr [[B]], align 1
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %b = call i8* @llvm.strip.invariant.group.p0i8(i8* %p)
-  store i8 42, i8* %b
+  %b = call ptr @llvm.strip.invariant.group.p0(ptr %p)
+  store i8 42, ptr %b
   ret void
 }
 
- at g3 = global i8* null
-define void @captureStrip(i8* %p) {
+ at g3 = global ptr null
+define void @captureStrip(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@captureStrip
-; TUNIT-SAME: (i8* nofree writeonly [[P:%.*]]) #[[ATTR1]] {
-; TUNIT-NEXT:    [[B:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* noalias nofree readnone [[P]]) #[[ATTR18]]
-; TUNIT-NEXT:    store i8* [[B]], i8** @g3, align 8
+; TUNIT-SAME: (ptr nofree writeonly [[P:%.*]]) #[[ATTR1]] {
+; TUNIT-NEXT:    [[B:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr noalias nofree readnone [[P]]) #[[ATTR18]]
+; TUNIT-NEXT:    store ptr [[B]], ptr @g3, align 8
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@captureStrip
-; CGSCC-SAME: (i8* nofree writeonly [[P:%.*]]) #[[ATTR1]] {
-; CGSCC-NEXT:    [[B:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* noalias nofree readnone [[P]]) #[[ATTR17]]
-; CGSCC-NEXT:    store i8* [[B]], i8** @g3, align 8
+; CGSCC-SAME: (ptr nofree writeonly [[P:%.*]]) #[[ATTR1]] {
+; CGSCC-NEXT:    [[B:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr noalias nofree readnone [[P]]) #[[ATTR17]]
+; CGSCC-NEXT:    store ptr [[B]], ptr @g3, align 8
 ; CGSCC-NEXT:    ret void
 ;
-  %b = call i8* @llvm.strip.invariant.group.p0i8(i8* %p)
-  store i8* %b, i8** @g3
+  %b = call ptr @llvm.strip.invariant.group.p0(ptr %p)
+  store ptr %b, ptr @g3
   ret void
 }
 
-define i1 @captureICmp(i32* %x) {
+define i1 @captureICmp(ptr %x) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@captureICmp
-; CHECK-SAME: (i32* nofree readnone [[X:%.*]]) #[[ATTR0]] {
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i32* [[X]], null
+; CHECK-SAME: (ptr nofree readnone [[X:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq ptr [[X]], null
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %1 = icmp eq i32* %x, null
+  %1 = icmp eq ptr %x, null
   ret i1 %1
 }
 
-define i1 @captureICmpRev(i32* %x) {
+define i1 @captureICmpRev(ptr %x) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@captureICmpRev
-; CHECK-SAME: (i32* nofree readnone [[X:%.*]]) #[[ATTR0]] {
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i32* null, [[X]]
+; CHECK-SAME: (ptr nofree readnone [[X:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq ptr null, [[X]]
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %1 = icmp eq i32* null, %x
+  %1 = icmp eq ptr null, %x
   ret i1 %1
 }
 
-define i1 @nocaptureInboundsGEPICmp(i32* %x) {
+define i1 @nocaptureInboundsGEPICmp(ptr %x) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@nocaptureInboundsGEPICmp
-; CHECK-SAME: (i32* nocapture nofree readnone [[X:%.*]]) #[[ATTR0]] {
+; CHECK-SAME: (ptr nocapture nofree readnone [[X:%.*]]) #[[ATTR0]] {
 ; CHECK-NEXT:    ret i1 false
 ;
-  %1 = getelementptr inbounds i32, i32* %x, i32 5
-  %2 = bitcast i32* %1 to i8*
-  %3 = icmp eq i8* %2, null
-  ret i1 %3
+  %1 = getelementptr inbounds i32, ptr %x, i32 5
+  %2 = icmp eq ptr %1, null
+  ret i1 %2
 }
 
-define i1 @nocaptureInboundsGEPICmpRev(i32* %x) {
+define i1 @nocaptureInboundsGEPICmpRev(ptr %x) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@nocaptureInboundsGEPICmpRev
-; CHECK-SAME: (i32* nocapture nofree readnone [[X:%.*]]) #[[ATTR0]] {
+; CHECK-SAME: (ptr nocapture nofree readnone [[X:%.*]]) #[[ATTR0]] {
 ; CHECK-NEXT:    ret i1 true
 ;
-  %1 = getelementptr inbounds i32, i32* %x, i32 5
-  %2 = bitcast i32* %1 to i8*
-  %3 = icmp ne i8* null, %2
-  ret i1 %3
+  %1 = getelementptr inbounds i32, ptr %x, i32 5
+  %2 = icmp ne ptr null, %1
+  ret i1 %2
 }
 
-define i1 @nocaptureDereferenceableOrNullICmp(i32* dereferenceable_or_null(4) %x) {
+define i1 @nocaptureDereferenceableOrNullICmp(ptr dereferenceable_or_null(4) %x) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@nocaptureDereferenceableOrNullICmp
-; CHECK-SAME: (i32* nocapture nofree readnone dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR0]] {
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i32* [[X]] to i8*
-; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i8* [[TMP1]], null
+; CHECK-SAME: (ptr nocapture nofree readnone dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq ptr [[X]], null
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %1 = bitcast i32* %x to i8*
-  %2 = icmp eq i8* %1, null
-  ret i1 %2
+  %1 = icmp eq ptr %x, null
+  ret i1 %1
 }
 
-define i1 @captureDereferenceableOrNullICmp(i32* dereferenceable_or_null(4) %x) null_pointer_is_valid {
+define i1 @captureDereferenceableOrNullICmp(ptr dereferenceable_or_null(4) %x) null_pointer_is_valid {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind null_pointer_is_valid willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@captureDereferenceableOrNullICmp
-; TUNIT-SAME: (i32* nofree readnone dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR9:[0-9]+]] {
-; TUNIT-NEXT:    [[TMP1:%.*]] = bitcast i32* [[X]] to i8*
-; TUNIT-NEXT:    [[TMP2:%.*]] = icmp eq i8* [[TMP1]], null
+; TUNIT-SAME: (ptr nofree readnone dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR9:[0-9]+]] {
+; TUNIT-NEXT:    [[TMP2:%.*]] = icmp eq ptr [[X]], null
 ; TUNIT-NEXT:    ret i1 [[TMP2]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind null_pointer_is_valid willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@captureDereferenceableOrNullICmp
-; CGSCC-SAME: (i32* nofree readnone dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR12:[0-9]+]] {
-; CGSCC-NEXT:    [[TMP1:%.*]] = bitcast i32* [[X]] to i8*
-; CGSCC-NEXT:    [[TMP2:%.*]] = icmp eq i8* [[TMP1]], null
+; CGSCC-SAME: (ptr nofree readnone dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR12:[0-9]+]] {
+; CGSCC-NEXT:    [[TMP2:%.*]] = icmp eq ptr [[X]], null
 ; CGSCC-NEXT:    ret i1 [[TMP2]]
 ;
-  %1 = bitcast i32* %x to i8*
-  %2 = icmp eq i8* %1, null
-  ret i1 %2
+  %1 = icmp eq ptr %x, null
+  ret i1 %1
 }
 
-declare void @unknown(i8*)
+declare void @unknown(ptr)
 ; We know that 'null' in AS 0 does not alias anything and cannot be captured. Though the latter is not qurried -> derived atm.
 define void @test_callsite() {
 ; CHECK-LABEL: define {{[^@]+}}@test_callsite() {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    call void @unknown(i8* noalias nocapture noundef align 4294967296 null)
+; CHECK-NEXT:    call void @unknown(ptr noalias nocapture noundef align 4294967296 null)
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  call void @unknown(i8* null)
+  call void @unknown(ptr null)
   ret void
 }
 
-declare i8* @unknownpi8pi8(i8*,i8* returned)
-define i8* @test_returned1(i8* %A, i8* returned %B) nounwind readonly {
+declare ptr @unknownpi8pi8(ptr,ptr returned)
+define ptr @test_returned1(ptr %A, ptr returned %B) nounwind readonly {
 ; TUNIT: Function Attrs: nounwind memory(read)
 ; TUNIT-LABEL: define {{[^@]+}}@test_returned1
-; TUNIT-SAME: (i8* nocapture [[A:%.*]], i8* returned [[B:%.*]]) #[[ATTR4]] {
+; TUNIT-SAME: (ptr nocapture [[A:%.*]], ptr returned [[B:%.*]]) #[[ATTR4]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[P:%.*]] = call i8* @unknownpi8pi8(i8* [[A]], i8* [[B]])
-; TUNIT-NEXT:    ret i8* [[P]]
+; TUNIT-NEXT:    [[P:%.*]] = call ptr @unknownpi8pi8(ptr [[A]], ptr [[B]])
+; TUNIT-NEXT:    ret ptr [[P]]
 ;
 ; CGSCC: Function Attrs: nounwind memory(read)
 ; CGSCC-LABEL: define {{[^@]+}}@test_returned1
-; CGSCC-SAME: (i8* nocapture [[A:%.*]], i8* returned [[B:%.*]]) #[[ATTR5]] {
+; CGSCC-SAME: (ptr nocapture [[A:%.*]], ptr returned [[B:%.*]]) #[[ATTR5]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[P:%.*]] = call i8* @unknownpi8pi8(i8* [[A]], i8* [[B]])
-; CGSCC-NEXT:    ret i8* [[P]]
+; CGSCC-NEXT:    [[P:%.*]] = call ptr @unknownpi8pi8(ptr [[A]], ptr [[B]])
+; CGSCC-NEXT:    ret ptr [[P]]
 ;
 entry:
-  %p = call i8* @unknownpi8pi8(i8* %A, i8* %B)
-  ret i8* %p
+  %p = call ptr @unknownpi8pi8(ptr %A, ptr %B)
+  ret ptr %p
 }
 
-define i8* @test_returned2(i8* %A, i8* %B) {
+define ptr @test_returned2(ptr %A, ptr %B) {
 ; TUNIT: Function Attrs: nounwind memory(read)
 ; TUNIT-LABEL: define {{[^@]+}}@test_returned2
-; TUNIT-SAME: (i8* readonly [[A:%.*]], i8* readonly [[B:%.*]]) #[[ATTR4]] {
+; TUNIT-SAME: (ptr readonly [[A:%.*]], ptr readonly [[B:%.*]]) #[[ATTR4]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[P:%.*]] = call i8* @unknownpi8pi8(i8* readonly [[A]], i8* readonly [[B]]) #[[ATTR4]]
-; TUNIT-NEXT:    ret i8* [[P]]
+; TUNIT-NEXT:    [[P:%.*]] = call ptr @unknownpi8pi8(ptr readonly [[A]], ptr readonly [[B]]) #[[ATTR4]]
+; TUNIT-NEXT:    ret ptr [[P]]
 ;
 ; CGSCC: Function Attrs: nounwind memory(read)
 ; CGSCC-LABEL: define {{[^@]+}}@test_returned2
-; CGSCC-SAME: (i8* readonly [[A:%.*]], i8* readonly [[B:%.*]]) #[[ATTR5]] {
+; CGSCC-SAME: (ptr readonly [[A:%.*]], ptr readonly [[B:%.*]]) #[[ATTR5]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[P:%.*]] = call i8* @unknownpi8pi8(i8* readonly [[A]], i8* readonly [[B]]) #[[ATTR5]]
-; CGSCC-NEXT:    ret i8* [[P]]
+; CGSCC-NEXT:    [[P:%.*]] = call ptr @unknownpi8pi8(ptr readonly [[A]], ptr readonly [[B]]) #[[ATTR5]]
+; CGSCC-NEXT:    ret ptr [[P]]
 ;
 entry:
-  %p = call i8* @unknownpi8pi8(i8* %A, i8* %B) nounwind readonly
-  ret i8* %p
+  %p = call ptr @unknownpi8pi8(ptr %A, ptr %B) nounwind readonly
+  ret ptr %p
 }
 
-declare i8* @maybe_returned_ptr(i8* readonly %ptr) readonly nounwind willreturn
-declare i8 @maybe_returned_val(i8* %ptr) readonly nounwind willreturn
+declare ptr @maybe_returned_ptr(ptr readonly %ptr) readonly nounwind willreturn
+declare i8 @maybe_returned_val(ptr %ptr) readonly nounwind willreturn
 declare void @val_use(i8 %ptr) readonly nounwind willreturn
 
 ; FIXME: Both pointers should be nocapture
-define void @ptr_uses(i8* %ptr, i8* %wptr) {
+define void @ptr_uses(ptr %ptr, ptr %wptr) {
 ; TUNIT: Function Attrs: nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@ptr_uses
-; TUNIT-SAME: (i8* [[PTR:%.*]], i8* nocapture nofree noundef nonnull writeonly dereferenceable(1) [[WPTR:%.*]]) #[[ATTR11:[0-9]+]] {
-; TUNIT-NEXT:    store i8 0, i8* [[WPTR]], align 1
+; TUNIT-SAME: (ptr [[PTR:%.*]], ptr nocapture nofree noundef nonnull writeonly dereferenceable(1) [[WPTR:%.*]]) #[[ATTR11:[0-9]+]] {
+; TUNIT-NEXT:    store i8 0, ptr [[WPTR]], align 1
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@ptr_uses
-; CGSCC-SAME: (i8* [[PTR:%.*]], i8* nocapture nofree noundef nonnull writeonly dereferenceable(1) [[WPTR:%.*]]) #[[ATTR14]] {
-; CGSCC-NEXT:    store i8 0, i8* [[WPTR]], align 1
+; CGSCC-SAME: (ptr [[PTR:%.*]], ptr nocapture nofree noundef nonnull writeonly dereferenceable(1) [[WPTR:%.*]]) #[[ATTR14]] {
+; CGSCC-NEXT:    store i8 0, ptr [[WPTR]], align 1
 ; CGSCC-NEXT:    ret void
 ;
-  %call_ptr = call i8* @maybe_returned_ptr(i8* %ptr)
-  %call_val = call i8 @maybe_returned_val(i8* %call_ptr)
+  %call_ptr = call ptr @maybe_returned_ptr(ptr %ptr)
+  %call_val = call i8 @maybe_returned_val(ptr %call_ptr)
   call void @val_use(i8 %call_val)
-  store i8 0, i8* %wptr
+  store i8 0, ptr %wptr
   ret void
 }
 
-declare i8* @llvm.launder.invariant.group.p0i8(i8*)
-declare i8* @llvm.strip.invariant.group.p0i8(i8*)
+declare ptr @llvm.launder.invariant.group.p0(ptr)
+declare ptr @llvm.strip.invariant.group.p0(ptr)
 ;.
 ; TUNIT: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind willreturn memory(none) }
 ; TUNIT: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind willreturn memory(write) }

diff  --git a/llvm/test/Transforms/Attributor/nonnull.ll b/llvm/test/Transforms/Attributor/nonnull.ll
index 5a1e37cc73133..09bebee114d21 100644
--- a/llvm/test/Transforms/Attributor/nonnull.ll
+++ b/llvm/test/Transforms/Attributor/nonnull.ll
@@ -5,139 +5,139 @@
 
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 
-declare nonnull i8* @ret_nonnull()
+declare nonnull ptr @ret_nonnull()
 declare void @llvm.assume(i1)
 
 ; Return a pointer trivially nonnull (call return attribute)
-define i8* @test1() {
+define ptr @test1() {
 ; CHECK-LABEL: define {{[^@]+}}@test1() {
-; CHECK-NEXT:    [[RET:%.*]] = call nonnull i8* @ret_nonnull()
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call nonnull ptr @ret_nonnull()
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
-  %ret = call i8* @ret_nonnull()
-  ret i8* %ret
+  %ret = call ptr @ret_nonnull()
+  ret ptr %ret
 }
 
 ; Return a pointer trivially nonnull (argument attribute)
-define i8* @test2(i8* nonnull %p) {
+define ptr @test2(ptr nonnull %p) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@test2
-; CHECK-SAME: (i8* nofree nonnull readnone returned "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR1:[0-9]+]] {
-; CHECK-NEXT:    ret i8* [[P]]
+; CHECK-SAME: (ptr nofree nonnull readnone returned "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR1:[0-9]+]] {
+; CHECK-NEXT:    ret ptr [[P]]
 ;
-  ret i8* %p
+  ret ptr %p
 }
 
-define i8* @test2A(i1 %c, i8* %ret) {
+define ptr @test2A(i1 %c, ptr %ret) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@test2A
-; CHECK-SAME: (i1 [[C:%.*]], i8* nofree nonnull readnone returned "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR2:[0-9]+]] {
+; CHECK-SAME: (i1 [[C:%.*]], ptr nofree nonnull readnone returned "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR2:[0-9]+]] {
 ; CHECK-NEXT:    br i1 [[C]], label [[A:%.*]], label [[B:%.*]]
 ; CHECK:       A:
-; CHECK-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13:[0-9]+]] [ "nonnull"(i8* [[RET]]) ]
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13:[0-9]+]] [ "nonnull"(ptr [[RET]]) ]
+; CHECK-NEXT:    ret ptr [[RET]]
 ; CHECK:       B:
-; CHECK-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "nonnull"(i8* [[RET]]) ]
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "nonnull"(ptr [[RET]]) ]
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
   br i1 %c, label %A, label %B
 A:
-  call void @llvm.assume(i1 true) [ "nonnull"(i8* %ret) ]
-  ret i8* %ret
+  call void @llvm.assume(i1 true) [ "nonnull"(ptr %ret) ]
+  ret ptr %ret
 B:
-  call void @llvm.assume(i1 true) [ "nonnull"(i8* %ret) ]
-  ret i8* %ret
+  call void @llvm.assume(i1 true) [ "nonnull"(ptr %ret) ]
+  ret ptr %ret
 }
 
-define i8* @test2B(i1 %c, i8* %ret) {
+define ptr @test2B(i1 %c, ptr %ret) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@test2B
-; CHECK-SAME: (i1 [[C:%.*]], i8* nofree nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR2]] {
+; CHECK-SAME: (i1 [[C:%.*]], ptr nofree nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR2]] {
 ; CHECK-NEXT:    br i1 [[C]], label [[A:%.*]], label [[B:%.*]]
 ; CHECK:       A:
-; CHECK-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "dereferenceable"(i8* [[RET]], i32 4) ]
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "dereferenceable"(ptr [[RET]], i32 4) ]
+; CHECK-NEXT:    ret ptr [[RET]]
 ; CHECK:       B:
-; CHECK-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "dereferenceable"(i8* [[RET]], i32 4) ]
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "dereferenceable"(ptr [[RET]], i32 4) ]
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
   br i1 %c, label %A, label %B
 A:
-  call void @llvm.assume(i1 true) [ "dereferenceable"(i8* %ret, i32 4) ]
-  ret i8* %ret
+  call void @llvm.assume(i1 true) [ "dereferenceable"(ptr %ret, i32 4) ]
+  ret ptr %ret
 B:
-  call void @llvm.assume(i1 true) [ "dereferenceable"(i8* %ret, i32 4) ]
-  ret i8* %ret
+  call void @llvm.assume(i1 true) [ "dereferenceable"(ptr %ret, i32 4) ]
+  ret ptr %ret
 }
 
 ; Given an SCC where one of the functions can not be marked nonnull,
 ; can we still mark the other one which is trivially nonnull
-define i8* @scc_binder(i1 %c) {
+define ptr @scc_binder(i1 %c) {
 ; CHECK-LABEL: define {{[^@]+}}@scc_binder
 ; CHECK-SAME: (i1 [[C:%.*]]) {
 ; CHECK-NEXT:    br i1 [[C]], label [[REC:%.*]], label [[END:%.*]]
 ; CHECK:       rec:
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @test3(i1 noundef [[C]])
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @test3(i1 noundef [[C]])
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    ret i8* null
+; CHECK-NEXT:    ret ptr null
 ;
   br i1 %c, label %rec, label %end
 rec:
-  call i8* @test3(i1 %c)
+  call ptr @test3(i1 %c)
   br label %end
 end:
-  ret i8* null
+  ret ptr null
 }
 
-define i8* @test3(i1 %c) {
+define ptr @test3(i1 %c) {
 ; CHECK-LABEL: define {{[^@]+}}@test3
 ; CHECK-SAME: (i1 [[C:%.*]]) {
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @scc_binder(i1 [[C]])
-; CHECK-NEXT:    [[RET:%.*]] = call nonnull i8* @ret_nonnull()
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @scc_binder(i1 [[C]])
+; CHECK-NEXT:    [[RET:%.*]] = call nonnull ptr @ret_nonnull()
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
-  call i8* @scc_binder(i1 %c)
-  %ret = call i8* @ret_nonnull()
-  ret i8* %ret
+  call ptr @scc_binder(i1 %c)
+  %ret = call ptr @ret_nonnull()
+  ret ptr %ret
 }
 
 ; Given a mutual recursive set of functions, we can mark them
 ; nonnull if neither can ever return null.  (In this case, they
 ; just never return period.)
-define i8* @test4_helper() {
+define ptr @test4_helper() {
 ; TUNIT: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@test4_helper
 ; TUNIT-SAME: () #[[ATTR3:[0-9]+]] {
-; TUNIT-NEXT:    ret i8* undef
+; TUNIT-NEXT:    ret ptr undef
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@test4_helper
 ; CGSCC-SAME: () #[[ATTR1]] {
-; CGSCC-NEXT:    ret i8* undef
+; CGSCC-NEXT:    ret ptr undef
 ;
-  %ret = call i8* @test4()
-  ret i8* %ret
+  %ret = call ptr @test4()
+  ret ptr %ret
 }
 
-define i8* @test4() {
+define ptr @test4() {
 ; TUNIT: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@test4
 ; TUNIT-SAME: () #[[ATTR3]] {
-; TUNIT-NEXT:    ret i8* undef
+; TUNIT-NEXT:    ret ptr undef
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@test4
 ; CGSCC-SAME: () #[[ATTR1]] {
-; CGSCC-NEXT:    ret i8* undef
+; CGSCC-NEXT:    ret ptr undef
 ;
-  %ret = call i8* @test4_helper()
-  ret i8* %ret
+  %ret = call ptr @test4_helper()
+  ret ptr %ret
 }
 
 ; Given a mutual recursive set of functions which *can* return null
 ; make sure we haven't marked them as nonnull.
-define i8* @test5_helper(i1 %c) {
+define ptr @test5_helper(i1 %c) {
 ; TUNIT: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@test5_helper
 ; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR3]] {
@@ -145,7 +145,7 @@ define i8* @test5_helper(i1 %c) {
 ; TUNIT:       rec:
 ; TUNIT-NEXT:    br label [[END]]
 ; TUNIT:       end:
-; TUNIT-NEXT:    ret i8* null
+; TUNIT-NEXT:    ret ptr null
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@test5_helper
@@ -154,39 +154,39 @@ define i8* @test5_helper(i1 %c) {
 ; CGSCC:       rec:
 ; CGSCC-NEXT:    br label [[END]]
 ; CGSCC:       end:
-; CGSCC-NEXT:    ret i8* null
+; CGSCC-NEXT:    ret ptr null
 ;
   br i1 %c, label %rec, label %end
 rec:
-  %ret = call i8* @test5(i1 %c)
+  %ret = call ptr @test5(i1 %c)
   br label %end
 end:
-  ret i8* null
+  ret ptr null
 }
 
-define i8* @test5(i1 %c) {
+define ptr @test5(i1 %c) {
 ; TUNIT: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@test5
 ; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR3]] {
-; TUNIT-NEXT:    ret i8* null
+; TUNIT-NEXT:    ret ptr null
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@test5
 ; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
-; CGSCC-NEXT:    ret i8* null
+; CGSCC-NEXT:    ret ptr null
 ;
-  %ret = call i8* @test5_helper(i1 %c)
-  ret i8* %ret
+  %ret = call ptr @test5_helper(i1 %c)
+  ret ptr %ret
 }
 
 ; Local analysis, but going through a self recursive phi
-define i8* @test6a() {
+define ptr @test6a() {
 ;
 ; TUNIT: Function Attrs: noreturn
 ; TUNIT-LABEL: define {{[^@]+}}@test6a
 ; TUNIT-SAME: () #[[ATTR4:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[RET:%.*]] = call i8* @ret_nonnull()
+; TUNIT-NEXT:    [[RET:%.*]] = call ptr @ret_nonnull()
 ; TUNIT-NEXT:    br label [[LOOP:%.*]]
 ; TUNIT:       loop:
 ; TUNIT-NEXT:    unreachable
@@ -197,7 +197,7 @@ define i8* @test6a() {
 ; CGSCC-LABEL: define {{[^@]+}}@test6a
 ; CGSCC-SAME: () #[[ATTR3:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[RET:%.*]] = call i8* @ret_nonnull()
+; CGSCC-NEXT:    [[RET:%.*]] = call ptr @ret_nonnull()
 ; CGSCC-NEXT:    br label [[LOOP:%.*]]
 ; CGSCC:       loop:
 ; CGSCC-NEXT:    unreachable
@@ -205,84 +205,83 @@ define i8* @test6a() {
 ; CGSCC-NEXT:    unreachable
 ;
 entry:
-  %ret = call i8* @ret_nonnull()
+  %ret = call ptr @ret_nonnull()
   br label %loop
 loop:
-  %phi = phi i8* [%ret, %entry], [%phi, %loop]
+  %phi = phi ptr [%ret, %entry], [%phi, %loop]
   br i1 undef, label %loop, label %exit
 exit:
-  ret i8* %phi
+  ret ptr %phi
 }
 
-define i8* @test6b(i1 %c) {
+define ptr @test6b(i1 %c) {
 ; CHECK-LABEL: define {{[^@]+}}@test6b
 ; CHECK-SAME: (i1 [[C:%.*]]) {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[RET:%.*]] = call nonnull i8* @ret_nonnull()
+; CHECK-NEXT:    [[RET:%.*]] = call nonnull ptr @ret_nonnull()
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
 ; CHECK:       loop:
-; CHECK-NEXT:    [[PHI:%.*]] = phi i8* [ [[RET]], [[ENTRY:%.*]] ], [ [[RET]], [[LOOP]] ]
+; CHECK-NEXT:    [[PHI:%.*]] = phi ptr [ [[RET]], [[ENTRY:%.*]] ], [ [[RET]], [[LOOP]] ]
 ; CHECK-NEXT:    br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]
 ; CHECK:       exit:
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 entry:
-  %ret = call i8* @ret_nonnull()
+  %ret = call ptr @ret_nonnull()
   br label %loop
 loop:
-  %phi = phi i8* [%ret, %entry], [%phi, %loop]
+  %phi = phi ptr [%ret, %entry], [%phi, %loop]
   br i1 %c, label %loop, label %exit
 exit:
-  ret i8* %phi
+  ret ptr %phi
 }
 
-define i8* @test7(i8* %a) {
+define ptr @test7(ptr %a) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@test7
-; CHECK-SAME: (i8* nofree readnone returned "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
-; CHECK-NEXT:    ret i8* [[A]]
+; CHECK-SAME: (ptr nofree readnone returned "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT:    ret ptr [[A]]
 ;
-  %b = getelementptr inbounds i8, i8* %a, i64 0
-  ret i8* %b
+  ret ptr %a
 }
 
-define i8* @test8(i8* %a) {
+define ptr @test8(ptr %a) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@test8
-; CHECK-SAME: (i8* nofree readnone "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
-; CHECK-NEXT:    [[B:%.*]] = getelementptr inbounds i8, i8* [[A]], i64 1
-; CHECK-NEXT:    ret i8* [[B]]
+; CHECK-SAME: (ptr nofree readnone "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT:    [[B:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 1
+; CHECK-NEXT:    ret ptr [[B]]
 ;
-  %b = getelementptr inbounds i8, i8* %a, i64 1
-  ret i8* %b
+  %b = getelementptr inbounds i8, ptr %a, i64 1
+  ret ptr %b
 }
 
-define i8* @test9(i8* %a, i64 %n) {
+define ptr @test9(ptr %a, i64 %n) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@test9
-; CHECK-SAME: (i8* nofree readnone "no-capture-maybe-returned" [[A:%.*]], i64 [[N:%.*]]) #[[ATTR1]] {
-; CHECK-NEXT:    [[B:%.*]] = getelementptr inbounds i8, i8* [[A]], i64 [[N]]
-; CHECK-NEXT:    ret i8* [[B]]
+; CHECK-SAME: (ptr nofree readnone "no-capture-maybe-returned" [[A:%.*]], i64 [[N:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT:    [[B:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[N]]
+; CHECK-NEXT:    ret ptr [[B]]
 ;
-  %b = getelementptr inbounds i8, i8* %a, i64 %n
-  ret i8* %b
+  %b = getelementptr inbounds i8, ptr %a, i64 %n
+  ret ptr %b
 }
 
-; ATTRIBUTOR_OPM: define i8* @test10
-; ATTRIBUTOR_NPM: define nonnull i8* @test10
-define i8* @test10(i8* %a, i64 %n) {
+; ATTRIBUTOR_OPM: define ptr @test10
+; ATTRIBUTOR_NPM: define nonnull ptr @test10
+define ptr @test10(ptr %a, i64 %n) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(inaccessiblemem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@test10
-; CHECK-SAME: (i8* nofree readnone "no-capture-maybe-returned" [[A:%.*]], i64 [[N:%.*]]) #[[ATTR2]] {
+; CHECK-SAME: (ptr nofree readnone "no-capture-maybe-returned" [[A:%.*]], i64 [[N:%.*]]) #[[ATTR2]] {
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i64 [[N]], 0
 ; CHECK-NEXT:    call void @llvm.assume(i1 noundef [[CMP]]) #[[ATTR13]]
-; CHECK-NEXT:    [[B:%.*]] = getelementptr inbounds i8, i8* [[A]], i64 [[N]]
-; CHECK-NEXT:    ret i8* [[B]]
+; CHECK-NEXT:    [[B:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[N]]
+; CHECK-NEXT:    ret ptr [[B]]
 ;
   %cmp = icmp ne i64 %n, 0
   call void @llvm.assume(i1 %cmp)
-  %b = getelementptr inbounds i8, i8* %a, i64 %n
-  ret i8* %b
+  %b = getelementptr inbounds i8, ptr %a, i64 %n
+  ret ptr %b
 }
 
 ; TEST 11
@@ -290,92 +289,92 @@ define i8* @test10(i8* %a, i64 %n) {
 ;   return p? p: nonnull();
 ; }
 ; FIXME: missing nonnull
-define i8* @test11(i8*) local_unnamed_addr {
+define ptr @test11(ptr) local_unnamed_addr {
 ; CHECK-LABEL: define {{[^@]+}}@test11
-; CHECK-SAME: (i8* [[TMP0:%.*]]) local_unnamed_addr {
-; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i8* [[TMP0]], null
+; CHECK-SAME: (ptr [[TMP0:%.*]]) local_unnamed_addr {
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null
 ; CHECK-NEXT:    br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP5:%.*]]
 ; CHECK:       3:
-; CHECK-NEXT:    [[TMP4:%.*]] = tail call i8* @ret_nonnull()
+; CHECK-NEXT:    [[TMP4:%.*]] = tail call ptr @ret_nonnull()
 ; CHECK-NEXT:    br label [[TMP5]]
 ; CHECK:       5:
-; CHECK-NEXT:    [[TMP6:%.*]] = phi i8* [ [[TMP4]], [[TMP3]] ], [ [[TMP0]], [[TMP1:%.*]] ]
-; CHECK-NEXT:    ret i8* [[TMP6]]
+; CHECK-NEXT:    [[TMP6:%.*]] = phi ptr [ [[TMP4]], [[TMP3]] ], [ [[TMP0]], [[TMP1:%.*]] ]
+; CHECK-NEXT:    ret ptr [[TMP6]]
 ;
-  %2 = icmp eq i8* %0, null
+  %2 = icmp eq ptr %0, null
   br i1 %2, label %3, label %5
 
 ; <label>:3:                                      ; preds = %1
-  %4 = tail call i8* @ret_nonnull()
+  %4 = tail call ptr @ret_nonnull()
   br label %5
 
 ; <label>:5:                                      ; preds = %3, %1
-  %6 = phi i8* [ %4, %3 ], [ %0, %1 ]
-  ret i8* %6
+  %6 = phi ptr [ %4, %3 ], [ %0, %1 ]
+  ret ptr %6
 }
 
 ; TEST 12
 ; Simple CallSite Test
-declare void @test12_helper(i8*)
-define void @test12(i8* nonnull %a) {
+declare void @test12_helper(ptr)
+define void @test12(ptr nonnull %a) {
 ; CHECK-LABEL: define {{[^@]+}}@test12
-; CHECK-SAME: (i8* nonnull [[A:%.*]]) {
-; CHECK-NEXT:    tail call void @test12_helper(i8* nonnull [[A]])
+; CHECK-SAME: (ptr nonnull [[A:%.*]]) {
+; CHECK-NEXT:    tail call void @test12_helper(ptr nonnull [[A]])
 ; CHECK-NEXT:    ret void
 ;
-  tail call void @test12_helper(i8* %a)
+  tail call void @test12_helper(ptr %a)
   ret void
 }
 
 ; TEST 13
 ; Simple Argument Tests
-declare i8* @unknown()
+declare ptr @unknown()
 define void @test13_helper() {
 ; TUNIT-LABEL: define {{[^@]+}}@test13_helper() {
-; TUNIT-NEXT:    [[NONNULLPTR:%.*]] = tail call nonnull i8* @ret_nonnull()
-; TUNIT-NEXT:    [[MAYBENULLPTR:%.*]] = tail call i8* @unknown()
-; TUNIT-NEXT:    tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]]) #[[ATTR5:[0-9]+]]
-; TUNIT-NEXT:    tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]]) #[[ATTR5]]
+; TUNIT-NEXT:    [[NONNULLPTR:%.*]] = tail call nonnull ptr @ret_nonnull()
+; TUNIT-NEXT:    [[MAYBENULLPTR:%.*]] = tail call ptr @unknown()
+; TUNIT-NEXT:    tail call void @test13(ptr noalias nocapture nofree nonnull readnone [[NONNULLPTR]], ptr noalias nocapture nofree nonnull readnone [[NONNULLPTR]], ptr noalias nocapture nofree readnone [[MAYBENULLPTR]]) #[[ATTR5:[0-9]+]]
+; TUNIT-NEXT:    tail call void @test13(ptr noalias nocapture nofree nonnull readnone [[NONNULLPTR]], ptr noalias nocapture nofree readnone [[MAYBENULLPTR]], ptr noalias nocapture nofree nonnull readnone [[NONNULLPTR]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@test13_helper() {
-; CGSCC-NEXT:    [[NONNULLPTR:%.*]] = tail call nonnull i8* @ret_nonnull()
-; CGSCC-NEXT:    [[MAYBENULLPTR:%.*]] = tail call i8* @unknown()
-; CGSCC-NEXT:    tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]]) #[[ATTR4:[0-9]+]]
-; CGSCC-NEXT:    tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]]) #[[ATTR4]]
+; CGSCC-NEXT:    [[NONNULLPTR:%.*]] = tail call nonnull ptr @ret_nonnull()
+; CGSCC-NEXT:    [[MAYBENULLPTR:%.*]] = tail call ptr @unknown()
+; CGSCC-NEXT:    tail call void @test13(ptr noalias nocapture nofree nonnull readnone [[NONNULLPTR]], ptr noalias nocapture nofree nonnull readnone [[NONNULLPTR]], ptr noalias nocapture nofree readnone [[MAYBENULLPTR]]) #[[ATTR4:[0-9]+]]
+; CGSCC-NEXT:    tail call void @test13(ptr noalias nocapture nofree nonnull readnone [[NONNULLPTR]], ptr noalias nocapture nofree readnone [[MAYBENULLPTR]], ptr noalias nocapture nofree nonnull readnone [[NONNULLPTR]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
-  %nonnullptr = tail call i8* @ret_nonnull()
-  %maybenullptr = tail call i8* @unknown()
-  tail call void @test13(i8* %nonnullptr, i8* %nonnullptr, i8* %maybenullptr)
-  tail call void @test13(i8* %nonnullptr, i8* %maybenullptr, i8* %nonnullptr)
+  %nonnullptr = tail call ptr @ret_nonnull()
+  %maybenullptr = tail call ptr @unknown()
+  tail call void @test13(ptr %nonnullptr, ptr %nonnullptr, ptr %maybenullptr)
+  tail call void @test13(ptr %nonnullptr, ptr %maybenullptr, ptr %nonnullptr)
   ret void
 }
-define internal void @test13(i8* %a, i8* %b, i8* %c) {
+define internal void @test13(ptr %a, ptr %b, ptr %c) {
 ;
 ; TUNIT: Function Attrs: nounwind
 ; TUNIT-LABEL: define {{[^@]+}}@test13
-; TUNIT-SAME: (i8* noalias nocapture nofree nonnull readnone [[A:%.*]], i8* noalias nocapture nofree readnone [[B:%.*]], i8* noalias nocapture nofree readnone [[C:%.*]]) #[[ATTR5]] {
-; TUNIT-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[A]]) #[[ATTR5]]
-; TUNIT-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[B]]) #[[ATTR5]]
-; TUNIT-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[C]]) #[[ATTR5]]
+; TUNIT-SAME: (ptr noalias nocapture nofree nonnull readnone [[A:%.*]], ptr noalias nocapture nofree readnone [[B:%.*]], ptr noalias nocapture nofree readnone [[C:%.*]]) #[[ATTR5]] {
+; TUNIT-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[A]]) #[[ATTR5]]
+; TUNIT-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree readnone [[B]]) #[[ATTR5]]
+; TUNIT-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree readnone [[C]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nounwind
 ; CGSCC-LABEL: define {{[^@]+}}@test13
-; CGSCC-SAME: (i8* noalias nocapture nofree nonnull readnone [[A:%.*]], i8* noalias nocapture nofree readnone [[B:%.*]], i8* noalias nocapture nofree readnone [[C:%.*]]) #[[ATTR4]] {
-; CGSCC-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[A]]) #[[ATTR4]]
-; CGSCC-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[B]]) #[[ATTR4]]
-; CGSCC-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[C]]) #[[ATTR4]]
+; CGSCC-SAME: (ptr noalias nocapture nofree nonnull readnone [[A:%.*]], ptr noalias nocapture nofree readnone [[B:%.*]], ptr noalias nocapture nofree readnone [[C:%.*]]) #[[ATTR4]] {
+; CGSCC-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[A]]) #[[ATTR4]]
+; CGSCC-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree readnone [[B]]) #[[ATTR4]]
+; CGSCC-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree readnone [[C]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @use_i8_ptr(i8* %a)
-  call void @use_i8_ptr(i8* %b)
-  call void @use_i8_ptr(i8* %c)
+  call void @use_i8_ptr(ptr %a)
+  call void @use_i8_ptr(ptr %b)
+  call void @use_i8_ptr(ptr %c)
   ret void
 }
 
-declare nonnull i8* @nonnull()
+declare nonnull ptr @nonnull()
 
 ; TEST 14
 ; Complex propagation
@@ -383,179 +382,179 @@ declare nonnull i8* @nonnull()
 
 ; * Argument
 ; 1. In f1:bb6, %arg can be marked with nonnull because of the comparison in bb1
-; 2. Because f2 is internal function, f2(i32* %arg) -> @f2(i32* nonnull %arg)
+; 2. Because f2 is internal function, f2(ptr %arg) -> @f2(ptr nonnull %arg)
 ; 3. In f1:bb4 %tmp5 is nonnull and f3 is internal function.
-;    Then, f3(i32* %arg) -> @f3(i32* nonnull %arg)
-; 4. We get nonnull in whole f1 call sites so f1(i32* %arg) -> @f1(i32* nonnull %arg)
+;    Then, f3(ptr %arg) -> @f3(ptr nonnull %arg)
+; 4. We get nonnull in whole f1 call sites so f1(ptr %arg) -> @f1(ptr nonnull %arg)
 
 
-define internal i32* @f1(i32* %arg) {
-; FIXME: missing nonnull It should be nonnull @f1(i32* nonnull readonly %arg)
+define internal ptr @f1(ptr %arg) {
+; FIXME: missing nonnull It should be nonnull @f1(ptr nonnull readonly %arg)
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: read)
 ; TUNIT-LABEL: define {{[^@]+}}@f1
-; TUNIT-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR6:[0-9]+]] {
+; TUNIT-SAME: (ptr nofree readonly [[ARG:%.*]]) #[[ATTR6:[0-9]+]] {
 ; TUNIT-NEXT:  bb:
-; TUNIT-NEXT:    [[TMP:%.*]] = icmp eq i32* [[ARG]], null
+; TUNIT-NEXT:    [[TMP:%.*]] = icmp eq ptr [[ARG]], null
 ; TUNIT-NEXT:    br i1 [[TMP]], label [[BB9:%.*]], label [[BB1:%.*]]
 ; TUNIT:       bb1:
-; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, i32* [[ARG]], align 4
+; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ARG]], align 4
 ; TUNIT-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 0
 ; TUNIT-NEXT:    br i1 [[TMP3]], label [[BB6:%.*]], label [[BB4:%.*]]
 ; TUNIT:       bb4:
-; TUNIT-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i32, i32* [[ARG]], i64 1
-; TUNIT-NEXT:    [[TMP5B:%.*]] = tail call i32* @f3(i32* nofree nonnull readonly [[TMP5]]) #[[ATTR14:[0-9]+]]
-; TUNIT-NEXT:    [[TMP5C:%.*]] = getelementptr inbounds i32, i32* [[TMP5B]], i64 -1
+; TUNIT-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[ARG]], i64 1
+; TUNIT-NEXT:    [[TMP5B:%.*]] = tail call ptr @f3(ptr nofree nonnull readonly [[TMP5]]) #[[ATTR14:[0-9]+]]
+; TUNIT-NEXT:    [[TMP5C:%.*]] = getelementptr inbounds i32, ptr [[TMP5B]], i64 -1
 ; TUNIT-NEXT:    br label [[BB9]]
 ; TUNIT:       bb6:
-; TUNIT-NEXT:    [[TMP7:%.*]] = tail call i32* @f2(i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR14]]
-; TUNIT-NEXT:    ret i32* [[TMP7]]
+; TUNIT-NEXT:    [[TMP7:%.*]] = tail call ptr @f2(ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR14]]
+; TUNIT-NEXT:    ret ptr [[TMP7]]
 ; TUNIT:       bb9:
-; TUNIT-NEXT:    [[TMP10:%.*]] = phi i32* [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to i32*), [[BB:%.*]] ]
-; TUNIT-NEXT:    ret i32* [[TMP10]]
+; TUNIT-NEXT:    [[TMP10:%.*]] = phi ptr [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to ptr), [[BB:%.*]] ]
+; TUNIT-NEXT:    ret ptr [[TMP10]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@f1
-; CGSCC-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR5:[0-9]+]] {
+; CGSCC-SAME: (ptr nofree readonly [[ARG:%.*]]) #[[ATTR5:[0-9]+]] {
 ; CGSCC-NEXT:  bb:
-; CGSCC-NEXT:    [[TMP:%.*]] = icmp eq i32* [[ARG]], null
+; CGSCC-NEXT:    [[TMP:%.*]] = icmp eq ptr [[ARG]], null
 ; CGSCC-NEXT:    br i1 [[TMP]], label [[BB9:%.*]], label [[BB1:%.*]]
 ; CGSCC:       bb1:
-; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, i32* [[ARG]], align 4
+; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ARG]], align 4
 ; CGSCC-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 0
 ; CGSCC-NEXT:    br i1 [[TMP3]], label [[BB6:%.*]], label [[BB4:%.*]]
 ; CGSCC:       bb4:
-; CGSCC-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i32, i32* [[ARG]], i64 1
-; CGSCC-NEXT:    [[TMP5B:%.*]] = tail call i32* @f3(i32* nofree nonnull readonly [[TMP5]]) #[[ATTR14:[0-9]+]]
-; CGSCC-NEXT:    [[TMP5C:%.*]] = getelementptr inbounds i32, i32* [[TMP5B]], i64 -1
+; CGSCC-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[ARG]], i64 1
+; CGSCC-NEXT:    [[TMP5B:%.*]] = tail call ptr @f3(ptr nofree nonnull readonly [[TMP5]]) #[[ATTR14:[0-9]+]]
+; CGSCC-NEXT:    [[TMP5C:%.*]] = getelementptr inbounds i32, ptr [[TMP5B]], i64 -1
 ; CGSCC-NEXT:    br label [[BB9]]
 ; CGSCC:       bb6:
-; CGSCC-NEXT:    [[TMP7:%.*]] = tail call i32* @f2(i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR14]]
-; CGSCC-NEXT:    ret i32* [[TMP7]]
+; CGSCC-NEXT:    [[TMP7:%.*]] = tail call ptr @f2(ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR14]]
+; CGSCC-NEXT:    ret ptr [[TMP7]]
 ; CGSCC:       bb9:
-; CGSCC-NEXT:    [[TMP10:%.*]] = phi i32* [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to i32*), [[BB:%.*]] ]
-; CGSCC-NEXT:    ret i32* [[TMP10]]
+; CGSCC-NEXT:    [[TMP10:%.*]] = phi ptr [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to ptr), [[BB:%.*]] ]
+; CGSCC-NEXT:    ret ptr [[TMP10]]
 ;
 
 bb:
-  %tmp = icmp eq i32* %arg, null
+  %tmp = icmp eq ptr %arg, null
   br i1 %tmp, label %bb9, label %bb1
 
 bb1:                                              ; preds = %bb
-  %tmp2 = load i32, i32* %arg, align 4
+  %tmp2 = load i32, ptr %arg, align 4
   %tmp3 = icmp eq i32 %tmp2, 0
   br i1 %tmp3, label %bb6, label %bb4
 
 bb4:                                              ; preds = %bb1
-  %tmp5 = getelementptr inbounds i32, i32* %arg, i64 1
-  %tmp5b = tail call i32* @f3(i32* %tmp5)
-  %tmp5c = getelementptr inbounds i32, i32* %tmp5b, i64 -1
+  %tmp5 = getelementptr inbounds i32, ptr %arg, i64 1
+  %tmp5b = tail call ptr @f3(ptr %tmp5)
+  %tmp5c = getelementptr inbounds i32, ptr %tmp5b, i64 -1
   br label %bb9
 
 bb6:                                              ; preds = %bb1
-  %tmp7 = tail call i32* @f2(i32* %arg)
-  ret i32* %tmp7
+  %tmp7 = tail call ptr @f2(ptr %arg)
+  ret ptr %tmp7
 
 bb9:                                              ; preds = %bb4, %bb
-  %tmp10 = phi i32* [ %tmp5c, %bb4 ], [ inttoptr (i64 4 to i32*), %bb ]
-  ret i32* %tmp10
+  %tmp10 = phi ptr [ %tmp5c, %bb4 ], [ inttoptr (i64 4 to ptr), %bb ]
+  ret ptr %tmp10
 }
 
-define internal i32* @f2(i32* %arg) {
+define internal ptr @f2(ptr %arg) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: read)
 ; TUNIT-LABEL: define {{[^@]+}}@f2
-; TUNIT-SAME: (i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR6]] {
+; TUNIT-SAME: (ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR6]] {
 ; TUNIT-NEXT:  bb:
-; TUNIT-NEXT:    [[TMP:%.*]] = tail call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR14]]
-; TUNIT-NEXT:    ret i32* [[TMP]]
+; TUNIT-NEXT:    [[TMP:%.*]] = tail call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR14]]
+; TUNIT-NEXT:    ret ptr [[TMP]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@f2
-; CGSCC-SAME: (i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR5]] {
+; CGSCC-SAME: (ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR5]] {
 ; CGSCC-NEXT:  bb:
-; CGSCC-NEXT:    [[TMP:%.*]] = tail call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR14]]
-; CGSCC-NEXT:    ret i32* [[TMP]]
+; CGSCC-NEXT:    [[TMP:%.*]] = tail call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR14]]
+; CGSCC-NEXT:    ret ptr [[TMP]]
 ;
 bb:
-  %tmp = tail call i32* @f1(i32* %arg)
-  ret i32* %tmp
+  %tmp = tail call ptr @f1(ptr %arg)
+  ret ptr %tmp
 }
 
-define dso_local noalias i32* @f3(i32* %arg) {
-; FIXME: missing nonnull. It should be nonnull @f3(i32* nonnull readonly %arg)
+define dso_local noalias ptr @f3(ptr %arg) {
+; FIXME: missing nonnull. It should be nonnull @f3(ptr nonnull readonly %arg)
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: read)
 ; TUNIT-LABEL: define {{[^@]+}}@f3
-; TUNIT-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR6]] {
+; TUNIT-SAME: (ptr nofree readonly [[ARG:%.*]]) #[[ATTR6]] {
 ; TUNIT-NEXT:  bb:
-; TUNIT-NEXT:    [[TMP:%.*]] = call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR14]]
-; TUNIT-NEXT:    ret i32* [[TMP]]
+; TUNIT-NEXT:    [[TMP:%.*]] = call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR14]]
+; TUNIT-NEXT:    ret ptr [[TMP]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@f3
-; CGSCC-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR5]] {
+; CGSCC-SAME: (ptr nofree readonly [[ARG:%.*]]) #[[ATTR5]] {
 ; CGSCC-NEXT:  bb:
-; CGSCC-NEXT:    [[TMP:%.*]] = call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR14]]
-; CGSCC-NEXT:    ret i32* [[TMP]]
+; CGSCC-NEXT:    [[TMP:%.*]] = call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR14]]
+; CGSCC-NEXT:    ret ptr [[TMP]]
 ;
 bb:
-; FIXME: missing nonnull. It should be @f1(i32* nonnull readonly %arg)
-  %tmp = call i32* @f1(i32* %arg)
-  ret i32* %tmp
+; FIXME: missing nonnull. It should be @f1(ptr nonnull readonly %arg)
+  %tmp = call ptr @f1(ptr %arg)
+  ret ptr %tmp
 }
 
 ; TEST 15
-define void @f15(i8* %arg) {
+define void @f15(ptr %arg) {
 ; CHECK-LABEL: define {{[^@]+}}@f15
-; CHECK-SAME: (i8* noundef nonnull dereferenceable(4) [[ARG:%.*]]) {
-; CHECK-NEXT:    tail call void @use1(i8* noundef nonnull dereferenceable(4) [[ARG]])
+; CHECK-SAME: (ptr noundef nonnull dereferenceable(4) [[ARG:%.*]]) {
+; CHECK-NEXT:    tail call void @use1(ptr noundef nonnull dereferenceable(4) [[ARG]])
 ; CHECK-NEXT:    ret void
 ;
 
-  tail call void @use1(i8* dereferenceable(4) %arg)
+  tail call void @use1(ptr dereferenceable(4) %arg)
   ret void
 }
 
 declare void @fun0() #1
-declare void @fun1(i8*) #1
-declare void @fun2(i8*, i8*) #1
-declare void @fun3(i8*, i8*, i8*) #1
+declare void @fun1(ptr) #1
+declare void @fun2(ptr, ptr) #1
+declare void @fun3(ptr, ptr, ptr) #1
 ; TEST 16 simple path test
 ; if(..)
 ;   fun2(nonnull %a, nonnull %b)
 ; else
 ;   fun2(nonnull %a, %b)
 ; We can say that %a is nonnull but %b is not.
-define void @f16(i8* %a, i8 * %b, i8 %c) {
+define void @f16(ptr %a, ptr %b, i8 %c) {
 ; TUNIT: Function Attrs: nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@f16
-; TUNIT-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR7:[0-9]+]] {
+; TUNIT-SAME: (ptr nonnull [[A:%.*]], ptr [[B:%.*]], i8 [[C:%.*]]) #[[ATTR7:[0-9]+]] {
 ; TUNIT-NEXT:    [[CMP:%.*]] = icmp eq i8 [[C]], 0
 ; TUNIT-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
 ; TUNIT:       if.then:
-; TUNIT-NEXT:    tail call void @fun2(i8* nonnull [[A]], i8* nonnull [[B]]) #[[ATTR7]]
+; TUNIT-NEXT:    tail call void @fun2(ptr nonnull [[A]], ptr nonnull [[B]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret void
 ; TUNIT:       if.else:
-; TUNIT-NEXT:    tail call void @fun2(i8* nonnull [[A]], i8* [[B]]) #[[ATTR7]]
+; TUNIT-NEXT:    tail call void @fun2(ptr nonnull [[A]], ptr [[B]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@f16
-; CGSCC-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR6:[0-9]+]] {
+; CGSCC-SAME: (ptr nonnull [[A:%.*]], ptr [[B:%.*]], i8 [[C:%.*]]) #[[ATTR6:[0-9]+]] {
 ; CGSCC-NEXT:    [[CMP:%.*]] = icmp eq i8 [[C]], 0
 ; CGSCC-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
 ; CGSCC:       if.then:
-; CGSCC-NEXT:    tail call void @fun2(i8* nonnull [[A]], i8* nonnull [[B]]) #[[ATTR6]]
+; CGSCC-NEXT:    tail call void @fun2(ptr nonnull [[A]], ptr nonnull [[B]]) #[[ATTR6]]
 ; CGSCC-NEXT:    ret void
 ; CGSCC:       if.else:
-; CGSCC-NEXT:    tail call void @fun2(i8* nonnull [[A]], i8* [[B]]) #[[ATTR6]]
+; CGSCC-NEXT:    tail call void @fun2(ptr nonnull [[A]], ptr [[B]]) #[[ATTR6]]
 ; CGSCC-NEXT:    ret void
 ;
   %cmp = icmp eq i8 %c, 0
   br i1 %cmp, label %if.then, label %if.else
 if.then:
-  tail call void @fun2(i8* nonnull %a, i8* nonnull %b)
+  tail call void @fun2(ptr nonnull %a, ptr nonnull %b)
   ret void
 if.else:
-  tail call void @fun2(i8* nonnull %a, i8* %b)
+  tail call void @fun2(ptr nonnull %a, ptr %b)
   ret void
 }
 ; TEST 17 explore child BB test
@@ -565,11 +564,11 @@ if.else:
 ;    ... (willreturn & nounwind)
 ; fun1(nonnull %a)
 ; We can say that %a is nonnull
-define void @f17(i8* %a, i8 %c) {
+define void @f17(ptr %a, i8 %c) {
 ;
 ; TUNIT: Function Attrs: nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@f17
-; TUNIT-SAME: (i8* nonnull [[A:%.*]], i8 [[C:%.*]]) #[[ATTR7]] {
+; TUNIT-SAME: (ptr nonnull [[A:%.*]], i8 [[C:%.*]]) #[[ATTR7]] {
 ; TUNIT-NEXT:    [[CMP:%.*]] = icmp eq i8 [[C]], 0
 ; TUNIT-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
 ; TUNIT:       if.then:
@@ -579,12 +578,12 @@ define void @f17(i8* %a, i8 %c) {
 ; TUNIT-NEXT:    tail call void @fun0() #[[ATTR7]]
 ; TUNIT-NEXT:    br label [[CONT]]
 ; TUNIT:       cont:
-; TUNIT-NEXT:    tail call void @fun1(i8* nonnull [[A]]) #[[ATTR7]]
+; TUNIT-NEXT:    tail call void @fun1(ptr nonnull [[A]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@f17
-; CGSCC-SAME: (i8* nonnull [[A:%.*]], i8 [[C:%.*]]) #[[ATTR6]] {
+; CGSCC-SAME: (ptr nonnull [[A:%.*]], i8 [[C:%.*]]) #[[ATTR6]] {
 ; CGSCC-NEXT:    [[CMP:%.*]] = icmp eq i8 [[C]], 0
 ; CGSCC-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
 ; CGSCC:       if.then:
@@ -594,7 +593,7 @@ define void @f17(i8* %a, i8 %c) {
 ; CGSCC-NEXT:    tail call void @fun0() #[[ATTR6]]
 ; CGSCC-NEXT:    br label [[CONT]]
 ; CGSCC:       cont:
-; CGSCC-NEXT:    tail call void @fun1(i8* nonnull [[A]]) #[[ATTR6]]
+; CGSCC-NEXT:    tail call void @fun1(ptr nonnull [[A]]) #[[ATTR6]]
 ; CGSCC-NEXT:    ret void
 ;
   %cmp = icmp eq i8 %c, 0
@@ -606,7 +605,7 @@ if.else:
   tail call void @fun0()
   br label %cont
 cont:
-  tail call void @fun1(i8* nonnull %a)
+  tail call void @fun1(ptr nonnull %a)
   ret void
 }
 ; TEST 18 More complex test
@@ -620,10 +619,10 @@ cont:
 ;    ... (willreturn & nounwind)
 ; fun1(nonnull %a)
 
-define void @f18(i8* %a, i8* %b, i8 %c) {
+define void @f18(ptr %a, ptr %b, i8 %c) {
 ; TUNIT: Function Attrs: nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@f18
-; TUNIT-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR7]] {
+; TUNIT-SAME: (ptr nonnull [[A:%.*]], ptr [[B:%.*]], i8 [[C:%.*]]) #[[ATTR7]] {
 ; TUNIT-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[C]], 0
 ; TUNIT-NEXT:    br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
 ; TUNIT:       if.then:
@@ -636,18 +635,18 @@ define void @f18(i8* %a, i8* %b, i8 %c) {
 ; TUNIT-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[C]], 1
 ; TUNIT-NEXT:    br i1 [[CMP2]], label [[CONT_THEN:%.*]], label [[CONT_ELSE:%.*]]
 ; TUNIT:       cont.then:
-; TUNIT-NEXT:    tail call void @fun1(i8* nonnull [[B]]) #[[ATTR7]]
+; TUNIT-NEXT:    tail call void @fun1(ptr nonnull [[B]]) #[[ATTR7]]
 ; TUNIT-NEXT:    br label [[CONT2:%.*]]
 ; TUNIT:       cont.else:
 ; TUNIT-NEXT:    tail call void @fun0() #[[ATTR7]]
 ; TUNIT-NEXT:    br label [[CONT2]]
 ; TUNIT:       cont2:
-; TUNIT-NEXT:    tail call void @fun1(i8* nonnull [[A]]) #[[ATTR7]]
+; TUNIT-NEXT:    tail call void @fun1(ptr nonnull [[A]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@f18
-; CGSCC-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR6]] {
+; CGSCC-SAME: (ptr nonnull [[A:%.*]], ptr [[B:%.*]], i8 [[C:%.*]]) #[[ATTR6]] {
 ; CGSCC-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[C]], 0
 ; CGSCC-NEXT:    br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
 ; CGSCC:       if.then:
@@ -660,13 +659,13 @@ define void @f18(i8* %a, i8* %b, i8 %c) {
 ; CGSCC-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[C]], 1
 ; CGSCC-NEXT:    br i1 [[CMP2]], label [[CONT_THEN:%.*]], label [[CONT_ELSE:%.*]]
 ; CGSCC:       cont.then:
-; CGSCC-NEXT:    tail call void @fun1(i8* nonnull [[B]]) #[[ATTR6]]
+; CGSCC-NEXT:    tail call void @fun1(ptr nonnull [[B]]) #[[ATTR6]]
 ; CGSCC-NEXT:    br label [[CONT2:%.*]]
 ; CGSCC:       cont.else:
 ; CGSCC-NEXT:    tail call void @fun0() #[[ATTR6]]
 ; CGSCC-NEXT:    br label [[CONT2]]
 ; CGSCC:       cont2:
-; CGSCC-NEXT:    tail call void @fun1(i8* nonnull [[A]]) #[[ATTR6]]
+; CGSCC-NEXT:    tail call void @fun1(ptr nonnull [[A]]) #[[ATTR6]]
 ; CGSCC-NEXT:    ret void
 ;
   %cmp1 = icmp eq i8 %c, 0
@@ -681,47 +680,47 @@ cont:
   %cmp2 = icmp eq i8 %c, 1
   br i1 %cmp2, label %cont.then, label %cont.else
 cont.then:
-  tail call void @fun1(i8* nonnull %b)
+  tail call void @fun1(ptr nonnull %b)
   br label %cont2
 cont.else:
   tail call void @fun0()
   br label %cont2
 cont2:
-  tail call void @fun1(i8* nonnull %a)
+  tail call void @fun1(ptr nonnull %a)
   ret void
 }
 
 ; TEST 19: Loop
 
-define void @f19(i8* %a, i8* %b, i8 %c) {
+define void @f19(ptr %a, ptr %b, i8 %c) {
 ; TUNIT: Function Attrs: nounwind
 ; TUNIT-LABEL: define {{[^@]+}}@f19
-; TUNIT-SAME: (i8* [[A:%.*]], i8* nonnull [[B:%.*]], i8 [[C:%.*]]) #[[ATTR5]] {
+; TUNIT-SAME: (ptr [[A:%.*]], ptr nonnull [[B:%.*]], i8 [[C:%.*]]) #[[ATTR5]] {
 ; TUNIT-NEXT:    br label [[LOOP_HEADER:%.*]]
 ; TUNIT:       loop.header:
 ; TUNIT-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[C]], 0
 ; TUNIT-NEXT:    br i1 [[CMP2]], label [[LOOP_BODY:%.*]], label [[LOOP_EXIT:%.*]]
 ; TUNIT:       loop.body:
-; TUNIT-NEXT:    tail call void @fun1(i8* nonnull [[B]]) #[[ATTR5]]
-; TUNIT-NEXT:    tail call void @fun1(i8* nonnull [[A]]) #[[ATTR5]]
+; TUNIT-NEXT:    tail call void @fun1(ptr nonnull [[B]]) #[[ATTR5]]
+; TUNIT-NEXT:    tail call void @fun1(ptr nonnull [[A]]) #[[ATTR5]]
 ; TUNIT-NEXT:    br label [[LOOP_HEADER]]
 ; TUNIT:       loop.exit:
-; TUNIT-NEXT:    tail call void @fun1(i8* nonnull [[B]]) #[[ATTR5]]
+; TUNIT-NEXT:    tail call void @fun1(ptr nonnull [[B]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nounwind
 ; CGSCC-LABEL: define {{[^@]+}}@f19
-; CGSCC-SAME: (i8* [[A:%.*]], i8* nonnull [[B:%.*]], i8 [[C:%.*]]) #[[ATTR4]] {
+; CGSCC-SAME: (ptr [[A:%.*]], ptr nonnull [[B:%.*]], i8 [[C:%.*]]) #[[ATTR4]] {
 ; CGSCC-NEXT:    br label [[LOOP_HEADER:%.*]]
 ; CGSCC:       loop.header:
 ; CGSCC-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[C]], 0
 ; CGSCC-NEXT:    br i1 [[CMP2]], label [[LOOP_BODY:%.*]], label [[LOOP_EXIT:%.*]]
 ; CGSCC:       loop.body:
-; CGSCC-NEXT:    tail call void @fun1(i8* nonnull [[B]]) #[[ATTR4]]
-; CGSCC-NEXT:    tail call void @fun1(i8* nonnull [[A]]) #[[ATTR4]]
+; CGSCC-NEXT:    tail call void @fun1(ptr nonnull [[B]]) #[[ATTR4]]
+; CGSCC-NEXT:    tail call void @fun1(ptr nonnull [[A]]) #[[ATTR4]]
 ; CGSCC-NEXT:    br label [[LOOP_HEADER]]
 ; CGSCC:       loop.exit:
-; CGSCC-NEXT:    tail call void @fun1(i8* nonnull [[B]]) #[[ATTR4]]
+; CGSCC-NEXT:    tail call void @fun1(ptr nonnull [[B]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
   br label %loop.header
@@ -729,87 +728,87 @@ loop.header:
   %cmp2 = icmp eq i8 %c, 0
   br i1 %cmp2, label %loop.body, label %loop.exit
 loop.body:
-  tail call void @fun1(i8* nonnull %b)
-  tail call void @fun1(i8* nonnull %a)
+  tail call void @fun1(ptr nonnull %b)
+  tail call void @fun1(ptr nonnull %a)
   br label %loop.header
 loop.exit:
-  tail call void @fun1(i8* nonnull %b)
+  tail call void @fun1(ptr nonnull %b)
   ret void
 }
 
 ; Test propagation of nonnull callsite args back to caller.
 
-declare void @use1(i8* %x)
-declare void @use2(i8* %x, i8* %y);
-declare void @use3(i8* %x, i8* %y, i8* %z);
+declare void @use1(ptr %x)
+declare void @use2(ptr %x, ptr %y);
+declare void @use3(ptr %x, ptr %y, ptr %z);
 
-declare void @use1nonnull(i8* nonnull %x);
-declare void @use2nonnull(i8* nonnull %x, i8* nonnull %y);
-declare void @use3nonnull(i8* nonnull %x, i8* nonnull %y, i8* nonnull %z);
+declare void @use1nonnull(ptr nonnull %x);
+declare void @use2nonnull(ptr nonnull %x, ptr nonnull %y);
+declare void @use3nonnull(ptr nonnull %x, ptr nonnull %y, ptr nonnull %z);
 
-declare i8 @use1safecall(i8* %x) readonly nounwind willreturn ; nounwind+willreturn guarantees that execution continues to successor
+declare i8 @use1safecall(ptr %x) readonly nounwind willreturn ; nounwind+willreturn guarantees that execution continues to successor
 
 ; Can't extend non-null to parent for any argument because the 2nd call is not guaranteed to execute.
 
-define void @parent1(i8* %a, i8* %b, i8* %c) {
+define void @parent1(ptr %a, ptr %b, ptr %c) {
 ; CHECK-LABEL: define {{[^@]+}}@parent1
-; CHECK-SAME: (i8* [[A:%.*]], i8* [[B:%.*]], i8* [[C:%.*]]) {
-; CHECK-NEXT:    call void @use3(i8* [[C]], i8* [[A]], i8* [[B]])
-; CHECK-NEXT:    call void @use3nonnull(i8* nonnull [[B]], i8* nonnull [[C]], i8* nonnull [[A]])
+; CHECK-SAME: (ptr [[A:%.*]], ptr [[B:%.*]], ptr [[C:%.*]]) {
+; CHECK-NEXT:    call void @use3(ptr [[C]], ptr [[A]], ptr [[B]])
+; CHECK-NEXT:    call void @use3nonnull(ptr nonnull [[B]], ptr nonnull [[C]], ptr nonnull [[A]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @use3(i8* %c, i8* %a, i8* %b)
-  call void @use3nonnull(i8* %b, i8* %c, i8* %a)
+  call void @use3(ptr %c, ptr %a, ptr %b)
+  call void @use3nonnull(ptr %b, ptr %c, ptr %a)
   ret void
 }
 
 ; Extend non-null to parent for all arguments.
 
-define void @parent2(i8* %a, i8* %b, i8* %c) {
+define void @parent2(ptr %a, ptr %b, ptr %c) {
 ; CHECK-LABEL: define {{[^@]+}}@parent2
-; CHECK-SAME: (i8* nonnull [[A:%.*]], i8* nonnull [[B:%.*]], i8* nonnull [[C:%.*]]) {
-; CHECK-NEXT:    call void @use3nonnull(i8* nonnull [[B]], i8* nonnull [[C]], i8* nonnull [[A]])
-; CHECK-NEXT:    call void @use3(i8* nonnull [[C]], i8* nonnull [[A]], i8* nonnull [[B]])
+; CHECK-SAME: (ptr nonnull [[A:%.*]], ptr nonnull [[B:%.*]], ptr nonnull [[C:%.*]]) {
+; CHECK-NEXT:    call void @use3nonnull(ptr nonnull [[B]], ptr nonnull [[C]], ptr nonnull [[A]])
+; CHECK-NEXT:    call void @use3(ptr nonnull [[C]], ptr nonnull [[A]], ptr nonnull [[B]])
 ; CHECK-NEXT:    ret void
 ;
 
-  call void @use3nonnull(i8* %b, i8* %c, i8* %a)
-  call void @use3(i8* %c, i8* %a, i8* %b)
+  call void @use3nonnull(ptr %b, ptr %c, ptr %a)
+  call void @use3(ptr %c, ptr %a, ptr %b)
   ret void
 }
 
 ; Extend non-null to parent for 1st argument.
 
-define void @parent3(i8* %a, i8* %b, i8* %c) {
+define void @parent3(ptr %a, ptr %b, ptr %c) {
 ; CHECK-LABEL: define {{[^@]+}}@parent3
-; CHECK-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8* [[C:%.*]]) {
-; CHECK-NEXT:    call void @use1nonnull(i8* nonnull [[A]])
-; CHECK-NEXT:    call void @use3(i8* [[C]], i8* [[B]], i8* nonnull [[A]])
+; CHECK-SAME: (ptr nonnull [[A:%.*]], ptr [[B:%.*]], ptr [[C:%.*]]) {
+; CHECK-NEXT:    call void @use1nonnull(ptr nonnull [[A]])
+; CHECK-NEXT:    call void @use3(ptr [[C]], ptr [[B]], ptr nonnull [[A]])
 ; CHECK-NEXT:    ret void
 ;
 
 
-  call void @use1nonnull(i8* %a)
-  call void @use3(i8* %c, i8* %b, i8* %a)
+  call void @use1nonnull(ptr %a)
+  call void @use3(ptr %c, ptr %b, ptr %a)
   ret void
 }
 
 ; Extend non-null to parent for last 2 arguments.
 
-define void @parent4(i8* %a, i8* %b, i8* %c) {
+define void @parent4(ptr %a, ptr %b, ptr %c) {
 ; CHECK-LABEL: define {{[^@]+}}@parent4
-; CHECK-SAME: (i8* [[A:%.*]], i8* nonnull [[B:%.*]], i8* nonnull [[C:%.*]]) {
-; CHECK-NEXT:    call void @use2nonnull(i8* nonnull [[C]], i8* nonnull [[B]])
-; CHECK-NEXT:    call void @use2(i8* [[A]], i8* nonnull [[C]])
-; CHECK-NEXT:    call void @use1(i8* nonnull [[B]])
+; CHECK-SAME: (ptr [[A:%.*]], ptr nonnull [[B:%.*]], ptr nonnull [[C:%.*]]) {
+; CHECK-NEXT:    call void @use2nonnull(ptr nonnull [[C]], ptr nonnull [[B]])
+; CHECK-NEXT:    call void @use2(ptr [[A]], ptr nonnull [[C]])
+; CHECK-NEXT:    call void @use1(ptr nonnull [[B]])
 ; CHECK-NEXT:    ret void
 ;
 
 
 
-  call void @use2nonnull(i8* %c, i8* %b)
-  call void @use2(i8* %a, i8* %c)
-  call void @use1(i8* %b)
+  call void @use2nonnull(ptr %c, ptr %b)
+  call void @use2(ptr %a, ptr %c)
+  call void @use1(ptr %b)
   ret void
 }
 
@@ -817,12 +816,12 @@ define void @parent4(i8* %a, i8* %b, i8* %c) {
 ; It appears benign to extend non-null to the parent in this case, but we can't do that
 ; because it would incorrectly propagate the wrong information to its callers.
 
-define void @parent5(i8* %a, i1 %a_is_notnull) {
+define void @parent5(ptr %a, i1 %a_is_notnull) {
 ; CHECK-LABEL: define {{[^@]+}}@parent5
-; CHECK-SAME: (i8* [[A:%.*]], i1 [[A_IS_NOTNULL:%.*]]) {
+; CHECK-SAME: (ptr [[A:%.*]], i1 [[A_IS_NOTNULL:%.*]]) {
 ; CHECK-NEXT:    br i1 [[A_IS_NOTNULL]], label [[T:%.*]], label [[F:%.*]]
 ; CHECK:       t:
-; CHECK-NEXT:    call void @use1nonnull(i8* nonnull [[A]])
+; CHECK-NEXT:    call void @use1nonnull(ptr nonnull [[A]])
 ; CHECK-NEXT:    ret void
 ; CHECK:       f:
 ; CHECK-NEXT:    ret void
@@ -830,7 +829,7 @@ define void @parent5(i8* %a, i1 %a_is_notnull) {
 
   br i1 %a_is_notnull, label %t, label %f
 t:
-  call void @use1nonnull(i8* %a)
+  call void @use1nonnull(ptr %a)
   ret void
 f:
   ret void
@@ -839,32 +838,32 @@ f:
 ; The callsite must execute in order for the attribute to transfer to the parent.
 ; The volatile load can't trap, so we can guarantee that we'll get to the call.
 
-define i8 @parent6(i8* %a, i8* %b) {
+define i8 @parent6(ptr %a, ptr %b) {
 ; CHECK-LABEL: define {{[^@]+}}@parent6
-; CHECK-SAME: (i8* nonnull [[A:%.*]], i8* nofree noundef [[B:%.*]]) {
-; CHECK-NEXT:    [[C:%.*]] = load volatile i8, i8* [[B]], align 1
-; CHECK-NEXT:    call void @use1nonnull(i8* nonnull [[A]])
+; CHECK-SAME: (ptr nonnull [[A:%.*]], ptr nofree noundef [[B:%.*]]) {
+; CHECK-NEXT:    [[C:%.*]] = load volatile i8, ptr [[B]], align 1
+; CHECK-NEXT:    call void @use1nonnull(ptr nonnull [[A]])
 ; CHECK-NEXT:    ret i8 [[C]]
 ;
 
-  %c = load volatile i8, i8* %b
-  call void @use1nonnull(i8* %a)
+  %c = load volatile i8, ptr %b
+  call void @use1nonnull(ptr %a)
   ret i8 %c
 }
 
 ; The nonnull callsite is guaranteed to execute, so the argument must be nonnull throughout the parent.
 
-define i8 @parent7(i8* %a) {
+define i8 @parent7(ptr %a) {
 ; CHECK-LABEL: define {{[^@]+}}@parent7
-; CHECK-SAME: (i8* nonnull [[A:%.*]]) {
-; CHECK-NEXT:    [[RET:%.*]] = call i8 @use1safecall(i8* nonnull readonly [[A]]) #[[ATTR13]]
-; CHECK-NEXT:    call void @use1nonnull(i8* nonnull [[A]])
+; CHECK-SAME: (ptr nonnull [[A:%.*]]) {
+; CHECK-NEXT:    [[RET:%.*]] = call i8 @use1safecall(ptr nonnull readonly [[A]]) #[[ATTR13]]
+; CHECK-NEXT:    call void @use1nonnull(ptr nonnull [[A]])
 ; CHECK-NEXT:    ret i8 [[RET]]
 ;
 
 
-  %ret = call i8 @use1safecall(i8* %a)
-  call void @use1nonnull(i8* %a)
+  %ret = call i8 @use1safecall(ptr %a)
+  call void @use1nonnull(ptr %a)
   ret i8 %ret
 }
 
@@ -872,217 +871,217 @@ define i8 @parent7(i8* %a) {
 
 declare i32 @esfp(...)
 
-define i1 @parent8(i8* %a, i8* %bogus1, i8* %b) personality i8* bitcast (i32 (...)* @esfp to i8*){
+define i1 @parent8(ptr %a, ptr %bogus1, ptr %b) personality ptr @esfp{
 ; TUNIT: Function Attrs: nounwind
 ; TUNIT-LABEL: define {{[^@]+}}@parent8
-; TUNIT-SAME: (i8* nonnull [[A:%.*]], i8* nocapture nofree readnone [[BOGUS1:%.*]], i8* nonnull [[B:%.*]]) #[[ATTR5]] personality i8* bitcast (i32 (...)* @esfp to i8*) {
+; TUNIT-SAME: (ptr nonnull [[A:%.*]], ptr nocapture nofree readnone [[BOGUS1:%.*]], ptr nonnull [[B:%.*]]) #[[ATTR5]] personality ptr @esfp {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    invoke void @use2nonnull(i8* nonnull [[A]], i8* nonnull [[B]])
+; TUNIT-NEXT:    invoke void @use2nonnull(ptr nonnull [[A]], ptr nonnull [[B]])
 ; TUNIT-NEXT:    to label [[CONT:%.*]] unwind label [[EXC:%.*]]
 ; TUNIT:       cont:
 ; TUNIT-NEXT:    ret i1 false
 ; TUNIT:       exc:
-; TUNIT-NEXT:    [[LP:%.*]] = landingpad { i8*, i32 }
-; TUNIT-NEXT:    filter [0 x i8*] zeroinitializer
+; TUNIT-NEXT:    [[LP:%.*]] = landingpad { ptr, i32 }
+; TUNIT-NEXT:    filter [0 x ptr] zeroinitializer
 ; TUNIT-NEXT:    unreachable
 ;
 ; CGSCC: Function Attrs: nounwind
 ; CGSCC-LABEL: define {{[^@]+}}@parent8
-; CGSCC-SAME: (i8* nonnull [[A:%.*]], i8* nocapture nofree readnone [[BOGUS1:%.*]], i8* nonnull [[B:%.*]]) #[[ATTR4]] personality i8* bitcast (i32 (...)* @esfp to i8*) {
+; CGSCC-SAME: (ptr nonnull [[A:%.*]], ptr nocapture nofree readnone [[BOGUS1:%.*]], ptr nonnull [[B:%.*]]) #[[ATTR4]] personality ptr @esfp {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    invoke void @use2nonnull(i8* nonnull [[A]], i8* nonnull [[B]])
+; CGSCC-NEXT:    invoke void @use2nonnull(ptr nonnull [[A]], ptr nonnull [[B]])
 ; CGSCC-NEXT:    to label [[CONT:%.*]] unwind label [[EXC:%.*]]
 ; CGSCC:       cont:
 ; CGSCC-NEXT:    ret i1 false
 ; CGSCC:       exc:
-; CGSCC-NEXT:    [[LP:%.*]] = landingpad { i8*, i32 }
-; CGSCC-NEXT:    filter [0 x i8*] zeroinitializer
+; CGSCC-NEXT:    [[LP:%.*]] = landingpad { ptr, i32 }
+; CGSCC-NEXT:    filter [0 x ptr] zeroinitializer
 ; CGSCC-NEXT:    unreachable
 ;
 
 entry:
-  invoke void @use2nonnull(i8* %a, i8* %b)
+  invoke void @use2nonnull(ptr %a, ptr %b)
   to label %cont unwind label %exc
 
 cont:
-  %null_check = icmp eq i8* %b, null
+  %null_check = icmp eq ptr %b, null
   ret i1 %null_check
 
 exc:
-  %lp = landingpad { i8*, i32 }
-  filter [0 x i8*] zeroinitializer
+  %lp = landingpad { ptr, i32 }
+  filter [0 x ptr] zeroinitializer
   unreachable
 }
 
-define i32* @gep1(i32* %p) {
+define ptr @gep1(ptr %p) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@gep1
-; CHECK-SAME: (i32* nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR1]] {
-; CHECK-NEXT:    [[Q:%.*]] = getelementptr inbounds i32, i32* [[P]], i32 1
-; CHECK-NEXT:    ret i32* [[Q]]
+; CHECK-SAME: (ptr nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT:    [[Q:%.*]] = getelementptr inbounds i32, ptr [[P]], i32 1
+; CHECK-NEXT:    ret ptr [[Q]]
 ;
-  %q = getelementptr inbounds i32, i32* %p, i32 1
-  ret i32* %q
+  %q = getelementptr inbounds i32, ptr %p, i32 1
+  ret ptr %q
 }
 
-define i32* @gep1_no_null_opt(i32* %p) #0 {
+define ptr @gep1_no_null_opt(ptr %p) #0 {
 ; Should't be able to derive nonnull based on gep.
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind null_pointer_is_valid willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@gep1_no_null_opt
-; TUNIT-SAME: (i32* nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR9:[0-9]+]] {
-; TUNIT-NEXT:    [[Q:%.*]] = getelementptr inbounds i32, i32* [[P]], i32 1
-; TUNIT-NEXT:    ret i32* [[Q]]
+; TUNIT-SAME: (ptr nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR9:[0-9]+]] {
+; TUNIT-NEXT:    [[Q:%.*]] = getelementptr inbounds i32, ptr [[P]], i32 1
+; TUNIT-NEXT:    ret ptr [[Q]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind null_pointer_is_valid willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@gep1_no_null_opt
-; CGSCC-SAME: (i32* nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR8:[0-9]+]] {
-; CGSCC-NEXT:    [[Q:%.*]] = getelementptr inbounds i32, i32* [[P]], i32 1
-; CGSCC-NEXT:    ret i32* [[Q]]
+; CGSCC-SAME: (ptr nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR8:[0-9]+]] {
+; CGSCC-NEXT:    [[Q:%.*]] = getelementptr inbounds i32, ptr [[P]], i32 1
+; CGSCC-NEXT:    ret ptr [[Q]]
 ;
-  %q = getelementptr inbounds i32, i32* %p, i32 1
-  ret i32* %q
+  %q = getelementptr inbounds i32, ptr %p, i32 1
+  ret ptr %q
 }
 
-define i32 addrspace(3)* @gep2(i32 addrspace(3)* %p) {
+define ptr addrspace(3) @gep2(ptr addrspace(3) %p) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@gep2
-; CHECK-SAME: (i32 addrspace(3)* nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR1]] {
-; CHECK-NEXT:    [[Q:%.*]] = getelementptr inbounds i32, i32 addrspace(3)* [[P]], i32 1
-; CHECK-NEXT:    ret i32 addrspace(3)* [[Q]]
+; CHECK-SAME: (ptr addrspace(3) nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT:    [[Q:%.*]] = getelementptr inbounds i32, ptr addrspace(3) [[P]], i32 1
+; CHECK-NEXT:    ret ptr addrspace(3) [[Q]]
 ;
-  %q = getelementptr inbounds i32, i32 addrspace(3)* %p, i32 1
-  ret i32 addrspace(3)* %q
+  %q = getelementptr inbounds i32, ptr addrspace(3) %p, i32 1
+  ret ptr addrspace(3) %q
 }
 
 ; FIXME: We should propagate dereferenceable here but *not* nonnull
-define i32 addrspace(3)* @as(i32 addrspace(3)* dereferenceable(4) %p) {
+define ptr addrspace(3) @as(ptr addrspace(3) dereferenceable(4) %p) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@as
-; CHECK-SAME: (i32 addrspace(3)* nofree nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR1]] {
-; CHECK-NEXT:    ret i32 addrspace(3)* [[P]]
+; CHECK-SAME: (ptr addrspace(3) nofree nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT:    ret ptr addrspace(3) [[P]]
 ;
-  ret i32 addrspace(3)* %p
+  ret ptr addrspace(3) %p
 }
 
 ; CHECK-NOT: @g2()
-define internal i32* @g2() {
+define internal ptr @g2() {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@g2
 ; CGSCC-SAME: () #[[ATTR1]] {
-; CGSCC-NEXT:    ret i32* inttoptr (i64 4 to i32*)
+; CGSCC-NEXT:    ret ptr inttoptr (i64 4 to ptr)
 ;
-  ret i32* inttoptr (i64 4 to i32*)
+  ret ptr inttoptr (i64 4 to ptr)
 }
 
-define i32* @g1() {
+define ptr @g1() {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@g1
 ; TUNIT-SAME: () #[[ATTR1]] {
-; TUNIT-NEXT:    ret i32* inttoptr (i64 4 to i32*)
+; TUNIT-NEXT:    ret ptr inttoptr (i64 4 to ptr)
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@g1
 ; CGSCC-SAME: () #[[ATTR9:[0-9]+]] {
-; CGSCC-NEXT:    [[C:%.*]] = call noundef nonnull align 4 i32* @g2() #[[ATTR13]]
-; CGSCC-NEXT:    ret i32* [[C]]
+; CGSCC-NEXT:    [[C:%.*]] = call noundef nonnull align 4 ptr @g2() #[[ATTR13]]
+; CGSCC-NEXT:    ret ptr [[C]]
 ;
-  %c = call i32* @g2()
-  ret i32* %c
+  %c = call ptr @g2()
+  ret ptr %c
 }
 
-declare void @use_i32_ptr(i32* readnone nocapture) nounwind
-define internal void @called_by_weak(i32* %a) {
+declare void @use_i32_ptr(ptr readnone nocapture) nounwind
+define internal void @called_by_weak(ptr %a) {
 ; TUNIT: Function Attrs: nounwind
 ; TUNIT-LABEL: define {{[^@]+}}@called_by_weak
-; TUNIT-SAME: (i32* noalias nocapture nonnull readnone [[A:%.*]]) #[[ATTR5]] {
-; TUNIT-NEXT:    call void @use_i32_ptr(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR5]]
+; TUNIT-SAME: (ptr noalias nocapture nonnull readnone [[A:%.*]]) #[[ATTR5]] {
+; TUNIT-NEXT:    call void @use_i32_ptr(ptr noalias nocapture nonnull readnone [[A]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nounwind
 ; CGSCC-LABEL: define {{[^@]+}}@called_by_weak
-; CGSCC-SAME: (i32* noalias nocapture nonnull readnone [[A:%.*]]) #[[ATTR4]] {
-; CGSCC-NEXT:    call void @use_i32_ptr(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR4]]
+; CGSCC-SAME: (ptr noalias nocapture nonnull readnone [[A:%.*]]) #[[ATTR4]] {
+; CGSCC-NEXT:    call void @use_i32_ptr(ptr noalias nocapture nonnull readnone [[A]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @use_i32_ptr(i32* %a)
+  call void @use_i32_ptr(ptr %a)
   ret void
 }
 
 ; Check we do not annotate the function interface of this weak function.
-define weak_odr void @weak_caller(i32* nonnull %a) {
+define weak_odr void @weak_caller(ptr nonnull %a) {
 ;
 ; TUNIT-LABEL: define {{[^@]+}}@weak_caller
-; TUNIT-SAME: (i32* nonnull [[A:%.*]]) {
-; TUNIT-NEXT:    call void @called_by_weak(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR5]]
+; TUNIT-SAME: (ptr nonnull [[A:%.*]]) {
+; TUNIT-NEXT:    call void @called_by_weak(ptr noalias nocapture nonnull readnone [[A]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@weak_caller
-; CGSCC-SAME: (i32* nonnull [[A:%.*]]) {
-; CGSCC-NEXT:    call void @called_by_weak(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR4]]
+; CGSCC-SAME: (ptr nonnull [[A:%.*]]) {
+; CGSCC-NEXT:    call void @called_by_weak(ptr noalias nocapture nonnull readnone [[A]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @called_by_weak(i32* %a)
+  call void @called_by_weak(ptr %a)
   ret void
 }
 
 ; Expect nonnull
-define internal void @control(i32* dereferenceable(4) %a) {
+define internal void @control(ptr dereferenceable(4) %a) {
 ; TUNIT: Function Attrs: nounwind
 ; TUNIT-LABEL: define {{[^@]+}}@control
-; TUNIT-SAME: (i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A:%.*]]) #[[ATTR5]] {
-; TUNIT-NEXT:    call void @use_i32_ptr(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR5]]
+; TUNIT-SAME: (ptr noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A:%.*]]) #[[ATTR5]] {
+; TUNIT-NEXT:    call void @use_i32_ptr(ptr noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nounwind
 ; CGSCC-LABEL: define {{[^@]+}}@control
-; CGSCC-SAME: (i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A:%.*]]) #[[ATTR4]] {
-; CGSCC-NEXT:    call void @use_i32_ptr(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR4]]
+; CGSCC-SAME: (ptr noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A:%.*]]) #[[ATTR4]] {
+; CGSCC-NEXT:    call void @use_i32_ptr(ptr noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @use_i32_ptr(i32* %a)
+  call void @use_i32_ptr(ptr %a)
   ret void
 }
 ; Avoid nonnull as we do not touch naked functions
-define internal void @naked(i32* dereferenceable(4) %a) naked {
+define internal void @naked(ptr dereferenceable(4) %a) naked {
 ; CHECK: Function Attrs: naked
 ; CHECK-LABEL: define {{[^@]+}}@naked
-; CHECK-SAME: (i32* dereferenceable(4) [[A:%.*]]) #[[ATTR10:[0-9]+]] {
-; CHECK-NEXT:    call void @use_i32_ptr(i32* [[A]])
+; CHECK-SAME: (ptr dereferenceable(4) [[A:%.*]]) #[[ATTR10:[0-9]+]] {
+; CHECK-NEXT:    call void @use_i32_ptr(ptr [[A]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @use_i32_ptr(i32* %a)
+  call void @use_i32_ptr(ptr %a)
   ret void
 }
 ; Avoid nonnull as we do not touch optnone
-define internal void @optnone(i32* dereferenceable(4) %a) optnone noinline {
+define internal void @optnone(ptr dereferenceable(4) %a) optnone noinline {
 ;
 ; CHECK: Function Attrs: noinline optnone
 ; CHECK-LABEL: define {{[^@]+}}@optnone
-; CHECK-SAME: (i32* dereferenceable(4) [[A:%.*]]) #[[ATTR11:[0-9]+]] {
-; CHECK-NEXT:    call void @use_i32_ptr(i32* [[A]])
+; CHECK-SAME: (ptr dereferenceable(4) [[A:%.*]]) #[[ATTR11:[0-9]+]] {
+; CHECK-NEXT:    call void @use_i32_ptr(ptr [[A]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @use_i32_ptr(i32* %a)
+  call void @use_i32_ptr(ptr %a)
   ret void
 }
-define void @make_live(i32* nonnull dereferenceable(8) %a) {
+define void @make_live(ptr nonnull dereferenceable(8) %a) {
 ; TUNIT-LABEL: define {{[^@]+}}@make_live
-; TUNIT-SAME: (i32* noundef nonnull align 16 dereferenceable(8) [[A:%.*]]) {
-; TUNIT-NEXT:    call void @naked(i32* noundef nonnull align 16 dereferenceable(8) [[A]])
-; TUNIT-NEXT:    call void @control(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR5]]
-; TUNIT-NEXT:    call void @optnone(i32* noundef nonnull align 16 dereferenceable(8) [[A]])
+; TUNIT-SAME: (ptr noundef nonnull align 16 dereferenceable(8) [[A:%.*]]) {
+; TUNIT-NEXT:    call void @naked(ptr noundef nonnull align 16 dereferenceable(8) [[A]])
+; TUNIT-NEXT:    call void @control(ptr noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR5]]
+; TUNIT-NEXT:    call void @optnone(ptr noundef nonnull align 16 dereferenceable(8) [[A]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@make_live
-; CGSCC-SAME: (i32* noundef nonnull align 16 dereferenceable(8) [[A:%.*]]) {
-; CGSCC-NEXT:    call void @naked(i32* noundef nonnull align 16 dereferenceable(8) [[A]])
-; CGSCC-NEXT:    call void @control(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR4]]
-; CGSCC-NEXT:    call void @optnone(i32* noundef nonnull align 16 dereferenceable(8) [[A]])
+; CGSCC-SAME: (ptr noundef nonnull align 16 dereferenceable(8) [[A:%.*]]) {
+; CGSCC-NEXT:    call void @naked(ptr noundef nonnull align 16 dereferenceable(8) [[A]])
+; CGSCC-NEXT:    call void @control(ptr noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR4]]
+; CGSCC-NEXT:    call void @optnone(ptr noundef nonnull align 16 dereferenceable(8) [[A]])
 ; CGSCC-NEXT:    ret void
 ;
-  call void @naked(i32* nonnull dereferenceable(8) align 16 %a)
-  call void @control(i32* nonnull dereferenceable(8) align 16 %a)
-  call void @optnone(i32* nonnull dereferenceable(8) align 16 %a)
+  call void @naked(ptr nonnull dereferenceable(8) align 16 %a)
+  call void @control(ptr nonnull dereferenceable(8) align 16 %a)
+  call void @optnone(ptr nonnull dereferenceable(8) align 16 %a)
   ret void
 }
 
@@ -1093,38 +1092,38 @@ define void @make_live(i32* nonnull dereferenceable(8) %a) {
 ;  }
 ;  return g(nonnull u);
 ;}
-declare void @h(i32*) willreturn nounwind
-declare i32 @g(i32*) willreturn nounwind
-define i32 @nonnull_exec_ctx_1(i32* %a, i32 %b) {
+declare void @h(ptr) willreturn nounwind
+declare i32 @g(ptr) willreturn nounwind
+define i32 @nonnull_exec_ctx_1(ptr %a, i32 %b) {
 ;
 ; TUNIT: Function Attrs: nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1
-; TUNIT-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
+; TUNIT-SAME: (ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
 ; TUNIT-NEXT:  en:
 ; TUNIT-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[B]], 0
 ; TUNIT-NEXT:    br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
 ; TUNIT:       ex:
-; TUNIT-NEXT:    [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR7]]
+; TUNIT-NEXT:    [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret i32 [[TMP5]]
 ; TUNIT:       hd:
 ; TUNIT-NEXT:    [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
-; TUNIT-NEXT:    tail call void @h(i32* [[A]]) #[[ATTR7]]
+; TUNIT-NEXT:    tail call void @h(ptr [[A]]) #[[ATTR7]]
 ; TUNIT-NEXT:    [[TMP8]] = add nuw i32 [[TMP7]], 1
 ; TUNIT-NEXT:    [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
 ; TUNIT-NEXT:    br i1 [[TMP9]], label [[EX]], label [[HD]]
 ;
 ; CGSCC: Function Attrs: nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1
-; CGSCC-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
+; CGSCC-SAME: (ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
 ; CGSCC-NEXT:  en:
 ; CGSCC-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[B]], 0
 ; CGSCC-NEXT:    br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
 ; CGSCC:       ex:
-; CGSCC-NEXT:    [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR6]]
+; CGSCC-NEXT:    [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR6]]
 ; CGSCC-NEXT:    ret i32 [[TMP5]]
 ; CGSCC:       hd:
 ; CGSCC-NEXT:    [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
-; CGSCC-NEXT:    tail call void @h(i32* [[A]]) #[[ATTR6]]
+; CGSCC-NEXT:    tail call void @h(ptr [[A]]) #[[ATTR6]]
 ; CGSCC-NEXT:    [[TMP8]] = add nuw i32 [[TMP7]], 1
 ; CGSCC-NEXT:    [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
 ; CGSCC-NEXT:    br i1 [[TMP9]], label [[EX]], label [[HD]]
@@ -1134,31 +1133,31 @@ en:
   br i1 %tmp3, label %ex, label %hd
 
 ex:
-  %tmp5 = tail call i32 @g(i32* nonnull %a)
+  %tmp5 = tail call i32 @g(ptr nonnull %a)
   ret i32 %tmp5
 
 hd:
   %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]
-  tail call void @h(i32* %a)
+  tail call void @h(ptr %a)
   %tmp8 = add nuw i32 %tmp7, 1
   %tmp9 = icmp eq i32 %tmp8, %b
   br i1 %tmp9, label %ex, label %hd
 }
 
-define i32 @nonnull_exec_ctx_1b(i32* %a, i32 %b) {
+define i32 @nonnull_exec_ctx_1b(ptr %a, i32 %b) {
 ;
 ; TUNIT: Function Attrs: nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1b
-; TUNIT-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
+; TUNIT-SAME: (ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
 ; TUNIT-NEXT:  en:
 ; TUNIT-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[B]], 0
 ; TUNIT-NEXT:    br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
 ; TUNIT:       ex:
-; TUNIT-NEXT:    [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR7]]
+; TUNIT-NEXT:    [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret i32 [[TMP5]]
 ; TUNIT:       hd:
 ; TUNIT-NEXT:    [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
-; TUNIT-NEXT:    tail call void @h(i32* [[A]]) #[[ATTR7]]
+; TUNIT-NEXT:    tail call void @h(ptr [[A]]) #[[ATTR7]]
 ; TUNIT-NEXT:    br label [[HD2]]
 ; TUNIT:       hd2:
 ; TUNIT-NEXT:    [[TMP8]] = add nuw i32 [[TMP7]], 1
@@ -1167,16 +1166,16 @@ define i32 @nonnull_exec_ctx_1b(i32* %a, i32 %b) {
 ;
 ; CGSCC: Function Attrs: nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1b
-; CGSCC-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
+; CGSCC-SAME: (ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
 ; CGSCC-NEXT:  en:
 ; CGSCC-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[B]], 0
 ; CGSCC-NEXT:    br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
 ; CGSCC:       ex:
-; CGSCC-NEXT:    [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR6]]
+; CGSCC-NEXT:    [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR6]]
 ; CGSCC-NEXT:    ret i32 [[TMP5]]
 ; CGSCC:       hd:
 ; CGSCC-NEXT:    [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
-; CGSCC-NEXT:    tail call void @h(i32* [[A]]) #[[ATTR6]]
+; CGSCC-NEXT:    tail call void @h(ptr [[A]]) #[[ATTR6]]
 ; CGSCC-NEXT:    br label [[HD2]]
 ; CGSCC:       hd2:
 ; CGSCC-NEXT:    [[TMP8]] = add nuw i32 [[TMP7]], 1
@@ -1188,12 +1187,12 @@ en:
   br i1 %tmp3, label %ex, label %hd
 
 ex:
-  %tmp5 = tail call i32 @g(i32* nonnull %a)
+  %tmp5 = tail call i32 @g(ptr nonnull %a)
   ret i32 %tmp5
 
 hd:
   %tmp7 = phi i32 [ %tmp8, %hd2 ], [ 0, %en ]
-  tail call void @h(i32* %a)
+  tail call void @h(ptr %a)
   br label %hd2
 
 hd2:
@@ -1202,36 +1201,36 @@ hd2:
   br i1 %tmp9, label %ex, label %hd
 }
 
-define i32 @nonnull_exec_ctx_2(i32* %a, i32 %b) willreturn nounwind {
+define i32 @nonnull_exec_ctx_2(ptr %a, i32 %b) willreturn nounwind {
 ;
 ; TUNIT: Function Attrs: nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2
-; TUNIT-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
+; TUNIT-SAME: (ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
 ; TUNIT-NEXT:  en:
 ; TUNIT-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[B]], 0
 ; TUNIT-NEXT:    br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
 ; TUNIT:       ex:
-; TUNIT-NEXT:    [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR5]]
+; TUNIT-NEXT:    [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret i32 [[TMP5]]
 ; TUNIT:       hd:
 ; TUNIT-NEXT:    [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
-; TUNIT-NEXT:    tail call void @h(i32* nonnull [[A]]) #[[ATTR5]]
+; TUNIT-NEXT:    tail call void @h(ptr nonnull [[A]]) #[[ATTR5]]
 ; TUNIT-NEXT:    [[TMP8]] = add nuw i32 [[TMP7]], 1
 ; TUNIT-NEXT:    [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
 ; TUNIT-NEXT:    br i1 [[TMP9]], label [[EX]], label [[HD]]
 ;
 ; CGSCC: Function Attrs: nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2
-; CGSCC-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
+; CGSCC-SAME: (ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
 ; CGSCC-NEXT:  en:
 ; CGSCC-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[B]], 0
 ; CGSCC-NEXT:    br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
 ; CGSCC:       ex:
-; CGSCC-NEXT:    [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR4]]
+; CGSCC-NEXT:    [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret i32 [[TMP5]]
 ; CGSCC:       hd:
 ; CGSCC-NEXT:    [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
-; CGSCC-NEXT:    tail call void @h(i32* nonnull [[A]]) #[[ATTR4]]
+; CGSCC-NEXT:    tail call void @h(ptr nonnull [[A]]) #[[ATTR4]]
 ; CGSCC-NEXT:    [[TMP8]] = add nuw i32 [[TMP7]], 1
 ; CGSCC-NEXT:    [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
 ; CGSCC-NEXT:    br i1 [[TMP9]], label [[EX]], label [[HD]]
@@ -1241,31 +1240,31 @@ en:
   br i1 %tmp3, label %ex, label %hd
 
 ex:
-  %tmp5 = tail call i32 @g(i32* nonnull %a)
+  %tmp5 = tail call i32 @g(ptr nonnull %a)
   ret i32 %tmp5
 
 hd:
   %tmp7 = phi i32 [ %tmp8, %hd ], [ 0, %en ]
-  tail call void @h(i32* %a)
+  tail call void @h(ptr %a)
   %tmp8 = add nuw i32 %tmp7, 1
   %tmp9 = icmp eq i32 %tmp8, %b
   br i1 %tmp9, label %ex, label %hd
 }
 
-define i32 @nonnull_exec_ctx_2b(i32* %a, i32 %b) willreturn nounwind {
+define i32 @nonnull_exec_ctx_2b(ptr %a, i32 %b) willreturn nounwind {
 ;
 ; TUNIT: Function Attrs: nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2b
-; TUNIT-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
+; TUNIT-SAME: (ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
 ; TUNIT-NEXT:  en:
 ; TUNIT-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[B]], 0
 ; TUNIT-NEXT:    br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
 ; TUNIT:       ex:
-; TUNIT-NEXT:    [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR5]]
+; TUNIT-NEXT:    [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret i32 [[TMP5]]
 ; TUNIT:       hd:
 ; TUNIT-NEXT:    [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
-; TUNIT-NEXT:    tail call void @h(i32* nonnull [[A]]) #[[ATTR5]]
+; TUNIT-NEXT:    tail call void @h(ptr nonnull [[A]]) #[[ATTR5]]
 ; TUNIT-NEXT:    br label [[HD2]]
 ; TUNIT:       hd2:
 ; TUNIT-NEXT:    [[TMP8]] = add nuw i32 [[TMP7]], 1
@@ -1274,16 +1273,16 @@ define i32 @nonnull_exec_ctx_2b(i32* %a, i32 %b) willreturn nounwind {
 ;
 ; CGSCC: Function Attrs: nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2b
-; CGSCC-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
+; CGSCC-SAME: (ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
 ; CGSCC-NEXT:  en:
 ; CGSCC-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[B]], 0
 ; CGSCC-NEXT:    br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
 ; CGSCC:       ex:
-; CGSCC-NEXT:    [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR4]]
+; CGSCC-NEXT:    [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret i32 [[TMP5]]
 ; CGSCC:       hd:
 ; CGSCC-NEXT:    [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
-; CGSCC-NEXT:    tail call void @h(i32* nonnull [[A]]) #[[ATTR4]]
+; CGSCC-NEXT:    tail call void @h(ptr nonnull [[A]]) #[[ATTR4]]
 ; CGSCC-NEXT:    br label [[HD2]]
 ; CGSCC:       hd2:
 ; CGSCC-NEXT:    [[TMP8]] = add nuw i32 [[TMP7]], 1
@@ -1295,12 +1294,12 @@ en:
   br i1 %tmp3, label %ex, label %hd
 
 ex:
-  %tmp5 = tail call i32 @g(i32* nonnull %a)
+  %tmp5 = tail call i32 @g(ptr nonnull %a)
   ret i32 %tmp5
 
 hd:
   %tmp7 = phi i32 [ %tmp8, %hd2 ], [ 0, %en ]
-  tail call void @h(i32* %a)
+  tail call void @h(ptr %a)
   br label %hd2
 
 hd2:
@@ -1310,22 +1309,22 @@ hd2:
 }
 
 ; Original from PR43833
-declare void @sink(i32*)
+declare void @sink(ptr)
 
-define void @PR43833(i32* %0, i32 %1) {
+define void @PR43833(ptr %0, i32 %1) {
 ; CHECK-LABEL: define {{[^@]+}}@PR43833
-; CHECK-SAME: (i32* [[TMP0:%.*]], i32 [[TMP1:%.*]]) {
+; CHECK-SAME: (ptr [[TMP0:%.*]], i32 [[TMP1:%.*]]) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp sgt i32 [[TMP1]], 1
 ; CHECK-NEXT:    br i1 [[TMP3]], label [[TMP4:%.*]], label [[TMP7:%.*]]
 ; CHECK:       4:
 ; CHECK-NEXT:    [[TMP5:%.*]] = zext i32 [[TMP1]] to i64
-; CHECK-NEXT:    [[TMP6:%.*]] = getelementptr inbounds i32, i32* [[TMP0]], i64 [[TMP5]]
+; CHECK-NEXT:    [[TMP6:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 [[TMP5]]
 ; CHECK-NEXT:    br label [[TMP8:%.*]]
 ; CHECK:       7:
 ; CHECK-NEXT:    ret void
 ; CHECK:       8:
 ; CHECK-NEXT:    [[TMP9:%.*]] = phi i32 [ 1, [[TMP4]] ], [ [[TMP10:%.*]], [[TMP8]] ]
-; CHECK-NEXT:    tail call void @sink(i32* nonnull [[TMP6]])
+; CHECK-NEXT:    tail call void @sink(ptr nonnull [[TMP6]])
 ; CHECK-NEXT:    [[TMP10]] = add nuw nsw i32 [[TMP9]], 1
 ; CHECK-NEXT:    [[TMP11:%.*]] = icmp eq i32 [[TMP10]], [[TMP1]]
 ; CHECK-NEXT:    br i1 [[TMP11]], label [[TMP7]], label [[TMP8]]
@@ -1335,7 +1334,7 @@ define void @PR43833(i32* %0, i32 %1) {
 
 4:                                                ; preds = %2
   %5 = zext i32 %1 to i64
-  %6 = getelementptr inbounds i32, i32* %0, i64 %5
+  %6 = getelementptr inbounds i32, ptr %0, i64 %5
   br label %8
 
 7:                                                ; preds = %8, %2
@@ -1343,27 +1342,27 @@ define void @PR43833(i32* %0, i32 %1) {
 
 8:                                                ; preds = %8, %4
   %9 = phi i32 [ 1, %4 ], [ %10, %8 ]
-  tail call void @sink(i32* %6)
+  tail call void @sink(ptr %6)
   %10 = add nuw nsw i32 %9, 1
   %11 = icmp eq i32 %10, %1
   br i1 %11, label %7, label %8
 }
 
 ; Adjusted from PR43833
-define void @PR43833_simple(i32* %0, i32 %1) {
+define void @PR43833_simple(ptr %0, i32 %1) {
 ; CHECK-LABEL: define {{[^@]+}}@PR43833_simple
-; CHECK-SAME: (i32* [[TMP0:%.*]], i32 [[TMP1:%.*]]) {
+; CHECK-SAME: (ptr [[TMP0:%.*]], i32 [[TMP1:%.*]]) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i32 [[TMP1]], 0
 ; CHECK-NEXT:    br i1 [[TMP3]], label [[TMP4:%.*]], label [[TMP7:%.*]]
 ; CHECK:       4:
 ; CHECK-NEXT:    [[TMP5:%.*]] = zext i32 [[TMP1]] to i64
-; CHECK-NEXT:    [[TMP6:%.*]] = getelementptr inbounds i32, i32* [[TMP0]], i64 [[TMP5]]
+; CHECK-NEXT:    [[TMP6:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 [[TMP5]]
 ; CHECK-NEXT:    br label [[TMP8:%.*]]
 ; CHECK:       7:
 ; CHECK-NEXT:    ret void
 ; CHECK:       8:
 ; CHECK-NEXT:    [[TMP9:%.*]] = phi i32 [ 1, [[TMP4]] ], [ [[TMP10:%.*]], [[TMP8]] ]
-; CHECK-NEXT:    tail call void @sink(i32* nonnull [[TMP6]])
+; CHECK-NEXT:    tail call void @sink(ptr nonnull [[TMP6]])
 ; CHECK-NEXT:    [[TMP10]] = add nuw nsw i32 [[TMP9]], 1
 ; CHECK-NEXT:    [[TMP11:%.*]] = icmp eq i32 [[TMP10]], [[TMP1]]
 ; CHECK-NEXT:    br i1 [[TMP11]], label [[TMP7]], label [[TMP8]]
@@ -1373,7 +1372,7 @@ define void @PR43833_simple(i32* %0, i32 %1) {
 
 4:                                                ; preds = %2
   %5 = zext i32 %1 to i64
-  %6 = getelementptr inbounds i32, i32* %0, i64 %5
+  %6 = getelementptr inbounds i32, ptr %0, i64 %5
   br label %8
 
 7:                                                ; preds = %8, %2
@@ -1381,143 +1380,141 @@ define void @PR43833_simple(i32* %0, i32 %1) {
 
 8:                                                ; preds = %8, %4
   %9 = phi i32 [ 1, %4 ], [ %10, %8 ]
-  tail call void @sink(i32* %6)
+  tail call void @sink(ptr %6)
   %10 = add nuw nsw i32 %9, 1
   %11 = icmp eq i32 %10, %1
   br i1 %11, label %7, label %8
 }
 
-declare i8* @strrchr(i8* %0, i32 %1) nofree nounwind readonly willreturn
+declare ptr @strrchr(ptr %0, i32 %1) nofree nounwind readonly willreturn
 
 ; We should not mark the return of @strrchr as `nonnull`, it may well be NULL!
-define i8* @mybasename(i8* nofree readonly %str) {
+define ptr @mybasename(ptr nofree readonly %str) {
 ; CHECK: Function Attrs: nofree nounwind willreturn memory(read)
 ; CHECK-LABEL: define {{[^@]+}}@mybasename
-; CHECK-SAME: (i8* nofree readonly [[STR:%.*]]) #[[ATTR12:[0-9]+]] {
-; CHECK-NEXT:    [[CALL:%.*]] = call i8* @strrchr(i8* nofree readonly [[STR]], i32 noundef 47) #[[ATTR13]]
-; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp ne i8* [[CALL]], null
-; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i8, i8* [[CALL]], i64 1
-; CHECK-NEXT:    [[COND:%.*]] = select i1 [[TOBOOL]], i8* [[ADD_PTR]], i8* [[STR]]
-; CHECK-NEXT:    ret i8* [[COND]]
-;
-  %call = call i8* @strrchr(i8* %str, i32 47)
-  %tobool = icmp ne i8* %call, null
-  %add.ptr = getelementptr inbounds i8, i8* %call, i64 1
-  %cond = select i1 %tobool, i8* %add.ptr, i8* %str
-  ret i8* %cond
+; CHECK-SAME: (ptr nofree readonly [[STR:%.*]]) #[[ATTR12:[0-9]+]] {
+; CHECK-NEXT:    [[CALL:%.*]] = call ptr @strrchr(ptr nofree readonly [[STR]], i32 noundef 47) #[[ATTR13]]
+; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp ne ptr [[CALL]], null
+; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[CALL]], i64 1
+; CHECK-NEXT:    [[COND:%.*]] = select i1 [[TOBOOL]], ptr [[ADD_PTR]], ptr [[STR]]
+; CHECK-NEXT:    ret ptr [[COND]]
+;
+  %call = call ptr @strrchr(ptr %str, i32 47)
+  %tobool = icmp ne ptr %call, null
+  %add.ptr = getelementptr inbounds i8, ptr %call, i64 1
+  %cond = select i1 %tobool, ptr %add.ptr, ptr %str
+  ret ptr %cond
 }
 
-define void @nonnull_assume_pos(i8* %arg) {
+define void @nonnull_assume_pos(ptr %arg) {
 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@nonnull_assume_pos
-; ATTRIBUTOR-SAME: (i8* nocapture nofree nonnull readnone [[ARG:%.*]])
-; ATTRIBUTOR-NEXT:    call void @llvm.assume(i1 true) #11 [ "nonnull"(i8* [[ARG]]) ]
-; ATTRIBUTOR-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]])
-; ATTRIBUTOR-NEXT:    [[TMP1:%.*]] = call i8* @unknown()
+; ATTRIBUTOR-SAME: (ptr nocapture nofree nonnull readnone [[ARG:%.*]])
+; ATTRIBUTOR-NEXT:    call void @llvm.assume(i1 true) #11 [ "nonnull"(ptr [[ARG]]) ]
+; ATTRIBUTOR-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[ARG]])
+; ATTRIBUTOR-NEXT:    [[TMP1:%.*]] = call ptr @unknown()
 ; ATTRIBUTOR-NEXT:    ret void
 ;
 ; TUNIT-LABEL: define {{[^@]+}}@nonnull_assume_pos
-; TUNIT-SAME: (i8* nocapture nofree nonnull readnone [[ARG:%.*]]) {
-; TUNIT-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "nonnull"(i8* [[ARG]]) ]
-; TUNIT-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
-; TUNIT-NEXT:    [[TMP1:%.*]] = call i8* @unknown()
+; TUNIT-SAME: (ptr nocapture nofree nonnull readnone [[ARG:%.*]]) {
+; TUNIT-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "nonnull"(ptr [[ARG]]) ]
+; TUNIT-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
+; TUNIT-NEXT:    [[TMP1:%.*]] = call ptr @unknown()
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@nonnull_assume_pos
-; CGSCC-SAME: (i8* nocapture nofree nonnull readnone [[ARG:%.*]]) {
-; CGSCC-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "nonnull"(i8* [[ARG]]) ]
-; CGSCC-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
-; CGSCC-NEXT:    [[TMP1:%.*]] = call i8* @unknown()
+; CGSCC-SAME: (ptr nocapture nofree nonnull readnone [[ARG:%.*]]) {
+; CGSCC-NEXT:    call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "nonnull"(ptr [[ARG]]) ]
+; CGSCC-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
+; CGSCC-NEXT:    [[TMP1:%.*]] = call ptr @unknown()
 ; CGSCC-NEXT:    ret void
 ;
-  call void @llvm.assume(i1 true) ["nonnull"(i8* %arg)]
-  call void @use_i8_ptr(i8* %arg)
-  call i8* @unknown()
+  call void @llvm.assume(i1 true) ["nonnull"(ptr %arg)]
+  call void @use_i8_ptr(ptr %arg)
+  call ptr @unknown()
   ret void
 }
-define void @nonnull_assume_neg(i8* %arg) {
+define void @nonnull_assume_neg(ptr %arg) {
 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@nonnull_assume_neg
-; ATTRIBUTOR-SAME: (i8* nocapture nofree readnone [[ARG:%.*]])
-; ATTRIBUTOR-NEXT:    [[TMP1:%.*]] = call i8* @unknown()
-; ATTRIBUTOR-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[ARG]])
-; ATTRIBUTOR-NEXT:    call void @llvm.assume(i1 true) [ "nonnull"(i8* [[ARG]]) ]
-; ATTRIBUTOR-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]])
-; ATTRIBUTOR-NEXT:    [[TMP2:%.*]] = call i8* @unknown()
-; ATTRIBUTOR-NEXT:    call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]])
-; ATTRIBUTOR-NEXT:    call void @llvm.assume(i1 true) [ "nonnull"(i8* [[ARG]]) ]
-; ATTRIBUTOR-NEXT:    call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]])
+; ATTRIBUTOR-SAME: (ptr nocapture nofree readnone [[ARG:%.*]])
+; ATTRIBUTOR-NEXT:    [[TMP1:%.*]] = call ptr @unknown()
+; ATTRIBUTOR-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree readnone [[ARG]])
+; ATTRIBUTOR-NEXT:    call void @llvm.assume(i1 true) [ "nonnull"(ptr [[ARG]]) ]
+; ATTRIBUTOR-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[ARG]])
+; ATTRIBUTOR-NEXT:    [[TMP2:%.*]] = call ptr @unknown()
+; ATTRIBUTOR-NEXT:    call void @use_i8_ptr_ret(ptr noalias nocapture nofree nonnull readnone [[ARG]])
+; ATTRIBUTOR-NEXT:    call void @llvm.assume(i1 true) [ "nonnull"(ptr [[ARG]]) ]
+; ATTRIBUTOR-NEXT:    call void @use_i8_ptr_ret(ptr noalias nocapture nofree nonnull readnone [[ARG]])
 ; ATTRIBUTOR-NEXT:    ret void
 ;
 ;
 ; TUNIT-LABEL: define {{[^@]+}}@nonnull_assume_neg
-; TUNIT-SAME: (i8* nocapture nofree readnone [[ARG:%.*]]) {
-; TUNIT-NEXT:    [[TMP1:%.*]] = call i8* @unknown()
-; TUNIT-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[ARG]]) #[[ATTR5]]
-; TUNIT-NEXT:    call void @llvm.assume(i1 noundef true) [ "nonnull"(i8* [[ARG]]) ]
-; TUNIT-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
-; TUNIT-NEXT:    [[TMP2:%.*]] = call i8* @unknown()
-; TUNIT-NEXT:    call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
-; TUNIT-NEXT:    call void @llvm.assume(i1 noundef true) [ "nonnull"(i8* [[ARG]]) ]
-; TUNIT-NEXT:    call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
+; TUNIT-SAME: (ptr nocapture nofree readnone [[ARG:%.*]]) {
+; TUNIT-NEXT:    [[TMP1:%.*]] = call ptr @unknown()
+; TUNIT-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree readnone [[ARG]]) #[[ATTR5]]
+; TUNIT-NEXT:    call void @llvm.assume(i1 noundef true) [ "nonnull"(ptr [[ARG]]) ]
+; TUNIT-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
+; TUNIT-NEXT:    [[TMP2:%.*]] = call ptr @unknown()
+; TUNIT-NEXT:    call void @use_i8_ptr_ret(ptr noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
+; TUNIT-NEXT:    call void @llvm.assume(i1 noundef true) [ "nonnull"(ptr [[ARG]]) ]
+; TUNIT-NEXT:    call void @use_i8_ptr_ret(ptr noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@nonnull_assume_neg
-; CGSCC-SAME: (i8* nocapture nofree readnone [[ARG:%.*]]) {
-; CGSCC-NEXT:    [[TMP1:%.*]] = call i8* @unknown()
-; CGSCC-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[ARG]]) #[[ATTR4]]
-; CGSCC-NEXT:    call void @llvm.assume(i1 noundef true) [ "nonnull"(i8* [[ARG]]) ]
-; CGSCC-NEXT:    call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
-; CGSCC-NEXT:    [[TMP2:%.*]] = call i8* @unknown()
-; CGSCC-NEXT:    call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
-; CGSCC-NEXT:    call void @llvm.assume(i1 noundef true) [ "nonnull"(i8* [[ARG]]) ]
-; CGSCC-NEXT:    call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
+; CGSCC-SAME: (ptr nocapture nofree readnone [[ARG:%.*]]) {
+; CGSCC-NEXT:    [[TMP1:%.*]] = call ptr @unknown()
+; CGSCC-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree readnone [[ARG]]) #[[ATTR4]]
+; CGSCC-NEXT:    call void @llvm.assume(i1 noundef true) [ "nonnull"(ptr [[ARG]]) ]
+; CGSCC-NEXT:    call void @use_i8_ptr(ptr noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
+; CGSCC-NEXT:    [[TMP2:%.*]] = call ptr @unknown()
+; CGSCC-NEXT:    call void @use_i8_ptr_ret(ptr noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
+; CGSCC-NEXT:    call void @llvm.assume(i1 noundef true) [ "nonnull"(ptr [[ARG]]) ]
+; CGSCC-NEXT:    call void @use_i8_ptr_ret(ptr noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
-  call i8* @unknown()
-  call void @use_i8_ptr(i8* %arg)
-  call void @llvm.assume(i1 true) ["nonnull"(i8* %arg)]
-  call void @use_i8_ptr(i8* %arg)
-  call i8* @unknown()
-  call void @use_i8_ptr_ret(i8* %arg)
-  call void @llvm.assume(i1 true) ["nonnull"(i8* %arg)]
-  call void @use_i8_ptr_ret(i8* %arg)
+  call ptr @unknown()
+  call void @use_i8_ptr(ptr %arg)
+  call void @llvm.assume(i1 true) ["nonnull"(ptr %arg)]
+  call void @use_i8_ptr(ptr %arg)
+  call ptr @unknown()
+  call void @use_i8_ptr_ret(ptr %arg)
+  call void @llvm.assume(i1 true) ["nonnull"(ptr %arg)]
+  call void @use_i8_ptr_ret(ptr %arg)
   ret void
 }
-declare void @use_i8_ptr(i8* nofree nocapture readnone) nounwind
-declare void @use_i8_ptr_ret(i8* nofree nocapture readnone) nounwind willreturn
+declare void @use_i8_ptr(ptr nofree nocapture readnone) nounwind
+declare void @use_i8_ptr_ret(ptr nofree nocapture readnone) nounwind willreturn
 
-define i8* @nonnull_function_ptr_1() {
+define ptr @nonnull_function_ptr_1() {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@nonnull_function_ptr_1
 ; CHECK-SAME: () #[[ATTR1]] {
-; CHECK-NEXT:    ret i8* bitcast (i8* ()* @nonnull_function_ptr_1 to i8*)
+; CHECK-NEXT:    ret ptr @nonnull_function_ptr_1
 ;
-  %bc = bitcast i8*()* @nonnull_function_ptr_1 to i8*
-  ret i8* %bc
+  ret ptr @nonnull_function_ptr_1
 }
 
-declare i8* @function_decl()
-define i8* @nonnull_function_ptr_2() {
+declare ptr @function_decl()
+define ptr @nonnull_function_ptr_2() {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@nonnull_function_ptr_2
 ; CHECK-SAME: () #[[ATTR1]] {
-; CHECK-NEXT:    ret i8* bitcast (i8* ()* @function_decl to i8*)
+; CHECK-NEXT:    ret ptr @function_decl
 ;
-  %bc = bitcast i8*()* @function_decl to i8*
-  ret i8* %bc
+  ret ptr @function_decl
 }
 
 ; FIXME: nonnull should not be propagated to the caller's p unless there is noundef
-define void @nonnull_caller(i8* %p) {
+define void @nonnull_caller(ptr %p) {
 ; CHECK-LABEL: define {{[^@]+}}@nonnull_caller
-; CHECK-SAME: (i8* nonnull [[P:%.*]]) {
-; CHECK-NEXT:    call void @nonnull_callee(i8* nonnull [[P]])
+; CHECK-SAME: (ptr nonnull [[P:%.*]]) {
+; CHECK-NEXT:    call void @nonnull_callee(ptr nonnull [[P]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @nonnull_callee(i8* %p)
+  call void @nonnull_callee(ptr %p)
   ret void
 }
 
-declare void @nonnull_callee(i8* nonnull %p)
+declare void @nonnull_callee(ptr nonnull %p)
 
 attributes #0 = { null_pointer_is_valid }
 attributes #1 = { nounwind willreturn}

diff  --git a/llvm/test/Transforms/Attributor/noreturn_async.ll b/llvm/test/Transforms/Attributor/noreturn_async.ll
index fda44e8419e42..dcda482767512 100644
--- a/llvm/test/Transforms/Attributor/noreturn_async.ll
+++ b/llvm/test/Transforms/Attributor/noreturn_async.ll
@@ -29,9 +29,9 @@ entry:
 ; CHECK-NEXT:   {{.*}}@printf{{.*}}
 ; CHECK-NEXT:   call void @"?overflow@@YAXXZ"()
 ; CHECK-NEXT:   unreachable
-  %call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@", i64 0, i64 0)) nofree nosync nounwind
+  %call2 = call i32 (ptr, ...) @printf(ptr @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@") nofree nosync nounwind
   call void @"?overflow@@YAXXZ"()
-  %call3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@", i64 0, i64 0))
+  %call3 = call i32 (ptr, ...) @printf(ptr @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@")
   br label %b
 b:
   ret void
@@ -42,7 +42,7 @@ b:
 ; CHECK-NOT:    noreturn
 ; CHECK:        define
 ; CHECK-SAME:   @"?catchoverflow@@YAHXZ"()
-define dso_local i32 @"?catchoverflow@@YAHXZ"()  personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*) {
+define dso_local i32 @"?catchoverflow@@YAHXZ"()  personality ptr @__C_specific_handler {
 entry:
   %retval = alloca i32, align 4
   %__exception_code = alloca i32, align 4
@@ -60,24 +60,24 @@ catch.dispatch:                                   ; preds = %invoke.cont, %entry
   %0 = catchswitch within none [label %__except] unwind to caller
 
 __except:                                         ; preds = %catch.dispatch
-  %1 = catchpad within %0 [i8* null]
+  %1 = catchpad within %0 [ptr null]
   catchret from %1 to label %__except2
 
 __except2:                                        ; preds = %__except
   %2 = call i32 @llvm.eh.exceptioncode(token %1)
-  store i32 1, i32* %retval, align 4
+  store i32 1, ptr %retval, align 4
   br label %return
 
 invoke.cont1:                                     ; preds = %invoke.cont
-  store i32 0, i32* %retval, align 4
+  store i32 0, ptr %retval, align 4
   br label %return
 
 __try.cont:                                       ; No predecessors!
-  store i32 2, i32* %retval, align 4
+  store i32 2, ptr %retval, align 4
   br label %return
 
 return:                                           ; preds = %__try.cont, %__except2, %invoke.cont1
-  %3 = load i32, i32* %retval, align 4
+  %3 = load i32, ptr %retval, align 4
   ret i32 %3
 }
 
@@ -88,10 +88,10 @@ entry:
 ; CHECK-NOT:  nounwind
 ; CHECK-NEXT: define
 ; CHECK-NEXT:   entry:
-; CHECK-NEXT:   %call3 = call i32 (i8*, ...) @printf(i8* noundef nonnull dereferenceable(18) getelementptr inbounds ([18 x i8], [18 x i8]* @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@", i32 0, i32 0))
+; CHECK-NEXT:   %call3 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(18) @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@")
 ; CHECK-NEXT:   call void @"?overflow@@YAXXZ_may_throw"()
 ; CHECK-NEXT:   unreachable
-  %call3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@", i64 0, i64 0))
+  %call3 = call i32 (ptr, ...) @printf(ptr @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@")
   call void @"?overflow@@YAXXZ_may_throw"()
   br label %b
 b:
@@ -103,7 +103,7 @@ b:
 ; CHECK-NOT:    noreturn
 ; CHECK:        define
 ; CHECK-SAME:   @"?catchoverflow@@YAHXZ_may_throw"()
-define dso_local i32 @"?catchoverflow@@YAHXZ_may_throw"()  personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*) {
+define dso_local i32 @"?catchoverflow@@YAHXZ_may_throw"()  personality ptr @__C_specific_handler {
 entry:
   %retval = alloca i32, align 4
   %__exception_code = alloca i32, align 4
@@ -121,30 +121,30 @@ catch.dispatch:                                   ; preds = %invoke.cont, %entry
   %0 = catchswitch within none [label %__except] unwind to caller
 
 __except:                                         ; preds = %catch.dispatch
-  %1 = catchpad within %0 [i8* null]
+  %1 = catchpad within %0 [ptr null]
   catchret from %1 to label %__except2
 
 __except2:                                        ; preds = %__except
   %2 = call i32 @llvm.eh.exceptioncode(token %1)
-  store i32 1, i32* %retval, align 4
+  store i32 1, ptr %retval, align 4
   br label %return
 
 invoke.cont1:                                     ; preds = %invoke.cont
-  store i32 0, i32* %retval, align 4
+  store i32 0, ptr %retval, align 4
   br label %return
 
 __try.cont:                                       ; No predecessors!
-  store i32 2, i32* %retval, align 4
+  store i32 2, ptr %retval, align 4
   br label %return
 
 return:                                           ; preds = %__try.cont, %__except2, %invoke.cont1
-  %3 = load i32, i32* %retval, align 4
+  %3 = load i32, ptr %retval, align 4
   ret i32 %3
 }
 
 declare dso_local i32 @__C_specific_handler(...)
 
-declare dso_local i32 @printf(i8* %_Format, ...)
+declare dso_local i32 @printf(ptr %_Format, ...)
 
 declare i32 @llvm.eh.exceptioncode(token)
 ;.

diff  --git a/llvm/test/Transforms/Attributor/noreturn_sync.ll b/llvm/test/Transforms/Attributor/noreturn_sync.ll
index b11dc3506bacc..725ab27e7aaee 100644
--- a/llvm/test/Transforms/Attributor/noreturn_sync.ll
+++ b/llvm/test/Transforms/Attributor/noreturn_sync.ll
@@ -30,16 +30,16 @@ entry:
 ; CHECK-NEXT:   call void @"?overflow@@YAXXZ"()
 ; CHECK-NEXT:   {{.*}}@printf{{.*}}
 ; CHECK-NEXT:   ret void
-  %call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@", i64 0, i64 0)) nofree nosync nounwind
+  %call2 = call i32 (ptr, ...) @printf(ptr @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@") nofree nosync nounwind
   call void @"?overflow@@YAXXZ"()
-  %call3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@", i64 0, i64 0))
+  %call3 = call i32 (ptr, ...) @printf(ptr @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@")
   ret void
 }
 
 
 ; CHECK-NOT:       Function Attrs:
 ; CHECK:   @"?catchoverflow@@YAHXZ"()
-define dso_local i32 @"?catchoverflow@@YAHXZ"()  personality i8* bitcast (i32 (...)* @__gcc_personality_v0 to i8*) {
+define dso_local i32 @"?catchoverflow@@YAHXZ"()  personality ptr @__gcc_personality_v0 {
 entry:
   %retval = alloca i32, align 4
   %__exception_code = alloca i32, align 4
@@ -55,24 +55,24 @@ catch.dispatch:                                   ; preds = %invoke.cont, %entry
   %0 = catchswitch within none [label %__except] unwind to caller
 
 __except:                                         ; preds = %catch.dispatch
-  %1 = catchpad within %0 [i8* null]
+  %1 = catchpad within %0 [ptr null]
   catchret from %1 to label %__except2
 
 __except2:                                        ; preds = %__except
   %2 = call i32 @llvm.eh.exceptioncode(token %1)
-  store i32 1, i32* %retval, align 4
+  store i32 1, ptr %retval, align 4
   br label %return
 
 invoke.cont1:                                     ; preds = %invoke.cont
-  store i32 0, i32* %retval, align 4
+  store i32 0, ptr %retval, align 4
   br label %return
 
 __try.cont:                                       ; No predecessors!
-  store i32 2, i32* %retval, align 4
+  store i32 2, ptr %retval, align 4
   br label %return
 
 return:                                           ; preds = %__try.cont, %__except2, %invoke.cont1
-  %3 = load i32, i32* %retval, align 4
+  %3 = load i32, ptr %retval, align 4
   ret i32 %3
 }
 
@@ -82,10 +82,10 @@ entry:
 ; CHECK-NOT:      Function Attrs:
 ; CHECK:      define
 ; CHECK-NEXT:   entry:
-; CHECK-NEXT:   %call3 = call i32 (i8*, ...) @printf(i8* noundef nonnull dereferenceable(18) getelementptr inbounds ([18 x i8], [18 x i8]* @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@", i32 0, i32 0))
+; CHECK-NEXT:   %call3 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(18) @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@")
 ; CHECK-NEXT:   call void @"?overflow@@YAXXZ_may_throw"()
 ; CHECK-NEXT:   ret void
-  %call3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@", i64 0, i64 0))
+  %call3 = call i32 (ptr, ...) @printf(ptr @"??_C at _0BC@NKPAGFFJ at Exception?5caught?6?$AA@")
   call void @"?overflow@@YAXXZ_may_throw"()
   ret void
 }
@@ -94,7 +94,7 @@ entry:
 ; CHECK-NOT:    Function Attrs:
 ; CHECK:        define
 ; CHECK-SAME:   @"?catchoverflow@@YAHXZ_may_throw"()
-define dso_local i32 @"?catchoverflow@@YAHXZ_may_throw"()  personality i8* bitcast (i32 (...)* @__gcc_personality_v0 to i8*) {
+define dso_local i32 @"?catchoverflow@@YAHXZ_may_throw"()  personality ptr @__gcc_personality_v0 {
 entry:
   %retval = alloca i32, align 4
   %__exception_code = alloca i32, align 4
@@ -112,30 +112,30 @@ catch.dispatch:                                   ; preds = %invoke.cont, %entry
   %0 = catchswitch within none [label %__except] unwind to caller
 
 __except:                                         ; preds = %catch.dispatch
-  %1 = catchpad within %0 [i8* null]
+  %1 = catchpad within %0 [ptr null]
   catchret from %1 to label %__except2
 
 __except2:                                        ; preds = %__except
   %2 = call i32 @llvm.eh.exceptioncode(token %1)
-  store i32 1, i32* %retval, align 4
+  store i32 1, ptr %retval, align 4
   br label %return
 
 invoke.cont1:                                     ; preds = %invoke.cont
-  store i32 0, i32* %retval, align 4
+  store i32 0, ptr %retval, align 4
   br label %return
 
 __try.cont:                                       ; No predecessors!
-  store i32 2, i32* %retval, align 4
+  store i32 2, ptr %retval, align 4
   br label %return
 
 return:                                           ; preds = %__try.cont, %__except2, %invoke.cont1
-  %3 = load i32, i32* %retval, align 4
+  %3 = load i32, ptr %retval, align 4
   ret i32 %3
 }
 
 declare dso_local i32 @__gcc_personality_v0(...)
 
-declare dso_local i32 @printf(i8* %_Format, ...)
+declare dso_local i32 @printf(ptr %_Format, ...)
 
 declare i32 @llvm.eh.exceptioncode(token)
 ;.

diff  --git a/llvm/test/Transforms/Attributor/noundef.ll b/llvm/test/Transforms/Attributor/noundef.ll
index 9ff18cf716e8f..ef9e13649cca5 100644
--- a/llvm/test/Transforms/Attributor/noundef.ll
+++ b/llvm/test/Transforms/Attributor/noundef.ll
@@ -4,42 +4,42 @@
 
 declare void @unknown()
 
-declare void @bar(i32*)
+declare void @bar(ptr)
 
 define void @foo() {
 ; CHECK-LABEL: define {{[^@]+}}@foo() {
 ; CHECK-NEXT:    [[X:%.*]] = alloca i32, align 4
 ; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @bar(i32* noundef nonnull align 4 dereferenceable(4) [[X]])
+; CHECK-NEXT:    call void @bar(ptr noundef nonnull align 4 dereferenceable(4) [[X]])
 ; CHECK-NEXT:    ret void
 ;
   %x = alloca i32
   call void @unknown()
-  call void @bar(i32* %x)
+  call void @bar(ptr %x)
   ret void
 }
 
-define internal i8* @returned_dead() {
+define internal ptr @returned_dead() {
 ; CHECK-LABEL: define {{[^@]+}}@returned_dead() {
 ; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    ret i8* undef
+; CHECK-NEXT:    ret ptr undef
 ;
   call void @unknown()
-  ret i8* null
+  ret ptr null
 }
 
 define void @caller1() {
 ; CHECK-LABEL: define {{[^@]+}}@caller1() {
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @returned_dead()
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @returned_dead()
 ; CHECK-NEXT:    ret void
 ;
-  call i8* @returned_dead()
+  call ptr @returned_dead()
   ret void
 }
 
-define internal void @argument_dead_callback_callee(i8* %c) {
+define internal void @argument_dead_callback_callee(ptr %c) {
 ; CHECK-LABEL: define {{[^@]+}}@argument_dead_callback_callee
-; CHECK-SAME: (i8* noalias nocapture nofree readnone align 4294967296 [[C:%.*]]) {
+; CHECK-SAME: (ptr noalias nocapture nofree readnone align 4294967296 [[C:%.*]]) {
 ; CHECK-NEXT:    call void @unknown()
 ; CHECK-NEXT:    ret void
 ;
@@ -49,14 +49,14 @@ define internal void @argument_dead_callback_callee(i8* %c) {
 
 define void @callback_caller() {
 ; TUNIT-LABEL: define {{[^@]+}}@callback_caller() {
-; TUNIT-NEXT:    call void @callback_broker(void (i8*)* noundef @argument_dead_callback_callee, i8* noalias nocapture nofree readnone align 4294967296 undef)
+; TUNIT-NEXT:    call void @callback_broker(ptr noundef @argument_dead_callback_callee, ptr noalias nocapture nofree readnone align 4294967296 undef)
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@callback_caller() {
-; CGSCC-NEXT:    call void @callback_broker(void (i8*)* noundef @argument_dead_callback_callee, i8* noalias nocapture nofree noundef readnone align 4294967296 null)
+; CGSCC-NEXT:    call void @callback_broker(ptr noundef @argument_dead_callback_callee, ptr noalias nocapture nofree noundef readnone align 4294967296 null)
 ; CGSCC-NEXT:    ret void
 ;
-  call void @callback_broker(void (i8*)* @argument_dead_callback_callee, i8* null)
+  call void @callback_broker(ptr @argument_dead_callback_callee, ptr null)
   ret void
 }
 
@@ -135,7 +135,7 @@ define void @caller_with_noundef_arg() {
   ret void
 }
 
-declare !callback !0 void @callback_broker(void (i8*)*, i8*)
+declare !callback !0 void @callback_broker(ptr, ptr)
 !1 = !{i64 0, i64 1, i1 false}
 !0 = !{!1}
 ;.

diff  --git a/llvm/test/Transforms/Attributor/nounwind.ll b/llvm/test/Transforms/Attributor/nounwind.ll
index 0e1002535dd38..b47fff20d1378 100644
--- a/llvm/test/Transforms/Attributor/nounwind.ll
+++ b/llvm/test/Transforms/Attributor/nounwind.ll
@@ -96,17 +96,17 @@ declare void @__cxa_rethrow()
 ;   return 1;
 ; }
 
-define i32 @catch_thing() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
-; CHECK-LABEL: define {{[^@]+}}@catch_thing() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define i32 @catch_thing() personality ptr @__gxx_personality_v0 {
+; CHECK-LABEL: define {{[^@]+}}@catch_thing() personality ptr @__gxx_personality_v0 {
 ; CHECK-NEXT:    invoke void @__cxa_rethrow()
 ; CHECK-NEXT:    to label [[TMP1:%.*]] unwind label [[TMP2:%.*]]
 ; CHECK:       1:
 ; CHECK-NEXT:    unreachable
 ; CHECK:       2:
-; CHECK-NEXT:    [[TMP3:%.*]] = landingpad { i8*, i32 }
-; CHECK-NEXT:    catch i8* null
-; CHECK-NEXT:    [[TMP4:%.*]] = extractvalue { i8*, i32 } [[TMP3]], 0
-; CHECK-NEXT:    [[TMP5:%.*]] = tail call i8* @__cxa_begin_catch(i8* [[TMP4]])
+; CHECK-NEXT:    [[TMP3:%.*]] = landingpad { ptr, i32 }
+; CHECK-NEXT:    catch ptr null
+; CHECK-NEXT:    [[TMP4:%.*]] = extractvalue { ptr, i32 } [[TMP3]], 0
+; CHECK-NEXT:    [[TMP5:%.*]] = tail call ptr @__cxa_begin_catch(ptr [[TMP4]])
 ; CHECK-NEXT:    tail call void @__cxa_end_catch()
 ; CHECK-NEXT:    ret i32 -1
 ;
@@ -117,10 +117,10 @@ define i32 @catch_thing() personality i8* bitcast (i32 (...)* @__gxx_personality
   unreachable
 
 2:                                                ; preds = %0
-  %3 = landingpad { i8*, i32 }
-  catch i8* null
-  %4 = extractvalue { i8*, i32 } %3, 0
-  %5 = tail call i8* @__cxa_begin_catch(i8* %4) #2
+  %3 = landingpad { ptr, i32 }
+  catch ptr null
+  %4 = extractvalue { ptr, i32 } %3, 0
+  %5 = tail call ptr @__cxa_begin_catch(ptr %4) #2
   tail call void @__cxa_end_catch()
   ret i32 -1
 }
@@ -141,7 +141,7 @@ define i32 @catch_thing_user() {
 
 declare i32 @__gxx_personality_v0(...)
 
-declare i8* @__cxa_begin_catch(i8*)
+declare ptr @__cxa_begin_catch(ptr)
 
 declare void @__cxa_end_catch()
 ;.

diff  --git a/llvm/test/Transforms/Attributor/openmp_parallel.ll b/llvm/test/Transforms/Attributor/openmp_parallel.ll
index ce61880be35b4..a0a2d1ee12414 100644
--- a/llvm/test/Transforms/Attributor/openmp_parallel.ll
+++ b/llvm/test/Transforms/Attributor/openmp_parallel.ll
@@ -4,63 +4,63 @@
 
 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 
-%struct.ident_t = type { i32, i32, i32, i32, i8* }
+%struct.ident_t = type { i32, i32, i32, i32, ptr }
 
 @0 = private unnamed_addr constant [23 x i8] c";unknown;unknown;0;0;;\00", align 1
- at 1 = private unnamed_addr constant %struct.ident_t { i32 0, i32 514, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @0, i32 0, i32 0) }, align 8
- at 2 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @0, i32 0, i32 0) }, align 8
+ at 1 = private unnamed_addr constant %struct.ident_t { i32 0, i32 514, i32 0, i32 0, ptr @0 }, align 8
+ at 2 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 0, ptr @0 }, align 8
 
 ; %a is write only, %b is read only, neither is captured or freed, or ...
 ; FIXME: %a and %b are *not* readnone!
 
 ;.
 ; CHECK: @[[GLOB0:[0-9]+]] = private unnamed_addr constant [23 x i8] c"
-; CHECK: @[[GLOB1:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 514, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @[[GLOB0]], i32 0, i32 0) }, align 8
-; CHECK: @[[GLOB2:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @[[GLOB0]], i32 0, i32 0) }, align 8
+; CHECK: @[[GLOB1:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 514, i32 0, i32 0, ptr @[[GLOB0]] }, align 8
+; CHECK: @[[GLOB2:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 0, i32 0, ptr @[[GLOB0]] }, align 8
 ;.
-define dso_local void @func(float* nocapture %a, float* %b, i32 %N) local_unnamed_addr #0 {
+define dso_local void @func(ptr nocapture %a, ptr %b, i32 %N) local_unnamed_addr #0 {
 ; TUNIT: Function Attrs: nounwind uwtable
 ; TUNIT-LABEL: define {{[^@]+}}@func
-; TUNIT-SAME: (float* nocapture nofree writeonly [[A:%.*]], float* nocapture nofree readonly [[B:%.*]], i32 [[N:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
+; TUNIT-SAME: (ptr nocapture nofree writeonly [[A:%.*]], ptr nocapture nofree readonly [[B:%.*]], i32 [[N:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[A_ADDR:%.*]] = alloca float*, align 8
-; TUNIT-NEXT:    [[B_ADDR:%.*]] = alloca float*, align 8
+; TUNIT-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8
+; TUNIT-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
 ; TUNIT-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    store float* [[A]], float** [[A_ADDR]], align 8
-; TUNIT-NEXT:    store float* [[B]], float** [[B_ADDR]], align 8
-; TUNIT-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB2]], i32 noundef 3, void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, float**, float**)* @.omp_outlined. to void (i32*, i32*, ...)*), i32* noalias nocapture nofree nonnull readnone align 4 dereferenceable(4) undef, float** noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[A_ADDR]], float** noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[B_ADDR]])
+; TUNIT-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8
+; TUNIT-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
+; TUNIT-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB2]], i32 noundef 3, ptr noundef @.omp_outlined., ptr noalias nocapture nofree nonnull readnone align 4 dereferenceable(4) undef, ptr noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[A_ADDR]], ptr noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[B_ADDR]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nounwind uwtable
 ; CGSCC-LABEL: define {{[^@]+}}@func
-; CGSCC-SAME: (float* nocapture nofree [[A:%.*]], float* nofree [[B:%.*]], i32 [[N:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture nofree [[A:%.*]], ptr nofree [[B:%.*]], i32 [[N:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[A_ADDR:%.*]] = alloca float*, align 8
-; CGSCC-NEXT:    [[B_ADDR:%.*]] = alloca float*, align 8
+; CGSCC-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8
+; CGSCC-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
 ; CGSCC-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store float* [[A]], float** [[A_ADDR]], align 8
-; CGSCC-NEXT:    store float* [[B]], float** [[B_ADDR]], align 8
-; CGSCC-NEXT:    store i32 199, i32* [[N_ADDR]], align 4
-; CGSCC-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB2]], i32 noundef 3, void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, float**, float**)* @.omp_outlined. to void (i32*, i32*, ...)*), i32* nofree noundef nonnull readonly align 4 dereferenceable(4) [[N_ADDR]], float** nofree noundef nonnull readonly align 8 dereferenceable(8) [[A_ADDR]], float** nofree noundef nonnull readonly align 8 dereferenceable(8) [[B_ADDR]])
+; CGSCC-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8
+; CGSCC-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
+; CGSCC-NEXT:    store i32 199, ptr [[N_ADDR]], align 4
+; CGSCC-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB2]], i32 noundef 3, ptr noundef @.omp_outlined., ptr nofree noundef nonnull readonly align 4 dereferenceable(4) [[N_ADDR]], ptr nofree noundef nonnull readonly align 8 dereferenceable(8) [[A_ADDR]], ptr nofree noundef nonnull readonly align 8 dereferenceable(8) [[B_ADDR]])
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %a.addr = alloca float*, align 8
-  %b.addr = alloca float*, align 8
+  %a.addr = alloca ptr, align 8
+  %b.addr = alloca ptr, align 8
   %N.addr = alloca i32, align 4
-  store float* %a, float** %a.addr, align 8
-  store float* %b, float** %b.addr, align 8
-  store i32 199, i32* %N.addr, align 4
-  call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull @2, i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*, float**, float**)* @.omp_outlined. to void (i32*, i32*, ...)*), i32* nonnull %N.addr, float** nonnull %a.addr, float** nonnull %b.addr)
+  store ptr %a, ptr %a.addr, align 8
+  store ptr %b, ptr %b.addr, align 8
+  store i32 199, ptr %N.addr, align 4
+  call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr nonnull @2, i32 3, ptr @.omp_outlined., ptr nonnull %N.addr, ptr nonnull %a.addr, ptr nonnull %b.addr)
   ret void
 }
 
 ; FIXME: %N should not be loaded but 199 should be used.
 
-define internal void @.omp_outlined.(i32* noalias nocapture readonly %.global_tid., i32* noalias nocapture readnone %.bound_tid., i32* nocapture nonnull readonly align 4 dereferenceable(4) %N, float** nocapture nonnull readonly align 8 dereferenceable(8) %a, float** nocapture nonnull readonly align 8 dereferenceable(8) %b) #1 {
+define internal void @.omp_outlined.(ptr noalias nocapture readonly %.global_tid., ptr noalias nocapture readnone %.bound_tid., ptr nocapture nonnull readonly align 4 dereferenceable(4) %N, ptr nocapture nonnull readonly align 8 dereferenceable(8) %a, ptr nocapture nonnull readonly align 8 dereferenceable(8) %b) #1 {
 ; TUNIT: Function Attrs: alwaysinline nofree norecurse nounwind uwtable
 ; TUNIT-LABEL: define {{[^@]+}}@.omp_outlined.
-; TUNIT-SAME: (i32* noalias nocapture nofree readonly [[DOTGLOBAL_TID_:%.*]], i32* noalias nocapture nofree readnone [[DOTBOUND_TID_:%.*]], i32* noalias nocapture nofree nonnull readnone align 4 dereferenceable(4) [[N:%.*]], float** noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[A:%.*]], float** noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR1:[0-9]+]] {
+; TUNIT-SAME: (ptr noalias nocapture nofree readonly [[DOTGLOBAL_TID_:%.*]], ptr noalias nocapture nofree readnone [[DOTBOUND_TID_:%.*]], ptr noalias nocapture nofree nonnull readnone align 4 dereferenceable(4) [[N:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[A:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR1:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4
 ; TUNIT-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4
@@ -68,109 +68,101 @@ define internal void @.omp_outlined.(i32* noalias nocapture readonly %.global_ti
 ; TUNIT-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
 ; TUNIT-NEXT:    br label [[OMP_PRECOND_THEN:%.*]]
 ; TUNIT:       omp.precond.then:
-; TUNIT-NEXT:    [[TMP0:%.*]] = bitcast i32* [[DOTOMP_LB]] to i8*
-; TUNIT-NEXT:    call void @llvm.lifetime.start.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP0]]) #[[ATTR3:[0-9]+]]
-; TUNIT-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 4
-; TUNIT-NEXT:    [[TMP1:%.*]] = bitcast i32* [[DOTOMP_UB]] to i8*
-; TUNIT-NEXT:    call void @llvm.lifetime.start.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP1]])
-; TUNIT-NEXT:    store i32 197, i32* [[DOTOMP_UB]], align 4
-; TUNIT-NEXT:    [[TMP2:%.*]] = bitcast i32* [[DOTOMP_STRIDE]] to i8*
-; TUNIT-NEXT:    call void @llvm.lifetime.start.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP2]])
-; TUNIT-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 4
-; TUNIT-NEXT:    [[TMP3:%.*]] = bitcast i32* [[DOTOMP_IS_LAST]] to i8*
-; TUNIT-NEXT:    call void @llvm.lifetime.start.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP3]])
-; TUNIT-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 4
-; TUNIT-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTGLOBAL_TID_]], align 4
-; TUNIT-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 [[TMP4]], i32 noundef 34, i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]], i32 noundef 1, i32 noundef 1)
-; TUNIT-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4
+; TUNIT-NEXT:    call void @llvm.lifetime.start.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]]) #[[ATTR3:[0-9]+]]
+; TUNIT-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4
+; TUNIT-NEXT:    call void @llvm.lifetime.start.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]])
+; TUNIT-NEXT:    store i32 197, ptr [[DOTOMP_UB]], align 4
+; TUNIT-NEXT:    call void @llvm.lifetime.start.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]])
+; TUNIT-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4
+; TUNIT-NEXT:    call void @llvm.lifetime.start.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]])
+; TUNIT-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4
+; TUNIT-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTGLOBAL_TID_]], align 4
+; TUNIT-NEXT:    call void @__kmpc_for_static_init_4(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 [[TMP4]], i32 noundef 34, ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]], i32 noundef 1, i32 noundef 1)
+; TUNIT-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4
 ; TUNIT-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP5]], 197
 ; TUNIT-NEXT:    [[COND:%.*]] = select i1 [[CMP4]], i32 197, i32 [[TMP5]]
-; TUNIT-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 4
-; TUNIT-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_LB]], align 4
+; TUNIT-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4
+; TUNIT-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4
 ; TUNIT-NEXT:    [[CMP513:%.*]] = icmp sgt i32 [[TMP6]], [[COND]]
 ; TUNIT-NEXT:    br i1 [[CMP513]], label [[OMP_LOOP_EXIT:%.*]], label [[OMP_INNER_FOR_BODY_LR_PH:%.*]]
 ; TUNIT:       omp.inner.for.body.lr.ph:
-; TUNIT-NEXT:    [[TMP7:%.*]] = load float*, float** [[B]], align 8
-; TUNIT-NEXT:    [[TMP8:%.*]] = load float*, float** [[A]], align 8
+; TUNIT-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[B]], align 8
+; TUNIT-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[A]], align 8
 ; TUNIT-NEXT:    [[TMP9:%.*]] = sext i32 [[TMP6]] to i64
 ; TUNIT-NEXT:    [[TMP10:%.*]] = sext i32 [[COND]] to i64
 ; TUNIT-NEXT:    br label [[OMP_INNER_FOR_BODY:%.*]]
 ; TUNIT:       omp.inner.for.body:
 ; TUNIT-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[OMP_INNER_FOR_BODY]] ], [ [[TMP9]], [[OMP_INNER_FOR_BODY_LR_PH]] ]
 ; TUNIT-NEXT:    [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1
-; TUNIT-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds float, float* [[TMP7]], i64 [[INDVARS_IV_NEXT]]
-; TUNIT-NEXT:    [[TMP11:%.*]] = load float, float* [[ARRAYIDX]], align 4
+; TUNIT-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds float, ptr [[TMP7]], i64 [[INDVARS_IV_NEXT]]
+; TUNIT-NEXT:    [[TMP11:%.*]] = load float, ptr [[ARRAYIDX]], align 4
 ; TUNIT-NEXT:    [[CONV7:%.*]] = fadd float [[TMP11]], 1.000000e+00
-; TUNIT-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds float, float* [[TMP8]], i64 [[INDVARS_IV_NEXT]]
-; TUNIT-NEXT:    store float [[CONV7]], float* [[ARRAYIDX9]], align 4
+; TUNIT-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds float, ptr [[TMP8]], i64 [[INDVARS_IV_NEXT]]
+; TUNIT-NEXT:    store float [[CONV7]], ptr [[ARRAYIDX9]], align 4
 ; TUNIT-NEXT:    [[CMP5:%.*]] = icmp slt i64 [[INDVARS_IV]], [[TMP10]]
 ; TUNIT-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY]], label [[OMP_LOOP_EXIT]]
 ; TUNIT:       omp.loop.exit:
-; TUNIT-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 [[TMP4]])
-; TUNIT-NEXT:    call void @llvm.lifetime.end.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP3]])
-; TUNIT-NEXT:    call void @llvm.lifetime.end.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP2]])
-; TUNIT-NEXT:    call void @llvm.lifetime.end.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP1]])
-; TUNIT-NEXT:    call void @llvm.lifetime.end.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP0]])
+; TUNIT-NEXT:    call void @__kmpc_for_static_fini(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 [[TMP4]])
+; TUNIT-NEXT:    call void @llvm.lifetime.end.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]])
+; TUNIT-NEXT:    call void @llvm.lifetime.end.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]])
+; TUNIT-NEXT:    call void @llvm.lifetime.end.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]])
+; TUNIT-NEXT:    call void @llvm.lifetime.end.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]])
 ; TUNIT-NEXT:    br label [[OMP_PRECOND_END:%.*]]
 ; TUNIT:       omp.precond.end:
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: alwaysinline nofree norecurse nounwind uwtable
 ; CGSCC-LABEL: define {{[^@]+}}@.omp_outlined.
-; CGSCC-SAME: (i32* noalias nocapture nofree readonly [[DOTGLOBAL_TID_:%.*]], i32* noalias nocapture nofree readnone [[DOTBOUND_TID_:%.*]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[N:%.*]], float** noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[A:%.*]], float** noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR1:[0-9]+]] {
+; CGSCC-SAME: (ptr noalias nocapture nofree readonly [[DOTGLOBAL_TID_:%.*]], ptr noalias nocapture nofree readnone [[DOTBOUND_TID_:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[N:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[A:%.*]], ptr noalias nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4
 ; CGSCC-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4
 ; CGSCC-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4
 ; CGSCC-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, i32* [[N]], align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 4
 ; CGSCC-NEXT:    [[SUB2:%.*]] = add nsw i32 [[TMP0]], -2
 ; CGSCC-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP0]], 1
 ; CGSCC-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]
 ; CGSCC:       omp.precond.then:
-; CGSCC-NEXT:    [[TMP1:%.*]] = bitcast i32* [[DOTOMP_LB]] to i8*
-; CGSCC-NEXT:    call void @llvm.lifetime.start.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP1]]) #[[ATTR3:[0-9]+]]
-; CGSCC-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 4
-; CGSCC-NEXT:    [[TMP2:%.*]] = bitcast i32* [[DOTOMP_UB]] to i8*
-; CGSCC-NEXT:    call void @llvm.lifetime.start.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP2]])
-; CGSCC-NEXT:    store i32 [[SUB2]], i32* [[DOTOMP_UB]], align 4
-; CGSCC-NEXT:    [[TMP3:%.*]] = bitcast i32* [[DOTOMP_STRIDE]] to i8*
-; CGSCC-NEXT:    call void @llvm.lifetime.start.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP3]])
-; CGSCC-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 4
-; CGSCC-NEXT:    [[TMP4:%.*]] = bitcast i32* [[DOTOMP_IS_LAST]] to i8*
-; CGSCC-NEXT:    call void @llvm.lifetime.start.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP4]])
-; CGSCC-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 4
-; CGSCC-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTGLOBAL_TID_]], align 4
-; CGSCC-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 [[TMP5]], i32 noundef 34, i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]], i32* noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]], i32 noundef 1, i32 noundef 1)
-; CGSCC-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4
+; CGSCC-NEXT:    call void @llvm.lifetime.start.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]]) #[[ATTR3:[0-9]+]]
+; CGSCC-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4
+; CGSCC-NEXT:    call void @llvm.lifetime.start.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]])
+; CGSCC-NEXT:    store i32 [[SUB2]], ptr [[DOTOMP_UB]], align 4
+; CGSCC-NEXT:    call void @llvm.lifetime.start.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]])
+; CGSCC-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4
+; CGSCC-NEXT:    call void @llvm.lifetime.start.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]])
+; CGSCC-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4
+; CGSCC-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTGLOBAL_TID_]], align 4
+; CGSCC-NEXT:    call void @__kmpc_for_static_init_4(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 [[TMP5]], i32 noundef 34, ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]], ptr noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]], i32 noundef 1, i32 noundef 1)
+; CGSCC-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4
 ; CGSCC-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP6]], [[SUB2]]
 ; CGSCC-NEXT:    [[COND:%.*]] = select i1 [[CMP4]], i32 [[SUB2]], i32 [[TMP6]]
-; CGSCC-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 4
-; CGSCC-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_LB]], align 4
+; CGSCC-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4
+; CGSCC-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4
 ; CGSCC-NEXT:    [[CMP513:%.*]] = icmp sgt i32 [[TMP7]], [[COND]]
 ; CGSCC-NEXT:    br i1 [[CMP513]], label [[OMP_LOOP_EXIT:%.*]], label [[OMP_INNER_FOR_BODY_LR_PH:%.*]]
 ; CGSCC:       omp.inner.for.body.lr.ph:
-; CGSCC-NEXT:    [[TMP8:%.*]] = load float*, float** [[B]], align 8
-; CGSCC-NEXT:    [[TMP9:%.*]] = load float*, float** [[A]], align 8
+; CGSCC-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[B]], align 8
+; CGSCC-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[A]], align 8
 ; CGSCC-NEXT:    [[TMP10:%.*]] = sext i32 [[TMP7]] to i64
 ; CGSCC-NEXT:    [[TMP11:%.*]] = sext i32 [[COND]] to i64
 ; CGSCC-NEXT:    br label [[OMP_INNER_FOR_BODY:%.*]]
 ; CGSCC:       omp.inner.for.body:
 ; CGSCC-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[OMP_INNER_FOR_BODY]] ], [ [[TMP10]], [[OMP_INNER_FOR_BODY_LR_PH]] ]
 ; CGSCC-NEXT:    [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1
-; CGSCC-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds float, float* [[TMP8]], i64 [[INDVARS_IV_NEXT]]
-; CGSCC-NEXT:    [[TMP12:%.*]] = load float, float* [[ARRAYIDX]], align 4
+; CGSCC-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds float, ptr [[TMP8]], i64 [[INDVARS_IV_NEXT]]
+; CGSCC-NEXT:    [[TMP12:%.*]] = load float, ptr [[ARRAYIDX]], align 4
 ; CGSCC-NEXT:    [[CONV7:%.*]] = fadd float [[TMP12]], 1.000000e+00
-; CGSCC-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds float, float* [[TMP9]], i64 [[INDVARS_IV_NEXT]]
-; CGSCC-NEXT:    store float [[CONV7]], float* [[ARRAYIDX9]], align 4
+; CGSCC-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds float, ptr [[TMP9]], i64 [[INDVARS_IV_NEXT]]
+; CGSCC-NEXT:    store float [[CONV7]], ptr [[ARRAYIDX9]], align 4
 ; CGSCC-NEXT:    [[CMP5:%.*]] = icmp slt i64 [[INDVARS_IV]], [[TMP11]]
 ; CGSCC-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY]], label [[OMP_LOOP_EXIT]]
 ; CGSCC:       omp.loop.exit:
-; CGSCC-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 [[TMP5]])
-; CGSCC-NEXT:    call void @llvm.lifetime.end.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP4]])
-; CGSCC-NEXT:    call void @llvm.lifetime.end.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP3]])
-; CGSCC-NEXT:    call void @llvm.lifetime.end.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP2]])
-; CGSCC-NEXT:    call void @llvm.lifetime.end.p0i8(i64 noundef 4, i8* nocapture nofree noundef nonnull align 4 dereferenceable(4) [[TMP1]])
+; CGSCC-NEXT:    call void @__kmpc_for_static_fini(ptr noundef nonnull align 8 dereferenceable(24) @[[GLOB1]], i32 [[TMP5]])
+; CGSCC-NEXT:    call void @llvm.lifetime.end.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_IS_LAST]])
+; CGSCC-NEXT:    call void @llvm.lifetime.end.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_STRIDE]])
+; CGSCC-NEXT:    call void @llvm.lifetime.end.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_UB]])
+; CGSCC-NEXT:    call void @llvm.lifetime.end.p0(i64 noundef 4, ptr nocapture nofree noundef nonnull align 4 dereferenceable(4) [[DOTOMP_LB]])
 ; CGSCC-NEXT:    br label [[OMP_PRECOND_END]]
 ; CGSCC:       omp.precond.end:
 ; CGSCC-NEXT:    ret void
@@ -180,58 +172,54 @@ entry:
   %.omp.ub = alloca i32, align 4
   %.omp.stride = alloca i32, align 4
   %.omp.is_last = alloca i32, align 4
-  %0 = load i32, i32* %N, align 4
+  %0 = load i32, ptr %N, align 4
   %sub2 = add nsw i32 %0, -2
   %cmp = icmp sgt i32 %0, 1
   br i1 %cmp, label %omp.precond.then, label %omp.precond.end
 
 omp.precond.then:                                 ; preds = %entry
-  %1 = bitcast i32* %.omp.lb to i8*
-  call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %1) #3
-  store i32 0, i32* %.omp.lb, align 4
-  %2 = bitcast i32* %.omp.ub to i8*
-  call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %2) #3
-  store i32 %sub2, i32* %.omp.ub, align 4
-  %3 = bitcast i32* %.omp.stride to i8*
-  call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %3) #3
-  store i32 1, i32* %.omp.stride, align 4
-  %4 = bitcast i32* %.omp.is_last to i8*
-  call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %4) #3
-  store i32 0, i32* %.omp.is_last, align 4
-  %5 = load i32, i32* %.global_tid., align 4
-  call void @__kmpc_for_static_init_4(%struct.ident_t* nonnull @1, i32 %5, i32 34, i32* nonnull %.omp.is_last, i32* nonnull %.omp.lb, i32* nonnull %.omp.ub, i32* nonnull %.omp.stride, i32 1, i32 1) #3
-  %6 = load i32, i32* %.omp.ub, align 4
-  %cmp4 = icmp sgt i32 %6, %sub2
-  %cond = select i1 %cmp4, i32 %sub2, i32 %6
-  store i32 %cond, i32* %.omp.ub, align 4
-  %7 = load i32, i32* %.omp.lb, align 4
-  %cmp513 = icmp sgt i32 %7, %cond
+  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %.omp.lb) #3
+  store i32 0, ptr %.omp.lb, align 4
+  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %.omp.ub) #3
+  store i32 %sub2, ptr %.omp.ub, align 4
+  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %.omp.stride) #3
+  store i32 1, ptr %.omp.stride, align 4
+  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %.omp.is_last) #3
+  store i32 0, ptr %.omp.is_last, align 4
+  %1 = load i32, ptr %.global_tid., align 4
+  call void @__kmpc_for_static_init_4(ptr nonnull @1, i32 %1, i32 34, ptr nonnull %.omp.is_last, ptr nonnull %.omp.lb, ptr nonnull %.omp.ub, ptr nonnull %.omp.stride, i32 1, i32 1) #3
+  %2 = load i32, ptr %.omp.ub, align 4
+  %cmp4 = icmp sgt i32 %2, %sub2
+  %cond = select i1 %cmp4, i32 %sub2, i32 %2
+  store i32 %cond, ptr %.omp.ub, align 4
+  %3 = load i32, ptr %.omp.lb, align 4
+  %cmp513 = icmp sgt i32 %3, %cond
   br i1 %cmp513, label %omp.loop.exit, label %omp.inner.for.body.lr.ph
 
 omp.inner.for.body.lr.ph:                         ; preds = %omp.precond.then
-  %8 = load float*, float** %b, align 8
-  %9 = load float*, float** %a, align 8
-  %10 = sext i32 %7 to i64
-  %11 = sext i32 %cond to i64
+  %4 = load ptr, ptr %b, align 8
+  %5 = load ptr, ptr %a, align 8
+  %6 = sext i32 %3 to i64
+  %7 = sext i32 %cond to i64
   br label %omp.inner.for.body
 
 omp.inner.for.body:                               ; preds = %omp.inner.for.body, %omp.inner.for.body.lr.ph
-  %indvars.iv = phi i64 [ %indvars.iv.next, %omp.inner.for.body ], [ %10, %omp.inner.for.body.lr.ph ]
+  %indvars.iv = phi i64 [ %indvars.iv.next, %omp.inner.for.body ], [ %6, %omp.inner.for.body.lr.ph ]
   %indvars.iv.next = add nsw i64 %indvars.iv, 1
-  %arrayidx = getelementptr inbounds float, float* %8, i64 %indvars.iv.next
-  %12 = load float, float* %arrayidx, align 4
-  %conv7 = fadd float %12, 1.000000e+00
-  %arrayidx9 = getelementptr inbounds float, float* %9, i64 %indvars.iv.next
-  store float %conv7, float* %arrayidx9, align 4
-  %cmp5 = icmp slt i64 %indvars.iv, %11
+  %arrayidx = getelementptr inbounds float, ptr %4, i64 %indvars.iv.next
+  %8 = load float, ptr %arrayidx, align 4
+  %conv7 = fadd float %8, 1.000000e+00
+  %arrayidx9 = getelementptr inbounds float, ptr %5, i64 %indvars.iv.next
+  store float %conv7, ptr %arrayidx9, align 4
+  %cmp5 = icmp slt i64 %indvars.iv, %7
   br i1 %cmp5, label %omp.inner.for.body, label %omp.loop.exit
 
 omp.loop.exit:                                    ; preds = %omp.inner.for.body, %omp.precond.then
-  call void @__kmpc_for_static_fini(%struct.ident_t* nonnull @1, i32 %5)
-  call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %4) #3
-  call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %3) #3
-  call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %2) #3
-  call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %1) #3
+  call void @__kmpc_for_static_fini(ptr nonnull @1, i32 %1)
+  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %.omp.is_last) #3
+  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %.omp.stride) #3
+  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %.omp.ub) #3
+  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %.omp.lb) #3
   br label %omp.precond.end
 
 omp.precond.end:                                  ; preds = %omp.loop.exit, %entry
@@ -239,18 +227,18 @@ omp.precond.end:                                  ; preds = %omp.loop.exit, %ent
 }
 
 ; Function Attrs: argmemonly nounwind willreturn
-declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2
+declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #2
 
 ; Function Attrs: argmemonly nounwind willreturn
-declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2
+declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #2
 
-declare dso_local void @__kmpc_for_static_init_4(%struct.ident_t*, i32, i32, i32*, i32*, i32*, i32*, i32, i32) local_unnamed_addr
+declare dso_local void @__kmpc_for_static_init_4(ptr, i32, i32, ptr, ptr, ptr, ptr, i32, i32) local_unnamed_addr
 
 ; Function Attrs: nounwind
-declare void @__kmpc_for_static_fini(%struct.ident_t*, i32) local_unnamed_addr #3
+declare void @__kmpc_for_static_fini(ptr, i32) local_unnamed_addr #3
 
 ; Function Attrs: nounwind
-declare !callback !1 void @__kmpc_fork_call(%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) local_unnamed_addr #3
+declare !callback !1 void @__kmpc_fork_call(ptr, i32, ptr, ...) local_unnamed_addr #3
 
 attributes #0 = { nounwind uwtable }
 attributes #1 = { alwaysinline nofree norecurse nounwind uwtable }

diff  --git a/llvm/test/Transforms/Attributor/pointer-info.ll b/llvm/test/Transforms/Attributor/pointer-info.ll
index 0b947919ec599..bbc2f90d0aed3 100644
--- a/llvm/test/Transforms/Attributor/pointer-info.ll
+++ b/llvm/test/Transforms/Attributor/pointer-info.ll
@@ -3,30 +3,30 @@
 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
 
 %struct.test.b = type { i32, i32 }
-%struct.test.a = type { %struct.test.b, i32, i8*}
+%struct.test.a = type { %struct.test.b, i32, ptr}
 
-define void @foo(i8* %ptr) {
+define void @foo(ptr %ptr) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@foo
-; TUNIT-SAME: (i8* nocapture nofree readnone [[PTR:%.*]]) #[[ATTR0:[0-9]+]] {
+; TUNIT-SAME: (ptr nocapture nofree readnone [[PTR:%.*]]) #[[ATTR0:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[TMP0:%.*]] = alloca [[STRUCT_TEST_A:%.*]], align 8
 ; TUNIT-NEXT:    br label [[CALL_BR:%.*]]
 ; TUNIT:       call.br:
-; TUNIT-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_TEST_A]], %struct.test.a* [[TMP0]], i64 0, i32 2
-; TUNIT-NEXT:    tail call void @bar(%struct.test.a* noalias nocapture nofree noundef nonnull readonly byval([[STRUCT_TEST_A]]) align 8 dereferenceable(24) [[TMP0]]) #[[ATTR2:[0-9]+]]
+; TUNIT-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_TEST_A]], ptr [[TMP0]], i64 0, i32 2
+; TUNIT-NEXT:    tail call void @bar(ptr noalias nocapture nofree noundef nonnull readonly byval([[STRUCT_TEST_A]]) align 8 dereferenceable(24) [[TMP0]]) #[[ATTR2:[0-9]+]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@foo
-; CGSCC-SAME: (i8* nocapture nofree writeonly [[PTR:%.*]]) #[[ATTR0:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture nofree writeonly [[PTR:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[TMP0:%.*]] = alloca [[STRUCT_TEST_A:%.*]], align 8
 ; CGSCC-NEXT:    br label [[CALL_BR:%.*]]
 ; CGSCC:       call.br:
-; CGSCC-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_TEST_A]], %struct.test.a* [[TMP0]], i64 0, i32 2
-; CGSCC-NEXT:    store i8* [[PTR]], i8** [[TMP1]], align 8
-; CGSCC-NEXT:    tail call void @bar(%struct.test.a* noalias nocapture nofree noundef nonnull readnone byval([[STRUCT_TEST_A]]) align 8 dereferenceable(24) [[TMP0]]) #[[ATTR2:[0-9]+]]
+; CGSCC-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_TEST_A]], ptr [[TMP0]], i64 0, i32 2
+; CGSCC-NEXT:    store ptr [[PTR]], ptr [[TMP1]], align 8
+; CGSCC-NEXT:    tail call void @bar(ptr noalias nocapture nofree noundef nonnull readnone byval([[STRUCT_TEST_A]]) align 8 dereferenceable(24) [[TMP0]]) #[[ATTR2:[0-9]+]]
 ; CGSCC-NEXT:    ret void
 ;
 entry:
@@ -34,24 +34,22 @@ entry:
   br label %call.br
 
 call.br:
-  %1 = getelementptr inbounds %struct.test.a, %struct.test.a* %0, i64 0, i32 2
-  store i8* %ptr, i8** %1
-  tail call void @bar(%struct.test.a* noundef byval(%struct.test.a) align 8 %0)
+  %1 = getelementptr inbounds %struct.test.a, ptr %0, i64 0, i32 2
+  store ptr %ptr, ptr %1
+  tail call void @bar(ptr noundef byval(%struct.test.a) align 8 %0)
   ret void
 }
 
-define void @bar(%struct.test.a* noundef byval(%struct.test.a) align 8 %dev) {
+define void @bar(ptr noundef byval(%struct.test.a) align 8 %dev) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CHECK-LABEL: define {{[^@]+}}@bar
-; CHECK-SAME: (%struct.test.a* noalias nocapture nofree noundef nonnull writeonly byval([[STRUCT_TEST_A:%.*]]) align 8 dereferenceable(24) [[DEV:%.*]]) #[[ATTR1:[0-9]+]] {
-; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_TEST_A]], %struct.test.a* [[DEV]], i64 0, i32 0
-; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [[STRUCT_TEST_B:%.*]], %struct.test.b* [[TMP1]], i64 0, i32 1
-; CHECK-NEXT:    store i32 1, i32* [[TMP2]], align 4
+; CHECK-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly byval([[STRUCT_TEST_A:%.*]]) align 8 dereferenceable(24) [[DEV:%.*]]) #[[ATTR1:[0-9]+]] {
+; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [[STRUCT_TEST_B:%.*]], ptr [[DEV]], i64 0, i32 1
+; CHECK-NEXT:    store i32 1, ptr [[TMP2]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %1 = getelementptr inbounds %struct.test.a, %struct.test.a* %dev, i64 0, i32 0
-  %2 = getelementptr inbounds %struct.test.b, %struct.test.b* %1, i64 0, i32 1
-  store i32 1, i32* %2
+  %1 = getelementptr inbounds %struct.test.b, ptr %dev, i64 0, i32 1
+  store i32 1, ptr %1
   ret void
 }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/range.ll b/llvm/test/Transforms/Attributor/range.ll
index b9d0b6d0c99fb..7368db44520ae 100644
--- a/llvm/test/Transforms/Attributor/range.ll
+++ b/llvm/test/Transforms/Attributor/range.ll
@@ -4,31 +4,31 @@
 
 ; FIXME: CGSCC is not looking at callees and calleers even though it could be allowed.
 
-define i32 @test0(i32* %p) {
+define i32 @test0(ptr %p) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; CHECK-LABEL: define {{[^@]+}}@test0
-; CHECK-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR0:[0-9]+]] {
-; CHECK-NEXT:    [[A:%.*]] = load i32, i32* [[P]], align 4, !range [[RNG0:![0-9]+]]
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT:    [[A:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG0:![0-9]+]]
 ; CHECK-NEXT:    ret i32 [[A]]
 ;
-  %a = load i32, i32* %p, !range !0
+  %a = load i32, ptr %p, !range !0
   ret i32 %a
 }
 
-define i32 @test0-range-check(i32* %p) {
+define i32 @test0-range-check(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; TUNIT-LABEL: define {{[^@]+}}@test0-range-check
-; TUNIT-SAME: (i32* nocapture nofree readonly align 4 [[P:%.*]]) #[[ATTR0]] {
-; TUNIT-NEXT:    [[A:%.*]] = tail call i32 @test0(i32* nocapture nofree readonly align 4 [[P]]) #[[ATTR3:[0-9]+]], !range [[RNG0]]
+; TUNIT-SAME: (ptr nocapture nofree readonly align 4 [[P:%.*]]) #[[ATTR0]] {
+; TUNIT-NEXT:    [[A:%.*]] = tail call i32 @test0(ptr nocapture nofree readonly align 4 [[P]]) #[[ATTR3:[0-9]+]], !range [[RNG0]]
 ; TUNIT-NEXT:    ret i32 [[A]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@test0-range-check
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR1:[0-9]+]] {
-; CGSCC-NEXT:    [[A:%.*]] = tail call i32 @test0(i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P]]) #[[ATTR5:[0-9]+]]
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR1:[0-9]+]] {
+; CGSCC-NEXT:    [[A:%.*]] = tail call i32 @test0(ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P]]) #[[ATTR5:[0-9]+]]
 ; CGSCC-NEXT:    ret i32 [[A]]
 ;
-  %a = tail call i32 @test0(i32* %p)
+  %a = tail call i32 @test0(ptr %p)
   ret i32 %a
 }
 
@@ -44,11 +44,11 @@ define void @use3(i1, i1, i1) {
 }
 
 ; TEST0 icmp test
-define void @test0-icmp-check(i32* %p){
+define void @test0-icmp-check(ptr %p){
   ; ret = [0, 10)
 ; TUNIT-LABEL: define {{[^@]+}}@test0-icmp-check
-; TUNIT-SAME: (i32* nocapture nofree readonly align 4 [[P:%.*]]) {
-; TUNIT-NEXT:    [[RET:%.*]] = tail call i32 @test0(i32* nocapture nofree readonly align 4 [[P]]) #[[ATTR3]], !range [[RNG0]]
+; TUNIT-SAME: (ptr nocapture nofree readonly align 4 [[P:%.*]]) {
+; TUNIT-NEXT:    [[RET:%.*]] = tail call i32 @test0(ptr nocapture nofree readonly align 4 [[P]]) #[[ATTR3]], !range [[RNG0]]
 ; TUNIT-NEXT:    [[CMP_EQ_1:%.*]] = icmp eq i32 [[RET]], 10
 ; TUNIT-NEXT:    [[CMP_EQ_2:%.*]] = icmp eq i32 [[RET]], 9
 ; TUNIT-NEXT:    [[CMP_EQ_3:%.*]] = icmp eq i32 [[RET]], 8
@@ -116,8 +116,8 @@ define void @test0-icmp-check(i32* %p){
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@test0-icmp-check
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) {
-; CGSCC-NEXT:    [[RET:%.*]] = tail call i32 @test0(i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P]]) #[[ATTR5]]
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) {
+; CGSCC-NEXT:    [[RET:%.*]] = tail call i32 @test0(ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P]]) #[[ATTR5]]
 ; CGSCC-NEXT:    [[CMP_EQ_1:%.*]] = icmp eq i32 [[RET]], 10
 ; CGSCC-NEXT:    [[CMP_EQ_2:%.*]] = icmp eq i32 [[RET]], 9
 ; CGSCC-NEXT:    [[CMP_EQ_3:%.*]] = icmp eq i32 [[RET]], 8
@@ -184,7 +184,7 @@ define void @test0-icmp-check(i32* %p){
 ; CGSCC-NEXT:    tail call void @use3(i1 [[CMP_LTE_4]], i1 [[CMP_LTE_5]], i1 [[CMP_LTE_6]])
 ; CGSCC-NEXT:    ret void
 ;
-  %ret = tail call i32 @test0(i32 *%p)
+  %ret = tail call i32 @test0(ptr %p)
 
   ; ret = [0, 10), eq
   %cmp-eq-1 = icmp eq i32 %ret, 10
@@ -268,38 +268,38 @@ define void @test0-icmp-check(i32* %p){
 
   ret void
 }
-define i32 @test1(i32* %p) {
+define i32 @test1(ptr %p) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; CHECK-LABEL: define {{[^@]+}}@test1
-; CHECK-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR0]] {
-; CHECK-NEXT:    [[LOAD_10_100:%.*]] = load i32, i32* [[P]], align 4, !range [[RNG1:![0-9]+]]
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[LOAD_10_100:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG1:![0-9]+]]
 ; CHECK-NEXT:    [[ADD_10_THEN_20_110:%.*]] = add i32 [[LOAD_10_100]], 10
 ; CHECK-NEXT:    [[MUL_10_THEN_200_1091:%.*]] = mul i32 [[ADD_10_THEN_20_110]], 10
 ; CHECK-NEXT:    ret i32 [[MUL_10_THEN_200_1091]]
 ;
-  %load-10-100 = load i32, i32* %p, !range !1
+  %load-10-100 = load i32, ptr %p, !range !1
   %add-10-then-20-110 = add i32 %load-10-100, 10
   %mul-10-then-200-1091 = mul i32 %add-10-then-20-110, 10
   ret i32 %mul-10-then-200-1091
 }
 
-define i1 @test1-check(i32* %p) {
+define i1 @test1-check(ptr %p) {
 ;
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; TUNIT-LABEL: define {{[^@]+}}@test1-check
-; TUNIT-SAME: (i32* nocapture nofree readonly align 4 [[P:%.*]]) #[[ATTR0]] {
-; TUNIT-NEXT:    [[RES:%.*]] = tail call i32 @test1(i32* nocapture nofree readonly align 4 [[P]]) #[[ATTR3]], !range [[RNG2:![0-9]+]]
+; TUNIT-SAME: (ptr nocapture nofree readonly align 4 [[P:%.*]]) #[[ATTR0]] {
+; TUNIT-NEXT:    [[RES:%.*]] = tail call i32 @test1(ptr nocapture nofree readonly align 4 [[P]]) #[[ATTR3]], !range [[RNG2:![0-9]+]]
 ; TUNIT-NEXT:    [[CMP:%.*]] = icmp eq i32 [[RES]], 500
 ; TUNIT-NEXT:    ret i1 [[CMP]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@test1-check
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR1]] {
-; CGSCC-NEXT:    [[RES:%.*]] = tail call i32 @test1(i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P]]) #[[ATTR5]]
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR1]] {
+; CGSCC-NEXT:    [[RES:%.*]] = tail call i32 @test1(ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P]]) #[[ATTR5]]
 ; CGSCC-NEXT:    [[CMP:%.*]] = icmp eq i32 [[RES]], 500
 ; CGSCC-NEXT:    ret i1 [[CMP]]
 ;
-  %res = tail call i32 @test1(i32* %p)
+  %res = tail call i32 @test1(ptr %p)
   %cmp = icmp eq i32 %res, 500
   ret i1 %cmp
 }
@@ -316,29 +316,29 @@ define i1 @test1-check(i32* %p) {
 ;    }
 ;  }
 
-define i32 @test2(i32* %p) {
+define i32 @test2(ptr %p) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; CHECK-LABEL: define {{[^@]+}}@test2
-; CHECK-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR0]] {
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR0]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[P]], align 4
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[P]], align 4
 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i32 [[TMP0]], 0
 ; CHECK-NEXT:    [[COND:%.*]] = select i1 [[TOBOOL]], i32 4, i32 3
 ; CHECK-NEXT:    ret i32 [[COND]]
 ;
 entry:
-  %0 = load i32, i32* %p, align 4
+  %0 = load i32, ptr %p, align 4
   %tobool = icmp eq i32 %0, 0
   %cond = select i1 %tobool, i32 4, i32 3
   ret i32 %cond
 }
 
-define i32 @test2_check(i32* %p) {
+define i32 @test2_check(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; TUNIT-LABEL: define {{[^@]+}}@test2_check
-; TUNIT-SAME: (i32* nocapture nofree readonly align 4 [[P:%.*]]) #[[ATTR0]] {
+; TUNIT-SAME: (ptr nocapture nofree readonly align 4 [[P:%.*]]) #[[ATTR0]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[CALL:%.*]] = tail call i32 @test2(i32* nocapture nofree readonly align 4 [[P]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL:%.*]] = tail call i32 @test2(ptr nocapture nofree readonly align 4 [[P]]) #[[ATTR3]]
 ; TUNIT-NEXT:    [[CMP:%.*]] = icmp slt i32 [[CALL]], 5
 ; TUNIT-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; TUNIT:       if.then:
@@ -351,9 +351,9 @@ define i32 @test2_check(i32* %p) {
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@test2_check
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR1]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR1]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[CALL:%.*]] = tail call i32 @test2(i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P]]) #[[ATTR5]]
+; CGSCC-NEXT:    [[CALL:%.*]] = tail call i32 @test2(ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[P]]) #[[ATTR5]]
 ; CGSCC-NEXT:    [[CMP:%.*]] = icmp slt i32 [[CALL]], 5
 ; CGSCC-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CGSCC:       if.then:
@@ -365,7 +365,7 @@ define i32 @test2_check(i32* %p) {
 ; CGSCC-NEXT:    ret i32 [[RETVAL_0]]
 ;
 entry:
-  %call = tail call i32 @test2(i32* %p)
+  %call = tail call i32 @test2(ptr %p)
   %cmp = icmp slt i32 %call, 5
   br i1 %cmp, label %if.then, label %if.end
 
@@ -905,9 +905,8 @@ define dso_local i64 @select_int2ptr_bitcast_ptr2int(i32 %a) local_unnamed_addr
 ; TUNIT-NEXT:    [[Y_0_V:%.*]] = select i1 [[CMP1]], i32 1, i32 2
 ; TUNIT-NEXT:    [[Y_0:%.*]] = add nuw nsw i32 [[DOT]], [[Y_0_V]]
 ; TUNIT-NEXT:    [[CMP6:%.*]] = icmp eq i32 [[Y_0]], 5
-; TUNIT-NEXT:    [[I2P:%.*]] = inttoptr i1 [[CMP6]] to i1*
-; TUNIT-NEXT:    [[BC:%.*]] = bitcast i1* [[I2P]] to i32*
-; TUNIT-NEXT:    [[P2I:%.*]] = ptrtoint i32* [[BC]] to i64
+; TUNIT-NEXT:    [[I2P:%.*]] = inttoptr i1 [[CMP6]] to ptr
+; TUNIT-NEXT:    [[P2I:%.*]] = ptrtoint ptr [[I2P]] to i64
 ; TUNIT-NEXT:    ret i64 [[P2I]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
@@ -920,9 +919,8 @@ define dso_local i64 @select_int2ptr_bitcast_ptr2int(i32 %a) local_unnamed_addr
 ; CGSCC-NEXT:    [[Y_0_V:%.*]] = select i1 [[CMP1]], i32 1, i32 2
 ; CGSCC-NEXT:    [[Y_0:%.*]] = add nuw nsw i32 [[DOT]], [[Y_0_V]]
 ; CGSCC-NEXT:    [[CMP6:%.*]] = icmp eq i32 [[Y_0]], 5
-; CGSCC-NEXT:    [[I2P:%.*]] = inttoptr i1 [[CMP6]] to i1*
-; CGSCC-NEXT:    [[BC:%.*]] = bitcast i1* [[I2P]] to i32*
-; CGSCC-NEXT:    [[P2I:%.*]] = ptrtoint i32* [[BC]] to i64
+; CGSCC-NEXT:    [[I2P:%.*]] = inttoptr i1 [[CMP6]] to ptr
+; CGSCC-NEXT:    [[P2I:%.*]] = ptrtoint ptr [[I2P]] to i64
 ; CGSCC-NEXT:    ret i64 [[P2I]]
 ;
 entry:
@@ -932,9 +930,8 @@ entry:
   %y.0.v = select i1 %cmp1, i32 1, i32 2
   %y.0 = add nuw nsw i32 %., %y.0.v
   %cmp6 = icmp eq i32 %y.0, 5
-  %i2p = inttoptr i1 %cmp6 to i1*
-  %bc = bitcast i1* %i2p to i32*
-  %p2i = ptrtoint i32* %bc to i64
+  %i2p = inttoptr i1 %cmp6 to ptr
+  %p2i = ptrtoint ptr %i2p to i64
   ret i64 %p2i
 }
 
@@ -978,52 +975,52 @@ define i1 @d_fcmp(double %a, double %b) {
   %s = select i1 %r, i1 %r, i1 0
   ret i1 %s
 }
-define i1 @dp_icmp(double* %a, double* %b) {
+define i1 @dp_icmp(ptr %a, ptr %b) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@dp_icmp
-; TUNIT-SAME: (double* nofree readnone [[A:%.*]], double* nofree readnone [[B:%.*]]) #[[ATTR1]] {
-; TUNIT-NEXT:    [[R:%.*]] = icmp sge double* [[A]], [[B]]
+; TUNIT-SAME: (ptr nofree readnone [[A:%.*]], ptr nofree readnone [[B:%.*]]) #[[ATTR1]] {
+; TUNIT-NEXT:    [[R:%.*]] = icmp sge ptr [[A]], [[B]]
 ; TUNIT-NEXT:    [[S:%.*]] = select i1 [[R]], i1 [[R]], i1 false
 ; TUNIT-NEXT:    ret i1 [[S]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@dp_icmp
-; CGSCC-SAME: (double* nofree readnone [[A:%.*]], double* nofree readnone [[B:%.*]]) #[[ATTR2]] {
-; CGSCC-NEXT:    [[R:%.*]] = icmp sge double* [[A]], [[B]]
+; CGSCC-SAME: (ptr nofree readnone [[A:%.*]], ptr nofree readnone [[B:%.*]]) #[[ATTR2]] {
+; CGSCC-NEXT:    [[R:%.*]] = icmp sge ptr [[A]], [[B]]
 ; CGSCC-NEXT:    [[S:%.*]] = select i1 [[R]], i1 [[R]], i1 false
 ; CGSCC-NEXT:    ret i1 [[S]]
 ;
-  %r = icmp sge double* %a, %b
+  %r = icmp sge ptr %a, %b
   %s = select i1 %r, i1 %r, i1 0
   ret i1 %s
 }
-define i1 @ip_icmp(i8* %a, i8* %b) {
+define i1 @ip_icmp(ptr %a, ptr %b) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@ip_icmp
-; TUNIT-SAME: (i8* nofree readnone [[A:%.*]], i8* nofree readnone [[B:%.*]]) #[[ATTR1]] {
-; TUNIT-NEXT:    [[R:%.*]] = icmp ult i8* [[A]], [[B]]
+; TUNIT-SAME: (ptr nofree readnone [[A:%.*]], ptr nofree readnone [[B:%.*]]) #[[ATTR1]] {
+; TUNIT-NEXT:    [[R:%.*]] = icmp ult ptr [[A]], [[B]]
 ; TUNIT-NEXT:    [[S:%.*]] = select i1 [[R]], i1 [[R]], i1 false
 ; TUNIT-NEXT:    ret i1 [[S]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@ip_icmp
-; CGSCC-SAME: (i8* nofree readnone [[A:%.*]], i8* nofree readnone [[B:%.*]]) #[[ATTR2]] {
-; CGSCC-NEXT:    [[R:%.*]] = icmp ult i8* [[A]], [[B]]
+; CGSCC-SAME: (ptr nofree readnone [[A:%.*]], ptr nofree readnone [[B:%.*]]) #[[ATTR2]] {
+; CGSCC-NEXT:    [[R:%.*]] = icmp ult ptr [[A]], [[B]]
 ; CGSCC-NEXT:    [[S:%.*]] = select i1 [[R]], i1 [[R]], i1 false
 ; CGSCC-NEXT:    ret i1 [[S]]
 ;
-  %r = icmp ult i8* %a, %b
+  %r = icmp ult ptr %a, %b
   %s = select i1 %r, i1 %r, i1 0
   ret i1 %s
 }
-define i1 @fcmp_caller(float %fa, float %fb, double %da, double %db, double* %dpa, double* %dpb, i8* %ipa, i8* %ipb) {
+define i1 @fcmp_caller(float %fa, float %fb, double %da, double %db, ptr %dpa, ptr %dpb, ptr %ipa, ptr %ipb) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@fcmp_caller
-; TUNIT-SAME: (float [[FA:%.*]], float [[FB:%.*]], double [[DA:%.*]], double [[DB:%.*]], double* nofree readnone [[DPA:%.*]], double* nofree readnone [[DPB:%.*]], i8* nofree readnone [[IPA:%.*]], i8* nofree readnone [[IPB:%.*]]) #[[ATTR1]] {
+; TUNIT-SAME: (float [[FA:%.*]], float [[FB:%.*]], double [[DA:%.*]], double [[DB:%.*]], ptr nofree readnone [[DPA:%.*]], ptr nofree readnone [[DPB:%.*]], ptr nofree readnone [[IPA:%.*]], ptr nofree readnone [[IPB:%.*]]) #[[ATTR1]] {
 ; TUNIT-NEXT:    [[R1:%.*]] = call i1 @f_fcmp(float [[FA]], float [[FB]]) #[[ATTR3]]
 ; TUNIT-NEXT:    [[R2:%.*]] = call i1 @d_fcmp(double [[DA]], double [[DB]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[R3:%.*]] = call i1 @dp_icmp(double* noalias nofree readnone [[DPA]], double* noalias nofree readnone [[DPB]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[R4:%.*]] = call i1 @ip_icmp(i8* noalias nofree readnone [[IPA]], i8* noalias nofree readnone [[IPB]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[R3:%.*]] = call i1 @dp_icmp(ptr noalias nofree readnone [[DPA]], ptr noalias nofree readnone [[DPB]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[R4:%.*]] = call i1 @ip_icmp(ptr noalias nofree readnone [[IPA]], ptr noalias nofree readnone [[IPB]]) #[[ATTR3]]
 ; TUNIT-NEXT:    [[O1:%.*]] = or i1 [[R1]], [[R2]]
 ; TUNIT-NEXT:    [[O2:%.*]] = or i1 [[R3]], [[R4]]
 ; TUNIT-NEXT:    [[O3:%.*]] = or i1 [[O1]], [[O2]]
@@ -1031,11 +1028,11 @@ define i1 @fcmp_caller(float %fa, float %fb, double %da, double %db, double* %dp
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@fcmp_caller
-; CGSCC-SAME: (float [[FA:%.*]], float [[FB:%.*]], double [[DA:%.*]], double [[DB:%.*]], double* nofree readnone [[DPA:%.*]], double* nofree readnone [[DPB:%.*]], i8* nofree readnone [[IPA:%.*]], i8* nofree readnone [[IPB:%.*]]) #[[ATTR3]] {
+; CGSCC-SAME: (float [[FA:%.*]], float [[FB:%.*]], double [[DA:%.*]], double [[DB:%.*]], ptr nofree readnone [[DPA:%.*]], ptr nofree readnone [[DPB:%.*]], ptr nofree readnone [[IPA:%.*]], ptr nofree readnone [[IPB:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[R1:%.*]] = call i1 @f_fcmp(float [[FA]], float [[FB]]) #[[ATTR5]]
 ; CGSCC-NEXT:    [[R2:%.*]] = call i1 @d_fcmp(double [[DA]], double [[DB]]) #[[ATTR5]]
-; CGSCC-NEXT:    [[R3:%.*]] = call i1 @dp_icmp(double* noalias nofree readnone [[DPA]], double* noalias nofree readnone [[DPB]]) #[[ATTR5]]
-; CGSCC-NEXT:    [[R4:%.*]] = call i1 @ip_icmp(i8* noalias nofree readnone [[IPA]], i8* noalias nofree readnone [[IPB]]) #[[ATTR5]]
+; CGSCC-NEXT:    [[R3:%.*]] = call i1 @dp_icmp(ptr noalias nofree readnone [[DPA]], ptr noalias nofree readnone [[DPB]]) #[[ATTR5]]
+; CGSCC-NEXT:    [[R4:%.*]] = call i1 @ip_icmp(ptr noalias nofree readnone [[IPA]], ptr noalias nofree readnone [[IPB]]) #[[ATTR5]]
 ; CGSCC-NEXT:    [[O1:%.*]] = or i1 [[R1]], [[R2]]
 ; CGSCC-NEXT:    [[O2:%.*]] = or i1 [[R3]], [[R4]]
 ; CGSCC-NEXT:    [[O3:%.*]] = or i1 [[O1]], [[O2]]
@@ -1043,8 +1040,8 @@ define i1 @fcmp_caller(float %fa, float %fb, double %da, double %db, double* %dp
 ;
   %r1 = call i1 @f_fcmp(float %fa, float %fb)
   %r2 = call i1 @d_fcmp(double %da, double %db)
-  %r3 = call i1 @dp_icmp(double* %dpa, double* %dpb)
-  %r4 = call i1 @ip_icmp(i8* %ipa, i8* %ipb)
+  %r3 = call i1 @dp_icmp(ptr %dpa, ptr %dpb)
+  %r4 = call i1 @ip_icmp(ptr %ipa, ptr %ipb)
   %o1 = or i1 %r1, %r2
   %o2 = or i1 %r3, %r4
   %o3 = or i1 %o1, %o2
@@ -1660,11 +1657,11 @@ define internal i1 @non_zero(i8 %v) {
 }
 
 ; Avoid range metadata for %l below
-define i1 @context(i8* %p) {
+define i1 @context(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; TUNIT-LABEL: define {{[^@]+}}@context
-; TUNIT-SAME: (i8* nocapture nofree noundef nonnull readonly dereferenceable(1) [[P:%.*]]) #[[ATTR0]] {
-; TUNIT-NEXT:    [[L:%.*]] = load i8, i8* [[P]], align 1
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull readonly dereferenceable(1) [[P:%.*]]) #[[ATTR0]] {
+; TUNIT-NEXT:    [[L:%.*]] = load i8, ptr [[P]], align 1
 ; TUNIT-NEXT:    [[C:%.*]] = icmp slt i8 0, [[L]]
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
@@ -1675,8 +1672,8 @@ define i1 @context(i8* %p) {
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@context
-; CGSCC-SAME: (i8* nocapture nofree noundef nonnull readonly dereferenceable(1) [[P:%.*]]) #[[ATTR1]] {
-; CGSCC-NEXT:    [[L:%.*]] = load i8, i8* [[P]], align 1
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly dereferenceable(1) [[P:%.*]]) #[[ATTR1]] {
+; CGSCC-NEXT:    [[L:%.*]] = load i8, ptr [[P]], align 1
 ; CGSCC-NEXT:    [[C:%.*]] = icmp slt i8 0, [[L]]
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
@@ -1685,7 +1682,7 @@ define i1 @context(i8* %p) {
 ; CGSCC:       f:
 ; CGSCC-NEXT:    ret i1 false
 ;
-  %l = load i8, i8* %p
+  %l = load i8, ptr %p
   %c = icmp slt i8 0, %l
   br i1 %c, label %t, label %f
 t:
@@ -1696,11 +1693,11 @@ f:
 }
 
 
-define void @spam(i32* %arg, i32* %arg1) {
+define void @spam(ptr %arg, ptr %arg1) {
 ; CHECK-LABEL: define {{[^@]+}}@spam
-; CHECK-SAME: (i32* nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[ARG:%.*]], i32* nocapture nofree readnone [[ARG1:%.*]]) {
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull readonly align 8 dereferenceable(4) [[ARG:%.*]], ptr nocapture nofree readnone [[ARG1:%.*]]) {
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[TMP:%.*]] = load i32, i32* [[ARG]], align 8
+; CHECK-NEXT:    [[TMP:%.*]] = load i32, ptr [[ARG]], align 8
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ult i32 [[TMP]], 4
 ; CHECK-NEXT:    br i1 [[TMP2]], label [[BB3:%.*]], label [[BB4:%.*]]
 ; CHECK:       bb3:
@@ -1713,7 +1710,7 @@ define void @spam(i32* %arg, i32* %arg1) {
 ; CHECK-NEXT:    ret void
 ;
 bb:
-  %tmp = load i32, i32* %arg, align 8
+  %tmp = load i32, ptr %arg, align 8
   %tmp2 = icmp ult i32 %tmp, 4
   br i1 %tmp2, label %bb3, label %bb4
 

diff  --git a/llvm/test/Transforms/Attributor/read_write_returned_arguments_scc.ll b/llvm/test/Transforms/Attributor/read_write_returned_arguments_scc.ll
index e528007cada60..6d15def7825c7 100644
--- a/llvm/test/Transforms/Attributor/read_write_returned_arguments_scc.ll
+++ b/llvm/test/Transforms/Attributor/read_write_returned_arguments_scc.ll
@@ -32,171 +32,171 @@
 ;
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 
-define i32* @external_ret2_nrw(i32* %n0, i32* %r0, i32* %w0) {
+define ptr @external_ret2_nrw(ptr %n0, ptr %r0, ptr %w0) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@external_ret2_nrw
-; TUNIT-SAME: (i32* nofree [[N0:%.*]], i32* nofree [[R0:%.*]], i32* nofree returned [[W0:%.*]]) #[[ATTR0:[0-9]+]] {
+; TUNIT-SAME: (ptr nofree [[N0:%.*]], ptr nofree [[R0:%.*]], ptr nofree returned [[W0:%.*]]) #[[ATTR0:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[CALL:%.*]] = call i32* @internal_ret0_nw(i32* nofree [[N0]], i32* nofree [[W0]]) #[[ATTR3:[0-9]+]]
-; TUNIT-NEXT:    [[CALL1:%.*]] = call i32* @internal_ret1_rrw(i32* nofree align 4 [[R0]], i32* nofree align 4 [[R0]], i32* nofree [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL2:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree [[N0]], i32* nocapture nofree readonly align 4 [[R0]], i32* nofree writeonly "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL3:%.*]] = call i32* @internal_ret1_rw(i32* nofree align 4 [[R0]], i32* nofree [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    ret i32* [[W0]]
+; TUNIT-NEXT:    [[CALL:%.*]] = call ptr @internal_ret0_nw(ptr nofree [[N0]], ptr nofree [[W0]]) #[[ATTR3:[0-9]+]]
+; TUNIT-NEXT:    [[CALL1:%.*]] = call ptr @internal_ret1_rrw(ptr nofree align 4 [[R0]], ptr nofree align 4 [[R0]], ptr nofree [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL2:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree [[N0]], ptr nocapture nofree readonly align 4 [[R0]], ptr nofree writeonly "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL3:%.*]] = call ptr @internal_ret1_rw(ptr nofree align 4 [[R0]], ptr nofree [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    ret ptr [[W0]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@external_ret2_nrw
-; CGSCC-SAME: (i32* nofree [[N0:%.*]], i32* nofree [[R0:%.*]], i32* nofree returned [[W0:%.*]]) #[[ATTR0:[0-9]+]] {
+; CGSCC-SAME: (ptr nofree [[N0:%.*]], ptr nofree [[R0:%.*]], ptr nofree returned [[W0:%.*]]) #[[ATTR0:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[CALL:%.*]] = call i32* @internal_ret0_nw(i32* nofree [[N0]], i32* nofree [[W0]]) #[[ATTR2:[0-9]+]]
-; CGSCC-NEXT:    [[CALL1:%.*]] = call i32* @internal_ret1_rrw(i32* nofree align 4 [[R0]], i32* nofree align 4 [[R0]], i32* nofree [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[CALL2:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree [[N0]], i32* nocapture nofree readonly align 4 [[R0]], i32* nofree writeonly [[W0]]) #[[ATTR3:[0-9]+]]
-; CGSCC-NEXT:    [[CALL3:%.*]] = call i32* @internal_ret1_rw(i32* nofree align 4 [[R0]], i32* nofree [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    ret i32* [[W0]]
+; CGSCC-NEXT:    [[CALL:%.*]] = call ptr @internal_ret0_nw(ptr nofree [[N0]], ptr nofree [[W0]]) #[[ATTR2:[0-9]+]]
+; CGSCC-NEXT:    [[CALL1:%.*]] = call ptr @internal_ret1_rrw(ptr nofree align 4 [[R0]], ptr nofree align 4 [[R0]], ptr nofree [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL2:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree [[N0]], ptr nocapture nofree readonly align 4 [[R0]], ptr nofree writeonly [[W0]]) #[[ATTR3:[0-9]+]]
+; CGSCC-NEXT:    [[CALL3:%.*]] = call ptr @internal_ret1_rw(ptr nofree align 4 [[R0]], ptr nofree [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    ret ptr [[W0]]
 ;
 entry:
-  %call = call i32* @internal_ret0_nw(i32* %n0, i32* %w0)
-  %call1 = call i32* @internal_ret1_rrw(i32* %r0, i32* %r0, i32* %w0)
-  %call2 = call i32* @external_sink_ret2_nrw(i32* %n0, i32* %r0, i32* %w0)
-  %call3 = call i32* @internal_ret1_rw(i32* %r0, i32* %w0)
-  ret i32* %call3
+  %call = call ptr @internal_ret0_nw(ptr %n0, ptr %w0)
+  %call1 = call ptr @internal_ret1_rrw(ptr %r0, ptr %r0, ptr %w0)
+  %call2 = call ptr @external_sink_ret2_nrw(ptr %n0, ptr %r0, ptr %w0)
+  %call3 = call ptr @internal_ret1_rw(ptr %r0, ptr %w0)
+  ret ptr %call3
 }
 
-define internal i32* @internal_ret0_nw(i32* %n0, i32* %w0) {
+define internal ptr @internal_ret0_nw(ptr %n0, ptr %w0) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@internal_ret0_nw
-; TUNIT-SAME: (i32* nofree [[N0:%.*]], i32* nofree [[W0:%.*]]) #[[ATTR0]] {
+; TUNIT-SAME: (ptr nofree [[N0:%.*]], ptr nofree [[W0:%.*]]) #[[ATTR0]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[R0:%.*]] = alloca i32, align 4
 ; TUNIT-NEXT:    [[R1:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    [[TOBOOL:%.*]] = icmp ne i32* [[N0]], null
+; TUNIT-NEXT:    [[TOBOOL:%.*]] = icmp ne ptr [[N0]], null
 ; TUNIT-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; TUNIT:       if.then:
 ; TUNIT-NEXT:    br label [[RETURN:%.*]]
 ; TUNIT:       if.end:
-; TUNIT-NEXT:    store i32 3, i32* [[R0]], align 4
-; TUNIT-NEXT:    store i32 5, i32* [[R1]], align 4
-; TUNIT-NEXT:    store i32 1, i32* [[W0]], align 4
-; TUNIT-NEXT:    [[CALL:%.*]] = call i32* @internal_ret1_rrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R1]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL1:%.*]] = call i32* @external_ret2_nrw(i32* nofree [[N0]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL2:%.*]] = call i32* @external_ret2_nrw(i32* nofree [[N0]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R1]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL3:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree [[N0]], i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], i32* nofree nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL4:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree [[N0]], i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R1]], i32* nofree nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL5:%.*]] = call i32* @internal_ret0_nw(i32* nofree [[N0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    store i32 3, ptr [[R0]], align 4
+; TUNIT-NEXT:    store i32 5, ptr [[R1]], align 4
+; TUNIT-NEXT:    store i32 1, ptr [[W0]], align 4
+; TUNIT-NEXT:    [[CALL:%.*]] = call ptr @internal_ret1_rrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R1]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL1:%.*]] = call ptr @external_ret2_nrw(ptr nofree [[N0]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL2:%.*]] = call ptr @external_ret2_nrw(ptr nofree [[N0]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R1]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL3:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree [[N0]], ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], ptr nofree nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL4:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree [[N0]], ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R1]], ptr nofree nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL5:%.*]] = call ptr @internal_ret0_nw(ptr nofree [[N0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
 ; TUNIT-NEXT:    br label [[RETURN]]
 ; TUNIT:       return:
-; TUNIT-NEXT:    [[RETVAL_0:%.*]] = phi i32* [ [[CALL5]], [[IF_END]] ], [ [[N0]], [[IF_THEN]] ]
-; TUNIT-NEXT:    ret i32* [[RETVAL_0]]
+; TUNIT-NEXT:    [[RETVAL_0:%.*]] = phi ptr [ [[CALL5]], [[IF_END]] ], [ [[N0]], [[IF_THEN]] ]
+; TUNIT-NEXT:    ret ptr [[RETVAL_0]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@internal_ret0_nw
-; CGSCC-SAME: (i32* nofree [[N0:%.*]], i32* nofree [[W0:%.*]]) #[[ATTR0]] {
+; CGSCC-SAME: (ptr nofree [[N0:%.*]], ptr nofree [[W0:%.*]]) #[[ATTR0]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[R0:%.*]] = alloca i32, align 4
 ; CGSCC-NEXT:    [[R1:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    [[TOBOOL:%.*]] = icmp ne i32* [[N0]], null
+; CGSCC-NEXT:    [[TOBOOL:%.*]] = icmp ne ptr [[N0]], null
 ; CGSCC-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; CGSCC:       if.then:
 ; CGSCC-NEXT:    br label [[RETURN:%.*]]
 ; CGSCC:       if.end:
-; CGSCC-NEXT:    store i32 3, i32* [[R0]], align 4
-; CGSCC-NEXT:    store i32 5, i32* [[R1]], align 4
-; CGSCC-NEXT:    store i32 1, i32* [[W0]], align 4
-; CGSCC-NEXT:    [[CALL:%.*]] = call i32* @internal_ret1_rrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R1]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[CALL1:%.*]] = call i32* @external_ret2_nrw(i32* nofree [[N0]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[CALL2:%.*]] = call i32* @external_ret2_nrw(i32* nofree [[N0]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R1]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[CALL3:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree [[N0]], i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], i32* nofree nonnull writeonly align 4 dereferenceable(4) [[W0]]) #[[ATTR4:[0-9]+]]
-; CGSCC-NEXT:    [[CALL4:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree [[N0]], i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R1]], i32* nofree nonnull writeonly align 4 dereferenceable(4) [[W0]]) #[[ATTR4]]
-; CGSCC-NEXT:    [[CALL5:%.*]] = call i32* @internal_ret0_nw(i32* nofree [[N0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    store i32 3, ptr [[R0]], align 4
+; CGSCC-NEXT:    store i32 5, ptr [[R1]], align 4
+; CGSCC-NEXT:    store i32 1, ptr [[W0]], align 4
+; CGSCC-NEXT:    [[CALL:%.*]] = call ptr @internal_ret1_rrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R1]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL1:%.*]] = call ptr @external_ret2_nrw(ptr nofree [[N0]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL2:%.*]] = call ptr @external_ret2_nrw(ptr nofree [[N0]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R1]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL3:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree [[N0]], ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], ptr nofree nonnull writeonly align 4 dereferenceable(4) [[W0]]) #[[ATTR4:[0-9]+]]
+; CGSCC-NEXT:    [[CALL4:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree [[N0]], ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R1]], ptr nofree nonnull writeonly align 4 dereferenceable(4) [[W0]]) #[[ATTR4]]
+; CGSCC-NEXT:    [[CALL5:%.*]] = call ptr @internal_ret0_nw(ptr nofree [[N0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
 ; CGSCC-NEXT:    br label [[RETURN]]
 ; CGSCC:       return:
-; CGSCC-NEXT:    [[RETVAL_0:%.*]] = phi i32* [ [[CALL5]], [[IF_END]] ], [ [[N0]], [[IF_THEN]] ]
-; CGSCC-NEXT:    ret i32* [[RETVAL_0]]
+; CGSCC-NEXT:    [[RETVAL_0:%.*]] = phi ptr [ [[CALL5]], [[IF_END]] ], [ [[N0]], [[IF_THEN]] ]
+; CGSCC-NEXT:    ret ptr [[RETVAL_0]]
 ;
 entry:
   %r0 = alloca i32, align 4
   %r1 = alloca i32, align 4
-  %tobool = icmp ne i32* %n0, null
+  %tobool = icmp ne ptr %n0, null
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
   br label %return
 
 if.end:                                           ; preds = %entry
-  store i32 3, i32* %r0, align 4
-  store i32 5, i32* %r1, align 4
-  store i32 1, i32* %w0, align 4
-  %call = call i32* @internal_ret1_rrw(i32* %r0, i32* %r1, i32* %w0)
-  %call1 = call i32* @external_ret2_nrw(i32* %n0, i32* %r0, i32* %w0)
-  %call2 = call i32* @external_ret2_nrw(i32* %n0, i32* %r1, i32* %w0)
-  %call3 = call i32* @external_sink_ret2_nrw(i32* %n0, i32* %r0, i32* %w0)
-  %call4 = call i32* @external_sink_ret2_nrw(i32* %n0, i32* %r1, i32* %w0)
-  %call5 = call i32* @internal_ret0_nw(i32* %n0, i32* %w0)
+  store i32 3, ptr %r0, align 4
+  store i32 5, ptr %r1, align 4
+  store i32 1, ptr %w0, align 4
+  %call = call ptr @internal_ret1_rrw(ptr %r0, ptr %r1, ptr %w0)
+  %call1 = call ptr @external_ret2_nrw(ptr %n0, ptr %r0, ptr %w0)
+  %call2 = call ptr @external_ret2_nrw(ptr %n0, ptr %r1, ptr %w0)
+  %call3 = call ptr @external_sink_ret2_nrw(ptr %n0, ptr %r0, ptr %w0)
+  %call4 = call ptr @external_sink_ret2_nrw(ptr %n0, ptr %r1, ptr %w0)
+  %call5 = call ptr @internal_ret0_nw(ptr %n0, ptr %w0)
   br label %return
 
 return:                                           ; preds = %if.end, %if.then
-  %retval.0 = phi i32* [ %call5, %if.end ], [ %n0, %if.then ]
-  ret i32* %retval.0
+  %retval.0 = phi ptr [ %call5, %if.end ], [ %n0, %if.then ]
+  ret ptr %retval.0
 }
 
-define internal i32* @internal_ret1_rrw(i32* %r0, i32* %r1, i32* %w0) {
+define internal ptr @internal_ret1_rrw(ptr %r0, ptr %r1, ptr %w0) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@internal_ret1_rrw
-; TUNIT-SAME: (i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0:%.*]], i32* nofree align 4 [[R1:%.*]], i32* nofree [[W0:%.*]]) #[[ATTR0]] {
+; TUNIT-SAME: (ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0:%.*]], ptr nofree align 4 [[R1:%.*]], ptr nofree [[W0:%.*]]) #[[ATTR0]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, i32* [[R0]], align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr [[R0]], align 4
 ; TUNIT-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0
 ; TUNIT-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; TUNIT:       if.then:
 ; TUNIT-NEXT:    br label [[RETURN:%.*]]
 ; TUNIT:       if.end:
-; TUNIT-NEXT:    [[CALL:%.*]] = call i32* @internal_ret1_rw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* [[R0]], align 4
-; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, i32* [[R1]], align 4
+; TUNIT-NEXT:    [[CALL:%.*]] = call ptr @internal_ret1_rw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr [[R0]], align 4
+; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, ptr [[R1]], align 4
 ; TUNIT-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP1]], [[TMP2]]
-; TUNIT-NEXT:    store i32 [[ADD]], i32* [[W0]], align 4
-; TUNIT-NEXT:    [[CALL1:%.*]] = call i32* @internal_ret1_rw(i32* nofree nonnull align 4 dereferenceable(4) [[R1]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL2:%.*]] = call i32* @internal_ret0_nw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL3:%.*]] = call i32* @internal_ret0_nw(i32* nofree nonnull align 4 dereferenceable(4) [[W0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL4:%.*]] = call i32* @external_ret2_nrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[R1]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL5:%.*]] = call i32* @external_ret2_nrw(i32* nofree nonnull align 4 dereferenceable(4) [[R1]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL6:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nocapture nofree nonnull readonly align 4 dereferenceable(4) [[R1]], i32* nofree nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL7:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree nonnull align 4 dereferenceable(4) [[R1]], i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], i32* nofree nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL8:%.*]] = call i32* @internal_ret0_nw(i32* nofree nonnull align 4 dereferenceable(4) [[R1]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    store i32 [[ADD]], ptr [[W0]], align 4
+; TUNIT-NEXT:    [[CALL1:%.*]] = call ptr @internal_ret1_rw(ptr nofree nonnull align 4 dereferenceable(4) [[R1]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL2:%.*]] = call ptr @internal_ret0_nw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL3:%.*]] = call ptr @internal_ret0_nw(ptr nofree nonnull align 4 dereferenceable(4) [[W0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL4:%.*]] = call ptr @external_ret2_nrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[R1]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL5:%.*]] = call ptr @external_ret2_nrw(ptr nofree nonnull align 4 dereferenceable(4) [[R1]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL6:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nocapture nofree nonnull readonly align 4 dereferenceable(4) [[R1]], ptr nofree nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL7:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree nonnull align 4 dereferenceable(4) [[R1]], ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], ptr nofree nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL8:%.*]] = call ptr @internal_ret0_nw(ptr nofree nonnull align 4 dereferenceable(4) [[R1]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
 ; TUNIT-NEXT:    br label [[RETURN]]
 ; TUNIT:       return:
-; TUNIT-NEXT:    [[RETVAL_0:%.*]] = phi i32* [ [[CALL8]], [[IF_END]] ], [ [[R1]], [[IF_THEN]] ]
-; TUNIT-NEXT:    ret i32* undef
+; TUNIT-NEXT:    [[RETVAL_0:%.*]] = phi ptr [ [[CALL8]], [[IF_END]] ], [ [[R1]], [[IF_THEN]] ]
+; TUNIT-NEXT:    ret ptr undef
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@internal_ret1_rrw
-; CGSCC-SAME: (i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0:%.*]], i32* nofree align 4 [[R1:%.*]], i32* nofree [[W0:%.*]]) #[[ATTR0]] {
+; CGSCC-SAME: (ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0:%.*]], ptr nofree align 4 [[R1:%.*]], ptr nofree [[W0:%.*]]) #[[ATTR0]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, i32* [[R0]], align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr [[R0]], align 4
 ; CGSCC-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0
 ; CGSCC-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; CGSCC:       if.then:
 ; CGSCC-NEXT:    br label [[RETURN:%.*]]
 ; CGSCC:       if.end:
-; CGSCC-NEXT:    [[CALL:%.*]] = call i32* @internal_ret1_rw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, i32* [[R0]], align 4
-; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, i32* [[R1]], align 4
+; CGSCC-NEXT:    [[CALL:%.*]] = call ptr @internal_ret1_rw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr [[R0]], align 4
+; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, ptr [[R1]], align 4
 ; CGSCC-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP1]], [[TMP2]]
-; CGSCC-NEXT:    store i32 [[ADD]], i32* [[W0]], align 4
-; CGSCC-NEXT:    [[CALL1:%.*]] = call i32* @internal_ret1_rw(i32* nofree nonnull align 4 dereferenceable(4) [[R1]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[CALL2:%.*]] = call i32* @internal_ret0_nw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[CALL3:%.*]] = call i32* @internal_ret0_nw(i32* nofree nonnull align 4 dereferenceable(4) [[W0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[CALL4:%.*]] = call i32* @external_ret2_nrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[R1]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[CALL5:%.*]] = call i32* @external_ret2_nrw(i32* nofree nonnull align 4 dereferenceable(4) [[R1]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[CALL6:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nocapture nofree nonnull readonly align 4 dereferenceable(4) [[R1]], i32* nofree nonnull writeonly align 4 dereferenceable(4) [[W0]]) #[[ATTR4]]
-; CGSCC-NEXT:    [[CALL7:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree nonnull align 4 dereferenceable(4) [[R1]], i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], i32* nofree nonnull writeonly align 4 dereferenceable(4) [[W0]]) #[[ATTR4]]
-; CGSCC-NEXT:    [[CALL8:%.*]] = call i32* @internal_ret0_nw(i32* nofree nonnull align 4 dereferenceable(4) [[R1]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    store i32 [[ADD]], ptr [[W0]], align 4
+; CGSCC-NEXT:    [[CALL1:%.*]] = call ptr @internal_ret1_rw(ptr nofree nonnull align 4 dereferenceable(4) [[R1]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL2:%.*]] = call ptr @internal_ret0_nw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL3:%.*]] = call ptr @internal_ret0_nw(ptr nofree nonnull align 4 dereferenceable(4) [[W0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL4:%.*]] = call ptr @external_ret2_nrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[R1]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL5:%.*]] = call ptr @external_ret2_nrw(ptr nofree nonnull align 4 dereferenceable(4) [[R1]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL6:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nocapture nofree nonnull readonly align 4 dereferenceable(4) [[R1]], ptr nofree nonnull writeonly align 4 dereferenceable(4) [[W0]]) #[[ATTR4]]
+; CGSCC-NEXT:    [[CALL7:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree nonnull align 4 dereferenceable(4) [[R1]], ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], ptr nofree nonnull writeonly align 4 dereferenceable(4) [[W0]]) #[[ATTR4]]
+; CGSCC-NEXT:    [[CALL8:%.*]] = call ptr @internal_ret0_nw(ptr nofree nonnull align 4 dereferenceable(4) [[R1]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
 ; CGSCC-NEXT:    br label [[RETURN]]
 ; CGSCC:       return:
-; CGSCC-NEXT:    [[RETVAL_0:%.*]] = phi i32* [ [[CALL8]], [[IF_END]] ], [ [[R1]], [[IF_THEN]] ]
-; CGSCC-NEXT:    ret i32* undef
+; CGSCC-NEXT:    [[RETVAL_0:%.*]] = phi ptr [ [[CALL8]], [[IF_END]] ], [ [[R1]], [[IF_THEN]] ]
+; CGSCC-NEXT:    ret ptr undef
 ;
 entry:
-  %0 = load i32, i32* %r0, align 4
+  %0 = load i32, ptr %r0, align 4
   %tobool = icmp ne i32 %0, 0
   br i1 %tobool, label %if.end, label %if.then
 
@@ -204,105 +204,105 @@ if.then:                                          ; preds = %entry
   br label %return
 
 if.end:                                           ; preds = %entry
-  %call = call i32* @internal_ret1_rw(i32* %r0, i32* %w0)
-  %1 = load i32, i32* %r0, align 4
-  %2 = load i32, i32* %r1, align 4
+  %call = call ptr @internal_ret1_rw(ptr %r0, ptr %w0)
+  %1 = load i32, ptr %r0, align 4
+  %2 = load i32, ptr %r1, align 4
   %add = add nsw i32 %1, %2
-  store i32 %add, i32* %w0, align 4
-  %call1 = call i32* @internal_ret1_rw(i32* %r1, i32* %w0)
-  %call2 = call i32* @internal_ret0_nw(i32* %r0, i32* %w0)
-  %call3 = call i32* @internal_ret0_nw(i32* %w0, i32* %w0)
-  %call4 = call i32* @external_ret2_nrw(i32* %r0, i32* %r1, i32* %w0)
-  %call5 = call i32* @external_ret2_nrw(i32* %r1, i32* %r0, i32* %w0)
-  %call6 = call i32* @external_sink_ret2_nrw(i32* %r0, i32* %r1, i32* %w0)
-  %call7 = call i32* @external_sink_ret2_nrw(i32* %r1, i32* %r0, i32* %w0)
-  %call8 = call i32* @internal_ret0_nw(i32* %r1, i32* %w0)
+  store i32 %add, ptr %w0, align 4
+  %call1 = call ptr @internal_ret1_rw(ptr %r1, ptr %w0)
+  %call2 = call ptr @internal_ret0_nw(ptr %r0, ptr %w0)
+  %call3 = call ptr @internal_ret0_nw(ptr %w0, ptr %w0)
+  %call4 = call ptr @external_ret2_nrw(ptr %r0, ptr %r1, ptr %w0)
+  %call5 = call ptr @external_ret2_nrw(ptr %r1, ptr %r0, ptr %w0)
+  %call6 = call ptr @external_sink_ret2_nrw(ptr %r0, ptr %r1, ptr %w0)
+  %call7 = call ptr @external_sink_ret2_nrw(ptr %r1, ptr %r0, ptr %w0)
+  %call8 = call ptr @internal_ret0_nw(ptr %r1, ptr %w0)
   br label %return
 
 return:                                           ; preds = %if.end, %if.then
-  %retval.0 = phi i32* [ %call8, %if.end ], [ %r1, %if.then ]
-  ret i32* %retval.0
+  %retval.0 = phi ptr [ %call8, %if.end ], [ %r1, %if.then ]
+  ret ptr %retval.0
 }
 
-define i32* @external_sink_ret2_nrw(i32* %n0, i32* %r0, i32* %w0) {
+define ptr @external_sink_ret2_nrw(ptr %n0, ptr %r0, ptr %w0) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: readwrite)
 ; CHECK-LABEL: define {{[^@]+}}@external_sink_ret2_nrw
-; CHECK-SAME: (i32* nofree [[N0:%.*]], i32* nocapture nofree readonly [[R0:%.*]], i32* nofree returned writeonly "no-capture-maybe-returned" [[W0:%.*]]) #[[ATTR1:[0-9]+]] {
+; CHECK-SAME: (ptr nofree [[N0:%.*]], ptr nocapture nofree readonly [[R0:%.*]], ptr nofree returned writeonly "no-capture-maybe-returned" [[W0:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp ne i32* [[N0]], null
+; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp ne ptr [[N0]], null
 ; CHECK-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; CHECK:       if.then:
 ; CHECK-NEXT:    br label [[RETURN:%.*]]
 ; CHECK:       if.end:
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[R0]], align 4
-; CHECK-NEXT:    store i32 [[TMP0]], i32* [[W0]], align 4
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[R0]], align 4
+; CHECK-NEXT:    store i32 [[TMP0]], ptr [[W0]], align 4
 ; CHECK-NEXT:    br label [[RETURN]]
 ; CHECK:       return:
-; CHECK-NEXT:    ret i32* [[W0]]
+; CHECK-NEXT:    ret ptr [[W0]]
 ;
 entry:
-  %tobool = icmp ne i32* %n0, null
+  %tobool = icmp ne ptr %n0, null
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
   br label %return
 
 if.end:                                           ; preds = %entry
-  %0 = load i32, i32* %r0, align 4
-  store i32 %0, i32* %w0, align 4
+  %0 = load i32, ptr %r0, align 4
+  store i32 %0, ptr %w0, align 4
   br label %return
 
 return:                                           ; preds = %if.end, %if.then
-  ret i32* %w0
+  ret ptr %w0
 }
 
-define internal i32* @internal_ret1_rw(i32* %r0, i32* %w0) {
+define internal ptr @internal_ret1_rw(ptr %r0, ptr %w0) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@internal_ret1_rw
-; TUNIT-SAME: (i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0:%.*]], i32* nofree [[W0:%.*]]) #[[ATTR0]] {
+; TUNIT-SAME: (ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0:%.*]], ptr nofree [[W0:%.*]]) #[[ATTR0]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, i32* [[R0]], align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr [[R0]], align 4
 ; TUNIT-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0
 ; TUNIT-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; TUNIT:       if.then:
 ; TUNIT-NEXT:    br label [[RETURN:%.*]]
 ; TUNIT:       if.end:
-; TUNIT-NEXT:    [[CALL:%.*]] = call i32* @internal_ret1_rrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* [[R0]], align 4
-; TUNIT-NEXT:    store i32 [[TMP1]], i32* [[W0]], align 4
-; TUNIT-NEXT:    [[CALL1:%.*]] = call i32* @internal_ret0_nw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL2:%.*]] = call i32* @internal_ret0_nw(i32* nofree nonnull align 4 dereferenceable(4) [[W0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL3:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], i32* nofree nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    [[CALL4:%.*]] = call i32* @external_ret2_nrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL:%.*]] = call ptr @internal_ret1_rrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr [[R0]], align 4
+; TUNIT-NEXT:    store i32 [[TMP1]], ptr [[W0]], align 4
+; TUNIT-NEXT:    [[CALL1:%.*]] = call ptr @internal_ret0_nw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL2:%.*]] = call ptr @internal_ret0_nw(ptr nofree nonnull align 4 dereferenceable(4) [[W0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL3:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], ptr nofree nonnull writeonly align 4 dereferenceable(4) "no-capture-maybe-returned" [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    [[CALL4:%.*]] = call ptr @external_ret2_nrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR3]]
 ; TUNIT-NEXT:    br label [[RETURN]]
 ; TUNIT:       return:
-; TUNIT-NEXT:    [[RETVAL_0:%.*]] = phi i32* [ [[CALL4]], [[IF_END]] ], [ [[W0]], [[IF_THEN]] ]
-; TUNIT-NEXT:    ret i32* [[RETVAL_0]]
+; TUNIT-NEXT:    [[RETVAL_0:%.*]] = phi ptr [ [[CALL4]], [[IF_END]] ], [ [[W0]], [[IF_THEN]] ]
+; TUNIT-NEXT:    ret ptr [[RETVAL_0]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@internal_ret1_rw
-; CGSCC-SAME: (i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0:%.*]], i32* nofree [[W0:%.*]]) #[[ATTR0]] {
+; CGSCC-SAME: (ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0:%.*]], ptr nofree [[W0:%.*]]) #[[ATTR0]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, i32* [[R0]], align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr [[R0]], align 4
 ; CGSCC-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0
 ; CGSCC-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; CGSCC:       if.then:
 ; CGSCC-NEXT:    br label [[RETURN:%.*]]
 ; CGSCC:       if.end:
-; CGSCC-NEXT:    [[CALL:%.*]] = call i32* @internal_ret1_rrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, i32* [[R0]], align 4
-; CGSCC-NEXT:    store i32 [[TMP1]], i32* [[W0]], align 4
-; CGSCC-NEXT:    [[CALL1:%.*]] = call i32* @internal_ret0_nw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[CALL2:%.*]] = call i32* @internal_ret0_nw(i32* nofree nonnull align 4 dereferenceable(4) [[W0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
-; CGSCC-NEXT:    [[CALL3:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], i32* nofree nonnull writeonly align 4 dereferenceable(4) [[W0]]) #[[ATTR4]]
-; CGSCC-NEXT:    [[CALL4:%.*]] = call i32* @external_ret2_nrw(i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree noundef nonnull align 4 dereferenceable(4) [[R0]], i32* nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL:%.*]] = call ptr @internal_ret1_rrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr [[R0]], align 4
+; CGSCC-NEXT:    store i32 [[TMP1]], ptr [[W0]], align 4
+; CGSCC-NEXT:    [[CALL1:%.*]] = call ptr @internal_ret0_nw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL2:%.*]] = call ptr @internal_ret0_nw(ptr nofree nonnull align 4 dereferenceable(4) [[W0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
+; CGSCC-NEXT:    [[CALL3:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[R0]], ptr nofree nonnull writeonly align 4 dereferenceable(4) [[W0]]) #[[ATTR4]]
+; CGSCC-NEXT:    [[CALL4:%.*]] = call ptr @external_ret2_nrw(ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree noundef nonnull align 4 dereferenceable(4) [[R0]], ptr nofree nonnull align 4 dereferenceable(4) [[W0]]) #[[ATTR2]]
 ; CGSCC-NEXT:    br label [[RETURN]]
 ; CGSCC:       return:
-; CGSCC-NEXT:    [[RETVAL_0:%.*]] = phi i32* [ [[CALL4]], [[IF_END]] ], [ [[W0]], [[IF_THEN]] ]
-; CGSCC-NEXT:    ret i32* [[RETVAL_0]]
+; CGSCC-NEXT:    [[RETVAL_0:%.*]] = phi ptr [ [[CALL4]], [[IF_END]] ], [ [[W0]], [[IF_THEN]] ]
+; CGSCC-NEXT:    ret ptr [[RETVAL_0]]
 ;
 entry:
-  %0 = load i32, i32* %r0, align 4
+  %0 = load i32, ptr %r0, align 4
   %tobool = icmp ne i32 %0, 0
   br i1 %tobool, label %if.end, label %if.then
 
@@ -310,41 +310,41 @@ if.then:                                          ; preds = %entry
   br label %return
 
 if.end:                                           ; preds = %entry
-  %call = call i32* @internal_ret1_rrw(i32* %r0, i32* %r0, i32* %w0)
-  %1 = load i32, i32* %r0, align 4
-  store i32 %1, i32* %w0, align 4
-  %call1 = call i32* @internal_ret0_nw(i32* %r0, i32* %w0)
-  %call2 = call i32* @internal_ret0_nw(i32* %w0, i32* %w0)
-  %call3 = call i32* @external_sink_ret2_nrw(i32* %r0, i32* %r0, i32* %w0)
-  %call4 = call i32* @external_ret2_nrw(i32* %r0, i32* %r0, i32* %w0)
+  %call = call ptr @internal_ret1_rrw(ptr %r0, ptr %r0, ptr %w0)
+  %1 = load i32, ptr %r0, align 4
+  store i32 %1, ptr %w0, align 4
+  %call1 = call ptr @internal_ret0_nw(ptr %r0, ptr %w0)
+  %call2 = call ptr @internal_ret0_nw(ptr %w0, ptr %w0)
+  %call3 = call ptr @external_sink_ret2_nrw(ptr %r0, ptr %r0, ptr %w0)
+  %call4 = call ptr @external_ret2_nrw(ptr %r0, ptr %r0, ptr %w0)
   br label %return
 
 return:                                           ; preds = %if.end, %if.then
-  %retval.0 = phi i32* [ %call4, %if.end ], [ %w0, %if.then ]
-  ret i32* %retval.0
+  %retval.0 = phi ptr [ %call4, %if.end ], [ %w0, %if.then ]
+  ret ptr %retval.0
 }
 
-define i32* @external_source_ret2_nrw(i32* %n0, i32* %r0, i32* %w0) {
+define ptr @external_source_ret2_nrw(ptr %n0, ptr %r0, ptr %w0) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@external_source_ret2_nrw
-; TUNIT-SAME: (i32* nofree [[N0:%.*]], i32* nofree [[R0:%.*]], i32* nofree returned [[W0:%.*]]) #[[ATTR2:[0-9]+]] {
+; TUNIT-SAME: (ptr nofree [[N0:%.*]], ptr nofree [[R0:%.*]], ptr nofree returned [[W0:%.*]]) #[[ATTR2:[0-9]+]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[CALL:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree [[N0]], i32* nocapture nofree readonly [[R0]], i32* nofree writeonly "no-capture-maybe-returned" [[W0]]) #[[ATTR4:[0-9]+]]
-; TUNIT-NEXT:    [[CALL1:%.*]] = call i32* @external_ret2_nrw(i32* nofree [[N0]], i32* nofree [[R0]], i32* nofree [[W0]]) #[[ATTR3]]
-; TUNIT-NEXT:    ret i32* [[W0]]
+; TUNIT-NEXT:    [[CALL:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree [[N0]], ptr nocapture nofree readonly [[R0]], ptr nofree writeonly "no-capture-maybe-returned" [[W0]]) #[[ATTR4:[0-9]+]]
+; TUNIT-NEXT:    [[CALL1:%.*]] = call ptr @external_ret2_nrw(ptr nofree [[N0]], ptr nofree [[R0]], ptr nofree [[W0]]) #[[ATTR3]]
+; TUNIT-NEXT:    ret ptr [[W0]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@external_source_ret2_nrw
-; CGSCC-SAME: (i32* nofree [[N0:%.*]], i32* nofree [[R0:%.*]], i32* nofree [[W0:%.*]]) #[[ATTR0]] {
+; CGSCC-SAME: (ptr nofree [[N0:%.*]], ptr nofree [[R0:%.*]], ptr nofree [[W0:%.*]]) #[[ATTR0]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[CALL:%.*]] = call i32* @external_sink_ret2_nrw(i32* nofree [[N0]], i32* nocapture nofree readonly [[R0]], i32* nofree writeonly [[W0]]) #[[ATTR5:[0-9]+]]
-; CGSCC-NEXT:    [[CALL1:%.*]] = call i32* @external_ret2_nrw(i32* nofree [[N0]], i32* nofree [[R0]], i32* nofree [[W0]]) #[[ATTR3]]
-; CGSCC-NEXT:    ret i32* [[CALL1]]
+; CGSCC-NEXT:    [[CALL:%.*]] = call ptr @external_sink_ret2_nrw(ptr nofree [[N0]], ptr nocapture nofree readonly [[R0]], ptr nofree writeonly [[W0]]) #[[ATTR5:[0-9]+]]
+; CGSCC-NEXT:    [[CALL1:%.*]] = call ptr @external_ret2_nrw(ptr nofree [[N0]], ptr nofree [[R0]], ptr nofree [[W0]]) #[[ATTR3]]
+; CGSCC-NEXT:    ret ptr [[CALL1]]
 ;
 entry:
-  %call = call i32* @external_sink_ret2_nrw(i32* %n0, i32* %r0, i32* %w0)
-  %call1 = call i32* @external_ret2_nrw(i32* %n0, i32* %r0, i32* %w0)
-  ret i32* %call1
+  %call = call ptr @external_sink_ret2_nrw(ptr %n0, ptr %r0, ptr %w0)
+  %call1 = call ptr @external_ret2_nrw(ptr %n0, ptr %r0, ptr %w0)
+  ret ptr %call1
 }
 
 ; Verify that we see only expected attribute sets, the above lines only check

diff  --git a/llvm/test/Transforms/Attributor/readattrs.ll b/llvm/test/Transforms/Attributor/readattrs.ll
index d3936a18a3983..e9f8a75617467 100644
--- a/llvm/test/Transforms/Attributor/readattrs.ll
+++ b/llvm/test/Transforms/Attributor/readattrs.ll
@@ -5,7 +5,7 @@
 
 @x = global i32 0
 
-declare void @test1_1(i8* %x1_1, i8* readonly %y1_1, ...)
+declare void @test1_1(ptr %x1_1, ptr readonly %y1_1, ...)
 
 ; NOTE: readonly for %y1_2 would be OK here but not for the similar situation in test13.
 ;
@@ -13,398 +13,380 @@ declare void @test1_1(i8* %x1_1, i8* readonly %y1_1, ...)
 ; CHECK: @[[X:[a-zA-Z0-9_$"\\.-]+]] = global i32 0
 ; CHECK: @[[CONSTANT_MEM:[a-zA-Z0-9_$"\\.-]+]] = external dso_local constant i32, align 4
 ;.
-define void @test1_2(i8* %x1_2, i8* %y1_2, i8* %z1_2) {
+define void @test1_2(ptr %x1_2, ptr %y1_2, ptr %z1_2) {
 ; CHECK-LABEL: define {{[^@]+}}@test1_2
-; CHECK-SAME: (i8* [[X1_2:%.*]], i8* [[Y1_2:%.*]], i8* [[Z1_2:%.*]]) {
-; CHECK-NEXT:    call void (i8*, i8*, ...) @test1_1(i8* [[X1_2]], i8* readonly [[Y1_2]], i8* [[Z1_2]])
-; CHECK-NEXT:    store i32 0, i32* @x, align 4
+; CHECK-SAME: (ptr [[X1_2:%.*]], ptr [[Y1_2:%.*]], ptr [[Z1_2:%.*]]) {
+; CHECK-NEXT:    call void (ptr, ptr, ...) @test1_1(ptr [[X1_2]], ptr readonly [[Y1_2]], ptr [[Z1_2]])
+; CHECK-NEXT:    store i32 0, ptr @x, align 4
 ; CHECK-NEXT:    ret void
 ;
-  call void (i8*, i8*, ...) @test1_1(i8* %x1_2, i8* %y1_2, i8* %z1_2)
-  store i32 0, i32* @x
+  call void (ptr, ptr, ...) @test1_1(ptr %x1_2, ptr %y1_2, ptr %z1_2)
+  store i32 0, ptr @x
   ret void
 }
 
-define i8* @test2(i8* %p) {
+define ptr @test2(ptr %p) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; CHECK-LABEL: define {{[^@]+}}@test2
-; CHECK-SAME: (i8* nofree readnone returned "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR0:[0-9]+]] {
-; CHECK-NEXT:    store i32 0, i32* @x, align 4
-; CHECK-NEXT:    ret i8* [[P]]
+; CHECK-SAME: (ptr nofree readnone returned "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT:    store i32 0, ptr @x, align 4
+; CHECK-NEXT:    ret ptr [[P]]
 ;
-  store i32 0, i32* @x
-  ret i8* %p
+  store i32 0, ptr @x
+  ret ptr %p
 }
 
-define i1 @test3(i8* %p, i8* %q) {
+define i1 @test3(ptr %p, ptr %q) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@test3
-; CHECK-SAME: (i8* nofree readnone [[P:%.*]], i8* nofree readnone [[Q:%.*]]) #[[ATTR1:[0-9]+]] {
-; CHECK-NEXT:    [[A:%.*]] = icmp ult i8* [[P]], [[Q]]
+; CHECK-SAME: (ptr nofree readnone [[P:%.*]], ptr nofree readnone [[Q:%.*]]) #[[ATTR1:[0-9]+]] {
+; CHECK-NEXT:    [[A:%.*]] = icmp ult ptr [[P]], [[Q]]
 ; CHECK-NEXT:    ret i1 [[A]]
 ;
-  %A = icmp ult i8* %p, %q
+  %A = icmp ult ptr %p, %q
   ret i1 %A
 }
 
-declare void @test4_1(i8* nocapture) readonly
+declare void @test4_1(ptr nocapture) readonly
 
-define void @test4_2(i8* %p) {
+define void @test4_2(ptr %p) {
 ; CHECK: Function Attrs: memory(read)
 ; CHECK-LABEL: define {{[^@]+}}@test4_2
-; CHECK-SAME: (i8* nocapture readonly [[P:%.*]]) #[[ATTR2:[0-9]+]] {
-; CHECK-NEXT:    call void @test4_1(i8* nocapture readonly [[P]])
+; CHECK-SAME: (ptr nocapture readonly [[P:%.*]]) #[[ATTR2:[0-9]+]] {
+; CHECK-NEXT:    call void @test4_1(ptr nocapture readonly [[P]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @test4_1(i8* %p)
+  call void @test4_1(ptr %p)
   ret void
 }
 
 ; Missed optz'n: we could make %q readnone, but don't break test6!
-define void @test5(i8** %p, i8* %q) {
+define void @test5(ptr %p, ptr %q) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CHECK-LABEL: define {{[^@]+}}@test5
-; CHECK-SAME: (i8** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[P:%.*]], i8* nofree writeonly [[Q:%.*]]) #[[ATTR3:[0-9]+]] {
-; CHECK-NEXT:    store i8* [[Q]], i8** [[P]], align 8
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[P:%.*]], ptr nofree writeonly [[Q:%.*]]) #[[ATTR3:[0-9]+]] {
+; CHECK-NEXT:    store ptr [[Q]], ptr [[P]], align 8
 ; CHECK-NEXT:    ret void
 ;
-  store i8* %q, i8** %p
+  store ptr %q, ptr %p
   ret void
 }
 
 declare void @test6_1()
 ; This is not a missed optz'n.
-define void @test6_2(i8** %p, i8* %q) {
+define void @test6_2(ptr %p, ptr %q) {
 ; CHECK-LABEL: define {{[^@]+}}@test6_2
-; CHECK-SAME: (i8** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[P:%.*]], i8* nofree [[Q:%.*]]) {
-; CHECK-NEXT:    store i8* [[Q]], i8** [[P]], align 8
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[P:%.*]], ptr nofree [[Q:%.*]]) {
+; CHECK-NEXT:    store ptr [[Q]], ptr [[P]], align 8
 ; CHECK-NEXT:    call void @test6_1()
 ; CHECK-NEXT:    ret void
 ;
-  store i8* %q, i8** %p
+  store ptr %q, ptr %p
   call void @test6_1()
   ret void
 }
 
 ; inalloca parameters are always considered written
-define void @test7_1(i32* inalloca(i32) %a) {
+define void @test7_1(ptr inalloca(i32) %a) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@test7_1
-; CHECK-SAME: (i32* nocapture nofree nonnull writeonly inalloca(i32) dereferenceable(4) [[A:%.*]]) #[[ATTR1]] {
+; CHECK-SAME: (ptr nocapture nofree nonnull writeonly inalloca(i32) dereferenceable(4) [[A:%.*]]) #[[ATTR1]] {
 ; CHECK-NEXT:    ret void
 ;
   ret void
 }
 
-define i32* @test8_1(i32* %p) {
+define ptr @test8_1(ptr %p) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@test8_1
-; CHECK-SAME: (i32* nofree readnone returned "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR1]] {
+; CHECK-SAME: (ptr nofree readnone returned "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR1]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    ret i32* [[P]]
+; CHECK-NEXT:    ret ptr [[P]]
 ;
 entry:
-  ret i32* %p
+  ret ptr %p
 }
 
-define void @test8_2(i32* %p) {
+define void @test8_2(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@test8_2
-; TUNIT-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR3]] {
+; TUNIT-SAME: (ptr nocapture nofree writeonly [[P:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    store i32 10, i32* [[P]], align 4
+; TUNIT-NEXT:    store i32 10, ptr [[P]], align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@test8_2
-; CGSCC-SAME: (i32* nofree writeonly [[P:%.*]]) #[[ATTR4:[0-9]+]] {
+; CGSCC-SAME: (ptr nofree writeonly [[P:%.*]]) #[[ATTR4:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[CALL:%.*]] = call align 4 i32* @test8_1(i32* noalias nofree readnone [[P]]) #[[ATTR13:[0-9]+]]
-; CGSCC-NEXT:    store i32 10, i32* [[CALL]], align 4
+; CGSCC-NEXT:    [[CALL:%.*]] = call align 4 ptr @test8_1(ptr noalias nofree readnone [[P]]) #[[ATTR13:[0-9]+]]
+; CGSCC-NEXT:    store i32 10, ptr [[CALL]], align 4
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %call = call i32* @test8_1(i32* %p)
-  store i32 10, i32* %call, align 4
+  %call = call ptr @test8_1(ptr %p)
+  store i32 10, ptr %call, align 4
   ret void
 }
 
 ; CHECK: declare void @llvm.masked.scatter
-declare void @llvm.masked.scatter.v4i32.v4p0i32(<4 x i32>%val, <4 x i32*>, i32, <4 x i1>)
+declare void @llvm.masked.scatter.v4i32.v4p0(<4 x i32>%val, <4 x ptr>, i32, <4 x i1>)
 
 ; CHECK-NOT: readnone
 ; CHECK-NOT: readonly
-define void @test9(<4 x i32*> %ptrs, <4 x i32>%val) {
+define void @test9(<4 x ptr> %ptrs, <4 x i32>%val) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@test9
-; TUNIT-SAME: (<4 x i32*> [[PTRS:%.*]], <4 x i32> [[VAL:%.*]]) #[[ATTR0]] {
-; TUNIT-NEXT:    call void @llvm.masked.scatter.v4i32.v4p0i32(<4 x i32> [[VAL]], <4 x i32*> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>) #[[ATTR12:[0-9]+]]
+; TUNIT-SAME: (<4 x ptr> [[PTRS:%.*]], <4 x i32> [[VAL:%.*]]) #[[ATTR0]] {
+; TUNIT-NEXT:    call void @llvm.masked.scatter.v4i32.v4p0(<4 x i32> [[VAL]], <4 x ptr> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>) #[[ATTR12:[0-9]+]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@test9
-; CGSCC-SAME: (<4 x i32*> [[PTRS:%.*]], <4 x i32> [[VAL:%.*]]) #[[ATTR0]] {
-; CGSCC-NEXT:    call void @llvm.masked.scatter.v4i32.v4p0i32(<4 x i32> [[VAL]], <4 x i32*> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>) #[[ATTR13]]
+; CGSCC-SAME: (<4 x ptr> [[PTRS:%.*]], <4 x i32> [[VAL:%.*]]) #[[ATTR0]] {
+; CGSCC-NEXT:    call void @llvm.masked.scatter.v4i32.v4p0(<4 x i32> [[VAL]], <4 x ptr> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>) #[[ATTR13]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @llvm.masked.scatter.v4i32.v4p0i32(<4 x i32>%val, <4 x i32*> %ptrs, i32 4, <4 x i1><i1 true, i1 false, i1 true, i1 false>)
+  call void @llvm.masked.scatter.v4i32.v4p0(<4 x i32>%val, <4 x ptr> %ptrs, i32 4, <4 x i1><i1 true, i1 false, i1 true, i1 false>)
   ret void
 }
 
 ; CHECK: declare <4 x i32> @llvm.masked.gather
-declare <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*>, i32, <4 x i1>, <4 x i32>)
-define <4 x i32> @test10(<4 x i32*> %ptrs) {
+declare <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr>, i32, <4 x i1>, <4 x i32>)
+define <4 x i32> @test10(<4 x ptr> %ptrs) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(read)
 ; TUNIT-LABEL: define {{[^@]+}}@test10
-; TUNIT-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR6:[0-9]+]] {
-; TUNIT-NEXT:    [[RES:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>, <4 x i32> undef) #[[ATTR12]]
+; TUNIT-SAME: (<4 x ptr> [[PTRS:%.*]]) #[[ATTR6:[0-9]+]] {
+; TUNIT-NEXT:    [[RES:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>, <4 x i32> undef) #[[ATTR12]]
 ; TUNIT-NEXT:    ret <4 x i32> [[RES]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(read)
 ; CGSCC-LABEL: define {{[^@]+}}@test10
-; CGSCC-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR7:[0-9]+]] {
-; CGSCC-NEXT:    [[RES:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>, <4 x i32> undef) #[[ATTR13]]
+; CGSCC-SAME: (<4 x ptr> [[PTRS:%.*]]) #[[ATTR7:[0-9]+]] {
+; CGSCC-NEXT:    [[RES:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>, <4 x i32> undef) #[[ATTR13]]
 ; CGSCC-NEXT:    ret <4 x i32> [[RES]]
 ;
-  %res = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> %ptrs, i32 4, <4 x i1><i1 true, i1 false, i1 true, i1 false>, <4 x i32>undef)
+  %res = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1><i1 true, i1 false, i1 true, i1 false>, <4 x i32>undef)
   ret <4 x i32> %res
 }
 
 ; CHECK: declare <4 x i32> @test11_1
-declare <4 x i32> @test11_1(<4 x i32*>) argmemonly nounwind readonly
-define <4 x i32> @test11_2(<4 x i32*> %ptrs) {
+declare <4 x i32> @test11_1(<4 x ptr>) argmemonly nounwind readonly
+define <4 x i32> @test11_2(<4 x ptr> %ptrs) {
 ; TUNIT: Function Attrs: nounwind memory(argmem: read)
 ; TUNIT-LABEL: define {{[^@]+}}@test11_2
-; TUNIT-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR7:[0-9]+]] {
-; TUNIT-NEXT:    [[RES:%.*]] = call <4 x i32> @test11_1(<4 x i32*> [[PTRS]]) #[[ATTR13:[0-9]+]]
+; TUNIT-SAME: (<4 x ptr> [[PTRS:%.*]]) #[[ATTR7:[0-9]+]] {
+; TUNIT-NEXT:    [[RES:%.*]] = call <4 x i32> @test11_1(<4 x ptr> [[PTRS]]) #[[ATTR13:[0-9]+]]
 ; TUNIT-NEXT:    ret <4 x i32> [[RES]]
 ;
 ; CGSCC: Function Attrs: nounwind memory(argmem: read)
 ; CGSCC-LABEL: define {{[^@]+}}@test11_2
-; CGSCC-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR8:[0-9]+]] {
-; CGSCC-NEXT:    [[RES:%.*]] = call <4 x i32> @test11_1(<4 x i32*> [[PTRS]]) #[[ATTR14:[0-9]+]]
+; CGSCC-SAME: (<4 x ptr> [[PTRS:%.*]]) #[[ATTR8:[0-9]+]] {
+; CGSCC-NEXT:    [[RES:%.*]] = call <4 x i32> @test11_1(<4 x ptr> [[PTRS]]) #[[ATTR14:[0-9]+]]
 ; CGSCC-NEXT:    ret <4 x i32> [[RES]]
 ;
-  %res = call <4 x i32> @test11_1(<4 x i32*> %ptrs)
+  %res = call <4 x i32> @test11_1(<4 x ptr> %ptrs)
   ret <4 x i32> %res
 }
 
-declare <4 x i32> @test12_1(<4 x i32*>) argmemonly nounwind
+declare <4 x i32> @test12_1(<4 x ptr>) argmemonly nounwind
 ; CHECK-NOT: readnone
-define <4 x i32> @test12_2(<4 x i32*> %ptrs) {
+define <4 x i32> @test12_2(<4 x ptr> %ptrs) {
 ; TUNIT: Function Attrs: nounwind memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@test12_2
-; TUNIT-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR8:[0-9]+]] {
-; TUNIT-NEXT:    [[RES:%.*]] = call <4 x i32> @test12_1(<4 x i32*> [[PTRS]]) #[[ATTR13]]
+; TUNIT-SAME: (<4 x ptr> [[PTRS:%.*]]) #[[ATTR8:[0-9]+]] {
+; TUNIT-NEXT:    [[RES:%.*]] = call <4 x i32> @test12_1(<4 x ptr> [[PTRS]]) #[[ATTR13]]
 ; TUNIT-NEXT:    ret <4 x i32> [[RES]]
 ;
 ; CGSCC: Function Attrs: nounwind memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@test12_2
-; CGSCC-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR9:[0-9]+]] {
-; CGSCC-NEXT:    [[RES:%.*]] = call <4 x i32> @test12_1(<4 x i32*> [[PTRS]]) #[[ATTR14]]
+; CGSCC-SAME: (<4 x ptr> [[PTRS:%.*]]) #[[ATTR9:[0-9]+]] {
+; CGSCC-NEXT:    [[RES:%.*]] = call <4 x i32> @test12_1(<4 x ptr> [[PTRS]]) #[[ATTR14]]
 ; CGSCC-NEXT:    ret <4 x i32> [[RES]]
 ;
-  %res = call <4 x i32> @test12_1(<4 x i32*> %ptrs)
+  %res = call <4 x i32> @test12_1(<4 x ptr> %ptrs)
   ret <4 x i32> %res
 }
 
-define i32 @volatile_load(i32* %p) {
+define i32 @volatile_load(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nounwind willreturn memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@volatile_load
-; TUNIT-SAME: (i32* nofree noundef align 4 [[P:%.*]]) #[[ATTR9:[0-9]+]] {
-; TUNIT-NEXT:    [[LOAD:%.*]] = load volatile i32, i32* [[P]], align 4
+; TUNIT-SAME: (ptr nofree noundef align 4 [[P:%.*]]) #[[ATTR9:[0-9]+]] {
+; TUNIT-NEXT:    [[LOAD:%.*]] = load volatile i32, ptr [[P]], align 4
 ; TUNIT-NEXT:    ret i32 [[LOAD]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nounwind willreturn memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@volatile_load
-; CGSCC-SAME: (i32* nofree noundef align 4 [[P:%.*]]) #[[ATTR10:[0-9]+]] {
-; CGSCC-NEXT:    [[LOAD:%.*]] = load volatile i32, i32* [[P]], align 4
+; CGSCC-SAME: (ptr nofree noundef align 4 [[P:%.*]]) #[[ATTR10:[0-9]+]] {
+; CGSCC-NEXT:    [[LOAD:%.*]] = load volatile i32, ptr [[P]], align 4
 ; CGSCC-NEXT:    ret i32 [[LOAD]]
 ;
-  %load = load volatile i32, i32* %p
+  %load = load volatile i32, ptr %p
   ret i32 %load
 }
 
-declare void @escape_readnone_ptr(i8** %addr, i8* readnone %ptr)
-declare void @escape_readonly_ptr(i8** %addr, i8* readonly %ptr)
+declare void @escape_readnone_ptr(ptr %addr, ptr readnone %ptr)
+declare void @escape_readonly_ptr(ptr %addr, ptr readonly %ptr)
 
 ; The argument pointer %escaped_then_written cannot be marked readnone/only even
 ; though the only direct use, in @escape_readnone_ptr/@escape_readonly_ptr,
 ; is marked as readnone/only. However, the functions can write the pointer into
 ; %addr, causing the store to write to %escaped_then_written.
 ;
-define void @unsound_readnone(i8* %ignored, i8* %escaped_then_written) {
+define void @unsound_readnone(ptr %ignored, ptr %escaped_then_written) {
 ; CHECK-LABEL: define {{[^@]+}}@unsound_readnone
-; CHECK-SAME: (i8* nocapture nofree readnone [[IGNORED:%.*]], i8* [[ESCAPED_THEN_WRITTEN:%.*]]) {
-; CHECK-NEXT:    [[ADDR:%.*]] = alloca i8*, align 8
-; CHECK-NEXT:    call void @escape_readnone_ptr(i8** noundef nonnull align 8 dereferenceable(8) [[ADDR]], i8* noalias readnone [[ESCAPED_THEN_WRITTEN]])
-; CHECK-NEXT:    [[ADDR_LD:%.*]] = load i8*, i8** [[ADDR]], align 8
-; CHECK-NEXT:    store i8 0, i8* [[ADDR_LD]], align 1
+; CHECK-SAME: (ptr nocapture nofree readnone [[IGNORED:%.*]], ptr [[ESCAPED_THEN_WRITTEN:%.*]]) {
+; CHECK-NEXT:    [[ADDR:%.*]] = alloca ptr, align 8
+; CHECK-NEXT:    call void @escape_readnone_ptr(ptr noundef nonnull align 8 dereferenceable(8) [[ADDR]], ptr noalias readnone [[ESCAPED_THEN_WRITTEN]])
+; CHECK-NEXT:    [[ADDR_LD:%.*]] = load ptr, ptr [[ADDR]], align 8
+; CHECK-NEXT:    store i8 0, ptr [[ADDR_LD]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  %addr = alloca i8*
-  call void @escape_readnone_ptr(i8** %addr, i8* %escaped_then_written)
-  %addr.ld = load i8*, i8** %addr
-  store i8 0, i8* %addr.ld
+  %addr = alloca ptr
+  call void @escape_readnone_ptr(ptr %addr, ptr %escaped_then_written)
+  %addr.ld = load ptr, ptr %addr
+  store i8 0, ptr %addr.ld
   ret void
 }
 
-define void @unsound_readonly(i8* %ignored, i8* %escaped_then_written) {
+define void @unsound_readonly(ptr %ignored, ptr %escaped_then_written) {
 ; CHECK-LABEL: define {{[^@]+}}@unsound_readonly
-; CHECK-SAME: (i8* nocapture nofree readnone [[IGNORED:%.*]], i8* [[ESCAPED_THEN_WRITTEN:%.*]]) {
-; CHECK-NEXT:    [[ADDR:%.*]] = alloca i8*, align 8
-; CHECK-NEXT:    call void @escape_readonly_ptr(i8** noundef nonnull align 8 dereferenceable(8) [[ADDR]], i8* readonly [[ESCAPED_THEN_WRITTEN]])
-; CHECK-NEXT:    [[ADDR_LD:%.*]] = load i8*, i8** [[ADDR]], align 8
-; CHECK-NEXT:    store i8 0, i8* [[ADDR_LD]], align 1
+; CHECK-SAME: (ptr nocapture nofree readnone [[IGNORED:%.*]], ptr [[ESCAPED_THEN_WRITTEN:%.*]]) {
+; CHECK-NEXT:    [[ADDR:%.*]] = alloca ptr, align 8
+; CHECK-NEXT:    call void @escape_readonly_ptr(ptr noundef nonnull align 8 dereferenceable(8) [[ADDR]], ptr readonly [[ESCAPED_THEN_WRITTEN]])
+; CHECK-NEXT:    [[ADDR_LD:%.*]] = load ptr, ptr [[ADDR]], align 8
+; CHECK-NEXT:    store i8 0, ptr [[ADDR_LD]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  %addr = alloca i8*
-  call void @escape_readonly_ptr(i8** %addr, i8* %escaped_then_written)
-  %addr.ld = load i8*, i8** %addr
-  store i8 0, i8* %addr.ld
+  %addr = alloca ptr
+  call void @escape_readonly_ptr(ptr %addr, ptr %escaped_then_written)
+  %addr.ld = load ptr, ptr %addr
+  store i8 0, ptr %addr.ld
   ret void
 }
 
 ; Byval but not readonly/none tests
 ;
 ;{
-declare void @escape_i8(i8* %ptr)
+declare void @escape_i8(ptr %ptr)
 
-define void @byval_not_readonly_1(i8* byval(i8) %written) readonly {
+define void @byval_not_readonly_1(ptr byval(i8) %written) readonly {
 ; CHECK: Function Attrs: memory(read)
 ; CHECK-LABEL: define {{[^@]+}}@byval_not_readonly_1
-; CHECK-SAME: (i8* noalias nonnull byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR2]] {
-; CHECK-NEXT:    call void @escape_i8(i8* nonnull dereferenceable(1) [[WRITTEN]])
+; CHECK-SAME: (ptr noalias nonnull byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR2]] {
+; CHECK-NEXT:    call void @escape_i8(ptr nonnull dereferenceable(1) [[WRITTEN]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @escape_i8(i8* %written)
+  call void @escape_i8(ptr %written)
   ret void
 }
 
-define void @byval_not_readonly_2(i8* byval(i8) %written) readonly {
+define void @byval_not_readonly_2(ptr byval(i8) %written) readonly {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@byval_not_readonly_2
-; CHECK-SAME: (i8* noalias nocapture nofree noundef nonnull writeonly byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR1]] {
-; CHECK-NEXT:    store i8 0, i8* [[WRITTEN]], align 1
+; CHECK-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT:    store i8 0, ptr [[WRITTEN]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  store i8 0, i8* %written
+  store i8 0, ptr %written
   ret void
 }
 
-define void @byval_not_readnone_1(i8* byval(i8) %written) readnone {
+define void @byval_not_readnone_1(ptr byval(i8) %written) readnone {
 ; TUNIT: Function Attrs: memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@byval_not_readnone_1
-; TUNIT-SAME: (i8* noalias nonnull byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR10:[0-9]+]] {
-; TUNIT-NEXT:    call void @escape_i8(i8* nonnull dereferenceable(1) [[WRITTEN]])
+; TUNIT-SAME: (ptr noalias nonnull byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR10:[0-9]+]] {
+; TUNIT-NEXT:    call void @escape_i8(ptr nonnull dereferenceable(1) [[WRITTEN]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@byval_not_readnone_1
-; CGSCC-SAME: (i8* noalias nonnull byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR11:[0-9]+]] {
-; CGSCC-NEXT:    call void @escape_i8(i8* nonnull dereferenceable(1) [[WRITTEN]])
+; CGSCC-SAME: (ptr noalias nonnull byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR11:[0-9]+]] {
+; CGSCC-NEXT:    call void @escape_i8(ptr nonnull dereferenceable(1) [[WRITTEN]])
 ; CGSCC-NEXT:    ret void
 ;
-  call void @escape_i8(i8* %written)
+  call void @escape_i8(ptr %written)
   ret void
 }
 
-define void @byval_not_readnone_2(i8* byval(i8) %written) readnone {
+define void @byval_not_readnone_2(ptr byval(i8) %written) readnone {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@byval_not_readnone_2
-; CHECK-SAME: (i8* noalias nocapture nofree noundef nonnull writeonly byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR1]] {
-; CHECK-NEXT:    store i8 0, i8* [[WRITTEN]], align 1
+; CHECK-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT:    store i8 0, ptr [[WRITTEN]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  store i8 0, i8* %written
+  store i8 0, ptr %written
   ret void
 }
 
-define void @byval_no_fnarg(i8* byval(i8) %written) {
+define void @byval_no_fnarg(ptr byval(i8) %written) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CHECK-LABEL: define {{[^@]+}}@byval_no_fnarg
-; CHECK-SAME: (i8* noalias nocapture nofree noundef nonnull writeonly byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR3]] {
-; CHECK-NEXT:    store i8 0, i8* [[WRITTEN]], align 1
+; CHECK-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR3]] {
+; CHECK-NEXT:    store i8 0, ptr [[WRITTEN]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  store i8 0, i8* %written
+  store i8 0, ptr %written
   ret void
 }
 
-define void @testbyval(i8* %read_only) {
+define void @testbyval(ptr %read_only) {
 ; TUNIT-LABEL: define {{[^@]+}}@testbyval
-; TUNIT-SAME: (i8* nocapture readonly [[READ_ONLY:%.*]]) {
-; TUNIT-NEXT:    call void @byval_not_readonly_1(i8* nocapture readonly byval(i8) [[READ_ONLY]])
-; TUNIT-NEXT:    call void @byval_not_readnone_1(i8* noalias nocapture readnone byval(i8) [[READ_ONLY]])
-; TUNIT-NEXT:    call void @byval_no_fnarg(i8* nocapture nofree readonly byval(i8) [[READ_ONLY]]) #[[ATTR13]]
+; TUNIT-SAME: (ptr nocapture readonly [[READ_ONLY:%.*]]) {
+; TUNIT-NEXT:    call void @byval_not_readonly_1(ptr nocapture readonly byval(i8) [[READ_ONLY]])
+; TUNIT-NEXT:    call void @byval_not_readnone_1(ptr noalias nocapture readnone byval(i8) [[READ_ONLY]])
+; TUNIT-NEXT:    call void @byval_no_fnarg(ptr nocapture nofree readonly byval(i8) [[READ_ONLY]]) #[[ATTR13]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@testbyval
-; CGSCC-SAME: (i8* nocapture noundef nonnull readonly dereferenceable(1) [[READ_ONLY:%.*]]) {
-; CGSCC-NEXT:    call void @byval_not_readonly_1(i8* noalias nocapture noundef nonnull readonly byval(i8) dereferenceable(1) [[READ_ONLY]])
-; CGSCC-NEXT:    call void @byval_not_readnone_1(i8* noalias nocapture noundef nonnull readnone byval(i8) dereferenceable(1) [[READ_ONLY]])
-; CGSCC-NEXT:    call void @byval_no_fnarg(i8* noalias nocapture nofree noundef nonnull readnone byval(i8) dereferenceable(1) [[READ_ONLY]]) #[[ATTR14]]
+; CGSCC-SAME: (ptr nocapture noundef nonnull readonly dereferenceable(1) [[READ_ONLY:%.*]]) {
+; CGSCC-NEXT:    call void @byval_not_readonly_1(ptr noalias nocapture noundef nonnull readonly byval(i8) dereferenceable(1) [[READ_ONLY]])
+; CGSCC-NEXT:    call void @byval_not_readnone_1(ptr noalias nocapture noundef nonnull readnone byval(i8) dereferenceable(1) [[READ_ONLY]])
+; CGSCC-NEXT:    call void @byval_no_fnarg(ptr noalias nocapture nofree noundef nonnull readnone byval(i8) dereferenceable(1) [[READ_ONLY]]) #[[ATTR14]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @byval_not_readonly_1(i8* byval(i8) %read_only)
-  call void @byval_not_readonly_2(i8* byval(i8) %read_only)
-  call void @byval_not_readnone_1(i8* byval(i8) %read_only)
-  call void @byval_not_readnone_2(i8* byval(i8) %read_only)
-  call void @byval_no_fnarg(i8* byval(i8) %read_only)
+  call void @byval_not_readonly_1(ptr byval(i8) %read_only)
+  call void @byval_not_readonly_2(ptr byval(i8) %read_only)
+  call void @byval_not_readnone_1(ptr byval(i8) %read_only)
+  call void @byval_not_readnone_2(ptr byval(i8) %read_only)
+  call void @byval_no_fnarg(ptr byval(i8) %read_only)
   ret void
 }
 ;}
 
-declare i8* @maybe_returned_ptr(i8* readonly %ptr) readonly nounwind
-declare i8 @maybe_returned_val(i8* %ptr) readonly nounwind
+declare ptr @maybe_returned_ptr(ptr readonly %ptr) readonly nounwind
+declare i8 @maybe_returned_val(ptr %ptr) readonly nounwind
 declare void @val_use(i8 %ptr) readonly nounwind
 
-define void @ptr_uses(i8* %ptr) {
+define void @ptr_uses(ptr %ptr) {
 ; TUNIT: Function Attrs: nounwind memory(read)
 ; TUNIT-LABEL: define {{[^@]+}}@ptr_uses
-; TUNIT-SAME: (i8* nocapture readonly [[PTR:%.*]]) #[[ATTR11:[0-9]+]] {
-; TUNIT-NEXT:    [[CALL_PTR:%.*]] = call i8* @maybe_returned_ptr(i8* readonly [[PTR]]) #[[ATTR13]]
-; TUNIT-NEXT:    [[CALL_VAL:%.*]] = call i8 @maybe_returned_val(i8* readonly [[CALL_PTR]]) #[[ATTR13]]
+; TUNIT-SAME: (ptr nocapture readonly [[PTR:%.*]]) #[[ATTR11:[0-9]+]] {
+; TUNIT-NEXT:    [[CALL_PTR:%.*]] = call ptr @maybe_returned_ptr(ptr readonly [[PTR]]) #[[ATTR13]]
+; TUNIT-NEXT:    [[CALL_VAL:%.*]] = call i8 @maybe_returned_val(ptr readonly [[CALL_PTR]]) #[[ATTR13]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nounwind memory(read)
 ; CGSCC-LABEL: define {{[^@]+}}@ptr_uses
-; CGSCC-SAME: (i8* nocapture readonly [[PTR:%.*]]) #[[ATTR12:[0-9]+]] {
-; CGSCC-NEXT:    [[CALL_PTR:%.*]] = call i8* @maybe_returned_ptr(i8* readonly [[PTR]]) #[[ATTR14]]
-; CGSCC-NEXT:    [[CALL_VAL:%.*]] = call i8 @maybe_returned_val(i8* readonly [[CALL_PTR]]) #[[ATTR14]]
+; CGSCC-SAME: (ptr nocapture readonly [[PTR:%.*]]) #[[ATTR12:[0-9]+]] {
+; CGSCC-NEXT:    [[CALL_PTR:%.*]] = call ptr @maybe_returned_ptr(ptr readonly [[PTR]]) #[[ATTR14]]
+; CGSCC-NEXT:    [[CALL_VAL:%.*]] = call i8 @maybe_returned_val(ptr readonly [[CALL_PTR]]) #[[ATTR14]]
 ; CGSCC-NEXT:    ret void
 ;
-  %call_ptr = call i8* @maybe_returned_ptr(i8* %ptr)
-  %call_val = call i8 @maybe_returned_val(i8* %call_ptr)
+  %call_ptr = call ptr @maybe_returned_ptr(ptr %ptr)
+  %call_val = call i8 @maybe_returned_val(ptr %call_ptr)
   call void @val_use(i8 %call_val)
   ret void
 }
 
-define void @ptr_use_chain(i8* %ptr) {
+define void @ptr_use_chain(ptr %ptr) {
 ; CHECK-LABEL: define {{[^@]+}}@ptr_use_chain
-; CHECK-SAME: (i8* [[PTR:%.*]]) {
-; CHECK-NEXT:    call void @escape_i8(i8* [[PTR]])
+; CHECK-SAME: (ptr [[PTR:%.*]]) {
+; CHECK-NEXT:    call void @escape_i8(ptr [[PTR]])
 ; CHECK-NEXT:    ret void
 ;
-  %bc0 = bitcast i8* %ptr to i32*
-  %bc1 = bitcast i32* %bc0 to i8*
-  %bc2 = bitcast i8* %bc1 to i32*
-  %bc3 = bitcast i32* %bc2 to i8*
-  %bc4 = bitcast i8* %bc3 to i32*
-  %bc5 = bitcast i32* %bc4 to i8*
-  %bc6 = bitcast i8* %bc5 to i32*
-  %bc7 = bitcast i32* %bc6 to i8*
-  %bc8 = bitcast i8* %bc7 to i32*
-  %bc9 = bitcast i32* %bc8 to i8*
-  %abc2 = bitcast i8* %bc9 to i32*
-  %abc3 = bitcast i32* %abc2 to i8*
-  %abc4 = bitcast i8* %abc3 to i32*
-  %abc5 = bitcast i32* %abc4 to i8*
-  %abc6 = bitcast i8* %abc5 to i32*
-  %abc7 = bitcast i32* %abc6 to i8*
-  %abc8 = bitcast i8* %abc7 to i32*
-  %abc9 = bitcast i32* %abc8 to i8*
-  call void @escape_i8(i8* %abc9)
+  call void @escape_i8(ptr %ptr)
   ret void
 }
 
@@ -413,10 +395,10 @@ define i32 @read_only_constant_mem() {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@read_only_constant_mem
 ; CHECK-SAME: () #[[ATTR1]] {
-; CHECK-NEXT:    [[L:%.*]] = load i32, i32* @constant_mem, align 4
+; CHECK-NEXT:    [[L:%.*]] = load i32, ptr @constant_mem, align 4
 ; CHECK-NEXT:    ret i32 [[L]]
 ;
-  %l = load i32, i32* @constant_mem
+  %l = load i32, ptr @constant_mem
   ret i32 %l
 }
 ;.

diff  --git a/llvm/test/Transforms/Attributor/reduced/register_benchmark_test.ll b/llvm/test/Transforms/Attributor/reduced/register_benchmark_test.ll
index fc1d385fc6bf2..b7499f1bf8897 100644
--- a/llvm/test/Transforms/Attributor/reduced/register_benchmark_test.ll
+++ b/llvm/test/Transforms/Attributor/reduced/register_benchmark_test.ll
@@ -10,72 +10,72 @@ source_filename = "/llvm-test-suite/MicroBenchmarks/libs/benchmark-1.3.0/test/re
 %"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100" = type { %"struct.std::_Vector_base.7.193.286.379.472.565.751.844.937.1402.1681.1960.2239.2797.3355.3448.3541.3634.3727.3820.4099" }
 %"struct.std::_Vector_base.7.193.286.379.472.565.751.844.937.1402.1681.1960.2239.2797.3355.3448.3541.3634.3727.3820.4099" = type { %"struct.std::_Vector_base<(anonymous namespace)::TestCase, std::allocator<(anonymous namespace)::TestCase> >::_Vector_impl.6.192.285.378.471.564.750.843.936.1401.1680.1959.2238.2796.3354.3447.3540.3633.3726.3819.4098" }
 %"struct.std::_Vector_base<(anonymous namespace)::TestCase, std::allocator<(anonymous namespace)::TestCase> >::_Vector_impl.6.192.285.378.471.564.750.843.936.1401.1680.1959.2238.2796.3354.3447.3540.3633.3726.3819.4098" = type { %"struct.std::_Vector_base<(anonymous namespace)::TestCase, std::allocator<(anonymous namespace)::TestCase> >::_Vector_impl_data.5.191.284.377.470.563.749.842.935.1400.1679.1958.2237.2795.3353.3446.3539.3632.3725.3818.4097" }
-%"struct.std::_Vector_base<(anonymous namespace)::TestCase, std::allocator<(anonymous namespace)::TestCase> >::_Vector_impl_data.5.191.284.377.470.563.749.842.935.1400.1679.1958.2237.2795.3353.3446.3539.3632.3725.3818.4097" = type { %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* }
-%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096" = type { %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", i8* }
+%"struct.std::_Vector_base<(anonymous namespace)::TestCase, std::allocator<(anonymous namespace)::TestCase> >::_Vector_impl_data.5.191.284.377.470.563.749.842.935.1400.1679.1958.2237.2795.3353.3446.3539.3632.3725.3818.4097" = type { ptr, ptr, ptr }
+%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096" = type { %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", ptr }
 %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider.1.187.280.373.466.559.745.838.931.1396.1675.1954.2233.2791.3349.3442.3535.3628.3721.3814.4093", i64, %union.anon.2.188.281.374.467.560.746.839.932.1397.1676.1955.2234.2792.3350.3443.3536.3629.3722.3815.4094 }
-%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider.1.187.280.373.466.559.745.838.931.1396.1675.1954.2233.2791.3349.3442.3535.3628.3721.3814.4093" = type { i8* }
+%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider.1.187.280.373.466.559.745.838.931.1396.1675.1954.2233.2791.3349.3442.3535.3628.3721.3814.4093" = type { ptr }
 %union.anon.2.188.281.374.467.560.746.839.932.1397.1676.1955.2234.2792.3350.3443.3536.3629.3722.3815.4094 = type { i64, [8 x i8] }
-%"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119" = type { i32 (...)**, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", i32, %"class.std::vector.11.12.198.291.384.477.570.756.849.942.1407.1686.1965.2244.2802.3360.3453.3546.3639.3732.3825.4104", %"class.std::vector.16.20.206.299.392.485.578.764.857.950.1415.1694.1973.2252.2810.3368.3461.3554.3647.3740.3833.4112", i32, i32, double, i64, i32, i8, i8, i32, double (i32)*, %"class.std::vector.21.26.212.305.398.491.584.770.863.956.1421.1700.1979.2258.2816.3374.3467.3560.3653.3746.3839.4118", %"class.std::vector.3.16.202.295.388.481.574.760.853.946.1411.1690.1969.2248.2806.3364.3457.3550.3643.3736.3829.4108" }
+%"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119" = type { ptr, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", i32, %"class.std::vector.11.12.198.291.384.477.570.756.849.942.1407.1686.1965.2244.2802.3360.3453.3546.3639.3732.3825.4104", %"class.std::vector.16.20.206.299.392.485.578.764.857.950.1415.1694.1973.2252.2810.3368.3461.3554.3647.3740.3833.4112", i32, i32, double, i64, i32, i8, i8, i32, ptr, %"class.std::vector.21.26.212.305.398.491.584.770.863.956.1421.1700.1979.2258.2816.3374.3467.3560.3653.3746.3839.4118", %"class.std::vector.3.16.202.295.388.481.574.760.853.946.1411.1690.1969.2248.2806.3364.3457.3550.3643.3736.3829.4108" }
 %"class.std::vector.11.12.198.291.384.477.570.756.849.942.1407.1686.1965.2244.2802.3360.3453.3546.3639.3732.3825.4104" = type { %"struct.std::_Vector_base.12.11.197.290.383.476.569.755.848.941.1406.1685.1964.2243.2801.3359.3452.3545.3638.3731.3824.4103" }
 %"struct.std::_Vector_base.12.11.197.290.383.476.569.755.848.941.1406.1685.1964.2243.2801.3359.3452.3545.3638.3731.3824.4103" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_Vector_impl.10.196.289.382.475.568.754.847.940.1405.1684.1963.2242.2800.3358.3451.3544.3637.3730.3823.4102" }
 %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_Vector_impl.10.196.289.382.475.568.754.847.940.1405.1684.1963.2242.2800.3358.3451.3544.3637.3730.3823.4102" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_Vector_impl_data.9.195.288.381.474.567.753.846.939.1404.1683.1962.2241.2799.3357.3450.3543.3636.3729.3822.4101" }
-%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_Vector_impl_data.9.195.288.381.474.567.753.846.939.1404.1683.1962.2241.2799.3357.3450.3543.3636.3729.3822.4101" = type { %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* }
+%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_Vector_impl_data.9.195.288.381.474.567.753.846.939.1404.1683.1962.2241.2799.3357.3450.3543.3636.3729.3822.4101" = type { ptr, ptr, ptr }
 %"class.std::vector.16.20.206.299.392.485.578.764.857.950.1415.1694.1973.2252.2810.3368.3461.3554.3647.3740.3833.4112" = type { %"struct.std::_Vector_base.17.19.205.298.391.484.577.763.856.949.1414.1693.1972.2251.2809.3367.3460.3553.3646.3739.3832.4111" }
 %"struct.std::_Vector_base.17.19.205.298.391.484.577.763.856.949.1414.1693.1972.2251.2809.3367.3460.3553.3646.3739.3832.4111" = type { %"struct.std::_Vector_base<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_Vector_impl.18.204.297.390.483.576.762.855.948.1413.1692.1971.2250.2808.3366.3459.3552.3645.3738.3831.4110" }
 %"struct.std::_Vector_base<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_Vector_impl.18.204.297.390.483.576.762.855.948.1413.1692.1971.2250.2808.3366.3459.3552.3645.3738.3831.4110" = type { %"struct.std::_Vector_base<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_Vector_impl_data.17.203.296.389.482.575.761.854.947.1412.1691.1970.2249.2807.3365.3458.3551.3644.3737.3830.4109" }
-%"struct.std::_Vector_base<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_Vector_impl_data.17.203.296.389.482.575.761.854.947.1412.1691.1970.2249.2807.3365.3458.3551.3644.3737.3830.4109" = type { %"class.std::vector.3.16.202.295.388.481.574.760.853.946.1411.1690.1969.2248.2806.3364.3457.3550.3643.3736.3829.4108"*, %"class.std::vector.3.16.202.295.388.481.574.760.853.946.1411.1690.1969.2248.2806.3364.3457.3550.3643.3736.3829.4108"*, %"class.std::vector.3.16.202.295.388.481.574.760.853.946.1411.1690.1969.2248.2806.3364.3457.3550.3643.3736.3829.4108"* }
+%"struct.std::_Vector_base<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_Vector_impl_data.17.203.296.389.482.575.761.854.947.1412.1691.1970.2249.2807.3365.3458.3551.3644.3737.3830.4109" = type { ptr, ptr, ptr }
 %"class.std::vector.21.26.212.305.398.491.584.770.863.956.1421.1700.1979.2258.2816.3374.3467.3560.3653.3746.3839.4118" = type { %"struct.std::_Vector_base.22.25.211.304.397.490.583.769.862.955.1420.1699.1978.2257.2815.3373.3466.3559.3652.3745.3838.4117" }
 %"struct.std::_Vector_base.22.25.211.304.397.490.583.769.862.955.1420.1699.1978.2257.2815.3373.3466.3559.3652.3745.3838.4117" = type { %"struct.std::_Vector_base<benchmark::Statistics, std::allocator<benchmark::Statistics> >::_Vector_impl.24.210.303.396.489.582.768.861.954.1419.1698.1977.2256.2814.3372.3465.3558.3651.3744.3837.4116" }
 %"struct.std::_Vector_base<benchmark::Statistics, std::allocator<benchmark::Statistics> >::_Vector_impl.24.210.303.396.489.582.768.861.954.1419.1698.1977.2256.2814.3372.3465.3558.3651.3744.3837.4116" = type { %"struct.std::_Vector_base<benchmark::Statistics, std::allocator<benchmark::Statistics> >::_Vector_impl_data.23.209.302.395.488.581.767.860.953.1418.1697.1976.2255.2813.3371.3464.3557.3650.3743.3836.4115" }
-%"struct.std::_Vector_base<benchmark::Statistics, std::allocator<benchmark::Statistics> >::_Vector_impl_data.23.209.302.395.488.581.767.860.953.1418.1697.1976.2255.2813.3371.3464.3557.3650.3743.3836.4115" = type { %"struct.benchmark::Statistics.22.208.301.394.487.580.766.859.952.1417.1696.1975.2254.2812.3370.3463.3556.3649.3742.3835.4114"*, %"struct.benchmark::Statistics.22.208.301.394.487.580.766.859.952.1417.1696.1975.2254.2812.3370.3463.3556.3649.3742.3835.4114"*, %"struct.benchmark::Statistics.22.208.301.394.487.580.766.859.952.1417.1696.1975.2254.2812.3370.3463.3556.3649.3742.3835.4114"* }
-%"struct.benchmark::Statistics.22.208.301.394.487.580.766.859.952.1417.1696.1975.2254.2812.3370.3463.3556.3649.3742.3835.4114" = type { %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", double (%"class.std::vector.26.21.207.300.393.486.579.765.858.951.1416.1695.1974.2253.2811.3369.3462.3555.3648.3741.3834.4113"*)* }
+%"struct.std::_Vector_base<benchmark::Statistics, std::allocator<benchmark::Statistics> >::_Vector_impl_data.23.209.302.395.488.581.767.860.953.1418.1697.1976.2255.2813.3371.3464.3557.3650.3743.3836.4115" = type { ptr, ptr, ptr }
+%"struct.benchmark::Statistics.22.208.301.394.487.580.766.859.952.1417.1696.1975.2254.2812.3370.3463.3556.3649.3742.3835.4114" = type { %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", ptr }
 %"class.std::vector.26.21.207.300.393.486.579.765.858.951.1416.1695.1974.2253.2811.3369.3462.3555.3648.3741.3834.4113" = type opaque
 %"class.std::vector.3.16.202.295.388.481.574.760.853.946.1411.1690.1969.2248.2806.3364.3457.3550.3643.3736.3829.4108" = type { %"struct.std::_Vector_base.4.15.201.294.387.480.573.759.852.945.1410.1689.1968.2247.2805.3363.3456.3549.3642.3735.3828.4107" }
 %"struct.std::_Vector_base.4.15.201.294.387.480.573.759.852.945.1410.1689.1968.2247.2805.3363.3456.3549.3642.3735.3828.4107" = type { %"struct.std::_Vector_base<int, std::allocator<int> >::_Vector_impl.14.200.293.386.479.572.758.851.944.1409.1688.1967.2246.2804.3362.3455.3548.3641.3734.3827.4106" }
 %"struct.std::_Vector_base<int, std::allocator<int> >::_Vector_impl.14.200.293.386.479.572.758.851.944.1409.1688.1967.2246.2804.3362.3455.3548.3641.3734.3827.4106" = type { %"struct.std::_Vector_base<int, std::allocator<int> >::_Vector_impl_data.13.199.292.385.478.571.757.850.943.1408.1687.1966.2245.2803.3361.3454.3547.3640.3733.3826.4105" }
-%"struct.std::_Vector_base<int, std::allocator<int> >::_Vector_impl_data.13.199.292.385.478.571.757.850.943.1408.1687.1966.2245.2803.3361.3454.3547.3640.3733.3826.4105" = type { i32*, i32*, i32* }
-%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135" = type { %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* }
-%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134" = type { i32 (...)**, %"class.std::basic_ios.41.227.320.413.506.599.785.878.971.1436.1715.1994.2273.2831.3389.3482.3575.3668.3761.3854.4133" }
-%"class.std::basic_ios.41.227.320.413.506.599.785.878.971.1436.1715.1994.2273.2831.3389.3482.3575.3668.3761.3854.4133" = type { %"class.std::ios_base.33.219.312.405.498.591.777.870.963.1428.1707.1986.2265.2823.3381.3474.3567.3660.3753.3846.4125", %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"*, i8, i8, %"class.std::basic_streambuf.34.220.313.406.499.592.778.871.964.1429.1708.1987.2266.2824.3382.3475.3568.3661.3754.3847.4126"*, %"class.std::ctype.38.224.317.410.503.596.782.875.968.1433.1712.1991.2270.2828.3386.3479.3572.3665.3758.3851.4130"*, %"class.std::num_put.39.225.318.411.504.597.783.876.969.1434.1713.1992.2271.2829.3387.3480.3573.3666.3759.3852.4131"*, %"class.std::num_get.40.226.319.412.505.598.784.877.970.1435.1714.1993.2272.2830.3388.3481.3574.3667.3760.3853.4132"* }
-%"class.std::ios_base.33.219.312.405.498.591.777.870.963.1428.1707.1986.2265.2823.3381.3474.3567.3660.3753.3846.4125" = type { i32 (...)**, i64, i64, i32, i32, i32, %"struct.std::ios_base::_Callback_list.28.214.307.400.493.586.772.865.958.1423.1702.1981.2260.2818.3376.3469.3562.3655.3748.3841.4120"*, %"struct.std::ios_base::_Words.29.215.308.401.494.587.773.866.959.1424.1703.1982.2261.2819.3377.3470.3563.3656.3749.3842.4121", [8 x %"struct.std::ios_base::_Words.29.215.308.401.494.587.773.866.959.1424.1703.1982.2261.2819.3377.3470.3563.3656.3749.3842.4121"], i32, %"struct.std::ios_base::_Words.29.215.308.401.494.587.773.866.959.1424.1703.1982.2261.2819.3377.3470.3563.3656.3749.3842.4121"*, %"class.std::locale.32.218.311.404.497.590.776.869.962.1427.1706.1985.2264.2822.3380.3473.3566.3659.3752.3845.4124" }
-%"struct.std::ios_base::_Callback_list.28.214.307.400.493.586.772.865.958.1423.1702.1981.2260.2818.3376.3469.3562.3655.3748.3841.4120" = type { %"struct.std::ios_base::_Callback_list.28.214.307.400.493.586.772.865.958.1423.1702.1981.2260.2818.3376.3469.3562.3655.3748.3841.4120"*, void (i32, %"class.std::ios_base.33.219.312.405.498.591.777.870.963.1428.1707.1986.2265.2823.3381.3474.3567.3660.3753.3846.4125"*, i32)*, i32, i32 }
-%"struct.std::ios_base::_Words.29.215.308.401.494.587.773.866.959.1424.1703.1982.2261.2819.3377.3470.3563.3656.3749.3842.4121" = type { i8*, i64 }
-%"class.std::locale.32.218.311.404.497.590.776.869.962.1427.1706.1985.2264.2822.3380.3473.3566.3659.3752.3845.4124" = type { %"class.std::locale::_Impl.31.217.310.403.496.589.775.868.961.1426.1705.1984.2263.2821.3379.3472.3565.3658.3751.3844.4123"* }
-%"class.std::locale::_Impl.31.217.310.403.496.589.775.868.961.1426.1705.1984.2263.2821.3379.3472.3565.3658.3751.3844.4123" = type { i32, %"class.std::locale::facet.30.216.309.402.495.588.774.867.960.1425.1704.1983.2262.2820.3378.3471.3564.3657.3750.3843.4122"**, i64, %"class.std::locale::facet.30.216.309.402.495.588.774.867.960.1425.1704.1983.2262.2820.3378.3471.3564.3657.3750.3843.4122"**, i8** }
-%"class.std::locale::facet.30.216.309.402.495.588.774.867.960.1425.1704.1983.2262.2820.3378.3471.3564.3657.3750.3843.4122" = type <{ i32 (...)**, i32, [4 x i8] }>
-%"class.std::basic_streambuf.34.220.313.406.499.592.778.871.964.1429.1708.1987.2266.2824.3382.3475.3568.3661.3754.3847.4126" = type { i32 (...)**, i8*, i8*, i8*, i8*, i8*, i8*, %"class.std::locale.32.218.311.404.497.590.776.869.962.1427.1706.1985.2264.2822.3380.3473.3566.3659.3752.3845.4124" }
-%"class.std::ctype.38.224.317.410.503.596.782.875.968.1433.1712.1991.2270.2828.3386.3479.3572.3665.3758.3851.4130" = type <{ %"class.std::locale::facet.base.35.221.314.407.500.593.779.872.965.1430.1709.1988.2267.2825.3383.3476.3569.3662.3755.3848.4127", [4 x i8], %struct.__locale_struct.37.223.316.409.502.595.781.874.967.1432.1711.1990.2269.2827.3385.3478.3571.3664.3757.3850.4129*, i8, [7 x i8], i32*, i32*, i16*, i8, [256 x i8], [256 x i8], i8, [6 x i8] }>
-%"class.std::locale::facet.base.35.221.314.407.500.593.779.872.965.1430.1709.1988.2267.2825.3383.3476.3569.3662.3755.3848.4127" = type <{ i32 (...)**, i32 }>
-%struct.__locale_struct.37.223.316.409.502.595.781.874.967.1432.1711.1990.2269.2827.3385.3478.3571.3664.3757.3850.4129 = type { [13 x %struct.__locale_data.36.222.315.408.501.594.780.873.966.1431.1710.1989.2268.2826.3384.3477.3570.3663.3756.3849.4128*], i16*, i32*, i32*, [13 x i8*] }
+%"struct.std::_Vector_base<int, std::allocator<int> >::_Vector_impl_data.13.199.292.385.478.571.757.850.943.1408.1687.1966.2245.2803.3361.3454.3547.3640.3733.3826.4105" = type { ptr, ptr, ptr }
+%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135" = type { ptr }
+%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134" = type { ptr, %"class.std::basic_ios.41.227.320.413.506.599.785.878.971.1436.1715.1994.2273.2831.3389.3482.3575.3668.3761.3854.4133" }
+%"class.std::basic_ios.41.227.320.413.506.599.785.878.971.1436.1715.1994.2273.2831.3389.3482.3575.3668.3761.3854.4133" = type { %"class.std::ios_base.33.219.312.405.498.591.777.870.963.1428.1707.1986.2265.2823.3381.3474.3567.3660.3753.3846.4125", ptr, i8, i8, ptr, ptr, ptr, ptr }
+%"class.std::ios_base.33.219.312.405.498.591.777.870.963.1428.1707.1986.2265.2823.3381.3474.3567.3660.3753.3846.4125" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words.29.215.308.401.494.587.773.866.959.1424.1703.1982.2261.2819.3377.3470.3563.3656.3749.3842.4121", [8 x %"struct.std::ios_base::_Words.29.215.308.401.494.587.773.866.959.1424.1703.1982.2261.2819.3377.3470.3563.3656.3749.3842.4121"], i32, ptr, %"class.std::locale.32.218.311.404.497.590.776.869.962.1427.1706.1985.2264.2822.3380.3473.3566.3659.3752.3845.4124" }
+%"struct.std::ios_base::_Callback_list.28.214.307.400.493.586.772.865.958.1423.1702.1981.2260.2818.3376.3469.3562.3655.3748.3841.4120" = type { ptr, ptr, i32, i32 }
+%"struct.std::ios_base::_Words.29.215.308.401.494.587.773.866.959.1424.1703.1982.2261.2819.3377.3470.3563.3656.3749.3842.4121" = type { ptr, i64 }
+%"class.std::locale.32.218.311.404.497.590.776.869.962.1427.1706.1985.2264.2822.3380.3473.3566.3659.3752.3845.4124" = type { ptr }
+%"class.std::locale::_Impl.31.217.310.403.496.589.775.868.961.1426.1705.1984.2263.2821.3379.3472.3565.3658.3751.3844.4123" = type { i32, ptr, i64, ptr, ptr }
+%"class.std::locale::facet.30.216.309.402.495.588.774.867.960.1425.1704.1983.2262.2820.3378.3471.3564.3657.3750.3843.4122" = type <{ ptr, i32, [4 x i8] }>
+%"class.std::basic_streambuf.34.220.313.406.499.592.778.871.964.1429.1708.1987.2266.2824.3382.3475.3568.3661.3754.3847.4126" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale.32.218.311.404.497.590.776.869.962.1427.1706.1985.2264.2822.3380.3473.3566.3659.3752.3845.4124" }
+%"class.std::ctype.38.224.317.410.503.596.782.875.968.1433.1712.1991.2270.2828.3386.3479.3572.3665.3758.3851.4130" = type <{ %"class.std::locale::facet.base.35.221.314.407.500.593.779.872.965.1430.1709.1988.2267.2825.3383.3476.3569.3662.3755.3848.4127", [4 x i8], ptr, i8, [7 x i8], ptr, ptr, ptr, i8, [256 x i8], [256 x i8], i8, [6 x i8] }>
+%"class.std::locale::facet.base.35.221.314.407.500.593.779.872.965.1430.1709.1988.2267.2825.3383.3476.3569.3662.3755.3848.4127" = type <{ ptr, i32 }>
+%struct.__locale_struct.37.223.316.409.502.595.781.874.967.1432.1711.1990.2269.2827.3385.3478.3571.3664.3757.3850.4129 = type { [13 x ptr], ptr, ptr, ptr, [13 x ptr] }
 %struct.__locale_data.36.222.315.408.501.594.780.873.966.1431.1710.1989.2268.2826.3384.3477.3570.3663.3756.3849.4128 = type opaque
 %"class.std::num_put.39.225.318.411.504.597.783.876.969.1434.1713.1992.2271.2829.3387.3480.3573.3666.3759.3852.4131" = type { %"class.std::locale::facet.base.35.221.314.407.500.593.779.872.965.1430.1709.1988.2267.2825.3383.3476.3569.3662.3755.3848.4127", [4 x i8] }
 %"class.std::num_get.40.226.319.412.505.598.784.877.970.1435.1714.1993.2272.2830.3388.3481.3574.3667.3760.3853.4132" = type { %"class.std::locale::facet.base.35.221.314.407.500.593.779.872.965.1430.1709.1988.2267.2825.3383.3476.3569.3662.3755.3848.4127", [4 x i8] }
-%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145" = type { i8, i8, i64, %"class.std::vector.3.16.202.295.388.481.574.760.853.946.1411.1690.1969.2248.2806.3364.3457.3550.3643.3736.3829.4108", i64, i64, i32, i8, %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142", i32, i32, i64, %"class.benchmark::internal::ThreadTimer.51.237.330.423.516.609.795.888.981.1446.1725.2004.2283.2841.3399.3492.3585.3678.3771.3864.4143"*, %"class.benchmark::internal::ThreadManager.52.238.331.424.517.610.796.889.982.1447.1726.2005.2284.2842.3400.3493.3586.3679.3772.3865.4144"* }
+%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145" = type { i8, i8, i64, %"class.std::vector.3.16.202.295.388.481.574.760.853.946.1411.1690.1969.2248.2806.3364.3457.3550.3643.3736.3829.4108", i64, i64, i32, i8, %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142", i32, i32, i64, ptr, ptr }
 %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142" = type { %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141" }
 %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Rb_tree_impl.48.234.327.420.513.606.792.885.978.1443.1722.2001.2280.2838.3396.3489.3582.3675.3768.3861.4140" }
 %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Rb_tree_impl.48.234.327.420.513.606.792.885.978.1443.1722.2001.2280.2838.3396.3489.3582.3675.3768.3861.4140" = type { %"struct.std::_Rb_tree_key_compare.45.231.324.417.510.603.789.882.975.1440.1719.1998.2277.2835.3393.3486.3579.3672.3765.3858.4137", %"struct.std::_Rb_tree_header.47.233.326.419.512.605.791.884.977.1442.1721.2000.2279.2837.3395.3488.3581.3674.3767.3860.4139" }
 %"struct.std::_Rb_tree_key_compare.45.231.324.417.510.603.789.882.975.1440.1719.1998.2277.2835.3393.3486.3579.3672.3765.3858.4137" = type { %"struct.std::less.44.230.323.416.509.602.788.881.974.1439.1718.1997.2276.2834.3392.3485.3578.3671.3764.3857.4136" }
 %"struct.std::less.44.230.323.416.509.602.788.881.974.1439.1718.1997.2276.2834.3392.3485.3578.3671.3764.3857.4136" = type { i8 }
 %"struct.std::_Rb_tree_header.47.233.326.419.512.605.791.884.977.1442.1721.2000.2279.2837.3395.3488.3581.3674.3767.3860.4139" = type { %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138", i64 }
-%"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138" = type { i32, %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*, %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*, %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"* }
+%"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138" = type { i32, ptr, ptr, ptr }
 %"class.benchmark::internal::ThreadTimer.51.237.330.423.516.609.795.888.981.1446.1725.2004.2283.2841.3399.3492.3585.3678.3771.3864.4143" = type opaque
 %"class.benchmark::internal::ThreadManager.52.238.331.424.517.610.796.889.982.1447.1726.2005.2284.2842.3400.3493.3586.3679.3772.3865.4144" = type opaque
-%"struct.benchmark::State::StateIterator.54.240.333.426.519.612.798.891.984.1449.1728.2007.2286.2844.3402.3495.3588.3681.3774.3867.4146" = type { i64, %"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"* }
-%"class.benchmark::internal::FunctionBenchmark.55.241.334.427.520.613.799.892.985.1450.1729.2008.2287.2845.3403.3496.3589.3682.3775.3868.4147" = type { %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119", void (%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"*)* }
-%"class.std::initializer_list.56.242.335.428.521.614.800.893.986.1451.1730.2009.2288.2846.3404.3497.3590.3683.3776.3869.4148" = type { %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, i64 }
-%"struct.std::pair.57.243.336.429.522.615.801.894.987.1452.1731.2010.2289.2847.3405.3498.3591.3684.3777.3870.4149" = type { i8*, i8* }
+%"struct.benchmark::State::StateIterator.54.240.333.426.519.612.798.891.984.1449.1728.2007.2286.2844.3402.3495.3588.3681.3774.3867.4146" = type { i64, ptr }
+%"class.benchmark::internal::FunctionBenchmark.55.241.334.427.520.613.799.892.985.1450.1729.2008.2287.2845.3403.3496.3589.3682.3775.3868.4147" = type { %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119", ptr }
+%"class.std::initializer_list.56.242.335.428.521.614.800.893.986.1451.1730.2009.2288.2846.3404.3497.3590.3683.3776.3869.4148" = type { ptr, i64 }
+%"struct.std::pair.57.243.336.429.522.615.801.894.987.1452.1731.2010.2289.2847.3405.3498.3591.3684.3777.3870.4149" = type { ptr, ptr }
 %struct.CustomFixture.58.244.337.430.523.616.802.895.988.1453.1732.2011.2290.2848.3406.3499.3592.3685.3778.3871.4150 = type { i8 }
-%class.anon.59.245.338.431.524.617.803.896.989.1454.1733.2012.2291.2849.3407.3500.3593.3686.3779.3872.4151 = type { i8* }
+%class.anon.59.245.338.431.524.617.803.896.989.1454.1733.2012.2291.2849.3407.3500.3593.3686.3779.3872.4151 = type { ptr }
 %"class.(anonymous namespace)::TestReporter.67.253.346.439.532.625.811.904.997.1462.1741.2020.2299.2857.3415.3508.3601.3694.3787.3880.4159" = type { %"class.benchmark::ConsoleReporter.base.61.247.340.433.526.619.805.898.991.1456.1735.2014.2293.2851.3409.3502.3595.3688.3781.3874.4153", %"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158" }
 %"class.benchmark::ConsoleReporter.base.61.247.340.433.526.619.805.898.991.1456.1735.2014.2293.2851.3409.3502.3595.3688.3781.3874.4153" = type <{ %"class.benchmark::BenchmarkReporter.60.246.339.432.525.618.804.897.990.1455.1734.2013.2292.2850.3408.3501.3594.3687.3780.3873.4152", i32, [4 x i8], i64, %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142", i8 }>
-%"class.benchmark::BenchmarkReporter.60.246.339.432.525.618.804.897.990.1455.1734.2013.2292.2850.3408.3501.3594.3687.3780.3873.4152" = type { i32 (...)**, %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"*, %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* }
+%"class.benchmark::BenchmarkReporter.60.246.339.432.525.618.804.897.990.1455.1734.2013.2292.2850.3408.3501.3594.3687.3780.3873.4152" = type { ptr, ptr, ptr }
 %"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158" = type { %"struct.std::_Vector_base.28.65.251.344.437.530.623.809.902.995.1460.1739.2018.2297.2855.3413.3506.3599.3692.3785.3878.4157" }
 %"struct.std::_Vector_base.28.65.251.344.437.530.623.809.902.995.1460.1739.2018.2297.2855.3413.3506.3599.3692.3785.3878.4157" = type { %"struct.std::_Vector_base<benchmark::BenchmarkReporter::Run, std::allocator<benchmark::BenchmarkReporter::Run> >::_Vector_impl.64.250.343.436.529.622.808.901.994.1459.1738.2017.2296.2854.3412.3505.3598.3691.3784.3877.4156" }
 %"struct.std::_Vector_base<benchmark::BenchmarkReporter::Run, std::allocator<benchmark::BenchmarkReporter::Run> >::_Vector_impl.64.250.343.436.529.622.808.901.994.1459.1738.2017.2296.2854.3412.3505.3598.3691.3784.3877.4156" = type { %"struct.std::_Vector_base<benchmark::BenchmarkReporter::Run, std::allocator<benchmark::BenchmarkReporter::Run> >::_Vector_impl_data.63.249.342.435.528.621.807.900.993.1458.1737.2016.2295.2853.3411.3504.3597.3690.3783.3876.4155" }
-%"struct.std::_Vector_base<benchmark::BenchmarkReporter::Run, std::allocator<benchmark::BenchmarkReporter::Run> >::_Vector_impl_data.63.249.342.435.528.621.807.900.993.1458.1737.2016.2295.2853.3411.3504.3597.3690.3783.3876.4155" = type { %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* }
-%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154" = type { %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", i8, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", i64, i32, double, double, double, double, double, i32, double (i32)*, i32, %"class.std::vector.21.26.212.305.398.491.584.770.863.956.1421.1700.1979.2258.2816.3374.3467.3560.3653.3746.3839.4118"*, i8, i8, %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142" }
-%"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160" = type { %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* }
-%"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161" = type { %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* }
+%"struct.std::_Vector_base<benchmark::BenchmarkReporter::Run, std::allocator<benchmark::BenchmarkReporter::Run> >::_Vector_impl_data.63.249.342.435.528.621.807.900.993.1458.1737.2016.2295.2853.3411.3504.3597.3690.3783.3876.4155" = type { ptr, ptr, ptr }
+%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154" = type { %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", i8, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", i64, i32, double, double, double, double, double, i32, ptr, i32, ptr, i8, i8, %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142" }
+%"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160" = type { ptr }
+%"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161" = type { ptr }
 %"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162" = type { i8 }
 %"class.__gnu_cxx::new_allocator.71.257.350.443.536.629.815.908.1001.1466.1745.2024.2303.2861.3419.3512.3605.3698.3791.3884.4163" = type { i8 }
 %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164" = type { i8 }
@@ -86,16 +86,16 @@ source_filename = "/llvm-test-suite/MicroBenchmarks/libs/benchmark-1.3.0/test/re
 %"class.__gnu_cxx::new_allocator.9.77.263.356.449.542.635.821.914.1007.1472.1751.2030.2309.2867.3425.3518.3611.3704.3797.3890.4169" = type { i8 }
 %"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170" = type { i8 }
 %"class.__gnu_cxx::new_allocator.30.79.265.358.451.544.637.823.916.1009.1474.1753.2032.2311.2869.3427.3520.3613.3706.3799.3892.4171" = type { i8 }
-%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172" = type { %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* }
-%"class.std::move_iterator.81.267.360.453.546.639.825.918.1011.1476.1755.2034.2313.2871.3429.3522.3615.3708.3801.3894.4173" = type { %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* }
+%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172" = type { ptr }
+%"class.std::move_iterator.81.267.360.453.546.639.825.918.1011.1476.1755.2034.2313.2871.3429.3522.3615.3708.3801.3894.4173" = type { ptr }
 %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175" = type { %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138", %"struct.__gnu_cxx::__aligned_membuf.82.268.361.454.547.640.826.919.1012.1477.1756.2035.2314.2872.3430.3523.3616.3709.3802.3895.4174" }
 %"struct.__gnu_cxx::__aligned_membuf.82.268.361.454.547.640.826.919.1012.1477.1756.2035.2314.2872.3430.3523.3616.3709.3802.3895.4174" = type { [48 x i8] }
 %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177" = type { %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095", %"class.benchmark::Counter.84.270.363.456.549.642.828.921.1014.1479.1758.2037.2316.2874.3432.3525.3618.3711.3804.3897.4176" }
 %"class.benchmark::Counter.84.270.363.456.549.642.828.921.1014.1479.1758.2037.2316.2874.3432.3525.3618.3711.3804.3897.4176" = type <{ double, i32, [4 x i8] }>
-%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Reuse_or_alloc_node.86.272.365.458.551.644.830.923.1016.1481.1760.2039.2318.2876.3434.3527.3620.3713.3806.3899.4178" = type { %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*, %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* }
-%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Alloc_node.87.273.366.459.552.645.831.924.1017.1482.1761.2040.2319.2877.3435.3528.3621.3714.3807.3900.4179" = type { %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* }
-%"class.benchmark::internal::CheckHandler.88.274.367.460.553.646.832.925.1018.1483.1762.2041.2320.2878.3436.3529.3622.3715.3808.3901.4180" = type { %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* }
-%class.anon.37.89.275.368.461.554.647.833.926.1019.1484.1763.2042.2321.2879.3437.3530.3623.3716.3809.3902.4181 = type { void (%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"*, i8*)*, i8* }
+%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Reuse_or_alloc_node.86.272.365.458.551.644.830.923.1016.1481.1760.2039.2318.2876.3434.3527.3620.3713.3806.3899.4178" = type { ptr, ptr, ptr }
+%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Alloc_node.87.273.366.459.552.645.831.924.1017.1482.1761.2040.2319.2877.3435.3528.3621.3714.3807.3900.4179" = type { ptr }
+%"class.benchmark::internal::CheckHandler.88.274.367.460.553.646.832.925.1018.1483.1762.2041.2320.2878.3436.3529.3622.3715.3808.3901.4180" = type { ptr }
+%class.anon.37.89.275.368.461.554.647.833.926.1019.1484.1763.2042.2321.2879.3437.3530.3623.3716.3809.3902.4181 = type { ptr, ptr }
 %"class.benchmark::internal::LambdaBenchmark.90.276.369.462.555.648.834.927.1020.1485.1764.2043.2322.2880.3438.3531.3624.3717.3810.3903.4182" = type { %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119", %class.anon.37.89.275.368.461.554.647.833.926.1019.1484.1763.2042.2321.2879.3437.3530.3623.3716.3809.3902.4181 }
 %"class.benchmark::internal::LambdaBenchmark.38.91.277.370.463.556.649.835.928.1021.1486.1765.2044.2323.2881.3439.3532.3625.3718.3811.3904.4183" = type <{ %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119", %struct.CustomFixture.58.244.337.430.523.616.802.895.988.1453.1732.2011.2290.2848.3406.3499.3592.3685.3778.3871.4150, [7 x i8] }>
 %"class.benchmark::internal::LambdaBenchmark.39.92.278.371.464.557.650.836.929.1022.1487.1766.2045.2324.2882.3440.3533.3626.3719.3812.3905.4184" = type { %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119", %class.anon.59.245.338.431.524.617.803.896.989.1454.1733.2012.2291.2849.3407.3500.3593.3686.3779.3872.4151 }
@@ -104,9 +104,9 @@ source_filename = "/llvm-test-suite/MicroBenchmarks/libs/benchmark-1.3.0/test/re
 @_ZStL8__ioinit = external dso_local global %"class.std::ios_base::Init.0.186.279.372.465.558.744.837.930.1395.1674.1953.2232.2790.3348.3441.3534.3627.3720.3813.4092", align 1
 @__dso_handle = external hidden global i8
 @_ZN12_GLOBAL__N_115ExpectedResultsE = external dso_local global %"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100", align 8
- at _ZL23_benchmark_2BM_function = external dso_local global %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119"*, align 8
+ at _ZL23_benchmark_2BM_function = external dso_local global ptr, align 8
 @.str = external dso_local unnamed_addr constant [12 x i8], align 1
- at dummy = external dso_local global %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119"*, align 8
+ at dummy = external dso_local global ptr, align 8
 @.str.5 = external dso_local unnamed_addr constant [32 x i8], align 1
 @dummy70 = external dso_local global i32, align 4
 @.str.7 = external dso_local unnamed_addr constant [6 x i8], align 1
@@ -133,15 +133,15 @@ source_filename = "/llvm-test-suite/MicroBenchmarks/libs/benchmark-1.3.0/test/re
 @.str.26 = external dso_local unnamed_addr constant [12 x i8], align 1
 @.str.27 = external dso_local unnamed_addr constant [100 x i8], align 1
 @__PRETTY_FUNCTION__._ZN9benchmark5State13StateIteratorppEv = external dso_local unnamed_addr constant [79 x i8], align 1
- at _ZTVN9benchmark8internal17FunctionBenchmarkE = external dso_local unnamed_addr constant { [5 x i8*] }, align 8
+ at _ZTVN9benchmark8internal17FunctionBenchmarkE = external dso_local unnamed_addr constant { [5 x ptr] }, align 8
 @.str.28 = external dso_local unnamed_addr constant [42 x i8], align 1
 @.str.29 = external dso_local unnamed_addr constant [26 x i8], align 1
- at _ZTVN12_GLOBAL__N_112TestReporterE = external dso_local unnamed_addr constant { [9 x i8*] }, align 8
- at _ZTVN10__cxxabiv120__si_class_type_infoE = external dso_local global i8*
+ at _ZTVN12_GLOBAL__N_112TestReporterE = external dso_local unnamed_addr constant { [9 x ptr] }, align 8
+ at _ZTVN10__cxxabiv120__si_class_type_infoE = external dso_local global ptr
 @_ZTSN12_GLOBAL__N_112TestReporterE = external dso_local constant [31 x i8], align 1
- at _ZTIN9benchmark15ConsoleReporterE = external dso_local constant i8*
- at _ZTIN12_GLOBAL__N_112TestReporterE = external dso_local constant { i8*, i8*, i8* }, align 8
- at _ZTVN9benchmark15ConsoleReporterE = external dso_local unnamed_addr constant { [9 x i8*] }, align 8
+ at _ZTIN9benchmark15ConsoleReporterE = external dso_local constant ptr
+ at _ZTIN12_GLOBAL__N_112TestReporterE = external dso_local constant { ptr, ptr, ptr }, align 8
+ at _ZTVN9benchmark15ConsoleReporterE = external dso_local unnamed_addr constant { [9 x ptr] }, align 8
 @.str.30 = external dso_local unnamed_addr constant [24 x i8], align 1
 @.str.31 = external dso_local unnamed_addr constant [27 x i8], align 1
 @__func__._ZNK12_GLOBAL__N_18TestCase8CheckRunERKN9benchmark17BenchmarkReporter3RunE = external dso_local unnamed_addr constant [9 x i8], align 1
@@ -159,18 +159,18 @@ source_filename = "/llvm-test-suite/MicroBenchmarks/libs/benchmark-1.3.0/test/re
 @_ZZN9benchmark8internal19GetErrorLogInstanceEvE3log = external dso_local global %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135", align 8
 @_ZGVZN9benchmark8internal19GetErrorLogInstanceEvE3log = external dso_local global i64, align 8
 @_ZSt4clog = external dso_local global %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134", align 8
- at _ZZN9benchmark8internal15GetAbortHandlerEvE7handler = external dso_local global void ()*, align 8
- at _ZTVN9benchmark8internal15LambdaBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS6_EEEPNS0_9BenchmarkES6_OT_DpOT0_EUlS4_E_EE = external dso_local unnamed_addr constant { [5 x i8*] }, align 8
+ at _ZZN9benchmark8internal15GetAbortHandlerEvE7handler = external dso_local global ptr, align 8
+ at _ZTVN9benchmark8internal15LambdaBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS6_EEEPNS0_9BenchmarkES6_OT_DpOT0_EUlS4_E_EE = external dso_local unnamed_addr constant { [5 x ptr] }, align 8
 @_ZTSN9benchmark8internal15LambdaBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS6_EEEPNS0_9BenchmarkES6_OT_DpOT0_EUlS4_E_EE = external dso_local constant [128 x i8], align 1
- at _ZTIN9benchmark8internal9BenchmarkE = external dso_local constant i8*
- at _ZTIN9benchmark8internal15LambdaBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS6_EEEPNS0_9BenchmarkES6_OT_DpOT0_EUlS4_E_EE = external dso_local constant { i8*, i8*, i8* }, align 8
- at _ZTVN9benchmark8internal15LambdaBenchmarkI13CustomFixtureEE = external dso_local unnamed_addr constant { [5 x i8*] }, align 8
+ at _ZTIN9benchmark8internal9BenchmarkE = external dso_local constant ptr
+ at _ZTIN9benchmark8internal15LambdaBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS6_EEEPNS0_9BenchmarkES6_OT_DpOT0_EUlS4_E_EE = external dso_local constant { ptr, ptr, ptr }, align 8
+ at _ZTVN9benchmark8internal15LambdaBenchmarkI13CustomFixtureEE = external dso_local unnamed_addr constant { [5 x ptr] }, align 8
 @_ZTSN9benchmark8internal15LambdaBenchmarkI13CustomFixtureEE = external dso_local constant [56 x i8], align 1
- at _ZTIN9benchmark8internal15LambdaBenchmarkI13CustomFixtureEE = external dso_local constant { i8*, i8*, i8* }, align 8
-@"_ZTVN9benchmark8internal15LambdaBenchmarkIZ25TestRegistrationAtRuntimevE3$_0EE" = external dso_local unnamed_addr constant { [5 x i8*] }, align 8
+ at _ZTIN9benchmark8internal15LambdaBenchmarkI13CustomFixtureEE = external dso_local constant { ptr, ptr, ptr }, align 8
+@"_ZTVN9benchmark8internal15LambdaBenchmarkIZ25TestRegistrationAtRuntimevE3$_0EE" = external dso_local unnamed_addr constant { [5 x ptr] }, align 8
 @"_ZTSN9benchmark8internal15LambdaBenchmarkIZ25TestRegistrationAtRuntimevE3$_0EE" = external dso_local constant [75 x i8], align 1
-@"_ZTIN9benchmark8internal15LambdaBenchmarkIZ25TestRegistrationAtRuntimevE3$_0EE" = external dso_local constant { i8*, i8*, i8* }, align 8
- at llvm.global_ctors = external global [1 x { i32, void ()*, i8* }]
+@"_ZTIN9benchmark8internal15LambdaBenchmarkIZ25TestRegistrationAtRuntimevE3$_0EE" = external dso_local constant { ptr, ptr, ptr }, align 8
+ at llvm.global_ctors = external global [1 x { i32, ptr, ptr }]
 
 ; Function Attrs: uwtable
 declare dso_local void @__cxx_global_var_init() #0 section ".text.startup"
@@ -180,94 +180,94 @@ declare dso_local i32 @_ZN9benchmark8internal17InitializeStreamsEv() #1
 ; Function Attrs: uwtable
 declare dso_local void @__cxx_global_var_init.1() #0 section ".text.startup"
 
-declare dso_local void @_ZNSt8ios_base4InitC1Ev(%"class.std::ios_base::Init.0.186.279.372.465.558.744.837.930.1395.1674.1953.2232.2790.3348.3441.3534.3627.3720.3813.4092"*) unnamed_addr #1
+declare dso_local void @_ZNSt8ios_base4InitC1Ev(ptr) unnamed_addr #1
 
 ; Function Attrs: nounwind
-declare dso_local void @_ZNSt8ios_base4InitD1Ev(%"class.std::ios_base::Init.0.186.279.372.465.558.744.837.930.1395.1674.1953.2232.2790.3348.3441.3534.3627.3720.3813.4092"*) unnamed_addr #2
+declare dso_local void @_ZNSt8ios_base4InitD1Ev(ptr) unnamed_addr #2
 
 ; Function Attrs: nounwind
-declare dso_local i32 @__cxa_atexit(void (i8*)*, i8*, i8*) #3
+declare dso_local i32 @__cxa_atexit(ptr, ptr, ptr) #3
 
 ; Function Attrs: uwtable
 declare dso_local void @__cxx_global_var_init.2() #0 section ".text.startup"
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EEC2Ev(%"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EED2Ev(%"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EED2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_Z11BM_functionRN9benchmark5StateE(%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"* dereferenceable(144)) #0
+declare dso_local void @_Z11BM_functionRN9benchmark5StateE(ptr dereferenceable(144)) #0
 
 ; Function Attrs: argmemonly nounwind willreturn
-declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #5
+declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #5
 
 ; Function Attrs: alwaysinline uwtable
-declare dso_local { i64, %"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"* } @_ZN9benchmark5State5beginEv(%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"*) #6 align 2
+declare dso_local { i64, ptr } @_ZN9benchmark5State5beginEv(ptr) #6 align 2
 
 ; Function Attrs: alwaysinline uwtable
-declare dso_local { i64, %"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"* } @_ZN9benchmark5State3endEv(%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"*) #6 align 2
+declare dso_local { i64, ptr } @_ZN9benchmark5State3endEv(ptr) #6 align 2
 
 ; Function Attrs: alwaysinline uwtable
-declare dso_local zeroext i1 @_ZNK9benchmark5State13StateIteratorneERKS1_(%"struct.benchmark::State::StateIterator.54.240.333.426.519.612.798.891.984.1449.1728.2007.2286.2844.3402.3495.3588.3681.3774.3867.4146"*, %"struct.benchmark::State::StateIterator.54.240.333.426.519.612.798.891.984.1449.1728.2007.2286.2844.3402.3495.3588.3681.3774.3867.4146"* dereferenceable(16)) #6 align 2
+declare dso_local zeroext i1 @_ZNK9benchmark5State13StateIteratorneERKS1_(ptr, ptr dereferenceable(16)) #6 align 2
 
 ; Function Attrs: alwaysinline nounwind uwtable
-declare dso_local void @_ZNK9benchmark5State13StateIteratordeEv(%"struct.benchmark::State::StateIterator.54.240.333.426.519.612.798.891.984.1449.1728.2007.2286.2844.3402.3495.3588.3681.3774.3867.4146"*) #7 align 2
+declare dso_local void @_ZNK9benchmark5State13StateIteratordeEv(ptr) #7 align 2
 
 ; Function Attrs: argmemonly nounwind willreturn
-declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #5
+declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #5
 
 ; Function Attrs: alwaysinline nounwind uwtable
-declare dso_local dereferenceable(16) %"struct.benchmark::State::StateIterator.54.240.333.426.519.612.798.891.984.1449.1728.2007.2286.2844.3402.3495.3588.3681.3774.3867.4146"* @_ZN9benchmark5State13StateIteratorppEv(%"struct.benchmark::State::StateIterator.54.240.333.426.519.612.798.891.984.1449.1728.2007.2286.2844.3402.3495.3588.3681.3774.3867.4146"*) #7 align 2
+declare dso_local dereferenceable(16) ptr @_ZN9benchmark5State13StateIteratorppEv(ptr) #7 align 2
 
 ; Function Attrs: uwtable
 declare dso_local void @__cxx_global_var_init.3() #0 section ".text.startup"
 
-declare dso_local %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119"* @_ZN9benchmark8internal25RegisterBenchmarkInternalEPNS0_9BenchmarkE(%"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119"*) #1
+declare dso_local ptr @_ZN9benchmark8internal25RegisterBenchmarkInternalEPNS0_9BenchmarkE(ptr) #1
 
 ; Function Attrs: nobuiltin
-declare dso_local noalias i8* @_Znwm(i64) #8
+declare dso_local noalias ptr @_Znwm(i64) #8
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN9benchmark8internal17FunctionBenchmarkC2EPKcPFvRNS_5StateEE(%"class.benchmark::internal::FunctionBenchmark.55.241.334.427.520.613.799.892.985.1450.1729.2008.2287.2845.3403.3496.3589.3682.3775.3868.4147"*, i8*, void (%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"*)*) unnamed_addr #0 align 2
+declare dso_local void @_ZN9benchmark8internal17FunctionBenchmarkC2EPKcPFvRNS_5StateEE(ptr, ptr, ptr) unnamed_addr #0 align 2
 
 declare dso_local i32 @__gxx_personality_v0(...)
 
 ; Function Attrs: nobuiltin nounwind
-declare dso_local void @_ZdlPv(i8*) #9
+declare dso_local void @_ZdlPv(ptr) #9
 
 ; Function Attrs: uwtable
 declare dso_local void @__cxx_global_var_init.4() #0 section ".text.startup"
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119"* @_ZN9benchmark17RegisterBenchmarkEPKcPFvRNS_5StateEE(i8*, void (%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"*)*) #10
+declare dso_local ptr @_ZN9benchmark17RegisterBenchmarkEPKcPFvRNS_5StateEE(ptr, ptr) #10
 
 ; Function Attrs: uwtable
 declare dso_local void @__cxx_global_var_init.6() #0 section ".text.startup"
 
 ; Function Attrs: uwtable
-declare dso_local i32 @_ZN12_GLOBAL__N_18AddCasesERKSt16initializer_listINS_8TestCaseEE(%"class.std::initializer_list.56.242.335.428.521.614.800.893.986.1451.1730.2009.2288.2846.3404.3497.3590.3683.3776.3869.4148"* dereferenceable(16)) #0
+declare dso_local i32 @_ZN12_GLOBAL__N_18AddCasesERKSt16initializer_listINS_8TestCaseEE(ptr dereferenceable(16)) #0
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN12_GLOBAL__N_18TestCaseC2EPKc(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, i8*) unnamed_addr #0 align 2
+declare dso_local void @_ZN12_GLOBAL__N_18TestCaseC2EPKc(ptr, ptr) unnamed_addr #0 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZN12_GLOBAL__N_18TestCaseD2Ev(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*) unnamed_addr #11 align 2
+declare dso_local void @_ZN12_GLOBAL__N_18TestCaseD2Ev(ptr) unnamed_addr #11 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_Z13BM_extra_argsRN9benchmark5StateEPKc(%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"* dereferenceable(144), i8*) #0
+declare dso_local void @_Z13BM_extra_argsRN9benchmark5StateEPKc(ptr dereferenceable(144), ptr) #0
 
-declare dso_local void @_ZN9benchmark5State8SetLabelEPKc(%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"*, i8*) #1
+declare dso_local void @_ZN9benchmark5State8SetLabelEPKc(ptr, ptr) #1
 
 ; Function Attrs: uwtable
 declare dso_local i32 @_Z20RegisterFromFunctionv() #0
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt4pairIPKcS1_EC2IS1_S1_Lb1EEERKS1_S5_(%"struct.std::pair.57.243.336.429.522.615.801.894.987.1452.1731.2010.2289.2847.3405.3498.3591.3684.3777.3870.4149"*, i8** dereferenceable(8), i8** dereferenceable(8)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt4pairIPKcS1_EC2IS1_S1_Lb1EEERKS1_S5_(ptr, ptr dereferenceable(8), ptr dereferenceable(8)) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119"* @_ZN9benchmark17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS4_EEEPNS_8internal9BenchmarkES4_OT_DpOT0_(i8*, void (%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"*, i8*)** dereferenceable(8), i8** dereferenceable(8)) #0
+declare dso_local ptr @_ZN9benchmark17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS4_EEEPNS_8internal9BenchmarkES4_OT_DpOT0_(ptr, ptr dereferenceable(8), ptr dereferenceable(8)) #0
 
 ; Function Attrs: uwtable
 declare dso_local void @__cxx_global_var_init.13() #0 section ".text.startup"
@@ -276,79 +276,79 @@ declare dso_local void @__cxx_global_var_init.13() #0 section ".text.startup"
 declare dso_local void @__cxx_global_var_init.14() #0 section ".text.startup"
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN12_GLOBAL__N_18TestCaseC2EPKcS2_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, i8*, i8*) unnamed_addr #0 align 2
+declare dso_local void @_ZN12_GLOBAL__N_18TestCaseC2EPKcS2_(ptr, ptr, ptr) unnamed_addr #0 align 2
 
 ; Function Attrs: uwtable
 declare dso_local void @_Z25TestRegistrationAtRuntimev() #0
 
 ; Function Attrs: uwtable
-declare dso_local %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119"* @_ZN9benchmark17RegisterBenchmarkIR13CustomFixtureEEPNS_8internal9BenchmarkEPKcOT_(i8*, %struct.CustomFixture.58.244.337.430.523.616.802.895.988.1453.1732.2011.2290.2848.3406.3499.3592.3685.3778.3871.4150* dereferenceable(1)) #0
+declare dso_local ptr @_ZN9benchmark17RegisterBenchmarkIR13CustomFixtureEEPNS_8internal9BenchmarkEPKcOT_(ptr, ptr dereferenceable(1)) #0
 
 ; Function Attrs: uwtable
-declare dso_local %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119"* @"_ZN9benchmark17RegisterBenchmarkIRZ25TestRegistrationAtRuntimevE3$_0EEPNS_8internal9BenchmarkEPKcOT_"(i8*, %class.anon.59.245.338.431.524.617.803.896.989.1454.1733.2012.2291.2849.3407.3500.3593.3686.3779.3872.4151* dereferenceable(8)) #0
+declare dso_local ptr @"_ZN9benchmark17RegisterBenchmarkIRZ25TestRegistrationAtRuntimevE3$_0EEPNS_8internal9BenchmarkEPKcOT_"(ptr, ptr dereferenceable(8)) #0
 
 ; Function Attrs: uwtable
 declare dso_local void @_Z10RunTestOnev() #0
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZN12_GLOBAL__N_112TestReporterC2Ev(%"class.(anonymous namespace)::TestReporter.67.253.346.439.532.625.811.904.997.1462.1741.2020.2299.2857.3415.3508.3601.3694.3787.3880.4159"*) unnamed_addr #10 align 2
+declare dso_local void @_ZN12_GLOBAL__N_112TestReporterC2Ev(ptr) unnamed_addr #10 align 2
 
-declare dso_local i64 @_ZN9benchmark22RunSpecifiedBenchmarksEPNS_17BenchmarkReporterE(%"class.benchmark::BenchmarkReporter.60.246.339.432.525.618.804.897.990.1455.1734.2013.2292.2850.3408.3501.3594.3687.3780.3873.4152"*) #1
+declare dso_local i64 @_ZN9benchmark22RunSpecifiedBenchmarksEPNS_17BenchmarkReporterE(ptr) #1
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE5beginEv(%"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100"*) #4 align 2
+declare dso_local ptr @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE5beginEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE5beginEv(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*) #4 align 2
+declare dso_local ptr @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE5beginEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE3endEv(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*) #4 align 2
+declare dso_local ptr @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE3endEv(ptr) #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local zeroext i1 @_ZN9__gnu_cxxneIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(%"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"* dereferenceable(8), %"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"* dereferenceable(8)) #11
+declare dso_local zeroext i1 @_ZN9__gnu_cxxneIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr dereferenceable(8), ptr dereferenceable(8)) #11
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(248) %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNK9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEdeEv(%"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"*) #4 align 2
+declare dso_local dereferenceable(248) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEdeEv(ptr) #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local zeroext i1 @_ZN9__gnu_cxxneIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(%"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"* dereferenceable(8), %"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"* dereferenceable(8)) #11
+declare dso_local zeroext i1 @_ZN9__gnu_cxxneIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr dereferenceable(8), ptr dereferenceable(8)) #11
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE3endEv(%"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100"*) #4 align 2
+declare dso_local ptr @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE3endEv(ptr) #4 align 2
 
 ; Function Attrs: noreturn nounwind
-declare dso_local void @__assert_fail(i8*, i8*, i32, i8*) #12
+declare dso_local void @__assert_fail(ptr, ptr, i32, ptr) #12
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZNK9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEptEv(%"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"*) #4 align 2
+declare dso_local ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEptEv(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNK12_GLOBAL__N_18TestCase8CheckRunERKN9benchmark17BenchmarkReporter3RunE(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) #0 align 2
+declare dso_local void @_ZNK12_GLOBAL__N_18TestCase8CheckRunERKN9benchmark17BenchmarkReporter3RunE(ptr, ptr dereferenceable(248)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"* @_ZN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEppEv(%"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"*) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEppEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"* @_ZN9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEppEv(%"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"*) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEppEv(ptr) #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-define internal zeroext i1 @_ZN9__gnu_cxxeqIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(%"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"* dereferenceable(8) %__lhs, %"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"* dereferenceable(8) %__rhs) #11 {
+define internal zeroext i1 @_ZN9__gnu_cxxeqIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr dereferenceable(8) %__lhs, ptr dereferenceable(8) %__rhs) #11 {
 entry:
-  %0 = load %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"** undef, align 8
-  %cmp = icmp eq %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* null, %0
+  %0 = load ptr, ptr undef, align 8
+  %cmp = icmp eq ptr null, %0
   ret i1 %cmp
 }
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZN12_GLOBAL__N_112TestReporterD2Ev(%"class.(anonymous namespace)::TestReporter.67.253.346.439.532.625.811.904.997.1462.1741.2020.2299.2857.3415.3508.3601.3694.3787.3880.4159"*) unnamed_addr #11 align 2
+declare dso_local void @_ZN12_GLOBAL__N_112TestReporterD2Ev(ptr) unnamed_addr #11 align 2
 
 ; Function Attrs: uwtable
-define dso_local void @_Z10RunTestTwov() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define dso_local void @_Z10RunTestTwov() #0 personality ptr @__gxx_personality_v0 {
 entry:
   br i1 undef, label %for.body, label %for.cond.cleanup
 
 for.cond.cleanup:                                 ; preds = %entry
-  %call47 = call zeroext i1 @_ZN9__gnu_cxxeqIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(%"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"* dereferenceable(8) undef, %"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"* dereferenceable(8) undef) #3
+  %call47 = call zeroext i1 @_ZN9__gnu_cxxeqIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr dereferenceable(8) undef, ptr dereferenceable(8) undef) #3
   ret void
 
 for.body:                                         ; preds = %entry
@@ -357,1199 +357,1199 @@ for.body:                                         ; preds = %entry
 }
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNKSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE4sizeEv(%"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100"*) #4 align 2
+declare dso_local i64 @_ZNKSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE4sizeEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE5clearEv(%"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100"*) #4 align 2
+declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE5clearEv(ptr) #4 align 2
 
 declare dso_local void @_ZN9benchmark25ClearRegisteredBenchmarksEv() #1
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local zeroext i1 @_ZN9__gnu_cxxeqIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(%"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"* dereferenceable(8), %"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"* dereferenceable(8)) #11
+declare dso_local zeroext i1 @_ZN9__gnu_cxxeqIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr dereferenceable(8), ptr dereferenceable(8)) #11
 
 ; Function Attrs: norecurse uwtable
-declare dso_local i32 @main(i32, i8**) #13
+declare dso_local i32 @main(i32, ptr) #13
 
-declare dso_local void @_ZN9benchmark10InitializeEPiPPc(i32*, i8**) #1
+declare dso_local void @_ZN9benchmark10InitializeEPiPPc(ptr, ptr) #1
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EEC2Ev(%"struct.std::_Vector_base.7.193.286.379.472.565.751.844.937.1402.1681.1960.2239.2797.3355.3448.3541.3634.3727.3820.4099"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE12_Vector_implC2Ev(%"struct.std::_Vector_base<(anonymous namespace)::TestCase, std::allocator<(anonymous namespace)::TestCase> >::_Vector_impl.6.192.285.378.471.564.750.843.936.1401.1680.1959.2238.2796.3354.3447.3540.3633.3726.3819.4098"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE12_Vector_implC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSaIN12_GLOBAL__N_18TestCaseEEC2Ev(%"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSaIN12_GLOBAL__N_18TestCaseEEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE17_Vector_impl_dataC2Ev(%"struct.std::_Vector_base<(anonymous namespace)::TestCase, std::allocator<(anonymous namespace)::TestCase> >::_Vector_impl_data.5.191.284.377.470.563.749.842.935.1400.1679.1958.2237.2795.3353.3446.3539.3632.3725.3818.4097"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE17_Vector_impl_dataC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEEC2Ev(%"class.__gnu_cxx::new_allocator.71.257.350.443.536.629.815.908.1001.1466.1745.2024.2303.2861.3419.3512.3605.3698.3791.3884.4163"*) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: alwaysinline nounwind uwtable
-declare dso_local void @_ZN9benchmark5State13StateIteratorC2EPS0_(%"struct.benchmark::State::StateIterator.54.240.333.426.519.612.798.891.984.1449.1728.2007.2286.2844.3402.3495.3588.3681.3774.3867.4146"*, %"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"*) unnamed_addr #7 align 2
+declare dso_local void @_ZN9benchmark5State13StateIteratorC2EPS0_(ptr, ptr) unnamed_addr #7 align 2
 
-declare dso_local void @_ZN9benchmark5State16StartKeepRunningEv(%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"*) #1
+declare dso_local void @_ZN9benchmark5State16StartKeepRunningEv(ptr) #1
 
 ; Function Attrs: alwaysinline nounwind uwtable
-declare dso_local void @_ZN9benchmark5State13StateIteratorC2Ev(%"struct.benchmark::State::StateIterator.54.240.333.426.519.612.798.891.984.1449.1728.2007.2286.2844.3402.3495.3588.3681.3774.3867.4146"*) unnamed_addr #7 align 2
+declare dso_local void @_ZN9benchmark5State13StateIteratorC2Ev(ptr) unnamed_addr #7 align 2
 
 ; Function Attrs: nounwind readnone willreturn
 declare i64 @llvm.expect.i64(i64, i64) #14
 
-declare dso_local void @_ZN9benchmark5State17FinishKeepRunningEv(%"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"*) #1
+declare dso_local void @_ZN9benchmark5State17FinishKeepRunningEv(ptr) #1
 
-declare dso_local void @_ZN9benchmark8internal9BenchmarkC2EPKc(%"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119"*, i8*) unnamed_addr #1
+declare dso_local void @_ZN9benchmark8internal9BenchmarkC2EPKc(ptr, ptr) unnamed_addr #1
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZNKSt16initializer_listIN12_GLOBAL__N_18TestCaseEE5beginEv(%"class.std::initializer_list.56.242.335.428.521.614.800.893.986.1451.1730.2009.2288.2846.3404.3497.3590.3683.3776.3869.4148"*) #4 align 2
+declare dso_local ptr @_ZNKSt16initializer_listIN12_GLOBAL__N_18TestCaseEE5beginEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZNKSt16initializer_listIN12_GLOBAL__N_18TestCaseEE3endEv(%"class.std::initializer_list.56.242.335.428.521.614.800.893.986.1451.1730.2009.2288.2846.3404.3497.3590.3683.3776.3869.4148"*) #4 align 2
+declare dso_local ptr @_ZNKSt16initializer_listIN12_GLOBAL__N_18TestCaseEE3endEv(ptr) #4 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZN12_GLOBAL__N_18TestCaseC2ERKS0_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) unnamed_addr #10 align 2
+declare dso_local void @_ZN12_GLOBAL__N_18TestCaseC2ERKS0_(ptr, ptr dereferenceable(40)) unnamed_addr #10 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE9push_backERKS1_(%"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) #0 align 2
+declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE9push_backERKS1_(ptr, ptr dereferenceable(40)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNKSt16initializer_listIN12_GLOBAL__N_18TestCaseEE4sizeEv(%"class.std::initializer_list.56.242.335.428.521.614.800.893.986.1451.1730.2009.2288.2846.3404.3497.3590.3683.3776.3869.4148"*) #4 align 2
+declare dso_local i64 @_ZNKSt16initializer_listIN12_GLOBAL__N_18TestCaseEE4sizeEv(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* dereferenceable(32)) unnamed_addr #0 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr, ptr dereferenceable(32)) unnamed_addr #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i8* @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_M_local_dataEv(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) #4 align 2
+declare dso_local ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_M_local_dataEv(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN9__gnu_cxx14__alloc_traitsISaIcEcE17_S_select_on_copyERKS1_(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* noalias sret(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"), %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1)) #0 align 2
+declare dso_local void @_ZN9__gnu_cxx14__alloc_traitsISaIcEcE17_S_select_on_copyERKS1_(ptr noalias sret(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"), ptr dereferenceable(1)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(1) %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_get_allocatorEv(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) #4 align 2
+declare dso_local dereferenceable(1) ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_get_allocatorEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_(%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider.1.187.280.373.466.559.745.838.931.1396.1675.1954.2233.2791.3349.3442.3535.3628.3721.3814.4093"*, i8*, %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_(ptr, ptr, ptr dereferenceable(1)) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i8*, i8*) #0 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_(ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i8* @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7_M_dataEv(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) #4 align 2
+declare dso_local ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7_M_dataEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) #4 align 2
+declare dso_local i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-define available_externally dso_local void @_ZNSaIcED2Ev(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* %this) unnamed_addr #4 align 2 {
+define available_externally dso_local void @_ZNSaIcED2Ev(ptr %this) unnamed_addr #4 align 2 {
 entry:
   ret void
 }
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i8* @_ZNSt14pointer_traitsIPcE10pointer_toERc(i8* dereferenceable(1)) #4 align 2
+declare dso_local ptr @_ZNSt14pointer_traitsIPcE10pointer_toERc(ptr dereferenceable(1)) #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local i8* @_ZSt9addressofIcEPT_RS0_(i8* dereferenceable(1)) #11
+declare dso_local ptr @_ZSt9addressofIcEPT_RS0_(ptr dereferenceable(1)) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local i8* @_ZSt11__addressofIcEPT_RS0_(i8* dereferenceable(1)) #11
+declare dso_local ptr @_ZSt11__addressofIcEPT_RS0_(ptr dereferenceable(1)) #11
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt16allocator_traitsISaIcEE37select_on_container_copy_constructionERKS0_(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* noalias sret(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"), %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1)) #4 align 2
+declare dso_local void @_ZNSt16allocator_traitsISaIcEE37select_on_container_copy_constructionERKS0_(ptr noalias sret(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"), ptr dereferenceable(1)) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSaIcEC2ERKS_(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"*, %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSaIcEC2ERKS_(ptr, ptr dereferenceable(1)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIcEC2ERKS1_(%"class.__gnu_cxx::new_allocator.1.73.259.352.445.538.631.817.910.1003.1468.1747.2026.2305.2863.3421.3514.3607.3700.3793.3886.4165"*, %"class.__gnu_cxx::new_allocator.1.73.259.352.445.538.631.817.910.1003.1468.1747.2026.2305.2863.3421.3514.3607.3700.3793.3886.4165"* dereferenceable(1)) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIcEC2ERKS1_(ptr, ptr dereferenceable(1)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(1) %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* @_ZSt4moveIRSaIcEEONSt16remove_referenceIT_E4typeEOS3_(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1)) #4
+declare dso_local dereferenceable(1) ptr @_ZSt4moveIRSaIcEEONSt16remove_referenceIT_E4typeEOS3_(ptr dereferenceable(1)) #4
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIcED2Ev(%"class.__gnu_cxx::new_allocator.1.73.259.352.445.538.631.817.910.1003.1468.1747.2026.2305.2863.3421.3514.3607.3700.3793.3886.4165"*) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIcED2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_construct_auxIPcEEvT_S7_St12__false_type(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i8*, i8*) #0 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_construct_auxIPcEEvT_S7_St12__false_type(ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i8*, i8*) #0 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag(ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local zeroext i1 @_ZN9__gnu_cxx17__is_null_pointerIcEEbPT_(i8*) #11
+declare dso_local zeroext i1 @_ZN9__gnu_cxx17__is_null_pointerIcEEbPT_(ptr) #11
 
 ; Function Attrs: noreturn
-declare dso_local void @_ZSt19__throw_logic_errorPKc(i8*) #15
+declare dso_local void @_ZSt19__throw_logic_errorPKc(ptr) #15
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local i64 @_ZSt8distanceIPcENSt15iterator_traitsIT_E15
diff erence_typeES2_S2_(i8*, i8*) #10
+declare dso_local i64 @_ZSt8distanceIPcENSt15iterator_traitsIT_E15
diff erence_typeES2_S2_(ptr, ptr) #10
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7_M_dataEPc(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i8*) #4 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7_M_dataEPc(ptr, ptr) #4 align 2
 
-declare dso_local i8* @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i64* dereferenceable(8), i64) #1
+declare dso_local ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm(ptr, ptr dereferenceable(8), i64) #1
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEm(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i64) #4 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEm(ptr, i64) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_S_copy_charsEPcS5_S5_(i8*, i8*, i8*) #4 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_S_copy_charsEPcS5_S5_(ptr, ptr, ptr) #4 align 2
 
-declare dso_local i8* @__cxa_begin_catch(i8*)
+declare dso_local ptr @__cxa_begin_catch(ptr)
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) #0 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv(ptr) #0 align 2
 
 declare dso_local void @__cxa_rethrow()
 
 declare dso_local void @__cxa_end_catch()
 
 ; Function Attrs: noinline noreturn nounwind
-declare hidden void @__clang_call_terminate(i8*) #16
+declare hidden void @__clang_call_terminate(ptr) #16
 
 declare dso_local void @_ZSt9terminatev()
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_M_set_lengthEm(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i64) #0 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_M_set_lengthEm(ptr, i64) #0 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local i64 @_ZSt10__distanceIPcENSt15iterator_traitsIT_E15
diff erence_typeES2_S2_St26random_access_iterator_tag(i8*, i8*) #11
+declare dso_local i64 @_ZSt10__distanceIPcENSt15iterator_traitsIT_E15
diff erence_typeES2_S2_St26random_access_iterator_tag(ptr, ptr) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZSt19__iterator_categoryIPcENSt15iterator_traitsIT_E17iterator_categoryERKS2_(i8** dereferenceable(8)) #11
+declare dso_local void @_ZSt19__iterator_categoryIPcENSt15iterator_traitsIT_E17iterator_categoryERKS2_(ptr dereferenceable(8)) #11
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7_S_copyEPcPKcm(i8*, i8*, i64) #0 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7_S_copyEPcPKcm(ptr, ptr, i64) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt11char_traitsIcE6assignERcRKc(i8* dereferenceable(1), i8* dereferenceable(1)) #4 align 2
+declare dso_local void @_ZNSt11char_traitsIcE6assignERcRKc(ptr dereferenceable(1), ptr dereferenceable(1)) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i8* @_ZNSt11char_traitsIcE4copyEPcPKcm(i8*, i8*, i64) #4 align 2
+declare dso_local ptr @_ZNSt11char_traitsIcE4copyEPcPKcm(ptr, ptr, i64) #4 align 2
 
 ; Function Attrs: argmemonly nounwind willreturn
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #5
+declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #5
 
 ; Function Attrs: uwtable
-declare dso_local zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_is_localEv(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) #0 align 2
+declare dso_local zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_is_localEv(ptr) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_destroyEm(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i64) #4 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_destroyEm(ptr, i64) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i8* @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_M_local_dataEv(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) #4 align 2
+declare dso_local ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_M_local_dataEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i8* @_ZNSt14pointer_traitsIPKcE10pointer_toERS0_(i8* dereferenceable(1)) #4 align 2
+declare dso_local ptr @_ZNSt14pointer_traitsIPKcE10pointer_toERS0_(ptr dereferenceable(1)) #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local i8* @_ZSt9addressofIKcEPT_RS1_(i8* dereferenceable(1)) #11
+declare dso_local ptr @_ZSt9addressofIKcEPT_RS1_(ptr dereferenceable(1)) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local i8* @_ZSt11__addressofIKcEPT_RS1_(i8* dereferenceable(1)) #11
+declare dso_local ptr @_ZSt11__addressofIKcEPT_RS1_(ptr dereferenceable(1)) #11
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt16allocator_traitsISaIcEE10deallocateERS0_Pcm(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1), i8*, i64) #0 align 2
+declare dso_local void @_ZNSt16allocator_traitsISaIcEE10deallocateERS0_Pcm(ptr dereferenceable(1), ptr, i64) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(1) %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_get_allocatorEv(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) #4 align 2
+declare dso_local dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_get_allocatorEv(ptr) #4 align 2
 
-declare dso_local void @__cxa_call_unexpected(i8*)
+declare dso_local void @__cxa_call_unexpected(ptr)
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcm(%"class.__gnu_cxx::new_allocator.1.73.259.352.445.538.631.817.910.1003.1468.1747.2026.2305.2863.3421.3514.3607.3700.3793.3886.4165"*, i8*, i64) #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcm(ptr, ptr, i64) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_lengthEm(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i64) #4 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_lengthEm(ptr, i64) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE9constructIS1_JRKS1_EEEvRS2_PT_DpOT0_(%"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1), %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) #0 align 2
+declare dso_local void @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE9constructIS1_JRKS1_EEEvRS2_PT_DpOT0_(ptr dereferenceable(1), ptr, ptr dereferenceable(40)) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_(%"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) #0 align 2
+declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_(ptr, ptr, ptr dereferenceable(40)) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE9constructIS2_JRKS2_EEEvPT_DpOT0_(%"class.__gnu_cxx::new_allocator.71.257.350.443.536.629.815.908.1001.1466.1745.2024.2303.2861.3419.3512.3605.3698.3791.3884.4163"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) #0 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE9constructIS2_JRKS2_EEEvPT_DpOT0_(ptr, ptr, ptr dereferenceable(40)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(40) %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZSt7forwardIRKN12_GLOBAL__N_18TestCaseEEOT_RNSt16remove_referenceIS4_E4typeE(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) #4
+declare dso_local dereferenceable(40) ptr @_ZSt7forwardIRKN12_GLOBAL__N_18TestCaseEEOT_RNSt16remove_referenceIS4_E4typeE(ptr dereferenceable(40)) #4
 
 ; Function Attrs: uwtable
-declare dso_local i64 @_ZNKSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE12_M_check_lenEmPKc(%"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100"*, i64, i8*) #0 align 2
+declare dso_local i64 @_ZNKSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE12_M_check_lenEmPKc(ptr, i64, ptr) #0 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-define internal i64 @_ZN9__gnu_cxxmiIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15
diff erence_typeERKSA_SD_(%"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"* dereferenceable(8) %__lhs, %"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"* dereferenceable(8) %__rhs) #11 {
+define internal i64 @_ZN9__gnu_cxxmiIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15
diff erence_typeERKSA_SD_(ptr dereferenceable(8) %__lhs, ptr dereferenceable(8) %__rhs) #11 {
 entry:
   ret i64 undef
 }
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE11_M_allocateEm(%"struct.std::_Vector_base.7.193.286.379.472.565.751.844.937.1402.1681.1960.2239.2797.3355.3448.3541.3634.3727.3820.4099"*, i64) #0 align 2
+declare dso_local ptr @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE11_M_allocateEm(ptr, i64) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1)) #4 align 2
+declare dso_local ptr @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_(ptr, ptr, ptr, ptr dereferenceable(1)) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-define internal dereferenceable(8) %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"** @_ZNK9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEE4baseEv(%"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"* %this) #4 align 2 {
+define internal dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEE4baseEv(ptr %this) #4 align 2 {
 entry:
-  ret %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"** undef
+  ret ptr undef
 }
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(1) %"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base.7.193.286.379.472.565.751.844.937.1402.1681.1960.2239.2797.3355.3448.3541.3634.3727.3820.4099"*) #4 align 2
+declare dso_local dereferenceable(1) ptr @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE19_M_get_Tp_allocatorEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE7destroyIS1_EEvRS2_PT_(%"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1), %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*) #4 align 2
+declare dso_local void @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE7destroyIS1_EEvRS2_PT_(ptr dereferenceable(1), ptr) #4 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZSt8_DestroyIPN12_GLOBAL__N_18TestCaseES1_EvT_S3_RSaIT0_E(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1)) #10
+declare dso_local void @_ZSt8_DestroyIPN12_GLOBAL__N_18TestCaseES1_EvT_S3_RSaIT0_E(ptr, ptr, ptr dereferenceable(1)) #10
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE13_M_deallocateEPS1_m(%"struct.std::_Vector_base.7.193.286.379.472.565.751.844.937.1402.1681.1960.2239.2797.3355.3448.3541.3634.3727.3820.4099"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, i64) #0 align 2
+declare dso_local void @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE13_M_deallocateEPS1_m(ptr, ptr, i64) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNKSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE8max_sizeEv(%"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100"*) #4 align 2
+declare dso_local i64 @_ZNKSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE8max_sizeEv(ptr) #4 align 2
 
 ; Function Attrs: noreturn
-declare dso_local void @_ZSt20__throw_length_errorPKc(i8*) #15
+declare dso_local void @_ZSt20__throw_length_errorPKc(ptr) #15
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local dereferenceable(8) i64* @_ZSt3maxImERKT_S2_S2_(i64* dereferenceable(8), i64* dereferenceable(8)) #11
+declare dso_local dereferenceable(8) ptr @_ZSt3maxImERKT_S2_S2_(ptr dereferenceable(8), ptr dereferenceable(8)) #11
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE11_S_max_sizeERKS2_(%"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1)) #4 align 2
+declare dso_local i64 @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE11_S_max_sizeERKS2_(ptr dereferenceable(1)) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(1) %"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* @_ZNKSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base.7.193.286.379.472.565.751.844.937.1402.1681.1960.2239.2797.3355.3448.3541.3634.3727.3820.4099"*) #4 align 2
+declare dso_local dereferenceable(1) ptr @_ZNKSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EE19_M_get_Tp_allocatorEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE8max_sizeERKS2_(%"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1)) #4 align 2
+declare dso_local i64 @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE8max_sizeERKS2_(ptr dereferenceable(1)) #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local dereferenceable(8) i64* @_ZSt3minImERKT_S2_S2_(i64* dereferenceable(8), i64* dereferenceable(8)) #11
+declare dso_local dereferenceable(8) ptr @_ZSt3minImERKT_S2_S2_(ptr dereferenceable(8), ptr dereferenceable(8)) #11
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNK9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE8max_sizeEv(%"class.__gnu_cxx::new_allocator.71.257.350.443.536.629.815.908.1001.1466.1745.2024.2303.2861.3419.3512.3605.3698.3791.3884.4163"*) #4 align 2
+declare dso_local i64 @_ZNK9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE8max_sizeEv(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE8allocateERS2_m(%"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1), i64) #0 align 2
+declare dso_local ptr @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE8allocateERS2_m(ptr dereferenceable(1), i64) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.71.257.350.443.536.629.815.908.1001.1466.1745.2024.2303.2861.3419.3512.3605.3698.3791.3884.4163"*, i64, i8*) #0 align 2
+declare dso_local ptr @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE8allocateEmPKv(ptr, i64, ptr) #0 align 2
 
 ; Function Attrs: noreturn
 declare dso_local void @_ZSt17__throw_bad_allocv() #15
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE14_S_do_relocateEPS1_S4_S4_RS2_St17integral_constantIbLb1EE(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1)) #4 align 2
+declare dso_local ptr @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE14_S_do_relocateEPS1_S4_S4_RS2_St17integral_constantIbLb1EE(ptr, ptr, ptr, ptr dereferenceable(1)) #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZSt12__relocate_aIPN12_GLOBAL__N_18TestCaseES2_SaIS1_EET0_T_S5_S4_RT1_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1)) #11
+declare dso_local ptr @_ZSt12__relocate_aIPN12_GLOBAL__N_18TestCaseES2_SaIS1_EET0_T_S5_S4_RT1_(ptr, ptr, ptr, ptr dereferenceable(1)) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZSt14__relocate_a_1IPN12_GLOBAL__N_18TestCaseES2_SaIS1_EET0_T_S5_S4_RT1_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1)) #11
+declare dso_local ptr @_ZSt14__relocate_a_1IPN12_GLOBAL__N_18TestCaseES2_SaIS1_EET0_T_S5_S4_RT1_(ptr, ptr, ptr, ptr dereferenceable(1)) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZSt12__niter_baseIPN12_GLOBAL__N_18TestCaseEET_S3_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*) #11
+declare dso_local ptr @_ZSt12__niter_baseIPN12_GLOBAL__N_18TestCaseEET_S3_(ptr) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZSt19__relocate_object_aIN12_GLOBAL__N_18TestCaseES1_SaIS1_EEvPT_PT0_RT1_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1)) #11
+declare dso_local void @_ZSt19__relocate_object_aIN12_GLOBAL__N_18TestCaseES1_SaIS1_EEvPT_PT0_RT1_(ptr, ptr, ptr dereferenceable(1)) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZSt11__addressofIN12_GLOBAL__N_18TestCaseEEPT_RS2_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) #11
+declare dso_local ptr @_ZSt11__addressofIN12_GLOBAL__N_18TestCaseEEPT_RS2_(ptr dereferenceable(40)) #11
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE9constructIS1_JS1_EEEvRS2_PT_DpOT0_(%"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1), %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) #4 align 2
+declare dso_local void @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE9constructIS1_JS1_EEEvRS2_PT_DpOT0_(ptr dereferenceable(1), ptr, ptr dereferenceable(40)) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(40) %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZSt4moveIRN12_GLOBAL__N_18TestCaseEEONSt16remove_referenceIT_E4typeEOS4_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) #4
+declare dso_local dereferenceable(40) ptr @_ZSt4moveIRN12_GLOBAL__N_18TestCaseEEONSt16remove_referenceIT_E4typeEOS4_(ptr dereferenceable(40)) #4
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE9constructIS2_JS2_EEEvPT_DpOT0_(%"class.__gnu_cxx::new_allocator.71.257.350.443.536.629.815.908.1001.1466.1745.2024.2303.2861.3419.3512.3605.3698.3791.3884.4163"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE9constructIS2_JS2_EEEvPT_DpOT0_(ptr, ptr, ptr dereferenceable(40)) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(40) %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* @_ZSt7forwardIN12_GLOBAL__N_18TestCaseEEOT_RNSt16remove_referenceIS2_E4typeE(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) #4
+declare dso_local dereferenceable(40) ptr @_ZSt7forwardIN12_GLOBAL__N_18TestCaseEEOT_RNSt16remove_referenceIS2_E4typeE(ptr dereferenceable(40)) #4
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZN12_GLOBAL__N_18TestCaseC2EOS0_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"* dereferenceable(40)) unnamed_addr #11 align 2
+declare dso_local void @_ZN12_GLOBAL__N_18TestCaseC2EOS0_(ptr, ptr dereferenceable(40)) unnamed_addr #11 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* dereferenceable(32)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_(ptr, ptr dereferenceable(32)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE7destroyIS2_EEvPT_(%"class.__gnu_cxx::new_allocator.71.257.350.443.536.629.815.908.1001.1466.1745.2024.2303.2861.3419.3512.3605.3698.3791.3884.4163"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*) #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE7destroyIS2_EEvPT_(ptr, ptr) #4 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZSt8_DestroyIPN12_GLOBAL__N_18TestCaseEEvT_S3_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*) #10
+declare dso_local void @_ZSt8_DestroyIPN12_GLOBAL__N_18TestCaseEEvT_S3_(ptr, ptr) #10
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt12_Destroy_auxILb0EE9__destroyIPN12_GLOBAL__N_18TestCaseEEEvT_S5_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*) #0 align 2
+declare dso_local void @_ZNSt12_Destroy_auxILb0EE9__destroyIPN12_GLOBAL__N_18TestCaseEEEvT_S5_(ptr, ptr) #0 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZSt8_DestroyIN12_GLOBAL__N_18TestCaseEEvPT_(%"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*) #11
+declare dso_local void @_ZSt8_DestroyIN12_GLOBAL__N_18TestCaseEEvPT_(ptr) #11
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE10deallocateERS2_PS1_m(%"class.std::allocator.70.256.349.442.535.628.814.907.1000.1465.1744.2023.2302.2860.3418.3511.3604.3697.3790.3883.4162"* dereferenceable(1), %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, i64) #0 align 2
+declare dso_local void @_ZNSt16allocator_traitsISaIN12_GLOBAL__N_18TestCaseEEE10deallocateERS2_PS1_m(ptr dereferenceable(1), ptr, i64) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE10deallocateEPS2_m(%"class.__gnu_cxx::new_allocator.71.257.350.443.536.629.815.908.1001.1466.1745.2024.2303.2861.3419.3512.3605.3698.3791.3884.4163"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*, i64) #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEE10deallocateEPS2_m(ptr, ptr, i64) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSaIcEC2Ev(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSaIcEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcRKS3_(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i8*, %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1)) unnamed_addr #0 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcRKS3_(ptr, ptr, ptr dereferenceable(1)) unnamed_addr #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIcEC2Ev(%"class.__gnu_cxx::new_allocator.1.73.259.352.445.538.631.817.910.1003.1468.1747.2026.2305.2863.3421.3514.3607.3700.3793.3886.4165"*) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIcEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_(%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider.1.187.280.373.466.559.745.838.931.1396.1675.1954.2233.2791.3349.3442.3535.3628.3721.3814.4093"*, i8*, %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_(ptr, ptr, ptr dereferenceable(1)) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i8*, i8*) #0 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_(ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNSt11char_traitsIcE6lengthEPKc(i8*) #4 align 2
+declare dso_local i64 @_ZNSt11char_traitsIcE6lengthEPKc(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_construct_auxIPKcEEvT_S8_St12__false_type(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i8*, i8*) #0 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_construct_auxIPKcEEvT_S8_St12__false_type(ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i8*, i8*) #0 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag(ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local zeroext i1 @_ZN9__gnu_cxx17__is_null_pointerIKcEEbPT_(i8*) #11
+declare dso_local zeroext i1 @_ZN9__gnu_cxx17__is_null_pointerIKcEEbPT_(ptr) #11
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local i64 @_ZSt8distanceIPKcENSt15iterator_traitsIT_E15
diff erence_typeES3_S3_(i8*, i8*) #10
+declare dso_local i64 @_ZSt8distanceIPKcENSt15iterator_traitsIT_E15
diff erence_typeES3_S3_(ptr, ptr) #10
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_S_copy_charsEPcPKcS7_(i8*, i8*, i8*) #4 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_S_copy_charsEPcPKcS7_(ptr, ptr, ptr) #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local i64 @_ZSt10__distanceIPKcENSt15iterator_traitsIT_E15
diff erence_typeES3_S3_St26random_access_iterator_tag(i8*, i8*) #11
+declare dso_local i64 @_ZSt10__distanceIPKcENSt15iterator_traitsIT_E15
diff erence_typeES3_S3_St26random_access_iterator_tag(ptr, ptr) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZSt19__iterator_categoryIPKcENSt15iterator_traitsIT_E17iterator_categoryERKS3_(i8** dereferenceable(8)) #11
+declare dso_local void @_ZSt19__iterator_categoryIPKcENSt15iterator_traitsIT_E17iterator_categoryERKS3_(ptr dereferenceable(8)) #11
 
 ; Function Attrs: nounwind
-declare dso_local i64 @strlen(i8*) #2
+declare dso_local i64 @strlen(ptr) #2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN9benchmark15ConsoleReporterC2ENS0_13OutputOptionsE(%"class.benchmark::ConsoleReporter.74.260.353.446.539.632.818.911.1004.1469.1748.2027.2306.2864.3422.3515.3608.3701.3794.3887.4166"*, i32) unnamed_addr #0 align 2
+declare dso_local void @_ZN9benchmark15ConsoleReporterC2ENS0_13OutputOptionsE(ptr, i32) unnamed_addr #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EEC2Ev(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EEC2Ev(ptr) unnamed_addr #4 align 2
 
-declare dso_local zeroext i1 @_ZN9benchmark15ConsoleReporter13ReportContextERKNS_17BenchmarkReporter7ContextE(%"class.benchmark::ConsoleReporter.74.260.353.446.539.632.818.911.1004.1469.1748.2027.2306.2864.3422.3515.3608.3701.3794.3887.4166"*, %"struct.benchmark::BenchmarkReporter::Context.75.261.354.447.540.633.819.912.1005.1470.1749.2028.2307.2865.3423.3516.3609.3702.3795.3888.4167"* dereferenceable(32)) unnamed_addr #1
+declare dso_local zeroext i1 @_ZN9benchmark15ConsoleReporter13ReportContextERKNS_17BenchmarkReporter7ContextE(ptr, ptr dereferenceable(32)) unnamed_addr #1
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN12_GLOBAL__N_112TestReporter10ReportRunsERKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS4_EE(%"class.(anonymous namespace)::TestReporter.67.253.346.439.532.625.811.904.997.1462.1741.2020.2299.2857.3415.3508.3601.3694.3787.3880.4159"*, %"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"* dereferenceable(24)) unnamed_addr #0 align 2
+declare dso_local void @_ZN12_GLOBAL__N_112TestReporter10ReportRunsERKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS4_EE(ptr, ptr dereferenceable(24)) unnamed_addr #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9benchmark17BenchmarkReporter8FinalizeEv(%"class.benchmark::BenchmarkReporter.60.246.339.432.525.618.804.897.990.1455.1734.2013.2292.2850.3408.3501.3594.3687.3780.3873.4152"*) unnamed_addr #4 align 2
+declare dso_local void @_ZN9benchmark17BenchmarkReporter8FinalizeEv(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZN12_GLOBAL__N_112TestReporterD0Ev(%"class.(anonymous namespace)::TestReporter.67.253.346.439.532.625.811.904.997.1462.1741.2020.2299.2857.3415.3508.3601.3694.3787.3880.4159"*) unnamed_addr #11 align 2
+declare dso_local void @_ZN12_GLOBAL__N_112TestReporterD0Ev(ptr) unnamed_addr #11 align 2
 
-declare dso_local void @_ZN9benchmark15ConsoleReporter12PrintRunDataERKNS_17BenchmarkReporter3RunE(%"class.benchmark::ConsoleReporter.74.260.353.446.539.632.818.911.1004.1469.1748.2027.2306.2864.3422.3515.3608.3701.3794.3887.4166"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) unnamed_addr #1
+declare dso_local void @_ZN9benchmark15ConsoleReporter12PrintRunDataERKNS_17BenchmarkReporter3RunE(ptr, ptr dereferenceable(248)) unnamed_addr #1
 
-declare dso_local void @_ZN9benchmark15ConsoleReporter11PrintHeaderERKNS_17BenchmarkReporter3RunE(%"class.benchmark::ConsoleReporter.74.260.353.446.539.632.818.911.1004.1469.1748.2027.2306.2864.3422.3515.3608.3701.3794.3887.4166"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) unnamed_addr #1
+declare dso_local void @_ZN9benchmark15ConsoleReporter11PrintHeaderERKNS_17BenchmarkReporter3RunE(ptr, ptr dereferenceable(248)) unnamed_addr #1
 
-declare dso_local void @_ZN9benchmark17BenchmarkReporterC2Ev(%"class.benchmark::BenchmarkReporter.60.246.339.432.525.618.804.897.990.1455.1734.2013.2292.2850.3408.3501.3594.3687.3780.3873.4152"*) unnamed_addr #1
+declare dso_local void @_ZN9benchmark17BenchmarkReporterC2Ev(ptr) unnamed_addr #1
 
 ; Function Attrs: argmemonly nounwind willreturn writeonly
-declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #17
+declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #17
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2Ev(%"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEC2Ev(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEC2Ev(%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Rb_tree_impl.48.234.327.420.513.606.792.885.978.1443.1722.2001.2280.2838.3396.3489.3582.3675.3768.3861.4140"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEC2Ev(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2Ev(%"struct.std::_Rb_tree_key_compare.45.231.324.417.510.603.789.882.975.1440.1719.1998.2277.2835.3393.3486.3579.3672.3765.3858.4137"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt15_Rb_tree_headerC2Ev(%"struct.std::_Rb_tree_header.47.233.326.419.512.605.791.884.977.1442.1721.2000.2279.2837.3395.3488.3581.3674.3767.3860.4139"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt15_Rb_tree_headerC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEC2Ev(%"class.__gnu_cxx::new_allocator.9.77.263.356.449.542.635.821.914.1007.1472.1751.2030.2309.2867.3425.3518.3611.3704.3797.3890.4169"*) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt15_Rb_tree_header8_M_resetEv(%"struct.std::_Rb_tree_header.47.233.326.419.512.605.791.884.977.1442.1721.2000.2279.2837.3395.3488.3581.3674.3767.3860.4139"*) #4 align 2
+declare dso_local void @_ZNSt15_Rb_tree_header8_M_resetEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EEC2Ev(%"struct.std::_Vector_base.28.65.251.344.437.530.623.809.902.995.1460.1739.2018.2297.2855.3413.3506.3599.3692.3785.3878.4157"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE12_Vector_implC2Ev(%"struct.std::_Vector_base<benchmark::BenchmarkReporter::Run, std::allocator<benchmark::BenchmarkReporter::Run> >::_Vector_impl.64.250.343.436.529.622.808.901.994.1459.1738.2017.2296.2854.3412.3505.3598.3691.3784.3877.4156"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE12_Vector_implC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSaIN9benchmark17BenchmarkReporter3RunEEC2Ev(%"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSaIN9benchmark17BenchmarkReporter3RunEEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE17_Vector_impl_dataC2Ev(%"struct.std::_Vector_base<benchmark::BenchmarkReporter::Run, std::allocator<benchmark::BenchmarkReporter::Run> >::_Vector_impl_data.63.249.342.435.528.621.807.900.993.1458.1737.2016.2295.2853.3411.3504.3597.3690.3783.3876.4155"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE17_Vector_impl_dataC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN9benchmark17BenchmarkReporter3RunEEC2Ev(%"class.__gnu_cxx::new_allocator.30.79.265.358.451.544.637.823.916.1009.1474.1753.2032.2311.2869.3427.3520.3613.3706.3799.3892.4171"*) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN9benchmark17BenchmarkReporter3RunEEC2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE6insertIN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEvEENS7_IPS2_S4_EESA_T_SD_(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #0 align 2
+declare dso_local ptr @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE6insertIN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEvEENS7_IPS2_S4_EESA_T_SD_(ptr, ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEC2IPS3_EERKNS0_IT_NS_11__enable_ifIXsr3std10__are_sameISC_SB_EE7__valueES8_E6__typeEEE(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"*, %"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"* dereferenceable(8)) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEC2IPS3_EERKNS0_IT_NS_11__enable_ifIXsr3std10__are_sameISC_SB_EE7__valueES8_E6__typeEEE(ptr, ptr dereferenceable(8)) unnamed_addr #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt5beginISt6vectorIN9benchmark17BenchmarkReporter3RunESaIS3_EEEDTcldtfp_5beginEERKT_(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"* dereferenceable(24)) #11
+declare dso_local ptr @_ZSt5beginISt6vectorIN9benchmark17BenchmarkReporter3RunESaIS3_EEEDTcldtfp_5beginEERKT_(ptr dereferenceable(24)) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt3endISt6vectorIN9benchmark17BenchmarkReporter3RunESaIS3_EEEDTcldtfp_3endEERKT_(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"* dereferenceable(24)) #11
+declare dso_local ptr @_ZSt3endISt6vectorIN9benchmark17BenchmarkReporter3RunESaIS3_EEEDTcldtfp_3endEERKT_(ptr dereferenceable(24)) #11
 
-declare dso_local void @_ZN9benchmark15ConsoleReporter10ReportRunsERKSt6vectorINS_17BenchmarkReporter3RunESaIS3_EE(%"class.benchmark::ConsoleReporter.74.260.353.446.539.632.818.911.1004.1469.1748.2027.2306.2864.3422.3515.3608.3701.3794.3887.4166"*, %"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"* dereferenceable(24)) unnamed_addr #1
+declare dso_local void @_ZN9benchmark15ConsoleReporter10ReportRunsERKSt6vectorINS_17BenchmarkReporter3RunESaIS3_EE(ptr, ptr dereferenceable(24)) unnamed_addr #1
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local i64 @_ZN9__gnu_cxxmiIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15
diff erence_typeERKSC_SF_(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"* dereferenceable(8), %"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"* dereferenceable(8)) #11
+declare dso_local i64 @_ZN9__gnu_cxxmiIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15
diff erence_typeERKSC_SF_(ptr dereferenceable(8), ptr dereferenceable(8)) #11
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE6cbeginEv(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*) #4 align 2
+declare dso_local ptr @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE6cbeginEv(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE18_M_insert_dispatchIN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEEEvNS7_IPS2_S4_EET_SD_St12__false_type(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #0 align 2
+declare dso_local void @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE18_M_insert_dispatchIN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEEEvNS7_IPS2_S4_EET_SD_St12__false_type(ptr, ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNK9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEplEl(%"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"*, i64) #4 align 2
+declare dso_local ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEplEl(ptr, i64) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"** @_ZNK9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEE4baseEv(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"*) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEE4baseEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEC2ERKS5_(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"** dereferenceable(8)) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEC2ERKS5_(ptr, ptr dereferenceable(8)) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEEEvNS7_IPS2_S4_EET_SD_St20forward_iterator_tag(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #0 align 2
+declare dso_local void @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEEEvNS7_IPS2_S4_EET_SD_St20forward_iterator_tag(ptr, ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZSt19__iterator_categoryIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEENSt15iterator_traitsIT_E17iterator_categoryERKSC_(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"* dereferenceable(8)) #11
+declare dso_local void @_ZSt19__iterator_categoryIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEENSt15iterator_traitsIT_E17iterator_categoryERKSC_(ptr dereferenceable(8)) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local zeroext i1 @_ZN9__gnu_cxxneIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"* dereferenceable(8), %"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"* dereferenceable(8)) #11
+declare dso_local zeroext i1 @_ZN9__gnu_cxxneIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr dereferenceable(8), ptr dereferenceable(8)) #11
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local i64 @_ZSt8distanceIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEENSt15iterator_traitsIT_E15
diff erence_typeESC_SC_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local i64 @_ZSt8distanceIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEENSt15iterator_traitsIT_E15
diff erence_typeESC_SC_(ptr, ptr) #10
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local i64 @_ZN9__gnu_cxxmiIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15
diff erence_typeERKSB_SE_(%"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"* dereferenceable(8), %"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"* dereferenceable(8)) #11
+declare dso_local i64 @_ZN9__gnu_cxxmiIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15
diff erence_typeERKSB_SE_(ptr dereferenceable(8), ptr dereferenceable(8)) #11
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt22__uninitialized_move_aIPN9benchmark17BenchmarkReporter3RunES3_SaIS2_EET0_T_S6_S5_RT1_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"* dereferenceable(1)) #10
+declare dso_local ptr @_ZSt22__uninitialized_move_aIPN9benchmark17BenchmarkReporter3RunES3_SaIS2_EET0_T_S6_S5_RT1_(ptr, ptr, ptr, ptr dereferenceable(1)) #10
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(1) %"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"* @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base.28.65.251.344.437.530.623.809.902.995.1460.1739.2018.2297.2855.3413.3506.3599.3692.3785.3878.4157"*) #4 align 2
+declare dso_local dereferenceable(1) ptr @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE19_M_get_Tp_allocatorEv(ptr) #4 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt13move_backwardIPN9benchmark17BenchmarkReporter3RunES3_ET0_T_S5_S4_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local ptr @_ZSt13move_backwardIPN9benchmark17BenchmarkReporter3RunES3_ET0_T_S5_S4_(ptr, ptr, ptr) #10
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"** @_ZNK9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEE4baseEv(%"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"*) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEE4baseEv(ptr) #4 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEENS1_IPS4_S9_EEET0_T_SE_SD_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local ptr @_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEENS1_IPS4_S9_EEET0_T_SE_SD_(ptr, ptr, ptr) #10
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEmEvRT_T0_(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"* dereferenceable(8), i64) #10
+declare dso_local void @_ZSt7advanceIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEmEvRT_T0_(ptr dereferenceable(8), i64) #10
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEPS4_S4_ET0_T_SD_SC_RSaIT1_E(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"* dereferenceable(1)) #10
+declare dso_local ptr @_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEPS4_S4_ET0_T_SD_SC_RSaIT1_E(ptr, ptr, ptr, ptr dereferenceable(1)) #10
 
 ; Function Attrs: uwtable
-declare dso_local i64 @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE12_M_check_lenEmPKc(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*, i64, i8*) #0 align 2
+declare dso_local i64 @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE12_M_check_lenEmPKc(ptr, i64, ptr) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE11_M_allocateEm(%"struct.std::_Vector_base.28.65.251.344.437.530.623.809.902.995.1460.1739.2018.2297.2855.3413.3506.3599.3692.3785.3878.4157"*, i64) #0 align 2
+declare dso_local ptr @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE11_M_allocateEm(ptr, i64) #0 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt34__uninitialized_move_if_noexcept_aIPN9benchmark17BenchmarkReporter3RunES3_SaIS2_EET0_T_S6_S5_RT1_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"* dereferenceable(1)) #10
+declare dso_local ptr @_ZSt34__uninitialized_move_if_noexcept_aIPN9benchmark17BenchmarkReporter3RunES3_SaIS2_EET0_T_S6_S5_RT1_(ptr, ptr, ptr, ptr dereferenceable(1)) #10
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZSt8_DestroyIPN9benchmark17BenchmarkReporter3RunES2_EvT_S4_RSaIT0_E(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"* dereferenceable(1)) #10
+declare dso_local void @_ZSt8_DestroyIPN9benchmark17BenchmarkReporter3RunES2_EvT_S4_RSaIT0_E(ptr, ptr, ptr dereferenceable(1)) #10
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE13_M_deallocateEPS2_m(%"struct.std::_Vector_base.28.65.251.344.437.530.623.809.902.995.1460.1739.2018.2297.2855.3413.3506.3599.3692.3785.3878.4157"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, i64) #0 align 2
+declare dso_local void @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE13_M_deallocateEPS2_m(ptr, ptr, i64) #0 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local i64 @_ZSt10__distanceIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEENSt15iterator_traitsIT_E15
diff erence_typeESC_SC_St26random_access_iterator_tag(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #11
+declare dso_local i64 @_ZSt10__distanceIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEENSt15iterator_traitsIT_E15
diff erence_typeESC_SC_St26random_access_iterator_tag(ptr, ptr) #11
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt22__uninitialized_copy_aISt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEES4_S3_ET0_T_S7_S6_RSaIT1_E(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"* dereferenceable(1)) #10
+declare dso_local ptr @_ZSt22__uninitialized_copy_aISt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEES4_S3_ET0_T_S7_S6_RSaIT1_E(ptr, ptr, ptr, ptr dereferenceable(1)) #10
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt18make_move_iteratorIPN9benchmark17BenchmarkReporter3RunEESt13move_iteratorIT_ES5_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local ptr @_ZSt18make_move_iteratorIPN9benchmark17BenchmarkReporter3RunEESt13move_iteratorIT_ES5_(ptr) #10
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt18uninitialized_copyISt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEES4_ET0_T_S7_S6_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local ptr @_ZSt18uninitialized_copyISt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEES4_ET0_T_S7_S6_(ptr, ptr, ptr) #10
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNSt20__uninitialized_copyILb0EE13__uninit_copyISt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEES6_EET0_T_S9_S8_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #0 align 2
+declare dso_local ptr @_ZNSt20__uninitialized_copyILb0EE13__uninit_copyISt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEES6_EET0_T_S9_S8_(ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local zeroext i1 @_ZStneIPN9benchmark17BenchmarkReporter3RunEEbRKSt13move_iteratorIT_ES8_(%"class.std::move_iterator.81.267.360.453.546.639.825.918.1011.1476.1755.2034.2313.2871.3429.3522.3615.3708.3801.3894.4173"* dereferenceable(8), %"class.std::move_iterator.81.267.360.453.546.639.825.918.1011.1476.1755.2034.2313.2871.3429.3522.3615.3708.3801.3894.4173"* dereferenceable(8)) #10
+declare dso_local zeroext i1 @_ZStneIPN9benchmark17BenchmarkReporter3RunEEbRKSt13move_iteratorIT_ES8_(ptr dereferenceable(8), ptr dereferenceable(8)) #10
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZSt10_ConstructIN9benchmark17BenchmarkReporter3RunEJS2_EEvPT_DpOT0_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) #11
+declare dso_local void @_ZSt10_ConstructIN9benchmark17BenchmarkReporter3RunEJS2_EEvPT_DpOT0_(ptr, ptr dereferenceable(248)) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt11__addressofIN9benchmark17BenchmarkReporter3RunEEPT_RS3_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) #11
+declare dso_local ptr @_ZSt11__addressofIN9benchmark17BenchmarkReporter3RunEEPT_RS3_(ptr dereferenceable(248)) #11
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(248) %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNKSt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEEdeEv(%"class.std::move_iterator.81.267.360.453.546.639.825.918.1011.1476.1755.2034.2313.2871.3429.3522.3615.3708.3801.3894.4173"*) #4 align 2
+declare dso_local dereferenceable(248) ptr @_ZNKSt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEEdeEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"class.std::move_iterator.81.267.360.453.546.639.825.918.1011.1476.1755.2034.2313.2871.3429.3522.3615.3708.3801.3894.4173"* @_ZNSt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEEppEv(%"class.std::move_iterator.81.267.360.453.546.639.825.918.1011.1476.1755.2034.2313.2871.3429.3522.3615.3708.3801.3894.4173"*) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZNSt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEEppEv(ptr) #4 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZSt8_DestroyIPN9benchmark17BenchmarkReporter3RunEEvT_S4_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local void @_ZSt8_DestroyIPN9benchmark17BenchmarkReporter3RunEEvT_S4_(ptr, ptr) #10
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local zeroext i1 @_ZSteqIPN9benchmark17BenchmarkReporter3RunEEbRKSt13move_iteratorIT_ES8_(%"class.std::move_iterator.81.267.360.453.546.639.825.918.1011.1476.1755.2034.2313.2871.3429.3522.3615.3708.3801.3894.4173"* dereferenceable(8), %"class.std::move_iterator.81.267.360.453.546.639.825.918.1011.1476.1755.2034.2313.2871.3429.3522.3615.3708.3801.3894.4173"* dereferenceable(8)) #10
+declare dso_local zeroext i1 @_ZSteqIPN9benchmark17BenchmarkReporter3RunEEbRKSt13move_iteratorIT_ES8_(ptr dereferenceable(8), ptr dereferenceable(8)) #10
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNKSt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEE4baseEv(%"class.std::move_iterator.81.267.360.453.546.639.825.918.1011.1476.1755.2034.2313.2871.3429.3522.3615.3708.3801.3894.4173"*) #4 align 2
+declare dso_local ptr @_ZNKSt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEE4baseEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(248) %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt7forwardIN9benchmark17BenchmarkReporter3RunEEOT_RNSt16remove_referenceIS3_E4typeE(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) #4
+declare dso_local dereferenceable(248) ptr @_ZSt7forwardIN9benchmark17BenchmarkReporter3RunEEOT_RNSt16remove_referenceIS3_E4typeE(ptr dereferenceable(248)) #4
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZN9benchmark17BenchmarkReporter3RunC2EOS1_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) unnamed_addr #11 align 2
+declare dso_local void @_ZN9benchmark17BenchmarkReporter3RunC2EOS1_(ptr, ptr dereferenceable(248)) unnamed_addr #11 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2EOSE_(%"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"*, %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"* dereferenceable(48)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2EOSE_(ptr, ptr dereferenceable(48)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEC2EOSG_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* dereferenceable(48)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEC2EOSG_(ptr, ptr dereferenceable(48)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEC2EOSI_(%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Rb_tree_impl.48.234.327.420.513.606.792.885.978.1443.1722.2001.2280.2838.3396.3489.3582.3675.3768.3861.4140"*, %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Rb_tree_impl.48.234.327.420.513.606.792.885.978.1443.1722.2001.2280.2838.3396.3489.3582.3675.3768.3861.4140"* dereferenceable(48)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEC2EOSI_(ptr, ptr dereferenceable(48)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2EOS8_(%"struct.std::_Rb_tree_key_compare.45.231.324.417.510.603.789.882.975.1440.1719.1998.2277.2835.3393.3486.3579.3672.3765.3858.4137"*, %"struct.std::_Rb_tree_key_compare.45.231.324.417.510.603.789.882.975.1440.1719.1998.2277.2835.3393.3486.3579.3672.3765.3858.4137"* dereferenceable(1)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2EOS8_(ptr, ptr dereferenceable(1)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt15_Rb_tree_headerC2EOS_(%"struct.std::_Rb_tree_header.47.233.326.419.512.605.791.884.977.1442.1721.2000.2279.2837.3395.3488.3581.3674.3767.3860.4139"*, %"struct.std::_Rb_tree_header.47.233.326.419.512.605.791.884.977.1442.1721.2000.2279.2837.3395.3488.3581.3674.3767.3860.4139"* dereferenceable(40)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt15_Rb_tree_headerC2EOS_(ptr, ptr dereferenceable(40)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEC2ERKSE_(%"class.__gnu_cxx::new_allocator.9.77.263.356.449.542.635.821.914.1007.1472.1751.2030.2309.2867.3425.3518.3611.3704.3797.3890.4169"*, %"class.__gnu_cxx::new_allocator.9.77.263.356.449.542.635.821.914.1007.1472.1751.2030.2309.2867.3425.3518.3611.3704.3797.3890.4169"* dereferenceable(1)) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEC2ERKSE_(ptr, ptr dereferenceable(1)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt15_Rb_tree_header12_M_move_dataERS_(%"struct.std::_Rb_tree_header.47.233.326.419.512.605.791.884.977.1442.1721.2000.2279.2837.3395.3488.3581.3674.3767.3860.4139"*, %"struct.std::_Rb_tree_header.47.233.326.419.512.605.791.884.977.1442.1721.2000.2279.2837.3395.3488.3581.3674.3767.3860.4139"* dereferenceable(40)) #4 align 2
+declare dso_local void @_ZNSt15_Rb_tree_header12_M_move_dataERS_(ptr, ptr dereferenceable(40)) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt12_Destroy_auxILb0EE9__destroyIPN9benchmark17BenchmarkReporter3RunEEEvT_S6_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #0 align 2
+declare dso_local void @_ZNSt12_Destroy_auxILb0EE9__destroyIPN9benchmark17BenchmarkReporter3RunEEEvT_S6_(ptr, ptr) #0 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZSt8_DestroyIN9benchmark17BenchmarkReporter3RunEEvPT_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #11
+declare dso_local void @_ZSt8_DestroyIN9benchmark17BenchmarkReporter3RunEEvPT_(ptr) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZN9benchmark17BenchmarkReporter3RunD2Ev(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) unnamed_addr #11 align 2
+declare dso_local void @_ZN9benchmark17BenchmarkReporter3RunD2Ev(ptr) unnamed_addr #11 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(%"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EED2Ev(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EED2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*) #0 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E(ptr, ptr) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_M_beginEv(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) #4 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_M_beginEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEED2Ev(%"class.__gnu_cxx::new_allocator.9.77.263.356.449.542.635.821.914.1007.1472.1751.2030.2309.2867.3425.3518.3611.3704.3797.3890.4169"*) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEED2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_S_rightEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*) #4 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_S_rightEPSt18_Rb_tree_node_base(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_S_leftEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*) #4 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_S_leftEPSt18_Rb_tree_node_base(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISA_E(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*) #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISA_E(ptr, ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISA_E(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*) #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISA_E(ptr, ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE11_M_put_nodeEPSt13_Rb_tree_nodeISA_E(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*) #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE11_M_put_nodeEPSt13_Rb_tree_nodeISA_E(ptr, ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt16allocator_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEE7destroyISB_EEvRSD_PT_(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1), %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"*) #4 align 2
+declare dso_local void @_ZNSt16allocator_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEE7destroyISB_EEvRSD_PT_(ptr dereferenceable(1), ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(1) %"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE21_M_get_Node_allocatorEv(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) #4 align 2
+declare dso_local dereferenceable(1) ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE21_M_get_Node_allocatorEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* @_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE9_M_valptrEv(%"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*) #4 align 2
+declare dso_local ptr @_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE9_M_valptrEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEE7destroyISC_EEvPT_(%"class.__gnu_cxx::new_allocator.9.77.263.356.449.542.635.821.914.1007.1472.1751.2030.2309.2867.3425.3518.3611.3704.3797.3890.4169"*, %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"*) #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEE7destroyISC_EEvPT_(ptr, ptr) #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEED2Ev(%"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"*) unnamed_addr #11 align 2
+declare dso_local void @_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEED2Ev(ptr) unnamed_addr #11 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* @_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE6_M_ptrEv(%"struct.__gnu_cxx::__aligned_membuf.82.268.361.454.547.640.826.919.1012.1477.1756.2035.2314.2872.3430.3523.3616.3709.3802.3895.4174"*) #4 align 2
+declare dso_local ptr @_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE6_M_ptrEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i8* @_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE7_M_addrEv(%"struct.__gnu_cxx::__aligned_membuf.82.268.361.454.547.640.826.919.1012.1477.1756.2035.2314.2872.3430.3523.3616.3709.3802.3895.4174"*) #4 align 2
+declare dso_local ptr @_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE7_M_addrEv(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt16allocator_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEE10deallocateERSD_PSC_m(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1), %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*, i64) #0 align 2
+declare dso_local void @_ZNSt16allocator_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEE10deallocateERSD_PSC_m(ptr dereferenceable(1), ptr, i64) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEE10deallocateEPSD_m(%"class.__gnu_cxx::new_allocator.9.77.263.356.449.542.635.821.914.1007.1472.1751.2030.2309.2867.3425.3518.3611.3704.3797.3890.4169"*, %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*, i64) #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEE10deallocateEPSD_m(ptr, ptr, i64) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEEC2ES3_(%"class.std::move_iterator.81.267.360.453.546.639.825.918.1011.1476.1755.2034.2313.2871.3429.3522.3615.3708.3801.3894.4173"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt13move_iteratorIPN9benchmark17BenchmarkReporter3RunEEC2ES3_(ptr, ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt23__copy_move_backward_a2ILb1EPN9benchmark17BenchmarkReporter3RunES3_ET1_T0_S5_S4_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local ptr @_ZSt23__copy_move_backward_a2ILb1EPN9benchmark17BenchmarkReporter3RunES3_ET1_T0_S5_S4_(ptr, ptr, ptr) #10
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt12__miter_baseIPN9benchmark17BenchmarkReporter3RunEET_S4_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #11
+declare dso_local ptr @_ZSt12__miter_baseIPN9benchmark17BenchmarkReporter3RunEET_S4_(ptr) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt12__niter_wrapIPN9benchmark17BenchmarkReporter3RunEET_RKS4_S4_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"** dereferenceable(8), %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #11
+declare dso_local ptr @_ZSt12__niter_wrapIPN9benchmark17BenchmarkReporter3RunEET_RKS4_S4_(ptr dereferenceable(8), ptr) #11
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt22__copy_move_backward_aILb1EPN9benchmark17BenchmarkReporter3RunES3_ET1_T0_S5_S4_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local ptr @_ZSt22__copy_move_backward_aILb1EPN9benchmark17BenchmarkReporter3RunES3_ET1_T0_S5_S4_(ptr, ptr, ptr) #10
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt12__niter_baseIPN9benchmark17BenchmarkReporter3RunEET_S4_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #11
+declare dso_local ptr @_ZSt12__niter_baseIPN9benchmark17BenchmarkReporter3RunEET_S4_(ptr) #11
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPN9benchmark17BenchmarkReporter3RunES6_EET0_T_S8_S7_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #4 align 2
+declare dso_local ptr @_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPN9benchmark17BenchmarkReporter3RunES6_EET0_T_S8_S7_(ptr, ptr, ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(248) %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt4moveIRN9benchmark17BenchmarkReporter3RunEEONSt16remove_referenceIT_E4typeEOS5_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) #4
+declare dso_local dereferenceable(248) ptr @_ZSt4moveIRN9benchmark17BenchmarkReporter3RunEEONSt16remove_referenceIT_E4typeEOS5_(ptr dereferenceable(248)) #4
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local dereferenceable(248) %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZN9benchmark17BenchmarkReporter3RunaSEOS1_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) #11 align 2
+declare dso_local dereferenceable(248) ptr @_ZN9benchmark17BenchmarkReporter3RunaSEOS1_(ptr, ptr dereferenceable(248)) #11 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(32) %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* dereferenceable(32)) #4 align 2
+declare dso_local dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr, ptr dereferenceable(32)) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(48) %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"* @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEEaSEOSE_(%"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"*, %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"* dereferenceable(48)) #4 align 2
+declare dso_local dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEEaSEOSE_(ptr, ptr dereferenceable(48)) #4 align 2
 
 ; Function Attrs: nounwind uwtable
 declare dso_local zeroext i1 @_ZN9__gnu_cxx14__alloc_traitsISaIcEcE15_S_always_equalEv() #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local zeroext i1 @_ZStneRKSaIcES1_(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1), %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1)) #4
+declare dso_local zeroext i1 @_ZStneRKSaIcES1_(ptr dereferenceable(1), ptr dereferenceable(1)) #4
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZSt15__alloc_on_moveISaIcEEvRT_S2_(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1), %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1)) #10
+declare dso_local void @_ZSt15__alloc_on_moveISaIcEEvRT_S2_(ptr dereferenceable(1), ptr dereferenceable(1)) #10
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) #4 align 2
+declare dso_local i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5clearEv(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) #4 align 2
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5clearEv(ptr) #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZSt18__do_alloc_on_moveISaIcEEvRT_S2_St17integral_constantIbLb1EE(%"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1), %"class.std::allocator.0.72.258.351.444.537.630.816.909.1002.1467.1746.2025.2304.2862.3420.3513.3606.3699.3792.3885.4164"* dereferenceable(1)) #11
+declare dso_local void @_ZSt18__do_alloc_on_moveISaIcEEvRT_S2_St17integral_constantIbLb1EE(ptr dereferenceable(1), ptr dereferenceable(1)) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local dereferenceable(48) %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEaSEOSG_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* dereferenceable(48)) #11 align 2
+declare dso_local dereferenceable(48) ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEaSEOSG_(ptr, ptr dereferenceable(48)) #11 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(1) %"struct.std::less.44.230.323.416.509.602.788.881.974.1439.1718.1997.2276.2834.3392.3485.3578.3671.3764.3857.4136"* @_ZSt4moveIRSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEONSt16remove_referenceIT_E4typeEOSA_(%"struct.std::less.44.230.323.416.509.602.788.881.974.1439.1718.1997.2276.2834.3392.3485.3578.3671.3764.3857.4136"* dereferenceable(1)) #4
+declare dso_local dereferenceable(1) ptr @_ZSt4moveIRSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEONSt16remove_referenceIT_E4typeEOSA_(ptr dereferenceable(1)) #4
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE14_M_move_assignERSG_St17integral_constantIbLb1EE(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* dereferenceable(48)) #10 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE14_M_move_assignERSG_St17integral_constantIbLb1EE(ptr, ptr dereferenceable(48)) #10 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE5clearEv(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE5clearEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"** @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_rootEv(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_rootEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE12_M_move_dataERSG_St17integral_constantIbLb1EE(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* dereferenceable(48)) #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE12_M_move_dataERSG_St17integral_constantIbLb1EE(ptr, ptr dereferenceable(48)) #4 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZSt15__alloc_on_moveISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEEvRT_SF_(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1), %"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1)) #10
+declare dso_local void @_ZSt15__alloc_on_moveISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEEvRT_SF_(ptr dereferenceable(1), ptr dereferenceable(1)) #10
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZSt18__do_alloc_on_moveISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEEvRT_SF_St17integral_constantIbLb1EE(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1), %"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1)) #11
+declare dso_local void @_ZSt18__do_alloc_on_moveISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEEvRT_SF_St17integral_constantIbLb1EE(ptr dereferenceable(1), ptr dereferenceable(1)) #11
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(1) %"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* @_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEEONSt16remove_referenceIT_E4typeEOSG_(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1)) #4
+declare dso_local dereferenceable(1) ptr @_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEEONSt16remove_referenceIT_E4typeEOSG_(ptr dereferenceable(1)) #4
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt14__copy_move_a2ILb0EN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEENS1_IPS4_S9_EEET1_T0_SE_SD_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local ptr @_ZSt14__copy_move_a2ILb0EN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEENS1_IPS4_S9_EEET1_T0_SE_SD_(ptr, ptr, ptr) #10
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEET_SB_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #11
+declare dso_local ptr @_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEET_SB_(ptr) #11
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEES5_ET_SA_T0_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #11
+declare dso_local ptr @_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEES5_ET_SA_T0_(ptr, ptr) #11
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt13__copy_move_aILb0EPKN9benchmark17BenchmarkReporter3RunEPS2_ET1_T0_S7_S6_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local ptr @_ZSt13__copy_move_aILb0EPKN9benchmark17BenchmarkReporter3RunEPS2_ET1_T0_S7_S6_(ptr, ptr, ptr) #10
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt12__niter_baseIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS8_T0_EE(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #4
+declare dso_local ptr @_ZSt12__niter_baseIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS8_T0_EE(ptr) #4
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt12__niter_baseIPN9benchmark17BenchmarkReporter3RunESt6vectorIS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #4
+declare dso_local ptr @_ZSt12__niter_baseIPN9benchmark17BenchmarkReporter3RunESt6vectorIS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE(ptr) #4
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPKN9benchmark17BenchmarkReporter3RunEPS5_EET0_T_SA_S9_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #0 align 2
+declare dso_local ptr @_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPKN9benchmark17BenchmarkReporter3RunEPS5_EET0_T_SA_S9_(ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local dereferenceable(248) %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZN9benchmark17BenchmarkReporter3RunaSERKS1_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) #10 align 2
+declare dso_local dereferenceable(248) ptr @_ZN9benchmark17BenchmarkReporter3RunaSERKS1_(ptr, ptr dereferenceable(248)) #10 align 2
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(32) %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* dereferenceable(32)) #0 align 2
+declare dso_local dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr, ptr dereferenceable(32)) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(48) %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"* @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEEaSERKSE_(%"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"*, %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"* dereferenceable(48)) #0 align 2
+declare dso_local dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEEaSERKSE_(ptr, ptr dereferenceable(48)) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(32) %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignERKS4_(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* dereferenceable(32)) #0 align 2
+declare dso_local dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignERKS4_(ptr, ptr dereferenceable(32)) #0 align 2
 
-declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_assignERKS4_(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* dereferenceable(32)) #1
+declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_assignERKS4_(ptr, ptr dereferenceable(32)) #1
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(48) %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEaSERKSG_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* dereferenceable(48)) #0 align 2
+declare dso_local dereferenceable(48) ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEaSERKSG_(ptr, ptr dereferenceable(48)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE20_Reuse_or_alloc_nodeC2ERSG_(%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Reuse_or_alloc_node.86.272.365.458.551.644.830.923.1016.1481.1760.2039.2318.2876.3434.3527.3620.3713.3806.3899.4178"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* dereferenceable(48)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE20_Reuse_or_alloc_nodeC2ERSG_(ptr, ptr dereferenceable(48)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"* @_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_rootEv(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) #4 align 2
+declare dso_local ptr @_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_rootEv(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyINSG_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISA_ERKSG_RT_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* dereferenceable(48), %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Reuse_or_alloc_node.86.272.365.458.551.644.830.923.1016.1481.1760.2039.2318.2876.3434.3527.3620.3713.3806.3899.4178"* dereferenceable(24)) #0 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyINSG_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISA_ERKSG_RT_(ptr, ptr dereferenceable(48), ptr dereferenceable(24)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE20_Reuse_or_alloc_nodeD2Ev(%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Reuse_or_alloc_node.86.272.365.458.551.644.830.923.1016.1481.1760.2039.2318.2876.3434.3527.3620.3713.3806.3899.4178"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE20_Reuse_or_alloc_nodeD2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"** @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE12_M_rightmostEv(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE12_M_rightmostEv(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyINSG_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSK_PSt18_Rb_tree_node_baseRT_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*, %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*, %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Reuse_or_alloc_node.86.272.365.458.551.644.830.923.1016.1481.1760.2039.2318.2876.3434.3527.3620.3713.3806.3899.4178"* dereferenceable(24)) #0 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyINSG_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSK_PSt18_Rb_tree_node_baseRT_(ptr, ptr, ptr, ptr dereferenceable(24)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_M_beginEv(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) #4 align 2
+declare dso_local ptr @_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_M_beginEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE6_M_endEv(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) #4 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE6_M_endEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE10_S_minimumEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*) #4 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE10_S_minimumEPSt18_Rb_tree_node_base(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"** @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE11_M_leftmostEv(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE11_M_leftmostEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE10_S_maximumEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*) #4 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE10_S_maximumEPSt18_Rb_tree_node_base(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_M_clone_nodeINSG_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSK_RT_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*, %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Reuse_or_alloc_node.86.272.365.458.551.644.830.923.1016.1481.1760.2039.2318.2876.3434.3527.3620.3713.3806.3899.4178"* dereferenceable(24)) #0 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_M_clone_nodeINSG_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSK_RT_(ptr, ptr, ptr dereferenceable(24)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_S_rightEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*) #4 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_S_rightEPKSt18_Rb_tree_node_base(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_S_leftEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*) #4 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_S_leftEPKSt18_Rb_tree_node_base(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE20_Reuse_or_alloc_nodeclIRKSA_EEPSt13_Rb_tree_nodeISA_EOT_(%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Reuse_or_alloc_node.86.272.365.458.551.644.830.923.1016.1481.1760.2039.2318.2876.3434.3527.3620.3713.3806.3899.4178"*, %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* dereferenceable(48)) #0 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE20_Reuse_or_alloc_nodeclIRKSA_EEPSt13_Rb_tree_nodeISA_EOT_(ptr, ptr dereferenceable(48)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* @_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE9_M_valptrEv(%"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*) #4 align 2
+declare dso_local ptr @_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE9_M_valptrEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE20_Reuse_or_alloc_node10_M_extractEv(%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Reuse_or_alloc_node.86.272.365.458.551.644.830.923.1016.1481.1760.2039.2318.2876.3434.3527.3620.3713.3806.3899.4178"*) #4 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE20_Reuse_or_alloc_node10_M_extractEv(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE17_M_construct_nodeIJRKSA_EEEvPSt13_Rb_tree_nodeISA_EDpOT_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*, %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* dereferenceable(48)) #0 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE17_M_construct_nodeIJRKSA_EEEvPSt13_Rb_tree_nodeISA_EDpOT_(ptr, ptr, ptr dereferenceable(48)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(48) %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* @_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEOT_RNSt16remove_referenceISD_E4typeE(%"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* dereferenceable(48)) #4
+declare dso_local dereferenceable(48) ptr @_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEOT_RNSt16remove_referenceISD_E4typeE(ptr dereferenceable(48)) #4
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE14_M_create_nodeIJRKSA_EEEPSt13_Rb_tree_nodeISA_EDpOT_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* dereferenceable(48)) #0 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE14_M_create_nodeIJRKSA_EEEPSt13_Rb_tree_nodeISA_EDpOT_(ptr, ptr dereferenceable(48)) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt16allocator_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEE9constructISB_JRKSB_EEEvRSD_PT_DpOT0_(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1), %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"*, %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* dereferenceable(48)) #0 align 2
+declare dso_local void @_ZNSt16allocator_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEE9constructISB_JRKSB_EEEvRSD_PT_DpOT0_(ptr dereferenceable(1), ptr, ptr dereferenceable(48)) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEE9constructISC_JRKSC_EEEvPT_DpOT0_(%"class.__gnu_cxx::new_allocator.9.77.263.356.449.542.635.821.914.1007.1472.1751.2030.2309.2867.3425.3518.3611.3704.3797.3890.4169"*, %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"*, %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* dereferenceable(48)) #0 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEE9constructISC_JRKSC_EEEvPT_DpOT0_(ptr, ptr, ptr dereferenceable(48)) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEC2ERKS9_(%"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"*, %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* dereferenceable(48)) unnamed_addr #0 align 2
+declare dso_local void @_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEC2ERKS9_(ptr, ptr dereferenceable(48)) unnamed_addr #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE11_M_get_nodeEv(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*) #0 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE11_M_get_nodeEv(ptr) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt16allocator_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEE8allocateERSD_m(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1), i64) #0 align 2
+declare dso_local ptr @_ZNSt16allocator_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEE8allocateERSD_m(ptr dereferenceable(1), i64) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.9.77.263.356.449.542.635.821.914.1007.1472.1751.2030.2309.2867.3425.3518.3611.3704.3797.3890.4169"*, i64, i8*) #0 align 2
+declare dso_local ptr @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEE8allocateEmPKv(ptr, i64, ptr) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEE8max_sizeEv(%"class.__gnu_cxx::new_allocator.9.77.263.356.449.542.635.821.914.1007.1472.1751.2030.2309.2867.3425.3518.3611.3704.3797.3890.4169"*) #4 align 2
+declare dso_local i64 @_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEE8max_sizeEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* @_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE6_M_ptrEv(%"struct.__gnu_cxx::__aligned_membuf.82.268.361.454.547.640.826.919.1012.1477.1756.2035.2314.2872.3430.3523.3616.3709.3802.3895.4174"*) #4 align 2
+declare dso_local ptr @_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE6_M_ptrEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i8* @_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE7_M_addrEv(%"struct.__gnu_cxx::__aligned_membuf.82.268.361.454.547.640.826.919.1012.1477.1756.2035.2314.2872.3430.3523.3616.3709.3802.3895.4174"*) #4 align 2
+declare dso_local ptr @_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEE7_M_addrEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"* @_ZNSt18_Rb_tree_node_base10_S_minimumEPS_(%"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*) #4 align 2
+declare dso_local ptr @_ZNSt18_Rb_tree_node_base10_S_minimumEPS_(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"* @_ZNSt18_Rb_tree_node_base10_S_maximumEPS_(%"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*) #4 align 2
+declare dso_local ptr @_ZNSt18_Rb_tree_node_base10_S_maximumEPS_(ptr) #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEElEvRT_T0_St26random_access_iterator_tag(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"* dereferenceable(8), i64) #11
+declare dso_local void @_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEElEvRT_T0_St26random_access_iterator_tag(ptr dereferenceable(8), i64) #11
 
 ; Function Attrs: nounwind readnone willreturn
 declare i1 @llvm.is.constant.i64(i64) #14
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"* @_ZN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEppEv(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"*) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEppEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"* @_ZN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEmmEv(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"*) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEmmEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"* @_ZN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEpLEl(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"*, i64) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEpLEl(ptr, i64) #4 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEPS4_ET0_T_SD_SC_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local ptr @_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS4_SaIS4_EEEEPS4_ET0_T_SD_SC_(ptr, ptr, ptr) #10
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS6_SaIS6_EEEEPS6_EET0_T_SF_SE_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #0 align 2
+declare dso_local ptr @_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS6_SaIS6_EEEEPS6_EET0_T_SF_SE_(ptr, ptr, ptr) #0 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZSt10_ConstructIN9benchmark17BenchmarkReporter3RunEJRKS2_EEvPT_DpOT0_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) #10
+declare dso_local void @_ZSt10_ConstructIN9benchmark17BenchmarkReporter3RunEJRKS2_EEvPT_DpOT0_(ptr, ptr dereferenceable(248)) #10
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(248) %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNK9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEdeEv(%"class.__gnu_cxx::__normal_iterator.33.80.266.359.452.545.638.824.917.1010.1475.1754.2033.2312.2870.3428.3521.3614.3707.3800.3893.4172"*) #4 align 2
+declare dso_local dereferenceable(248) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEdeEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(248) %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt7forwardIRKN9benchmark17BenchmarkReporter3RunEEOT_RNSt16remove_referenceIS5_E4typeE(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) #4
+declare dso_local dereferenceable(248) ptr @_ZSt7forwardIRKN9benchmark17BenchmarkReporter3RunEEOT_RNSt16remove_referenceIS5_E4typeE(ptr dereferenceable(248)) #4
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZN9benchmark17BenchmarkReporter3RunC2ERKS1_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* dereferenceable(248)) unnamed_addr #10 align 2
+declare dso_local void @_ZN9benchmark17BenchmarkReporter3RunC2ERKS1_(ptr, ptr dereferenceable(248)) unnamed_addr #10 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2ERKSE_(%"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"*, %"class.std::map.50.236.329.422.515.608.794.887.980.1445.1724.2003.2282.2840.3398.3491.3584.3677.3770.3863.4142"* dereferenceable(48)) unnamed_addr #0 align 2
+declare dso_local void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2ERKSE_(ptr, ptr dereferenceable(48)) unnamed_addr #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEC2ERKSG_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* dereferenceable(48)) unnamed_addr #0 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEC2ERKSG_(ptr, ptr dereferenceable(48)) unnamed_addr #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEC2ERKSI_(%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Rb_tree_impl.48.234.327.420.513.606.792.885.978.1443.1722.2001.2280.2838.3396.3489.3582.3675.3768.3861.4140"*, %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Rb_tree_impl.48.234.327.420.513.606.792.885.978.1443.1722.2001.2280.2838.3396.3489.3582.3675.3768.3861.4140"* dereferenceable(48)) unnamed_addr #0 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEC2ERKSI_(ptr, ptr dereferenceable(48)) unnamed_addr #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyERKSG_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* dereferenceable(48)) #0 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyERKSG_(ptr, ptr dereferenceable(48)) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEESD_E17_S_select_on_copyERKSE_(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* noalias sret(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"), %"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1)) #0 align 2
+declare dso_local void @_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEESD_E17_S_select_on_copyERKSE_(ptr noalias sret(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"), ptr dereferenceable(1)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2ERKS7_(%"struct.std::_Rb_tree_key_compare.45.231.324.417.510.603.789.882.975.1440.1719.1998.2277.2835.3393.3486.3579.3672.3765.3858.4137"*, %"struct.std::less.44.230.323.416.509.602.788.881.974.1439.1718.1997.2276.2834.3392.3485.3578.3671.3764.3857.4136"* dereferenceable(1)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2ERKS7_(ptr, ptr dereferenceable(1)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt16allocator_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEE37select_on_container_copy_constructionERKSD_(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* noalias sret(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"), %"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1)) #4 align 2
+declare dso_local void @_ZNSt16allocator_traitsISaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEE37select_on_container_copy_constructionERKSD_(ptr noalias sret(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"), ptr dereferenceable(1)) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEC2ERKSC_(%"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"*, %"class.std::allocator.8.76.262.355.448.541.634.820.913.1006.1471.1750.2029.2308.2866.3424.3517.3610.3703.3796.3889.4168"* dereferenceable(1)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9benchmark7CounterEEEEC2ERKSC_(ptr, ptr dereferenceable(1)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE11_Alloc_nodeC2ERSG_(%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Alloc_node.87.273.366.459.552.645.831.924.1017.1482.1761.2040.2319.2877.3435.3528.3621.3714.3807.3900.4179"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* dereferenceable(48)) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE11_Alloc_nodeC2ERSG_(ptr, ptr dereferenceable(48)) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyINSG_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISA_ERKSG_RT_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"* dereferenceable(48), %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Alloc_node.87.273.366.459.552.645.831.924.1017.1482.1761.2040.2319.2877.3435.3528.3621.3714.3807.3900.4179"* dereferenceable(8)) #0 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyINSG_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISA_ERKSG_RT_(ptr, ptr dereferenceable(48), ptr dereferenceable(8)) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyINSG_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSK_PSt18_Rb_tree_node_baseRT_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*, %"struct.std::_Rb_tree_node_base.46.232.325.418.511.604.790.883.976.1441.1720.1999.2278.2836.3394.3487.3580.3673.3766.3859.4138"*, %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Alloc_node.87.273.366.459.552.645.831.924.1017.1482.1761.2040.2319.2877.3435.3528.3621.3714.3807.3900.4179"* dereferenceable(8)) #0 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyINSG_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSK_PSt18_Rb_tree_node_baseRT_(ptr, ptr, ptr, ptr dereferenceable(8)) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_M_clone_nodeINSG_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSK_RT_(%"class.std::_Rb_tree.49.235.328.421.514.607.793.886.979.1444.1723.2002.2281.2839.3397.3490.3583.3676.3769.3862.4141"*, %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"*, %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Alloc_node.87.273.366.459.552.645.831.924.1017.1482.1761.2040.2319.2877.3435.3528.3621.3714.3807.3900.4179"* dereferenceable(8)) #0 align 2
+declare dso_local ptr @_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_M_clone_nodeINSG_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSK_RT_(ptr, ptr, ptr dereferenceable(8)) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.std::_Rb_tree_node.83.269.362.455.548.641.827.920.1013.1478.1757.2036.2315.2873.3431.3524.3617.3710.3803.3896.4175"* @_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE11_Alloc_nodeclIRKSA_EEPSt13_Rb_tree_nodeISA_EOT_(%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> >, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, benchmark::Counter> > >::_Alloc_node.87.273.366.459.552.645.831.924.1017.1482.1761.2040.2319.2877.3435.3528.3621.3714.3807.3900.4179"*, %"struct.std::pair.34.85.271.364.457.550.643.829.922.1015.1480.1759.2038.2317.2875.3433.3526.3619.3712.3805.3898.4177"* dereferenceable(48)) #0 align 2
+declare dso_local ptr @_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9benchmark7CounterEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE11_Alloc_nodeclIRKSA_EEPSt13_Rb_tree_nodeISA_EOT_(ptr, ptr dereferenceable(48)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE8max_sizeEv(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*) #4 align 2
+declare dso_local i64 @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE8max_sizeEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE4sizeEv(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*) #4 align 2
+declare dso_local i64 @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE4sizeEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE11_S_max_sizeERKS3_(%"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"* dereferenceable(1)) #4 align 2
+declare dso_local i64 @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE11_S_max_sizeERKS3_(ptr dereferenceable(1)) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(1) %"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"* @_ZNKSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base.28.65.251.344.437.530.623.809.902.995.1460.1739.2018.2297.2855.3413.3506.3599.3692.3785.3878.4157"*) #4 align 2
+declare dso_local dereferenceable(1) ptr @_ZNKSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EE19_M_get_Tp_allocatorEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNSt16allocator_traitsISaIN9benchmark17BenchmarkReporter3RunEEE8max_sizeERKS3_(%"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"* dereferenceable(1)) #4 align 2
+declare dso_local i64 @_ZNSt16allocator_traitsISaIN9benchmark17BenchmarkReporter3RunEEE8max_sizeERKS3_(ptr dereferenceable(1)) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i64 @_ZNK9__gnu_cxx13new_allocatorIN9benchmark17BenchmarkReporter3RunEE8max_sizeEv(%"class.__gnu_cxx::new_allocator.30.79.265.358.451.544.637.823.916.1009.1474.1753.2032.2311.2869.3427.3520.3613.3706.3799.3892.4171"*) #4 align 2
+declare dso_local i64 @_ZNK9__gnu_cxx13new_allocatorIN9benchmark17BenchmarkReporter3RunEE8max_sizeEv(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNSt16allocator_traitsISaIN9benchmark17BenchmarkReporter3RunEEE8allocateERS3_m(%"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"* dereferenceable(1), i64) #0 align 2
+declare dso_local ptr @_ZNSt16allocator_traitsISaIN9benchmark17BenchmarkReporter3RunEEE8allocateERS3_m(ptr dereferenceable(1), i64) #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZN9__gnu_cxx13new_allocatorIN9benchmark17BenchmarkReporter3RunEE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.30.79.265.358.451.544.637.823.916.1009.1474.1753.2032.2311.2869.3427.3520.3613.3706.3799.3892.4171"*, i64, i8*) #0 align 2
+declare dso_local ptr @_ZN9__gnu_cxx13new_allocatorIN9benchmark17BenchmarkReporter3RunEE8allocateEmPKv(ptr, i64, ptr) #0 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZSt32__make_move_if_noexcept_iteratorIN9benchmark17BenchmarkReporter3RunESt13move_iteratorIPS2_EET0_PT_(%"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*) #10
+declare dso_local ptr @_ZSt32__make_move_if_noexcept_iteratorIN9benchmark17BenchmarkReporter3RunESt13move_iteratorIPS2_EET0_PT_(ptr) #10
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt16allocator_traitsISaIN9benchmark17BenchmarkReporter3RunEEE10deallocateERS3_PS2_m(%"class.std::allocator.29.78.264.357.450.543.636.822.915.1008.1473.1752.2031.2310.2868.3426.3519.3612.3705.3798.3891.4170"* dereferenceable(1), %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, i64) #0 align 2
+declare dso_local void @_ZNSt16allocator_traitsISaIN9benchmark17BenchmarkReporter3RunEEE10deallocateERS3_PS2_m(ptr dereferenceable(1), ptr, i64) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN9benchmark17BenchmarkReporter3RunEE10deallocateEPS3_m(%"class.__gnu_cxx::new_allocator.30.79.265.358.451.544.637.823.916.1009.1474.1753.2032.2311.2869.3427.3520.3613.3706.3799.3892.4171"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"*, i64) #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN9benchmark17BenchmarkReporter3RunEE10deallocateEPS3_m(ptr, ptr, i64) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEC2ERKS4_(%"class.__gnu_cxx::__normal_iterator.32.68.254.347.440.533.626.812.905.998.1463.1742.2021.2300.2858.3416.3509.3602.3695.3788.3881.4160"*, %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"** dereferenceable(8)) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPN9benchmark17BenchmarkReporter3RunESt6vectorIS3_SaIS3_EEEC2ERKS4_(ptr, ptr dereferenceable(8)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE5beginEv(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*) #4 align 2
+declare dso_local ptr @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE5beginEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local %"struct.benchmark::BenchmarkReporter::Run.62.248.341.434.527.620.806.899.992.1457.1736.2015.2294.2852.3410.3503.3596.3689.3782.3875.4154"* @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE3endEv(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*) #4 align 2
+declare dso_local ptr @_ZNKSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EE3endEv(ptr) #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internallsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNS0_7LogTypeES9_RKT_(%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* dereferenceable(8), %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* dereferenceable(32)) #0
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internallsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNS0_7LogTypeES9_RKT_(ptr dereferenceable(8), ptr dereferenceable(32)) #0
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internallsIA6_cEERNS0_7LogTypeES4_RKT_(%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* dereferenceable(8), [6 x i8]* dereferenceable(6)) #0
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internallsIA6_cEERNS0_7LogTypeES4_RKT_(ptr dereferenceable(8), ptr dereferenceable(6)) #0
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internallsIA10_cEERNS0_7LogTypeES4_RKT_(%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* dereferenceable(8), [10 x i8]* dereferenceable(10)) #0
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internallsIA10_cEERNS0_7LogTypeES4_RKT_(ptr dereferenceable(8), ptr dereferenceable(10)) #0
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local zeroext i1 @_ZSteqIcEN9__gnu_cxx11__enable_ifIXsr9__is_charIT_EE7__valueEbE6__typeERKNSt7__cxx1112basic_stringIS2_St11char_traitsIS2_ESaIS2_EEESC_(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* dereferenceable(32), %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* dereferenceable(32)) #11
+declare dso_local zeroext i1 @_ZSteqIcEN9__gnu_cxx11__enable_ifIXsr9__is_charIT_EE7__valueEbE6__typeERKNSt7__cxx1112basic_stringIS2_St11char_traitsIS2_ESaIS2_EEESC_(ptr dereferenceable(32), ptr dereferenceable(32)) #11
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internal18GetNullLogInstanceEv() #10
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internal18GetNullLogInstanceEv() #10
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN9benchmark8internal12CheckHandlerC2EPKcS3_S3_i(%"class.benchmark::internal::CheckHandler.88.274.367.460.553.646.832.925.1018.1483.1762.2041.2320.2878.3436.3529.3622.3715.3808.3901.4180"*, i8*, i8*, i8*, i32) unnamed_addr #0 align 2
+declare dso_local void @_ZN9benchmark8internal12CheckHandlerC2EPKcS3_S3_i(ptr, ptr, ptr, ptr, i32) unnamed_addr #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internal12CheckHandler6GetLogEv(%"class.benchmark::internal::CheckHandler.88.274.367.460.553.646.832.925.1018.1483.1762.2041.2320.2878.3436.3529.3622.3715.3808.3901.4180"*) #4 align 2
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internal12CheckHandler6GetLogEv(ptr) #4 align 2
 
 ; Function Attrs: noreturn uwtable
-declare dso_local void @_ZN9benchmark8internal12CheckHandlerD2Ev(%"class.benchmark::internal::CheckHandler.88.274.367.460.553.646.832.925.1018.1483.1762.2041.2320.2878.3436.3529.3622.3715.3808.3901.4180"*) unnamed_addr #18 align 2
+declare dso_local void @_ZN9benchmark8internal12CheckHandlerD2Ev(ptr) unnamed_addr #18 align 2
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internallsIPKcEERNS0_7LogTypeES5_RKT_(%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* dereferenceable(8), i8** dereferenceable(8)) #0
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internallsIPKcEERNS0_7LogTypeES5_RKT_(ptr dereferenceable(8), ptr dereferenceable(8)) #0
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* dereferenceable(32), i8*) #11
+declare dso_local zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr dereferenceable(32), ptr) #11
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local dereferenceable(8) %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* dereferenceable(8), %"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"* dereferenceable(32)) #10
+declare dso_local dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr dereferenceable(8), ptr dereferenceable(32)) #10
 
-declare dso_local dereferenceable(8) %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* dereferenceable(8), i8*, i64) #1
+declare dso_local dereferenceable(8) ptr @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(ptr dereferenceable(8), ptr, i64) #1
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i8* @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4dataEv(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*) #4 align 2
+declare dso_local ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4dataEv(ptr) #4 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local dereferenceable(8) %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* dereferenceable(8), i8*) #10
+declare dso_local dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr dereferenceable(8), ptr) #10
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate(%"class.std::basic_ios.41.227.320.413.506.599.785.878.971.1436.1715.1994.2273.2831.3389.3482.3575.3668.3761.3854.4133"*, i32) #0 align 2
+declare dso_local void @_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate(ptr, i32) #0 align 2
 
-declare dso_local void @_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate(%"class.std::basic_ios.41.227.320.413.506.599.785.878.971.1436.1715.1994.2273.2831.3389.3482.3575.3668.3761.3854.4133"*, i32) #1
+declare dso_local void @_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate(ptr, i32) #1
 
 ; Function Attrs: inlinehint nounwind uwtable
 declare dso_local i32 @_ZStorSt12_Ios_IostateS_(i32, i32) #11
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i32 @_ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv(%"class.std::basic_ios.41.227.320.413.506.599.785.878.971.1436.1715.1994.2273.2831.3389.3482.3575.3668.3761.3854.4133"*) #4 align 2
+declare dso_local i32 @_ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv(ptr) #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local i32 @_ZNSt11char_traitsIcE7compareEPKcS2_m(i8*, i8*, i64) #4 align 2
+declare dso_local i32 @_ZNSt11char_traitsIcE7compareEPKcS2_m(ptr, ptr, i64) #4 align 2
 
 ; Function Attrs: nounwind
-declare dso_local i32 @memcmp(i8*, i8*, i64) #2
+declare dso_local i32 @memcmp(ptr, ptr, i64) #2
 
 ; Function Attrs: nounwind
-declare dso_local i32 @__cxa_guard_acquire(i64*) #3
+declare dso_local i32 @__cxa_guard_acquire(ptr) #3
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9benchmark8internal7LogTypeC2EPSo(%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"*, %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"*) unnamed_addr #4 align 2
+declare dso_local void @_ZN9benchmark8internal7LogTypeC2EPSo(ptr, ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind
-declare dso_local void @__cxa_guard_abort(i64*) #3
+declare dso_local void @__cxa_guard_abort(ptr) #3
 
 ; Function Attrs: nounwind
-declare dso_local void @__cxa_guard_release(i64*) #3
+declare dso_local void @__cxa_guard_release(ptr) #3
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internal19GetErrorLogInstanceEv() #10
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internal19GetErrorLogInstanceEv() #10
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internallsIA11_cEERNS0_7LogTypeES4_RKT_(%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* dereferenceable(8), [11 x i8]* dereferenceable(11)) #0
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internallsIA11_cEERNS0_7LogTypeES4_RKT_(ptr dereferenceable(8), ptr dereferenceable(11)) #0
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internallsIA3_cEERNS0_7LogTypeES4_RKT_(%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* dereferenceable(8), [3 x i8]* dereferenceable(3)) #0
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internallsIA3_cEERNS0_7LogTypeES4_RKT_(ptr dereferenceable(8), ptr dereferenceable(3)) #0
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internallsIiEERNS0_7LogTypeES3_RKT_(%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* dereferenceable(8), i32* dereferenceable(4)) #0
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internallsIiEERNS0_7LogTypeES3_RKT_(ptr dereferenceable(8), ptr dereferenceable(4)) #0
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internallsIA2_cEERNS0_7LogTypeES4_RKT_(%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* dereferenceable(8), [2 x i8]* dereferenceable(2)) #0
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internallsIA2_cEERNS0_7LogTypeES4_RKT_(ptr dereferenceable(8), ptr dereferenceable(2)) #0
 
-declare dso_local dereferenceable(8) %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* @_ZNSolsEi(%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"*, i32) #1
+declare dso_local dereferenceable(8) ptr @_ZNSolsEi(ptr, i32) #1
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local dereferenceable(8) %"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* @_ZN9benchmark8internallsERNS0_7LogTypeEPFRSoS3_E(%"class.benchmark::internal::LogType.43.229.322.415.508.601.787.880.973.1438.1717.1996.2275.2833.3391.3484.3577.3670.3763.3856.4135"* dereferenceable(8), %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* (%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"*)*) #10
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internallsERNS0_7LogTypeEPFRSoS3_E(ptr dereferenceable(8), ptr) #10
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local dereferenceable(8) %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* dereferenceable(8)) #10
+declare dso_local dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr dereferenceable(8)) #10
 
 ; Function Attrs: inlinehint noreturn uwtable
 declare dso_local void @_ZN9benchmark8internal16CallAbortHandlerEv() #19
 
 ; Function Attrs: uwtable
-declare dso_local dereferenceable(8) %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* @_ZNSolsEPFRSoS_E(%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"*, %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* (%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"*)*) #0 align 2
+declare dso_local dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr, ptr) #0 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local dereferenceable(8) %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* @_ZSt5flushIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* dereferenceable(8)) #10
+declare dso_local dereferenceable(8) ptr @_ZSt5flushIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr dereferenceable(8)) #10
 
-declare dso_local dereferenceable(8) %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* @_ZNSo3putEc(%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"*, i8 signext) #1
+declare dso_local dereferenceable(8) ptr @_ZNSo3putEc(ptr, i8 signext) #1
 
 ; Function Attrs: uwtable
-declare dso_local signext i8 @_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc(%"class.std::basic_ios.41.227.320.413.506.599.785.878.971.1436.1715.1994.2273.2831.3389.3482.3575.3668.3761.3854.4133"*, i8 signext) #0 align 2
+declare dso_local signext i8 @_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc(ptr, i8 signext) #0 align 2
 
-declare dso_local dereferenceable(8) %"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"* @_ZNSo5flushEv(%"class.std::basic_ostream.42.228.321.414.507.600.786.879.972.1437.1716.1995.2274.2832.3390.3483.3576.3669.3762.3855.4134"*) #1
+declare dso_local dereferenceable(8) ptr @_ZNSo5flushEv(ptr) #1
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local dereferenceable(570) %"class.std::ctype.38.224.317.410.503.596.782.875.968.1433.1712.1991.2270.2828.3386.3479.3572.3665.3758.3851.4130"* @_ZSt13__check_facetISt5ctypeIcEERKT_PS3_(%"class.std::ctype.38.224.317.410.503.596.782.875.968.1433.1712.1991.2270.2828.3386.3479.3572.3665.3758.3851.4130"*) #10
+declare dso_local dereferenceable(570) ptr @_ZSt13__check_facetISt5ctypeIcEERKT_PS3_(ptr) #10
 
 ; Function Attrs: uwtable
-declare dso_local signext i8 @_ZNKSt5ctypeIcE5widenEc(%"class.std::ctype.38.224.317.410.503.596.782.875.968.1433.1712.1991.2270.2828.3386.3479.3572.3665.3758.3851.4130"*, i8 signext) #0 align 2
+declare dso_local signext i8 @_ZNKSt5ctypeIcE5widenEc(ptr, i8 signext) #0 align 2
 
 ; Function Attrs: noreturn
 declare dso_local void @_ZSt16__throw_bad_castv() #15
 
-declare dso_local void @_ZNKSt5ctypeIcE13_M_widen_initEv(%"class.std::ctype.38.224.317.410.503.596.782.875.968.1433.1712.1991.2270.2828.3386.3479.3572.3665.3758.3851.4130"*) #1
+declare dso_local void @_ZNKSt5ctypeIcE13_M_widen_initEv(ptr) #1
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local dereferenceable(8) void ()** @_ZN9benchmark8internal15GetAbortHandlerEv() #11
+declare dso_local dereferenceable(8) ptr @_ZN9benchmark8internal15GetAbortHandlerEv() #11
 
 ; Function Attrs: noreturn nounwind
 declare dso_local void @abort() #12
 
 ; Function Attrs: nounwind
-declare dso_local i32 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareEPKc(%"class.std::__cxx11::basic_string.3.189.282.375.468.561.747.840.933.1398.1677.1956.2235.2793.3351.3444.3537.3630.3723.3816.4095"*, i8*) #2
+declare dso_local i32 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareEPKc(ptr, ptr) #2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EED2Ev(%"class.std::vector.27.66.252.345.438.531.624.810.903.996.1461.1740.2019.2298.2856.3414.3507.3600.3693.3786.3879.4158"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt6vectorIN9benchmark17BenchmarkReporter3RunESaIS2_EED2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZN9benchmark15ConsoleReporterD2Ev(%"class.benchmark::ConsoleReporter.74.260.353.446.539.632.818.911.1004.1469.1748.2027.2306.2864.3422.3515.3608.3701.3794.3887.4166"*) unnamed_addr #11 align 2
+declare dso_local void @_ZN9benchmark15ConsoleReporterD2Ev(ptr) unnamed_addr #11 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EED2Ev(%"struct.std::_Vector_base.28.65.251.344.437.530.623.809.902.995.1460.1739.2018.2297.2855.3413.3506.3599.3692.3785.3878.4157"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt12_Vector_baseIN9benchmark17BenchmarkReporter3RunESaIS2_EED2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN9benchmark17BenchmarkReporter3RunEED2Ev(%"class.__gnu_cxx::new_allocator.30.79.265.358.451.544.637.823.916.1009.1474.1753.2032.2311.2869.3427.3520.3613.3706.3799.3892.4171"*) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN9benchmark17BenchmarkReporter3RunEED2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind
-declare dso_local void @_ZN9benchmark17BenchmarkReporterD2Ev(%"class.benchmark::BenchmarkReporter.60.246.339.432.525.618.804.897.990.1455.1734.2013.2292.2850.3408.3501.3594.3687.3780.3873.4152"*) unnamed_addr #2
+declare dso_local void @_ZN9benchmark17BenchmarkReporterD2Ev(ptr) unnamed_addr #2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EED2Ev(%"struct.std::_Vector_base.7.193.286.379.472.565.751.844.937.1402.1681.1960.2239.2797.3355.3448.3541.3634.3727.3820.4099"*) unnamed_addr #4 align 2
+declare dso_local void @_ZNSt12_Vector_baseIN12_GLOBAL__N_18TestCaseESaIS1_EED2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEED2Ev(%"class.__gnu_cxx::new_allocator.71.257.350.443.536.629.815.908.1001.1466.1745.2024.2303.2861.3419.3512.3605.3698.3791.3884.4163"*) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx13new_allocatorIN12_GLOBAL__N_18TestCaseEED2Ev(ptr) unnamed_addr #4 align 2
 
 ; Function Attrs: uwtable
-declare dso_local %"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119"* @_ZN9benchmark17RegisterBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS5_EEEPNS_8internal9BenchmarkES5_OT_DpOT0_EUlS3_E_EESC_S5_SE_(i8*, %class.anon.37.89.275.368.461.554.647.833.926.1019.1484.1763.2042.2321.2879.3437.3530.3623.3716.3809.3902.4181* dereferenceable(16)) #0
+declare dso_local ptr @_ZN9benchmark17RegisterBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS5_EEEPNS_8internal9BenchmarkES5_OT_DpOT0_EUlS3_E_EESC_S5_SE_(ptr, ptr dereferenceable(16)) #0
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(16) %class.anon.37.89.275.368.461.554.647.833.926.1019.1484.1763.2042.2321.2879.3437.3530.3623.3716.3809.3902.4181* @_ZSt7forwardIZN9benchmark17RegisterBenchmarkIPFvRNS0_5StateEPKcEJRKS5_EEEPNS0_8internal9BenchmarkES5_OT_DpOT0_EUlS3_E_ESE_RNSt16remove_referenceISD_E4typeE(%class.anon.37.89.275.368.461.554.647.833.926.1019.1484.1763.2042.2321.2879.3437.3530.3623.3716.3809.3902.4181* dereferenceable(16)) #4
+declare dso_local dereferenceable(16) ptr @_ZSt7forwardIZN9benchmark17RegisterBenchmarkIPFvRNS0_5StateEPKcEJRKS5_EEEPNS0_8internal9BenchmarkES5_OT_DpOT0_EUlS3_E_ESE_RNSt16remove_referenceISD_E4typeE(ptr dereferenceable(16)) #4
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS6_EEEPNS0_9BenchmarkES6_OT_DpOT0_EUlS4_E_EC2ISI_EES6_SE_(%"class.benchmark::internal::LambdaBenchmark.90.276.369.462.555.648.834.927.1020.1485.1764.2043.2322.2880.3438.3531.3624.3717.3810.3903.4182"*, i8*, %class.anon.37.89.275.368.461.554.647.833.926.1019.1484.1763.2042.2321.2879.3437.3530.3623.3716.3809.3902.4181* dereferenceable(16)) unnamed_addr #0 align 2
+declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS6_EEEPNS0_9BenchmarkES6_OT_DpOT0_EUlS4_E_EC2ISI_EES6_SE_(ptr, ptr, ptr dereferenceable(16)) unnamed_addr #0 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS6_EEEPNS0_9BenchmarkES6_OT_DpOT0_EUlS4_E_ED0Ev(%"class.benchmark::internal::LambdaBenchmark.90.276.369.462.555.648.834.927.1020.1485.1764.2043.2322.2880.3438.3531.3624.3717.3810.3903.4182"*) unnamed_addr #11 align 2
+declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS6_EEEPNS0_9BenchmarkES6_OT_DpOT0_EUlS4_E_ED0Ev(ptr) unnamed_addr #11 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS6_EEEPNS0_9BenchmarkES6_OT_DpOT0_EUlS4_E_E3RunES4_(%"class.benchmark::internal::LambdaBenchmark.90.276.369.462.555.648.834.927.1020.1485.1764.2043.2322.2880.3438.3531.3624.3717.3810.3903.4182"*, %"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"* dereferenceable(144)) unnamed_addr #0 align 2
+declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkIZNS_17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS6_EEEPNS0_9BenchmarkES6_OT_DpOT0_EUlS4_E_E3RunES4_(ptr, ptr dereferenceable(144)) unnamed_addr #0 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @_ZZN9benchmark17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS4_EEEPNS_8internal9BenchmarkES4_OT_DpOT0_ENKUlS2_E_clES2_(%class.anon.37.89.275.368.461.554.647.833.926.1019.1484.1763.2042.2321.2879.3437.3530.3623.3716.3809.3902.4181*, %"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"* dereferenceable(144)) #10 align 2
+declare dso_local void @_ZZN9benchmark17RegisterBenchmarkIPFvRNS_5StateEPKcEJRKS4_EEEPNS_8internal9BenchmarkES4_OT_DpOT0_ENKUlS2_E_clES2_(ptr, ptr dereferenceable(144)) #10 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(1) %struct.CustomFixture.58.244.337.430.523.616.802.895.988.1453.1732.2011.2290.2848.3406.3499.3592.3685.3778.3871.4150* @_ZSt7forwardIR13CustomFixtureEOT_RNSt16remove_referenceIS2_E4typeE(%struct.CustomFixture.58.244.337.430.523.616.802.895.988.1453.1732.2011.2290.2848.3406.3499.3592.3685.3778.3871.4150* dereferenceable(1)) #4
+declare dso_local dereferenceable(1) ptr @_ZSt7forwardIR13CustomFixtureEOT_RNSt16remove_referenceIS2_E4typeE(ptr dereferenceable(1)) #4
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkI13CustomFixtureEC2IRS2_EEPKcOT_(%"class.benchmark::internal::LambdaBenchmark.38.91.277.370.463.556.649.835.928.1021.1486.1765.2044.2323.2881.3439.3532.3625.3718.3811.3904.4183"*, i8*, %struct.CustomFixture.58.244.337.430.523.616.802.895.988.1453.1732.2011.2290.2848.3406.3499.3592.3685.3778.3871.4150* dereferenceable(1)) unnamed_addr #0 align 2
+declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkI13CustomFixtureEC2IRS2_EEPKcOT_(ptr, ptr, ptr dereferenceable(1)) unnamed_addr #0 align 2
 
 ; Function Attrs: nounwind
-declare dso_local void @_ZN9benchmark8internal9BenchmarkD2Ev(%"class.benchmark::internal::Benchmark.27.213.306.399.492.585.771.864.957.1422.1701.1980.2259.2817.3375.3468.3561.3654.3747.3840.4119"*) unnamed_addr #2
+declare dso_local void @_ZN9benchmark8internal9BenchmarkD2Ev(ptr) unnamed_addr #2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkI13CustomFixtureED0Ev(%"class.benchmark::internal::LambdaBenchmark.38.91.277.370.463.556.649.835.928.1021.1486.1765.2044.2323.2881.3439.3532.3625.3718.3811.3904.4183"*) unnamed_addr #11 align 2
+declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkI13CustomFixtureED0Ev(ptr) unnamed_addr #11 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkI13CustomFixtureE3RunERNS_5StateE(%"class.benchmark::internal::LambdaBenchmark.38.91.277.370.463.556.649.835.928.1021.1486.1765.2044.2323.2881.3439.3532.3625.3718.3811.3904.4183"*, %"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"* dereferenceable(144)) unnamed_addr #0 align 2
+declare dso_local void @_ZN9benchmark8internal15LambdaBenchmarkI13CustomFixtureE3RunERNS_5StateE(ptr, ptr dereferenceable(144)) unnamed_addr #0 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @_ZN13CustomFixtureclERN9benchmark5StateE(%struct.CustomFixture.58.244.337.430.523.616.802.895.988.1453.1732.2011.2290.2848.3406.3499.3592.3685.3778.3871.4150*, %"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"* dereferenceable(144)) #0 align 2
+declare dso_local void @_ZN13CustomFixtureclERN9benchmark5StateE(ptr, ptr dereferenceable(144)) #0 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local dereferenceable(8) %class.anon.59.245.338.431.524.617.803.896.989.1454.1733.2012.2291.2849.3407.3500.3593.3686.3779.3872.4151* @"_ZSt7forwardIRZ25TestRegistrationAtRuntimevE3$_0EOT_RNSt16remove_referenceIS2_E4typeE"(%class.anon.59.245.338.431.524.617.803.896.989.1454.1733.2012.2291.2849.3407.3500.3593.3686.3779.3872.4151* dereferenceable(8)) #4
+declare dso_local dereferenceable(8) ptr @"_ZSt7forwardIRZ25TestRegistrationAtRuntimevE3$_0EOT_RNSt16remove_referenceIS2_E4typeE"(ptr dereferenceable(8)) #4
 
 ; Function Attrs: uwtable
-declare dso_local void @"_ZN9benchmark8internal15LambdaBenchmarkIZ25TestRegistrationAtRuntimevE3$_0EC2IRS2_EEPKcOT_"(%"class.benchmark::internal::LambdaBenchmark.39.92.278.371.464.557.650.836.929.1022.1487.1766.2045.2324.2882.3440.3533.3626.3719.3812.3905.4184"*, i8*, %class.anon.59.245.338.431.524.617.803.896.989.1454.1733.2012.2291.2849.3407.3500.3593.3686.3779.3872.4151* dereferenceable(8)) unnamed_addr #0 align 2
+declare dso_local void @"_ZN9benchmark8internal15LambdaBenchmarkIZ25TestRegistrationAtRuntimevE3$_0EC2IRS2_EEPKcOT_"(ptr, ptr, ptr dereferenceable(8)) unnamed_addr #0 align 2
 
 ; Function Attrs: inlinehint nounwind uwtable
-declare dso_local void @"_ZN9benchmark8internal15LambdaBenchmarkIZ25TestRegistrationAtRuntimevE3$_0ED0Ev"(%"class.benchmark::internal::LambdaBenchmark.39.92.278.371.464.557.650.836.929.1022.1487.1766.2045.2324.2882.3440.3533.3626.3719.3812.3905.4184"*) unnamed_addr #11 align 2
+declare dso_local void @"_ZN9benchmark8internal15LambdaBenchmarkIZ25TestRegistrationAtRuntimevE3$_0ED0Ev"(ptr) unnamed_addr #11 align 2
 
 ; Function Attrs: uwtable
-declare dso_local void @"_ZN9benchmark8internal15LambdaBenchmarkIZ25TestRegistrationAtRuntimevE3$_0E3RunERNS_5StateE"(%"class.benchmark::internal::LambdaBenchmark.39.92.278.371.464.557.650.836.929.1022.1487.1766.2045.2324.2882.3440.3533.3626.3719.3812.3905.4184"*, %"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"* dereferenceable(144)) unnamed_addr #0 align 2
+declare dso_local void @"_ZN9benchmark8internal15LambdaBenchmarkIZ25TestRegistrationAtRuntimevE3$_0E3RunERNS_5StateE"(ptr, ptr dereferenceable(144)) unnamed_addr #0 align 2
 
 ; Function Attrs: inlinehint uwtable
-declare dso_local void @"_ZZ25TestRegistrationAtRuntimevENK3$_0clERN9benchmark5StateE"(%class.anon.59.245.338.431.524.617.803.896.989.1454.1733.2012.2291.2849.3407.3500.3593.3686.3779.3872.4151*, %"class.benchmark::State.53.239.332.425.518.611.797.890.983.1448.1727.2006.2285.2843.3401.3494.3587.3680.3773.3866.4145"* dereferenceable(144)) #10 align 2
+declare dso_local void @"_ZZ25TestRegistrationAtRuntimevENK3$_0clERN9benchmark5StateE"(ptr, ptr dereferenceable(144)) #10 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEC2ERKS3_(%"class.__gnu_cxx::__normal_iterator.69.255.348.441.534.627.813.906.999.1464.1743.2022.2301.2859.3417.3510.3603.3696.3789.3882.4161"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"** dereferenceable(8)) unnamed_addr #4 align 2
+declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18TestCaseESt6vectorIS2_SaIS2_EEEC2ERKS3_(ptr, ptr dereferenceable(8)) unnamed_addr #4 align 2
 
 ; Function Attrs: nounwind uwtable
-declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE15_M_erase_at_endEPS1_(%"class.std::vector.8.194.287.380.473.566.752.845.938.1403.1682.1961.2240.2798.3356.3449.3542.3635.3728.3821.4100"*, %"struct.(anonymous namespace)::TestCase.4.190.283.376.469.562.748.841.934.1399.1678.1957.2236.2794.3352.3445.3538.3631.3724.3817.4096"*) #4 align 2
+declare dso_local void @_ZNSt6vectorIN12_GLOBAL__N_18TestCaseESaIS1_EE15_M_erase_at_endEPS1_(ptr, ptr) #4 align 2
 
 ; Function Attrs: uwtable
 declare dso_local void @_GLOBAL__sub_I_register_benchmark_test.cc() #0 section ".text.startup"

diff  --git a/llvm/test/Transforms/Attributor/undefined_behavior.ll b/llvm/test/Transforms/Attributor/undefined_behavior.ll
index 23384c705debc..4d559608272f3 100644
--- a/llvm/test/Transforms/Attributor/undefined_behavior.ll
+++ b/llvm/test/Transforms/Attributor/undefined_behavior.ll
@@ -16,7 +16,7 @@ define void @load_wholly_unreachable() {
 ; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:    unreachable
 ;
-  %a = load i32, i32* null
+  %a = load i32, ptr null
   ret void
 }
 
@@ -26,8 +26,8 @@ define void @loads_wholly_unreachable() {
 ; CHECK-SAME: () #[[ATTR0]] {
 ; CHECK-NEXT:    unreachable
 ;
-  %a = load i32, i32* null
-  %b = load i32, i32* null
+  %a = load i32, ptr null
+  %b = load i32, ptr null
   ret void
 }
 
@@ -44,7 +44,7 @@ define void @load_single_bb_unreachable(i1 %cond) {
 ;
   br i1 %cond, label %t, label %e
 t:
-  %b = load i32, i32* null
+  %b = load i32, ptr null
   br label %e
 e:
   ret void
@@ -58,17 +58,17 @@ define void @load_null_pointer_is_defined() null_pointer_is_valid {
 ; CHECK-SAME: () #[[ATTR1:[0-9]+]] {
 ; CHECK-NEXT:    ret void
 ;
-  %a = load i32, i32* null
+  %a = load i32, ptr null
   ret void
 }
 
-define internal i32* @ret_null() {
+define internal ptr @ret_null() {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@ret_null
 ; CGSCC-SAME: () #[[ATTR0]] {
-; CGSCC-NEXT:    ret i32* null
+; CGSCC-NEXT:    ret ptr null
 ;
-  ret i32* null
+  ret ptr null
 }
 
 define void @load_null_propagated() {
@@ -82,8 +82,8 @@ define void @load_null_propagated() {
 ; CGSCC-SAME: () #[[ATTR2:[0-9]+]] {
 ; CGSCC-NEXT:    ret void
 ;
-  %ptr = call i32* @ret_null()
-  %a = load i32, i32* %ptr
+  %ptr = call ptr @ret_null()
+  %a = load i32, ptr %ptr
   ret void
 }
 
@@ -95,7 +95,7 @@ define void @store_wholly_unreachable() {
 ; CHECK-SAME: () #[[ATTR0]] {
 ; CHECK-NEXT:    unreachable
 ;
-  store i32 5, i32* null
+  store i32 5, ptr null
   ret void
 }
 
@@ -103,16 +103,16 @@ define void @store_wholly_unreachable_volatile() {
 ; TUNIT: Function Attrs: nofree norecurse nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@store_wholly_unreachable_volatile
 ; TUNIT-SAME: () #[[ATTR2:[0-9]+]] {
-; TUNIT-NEXT:    store volatile i32 5, i32* null, align 4294967296
+; TUNIT-NEXT:    store volatile i32 5, ptr null, align 4294967296
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@store_wholly_unreachable_volatile
 ; CGSCC-SAME: () #[[ATTR3:[0-9]+]] {
-; CGSCC-NEXT:    store volatile i32 5, i32* null, align 4294967296
+; CGSCC-NEXT:    store volatile i32 5, ptr null, align 4294967296
 ; CGSCC-NEXT:    ret void
 ;
-  store volatile i32 5, i32* null
+  store volatile i32 5, ptr null
   ret void
 }
 
@@ -128,7 +128,7 @@ define void @store_single_bb_unreachable(i1 %cond) {
 ;
   br i1 %cond, label %t, label %e
 t:
-  store i32 5, i32* null
+  store i32 5, ptr null
   br label %e
 e:
   ret void
@@ -138,16 +138,16 @@ define void @store_null_pointer_is_defined() null_pointer_is_valid {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind null_pointer_is_valid willreturn memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@store_null_pointer_is_defined
 ; TUNIT-SAME: () #[[ATTR3:[0-9]+]] {
-; TUNIT-NEXT:    store i32 5, i32* null, align 4294967296
+; TUNIT-NEXT:    store i32 5, ptr null, align 4294967296
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind null_pointer_is_valid willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@store_null_pointer_is_defined
 ; CGSCC-SAME: () #[[ATTR4:[0-9]+]] {
-; CGSCC-NEXT:    store i32 5, i32* null, align 4294967296
+; CGSCC-NEXT:    store i32 5, ptr null, align 4294967296
 ; CGSCC-NEXT:    ret void
 ;
-  store i32 5, i32* null
+  store i32 5, ptr null
   ret void
 }
 
@@ -163,11 +163,11 @@ define void @store_null_propagated() {
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@store_null_propagated
 ; CGSCC-SAME: () #[[ATTR5:[0-9]+]] {
-; CGSCC-NEXT:    [[PTR:%.*]] = call noalias align 4294967296 i32* @ret_null() #[[ATTR10:[0-9]+]]
+; CGSCC-NEXT:    [[PTR:%.*]] = call noalias align 4294967296 ptr @ret_null() #[[ATTR10:[0-9]+]]
 ; CGSCC-NEXT:    ret void
 ;
-  %ptr = call i32* @ret_null()
-  store i32 5, i32* %ptr
+  %ptr = call ptr @ret_null()
+  store i32 5, ptr %ptr
   ret void
 }
 
@@ -184,7 +184,7 @@ define void @atomicrmw_wholly_unreachable() {
 ; CGSCC-SAME: () #[[ATTR3]] {
 ; CGSCC-NEXT:    unreachable
 ;
-  %a = atomicrmw add i32* null, i32 1 acquire
+  %a = atomicrmw add ptr null, i32 1 acquire
   ret void
 }
 
@@ -209,7 +209,7 @@ define void @atomicrmw_single_bb_unreachable(i1 %cond) {
 ;
   br i1 %cond, label %t, label %e
 t:
-  %a = atomicrmw add i32* null, i32 1 acquire
+  %a = atomicrmw add ptr null, i32 1 acquire
   br label %e
 e:
   ret void
@@ -219,16 +219,16 @@ define void @atomicrmw_null_pointer_is_defined() null_pointer_is_valid {
 ; TUNIT: Function Attrs: nofree norecurse nounwind null_pointer_is_valid willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@atomicrmw_null_pointer_is_defined
 ; TUNIT-SAME: () #[[ATTR4:[0-9]+]] {
-; TUNIT-NEXT:    [[A:%.*]] = atomicrmw add i32* null, i32 1 acquire, align 4
+; TUNIT-NEXT:    [[A:%.*]] = atomicrmw add ptr null, i32 1 acquire, align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nounwind null_pointer_is_valid willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@atomicrmw_null_pointer_is_defined
 ; CGSCC-SAME: () #[[ATTR6:[0-9]+]] {
-; CGSCC-NEXT:    [[A:%.*]] = atomicrmw add i32* null, i32 1 acquire, align 4
+; CGSCC-NEXT:    [[A:%.*]] = atomicrmw add ptr null, i32 1 acquire, align 4
 ; CGSCC-NEXT:    ret void
 ;
-  %a = atomicrmw add i32* null, i32 1 acquire
+  %a = atomicrmw add ptr null, i32 1 acquire
   ret void
 }
 
@@ -244,12 +244,12 @@ define void @atomicrmw_null_propagated() {
 ; CGSCC: Function Attrs: nofree nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@atomicrmw_null_propagated
 ; CGSCC-SAME: () #[[ATTR7:[0-9]+]] {
-; CGSCC-NEXT:    [[PTR:%.*]] = call noalias i32* @ret_null() #[[ATTR10]]
-; CGSCC-NEXT:    [[A:%.*]] = atomicrmw add i32* [[PTR]], i32 1 acquire, align 4
+; CGSCC-NEXT:    [[PTR:%.*]] = call noalias ptr @ret_null() #[[ATTR10]]
+; CGSCC-NEXT:    [[A:%.*]] = atomicrmw add ptr [[PTR]], i32 1 acquire, align 4
 ; CGSCC-NEXT:    ret void
 ;
-  %ptr = call i32* @ret_null()
-  %a = atomicrmw add i32* %ptr, i32 1 acquire
+  %ptr = call ptr @ret_null()
+  %a = atomicrmw add ptr %ptr, i32 1 acquire
   ret void
 }
 
@@ -266,7 +266,7 @@ define void @atomiccmpxchg_wholly_unreachable() {
 ; CGSCC-SAME: () #[[ATTR3]] {
 ; CGSCC-NEXT:    unreachable
 ;
-  %a = cmpxchg i32* null, i32 2, i32 3 acq_rel monotonic
+  %a = cmpxchg ptr null, i32 2, i32 3 acq_rel monotonic
   ret void
 }
 
@@ -291,7 +291,7 @@ define void @atomiccmpxchg_single_bb_unreachable(i1 %cond) {
 ;
   br i1 %cond, label %t, label %e
 t:
-  %a = cmpxchg i32* null, i32 2, i32 3 acq_rel monotonic
+  %a = cmpxchg ptr null, i32 2, i32 3 acq_rel monotonic
   br label %e
 e:
   ret void
@@ -301,16 +301,16 @@ define void @atomiccmpxchg_null_pointer_is_defined() null_pointer_is_valid {
 ; TUNIT: Function Attrs: nofree norecurse nounwind null_pointer_is_valid willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@atomiccmpxchg_null_pointer_is_defined
 ; TUNIT-SAME: () #[[ATTR4]] {
-; TUNIT-NEXT:    [[A:%.*]] = cmpxchg i32* null, i32 2, i32 3 acq_rel monotonic, align 4
+; TUNIT-NEXT:    [[A:%.*]] = cmpxchg ptr null, i32 2, i32 3 acq_rel monotonic, align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nounwind null_pointer_is_valid willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@atomiccmpxchg_null_pointer_is_defined
 ; CGSCC-SAME: () #[[ATTR6]] {
-; CGSCC-NEXT:    [[A:%.*]] = cmpxchg i32* null, i32 2, i32 3 acq_rel monotonic, align 4
+; CGSCC-NEXT:    [[A:%.*]] = cmpxchg ptr null, i32 2, i32 3 acq_rel monotonic, align 4
 ; CGSCC-NEXT:    ret void
 ;
-  %a = cmpxchg i32* null, i32 2, i32 3 acq_rel monotonic
+  %a = cmpxchg ptr null, i32 2, i32 3 acq_rel monotonic
   ret void
 }
 
@@ -326,12 +326,12 @@ define void @atomiccmpxchg_null_propagated() {
 ; CGSCC: Function Attrs: nofree nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@atomiccmpxchg_null_propagated
 ; CGSCC-SAME: () #[[ATTR7]] {
-; CGSCC-NEXT:    [[PTR:%.*]] = call noalias i32* @ret_null() #[[ATTR10]]
-; CGSCC-NEXT:    [[A:%.*]] = cmpxchg i32* [[PTR]], i32 2, i32 3 acq_rel monotonic, align 4
+; CGSCC-NEXT:    [[PTR:%.*]] = call noalias ptr @ret_null() #[[ATTR10]]
+; CGSCC-NEXT:    [[A:%.*]] = cmpxchg ptr [[PTR]], i32 2, i32 3 acq_rel monotonic, align 4
 ; CGSCC-NEXT:    ret void
 ;
-  %ptr = call i32* @ret_null()
-  %a = cmpxchg i32* %ptr, i32 2, i32 3 acq_rel monotonic
+  %ptr = call ptr @ret_null()
+  %a = cmpxchg ptr %ptr, i32 2, i32 3 acq_rel monotonic
   ret void
 }
 
@@ -519,7 +519,7 @@ define i32 @cond_br_on_undef_uninit() {
 ; CGSCC-NEXT:    unreachable
 ;
   %alloc = alloca i1
-  %cond = load i1, i1* %alloc
+  %cond = load i1, ptr %alloc
   br i1 %cond, label %t, label %e
 t:
   ret i32 1
@@ -531,7 +531,7 @@ e:
 ; and the branch is a terminator that can be constant-folded.
 ; We want to test that doing both won't cause a segfault.
 ; MODULE-NOT: @callee(
-define internal i32 @callee(i1 %C, i32* %A) {
+define internal i32 @callee(i1 %C, ptr %A) {
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@callee
@@ -544,7 +544,7 @@ define internal i32 @callee(i1 %C, i32* %A) {
 ; CGSCC-NEXT:    ret i32 1
 ;
 entry:
-  %A.0 = load i32, i32* null
+  %A.0 = load i32, ptr null
   br i1 %C, label %T, label %F
 
 T:
@@ -566,7 +566,7 @@ define i32 @foo() {
 ; CGSCC-NEXT:    [[X:%.*]] = call noundef i32 @callee() #[[ATTR10]]
 ; CGSCC-NEXT:    ret i32 [[X]]
 ;
-  %X = call i32 @callee(i1 false, i32* null)
+  %X = call i32 @callee(i1 false, ptr null)
   ret i32 %X
 }
 
@@ -574,117 +574,117 @@ define i32 @foo() {
 ;
 ; Tests for argument position
 
-define void @arg_nonnull_1(i32* nonnull %a) {
+define void @arg_nonnull_1(ptr nonnull %a) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@arg_nonnull_1
-; TUNIT-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR6:[0-9]+]] {
-; TUNIT-NEXT:    store i32 0, i32* [[A]], align 4
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR6:[0-9]+]] {
+; TUNIT-NEXT:    store i32 0, ptr [[A]], align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@arg_nonnull_1
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR9:[0-9]+]] {
-; CGSCC-NEXT:    store i32 0, i32* [[A]], align 4
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR9:[0-9]+]] {
+; CGSCC-NEXT:    store i32 0, ptr [[A]], align 4
 ; CGSCC-NEXT:    ret void
 ;
-  store i32 0, i32* %a
+  store i32 0, ptr %a
   ret void
 }
 
-define void @arg_nonnull_1_noundef_1(i32* nonnull noundef %a) {
+define void @arg_nonnull_1_noundef_1(ptr nonnull noundef %a) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@arg_nonnull_1_noundef_1
-; TUNIT-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR6]] {
-; TUNIT-NEXT:    store i32 0, i32* [[A]], align 4
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR6]] {
+; TUNIT-NEXT:    store i32 0, ptr [[A]], align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@arg_nonnull_1_noundef_1
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR9]] {
-; CGSCC-NEXT:    store i32 0, i32* [[A]], align 4
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR9]] {
+; CGSCC-NEXT:    store i32 0, ptr [[A]], align 4
 ; CGSCC-NEXT:    ret void
 ;
-  store i32 0, i32* %a
+  store i32 0, ptr %a
   ret void
 }
 
-define void @arg_nonnull_12(i32* nonnull %a, i32* nonnull %b, i32* %c) {
+define void @arg_nonnull_12(ptr nonnull %a, ptr nonnull %b, ptr %c) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@arg_nonnull_12
-; TUNIT-SAME: (i32* nocapture nofree nonnull writeonly [[A:%.*]], i32* nocapture nofree nonnull writeonly [[B:%.*]], i32* nofree writeonly [[C:%.*]]) #[[ATTR6]] {
-; TUNIT-NEXT:    [[D:%.*]] = icmp eq i32* [[C]], null
+; TUNIT-SAME: (ptr nocapture nofree nonnull writeonly [[A:%.*]], ptr nocapture nofree nonnull writeonly [[B:%.*]], ptr nofree writeonly [[C:%.*]]) #[[ATTR6]] {
+; TUNIT-NEXT:    [[D:%.*]] = icmp eq ptr [[C]], null
 ; TUNIT-NEXT:    br i1 [[D]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i32 0, i32* [[A]], align 4
+; TUNIT-NEXT:    store i32 0, ptr [[A]], align 4
 ; TUNIT-NEXT:    br label [[RET:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i32 1, i32* [[B]], align 4
+; TUNIT-NEXT:    store i32 1, ptr [[B]], align 4
 ; TUNIT-NEXT:    br label [[RET]]
 ; TUNIT:       ret:
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@arg_nonnull_12
-; CGSCC-SAME: (i32* nocapture nofree nonnull writeonly [[A:%.*]], i32* nocapture nofree nonnull writeonly [[B:%.*]], i32* nofree writeonly [[C:%.*]]) #[[ATTR9]] {
-; CGSCC-NEXT:    [[D:%.*]] = icmp eq i32* [[C]], null
+; CGSCC-SAME: (ptr nocapture nofree nonnull writeonly [[A:%.*]], ptr nocapture nofree nonnull writeonly [[B:%.*]], ptr nofree writeonly [[C:%.*]]) #[[ATTR9]] {
+; CGSCC-NEXT:    [[D:%.*]] = icmp eq ptr [[C]], null
 ; CGSCC-NEXT:    br i1 [[D]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i32 0, i32* [[A]], align 4
+; CGSCC-NEXT:    store i32 0, ptr [[A]], align 4
 ; CGSCC-NEXT:    br label [[RET:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i32 1, i32* [[B]], align 4
+; CGSCC-NEXT:    store i32 1, ptr [[B]], align 4
 ; CGSCC-NEXT:    br label [[RET]]
 ; CGSCC:       ret:
 ; CGSCC-NEXT:    ret void
 ;
-  %d = icmp eq i32* %c, null
+  %d = icmp eq ptr %c, null
   br i1 %d, label %t, label %f
 t:
-  store i32 0, i32* %a
+  store i32 0, ptr %a
   br label %ret
 f:
-  store i32 1, i32* %b
+  store i32 1, ptr %b
   br label %ret
 ret:
   ret void
 }
 
-define void @arg_nonnull_12_noundef_2(i32* nonnull %a, i32* noundef nonnull %b, i32* %c) {
+define void @arg_nonnull_12_noundef_2(ptr nonnull %a, ptr noundef nonnull %b, ptr %c) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@arg_nonnull_12_noundef_2
-; TUNIT-SAME: (i32* nocapture nofree nonnull writeonly [[A:%.*]], i32* nocapture nofree noundef nonnull writeonly [[B:%.*]], i32* nofree writeonly [[C:%.*]]) #[[ATTR6]] {
-; TUNIT-NEXT:    [[D:%.*]] = icmp eq i32* [[C]], null
+; TUNIT-SAME: (ptr nocapture nofree nonnull writeonly [[A:%.*]], ptr nocapture nofree noundef nonnull writeonly [[B:%.*]], ptr nofree writeonly [[C:%.*]]) #[[ATTR6]] {
+; TUNIT-NEXT:    [[D:%.*]] = icmp eq ptr [[C]], null
 ; TUNIT-NEXT:    br i1 [[D]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i32 0, i32* [[A]], align 4
+; TUNIT-NEXT:    store i32 0, ptr [[A]], align 4
 ; TUNIT-NEXT:    br label [[RET:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i32 1, i32* [[B]], align 4
+; TUNIT-NEXT:    store i32 1, ptr [[B]], align 4
 ; TUNIT-NEXT:    br label [[RET]]
 ; TUNIT:       ret:
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@arg_nonnull_12_noundef_2
-; CGSCC-SAME: (i32* nocapture nofree nonnull writeonly [[A:%.*]], i32* nocapture nofree noundef nonnull writeonly [[B:%.*]], i32* nofree writeonly [[C:%.*]]) #[[ATTR9]] {
-; CGSCC-NEXT:    [[D:%.*]] = icmp eq i32* [[C]], null
+; CGSCC-SAME: (ptr nocapture nofree nonnull writeonly [[A:%.*]], ptr nocapture nofree noundef nonnull writeonly [[B:%.*]], ptr nofree writeonly [[C:%.*]]) #[[ATTR9]] {
+; CGSCC-NEXT:    [[D:%.*]] = icmp eq ptr [[C]], null
 ; CGSCC-NEXT:    br i1 [[D]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i32 0, i32* [[A]], align 4
+; CGSCC-NEXT:    store i32 0, ptr [[A]], align 4
 ; CGSCC-NEXT:    br label [[RET:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i32 1, i32* [[B]], align 4
+; CGSCC-NEXT:    store i32 1, ptr [[B]], align 4
 ; CGSCC-NEXT:    br label [[RET]]
 ; CGSCC:       ret:
 ; CGSCC-NEXT:    ret void
 ;
-  %d = icmp eq i32* %c, null
+  %d = icmp eq ptr %c, null
   br i1 %d, label %t, label %f
 t:
-  store i32 0, i32* %a
+  store i32 0, ptr %a
   br label %ret
 f:
-  store i32 1, i32* %b
+  store i32 1, ptr %b
   br label %ret
 ret:
   ret void
@@ -702,7 +702,7 @@ define void @arg_nonnull_violation1_1() {
 ; CGSCC-SAME: () #[[ATTR2]] {
 ; CGSCC-NEXT:    unreachable
 ;
-  call void @arg_nonnull_1(i32* null)
+  call void @arg_nonnull_1(ptr null)
   ret void
 }
 
@@ -717,7 +717,7 @@ define void @arg_nonnull_violation1_2() {
 ; CGSCC-SAME: () #[[ATTR2]] {
 ; CGSCC-NEXT:    unreachable
 ;
-  call void @arg_nonnull_1_noundef_1(i32* null)
+  call void @arg_nonnull_1_noundef_1(ptr null)
   ret void
 }
 
@@ -733,9 +733,8 @@ define void @arg_nonnull_violation2_1(i1 %c) {
 ; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR2]] {
 ; CGSCC-NEXT:    unreachable
 ;
-  %null = getelementptr i32, i32* null, i32 0
-  %mustnull = select i1 %c, i32* null, i32* %null
-  call void @arg_nonnull_1(i32* %mustnull)
+  %mustnull = select i1 %c, ptr null, ptr null
+  call void @arg_nonnull_1(ptr %mustnull)
   ret void
 }
 
@@ -750,9 +749,8 @@ define void @arg_nonnull_violation2_2(i1 %c) {
 ; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR2]] {
 ; CGSCC-NEXT:    unreachable
 ;
-  %null = getelementptr i32, i32* null, i32 0
-  %mustnull = select i1 %c, i32* null, i32* %null
-  call void @arg_nonnull_1_noundef_1(i32* %mustnull)
+  %mustnull = select i1 %c, ptr null, ptr null
+  call void @arg_nonnull_1_noundef_1(ptr %mustnull)
   ret void
 }
 
@@ -764,8 +762,8 @@ define void @arg_nonnull_violation3_1(i1 %c) {
 ; TUNIT-NEXT:    [[PTR:%.*]] = alloca i32, align 4
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    call void @arg_nonnull_12(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR7:[0-9]+]]
-; TUNIT-NEXT:    call void @arg_nonnull_12(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 4294967296 null) #[[ATTR7]]
+; TUNIT-NEXT:    call void @arg_nonnull_12(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR7:[0-9]+]]
+; TUNIT-NEXT:    call void @arg_nonnull_12(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr noalias nocapture nofree noundef writeonly align 4294967296 null) #[[ATTR7]]
 ; TUNIT-NEXT:    unreachable
 ; TUNIT:       f:
 ; TUNIT-NEXT:    unreachable
@@ -778,8 +776,8 @@ define void @arg_nonnull_violation3_1(i1 %c) {
 ; CGSCC-NEXT:    [[PTR:%.*]] = alloca i32, align 4
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    call void @arg_nonnull_12(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR11:[0-9]+]]
-; CGSCC-NEXT:    call void @arg_nonnull_12(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 4294967296 null) #[[ATTR11]]
+; CGSCC-NEXT:    call void @arg_nonnull_12(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR11:[0-9]+]]
+; CGSCC-NEXT:    call void @arg_nonnull_12(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr noalias nocapture nofree noundef writeonly align 4294967296 null) #[[ATTR11]]
 ; CGSCC-NEXT:    unreachable
 ; CGSCC:       f:
 ; CGSCC-NEXT:    unreachable
@@ -789,16 +787,16 @@ define void @arg_nonnull_violation3_1(i1 %c) {
   %ptr = alloca i32
   br i1 %c, label %t, label %f
 t:
-  call void @arg_nonnull_12(i32* %ptr, i32* %ptr, i32* %ptr)
-  call void @arg_nonnull_12(i32* %ptr, i32* %ptr, i32* null)
-  call void @arg_nonnull_12(i32* %ptr, i32* null, i32* %ptr)
-  call void @arg_nonnull_12(i32* %ptr, i32* null, i32* null)
+  call void @arg_nonnull_12(ptr %ptr, ptr %ptr, ptr %ptr)
+  call void @arg_nonnull_12(ptr %ptr, ptr %ptr, ptr null)
+  call void @arg_nonnull_12(ptr %ptr, ptr null, ptr %ptr)
+  call void @arg_nonnull_12(ptr %ptr, ptr null, ptr null)
   br label %ret
 f:
-  call void @arg_nonnull_12(i32* null, i32* %ptr, i32* %ptr)
-  call void @arg_nonnull_12(i32* null, i32* %ptr, i32* null)
-  call void @arg_nonnull_12(i32* null, i32* null, i32* %ptr)
-  call void @arg_nonnull_12(i32* null, i32* null, i32* null)
+  call void @arg_nonnull_12(ptr null, ptr %ptr, ptr %ptr)
+  call void @arg_nonnull_12(ptr null, ptr %ptr, ptr null)
+  call void @arg_nonnull_12(ptr null, ptr null, ptr %ptr)
+  call void @arg_nonnull_12(ptr null, ptr null, ptr null)
   br label %ret
 ret:
   ret void
@@ -811,8 +809,8 @@ define void @arg_nonnull_violation3_2(i1 %c) {
 ; TUNIT-NEXT:    [[PTR:%.*]] = alloca i32, align 4
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    call void @arg_nonnull_12_noundef_2(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR7]]
-; TUNIT-NEXT:    call void @arg_nonnull_12_noundef_2(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 4294967296 null) #[[ATTR7]]
+; TUNIT-NEXT:    call void @arg_nonnull_12_noundef_2(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR7]]
+; TUNIT-NEXT:    call void @arg_nonnull_12_noundef_2(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr noalias nocapture nofree noundef writeonly align 4294967296 null) #[[ATTR7]]
 ; TUNIT-NEXT:    unreachable
 ; TUNIT:       f:
 ; TUNIT-NEXT:    unreachable
@@ -825,8 +823,8 @@ define void @arg_nonnull_violation3_2(i1 %c) {
 ; CGSCC-NEXT:    [[PTR:%.*]] = alloca i32, align 4
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    call void @arg_nonnull_12_noundef_2(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR11]]
-; CGSCC-NEXT:    call void @arg_nonnull_12_noundef_2(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 4294967296 null) #[[ATTR11]]
+; CGSCC-NEXT:    call void @arg_nonnull_12_noundef_2(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR11]]
+; CGSCC-NEXT:    call void @arg_nonnull_12_noundef_2(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], ptr noalias nocapture nofree noundef writeonly align 4294967296 null) #[[ATTR11]]
 ; CGSCC-NEXT:    unreachable
 ; CGSCC:       f:
 ; CGSCC-NEXT:    unreachable
@@ -836,16 +834,16 @@ define void @arg_nonnull_violation3_2(i1 %c) {
   %ptr = alloca i32
   br i1 %c, label %t, label %f
 t:
-  call void @arg_nonnull_12_noundef_2(i32* %ptr, i32* %ptr, i32* %ptr)
-  call void @arg_nonnull_12_noundef_2(i32* %ptr, i32* %ptr, i32* null)
-  call void @arg_nonnull_12_noundef_2(i32* %ptr, i32* null, i32* %ptr)
-  call void @arg_nonnull_12_noundef_2(i32* %ptr, i32* null, i32* null)
+  call void @arg_nonnull_12_noundef_2(ptr %ptr, ptr %ptr, ptr %ptr)
+  call void @arg_nonnull_12_noundef_2(ptr %ptr, ptr %ptr, ptr null)
+  call void @arg_nonnull_12_noundef_2(ptr %ptr, ptr null, ptr %ptr)
+  call void @arg_nonnull_12_noundef_2(ptr %ptr, ptr null, ptr null)
   br label %ret
 f:
-  call void @arg_nonnull_12_noundef_2(i32* null, i32* %ptr, i32* %ptr)
-  call void @arg_nonnull_12_noundef_2(i32* null, i32* %ptr, i32* null)
-  call void @arg_nonnull_12_noundef_2(i32* null, i32* null, i32* %ptr)
-  call void @arg_nonnull_12_noundef_2(i32* null, i32* null, i32* null)
+  call void @arg_nonnull_12_noundef_2(ptr null, ptr %ptr, ptr %ptr)
+  call void @arg_nonnull_12_noundef_2(ptr null, ptr %ptr, ptr null)
+  call void @arg_nonnull_12_noundef_2(ptr null, ptr null, ptr %ptr)
+  call void @arg_nonnull_12_noundef_2(ptr null, ptr null, ptr null)
   br label %ret
 ret:
   ret void
@@ -853,7 +851,7 @@ ret:
 
 ; Tests for returned position
 
-define nonnull i32* @returned_nonnnull(i32 %c) {
+define nonnull ptr @returned_nonnnull(i32 %c) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@returned_nonnnull
 ; CHECK-SAME: (i32 [[C:%.*]]) #[[ATTR0]] {
@@ -863,24 +861,24 @@ define nonnull i32* @returned_nonnnull(i32 %c) {
 ; CHECK-NEXT:    ]
 ; CHECK:       onzero:
 ; CHECK-NEXT:    [[PTR:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    ret i32* [[PTR]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ; CHECK:       onone:
-; CHECK-NEXT:    ret i32* null
+; CHECK-NEXT:    ret ptr null
 ; CHECK:       ondefault:
-; CHECK-NEXT:    ret i32* undef
+; CHECK-NEXT:    ret ptr undef
 ;
   switch i32 %c, label %ondefault [ i32 0, label %onzero
   i32 1, label %onone ]
 onzero:
   %ptr = alloca i32
-  ret i32* %ptr
+  ret ptr %ptr
 onone:
-  ret i32* null
+  ret ptr null
 ondefault:
-  ret i32* undef
+  ret ptr undef
 }
 
-define noundef i32* @returned_noundef(i32 %c) {
+define noundef ptr @returned_noundef(i32 %c) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@returned_noundef
 ; CHECK-SAME: (i32 [[C:%.*]]) #[[ATTR0]] {
@@ -890,9 +888,9 @@ define noundef i32* @returned_noundef(i32 %c) {
 ; CHECK-NEXT:    ]
 ; CHECK:       onzero:
 ; CHECK-NEXT:    [[PTR:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    ret i32* [[PTR]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ; CHECK:       onone:
-; CHECK-NEXT:    ret i32* null
+; CHECK-NEXT:    ret ptr null
 ; CHECK:       ondefault:
 ; CHECK-NEXT:    unreachable
 ;
@@ -900,14 +898,14 @@ define noundef i32* @returned_noundef(i32 %c) {
   i32 1, label %onone ]
 onzero:
   %ptr = alloca i32
-  ret i32* %ptr
+  ret ptr %ptr
 onone:
-  ret i32* null
+  ret ptr null
 ondefault:
-  ret i32* undef
+  ret ptr undef
 }
 
-define nonnull noundef i32* @returned_nonnnull_noundef(i32 %c) {
+define nonnull noundef ptr @returned_nonnnull_noundef(i32 %c) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@returned_nonnnull_noundef
 ; CHECK-SAME: (i32 [[C:%.*]]) #[[ATTR0]] {
@@ -917,7 +915,7 @@ define nonnull noundef i32* @returned_nonnnull_noundef(i32 %c) {
 ; CHECK-NEXT:    ]
 ; CHECK:       onzero:
 ; CHECK-NEXT:    [[PTR:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    ret i32* [[PTR]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ; CHECK:       onone:
 ; CHECK-NEXT:    unreachable
 ; CHECK:       ondefault:
@@ -927,11 +925,11 @@ define nonnull noundef i32* @returned_nonnnull_noundef(i32 %c) {
   i32 1, label %onone ]
 onzero:
   %ptr = alloca i32
-  ret i32* %ptr
+  ret ptr %ptr
 onone:
-  ret i32* null
+  ret ptr null
 ondefault:
-  ret i32* undef
+  ret ptr undef
 }
 
 define noundef i32 @returned_nonnnull_noundef_int() {
@@ -954,13 +952,13 @@ define void @callsite_noundef_1() {
   ret void
 }
 
-declare void @callee_ptr_arg(i32*)
+declare void @callee_ptr_arg(ptr)
 
 define void @callsite_noundef_2() {
 ; CHECK-LABEL: define {{[^@]+}}@callsite_noundef_2() {
 ; CHECK-NEXT:    unreachable
 ;
-  call void @callee_ptr_arg(i32* noundef undef)
+  call void @callee_ptr_arg(ptr noundef undef)
   ret void
 }
 
@@ -988,28 +986,28 @@ define i32 @violate_noundef_nonpointer() {
   ret i32 %ret
 }
 
-define i32* @argument_noundef2(i32* noundef %c) {
+define ptr @argument_noundef2(ptr noundef %c) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@argument_noundef2
-; CHECK-SAME: (i32* nofree noundef readnone returned "no-capture-maybe-returned" [[C:%.*]]) #[[ATTR0]] {
-; CHECK-NEXT:    ret i32* [[C]]
+; CHECK-SAME: (ptr nofree noundef readnone returned "no-capture-maybe-returned" [[C:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    ret ptr [[C]]
 ;
-  ret i32* %c
+  ret ptr %c
 }
 
-define i32* @violate_noundef_pointer() {
+define ptr @violate_noundef_pointer() {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@violate_noundef_pointer
 ; TUNIT-SAME: () #[[ATTR0]] {
-; TUNIT-NEXT:    ret i32* undef
+; TUNIT-NEXT:    ret ptr undef
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@violate_noundef_pointer
 ; CGSCC-SAME: () #[[ATTR2]] {
-; CGSCC-NEXT:    ret i32* undef
+; CGSCC-NEXT:    ret ptr undef
 ;
-  %ret = call i32* @argument_noundef2(i32* undef)
-  ret i32* %ret
+  %ret = call ptr @argument_noundef2(ptr undef)
+  ret ptr %ret
 }
 
 define internal noundef i32 @assumed_undef_is_ok(i1 %c, i32 %arg) {
@@ -1023,14 +1021,14 @@ define internal noundef i32 @assumed_undef_is_ok(i1 %c, i32 %arg) {
 ; CGSCC-NEXT:    ret i32 0
 ;
   %stack = alloca i32
-  store i32 %arg, i32* %stack
+  store i32 %arg, ptr %stack
   br i1 %c, label %rec, label %ret
 rec:
   %call = call i32 @assumed_undef_is_ok(i1 false, i32 0)
-  store i32 %call, i32* %stack
+  store i32 %call, ptr %stack
   br label %ret
 ret:
-  %l = load i32, i32* %stack
+  %l = load i32, ptr %stack
   ret i32 %l
 }
 

diff  --git a/llvm/test/Transforms/Attributor/value-simplify-assume.ll b/llvm/test/Transforms/Attributor/value-simplify-assume.ll
index 24eb89cfab165..af5343b4d9a81 100644
--- a/llvm/test/Transforms/Attributor/value-simplify-assume.ll
+++ b/llvm/test/Transforms/Attributor/value-simplify-assume.ll
@@ -6,21 +6,21 @@
 @Gstatic_int2 = internal global i32 zeroinitializer, align 4
 
 declare void @llvm.assume(i1)
-declare void @useI1p(i1*)
+declare void @useI1p(ptr)
 declare void @unknown()
 
 ;.
 ; CHECK: @[[GSTATIC_INT1:[a-zA-Z0-9_$"\\.-]+]] = internal global i32 0, align 4
 ; CHECK: @[[GSTATIC_INT2:[a-zA-Z0-9_$"\\.-]+]] = internal global i32 0, align 4
 ;.
-define i1 @readI1p(i1* %p) {
+define i1 @readI1p(ptr %p) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; CHECK-LABEL: define {{[^@]+}}@readI1p
-; CHECK-SAME: (i1* nocapture nofree noundef nonnull readonly dereferenceable(1) [[P:%.*]]) #[[ATTR1:[0-9]+]] {
-; CHECK-NEXT:    [[L:%.*]] = load i1, i1* [[P]], align 1
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull readonly dereferenceable(1) [[P:%.*]]) #[[ATTR1:[0-9]+]] {
+; CHECK-NEXT:    [[L:%.*]] = load i1, ptr [[P]], align 1
 ; CHECK-NEXT:    ret i1 [[L]]
 ;
-  %l = load i1, i1* %p
+  %l = load i1, ptr %p
   ret i1 %l
 }
 
@@ -29,16 +29,16 @@ define i1 @keep_assume_1c_nr() norecurse {
 ; CHECK-LABEL: define {{[^@]+}}@keep_assume_1c_nr
 ; CHECK-SAME: () #[[ATTR2:[0-9]+]] {
 ; CHECK-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CHECK-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CHECK-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
-; CHECK-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CHECK-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
+; CHECK-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    call void @llvm.assume(i1 noundef [[L]])
 ; CHECK-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  call void @useI1p(i1* %stack)
-  %l = load i1, i1* %stack
+  store i1 true, ptr %stack
+  call void @useI1p(ptr %stack)
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret i1 %l
 }
@@ -57,8 +57,8 @@ define i1 @drop_assume_1c_nr() norecurse {
 ; CGSCC-NEXT:    ret i1 true
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret i1 %l
 }
@@ -68,21 +68,21 @@ define i1 @keep_assume_2c_nr() norecurse {
 ; CHECK-LABEL: define {{[^@]+}}@keep_assume_2c_nr
 ; CHECK-SAME: () #[[ATTR2]] {
 ; CHECK-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CHECK-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CHECK-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
-; CHECK-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CHECK-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
+; CHECK-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    call void @llvm.assume(i1 noundef [[L1]])
 ; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    ret i1 [[L2]]
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  call void @useI1p(i1* %stack)
-  %l1 = load i1, i1* %stack
+  store i1 true, ptr %stack
+  call void @useI1p(ptr %stack)
+  %l1 = load i1, ptr %stack
   call void @llvm.assume(i1 %l1)
   call void @unknown()
-  %l2 = load i1, i1* %stack
+  %l2 = load i1, ptr %stack
   ret i1 %l2
 }
 
@@ -92,27 +92,27 @@ define i1 @keep_assume_3c_nr() norecurse {
 ; TUNIT-LABEL: define {{[^@]+}}@keep_assume_3c_nr
 ; TUNIT-SAME: () #[[ATTR2]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
-; TUNIT-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
+; TUNIT-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
 ; TUNIT-NEXT:    ret i1 [[L]]
 ;
 ; CGSCC: Function Attrs: norecurse
 ; CGSCC-LABEL: define {{[^@]+}}@keep_assume_3c_nr
 ; CGSCC-SAME: () #[[ATTR2]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
-; CGSCC-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
+; CGSCC-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
 ; CGSCC-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
-  call void @useI1p(i1* %stack)
+  call void @useI1p(ptr %stack)
   ret i1 %l
 }
 define i1 @keep_assume_4c_nr() norecurse {
@@ -121,27 +121,27 @@ define i1 @keep_assume_4c_nr() norecurse {
 ; TUNIT-LABEL: define {{[^@]+}}@keep_assume_4c_nr
 ; TUNIT-SAME: () #[[ATTR2]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR6]]
-; TUNIT-NEXT:    call void @useI1p(i1* noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
+; TUNIT-NEXT:    call void @useI1p(ptr noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
 ; TUNIT-NEXT:    ret i1 [[L4]]
 ;
 ; CGSCC: Function Attrs: norecurse
 ; CGSCC-LABEL: define {{[^@]+}}@keep_assume_4c_nr
 ; CGSCC-SAME: () #[[ATTR2]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR7]]
-; CGSCC-NEXT:    call void @useI1p(i1* noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
+; CGSCC-NEXT:    call void @useI1p(ptr noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
 ; CGSCC-NEXT:    ret i1 [[L4]]
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  %l4 = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l4 = load i1, ptr %stack
   call void @llvm.assume(i1 %l4)
-  call void @useI1p(i1* nocapture %stack)
+  call void @useI1p(ptr nocapture %stack)
   ret i1 %l4
 }
 
@@ -150,16 +150,16 @@ define i1 @keep_assume_1_nr(i1 %arg) norecurse {
 ; CHECK-LABEL: define {{[^@]+}}@keep_assume_1_nr
 ; CHECK-SAME: (i1 [[ARG:%.*]]) #[[ATTR2]] {
 ; CHECK-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CHECK-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CHECK-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
-; CHECK-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CHECK-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
+; CHECK-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    call void @llvm.assume(i1 noundef [[L]])
 ; CHECK-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  call void @useI1p(i1* %stack)
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  call void @useI1p(ptr %stack)
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret i1 %l
 }
@@ -169,7 +169,7 @@ define i1 @drop_assume_1_nr(i1 %arg) norecurse {
 ; TUNIT-LABEL: define {{[^@]+}}@drop_assume_1_nr
 ; TUNIT-SAME: (i1 returned [[ARG:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[ARG]]) #[[ATTR6]]
 ; TUNIT-NEXT:    ret i1 [[ARG]]
 ;
@@ -177,13 +177,13 @@ define i1 @drop_assume_1_nr(i1 %arg) norecurse {
 ; CGSCC-LABEL: define {{[^@]+}}@drop_assume_1_nr
 ; CGSCC-SAME: (i1 returned [[ARG:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[ARG]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[ARG]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret i1 %l
 }
@@ -193,21 +193,21 @@ define i1 @keep_assume_2_nr(i1 %arg) norecurse {
 ; CHECK-LABEL: define {{[^@]+}}@keep_assume_2_nr
 ; CHECK-SAME: (i1 [[ARG:%.*]]) #[[ATTR2]] {
 ; CHECK-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CHECK-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CHECK-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
-; CHECK-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CHECK-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
+; CHECK-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    call void @llvm.assume(i1 noundef [[L1]])
 ; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    ret i1 [[L2]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  call void @useI1p(i1* %stack)
-  %l1 = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  call void @useI1p(ptr %stack)
+  %l1 = load i1, ptr %stack
   call void @llvm.assume(i1 %l1)
   call void @unknown()
-  %l2 = load i1, i1* %stack
+  %l2 = load i1, ptr %stack
   ret i1 %l2
 }
 
@@ -217,27 +217,27 @@ define i1 @keep_assume_3_nr(i1 %arg) norecurse {
 ; TUNIT-LABEL: define {{[^@]+}}@keep_assume_3_nr
 ; TUNIT-SAME: (i1 [[ARG:%.*]]) #[[ATTR2]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
-; TUNIT-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
+; TUNIT-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
 ; TUNIT-NEXT:    ret i1 [[L]]
 ;
 ; CGSCC: Function Attrs: norecurse
 ; CGSCC-LABEL: define {{[^@]+}}@keep_assume_3_nr
 ; CGSCC-SAME: (i1 [[ARG:%.*]]) #[[ATTR2]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
-; CGSCC-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
+; CGSCC-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
 ; CGSCC-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
-  call void @useI1p(i1* %stack)
+  call void @useI1p(ptr %stack)
   ret i1 %l
 }
 
@@ -247,27 +247,27 @@ define i1 @keep_assume_4_nr(i1 %arg) norecurse {
 ; TUNIT-LABEL: define {{[^@]+}}@keep_assume_4_nr
 ; TUNIT-SAME: (i1 [[ARG:%.*]]) #[[ATTR2]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
-; TUNIT-NEXT:    call void @useI1p(i1* noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
+; TUNIT-NEXT:    call void @useI1p(ptr noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
 ; TUNIT-NEXT:    ret i1 [[L]]
 ;
 ; CGSCC: Function Attrs: norecurse
 ; CGSCC-LABEL: define {{[^@]+}}@keep_assume_4_nr
 ; CGSCC-SAME: (i1 [[ARG:%.*]]) #[[ATTR2]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
-; CGSCC-NEXT:    call void @useI1p(i1* noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
+; CGSCC-NEXT:    call void @useI1p(ptr noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
 ; CGSCC-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
-  call void @useI1p(i1* nocapture %stack)
+  call void @useI1p(ptr nocapture %stack)
   ret i1 %l
 }
 
@@ -276,7 +276,7 @@ define i1 @assume_1_nr(i1 %arg, i1 %cond) norecurse {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_1_nr
 ; TUNIT-SAME: (i1 returned [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[ARG]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
@@ -290,7 +290,7 @@ define i1 @assume_1_nr(i1 %arg, i1 %cond) norecurse {
 ; CGSCC-LABEL: define {{[^@]+}}@assume_1_nr
 ; CGSCC-SAME: (i1 returned [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[ARG]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
@@ -301,15 +301,15 @@ define i1 @assume_1_nr(i1 %arg, i1 %cond) norecurse {
 ; CGSCC-NEXT:    ret i1 [[ARG]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
   ret i1 %l
@@ -328,15 +328,15 @@ define void @assume_1b_nr(i1 %arg, i1 %cond) norecurse {
 ; CHECK-NEXT:    ret void
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
   ret void
@@ -347,16 +347,16 @@ define i1 @assume_2_nr(i1 %arg, i1 %cond) norecurse {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_2_nr
 ; TUNIT-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i1 false, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M]]
 ; TUNIT:       m:
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
 ; TUNIT-NEXT:    ret i1 [[L]]
 ;
@@ -364,30 +364,30 @@ define i1 @assume_2_nr(i1 %arg, i1 %cond) norecurse {
 ; CGSCC-LABEL: define {{[^@]+}}@assume_2_nr
 ; CGSCC-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i1 false, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M]]
 ; CGSCC:       m:
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
+  store i1 %arg, ptr %stack
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
-  %l = load i1, i1* %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret i1 %l
 }
@@ -405,16 +405,16 @@ define void @assume_2b_nr(i1 %arg, i1 %cond) norecurse {
 ; CHECK-NEXT:    ret void
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
+  store i1 %arg, ptr %stack
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
-  %l = load i1, i1* %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret void
 }
@@ -424,51 +424,51 @@ define i1 @assume_3_nr(i1 %arg, i1 %cond) norecurse {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_3_nr
 ; TUNIT-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i1 false, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M]]
 ; TUNIT:       m:
-; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7:[0-9]+]]
+; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7:[0-9]+]]
 ; TUNIT-NEXT:    ret i1 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(inaccessiblemem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@assume_3_nr
 ; CGSCC-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i1 false, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M]]
 ; CGSCC:       m:
-; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[R]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
-  %r = call i1 @readI1p(i1* %stack)
+  %r = call i1 @readI1p(ptr %stack)
   ret i1 %r
 }
 
@@ -477,51 +477,51 @@ define i1 @assume_4_nr(i1 %arg, i1 %cond) norecurse {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_4_nr
 ; TUNIT-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i1 false, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M]]
 ; TUNIT:       m:
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
-; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret i1 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(inaccessiblemem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@assume_4_nr
 ; CGSCC-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i1 false, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M]]
 ; CGSCC:       m:
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
-; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[R]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
+  store i1 %arg, ptr %stack
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
-  %l = load i1, i1* %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
-  %r = call i1 @readI1p(i1* %stack)
+  %r = call i1 @readI1p(ptr %stack)
   ret i1 %r
 }
 
@@ -530,69 +530,69 @@ define i1 @assume_5_nr(i1 %arg, i1 %cond) norecurse {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_5_nr
 ; TUNIT-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L1]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L2]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br label [[M:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i1 false, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L3:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 false, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L3:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L3]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br label [[M]]
 ; TUNIT:       m:
-; TUNIT-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR6]]
-; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret i1 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(inaccessiblemem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@assume_5_nr
 ; CGSCC-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L1]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L2]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br label [[M:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i1 false, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L3:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 false, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L3:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L3]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br label [[M]]
 ; CGSCC:       m:
-; CGSCC-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR7]]
-; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[R]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l1 = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l1 = load i1, ptr %stack
   call void @llvm.assume(i1 %l1)
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
-  %l2 = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l2 = load i1, ptr %stack
   call void @llvm.assume(i1 %l2)
   br label %m
 f:
-  store i1 false, i1* %stack
-  %l3 = load i1, i1* %stack
+  store i1 false, ptr %stack
+  %l3 = load i1, ptr %stack
   call void @llvm.assume(i1 %l3)
   br label %m
 m:
-  %l4 = load i1, i1* %stack
+  %l4 = load i1, ptr %stack
   call void @llvm.assume(i1 %l4)
-  %r = call i1 @readI1p(i1* %stack)
+  %r = call i1 @readI1p(ptr %stack)
   ret i1 %r
 }
 
@@ -601,69 +601,69 @@ define i1 @assume_5c_nr(i1 %cond) norecurse {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_5c_nr
 ; TUNIT-SAME: (i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L1]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L2]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br label [[M:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i1 false, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L3:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 false, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L3:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L3]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br label [[M]]
 ; TUNIT:       m:
-; TUNIT-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR6]]
-; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret i1 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(inaccessiblemem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@assume_5c_nr
 ; CGSCC-SAME: (i1 [[COND:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L1]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L2]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br label [[M:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i1 false, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L3:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 false, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L3:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L3]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br label [[M]]
 ; CGSCC:       m:
-; CGSCC-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR7]]
-; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[R]]
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  %l1 = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l1 = load i1, ptr %stack
   call void @llvm.assume(i1 %l1)
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
-  %l2 = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l2 = load i1, ptr %stack
   call void @llvm.assume(i1 %l2)
   br label %m
 f:
-  store i1 false, i1* %stack
-  %l3 = load i1, i1* %stack
+  store i1 false, ptr %stack
+  %l3 = load i1, ptr %stack
   call void @llvm.assume(i1 %l3)
   br label %m
 m:
-  %l4 = load i1, i1* %stack
+  %l4 = load i1, ptr %stack
   call void @llvm.assume(i1 %l4)
-  %r = call i1 @readI1p(i1* %stack)
+  %r = call i1 @readI1p(ptr %stack)
   ret i1 %r
 }
 
@@ -671,16 +671,16 @@ m:
 define i1 @keep_assume_1c() {
 ; CHECK-LABEL: define {{[^@]+}}@keep_assume_1c() {
 ; CHECK-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CHECK-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CHECK-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
-; CHECK-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CHECK-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
+; CHECK-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    call void @llvm.assume(i1 noundef [[L]])
 ; CHECK-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  call void @useI1p(i1* %stack)
-  %l = load i1, i1* %stack
+  store i1 true, ptr %stack
+  call void @useI1p(ptr %stack)
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret i1 %l
 }
@@ -699,8 +699,8 @@ define i1 @drop_assume_1c() {
 ; CGSCC-NEXT:    ret i1 true
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret i1 %l
 }
@@ -708,21 +708,21 @@ define i1 @drop_assume_1c() {
 define i1 @keep_assume_2c() {
 ; CHECK-LABEL: define {{[^@]+}}@keep_assume_2c() {
 ; CHECK-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CHECK-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CHECK-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
-; CHECK-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CHECK-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
+; CHECK-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    call void @llvm.assume(i1 noundef [[L1]])
 ; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    ret i1 [[L2]]
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  call void @useI1p(i1* %stack)
-  %l1 = load i1, i1* %stack
+  store i1 true, ptr %stack
+  call void @useI1p(ptr %stack)
+  %l1 = load i1, ptr %stack
   call void @llvm.assume(i1 %l1)
   call void @unknown()
-  %l2 = load i1, i1* %stack
+  %l2 = load i1, ptr %stack
   ret i1 %l2
 }
 
@@ -730,50 +730,50 @@ define i1 @keep_assume_3c() {
 ;
 ; TUNIT-LABEL: define {{[^@]+}}@keep_assume_3c() {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
-; TUNIT-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
+; TUNIT-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
 ; TUNIT-NEXT:    ret i1 [[L]]
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@keep_assume_3c() {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
-; CGSCC-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
+; CGSCC-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
 ; CGSCC-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
-  call void @useI1p(i1* %stack)
+  call void @useI1p(ptr %stack)
   ret i1 %l
 }
 define i1 @keep_assume_4c() {
 ;
 ; TUNIT-LABEL: define {{[^@]+}}@keep_assume_4c() {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR6]]
-; TUNIT-NEXT:    call void @useI1p(i1* noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
+; TUNIT-NEXT:    call void @useI1p(ptr noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
 ; TUNIT-NEXT:    ret i1 [[L4]]
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@keep_assume_4c() {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR7]]
-; CGSCC-NEXT:    call void @useI1p(i1* noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
+; CGSCC-NEXT:    call void @useI1p(ptr noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
 ; CGSCC-NEXT:    ret i1 [[L4]]
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  %l4 = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l4 = load i1, ptr %stack
   call void @llvm.assume(i1 %l4)
-  call void @useI1p(i1* nocapture %stack)
+  call void @useI1p(ptr nocapture %stack)
   ret i1 %l4
 }
 
@@ -781,16 +781,16 @@ define i1 @keep_assume_1(i1 %arg) {
 ; CHECK-LABEL: define {{[^@]+}}@keep_assume_1
 ; CHECK-SAME: (i1 [[ARG:%.*]]) {
 ; CHECK-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CHECK-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CHECK-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
-; CHECK-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CHECK-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
+; CHECK-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    call void @llvm.assume(i1 noundef [[L]])
 ; CHECK-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  call void @useI1p(i1* %stack)
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  call void @useI1p(ptr %stack)
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret i1 %l
 }
@@ -800,7 +800,7 @@ define i1 @drop_assume_1(i1 %arg) {
 ; TUNIT-LABEL: define {{[^@]+}}@drop_assume_1
 ; TUNIT-SAME: (i1 returned [[ARG:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[ARG]]) #[[ATTR6]]
 ; TUNIT-NEXT:    ret i1 [[ARG]]
 ;
@@ -808,13 +808,13 @@ define i1 @drop_assume_1(i1 %arg) {
 ; CGSCC-LABEL: define {{[^@]+}}@drop_assume_1
 ; CGSCC-SAME: (i1 returned [[ARG:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[ARG]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[ARG]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret i1 %l
 }
@@ -823,21 +823,21 @@ define i1 @keep_assume_2(i1 %arg) {
 ; CHECK-LABEL: define {{[^@]+}}@keep_assume_2
 ; CHECK-SAME: (i1 [[ARG:%.*]]) {
 ; CHECK-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CHECK-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CHECK-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
-; CHECK-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CHECK-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
+; CHECK-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    call void @llvm.assume(i1 noundef [[L1]])
 ; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; CHECK-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; CHECK-NEXT:    ret i1 [[L2]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  call void @useI1p(i1* %stack)
-  %l1 = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  call void @useI1p(ptr %stack)
+  %l1 = load i1, ptr %stack
   call void @llvm.assume(i1 %l1)
   call void @unknown()
-  %l2 = load i1, i1* %stack
+  %l2 = load i1, ptr %stack
   ret i1 %l2
 }
 
@@ -846,26 +846,26 @@ define i1 @keep_assume_3(i1 %arg) {
 ; TUNIT-LABEL: define {{[^@]+}}@keep_assume_3
 ; TUNIT-SAME: (i1 [[ARG:%.*]]) {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
-; TUNIT-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
+; TUNIT-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
 ; TUNIT-NEXT:    ret i1 [[L]]
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@keep_assume_3
 ; CGSCC-SAME: (i1 [[ARG:%.*]]) {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
-; CGSCC-NEXT:    call void @useI1p(i1* noundef nonnull dereferenceable(1) [[STACK]])
+; CGSCC-NEXT:    call void @useI1p(ptr noundef nonnull dereferenceable(1) [[STACK]])
 ; CGSCC-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
-  call void @useI1p(i1* %stack)
+  call void @useI1p(ptr %stack)
   ret i1 %l
 }
 
@@ -874,26 +874,26 @@ define i1 @keep_assume_4(i1 %arg) {
 ; TUNIT-LABEL: define {{[^@]+}}@keep_assume_4
 ; TUNIT-SAME: (i1 [[ARG:%.*]]) {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
-; TUNIT-NEXT:    call void @useI1p(i1* noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
+; TUNIT-NEXT:    call void @useI1p(ptr noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
 ; TUNIT-NEXT:    ret i1 [[L]]
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@keep_assume_4
 ; CGSCC-SAME: (i1 [[ARG:%.*]]) {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
-; CGSCC-NEXT:    call void @useI1p(i1* noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
+; CGSCC-NEXT:    call void @useI1p(ptr noalias nocapture noundef nonnull dereferenceable(1) [[STACK]])
 ; CGSCC-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
-  call void @useI1p(i1* nocapture %stack)
+  call void @useI1p(ptr nocapture %stack)
   ret i1 %l
 }
 
@@ -902,7 +902,7 @@ define i1 @assume_1(i1 %arg, i1 %cond) {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_1
 ; TUNIT-SAME: (i1 returned [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[ARG]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
@@ -916,7 +916,7 @@ define i1 @assume_1(i1 %arg, i1 %cond) {
 ; CGSCC-LABEL: define {{[^@]+}}@assume_1
 ; CGSCC-SAME: (i1 returned [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[ARG]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
@@ -927,15 +927,15 @@ define i1 @assume_1(i1 %arg, i1 %cond) {
 ; CGSCC-NEXT:    ret i1 [[ARG]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
   ret i1 %l
@@ -954,15 +954,15 @@ define void @assume_1b(i1 %arg, i1 %cond) {
 ; CHECK-NEXT:    ret void
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
   ret void
@@ -973,16 +973,16 @@ define i1 @assume_2(i1 %arg, i1 %cond) {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_2
 ; TUNIT-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i1 false, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M]]
 ; TUNIT:       m:
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
 ; TUNIT-NEXT:    ret i1 [[L]]
 ;
@@ -990,30 +990,30 @@ define i1 @assume_2(i1 %arg, i1 %cond) {
 ; CGSCC-LABEL: define {{[^@]+}}@assume_2
 ; CGSCC-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i1 false, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M]]
 ; CGSCC:       m:
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[L]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
+  store i1 %arg, ptr %stack
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
-  %l = load i1, i1* %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret i1 %l
 }
@@ -1031,16 +1031,16 @@ define void @assume_2b(i1 %arg, i1 %cond) {
 ; CHECK-NEXT:    ret void
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
+  store i1 %arg, ptr %stack
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
-  %l = load i1, i1* %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   ret void
 }
@@ -1050,51 +1050,51 @@ define i1 @assume_3(i1 %arg, i1 %cond) {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_3
 ; TUNIT-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i1 false, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M]]
 ; TUNIT:       m:
-; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret i1 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@assume_3
 ; CGSCC-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR4:[0-9]+]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i1 false, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M]]
 ; CGSCC:       m:
-; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[R]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
-  %r = call i1 @readI1p(i1* %stack)
+  %r = call i1 @readI1p(ptr %stack)
   ret i1 %r
 }
 
@@ -1103,51 +1103,51 @@ define i1 @assume_4(i1 %arg, i1 %cond) {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_4
 ; TUNIT-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i1 false, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    br label [[M]]
 ; TUNIT:       m:
-; TUNIT-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR6]]
-; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret i1 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@assume_4
 ; CGSCC-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR4]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i1 false, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 false, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    br label [[M]]
 ; CGSCC:       m:
-; CGSCC-NEXT:    [[L:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L]]) #[[ATTR7]]
-; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[R]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
+  store i1 %arg, ptr %stack
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
+  store i1 true, ptr %stack
   br label %m
 f:
-  store i1 false, i1* %stack
+  store i1 false, ptr %stack
   br label %m
 m:
-  %l = load i1, i1* %stack
+  %l = load i1, ptr %stack
   call void @llvm.assume(i1 %l)
-  %r = call i1 @readI1p(i1* %stack)
+  %r = call i1 @readI1p(ptr %stack)
   ret i1 %r
 }
 
@@ -1156,69 +1156,69 @@ define i1 @assume_5(i1 %arg, i1 %cond) {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_5
 ; TUNIT-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L1]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L2]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br label [[M:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i1 false, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L3:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 false, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L3:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L3]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br label [[M]]
 ; TUNIT:       m:
-; TUNIT-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR6]]
-; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret i1 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@assume_5
 ; CGSCC-SAME: (i1 [[ARG:%.*]], i1 [[COND:%.*]]) #[[ATTR4]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 [[ARG]], i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 [[ARG]], ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L1]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L2]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br label [[M:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i1 false, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L3:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 false, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L3:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L3]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br label [[M]]
 ; CGSCC:       m:
-; CGSCC-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR7]]
-; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[R]]
 ;
   %stack = alloca i1
-  store i1 %arg, i1* %stack
-  %l1 = load i1, i1* %stack
+  store i1 %arg, ptr %stack
+  %l1 = load i1, ptr %stack
   call void @llvm.assume(i1 %l1)
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
-  %l2 = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l2 = load i1, ptr %stack
   call void @llvm.assume(i1 %l2)
   br label %m
 f:
-  store i1 false, i1* %stack
-  %l3 = load i1, i1* %stack
+  store i1 false, ptr %stack
+  %l3 = load i1, ptr %stack
   call void @llvm.assume(i1 %l3)
   br label %m
 m:
-  %l4 = load i1, i1* %stack
+  %l4 = load i1, ptr %stack
   call void @llvm.assume(i1 %l4)
-  %r = call i1 @readI1p(i1* %stack)
+  %r = call i1 @readI1p(ptr %stack)
   ret i1 %r
 }
 
@@ -1227,69 +1227,69 @@ define i1 @assume_5c(i1 %cond) {
 ; TUNIT-LABEL: define {{[^@]+}}@assume_5c
 ; TUNIT-SAME: (i1 [[COND:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L1]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i1 true, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 true, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L2]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br label [[M:%.*]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i1 false, i1* [[STACK]], align 1
-; TUNIT-NEXT:    [[L3:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    store i1 false, ptr [[STACK]], align 1
+; TUNIT-NEXT:    [[L3:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L3]]) #[[ATTR6]]
 ; TUNIT-NEXT:    br label [[M]]
 ; TUNIT:       m:
-; TUNIT-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; TUNIT-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR6]]
-; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; TUNIT-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; TUNIT-NEXT:    ret i1 [[R]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@assume_5c
 ; CGSCC-SAME: (i1 [[COND:%.*]]) #[[ATTR4]] {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L1:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L1:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L1]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br i1 [[COND]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i1 true, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L2:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 true, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L2:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L2]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br label [[M:%.*]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i1 false, i1* [[STACK]], align 1
-; CGSCC-NEXT:    [[L3:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    store i1 false, ptr [[STACK]], align 1
+; CGSCC-NEXT:    [[L3:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L3]]) #[[ATTR7]]
 ; CGSCC-NEXT:    br label [[M]]
 ; CGSCC:       m:
-; CGSCC-NEXT:    [[L4:%.*]] = load i1, i1* [[STACK]], align 1
+; CGSCC-NEXT:    [[L4:%.*]] = load i1, ptr [[STACK]], align 1
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[L4]]) #[[ATTR7]]
-; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(i1* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
+; CGSCC-NEXT:    [[R:%.*]] = call i1 @readI1p(ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[STACK]]) #[[ATTR7]]
 ; CGSCC-NEXT:    ret i1 [[R]]
 ;
   %stack = alloca i1
-  store i1 true, i1* %stack
-  %l1 = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l1 = load i1, ptr %stack
   call void @llvm.assume(i1 %l1)
   br i1 %cond, label %t, label %f
 t:
-  store i1 true, i1* %stack
-  %l2 = load i1, i1* %stack
+  store i1 true, ptr %stack
+  %l2 = load i1, ptr %stack
   call void @llvm.assume(i1 %l2)
   br label %m
 f:
-  store i1 false, i1* %stack
-  %l3 = load i1, i1* %stack
+  store i1 false, ptr %stack
+  %l3 = load i1, ptr %stack
   call void @llvm.assume(i1 %l3)
   br label %m
 m:
-  %l4 = load i1, i1* %stack
+  %l4 = load i1, ptr %stack
   call void @llvm.assume(i1 %l4)
-  %r = call i1 @readI1p(i1* %stack)
+  %r = call i1 @readI1p(ptr %stack)
   ret i1 %r
 }
 
@@ -1299,71 +1299,71 @@ define i32 @assume_read_global_good() {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@assume_read_global_good
 ; TUNIT-SAME: () #[[ATTR4:[0-9]+]] {
-; TUNIT-NEXT:    [[LGS1:%.*]] = load i32, i32* @Gstatic_int1, align 4
+; TUNIT-NEXT:    [[LGS1:%.*]] = load i32, ptr @Gstatic_int1, align 4
 ; TUNIT-NEXT:    [[C:%.*]] = icmp eq i32 [[LGS1]], 42
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[C]]) #[[ATTR6]]
-; TUNIT-NEXT:    [[LGS2:%.*]] = load i32, i32* @Gstatic_int1, align 4
-; TUNIT-NEXT:    store i32 13, i32* @Gstatic_int1, align 4
-; TUNIT-NEXT:    store i32 17, i32* @Gstatic_int1, align 4
-; TUNIT-NEXT:    [[LGS3:%.*]] = load i32, i32* @Gstatic_int1, align 4
+; TUNIT-NEXT:    [[LGS2:%.*]] = load i32, ptr @Gstatic_int1, align 4
+; TUNIT-NEXT:    store i32 13, ptr @Gstatic_int1, align 4
+; TUNIT-NEXT:    store i32 17, ptr @Gstatic_int1, align 4
+; TUNIT-NEXT:    [[LGS3:%.*]] = load i32, ptr @Gstatic_int1, align 4
 ; TUNIT-NEXT:    [[ADD:%.*]] = add i32 [[LGS2]], [[LGS3]]
 ; TUNIT-NEXT:    ret i32 [[ADD]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@assume_read_global_good
 ; CGSCC-SAME: () #[[ATTR5:[0-9]+]] {
-; CGSCC-NEXT:    [[LGS1:%.*]] = load i32, i32* @Gstatic_int1, align 4
+; CGSCC-NEXT:    [[LGS1:%.*]] = load i32, ptr @Gstatic_int1, align 4
 ; CGSCC-NEXT:    [[C:%.*]] = icmp eq i32 [[LGS1]], 42
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[C]]) #[[ATTR7]]
-; CGSCC-NEXT:    [[LGS2:%.*]] = load i32, i32* @Gstatic_int1, align 4
-; CGSCC-NEXT:    store i32 13, i32* @Gstatic_int1, align 4
-; CGSCC-NEXT:    store i32 17, i32* @Gstatic_int1, align 4
-; CGSCC-NEXT:    [[LGS3:%.*]] = load i32, i32* @Gstatic_int1, align 4
+; CGSCC-NEXT:    [[LGS2:%.*]] = load i32, ptr @Gstatic_int1, align 4
+; CGSCC-NEXT:    store i32 13, ptr @Gstatic_int1, align 4
+; CGSCC-NEXT:    store i32 17, ptr @Gstatic_int1, align 4
+; CGSCC-NEXT:    [[LGS3:%.*]] = load i32, ptr @Gstatic_int1, align 4
 ; CGSCC-NEXT:    [[ADD:%.*]] = add i32 [[LGS2]], [[LGS3]]
 ; CGSCC-NEXT:    ret i32 [[ADD]]
 ;
-  %lgs1 = load i32, i32* @Gstatic_int1
+  %lgs1 = load i32, ptr @Gstatic_int1
   %c = icmp eq i32 %lgs1, 42
   call void @llvm.assume(i1 %c)
-  %lgs2 = load i32, i32* @Gstatic_int1
-  store i32 13, i32* @Gstatic_int1, align 4
-  store i32 17, i32* @Gstatic_int1, align 4
-  %lgs3 = load i32, i32* @Gstatic_int1
+  %lgs2 = load i32, ptr @Gstatic_int1
+  store i32 13, ptr @Gstatic_int1, align 4
+  store i32 17, ptr @Gstatic_int1, align 4
+  %lgs3 = load i32, ptr @Gstatic_int1
   %add = add i32 %lgs2, %lgs3
   ret i32 %add
 }
 
 ; TODO: Technically we could still utilize the assumption if we employ AA.
-define i32 @assume_read_global_bad(i32* %p) {
+define i32 @assume_read_global_bad(ptr %p) {
 ;
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@assume_read_global_bad
-; TUNIT-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR4]] {
-; TUNIT-NEXT:    [[LGS1:%.*]] = load i32, i32* @Gstatic_int2, align 4
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR4]] {
+; TUNIT-NEXT:    [[LGS1:%.*]] = load i32, ptr @Gstatic_int2, align 4
 ; TUNIT-NEXT:    [[C:%.*]] = icmp eq i32 [[LGS1]], 42
-; TUNIT-NEXT:    store i32 13, i32* [[P]], align 4
+; TUNIT-NEXT:    store i32 13, ptr [[P]], align 4
 ; TUNIT-NEXT:    call void @llvm.assume(i1 noundef [[C]]) #[[ATTR6]]
-; TUNIT-NEXT:    [[LGS2:%.*]] = load i32, i32* @Gstatic_int2, align 4
-; TUNIT-NEXT:    store i32 17, i32* @Gstatic_int2, align 4
+; TUNIT-NEXT:    [[LGS2:%.*]] = load i32, ptr @Gstatic_int2, align 4
+; TUNIT-NEXT:    store i32 17, ptr @Gstatic_int2, align 4
 ; TUNIT-NEXT:    ret i32 [[LGS2]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@assume_read_global_bad
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR5]] {
-; CGSCC-NEXT:    [[LGS1:%.*]] = load i32, i32* @Gstatic_int2, align 4
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[P:%.*]]) #[[ATTR5]] {
+; CGSCC-NEXT:    [[LGS1:%.*]] = load i32, ptr @Gstatic_int2, align 4
 ; CGSCC-NEXT:    [[C:%.*]] = icmp eq i32 [[LGS1]], 42
-; CGSCC-NEXT:    store i32 13, i32* [[P]], align 4
+; CGSCC-NEXT:    store i32 13, ptr [[P]], align 4
 ; CGSCC-NEXT:    call void @llvm.assume(i1 noundef [[C]]) #[[ATTR7]]
-; CGSCC-NEXT:    [[LGS2:%.*]] = load i32, i32* @Gstatic_int2, align 4
-; CGSCC-NEXT:    store i32 17, i32* @Gstatic_int2, align 4
+; CGSCC-NEXT:    [[LGS2:%.*]] = load i32, ptr @Gstatic_int2, align 4
+; CGSCC-NEXT:    store i32 17, ptr @Gstatic_int2, align 4
 ; CGSCC-NEXT:    ret i32 [[LGS2]]
 ;
-  %lgs1 = load i32, i32* @Gstatic_int2
+  %lgs1 = load i32, ptr @Gstatic_int2
   %c = icmp eq i32 %lgs1, 42
-  store i32 13, i32* %p, align 4
+  store i32 13, ptr %p, align 4
   call void @llvm.assume(i1 %c)
-  %lgs2 = load i32, i32* @Gstatic_int2
-  store i32 17, i32* @Gstatic_int2, align 4
+  %lgs2 = load i32, ptr @Gstatic_int2
+  store i32 17, ptr @Gstatic_int2, align 4
   ret i32 %lgs2
 }
 
@@ -1372,19 +1372,19 @@ define void @assume_write_globals() {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@assume_write_globals
 ; TUNIT-SAME: () #[[ATTR5:[0-9]+]] {
-; TUNIT-NEXT:    store i32 42, i32* @Gstatic_int1, align 4
-; TUNIT-NEXT:    store i32 42, i32* @Gstatic_int2, align 4
+; TUNIT-NEXT:    store i32 42, ptr @Gstatic_int1, align 4
+; TUNIT-NEXT:    store i32 42, ptr @Gstatic_int2, align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@assume_write_globals
 ; CGSCC-SAME: () #[[ATTR6:[0-9]+]] {
-; CGSCC-NEXT:    store i32 42, i32* @Gstatic_int1, align 4
-; CGSCC-NEXT:    store i32 42, i32* @Gstatic_int2, align 4
+; CGSCC-NEXT:    store i32 42, ptr @Gstatic_int1, align 4
+; CGSCC-NEXT:    store i32 42, ptr @Gstatic_int2, align 4
 ; CGSCC-NEXT:    ret void
 ;
-  store i32 42, i32* @Gstatic_int1, align 4
-  store i32 42, i32* @Gstatic_int2, align 4
+  store i32 42, ptr @Gstatic_int1, align 4
+  store i32 42, ptr @Gstatic_int2, align 4
   ret void
 }
 

diff  --git a/llvm/test/Transforms/Attributor/value-simplify-gpu.ll b/llvm/test/Transforms/Attributor/value-simplify-gpu.ll
index 6e6113e6e2cc4..0dbc6d3b9d85d 100644
--- a/llvm/test/Transforms/Attributor/value-simplify-gpu.ll
+++ b/llvm/test/Transforms/Attributor/value-simplify-gpu.ll
@@ -4,7 +4,7 @@
 
 target triple = "amdgcn-amd-amdhsa"
 
-%struct.ident_t = type { i32, i32, i32, i32, i8* }
+%struct.ident_t = type { i32, i32, i32, i32, ptr }
 @ReachableKernel = internal addrspace(3) global i32 3, align 4
 @UnreachableKernel = internal addrspace(3) global i32 42, align 4
 @ReachableKernelAS0 = internal global i32 7, align 4
@@ -94,13 +94,13 @@ define internal void @level2Kernelall_early() {
 ; CHECK-LABEL: define {{[^@]+}}@level2Kernelall_early
 ; CHECK-SAME: () #[[ATTR2:[0-9]+]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store i32 1, i32* @ReachableKernelAS0, align 4
-; CHECK-NEXT:    store i32 1, i32* addrspacecast (i32 addrspace(3)* @ReachableKernel to i32*), align 4
+; CHECK-NEXT:    store i32 1, ptr @ReachableKernelAS0, align 4
+; CHECK-NEXT:    store i32 1, ptr addrspacecast (ptr addrspace(3) @ReachableKernel to ptr), align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  store i32 1, i32* @ReachableKernelAS0, align 4
-  store i32 1, i32* addrspacecast (i32 addrspace(3)* @ReachableKernel to i32*), align 4
+  store i32 1, ptr @ReachableKernelAS0, align 4
+  store i32 1, ptr addrspacecast (ptr addrspace(3) @ReachableKernel to ptr), align 4
   ret void
 }
 
@@ -109,9 +109,9 @@ define internal void @level2Kernela() {
 ; TUNIT-LABEL: define {{[^@]+}}@level2Kernela
 ; TUNIT-SAME: () #[[ATTR1]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableKernel to i32*), align 4
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* @ReachableKernelAS0, align 4
-; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableKernel to i32*), align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableKernel to ptr), align 4
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr @ReachableKernelAS0, align 4
+; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableKernel to ptr), align 4
 ; TUNIT-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 noundef [[TMP2]]) #[[ATTR5:[0-9]+]]
 ; TUNIT-NEXT:    ret void
 ;
@@ -119,16 +119,16 @@ define internal void @level2Kernela() {
 ; CGSCC-LABEL: define {{[^@]+}}@level2Kernela
 ; CGSCC-SAME: () #[[ATTR3:[0-9]+]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableKernel to i32*), align 4
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, i32* @ReachableKernelAS0, align 4
-; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableKernel to i32*), align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableKernel to ptr), align 4
+; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr @ReachableKernelAS0, align 4
+; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableKernel to ptr), align 4
 ; CGSCC-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 noundef [[TMP2]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %0 = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableKernel to i32*), align 4
-  %1 = load i32, i32* @ReachableKernelAS0, align 4
-  %2 = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableKernel to i32*), align 4
+  %0 = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableKernel to ptr), align 4
+  %1 = load i32, ptr @ReachableKernelAS0, align 4
+  %2 = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableKernel to ptr), align 4
   call void @use(i32 %0, i32 %1, i32 %2)
   ret void
 }
@@ -138,9 +138,9 @@ define internal void @level2Kernelb() {
 ; TUNIT-LABEL: define {{[^@]+}}@level2Kernelb
 ; TUNIT-SAME: () #[[ATTR1]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableKernel to i32*), align 4
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* @ReachableKernelAS0, align 4
-; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableKernel to i32*), align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableKernel to ptr), align 4
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr @ReachableKernelAS0, align 4
+; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableKernel to ptr), align 4
 ; TUNIT-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 noundef [[TMP2]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret void
 ;
@@ -148,16 +148,16 @@ define internal void @level2Kernelb() {
 ; CGSCC-LABEL: define {{[^@]+}}@level2Kernelb
 ; CGSCC-SAME: () #[[ATTR3]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableKernel to i32*), align 4
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, i32* @ReachableKernelAS0, align 4
-; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableKernel to i32*), align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableKernel to ptr), align 4
+; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr @ReachableKernelAS0, align 4
+; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableKernel to ptr), align 4
 ; CGSCC-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 noundef [[TMP2]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %0 = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableKernel to i32*), align 4
-  %1 = load i32, i32* @ReachableKernelAS0, align 4
-  %2 = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableKernel to i32*), align 4
+  %0 = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableKernel to ptr), align 4
+  %1 = load i32, ptr @ReachableKernelAS0, align 4
+  %2 = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableKernel to ptr), align 4
   call void @use(i32 %0, i32 %1, i32 %2)
   ret void
 }
@@ -167,11 +167,11 @@ define internal void @level2Kernelall_late() {
 ; CHECK-LABEL: define {{[^@]+}}@level2Kernelall_late
 ; CHECK-SAME: () #[[ATTR2]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store i32 1, i32* addrspacecast (i32 addrspace(3)* @UnreachableKernel to i32*), align 4
+; CHECK-NEXT:    store i32 1, ptr addrspacecast (ptr addrspace(3) @UnreachableKernel to ptr), align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  store i32 1, i32 *addrspacecast (i32 addrspace(3)* @UnreachableKernel to i32*), align 4
+  store i32 1, ptr addrspacecast (ptr addrspace(3) @UnreachableKernel to ptr), align 4
   ret void
 }
 
@@ -204,19 +204,19 @@ define internal void @level1(i32 %C) {
 ; TUNIT-SAME: (i32 [[C:%.*]]) #[[ATTR1]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[LOCAL:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    call void @level2all_early(i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR4]]
+; TUNIT-NEXT:    call void @level2all_early(ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR4]]
 ; TUNIT-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[C]], 0
 ; TUNIT-NEXT:    br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
 ; TUNIT:       if.then:
-; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, i32* [[LOCAL]], align 4
+; TUNIT-NEXT:    [[TMP0:%.*]] = load i32, ptr [[LOCAL]], align 4
 ; TUNIT-NEXT:    call void @level2a(i32 [[TMP0]]) #[[ATTR3]]
 ; TUNIT-NEXT:    br label [[IF_END:%.*]]
 ; TUNIT:       if.else:
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* [[LOCAL]], align 4
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr [[LOCAL]], align 4
 ; TUNIT-NEXT:    call void @level2b(i32 [[TMP1]]) #[[ATTR3]]
 ; TUNIT-NEXT:    br label [[IF_END]]
 ; TUNIT:       if.end:
-; TUNIT-NEXT:    call void @level2all_late(i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR3]]
+; TUNIT-NEXT:    call void @level2all_late(ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR3]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: norecurse nosync nounwind
@@ -224,135 +224,135 @@ define internal void @level1(i32 %C) {
 ; CGSCC-SAME: (i32 [[C:%.*]]) #[[ATTR1]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    [[LOCAL:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    call void @level2all_early(i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR5]]
+; CGSCC-NEXT:    call void @level2all_early(ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR5]]
 ; CGSCC-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[C]], 0
 ; CGSCC-NEXT:    br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
 ; CGSCC:       if.then:
-; CGSCC-NEXT:    call void @level2a(i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR4]]
+; CGSCC-NEXT:    call void @level2a(ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR4]]
 ; CGSCC-NEXT:    br label [[IF_END:%.*]]
 ; CGSCC:       if.else:
-; CGSCC-NEXT:    call void @level2b(i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR4]]
+; CGSCC-NEXT:    call void @level2b(ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR4]]
 ; CGSCC-NEXT:    br label [[IF_END]]
 ; CGSCC:       if.end:
-; CGSCC-NEXT:    call void @level2all_late(i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR4]]
+; CGSCC-NEXT:    call void @level2all_late(ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[LOCAL]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
 entry:
   %local = alloca i32
-  call void @level2all_early(i32* %local)
+  call void @level2all_early(ptr %local)
   %tobool = icmp ne i32 %C, 0
   br i1 %tobool, label %if.then, label %if.else
 
 if.then:                                          ; preds = %entry
-  call void @level2a(i32* %local)
+  call void @level2a(ptr %local)
   br label %if.end
 
 if.else:                                          ; preds = %entry
-  call void @level2b(i32* %local)
+  call void @level2b(ptr %local)
   br label %if.end
 
 if.end:                                           ; preds = %if.else, %if.then
-  call void @level2all_late(i32* %local)
+  call void @level2all_late(ptr %local)
   ret void
 }
 
-define internal void @level2all_early(i32* %addr) {
+define internal void @level2all_early(ptr %addr) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@level2all_early
-; TUNIT-SAME: (i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[ADDR:%.*]]) #[[ATTR2]] {
+; TUNIT-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[ADDR:%.*]]) #[[ATTR2]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    store i32 1, i32* addrspacecast (i32 addrspace(3)* @ReachableNonKernel to i32*), align 4
-; TUNIT-NEXT:    store i32 17, i32* [[ADDR]], align 4
+; TUNIT-NEXT:    store i32 1, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4
+; TUNIT-NEXT:    store i32 17, ptr [[ADDR]], align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@level2all_early
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[ADDR:%.*]]) #[[ATTR2]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[ADDR:%.*]]) #[[ATTR2]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    store i32 1, i32* addrspacecast (i32 addrspace(3)* @ReachableNonKernel to i32*), align 4
-; CGSCC-NEXT:    store i32 17, i32* [[ADDR]], align 4
+; CGSCC-NEXT:    store i32 1, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4
+; CGSCC-NEXT:    store i32 17, ptr [[ADDR]], align 4
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  store i32 1, i32* addrspacecast (i32 addrspace(3)* @ReachableNonKernel to i32*), align 4
-  store i32 17, i32* %addr, align 4
+  store i32 1, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4
+  store i32 17, ptr %addr, align 4
   ret void
 }
 
-define internal void @level2a(i32* %addr) {
+define internal void @level2a(ptr %addr) {
 ; TUNIT: Function Attrs: norecurse nosync nounwind
 ; TUNIT-LABEL: define {{[^@]+}}@level2a
 ; TUNIT-SAME: (i32 [[TMP0:%.*]]) #[[ATTR1]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[ADDR_PRIV:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    store i32 [[TMP0]], i32* [[ADDR_PRIV]], align 4
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableNonKernel to i32*), align 4
-; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableNonKernel to i32*), align 4
-; TUNIT-NEXT:    [[QQQQ2:%.*]] = load i32, i32* [[ADDR_PRIV]], align 4
+; TUNIT-NEXT:    store i32 [[TMP0]], ptr [[ADDR_PRIV]], align 4
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4
+; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableNonKernel to ptr), align 4
+; TUNIT-NEXT:    [[QQQQ2:%.*]] = load i32, ptr [[ADDR_PRIV]], align 4
 ; TUNIT-NEXT:    call void @use(i32 noundef [[TMP1]], i32 noundef [[TMP2]], i32 [[QQQQ2]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nosync nounwind
 ; CGSCC-LABEL: define {{[^@]+}}@level2a
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[ADDR:%.*]]) #[[ATTR3]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[ADDR:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableNonKernel to i32*), align 4
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableNonKernel to i32*), align 4
-; CGSCC-NEXT:    [[QQQQ2:%.*]] = load i32, i32* [[ADDR]], align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4
+; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableNonKernel to ptr), align 4
+; CGSCC-NEXT:    [[QQQQ2:%.*]] = load i32, ptr [[ADDR]], align 4
 ; CGSCC-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 [[QQQQ2]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %0 = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableNonKernel to i32*), align 4
-  %1 = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableNonKernel to i32*), align 4
-  %qqqq2 = load i32, i32* %addr
+  %0 = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4
+  %1 = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableNonKernel to ptr), align 4
+  %qqqq2 = load i32, ptr %addr
   call void @use(i32 %0, i32 %1, i32 %qqqq2)
   ret void
 }
 
-define internal void @level2b(i32* %addr) {
+define internal void @level2b(ptr %addr) {
 ; TUNIT: Function Attrs: norecurse nosync nounwind
 ; TUNIT-LABEL: define {{[^@]+}}@level2b
 ; TUNIT-SAME: (i32 [[TMP0:%.*]]) #[[ATTR1]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    [[ADDR_PRIV:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    store i32 [[TMP0]], i32* [[ADDR_PRIV]], align 4
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableNonKernel to i32*), align 4
-; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableNonKernel to i32*), align 4
-; TUNIT-NEXT:    [[TMP3:%.*]] = load i32, i32* [[ADDR_PRIV]], align 4
+; TUNIT-NEXT:    store i32 [[TMP0]], ptr [[ADDR_PRIV]], align 4
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4
+; TUNIT-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableNonKernel to ptr), align 4
+; TUNIT-NEXT:    [[TMP3:%.*]] = load i32, ptr [[ADDR_PRIV]], align 4
 ; TUNIT-NEXT:    call void @use(i32 noundef [[TMP1]], i32 noundef [[TMP2]], i32 [[TMP3]]) #[[ATTR5]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nosync nounwind
 ; CGSCC-LABEL: define {{[^@]+}}@level2b
-; CGSCC-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[ADDR:%.*]]) #[[ATTR3]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[ADDR:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableNonKernel to i32*), align 4
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableNonKernel to i32*), align 4
-; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, i32* [[ADDR]], align 4
+; CGSCC-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4
+; CGSCC-NEXT:    [[TMP1:%.*]] = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableNonKernel to ptr), align 4
+; CGSCC-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ADDR]], align 4
 ; CGSCC-NEXT:    call void @use(i32 noundef [[TMP0]], i32 noundef [[TMP1]], i32 [[TMP2]]) #[[ATTR4]]
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %0 = load i32, i32* addrspacecast (i32 addrspace(3)* @ReachableNonKernel to i32*), align 4
-  %1 = load i32, i32* addrspacecast (i32 addrspace(3)* @UnreachableNonKernel to i32*), align 4
-  %2 = load i32, i32* %addr
+  %0 = load i32, ptr addrspacecast (ptr addrspace(3) @ReachableNonKernel to ptr), align 4
+  %1 = load i32, ptr addrspacecast (ptr addrspace(3) @UnreachableNonKernel to ptr), align 4
+  %2 = load i32, ptr %addr
   call void @use(i32 %0, i32 %1, i32 %2)
   ret void
 }
 
-define internal void @level2all_late(i32* %addr) {
+define internal void @level2all_late(ptr %addr) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; CHECK-LABEL: define {{[^@]+}}@level2all_late
-; CHECK-SAME: (i32* noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[ADDR:%.*]]) #[[ATTR2]] {
+; CHECK-SAME: (ptr noalias nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[ADDR:%.*]]) #[[ATTR2]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store i32 1, i32* addrspacecast (i32 addrspace(3)* @UnreachableNonKernel to i32*), align 4
-; CHECK-NEXT:    store i32 5, i32* [[ADDR]], align 4
+; CHECK-NEXT:    store i32 1, ptr addrspacecast (ptr addrspace(3) @UnreachableNonKernel to ptr), align 4
+; CHECK-NEXT:    store i32 5, ptr [[ADDR]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  store i32 1, i32* addrspacecast (i32 addrspace(3)* @UnreachableNonKernel to i32*), align 4
-  store i32 5, i32* %addr, align 4
+  store i32 1, ptr addrspacecast (ptr addrspace(3) @UnreachableNonKernel to ptr), align 4
+  store i32 5, ptr %addr, align 4
   ret void
 }
 

diff  --git a/llvm/test/Transforms/Attributor/value-simplify-instances.ll b/llvm/test/Transforms/Attributor/value-simplify-instances.ll
index 270673ba23c79..3cc581e79f1c0 100644
--- a/llvm/test/Transforms/Attributor/value-simplify-instances.ll
+++ b/llvm/test/Transforms/Attributor/value-simplify-instances.ll
@@ -4,55 +4,55 @@
 
 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
 
-declare i1* @geti1Ptr()
+declare ptr @geti1Ptr()
 
 ; Make sure we do *not* return true.
 ;.
-; CHECK: @[[G1:[a-zA-Z0-9_$"\\.-]+]] = private global i1* undef
-; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = private global i1* undef
+; CHECK: @[[G1:[a-zA-Z0-9_$"\\.-]+]] = private global ptr undef
+; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = private global ptr undef
 ; CHECK: @[[G3:[a-zA-Z0-9_$"\\.-]+]] = private global i1 undef
 ;.
-define internal i1 @recursive_inst_comparator(i1* %a, i1* %b) {
+define internal i1 @recursive_inst_comparator(ptr %a, ptr %b) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@recursive_inst_comparator
-; CHECK-SAME: (i1* noalias nofree readnone [[A:%.*]], i1* noalias nofree readnone [[B:%.*]]) #[[ATTR0:[0-9]+]] {
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i1* [[A]], [[B]]
+; CHECK-SAME: (ptr noalias nofree readnone [[A:%.*]], ptr noalias nofree readnone [[B:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[A]], [[B]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp eq i1* %a, %b
+  %cmp = icmp eq ptr %a, %b
   ret i1 %cmp
 }
 
-define internal i1 @recursive_inst_generator(i1 %c, i1* %p) {
+define internal i1 @recursive_inst_generator(i1 %c, ptr %p) {
 ; TUNIT-LABEL: define {{[^@]+}}@recursive_inst_generator
-; TUNIT-SAME: (i1 [[C:%.*]], i1* nofree [[P:%.*]]) {
-; TUNIT-NEXT:    [[A:%.*]] = call i1* @geti1Ptr()
+; TUNIT-SAME: (i1 [[C:%.*]], ptr nofree [[P:%.*]]) {
+; TUNIT-NEXT:    [[A:%.*]] = call ptr @geti1Ptr()
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    [[R1:%.*]] = call i1 @recursive_inst_comparator(i1* noalias nofree readnone [[A]], i1* noalias nofree readnone [[P]]) #[[ATTR6:[0-9]+]]
+; TUNIT-NEXT:    [[R1:%.*]] = call i1 @recursive_inst_comparator(ptr noalias nofree readnone [[A]], ptr noalias nofree readnone [[P]]) #[[ATTR6:[0-9]+]]
 ; TUNIT-NEXT:    ret i1 [[R1]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    [[R2:%.*]] = call i1 @recursive_inst_generator(i1 noundef true, i1* nofree [[A]])
+; TUNIT-NEXT:    [[R2:%.*]] = call i1 @recursive_inst_generator(i1 noundef true, ptr nofree [[A]])
 ; TUNIT-NEXT:    ret i1 [[R2]]
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@recursive_inst_generator
-; CGSCC-SAME: (i1 [[C:%.*]], i1* nofree [[P:%.*]]) {
-; CGSCC-NEXT:    [[A:%.*]] = call i1* @geti1Ptr()
+; CGSCC-SAME: (i1 [[C:%.*]], ptr nofree [[P:%.*]]) {
+; CGSCC-NEXT:    [[A:%.*]] = call ptr @geti1Ptr()
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    [[R1:%.*]] = call i1 @recursive_inst_comparator(i1* noalias nofree readnone [[A]], i1* noalias nofree readnone [[P]])
+; CGSCC-NEXT:    [[R1:%.*]] = call i1 @recursive_inst_comparator(ptr noalias nofree readnone [[A]], ptr noalias nofree readnone [[P]])
 ; CGSCC-NEXT:    ret i1 [[R1]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    [[R2:%.*]] = call i1 @recursive_inst_generator(i1 noundef true, i1* nofree [[A]])
+; CGSCC-NEXT:    [[R2:%.*]] = call i1 @recursive_inst_generator(i1 noundef true, ptr nofree [[A]])
 ; CGSCC-NEXT:    ret i1 [[R2]]
 ;
-  %a = call i1* @geti1Ptr()
+  %a = call ptr @geti1Ptr()
   br i1 %c, label %t, label %f
 t:
-  %r1 = call i1 @recursive_inst_comparator(i1* %a, i1* %p)
+  %r1 = call i1 @recursive_inst_comparator(ptr %a, ptr %p)
   ret i1 %r1
 f:
-  %r2 = call i1 @recursive_inst_generator(i1 true, i1* %a)
+  %r2 = call i1 @recursive_inst_generator(i1 true, ptr %a)
   ret i1 %r2
 }
 
@@ -60,33 +60,33 @@ f:
 define i1 @recursive_inst_generator_caller(i1 %c) {
 ; CHECK-LABEL: define {{[^@]+}}@recursive_inst_generator_caller
 ; CHECK-SAME: (i1 [[C:%.*]]) {
-; CHECK-NEXT:    [[CALL:%.*]] = call i1 @recursive_inst_generator(i1 [[C]], i1* undef)
+; CHECK-NEXT:    [[CALL:%.*]] = call i1 @recursive_inst_generator(i1 [[C]], ptr undef)
 ; CHECK-NEXT:    ret i1 [[CALL]]
 ;
-  %call = call i1 @recursive_inst_generator(i1 %c, i1* undef)
+  %call = call i1 @recursive_inst_generator(i1 %c, ptr undef)
   ret i1 %call
 }
 
 ; Make sure we do *not* return true.
-define internal i1 @recursive_inst_compare(i1 %c, i1* %p) {
+define internal i1 @recursive_inst_compare(i1 %c, ptr %p) {
 ; CHECK-LABEL: define {{[^@]+}}@recursive_inst_compare
-; CHECK-SAME: (i1 [[C:%.*]], i1* [[P:%.*]]) {
-; CHECK-NEXT:    [[A:%.*]] = call i1* @geti1Ptr()
+; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = call ptr @geti1Ptr()
 ; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CHECK:       t:
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i1* [[A]], [[P]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[A]], [[P]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ; CHECK:       f:
-; CHECK-NEXT:    [[CALL:%.*]] = call i1 @recursive_inst_compare(i1 noundef true, i1* [[A]])
+; CHECK-NEXT:    [[CALL:%.*]] = call i1 @recursive_inst_compare(i1 noundef true, ptr [[A]])
 ; CHECK-NEXT:    ret i1 [[CALL]]
 ;
-  %a = call i1* @geti1Ptr()
+  %a = call ptr @geti1Ptr()
   br i1 %c, label %t, label %f
 t:
-  %cmp = icmp eq i1* %a, %p
+  %cmp = icmp eq ptr %a, %p
   ret i1 %cmp
 f:
-  %call = call i1 @recursive_inst_compare(i1 true, i1* %a)
+  %call = call i1 @recursive_inst_compare(i1 true, ptr %a)
   ret i1 %call
 }
 
@@ -94,46 +94,46 @@ f:
 define i1 @recursive_inst_compare_caller(i1 %c) {
 ; CHECK-LABEL: define {{[^@]+}}@recursive_inst_compare_caller
 ; CHECK-SAME: (i1 [[C:%.*]]) {
-; CHECK-NEXT:    [[CALL:%.*]] = call i1 @recursive_inst_compare(i1 [[C]], i1* undef)
+; CHECK-NEXT:    [[CALL:%.*]] = call i1 @recursive_inst_compare(i1 [[C]], ptr undef)
 ; CHECK-NEXT:    ret i1 [[CALL]]
 ;
-  %call = call i1 @recursive_inst_compare(i1 %c, i1* undef)
+  %call = call i1 @recursive_inst_compare(i1 %c, ptr undef)
   ret i1 %call
 }
 
 ; Make sure we do *not* return true.
-define internal i1 @recursive_alloca_compare(i1 %c, i1* %p) {
+define internal i1 @recursive_alloca_compare(i1 %c, ptr %p) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@recursive_alloca_compare
-; TUNIT-SAME: (i1 [[C:%.*]], i1* noalias nofree nonnull readnone [[P:%.*]]) #[[ATTR1:[0-9]+]] {
+; TUNIT-SAME: (i1 [[C:%.*]], ptr noalias nofree nonnull readnone [[P:%.*]]) #[[ATTR1:[0-9]+]] {
 ; TUNIT-NEXT:    [[A:%.*]] = alloca i1, align 1
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    [[CMP:%.*]] = icmp eq i1* [[A]], [[P]]
+; TUNIT-NEXT:    [[CMP:%.*]] = icmp eq ptr [[A]], [[P]]
 ; TUNIT-NEXT:    ret i1 [[CMP]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare(i1 noundef true, i1* noalias nofree noundef nonnull readnone dereferenceable(1) [[A]]) #[[ATTR4:[0-9]+]]
+; TUNIT-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare(i1 noundef true, ptr noalias nofree noundef nonnull readnone dereferenceable(1) [[A]]) #[[ATTR4:[0-9]+]]
 ; TUNIT-NEXT:    ret i1 [[CALL]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@recursive_alloca_compare
-; CGSCC-SAME: (i1 [[C:%.*]], i1* noalias nofree nonnull readnone [[P:%.*]]) #[[ATTR1:[0-9]+]] {
+; CGSCC-SAME: (i1 [[C:%.*]], ptr noalias nofree nonnull readnone [[P:%.*]]) #[[ATTR1:[0-9]+]] {
 ; CGSCC-NEXT:    [[A:%.*]] = alloca i1, align 1
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    [[CMP:%.*]] = icmp eq i1* [[A]], [[P]]
+; CGSCC-NEXT:    [[CMP:%.*]] = icmp eq ptr [[A]], [[P]]
 ; CGSCC-NEXT:    ret i1 [[CMP]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare(i1 noundef true, i1* noalias nofree noundef nonnull readnone dereferenceable(1) [[A]]) #[[ATTR3:[0-9]+]]
+; CGSCC-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare(i1 noundef true, ptr noalias nofree noundef nonnull readnone dereferenceable(1) [[A]]) #[[ATTR3:[0-9]+]]
 ; CGSCC-NEXT:    ret i1 [[CALL]]
 ;
   %a = alloca i1
   br i1 %c, label %t, label %f
 t:
-  %cmp = icmp eq i1* %a, %p
+  %cmp = icmp eq ptr %a, %p
   ret i1 %cmp
 f:
-  %call = call i1 @recursive_alloca_compare(i1 true, i1* %a)
+  %call = call i1 @recursive_alloca_compare(i1 true, ptr %a)
   ret i1 %call
 }
 
@@ -142,58 +142,58 @@ define i1 @recursive_alloca_compare_caller(i1 %c) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@recursive_alloca_compare_caller
 ; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR2:[0-9]+]] {
-; TUNIT-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare(i1 [[C]], i1* undef) #[[ATTR4]]
+; TUNIT-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare(i1 [[C]], ptr undef) #[[ATTR4]]
 ; TUNIT-NEXT:    ret i1 [[CALL]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@recursive_alloca_compare_caller
 ; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
-; CGSCC-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare(i1 [[C]], i1* undef) #[[ATTR4:[0-9]+]]
+; CGSCC-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare(i1 [[C]], ptr undef) #[[ATTR4:[0-9]+]]
 ; CGSCC-NEXT:    ret i1 [[CALL]]
 ;
-  %call = call i1 @recursive_alloca_compare(i1 %c, i1* undef)
+  %call = call i1 @recursive_alloca_compare(i1 %c, ptr undef)
   ret i1 %call
 }
 
 ; Make sure we do *not* simplify this to return 0 or 1, return 42 is ok though.
-define internal i8 @recursive_alloca_load_return(i1 %c, i8* %p, i8 %v) {
+define internal i8 @recursive_alloca_load_return(i1 %c, ptr %p, i8 %v) {
 ; TUNIT: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; TUNIT-LABEL: define {{[^@]+}}@recursive_alloca_load_return
-; TUNIT-SAME: (i1 [[C:%.*]], i8* nocapture nofree nonnull readonly [[P:%.*]], i8 noundef [[V:%.*]]) #[[ATTR3:[0-9]+]] {
+; TUNIT-SAME: (i1 [[C:%.*]], ptr nocapture nofree nonnull readonly [[P:%.*]], i8 noundef [[V:%.*]]) #[[ATTR3:[0-9]+]] {
 ; TUNIT-NEXT:    [[A:%.*]] = alloca i8, align 1
-; TUNIT-NEXT:    store i8 [[V]], i8* [[A]], align 1
+; TUNIT-NEXT:    store i8 [[V]], ptr [[A]], align 1
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    store i8 0, i8* [[A]], align 1
-; TUNIT-NEXT:    [[L:%.*]] = load i8, i8* [[P]], align 1
+; TUNIT-NEXT:    store i8 0, ptr [[A]], align 1
+; TUNIT-NEXT:    [[L:%.*]] = load i8, ptr [[P]], align 1
 ; TUNIT-NEXT:    ret i8 [[L]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    [[CALL:%.*]] = call i8 @recursive_alloca_load_return(i1 noundef true, i8* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[A]], i8 noundef 1) #[[ATTR4]]
+; TUNIT-NEXT:    [[CALL:%.*]] = call i8 @recursive_alloca_load_return(i1 noundef true, ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[A]], i8 noundef 1) #[[ATTR4]]
 ; TUNIT-NEXT:    ret i8 [[CALL]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
 ; CGSCC-LABEL: define {{[^@]+}}@recursive_alloca_load_return
-; CGSCC-SAME: (i1 [[C:%.*]], i8* nocapture nofree nonnull readonly [[P:%.*]], i8 noundef [[V:%.*]]) #[[ATTR2:[0-9]+]] {
+; CGSCC-SAME: (i1 [[C:%.*]], ptr nocapture nofree nonnull readonly [[P:%.*]], i8 noundef [[V:%.*]]) #[[ATTR2:[0-9]+]] {
 ; CGSCC-NEXT:    [[A:%.*]] = alloca i8, align 1
-; CGSCC-NEXT:    store i8 [[V]], i8* [[A]], align 1
+; CGSCC-NEXT:    store i8 [[V]], ptr [[A]], align 1
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    store i8 0, i8* [[A]], align 1
-; CGSCC-NEXT:    [[L:%.*]] = load i8, i8* [[P]], align 1
+; CGSCC-NEXT:    store i8 0, ptr [[A]], align 1
+; CGSCC-NEXT:    [[L:%.*]] = load i8, ptr [[P]], align 1
 ; CGSCC-NEXT:    ret i8 [[L]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    [[CALL:%.*]] = call i8 @recursive_alloca_load_return(i1 noundef true, i8* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[A]], i8 noundef 1) #[[ATTR3]]
+; CGSCC-NEXT:    [[CALL:%.*]] = call i8 @recursive_alloca_load_return(i1 noundef true, ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[A]], i8 noundef 1) #[[ATTR3]]
 ; CGSCC-NEXT:    ret i8 [[CALL]]
 ;
   %a = alloca i8
-  store i8 %v, i8* %a
+  store i8 %v, ptr %a
   br i1 %c, label %t, label %f
 t:
-  store i8 0, i8* %a
-  %l = load i8, i8* %p
+  store i8 0, ptr %a
+  %l = load i8, ptr %p
   ret i8 %l
 f:
-  %call = call i8 @recursive_alloca_load_return(i1 true, i8* %a, i8 1)
+  %call = call i8 @recursive_alloca_load_return(i1 true, ptr %a, i8 1)
   ret i8 %call
 }
 
@@ -201,21 +201,21 @@ define i8 @recursive_alloca_load_return_caller(i1 %c) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@recursive_alloca_load_return_caller
 ; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR2]] {
-; TUNIT-NEXT:    [[CALL:%.*]] = call i8 @recursive_alloca_load_return(i1 [[C]], i8* undef, i8 noundef 42) #[[ATTR4]]
+; TUNIT-NEXT:    [[CALL:%.*]] = call i8 @recursive_alloca_load_return(i1 [[C]], ptr undef, i8 noundef 42) #[[ATTR4]]
 ; TUNIT-NEXT:    ret i8 [[CALL]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@recursive_alloca_load_return_caller
 ; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
-; CGSCC-NEXT:    [[CALL:%.*]] = call i8 @recursive_alloca_load_return(i1 [[C]], i8* undef, i8 noundef 42) #[[ATTR4]]
+; CGSCC-NEXT:    [[CALL:%.*]] = call i8 @recursive_alloca_load_return(i1 [[C]], ptr undef, i8 noundef 42) #[[ATTR4]]
 ; CGSCC-NEXT:    ret i8 [[CALL]]
 ;
-  %call = call i8 @recursive_alloca_load_return(i1 %c, i8* undef, i8 42)
+  %call = call i8 @recursive_alloca_load_return(i1 %c, ptr undef, i8 42)
   ret i8 %call
 }
 
- at G1 = private global i1* undef
- at G2 = private global i1* undef
+ at G1 = private global ptr undef
+ at G2 = private global ptr undef
 @G3 = private global i1 undef
 
 ; Make sure we do *not* return true.
@@ -226,11 +226,11 @@ define internal i1 @recursive_alloca_compare_global1(i1 %c) {
 ; TUNIT-NEXT:    [[A:%.*]] = alloca i1, align 1
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    [[P:%.*]] = load i1*, i1** @G1, align 8
-; TUNIT-NEXT:    [[CMP:%.*]] = icmp eq i1* [[A]], [[P]]
+; TUNIT-NEXT:    [[P:%.*]] = load ptr, ptr @G1, align 8
+; TUNIT-NEXT:    [[CMP:%.*]] = icmp eq ptr [[A]], [[P]]
 ; TUNIT-NEXT:    ret i1 [[CMP]]
 ; TUNIT:       f:
-; TUNIT-NEXT:    store i1* [[A]], i1** @G1, align 8
+; TUNIT-NEXT:    store ptr [[A]], ptr @G1, align 8
 ; TUNIT-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare_global1(i1 noundef true) #[[ATTR4]]
 ; TUNIT-NEXT:    ret i1 [[CALL]]
 ;
@@ -240,22 +240,22 @@ define internal i1 @recursive_alloca_compare_global1(i1 %c) {
 ; CGSCC-NEXT:    [[A:%.*]] = alloca i1, align 1
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    [[P:%.*]] = load i1*, i1** @G1, align 8
-; CGSCC-NEXT:    [[CMP:%.*]] = icmp eq i1* [[A]], [[P]]
+; CGSCC-NEXT:    [[P:%.*]] = load ptr, ptr @G1, align 8
+; CGSCC-NEXT:    [[CMP:%.*]] = icmp eq ptr [[A]], [[P]]
 ; CGSCC-NEXT:    ret i1 [[CMP]]
 ; CGSCC:       f:
-; CGSCC-NEXT:    store i1* [[A]], i1** @G1, align 8
+; CGSCC-NEXT:    store ptr [[A]], ptr @G1, align 8
 ; CGSCC-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare_global1(i1 noundef true) #[[ATTR3]]
 ; CGSCC-NEXT:    ret i1 [[CALL]]
 ;
   %a = alloca i1
   br i1 %c, label %t, label %f
 t:
-  %p = load i1*, i1** @G1
-  %cmp = icmp eq i1* %a, %p
+  %p = load ptr, ptr @G1
+  %cmp = icmp eq ptr %a, %p
   ret i1 %cmp
 f:
-  store i1* %a, i1** @G1
+  store ptr %a, ptr @G1
   %call = call i1 @recursive_alloca_compare_global1(i1 true)
   ret i1 %call
 }
@@ -283,11 +283,11 @@ define internal i1 @recursive_alloca_compare_global2(i1 %c) {
 ; TUNIT-LABEL: define {{[^@]+}}@recursive_alloca_compare_global2
 ; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR4]] {
 ; TUNIT-NEXT:    [[A:%.*]] = alloca i1, align 1
-; TUNIT-NEXT:    [[P:%.*]] = load i1*, i1** @G2, align 8
-; TUNIT-NEXT:    store i1* [[A]], i1** @G2, align 8
+; TUNIT-NEXT:    [[P:%.*]] = load ptr, ptr @G2, align 8
+; TUNIT-NEXT:    store ptr [[A]], ptr @G2, align 8
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
-; TUNIT-NEXT:    [[CMP:%.*]] = icmp eq i1* [[A]], [[P]]
+; TUNIT-NEXT:    [[CMP:%.*]] = icmp eq ptr [[A]], [[P]]
 ; TUNIT-NEXT:    ret i1 [[CMP]]
 ; TUNIT:       f:
 ; TUNIT-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare_global2(i1 noundef true) #[[ATTR4]]
@@ -297,22 +297,22 @@ define internal i1 @recursive_alloca_compare_global2(i1 %c) {
 ; CGSCC-LABEL: define {{[^@]+}}@recursive_alloca_compare_global2
 ; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR3]] {
 ; CGSCC-NEXT:    [[A:%.*]] = alloca i1, align 1
-; CGSCC-NEXT:    [[P:%.*]] = load i1*, i1** @G2, align 8
-; CGSCC-NEXT:    store i1* [[A]], i1** @G2, align 8
+; CGSCC-NEXT:    [[P:%.*]] = load ptr, ptr @G2, align 8
+; CGSCC-NEXT:    store ptr [[A]], ptr @G2, align 8
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
-; CGSCC-NEXT:    [[CMP:%.*]] = icmp eq i1* [[A]], [[P]]
+; CGSCC-NEXT:    [[CMP:%.*]] = icmp eq ptr [[A]], [[P]]
 ; CGSCC-NEXT:    ret i1 [[CMP]]
 ; CGSCC:       f:
 ; CGSCC-NEXT:    [[CALL:%.*]] = call i1 @recursive_alloca_compare_global2(i1 noundef true) #[[ATTR3]]
 ; CGSCC-NEXT:    ret i1 [[CALL]]
 ;
   %a = alloca i1
-  %p = load i1*, i1** @G2
-  store i1* %a, i1** @G2
+  %p = load ptr, ptr @G2
+  store ptr %a, ptr @G2
   br i1 %c, label %t, label %f
 t:
-  %cmp = icmp eq i1* %a, %p
+  %cmp = icmp eq ptr %a, %p
   ret i1 %cmp
 f:
   %call = call i1 @recursive_alloca_compare_global2(i1 true)
@@ -341,8 +341,8 @@ define internal i1 @recursive_inst_compare_global3(i1 %c) {
 ; TUNIT: Function Attrs: nofree nosync nounwind
 ; TUNIT-LABEL: define {{[^@]+}}@recursive_inst_compare_global3
 ; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR4]] {
-; TUNIT-NEXT:    [[P:%.*]] = load i1, i1* @G3, align 1
-; TUNIT-NEXT:    store i1 [[C]], i1* @G3, align 1
+; TUNIT-NEXT:    [[P:%.*]] = load i1, ptr @G3, align 1
+; TUNIT-NEXT:    store i1 [[C]], ptr @G3, align 1
 ; TUNIT-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; TUNIT:       t:
 ; TUNIT-NEXT:    [[CMP:%.*]] = icmp eq i1 [[C]], [[P]]
@@ -354,8 +354,8 @@ define internal i1 @recursive_inst_compare_global3(i1 %c) {
 ; CGSCC: Function Attrs: nofree nosync nounwind
 ; CGSCC-LABEL: define {{[^@]+}}@recursive_inst_compare_global3
 ; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR3]] {
-; CGSCC-NEXT:    [[P:%.*]] = load i1, i1* @G3, align 1
-; CGSCC-NEXT:    store i1 [[C]], i1* @G3, align 1
+; CGSCC-NEXT:    [[P:%.*]] = load i1, ptr @G3, align 1
+; CGSCC-NEXT:    store i1 [[C]], ptr @G3, align 1
 ; CGSCC-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
 ; CGSCC:       t:
 ; CGSCC-NEXT:    [[CMP:%.*]] = icmp eq i1 [[C]], [[P]]
@@ -364,8 +364,8 @@ define internal i1 @recursive_inst_compare_global3(i1 %c) {
 ; CGSCC-NEXT:    [[CALL:%.*]] = call i1 @recursive_inst_compare_global3(i1 noundef true) #[[ATTR3]]
 ; CGSCC-NEXT:    ret i1 [[CALL]]
 ;
-  %p = load i1, i1* @G3
-  store i1 %c, i1* @G3
+  %p = load i1, ptr @G3
+  store i1 %c, ptr @G3
   br i1 %c, label %t, label %f
 t:
   %cmp = icmp eq i1 %c, %p

diff  --git a/llvm/test/Transforms/Attributor/value-simplify.ll b/llvm/test/Transforms/Attributor/value-simplify.ll
index 490b5bb7e876c..718f522f3bb89 100644
--- a/llvm/test/Transforms/Attributor/value-simplify.ll
+++ b/llvm/test/Transforms/Attributor/value-simplify.ll
@@ -5,30 +5,30 @@
 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
 declare void @f(i32)
 declare token @llvm.call.preallocated.setup(i32)
-declare i8* @llvm.call.preallocated.arg(token, i32)
+declare ptr @llvm.call.preallocated.arg(token, i32)
 
 @ConstAS3Ptr = addrspace(3) global i32 0, align 4
 
 ;.
 ; CHECK: @[[CONSTAS3PTR:[a-zA-Z0-9_$"\\.-]+]] = addrspace(3) global i32 0, align 4
 ; CHECK: @[[S:[a-zA-Z0-9_$"\\.-]+]] = external global [[STRUCT_X:%.*]]
-; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal constant { [2 x i8*] } { [2 x i8*] [i8* bitcast (void (i8***)* @f1 to i8*), i8* bitcast (void (i1 (i8*)*)* @f2 to i8*)] }
+; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal constant { [2 x ptr] } { [2 x ptr] [ptr @f1, ptr @f2] }
 ;.
-define internal i32 addrspace(3)* @const_ptr_return_as3() {
+define internal ptr addrspace(3) @const_ptr_return_as3() {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@const_ptr_return_as3
 ; CGSCC-SAME: () #[[ATTR1:[0-9]+]] {
-; CGSCC-NEXT:    ret i32 addrspace(3)* @ConstAS3Ptr
+; CGSCC-NEXT:    ret ptr addrspace(3) @ConstAS3Ptr
 ;
-  ret i32 addrspace(3)* @ConstAS3Ptr
+  ret ptr addrspace(3) @ConstAS3Ptr
 }
-define internal i32* @const_ptr_return() {
+define internal ptr @const_ptr_return() {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@const_ptr_return
 ; CGSCC-SAME: () #[[ATTR1]] {
-; CGSCC-NEXT:    ret i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*)
+; CGSCC-NEXT:    ret ptr addrspacecast (ptr addrspace(3) @ConstAS3Ptr to ptr)
 ;
-  ret i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*)
+  ret ptr addrspacecast (ptr addrspace(3) @ConstAS3Ptr to ptr)
 }
 
 ; Test1: Replace argument with constant
@@ -415,205 +415,195 @@ f:
 }
 
 ; Do not touch complicated arguments (for now)
-%struct.X = type { i8* }
-define internal i32* @test_inalloca(i32* inalloca(i32) %a) {
+%struct.X = type { ptr }
+define internal ptr @test_inalloca(ptr inalloca(i32) %a) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@test_inalloca
-; CHECK-SAME: (i32* noalias nofree nonnull returned writeonly inalloca(i32) dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
-; CHECK-NEXT:    ret i32* [[A]]
+; CHECK-SAME: (ptr noalias nofree nonnull returned writeonly inalloca(i32) dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT:    ret ptr [[A]]
 ;
-  ret i32* %a
+  ret ptr %a
 }
-define i32* @complicated_args_inalloca(i32* %arg) {
+define ptr @complicated_args_inalloca(ptr %arg) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@complicated_args_inalloca
-; TUNIT-SAME: (i32* nofree readnone "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR1]] {
-; TUNIT-NEXT:    [[CALL:%.*]] = call nonnull dereferenceable(4) i32* @test_inalloca(i32* noalias nofree writeonly inalloca(i32) "no-capture-maybe-returned" [[ARG]]) #[[ATTR9:[0-9]+]]
-; TUNIT-NEXT:    ret i32* [[CALL]]
+; TUNIT-SAME: (ptr nofree readnone "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR1]] {
+; TUNIT-NEXT:    [[CALL:%.*]] = call nonnull dereferenceable(4) ptr @test_inalloca(ptr noalias nofree writeonly inalloca(i32) "no-capture-maybe-returned" [[ARG]]) #[[ATTR9:[0-9]+]]
+; TUNIT-NEXT:    ret ptr [[CALL]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@complicated_args_inalloca
-; CGSCC-SAME: (i32* nofree noundef nonnull readnone dereferenceable(4) [[ARG:%.*]]) #[[ATTR2]] {
-; CGSCC-NEXT:    [[CALL:%.*]] = call noalias nonnull dereferenceable(4) i32* @test_inalloca(i32* noalias nofree noundef nonnull writeonly inalloca(i32) dereferenceable(4) [[ARG]]) #[[ATTR12]]
-; CGSCC-NEXT:    ret i32* [[CALL]]
+; CGSCC-SAME: (ptr nofree noundef nonnull readnone dereferenceable(4) [[ARG:%.*]]) #[[ATTR2]] {
+; CGSCC-NEXT:    [[CALL:%.*]] = call noalias nonnull dereferenceable(4) ptr @test_inalloca(ptr noalias nofree noundef nonnull writeonly inalloca(i32) dereferenceable(4) [[ARG]]) #[[ATTR12]]
+; CGSCC-NEXT:    ret ptr [[CALL]]
 ;
-  %call = call i32* @test_inalloca(i32* inalloca(i32) %arg)
-  ret i32* %call
+  %call = call ptr @test_inalloca(ptr inalloca(i32) %arg)
+  ret ptr %call
 }
 
-define internal i32* @test_preallocated(i32* preallocated(i32) %a) {
+define internal ptr @test_preallocated(ptr preallocated(i32) %a) {
 ; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CHECK-LABEL: define {{[^@]+}}@test_preallocated
-; CHECK-SAME: (i32* noalias nofree noundef nonnull returned writeonly preallocated(i32) align 4294967296 dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
-; CHECK-NEXT:    ret i32* [[A]]
+; CHECK-SAME: (ptr noalias nofree noundef nonnull returned writeonly preallocated(i32) align 4294967296 dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT:    ret ptr [[A]]
 ;
-  ret i32* %a
+  ret ptr %a
 }
-define i32* @complicated_args_preallocated() {
+define ptr @complicated_args_preallocated() {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@complicated_args_preallocated
 ; TUNIT-SAME: () #[[ATTR2:[0-9]+]] {
 ; TUNIT-NEXT:    [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR10:[0-9]+]]
-; TUNIT-NEXT:    [[CALL:%.*]] = call noundef nonnull align 4294967296 dereferenceable(4) i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 4294967296 null) #[[ATTR9]] [ "preallocated"(token [[C]]) ]
-; TUNIT-NEXT:    ret i32* [[CALL]]
+; TUNIT-NEXT:    [[CALL:%.*]] = call noundef nonnull align 4294967296 dereferenceable(4) ptr @test_preallocated(ptr noalias nocapture nofree noundef writeonly preallocated(i32) align 4294967296 null) #[[ATTR9]] [ "preallocated"(token [[C]]) ]
+; TUNIT-NEXT:    ret ptr [[CALL]]
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@complicated_args_preallocated
 ; CGSCC-SAME: () #[[ATTR3:[0-9]+]] {
 ; CGSCC-NEXT:    [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR12]]
-; CGSCC-NEXT:    [[CALL:%.*]] = call i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 4294967296 null) #[[ATTR13:[0-9]+]] [ "preallocated"(token [[C]]) ]
-; CGSCC-NEXT:    ret i32* null
+; CGSCC-NEXT:    [[CALL:%.*]] = call ptr @test_preallocated(ptr noalias nocapture nofree noundef writeonly preallocated(i32) align 4294967296 null) #[[ATTR13:[0-9]+]] [ "preallocated"(token [[C]]) ]
+; CGSCC-NEXT:    ret ptr null
 ;
   %c = call token @llvm.call.preallocated.setup(i32 1)
-  %call = call i32* @test_preallocated(i32* preallocated(i32) null) ["preallocated"(token %c)]
-  ret i32* %call
+  %call = call ptr @test_preallocated(ptr preallocated(i32) null) ["preallocated"(token %c)]
+  ret ptr %call
 }
 
-define internal void @test_sret(%struct.X* sret(%struct.X) %a, %struct.X** %b) {
+define internal void @test_sret(ptr sret(%struct.X) %a, ptr %b) {
 ;
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@test_sret
-; TUNIT-SAME: (%struct.X* noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 4294967296 dereferenceable(8) [[A:%.*]], %struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR3:[0-9]+]] {
-; TUNIT-NEXT:    store %struct.X* [[A]], %struct.X** [[B]], align 8
+; TUNIT-SAME: (ptr noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 4294967296 dereferenceable(8) [[A:%.*]], ptr nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR3:[0-9]+]] {
+; TUNIT-NEXT:    store ptr [[A]], ptr [[B]], align 8
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@test_sret
-; CGSCC-SAME: (%struct.X* noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 4294967296 dereferenceable(8) [[A:%.*]], %struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR4:[0-9]+]] {
-; CGSCC-NEXT:    store %struct.X* [[A]], %struct.X** [[B]], align 8
+; CGSCC-SAME: (ptr noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 4294967296 dereferenceable(8) [[A:%.*]], ptr nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR4:[0-9]+]] {
+; CGSCC-NEXT:    store ptr [[A]], ptr [[B]], align 8
 ; CGSCC-NEXT:    ret void
 ;
-  store %struct.X* %a, %struct.X** %b
+  store ptr %a, ptr %b
   ret void
 }
 ; FIXME: Alignment and dereferenceability are not propagated to the argument
-define void @complicated_args_sret(%struct.X** %b) {
+define void @complicated_args_sret(ptr %b) {
 ;
 ;
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@complicated_args_sret
-; TUNIT-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR3]] {
-; TUNIT-NEXT:    call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 4294967296 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR9]]
+; TUNIT-SAME: (ptr nocapture nofree writeonly [[B:%.*]]) #[[ATTR3]] {
+; TUNIT-NEXT:    call void @test_sret(ptr noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 4294967296 null, ptr nocapture nofree writeonly align 8 [[B]]) #[[ATTR9]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@complicated_args_sret
-; CGSCC-SAME: (%struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR5:[0-9]+]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR5:[0-9]+]] {
 ; CGSCC-NEXT:    unreachable
 ;
-  call void @test_sret(%struct.X* sret(%struct.X) null, %struct.X** %b)
+  call void @test_sret(ptr sret(%struct.X) null, ptr %b)
   ret void
 }
 
-define internal %struct.X* @test_nest(%struct.X* nest %a) {
+define internal ptr @test_nest(ptr nest %a) {
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@test_nest
-; CGSCC-SAME: (%struct.X* nest noalias nocapture nofree readnone align 4294967296 [[A:%.*]]) #[[ATTR1]] {
-; CGSCC-NEXT:    ret %struct.X* null
+; CGSCC-SAME: (ptr nest noalias nocapture nofree readnone align 4294967296 [[A:%.*]]) #[[ATTR1]] {
+; CGSCC-NEXT:    ret ptr null
 ;
-  ret %struct.X* %a
+  ret ptr %a
 }
-define %struct.X* @complicated_args_nest() {
+define ptr @complicated_args_nest() {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
 ; TUNIT-LABEL: define {{[^@]+}}@complicated_args_nest
 ; TUNIT-SAME: () #[[ATTR1]] {
-; TUNIT-NEXT:    ret %struct.X* null
+; TUNIT-NEXT:    ret ptr null
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@complicated_args_nest
 ; CGSCC-SAME: () #[[ATTR2]] {
-; CGSCC-NEXT:    [[CALL:%.*]] = call noalias noundef align 4294967296 %struct.X* @test_nest(%struct.X* noalias nocapture nofree noundef readnone align 4294967296 null) #[[ATTR12]]
-; CGSCC-NEXT:    ret %struct.X* [[CALL]]
+; CGSCC-NEXT:    [[CALL:%.*]] = call noalias noundef align 4294967296 ptr @test_nest(ptr noalias nocapture nofree noundef readnone align 4294967296 null) #[[ATTR12]]
+; CGSCC-NEXT:    ret ptr [[CALL]]
 ;
-  %call = call %struct.X* @test_nest(%struct.X* null)
-  ret %struct.X* %call
+  %call = call ptr @test_nest(ptr null)
+  ret ptr %call
 }
 
 @S = external global %struct.X
-define internal void @test_byval(%struct.X* byval(%struct.X) %a) {
+define internal void @test_byval(ptr byval(%struct.X) %a) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@test_byval
-; TUNIT-SAME: (i8* [[TMP0:%.*]]) #[[ATTR3]] {
+; TUNIT-SAME: (ptr [[TMP0:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:    [[A_PRIV:%.*]] = alloca [[STRUCT_X:%.*]], align 8
-; TUNIT-NEXT:    [[A_PRIV_CAST:%.*]] = bitcast %struct.X* [[A_PRIV]] to i8**
-; TUNIT-NEXT:    store i8* [[TMP0]], i8** [[A_PRIV_CAST]], align 8
-; TUNIT-NEXT:    [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A_PRIV]], i32 0, i32 0
-; TUNIT-NEXT:    store i8* null, i8** [[G0]], align 8
+; TUNIT-NEXT:    store ptr [[TMP0]], ptr [[A_PRIV]], align 8
+; TUNIT-NEXT:    store ptr null, ptr [[A_PRIV]], align 8
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@test_byval
-; CGSCC-SAME: (i8* [[TMP0:%.*]]) #[[ATTR4]] {
+; CGSCC-SAME: (ptr [[TMP0:%.*]]) #[[ATTR4]] {
 ; CGSCC-NEXT:    [[A_PRIV:%.*]] = alloca [[STRUCT_X:%.*]], align 8
-; CGSCC-NEXT:    [[A_PRIV_CAST:%.*]] = bitcast %struct.X* [[A_PRIV]] to i8**
-; CGSCC-NEXT:    store i8* [[TMP0]], i8** [[A_PRIV_CAST]], align 8
-; CGSCC-NEXT:    [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A_PRIV]], i32 0, i32 0
-; CGSCC-NEXT:    store i8* null, i8** [[G0]], align 8
+; CGSCC-NEXT:    store ptr [[TMP0]], ptr [[A_PRIV]], align 8
+; CGSCC-NEXT:    store ptr null, ptr [[A_PRIV]], align 8
 ; CGSCC-NEXT:    ret void
 ;
-  %g0 = getelementptr %struct.X, %struct.X* %a, i32 0, i32 0
-  store i8* null, i8** %g0
+  store ptr null, ptr %a
   ret void
 }
 define void @complicated_args_byval() {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@complicated_args_byval
 ; TUNIT-SAME: () #[[ATTR4:[0-9]+]] {
-; TUNIT-NEXT:    [[S_CAST:%.*]] = bitcast %struct.X* @S to i8**
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i8*, i8** [[S_CAST]], align 8
-; TUNIT-NEXT:    call void @test_byval(i8* [[TMP1]]) #[[ATTR9]]
+; TUNIT-NEXT:    [[TMP1:%.*]] = load ptr, ptr @S, align 8
+; TUNIT-NEXT:    call void @test_byval(ptr [[TMP1]]) #[[ATTR9]]
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn
 ; CGSCC-LABEL: define {{[^@]+}}@complicated_args_byval
 ; CGSCC-SAME: () #[[ATTR3]] {
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i8*, i8** getelementptr inbounds ([[STRUCT_X:%.*]], %struct.X* @S, i32 0, i32 0), align 8
-; CGSCC-NEXT:    call void @test_byval(i8* nofree writeonly [[TMP1]]) #[[ATTR13]]
+; CGSCC-NEXT:    [[TMP1:%.*]] = load ptr, ptr @S, align 8
+; CGSCC-NEXT:    call void @test_byval(ptr nofree writeonly [[TMP1]]) #[[ATTR13]]
 ; CGSCC-NEXT:    ret void
 ;
-  call void @test_byval(%struct.X* byval(%struct.X) @S)
+  call void @test_byval(ptr byval(%struct.X) @S)
   ret void
 }
 
 declare void @sync()
 ; Make sure we *do not* load @S here!
-define internal i8*@test_byval2(%struct.X* byval(%struct.X) %a) {
+define internal ptr @test_byval2(ptr byval(%struct.X) %a) {
 ; CHECK-LABEL: define {{[^@]+}}@test_byval2
-; CHECK-SAME: (i8* [[TMP0:%.*]]) {
+; CHECK-SAME: (ptr [[TMP0:%.*]]) {
 ; CHECK-NEXT:    [[A_PRIV:%.*]] = alloca [[STRUCT_X:%.*]], align 8
-; CHECK-NEXT:    [[A_PRIV_CAST:%.*]] = bitcast %struct.X* [[A_PRIV]] to i8**
-; CHECK-NEXT:    store i8* [[TMP0]], i8** [[A_PRIV_CAST]], align 8
+; CHECK-NEXT:    store ptr [[TMP0]], ptr [[A_PRIV]], align 8
 ; CHECK-NEXT:    call void @sync()
-; CHECK-NEXT:    [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A_PRIV]], i32 0, i32 0
-; CHECK-NEXT:    [[L:%.*]] = load i8*, i8** [[G0]], align 8
-; CHECK-NEXT:    ret i8* [[L]]
+; CHECK-NEXT:    [[L:%.*]] = load ptr, ptr [[A_PRIV]], align 8
+; CHECK-NEXT:    ret ptr [[L]]
 ;
   call void @sync()
-  %g0 = getelementptr %struct.X, %struct.X* %a, i32 0, i32 0
-  %l = load i8*, i8** %g0
-  ret i8* %l
+  %l = load ptr, ptr %a
+  ret ptr %l
 }
-define i8* @complicated_args_byval2() {
+define ptr @complicated_args_byval2() {
 ;
 ; TUNIT-LABEL: define {{[^@]+}}@complicated_args_byval2() {
-; TUNIT-NEXT:    [[S_CAST:%.*]] = bitcast %struct.X* @S to i8**
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i8*, i8** [[S_CAST]], align 8
-; TUNIT-NEXT:    [[C:%.*]] = call i8* @test_byval2(i8* [[TMP1]])
-; TUNIT-NEXT:    ret i8* [[C]]
+; TUNIT-NEXT:    [[TMP1:%.*]] = load ptr, ptr @S, align 8
+; TUNIT-NEXT:    [[C:%.*]] = call ptr @test_byval2(ptr [[TMP1]])
+; TUNIT-NEXT:    ret ptr [[C]]
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@complicated_args_byval2() {
-; CGSCC-NEXT:    [[TMP1:%.*]] = load i8*, i8** getelementptr inbounds ([[STRUCT_X:%.*]], %struct.X* @S, i32 0, i32 0), align 8
-; CGSCC-NEXT:    [[C:%.*]] = call i8* @test_byval2(i8* [[TMP1]])
-; CGSCC-NEXT:    ret i8* [[C]]
+; CGSCC-NEXT:    [[TMP1:%.*]] = load ptr, ptr @S, align 8
+; CGSCC-NEXT:    [[C:%.*]] = call ptr @test_byval2(ptr [[TMP1]])
+; CGSCC-NEXT:    ret ptr [[C]]
 ;
-  %c = call i8* @test_byval2(%struct.X* byval(%struct.X) @S)
-  ret i8* %c
+  %c = call ptr @test_byval2(ptr byval(%struct.X) @S)
+  ret ptr %c
 }
 
-define void @fixpoint_changed(i32* %p) {
+define void @fixpoint_changed(ptr %p) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@fixpoint_changed
-; TUNIT-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR3]] {
+; TUNIT-SAME: (ptr nocapture nofree writeonly [[P:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:  entry:
 ; TUNIT-NEXT:    br label [[FOR_COND:%.*]]
 ; TUNIT:       for.cond:
@@ -628,7 +618,7 @@ define void @fixpoint_changed(i32* %p) {
 ; TUNIT-NEXT:    br label [[SW_EPILOG]]
 ; TUNIT:       sw.epilog:
 ; TUNIT-NEXT:    [[X_0:%.*]] = phi i32 [ 255, [[FOR_BODY]] ], [ 253, [[SW_BB]] ]
-; TUNIT-NEXT:    store i32 [[X_0]], i32* [[P]], align 4
+; TUNIT-NEXT:    store i32 [[X_0]], ptr [[P]], align 4
 ; TUNIT-NEXT:    [[INC]] = add nsw i32 [[J_0]], 1
 ; TUNIT-NEXT:    br label [[FOR_COND]]
 ; TUNIT:       for.end:
@@ -636,7 +626,7 @@ define void @fixpoint_changed(i32* %p) {
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@fixpoint_changed
-; CGSCC-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR4]] {
+; CGSCC-SAME: (ptr nocapture nofree writeonly [[P:%.*]]) #[[ATTR4]] {
 ; CGSCC-NEXT:  entry:
 ; CGSCC-NEXT:    br label [[FOR_COND:%.*]]
 ; CGSCC:       for.cond:
@@ -651,7 +641,7 @@ define void @fixpoint_changed(i32* %p) {
 ; CGSCC-NEXT:    br label [[SW_EPILOG]]
 ; CGSCC:       sw.epilog:
 ; CGSCC-NEXT:    [[X_0:%.*]] = phi i32 [ 255, [[FOR_BODY]] ], [ 253, [[SW_BB]] ]
-; CGSCC-NEXT:    store i32 [[X_0]], i32* [[P]], align 4
+; CGSCC-NEXT:    store i32 [[X_0]], ptr [[P]], align 4
 ; CGSCC-NEXT:    [[INC]] = add nsw i32 [[J_0]], 1
 ; CGSCC-NEXT:    br label [[FOR_COND]]
 ; CGSCC:       for.end:
@@ -675,7 +665,7 @@ sw.bb:
 
 sw.epilog:
   %x.0 = phi i32 [ 255, %for.body ], [ 253, %sw.bb ]
-  store i32 %x.0, i32* %p
+  store i32 %x.0, ptr %p
   %inc = add nsw i32 %j.0, 1
   br label %for.cond
 
@@ -788,36 +778,36 @@ define void @user_as3() {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@user_as3
 ; TUNIT-SAME: () #[[ATTR4]] {
-; TUNIT-NEXT:    store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4
+; TUNIT-NEXT:    store i32 0, ptr addrspace(3) @ConstAS3Ptr, align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@user_as3
 ; CGSCC-SAME: () #[[ATTR6:[0-9]+]] {
-; CGSCC-NEXT:    [[CALL:%.*]] = call fastcc align 4 i32 addrspace(3)* @const_ptr_return_as3() #[[ATTR12]]
-; CGSCC-NEXT:    store i32 0, i32 addrspace(3)* [[CALL]], align 4
+; CGSCC-NEXT:    [[CALL:%.*]] = call fastcc align 4 ptr addrspace(3) @const_ptr_return_as3() #[[ATTR12]]
+; CGSCC-NEXT:    store i32 0, ptr addrspace(3) [[CALL]], align 4
 ; CGSCC-NEXT:    ret void
 ;
-  %call = call fastcc i32 addrspace(3)* @const_ptr_return_as3()
-  store i32 0, i32 addrspace(3)* %call
+  %call = call fastcc ptr addrspace(3) @const_ptr_return_as3()
+  store i32 0, ptr addrspace(3) %call
   ret void
 }
 define void @user() {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(write)
 ; TUNIT-LABEL: define {{[^@]+}}@user
 ; TUNIT-SAME: () #[[ATTR4]] {
-; TUNIT-NEXT:    store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4
+; TUNIT-NEXT:    store i32 0, ptr addrspacecast (ptr addrspace(3) @ConstAS3Ptr to ptr), align 4
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(write)
 ; CGSCC-LABEL: define {{[^@]+}}@user
 ; CGSCC-SAME: () #[[ATTR6]] {
-; CGSCC-NEXT:    [[CALL:%.*]] = call fastcc align 4 i32* @const_ptr_return() #[[ATTR12]]
-; CGSCC-NEXT:    store i32 0, i32* [[CALL]], align 4
+; CGSCC-NEXT:    [[CALL:%.*]] = call fastcc align 4 ptr @const_ptr_return() #[[ATTR12]]
+; CGSCC-NEXT:    store i32 0, ptr [[CALL]], align 4
 ; CGSCC-NEXT:    ret void
 ;
-  %call = call fastcc i32* @const_ptr_return()
-  store i32 0, i32* %call
+  %call = call fastcc ptr @const_ptr_return()
+  store i32 0, ptr %call
   ret void
 }
 
@@ -834,10 +824,10 @@ define i1 @test_merge_with_undef_values_ptr(i1 %c) {
 ; CGSCC-NEXT:    [[R1:%.*]] = call noundef i1 @undef_then_null(i1 [[C]]) #[[ATTR12]]
 ; CGSCC-NEXT:    ret i1 [[R1]]
 ;
-  %r1 = call i1 @undef_then_null(i1 %c, i32* undef, i32* undef)
+  %r1 = call i1 @undef_then_null(i1 %c, ptr undef, ptr undef)
   ret i1 %r1
 }
-define internal i1 @undef_then_null(i1 %c, i32* %i32Aptr, i32* %i32Bptr) {
+define internal i1 @undef_then_null(i1 %c, ptr %i32Aptr, ptr %i32Bptr) {
 ; CGSCC: Function Attrs: nofree nosync nounwind willreturn memory(none)
 ; CGSCC-LABEL: define {{[^@]+}}@undef_then_null
 ; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR2]] {
@@ -847,12 +837,12 @@ define internal i1 @undef_then_null(i1 %c, i32* %i32Aptr, i32* %i32Bptr) {
 ; CGSCC:       b:
 ; CGSCC-NEXT:    ret i1 false
 ;
-  %cmp1 = icmp eq i32* %i32Aptr, %i32Bptr
+  %cmp1 = icmp eq ptr %i32Aptr, %i32Bptr
   %cmp2 = icmp eq i1 %cmp1, false
   %or = or i1 %cmp2, %c
   br i1 %or, label %a, label %b
 a:
-  %r2 = call i1 @undef_then_null(i1 false, i32* null, i32* null)
+  %r2 = call i1 @undef_then_null(i1 false, ptr null, ptr null)
   ret i1 %r2
 b:
   ret i1 %cmp2
@@ -927,28 +917,28 @@ define i1 @icmp() {
 ; CHECK-SAME: () #[[ATTR1]] {
 ; CHECK-NEXT:    ret i1 true
 ;
-  %c = icmp eq i8* null, null
+  %c = icmp eq ptr null, null
   ret i1 %c
 }
 
-define void @test_callee_is_undef(void (i32)* %fn) {
+define void @test_callee_is_undef(ptr %fn) {
 ; TUNIT-LABEL: define {{[^@]+}}@test_callee_is_undef
-; TUNIT-SAME: (void (i32)* nocapture nofree [[FN:%.*]]) {
+; TUNIT-SAME: (ptr nocapture nofree [[FN:%.*]]) {
 ; TUNIT-NEXT:    call void @callee_is_undef()
-; TUNIT-NEXT:    call void @unknown_calle_arg_is_undef(void (i32)* nocapture nofree [[FN]])
+; TUNIT-NEXT:    call void @unknown_calle_arg_is_undef(ptr nocapture nofree [[FN]])
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC-LABEL: define {{[^@]+}}@test_callee_is_undef
-; CGSCC-SAME: (void (i32)* nocapture nofree [[FN:%.*]]) {
+; CGSCC-SAME: (ptr nocapture nofree [[FN:%.*]]) {
 ; CGSCC-NEXT:    call void @callee_is_undef()
-; CGSCC-NEXT:    call void @unknown_calle_arg_is_undef(void (i32)* nocapture nofree noundef nonnull [[FN]])
+; CGSCC-NEXT:    call void @unknown_calle_arg_is_undef(ptr nocapture nofree noundef nonnull [[FN]])
 ; CGSCC-NEXT:    ret void
 ;
-  call void @callee_is_undef(void ()* undef)
-  call void @unknown_calle_arg_is_undef(void (i32)* %fn, i32 undef)
+  call void @callee_is_undef(ptr undef)
+  call void @unknown_calle_arg_is_undef(ptr %fn, i32 undef)
   ret void
 }
-define internal void @callee_is_undef(void ()* %fn) {
+define internal void @callee_is_undef(ptr %fn) {
 ;
 ; CHECK-LABEL: define {{[^@]+}}@callee_is_undef() {
 ; CHECK-NEXT:    call void poison()
@@ -957,10 +947,10 @@ define internal void @callee_is_undef(void ()* %fn) {
   call void %fn()
   ret void
 }
-define internal void @unknown_calle_arg_is_undef(void (i32)* %fn, i32 %arg) {
+define internal void @unknown_calle_arg_is_undef(ptr %fn, i32 %arg) {
 ;
 ; CHECK-LABEL: define {{[^@]+}}@unknown_calle_arg_is_undef
-; CHECK-SAME: (void (i32)* nocapture nofree noundef nonnull [[FN:%.*]]) {
+; CHECK-SAME: (ptr nocapture nofree noundef nonnull [[FN:%.*]]) {
 ; CHECK-NEXT:    call void [[FN]](i32 undef)
 ; CHECK-NEXT:    ret void
 ;
@@ -971,51 +961,48 @@ define internal void @unknown_calle_arg_is_undef(void (i32)* %fn, i32 %arg) {
 ; Taken from 50683
 ; {{{
 
- at g = internal constant { [2 x i8*] } { [2 x i8*] [i8* bitcast (void (i8***)* @f1 to i8*), i8* bitcast (void (i1 (i8*)*)* @f2 to i8*)] }
+ at g = internal constant { [2 x ptr] } { [2 x ptr] [ptr @f1, ptr @f2] }
 
-define internal void @f1(i8*** %a) {
+define internal void @f1(ptr %a) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; TUNIT-LABEL: define {{[^@]+}}@f1
-; TUNIT-SAME: (i8*** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR3]] {
+; TUNIT-SAME: (ptr nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR3]] {
 ; TUNIT-NEXT:  entry:
-; TUNIT-NEXT:    store i8** getelementptr inbounds ({ [2 x i8*] }, { [2 x i8*] }* @g, i32 0, i32 0, i32 0), i8*** [[A]], align 8
+; TUNIT-NEXT:    store ptr @g, ptr [[A]], align 8
 ; TUNIT-NEXT:    ret void
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: write)
 ; CGSCC-LABEL: define {{[^@]+}}@f1
-; CGSCC-SAME: (i8*** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR4]] {
+; CGSCC-SAME: (ptr nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR4]] {
 ; CGSCC-NEXT:  entry:
-; CGSCC-NEXT:    store i8** getelementptr inbounds ({ [2 x i8*] }, { [2 x i8*] }* @g, i32 0, i32 0, i32 0), i8*** [[A]], align 8
+; CGSCC-NEXT:    store ptr @g, ptr [[A]], align 8
 ; CGSCC-NEXT:    ret void
 ;
 entry:
-  %x = getelementptr { [2 x i8*] }, { [2 x i8*] }* @g, i32 0, i32 0, i32 0
-  store i8** %x , i8*** %a, align 8
+  store ptr @g , ptr %a, align 8
   ret void
 }
 
-define internal void @f2(i1 (i8*)* %a) {
+define internal void @f2(ptr %a) {
 ; CHECK-LABEL: define {{[^@]+}}@f2
-; CHECK-SAME: (i1 (i8*)* [[A:%.*]]) {
+; CHECK-SAME: (ptr [[A:%.*]]) {
 ; CHECK-NEXT:  cont461:
-; CHECK-NEXT:    [[C1:%.*]] = bitcast i1 (i8*)* [[A]] to i8*
-; CHECK-NEXT:    call void @f3(i8* [[C1]], i1 (i8*)* nocapture nofree [[A]])
+; CHECK-NEXT:    call void @f3(ptr [[A]], ptr nocapture nofree [[A]])
 ; CHECK-NEXT:    ret void
 ;
 cont461:
-  %c1 = bitcast i1 (i8*)* %a to i8*
-  call void @f3(i8* %c1, i1 (i8*)* %a)
+  call void @f3(ptr %a, ptr %a)
   ret void
 }
 
-define internal void @f3(i8* %a1, i1 (i8*)* %a) {
+define internal void @f3(ptr %a1, ptr %a) {
 ; CHECK-LABEL: define {{[^@]+}}@f3
-; CHECK-SAME: (i8* [[A1:%.*]], i1 (i8*)* nocapture nofree [[A:%.*]]) {
+; CHECK-SAME: (ptr [[A1:%.*]], ptr nocapture nofree [[A:%.*]]) {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[CALL20:%.*]] = call i1 @f9()
 ; CHECK-NEXT:    br i1 [[CALL20]], label [[LAND_LHS_TRUE:%.*]], label [[IF_END40:%.*]]
 ; CHECK:       land.lhs.true:
-; CHECK-NEXT:    [[TMP0:%.*]] = call i1 [[A]](i8* [[A1]])
+; CHECK-NEXT:    [[TMP0:%.*]] = call i1 [[A]](ptr [[A1]])
 ; CHECK-NEXT:    br label [[IF_END40]]
 ; CHECK:       if.end40:
 ; CHECK-NEXT:    ret void
@@ -1025,7 +1012,7 @@ entry:
   br i1 %call20, label %land.lhs.true, label %if.end40
 
 land.lhs.true:
-  call i1 %a(i8* %a1)
+  call i1 %a(ptr %a1)
   br label %if.end40
 
 if.end40:
@@ -1071,7 +1058,7 @@ define internal i1 @cmp_null_after_cast(i32 %a, i8 %b) {
 }
 
 
-declare i8* @m()
+declare ptr @m()
 
 define i32 @test(i1 %c) {
 ; CHECK-LABEL: define {{[^@]+}}@test
@@ -1093,8 +1080,8 @@ define internal i32 @ctx_test1(i1 %c) {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C]], label [[THEN:%.*]], label [[JOIN:%.*]]
 ; CHECK:       then:
-; CHECK-NEXT:    [[M:%.*]] = tail call i8* @m()
-; CHECK-NEXT:    [[I:%.*]] = ptrtoint i8* [[M]] to i64
+; CHECK-NEXT:    [[M:%.*]] = tail call ptr @m()
+; CHECK-NEXT:    [[I:%.*]] = ptrtoint ptr [[M]] to i64
 ; CHECK-NEXT:    br label [[JOIN]]
 ; CHECK:       join:
 ; CHECK-NEXT:    [[PHI:%.*]] = phi i64 [ [[I]], [[THEN]] ], [ undef, [[ENTRY:%.*]] ]
@@ -1105,8 +1092,8 @@ entry:
   br i1 %c, label %then, label %join
 
 then:
-  %m = tail call i8* @m()
-  %i = ptrtoint i8* %m to i64
+  %m = tail call ptr @m()
+  %i = ptrtoint ptr %m to i64
   br label %join
 
 join:
@@ -1121,8 +1108,8 @@ define internal i32 @ctx_test2(i1 %c) {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C]], label [[THEN:%.*]], label [[JOIN:%.*]]
 ; CHECK:       then:
-; CHECK-NEXT:    [[M:%.*]] = tail call i8* @m()
-; CHECK-NEXT:    [[I:%.*]] = ptrtoint i8* [[M]] to i32
+; CHECK-NEXT:    [[M:%.*]] = tail call ptr @m()
+; CHECK-NEXT:    [[I:%.*]] = ptrtoint ptr [[M]] to i32
 ; CHECK-NEXT:    br label [[JOIN]]
 ; CHECK:       join:
 ; CHECK-NEXT:    [[PHI:%.*]] = phi i32 [ [[I]], [[THEN]] ], [ undef, [[ENTRY:%.*]] ]
@@ -1133,8 +1120,8 @@ entry:
   br i1 %c, label %then, label %join
 
 then:
-  %m = tail call i8* @m()
-  %i = ptrtoint i8* %m to i32
+  %m = tail call ptr @m()
+  %i = ptrtoint ptr %m to i32
   br label %join
 
 join:
@@ -1201,14 +1188,14 @@ f:
   ret i1 %p
 }
 
-declare i8* @unknown()
+declare ptr @unknown()
 define internal i8 @dead_ret() {
 ; CHECK-LABEL: define {{[^@]+}}@dead_ret() {
-; CHECK-NEXT:    [[R:%.*]] = call i8* @unknown()
+; CHECK-NEXT:    [[R:%.*]] = call ptr @unknown()
 ; CHECK-NEXT:    ret i8 undef
 ;
-  %r = call i8* @unknown()
-  %l = load i8, i8* %r
+  %r = call ptr @unknown()
+  %l = load i8, ptr %r
   ret i8 %l
 }
 
@@ -1221,16 +1208,16 @@ define void @dead_ret_caller() {
   ret void
 }
 
-declare void @llvm.memcpy(i8* %dest, i8* %src, i32 %len, i1 %isvolatile)
+declare void @llvm.memcpy(ptr %dest, ptr %src, i32 %len, i1 %isvolatile)
 define internal i8 @memcpy_uses_store(i8 %arg) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn
 ; TUNIT-LABEL: define {{[^@]+}}@memcpy_uses_store
 ; TUNIT-SAME: (i8 [[ARG:%.*]]) #[[ATTR2]] {
 ; TUNIT-NEXT:    [[SRC:%.*]] = alloca i8, align 1
 ; TUNIT-NEXT:    [[DST:%.*]] = alloca i8, align 1
-; TUNIT-NEXT:    store i8 [[ARG]], i8* [[SRC]], align 1
-; TUNIT-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[DST]], i8* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[SRC]], i32 noundef 1, i1 noundef false) #[[ATTR11:[0-9]+]]
-; TUNIT-NEXT:    [[L:%.*]] = load i8, i8* [[DST]], align 1
+; TUNIT-NEXT:    store i8 [[ARG]], ptr [[SRC]], align 1
+; TUNIT-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[DST]], ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[SRC]], i32 noundef 1, i1 noundef false) #[[ATTR11:[0-9]+]]
+; TUNIT-NEXT:    [[L:%.*]] = load i8, ptr [[DST]], align 1
 ; TUNIT-NEXT:    ret i8 [[L]]
 ;
 ; CGSCC: Function Attrs: nofree norecurse nosync nounwind willreturn
@@ -1238,16 +1225,16 @@ define internal i8 @memcpy_uses_store(i8 %arg) {
 ; CGSCC-SAME: (i8 [[ARG:%.*]]) #[[ATTR7:[0-9]+]] {
 ; CGSCC-NEXT:    [[SRC:%.*]] = alloca i8, align 1
 ; CGSCC-NEXT:    [[DST:%.*]] = alloca i8, align 1
-; CGSCC-NEXT:    store i8 [[ARG]], i8* [[SRC]], align 1
-; CGSCC-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[DST]], i8* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[SRC]], i32 noundef 1, i1 noundef false) #[[ATTR14:[0-9]+]]
-; CGSCC-NEXT:    [[L:%.*]] = load i8, i8* [[DST]], align 1
+; CGSCC-NEXT:    store i8 [[ARG]], ptr [[SRC]], align 1
+; CGSCC-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[DST]], ptr noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[SRC]], i32 noundef 1, i1 noundef false) #[[ATTR14:[0-9]+]]
+; CGSCC-NEXT:    [[L:%.*]] = load i8, ptr [[DST]], align 1
 ; CGSCC-NEXT:    ret i8 [[L]]
 ;
   %src = alloca i8
   %dst = alloca i8
-  store i8 %arg, i8* %src
-  call void @llvm.memcpy(i8* %dst, i8* %src, i32 1, i1 false)
-  %l = load i8, i8* %dst
+  store i8 %arg, ptr %src
+  call void @llvm.memcpy(ptr %dst, ptr %src, i32 1, i1 false)
+  %l = load i8, ptr %dst
   ret i8 %l
 }
 
@@ -1278,8 +1265,8 @@ define i32 @test_speculatable_expr() norecurse {
 ; TUNIT-NEXT:    [[STACK:%.*]] = alloca i32, align 4
 ; TUNIT-NEXT:    [[SPEC_RESULT:%.*]] = call i32 @speculatable()
 ; TUNIT-NEXT:    [[PLUS1:%.*]] = add i32 [[SPEC_RESULT]], 1
-; TUNIT-NEXT:    store i32 [[PLUS1]], i32* [[STACK]], align 4
-; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, i32* [[STACK]], align 4
+; TUNIT-NEXT:    store i32 [[PLUS1]], ptr [[STACK]], align 4
+; TUNIT-NEXT:    [[TMP1:%.*]] = load i32, ptr [[STACK]], align 4
 ; TUNIT-NEXT:    [[RSPEC:%.*]] = call i32 @ret_speculatable_expr(i32 [[TMP1]]) #[[ATTR12:[0-9]+]]
 ; TUNIT-NEXT:    ret i32 [[RSPEC]]
 ;
@@ -1289,25 +1276,25 @@ define i32 @test_speculatable_expr() norecurse {
 ; CGSCC-NEXT:    [[STACK:%.*]] = alloca i32, align 4
 ; CGSCC-NEXT:    [[SPEC_RESULT:%.*]] = call i32 @speculatable()
 ; CGSCC-NEXT:    [[PLUS1:%.*]] = add i32 [[SPEC_RESULT]], 1
-; CGSCC-NEXT:    store i32 [[PLUS1]], i32* [[STACK]], align 4
+; CGSCC-NEXT:    store i32 [[PLUS1]], ptr [[STACK]], align 4
 ; CGSCC-NEXT:    [[RSPEC:%.*]] = call i32 @ret_speculatable_expr(i32 [[PLUS1]])
 ; CGSCC-NEXT:    ret i32 [[RSPEC]]
 ;
   %stack = alloca i32
   %spec_result = call i32 @speculatable()
   %plus1 = add i32 %spec_result, 1
-  store i32 %plus1, i32* %stack
-  %rspec = call i32 @ret_speculatable_expr(i32* %stack, i32 13)
+  store i32 %plus1, ptr %stack
+  %rspec = call i32 @ret_speculatable_expr(ptr %stack, i32 13)
   ret i32 %rspec
 }
 
-define internal i32 @ret_speculatable_expr(i32* %mem, i32 %a2) {
+define internal i32 @ret_speculatable_expr(ptr %mem, i32 %a2) {
 ; TUNIT: Function Attrs: nofree norecurse nosync nounwind willreturn memory(argmem: read)
 ; TUNIT-LABEL: define {{[^@]+}}@ret_speculatable_expr
 ; TUNIT-SAME: (i32 [[TMP0:%.*]]) #[[ATTR7:[0-9]+]] {
 ; TUNIT-NEXT:    [[MEM_PRIV:%.*]] = alloca i32, align 4
-; TUNIT-NEXT:    store i32 [[TMP0]], i32* [[MEM_PRIV]], align 4
-; TUNIT-NEXT:    [[L:%.*]] = load i32, i32* [[MEM_PRIV]], align 4
+; TUNIT-NEXT:    store i32 [[TMP0]], ptr [[MEM_PRIV]], align 4
+; TUNIT-NEXT:    [[L:%.*]] = load i32, ptr [[MEM_PRIV]], align 4
 ; TUNIT-NEXT:    [[MUL:%.*]] = mul i32 [[L]], 13
 ; TUNIT-NEXT:    [[ADD:%.*]] = add i32 [[MUL]], 7
 ; TUNIT-NEXT:    ret i32 [[ADD]]
@@ -1316,13 +1303,13 @@ define internal i32 @ret_speculatable_expr(i32* %mem, i32 %a2) {
 ; CGSCC-LABEL: define {{[^@]+}}@ret_speculatable_expr
 ; CGSCC-SAME: (i32 [[TMP0:%.*]]) #[[ATTR10:[0-9]+]] {
 ; CGSCC-NEXT:    [[MEM_PRIV:%.*]] = alloca i32, align 4
-; CGSCC-NEXT:    store i32 [[TMP0]], i32* [[MEM_PRIV]], align 4
-; CGSCC-NEXT:    [[L:%.*]] = load i32, i32* [[MEM_PRIV]], align 4
+; CGSCC-NEXT:    store i32 [[TMP0]], ptr [[MEM_PRIV]], align 4
+; CGSCC-NEXT:    [[L:%.*]] = load i32, ptr [[MEM_PRIV]], align 4
 ; CGSCC-NEXT:    [[MUL:%.*]] = mul i32 [[L]], 13
 ; CGSCC-NEXT:    [[ADD:%.*]] = add i32 [[MUL]], 7
 ; CGSCC-NEXT:    ret i32 [[ADD]]
 ;
-  %l = load i32, i32* %mem
+  %l = load i32, ptr %mem
   %mul = mul i32 %l, %a2
   %add = add i32 %mul, 7
   ret i32 %add

diff  --git a/llvm/test/Transforms/Attributor/wrapper.ll b/llvm/test/Transforms/Attributor/wrapper.ll
index 34af977467961..7ed91ce8d4b6b 100644
--- a/llvm/test/Transforms/Attributor/wrapper.ll
+++ b/llvm/test/Transforms/Attributor/wrapper.ll
@@ -14,8 +14,8 @@
 define linkonce i32 @inner1() {
 entry:
   %a = alloca i32
-  store i32 1, i32* %a
-  %b = load i32, i32* %a
+  store i32 1, ptr %a
+  %b = load i32, ptr %a
   ret i32 %b
 }
 
@@ -66,20 +66,20 @@ entry:
 define linkonce i32 @inner3(i32) {
 entry:
   %1 = alloca i32
-  store i32 %0, i32* %1
+  store i32 %0, ptr %1
   br label %2
 2:
-  %3 = load i32, i32* %1
+  %3 = load i32, ptr %1
   %4 = icmp slt i32 %3, 4
   br i1 %4, label %5, label %9
 5:
-  %6 = load i32, i32* %1
+  %6 = load i32, ptr %1
   %7 = add nsw i32 %6, 1
   %8 = call i32 @inner3(i32 %7)
-  store i32 %8, i32* %1
+  store i32 %8, ptr %1
   br label %2
 9:
-  %10 = load i32, i32* %1
+  %10 = load i32, ptr %1
   ret i32 %10
 }
 


        


More information about the llvm-commits mailing list