[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